vmm: Fix use-after-free in load_elf()
[akaros.git] / user / perfmon / events / intel_ivbep_unc_ha_events.h
1 /*
2  * Copyright (c) 2014 Google Inc. All rights reserved
3  * Contributed by Stephane Eranian <eranian@gmail.com>
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to deal
7  * in the Software without restriction, including without limitation the rights
8  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9  * of the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
17  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
20  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * This file is part of libpfm, a performance monitoring support library for
23  * applications on Linux.
24  *
25  * This file has been automatically generated.
26  *
27  * PMU: ivbep_unc_ha (Intel IvyBridge-EP HA uncore PMU)
28  */
29
30 static const intel_x86_umask_t ivbep_unc_h_conflict_cycles[]={
31   { .uname = "CONFLICT",
32     .udesc  = "Number of cycles that we are handling conflicts",
33     .ucode  = 0x200,
34   },
35   { .uname = "LAST",
36     .udesc  = "Count every last conflictor in conflict chain. Can be used to compute average conflict chain length",
37     .ucode  = 0x400,
38   },
39   { .uname = "CMP_FWDS",
40     .udesc  = "Count the number of cmp_fwd. This gives the number of late conflicts",
41     .ucode  = 0x1000,
42   },
43   { .uname = "ACKCNFLTS",
44     .udesc  = "Count the number Acknflts",
45     .ucode  = 0x800,
46   },
47 };
48
49 static const intel_x86_umask_t ivbep_unc_h_directory_lookup[]={
50   { .uname = "NO_SNP",
51     .udesc  = "Snoop not needed",
52     .ucode  = 0x200,
53   },
54   { .uname = "SNOOP",
55     .udesc  = "SNooop needed",
56     .ucode  = 0x100,
57   },
58 };
59
60 static const intel_x86_umask_t ivbep_unc_h_bypass_imc[]={
61   { .uname = "TAKEN",
62     .udesc  = "Bypass taken",
63     .ucode  = 0x200,
64   },
65   { .uname = "NOT_TAKEN",
66     .udesc  = "Bypass not taken",
67     .ucode  = 0x100,
68   },
69 };
70
71 static const intel_x86_umask_t ivbep_unc_h_directory_update[]={
72   { .uname = "ANY",
73     .udesc  = "Counts any directory update",
74     .ucode  = 0x300,
75     .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
76   },
77   { .uname = "CLEAR",
78     .udesc  = "Directory clears",
79     .ucode  = 0x200,
80     .uflags = INTEL_X86_NCOMBO,
81   },
82   { .uname = "SET",
83     .udesc  = "Directory set",
84     .ucode  = 0x100,
85     .uflags = INTEL_X86_NCOMBO,
86   },
87 };
88
89 static const intel_x86_umask_t ivbep_unc_h_igr_no_credit_cycles[]={
90   { .uname = "AD_QPI0",
91     .udesc  = "AD to QPI link 0",
92     .ucode  = 0x100,
93     .uflags = INTEL_X86_NCOMBO,
94   },
95   { .uname = "AD_QPI1",
96     .udesc  = "AD to QPI link 1",
97     .ucode  = 0x200,
98     .uflags = INTEL_X86_NCOMBO,
99   },
100   { .uname = "BL_QPI0",
101     .udesc  = "BL to QPI link 0",
102     .ucode  = 0x400,
103     .uflags = INTEL_X86_NCOMBO,
104   },
105   { .uname = "BL_QPI1",
106     .udesc  = "BL to QPI link 1",
107     .ucode  = 0x800,
108     .uflags = INTEL_X86_NCOMBO,
109   },
110 };
111
112 static const intel_x86_umask_t ivbep_unc_h_imc_writes[]={
113   { .uname = "ALL",
114     .udesc  = "Counts all writes",
115     .ucode  = 0xf00,
116     .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
117   },
118   { .uname = "FULL",
119     .udesc  = "Counts full line non ISOCH",
120     .ucode  = 0x100,
121     .uflags = INTEL_X86_NCOMBO,
122   },
123   { .uname = "FULL_ISOCH",
124     .udesc  = "Counts ISOCH full line",
125     .ucode  = 0x400,
126     .uflags = INTEL_X86_NCOMBO,
127   },
128   { .uname = "PARTIAL",
129     .udesc  = "Counts partial non-ISOCH",
130     .ucode  = 0x200,
131     .uflags = INTEL_X86_NCOMBO,
132   },
133   { .uname = "PARTIAL_ISOCH",
134     .udesc  = "Counts ISOCH partial",
135     .ucode  = 0x800,
136     .uflags = INTEL_X86_NCOMBO,
137   },
138 };
139
140 static const intel_x86_umask_t ivbep_unc_h_imc_reads[]={
141   { .uname = "NORMAL",
142     .udesc  = "Normal priority",
143     .ucode  = 0x100,
144     .uflags = INTEL_X86_DFL,
145   },
146 };
147
148 static const intel_x86_umask_t ivbep_unc_h_requests[]={
149   { .uname = "READS",
150     .udesc  = "Counts incoming read requests. Good proxy for LLC read misses, incl. RFOs",
151     .ucode  = 0x300,
152     .uflags = INTEL_X86_NCOMBO,
153   },
154   { .uname = "READS_LOCAL",
155     .udesc  = "Counts incoming read requests coming from local socket. Good proxy for LLC read misses, incl. RFOs from the local socket",
156     .ucode  = 0x100,
157     .uflags = INTEL_X86_NCOMBO,
158   },
159   { .uname = "READS_REMOTE",
160     .udesc  = "Counts incoming read requests coming from remote socket. Good proxy for LLC read misses, incl. RFOs from the remote socket",
161     .ucode  = 0x200,
162     .uflags = INTEL_X86_NCOMBO,
163   },
164   { .uname = "WRITES",
165     .udesc  = "Counts incoming writes",
166     .ucode  = 0xc00,
167     .uflags = INTEL_X86_NCOMBO,
168   },
169   { .uname = "WRITES_LOCAL",
170     .udesc  = "Counts incoming writes from local socket",
171     .ucode  = 0x400,
172     .uflags = INTEL_X86_NCOMBO,
173   },
174   { .uname = "WRITES_REMOTE",
175     .udesc  = "Counts incoming writes from remote socket",
176     .ucode  = 0x800,
177     .uflags = INTEL_X86_NCOMBO,
178   },
179   { .uname = "INVITOE_LOCAL",
180     .udesc  = "Counts InvItoE coming from local socket",
181     .ucode  = 0x1000,
182     .uflags = INTEL_X86_NCOMBO,
183   },
184   { .uname = "INVITOE_REMOTE",
185     .udesc  = "Counts InvItoE coming from remote socket",
186     .ucode  = 0x2000,
187     .uflags = INTEL_X86_NCOMBO,
188   }
189 };
190
191 static const intel_x86_umask_t ivbep_unc_h_rpq_cycles_no_reg_credits[]={
192   { .uname = "CHN0",
193     .udesc  = "Channel 0",
194     .ucode  = 0x100,
195     .uflags = INTEL_X86_NCOMBO,
196   },
197   { .uname = "CHN1",
198     .udesc  = "Channel 1",
199     .ucode  = 0x200,
200     .uflags = INTEL_X86_NCOMBO,
201   },
202   { .uname = "CHN2",
203     .udesc  = "channel 2",
204     .ucode  = 0x400,
205     .uflags = INTEL_X86_NCOMBO,
206   },
207   { .uname = "CHN3",
208     .udesc  = "Chanell 3",
209     .ucode  = 0x800,
210     .uflags = INTEL_X86_NCOMBO,
211   },
212 };
213
214 static const intel_x86_umask_t ivbep_unc_h_tad_requests_g0[]={
215   { .uname = "REGION0",
216     .udesc  = "Counts for TAD Region 0",
217     .ucode  = 0x100,
218     .uflags = INTEL_X86_NCOMBO,
219   },
220   { .uname = "REGION1",
221     .udesc  = "Counts for TAD Region 1",
222     .ucode  = 0x200,
223     .uflags = INTEL_X86_NCOMBO,
224   },
225   { .uname = "REGION2",
226     .udesc  = "Counts for TAD Region 2",
227     .ucode  = 0x400,
228     .uflags = INTEL_X86_NCOMBO,
229   },
230   { .uname = "REGION3",
231     .udesc  = "Counts for TAD Region 3",
232     .ucode  = 0x800,
233     .uflags = INTEL_X86_NCOMBO,
234   },
235   { .uname = "REGION4",
236     .udesc  = "Counts for TAD Region 4",
237     .ucode  = 0x1000,
238     .uflags = INTEL_X86_NCOMBO,
239   },
240   { .uname = "REGION5",
241     .udesc  = "Counts for TAD Region 5",
242     .ucode  = 0x2000,
243     .uflags = INTEL_X86_NCOMBO,
244   },
245   { .uname = "REGION6",
246     .udesc  = "Counts for TAD Region 6",
247     .ucode  = 0x4000,
248     .uflags = INTEL_X86_NCOMBO,
249   },
250   { .uname = "REGION7",
251     .udesc  = "Counts for TAD Region 7",
252     .ucode  = 0x8000,
253     .uflags = INTEL_X86_NCOMBO,
254   },
255 };
256
257 static const intel_x86_umask_t ivbep_unc_h_tad_requests_g1[]={
258   { .uname = "REGION8",
259     .udesc  = "Counts for TAD Region 8",
260     .ucode  = 0x100,
261     .uflags = INTEL_X86_NCOMBO,
262   },
263   { .uname = "REGION9",
264     .udesc  = "Counts for TAD Region 9",
265     .ucode  = 0x200,
266     .uflags = INTEL_X86_NCOMBO,
267   },
268   { .uname = "REGION10",
269     .udesc  = "Counts for TAD Region 10",
270     .ucode  = 0x400,
271     .uflags = INTEL_X86_NCOMBO,
272   },
273   { .uname = "REGION11",
274     .udesc  = "Counts for TAD Region 11",
275     .ucode  = 0x800,
276     .uflags = INTEL_X86_NCOMBO,
277   },
278 };
279
280 static const intel_x86_umask_t ivbep_unc_h_snoop_resp[]={
281   { .uname = "RSPI",
282     .udesc  = "Filters for snoop responses of RspI. RspI is returned when the remote cache does not have the data or when the remote cache silently evicts data (e.g. RFO hit non-modified line)",
283     .ucode  = 0x100,
284   },
285   { .uname = "RSPS",
286     .udesc  = "Filters for snoop responses of RspS. RspS is returned when the remote cache has the data but is not forwarding it. It is a way to let the requesting socket know that it cannot allocate the data in E-state",
287     .ucode  = 0x200,
288   },
289   { .uname = "RSPIFWD",
290     .udesc  = "Filters for snoop responses of RspIFwd. RspIFwd is returned when the remote cache agent forwards data and the requesting agent is able to acquire the data in E or M state. This is commonly returned with RFO transacations. It can be either HitM or HitFE",
291     .ucode  = 0x400,
292   },
293   { .uname = "RSPSFWD",
294     .udesc  = "Filters for snoop responses of RspSFwd. RspSFwd is returned when the remote cache agent forwards data  but holds on to its current copy. This is common for data and code reads that hit in a remote socket in E or F state",
295     .ucode  = 0x800,
296   },
297   { .uname = "RSP_WB",
298     .udesc  = "Filters for snoop responses of RspIWB or RspSWB. This is returned when a non-RFO requests hits in M-state. Data and code reads can return either RspIWB or RspSWB depending on how the system has been configured. InvItoE transactions will also return RspIWB because they must acquire ownership",
299     .ucode  = 0x1000,
300   },
301   { .uname = "RSP_FWD_WB",
302     .udesc  = "Filters for snoop responses of RspxFwdxWB. This snoop response is only used in 4s systems. It is used when a snoop HITM in a remote caching agent and it directly forwards data to a requester and simultaneously returns data to the home to be written back to memory",
303     .ucode  = 0x2000,
304   },
305   { .uname = "RSPCNFLCT",
306     .udesc  = "Filters for snoop responses of RspConflict. This is returned when a snoop finds an existing outstanding transaction in a remote caching agent when it CMAs that caching agent. This triggers the conflict resolution hardware. This covers both RspConflct and RspCnflctWBI",
307     .ucode  = 0x4000,
308   },
309 };
310
311 static const intel_x86_umask_t ivbep_unc_h_txr_ad[]={
312   { .uname = "NDR",
313     .udesc  = "Counts non-data responses",
314     .ucode  = 0x100,
315     .uflags = INTEL_X86_NCOMBO,
316   },
317   { .uname = "SNP",
318     .udesc  = "Counts outbound snoops send on the ring",
319     .ucode  = 0x200,
320     .uflags = INTEL_X86_NCOMBO,
321   },
322 };
323
324 static const intel_x86_umask_t ivbep_unc_h_txr_ad_cycles_full[]={
325   { .uname = "ALL",
326     .udesc  = "Counts cycles full from both schedulers",
327     .ucode  = 0x300,
328     .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
329   },
330   { .uname = "SCHED0",
331     .udesc  = "Counts cycles full from scheduler bank 0",
332     .ucode  = 0x100,
333     .uflags = INTEL_X86_NCOMBO,
334   },
335   { .uname = "SCHED1",
336     .udesc  = "Counts cycles full from scheduler bank 1",
337     .ucode  = 0x200,
338     .uflags = INTEL_X86_NCOMBO,
339   },
340 };
341
342 static const intel_x86_umask_t ivbep_unc_h_txr_bl_occupancy[]={
343   { .uname = "SCHED0",
344     .udesc  = "Counts cycles full from scheduler bank 0",
345     .ucode  = 0x100,
346     .uflags = INTEL_X86_NCOMBO,
347   },
348   { .uname = "SCHED1",
349     .udesc  = "Counts cycles full from scheduler bank 1",
350     .ucode  = 0x200,
351     .uflags = INTEL_X86_NCOMBO,
352   },
353 };
354
355 static const intel_x86_umask_t ivbep_unc_h_txr_ak_cycles_full[]={
356   { .uname = "ALL",
357     .udesc  = "Counts cycles from both schedulers",
358     .ucode  = 0x300,
359     .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
360   },
361   { .uname = "SCHED0",
362     .udesc  = "Counts cycles from scheduler bank 0",
363     .ucode  = 0x100,
364     .uflags = INTEL_X86_NCOMBO,
365   },
366   { .uname = "SCHED1",
367     .udesc  = "Counts cycles from scheduler bank 1",
368     .ucode  = 0x200,
369     .uflags = INTEL_X86_NCOMBO,
370   },
371 };
372
373 static const intel_x86_umask_t ivbep_unc_h_txr_bl[]={
374   { .uname = "DRS_CACHE",
375     .udesc  = "Counts data being sent to the cache",
376     .ucode  = 0x100,
377     .uflags = INTEL_X86_NCOMBO,
378   },
379   { .uname = "DRS_CORE",
380     .udesc  = "Counts data being sent directly to the requesting core",
381     .ucode  = 0x200,
382     .uflags = INTEL_X86_NCOMBO,
383   },
384   { .uname = "DRS_QPI",
385     .udesc  = "Counts data being sent to a remote socket over QPI",
386     .ucode  = 0x400,
387     .uflags = INTEL_X86_NCOMBO,
388   },
389 };
390
391 static const intel_x86_umask_t ivbep_unc_h_txr_bl_cycles_full[]={
392   { .uname = "ALL",
393     .udesc  = "BL Egress Full",
394     .ucode  = 0x300,
395     .uflags = INTEL_X86_NCOMBO,
396   },
397   { .uname = "SCHED0",
398     .udesc  = "BL Egress Full",
399     .ucode  = 0x100,
400     .uflags = INTEL_X86_NCOMBO,
401   },
402   { .uname = "SCHED1",
403     .udesc  = "BL Egress Full",
404     .ucode  = 0x200,
405     .uflags = INTEL_X86_NCOMBO,
406   },
407 };
408
409 #if 0
410 static const intel_x86_umask_t ivbep_unc_h_addr_opc_match[]={
411   { .uname = "FILT",
412     .udesc  = "Number of addr and opcode matches (opc via opc= or address via addr= modifiers)",
413     .ucode  = 0x300,
414     .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL | INTEL_X86_ADDR,
415   },
416 };
417 #endif
418
419 static const intel_x86_umask_t ivbep_unc_h_bt_occupancy[]={
420   { .uname = "LOCAL",
421     .udesc  = "Local",
422     .ucode  = 0x100,
423   },
424   { .uname = "REMOTE",
425     .udesc  = "Remote",
426     .ucode  = 0x200,
427   },
428   { .uname = "READS_REMOTE",
429     .udesc  = "Reads remote",
430     .ucode  = 0x800,
431   },
432   { .uname = "WRITES_LOCAL",
433     .udesc  = "Writes local",
434     .ucode  = 0x1000,
435   },
436   { .uname = "WRITES_REMOTE",
437     .udesc  = "Writes remote",
438     .ucode  = 0x2000,
439   },
440 };
441
442 static const intel_x86_umask_t ivbep_unc_h_bt_to_ht_not_issued[]={
443   { .uname = "INCOMING_SNP_HAZARD",
444     .udesc  = "Number of cycles unable to issue from BT due to incoming snoop hazard",
445     .ucode  = 0x200,
446   },
447   { .uname = "INCOMING_BL_HAZARD",
448     .udesc  = "Number of cycles unable to issue from BT due to incoming BL data hazard",
449     .ucode  = 0x400,
450   }
451 };
452
453 static const intel_x86_umask_t ivbep_unc_h_osb[]={
454   { .uname = "REMOTE",
455     .udesc  = "Remote",
456     .ucode  = 0x800,
457   },
458   { .uname = "READS_LOCAL",
459     .udesc  = "Local reads",
460     .ucode  = 0x200,
461   },
462   { .uname = "INVITOE_LOCAL",
463     .udesc  = "Local InvItoE",
464     .ucode  = 0x400,
465   }
466 };
467 static const intel_x86_umask_t ivbep_unc_h_osb_edr[]={
468   { .uname = "ALL",
469     .udesc  = "All data returns",
470     .ucode  = 0x100,
471     .uflags = INTEL_X86_DFL | INTEL_X86_NCOMBO,
472   },
473   { .uname = "READS_LOCAL_I",
474     .udesc  = "Reads to local I",
475     .ucode  = 0x200,
476   },
477   { .uname = "READS_REMOTE_I",
478     .udesc  = "Reads to remote I",
479     .ucode  = 0x400,
480   },
481   { .uname = "READS_LOCAL_S",
482     .udesc  = "Reads to local S",
483     .ucode  = 0x800,
484   },
485   { .uname = "READS_REMOTE_S",
486     .udesc  = "Reads to remote S",
487     .ucode  = 0x1000,
488   }
489 };
490
491 static const intel_x86_umask_t ivbep_unc_h_ring_ad_used[]={
492   { .uname = "CCW_VR0_EVEN",
493     .udesc  = "Counter-clockwise and even ring polarity on virtual ring 0",
494     .ucode  = 0x400,
495   },
496   { .uname = "CCW_VR0_ODD",
497     .udesc  = "Counter-clockwise and odd ring polarity on virtual ring 0",
498     .ucode  = 0x800,
499   },
500   { .uname = "CW_VR0_EVEN",
501     .udesc  = "Clockwise and even ring polarity on virtual ring 0",
502     .ucode  = 0x100,
503   },
504   { .uname = "CW_VR0_ODD",
505     .udesc  = "Clockwise and odd ring polarity on virtual ring 0",
506     .ucode  = 0x200,
507   },
508   { .uname = "CCW_VR1_EVEN",
509     .udesc  = "Counter-clockwise and even ring polarity on virtual ring 1",
510     .ucode  = 0x400,
511   },
512   { .uname = "CCW_VR1_ODD",
513     .udesc  = "Counter-clockwise and odd ring polarity on virtual ring 1",
514     .ucode  = 0x800,
515   },
516   { .uname = "CW_VR1_EVEN",
517     .udesc  = "Clockwise and even ring polarity on virtual ring 1",
518     .ucode  = 0x100,
519   },
520   { .uname = "CW_VR1_ODD",
521     .udesc  = "Clockwise and odd ring polarity on virtual ring 1",
522     .ucode  = 0x200,
523   },
524   { .uname = "CW",
525     .udesc  = "Clockwise with any polarity on either virtual rings",
526     .ucode  = 0x3300,
527   },
528   { .uname = "CCW",
529     .udesc  = "Counter-clockwise with any polarity on either virtual rings",
530     .ucode  = 0xcc00,
531   },
532 };
533
534 static const intel_x86_umask_t ivbep_unc_h_snp_resp_recv_local[]={
535   { .uname = "RSPI",
536     .udesc  = "Filters for snoop responses of RspI. RspI is returned when the remote cache does not have the data or when the remote cache silently evicts data (e.g. RFO hit non-modified line)",
537     .ucode  = 0x100,
538   },
539   { .uname = "RSPS",
540     .udesc  = "Filters for snoop responses of RspS. RspS is returned when the remote cache has the data but is not forwarding it. It is a way to let the requesting socket know that it cannot allocate the data in E-state",
541     .ucode  = 0x200,
542   },
543   { .uname = "RSPIFWD",
544     .udesc  = "Filters for snoop responses of RspIFwd. RspIFwd is returned when the remote cache agent forwards data and the requesting agent is able to acquire the data in E or M state. This is commonly returned with RFO transacations. It can be either HitM or HitFE",
545     .ucode  = 0x400,
546   },
547   { .uname = "RSPSFWD",
548     .udesc  = "Filters for snoop responses of RspSFwd. RspSFwd is returned when the remote cache agent forwards data  but holds on to its current copy. This is common for data and code reads that hit in a remote socket in E or F state",
549     .ucode  = 0x800,
550   },
551   { .uname = "RSP_WB",
552     .udesc  = "Filters for snoop responses of RspIWB or RspSWB. This is returned when a non-RFO requests hits in M-state. Data and code reads can return either RspIWB or RspSWB depending on how the system has been configured. InvItoE transactions will also return RspIWB because they must acquire ownership",
553     .ucode  = 0x1000,
554   },
555   { .uname = "RSP_FWD_WB",
556     .udesc  = "Filters for snoop responses of RspxFwdxWB. This snoop response is only used in 4s systems. It is used when a snoop HITM in a remote caching agent and it directly forwards data to a requester and simultaneously returns data to the home to be written back to memory",
557     .ucode  = 0x2000,
558   },
559   { .uname = "RSPCNFLCT",
560     .udesc  = "Filters for snoop responses of RspConflict. This is returned when a snoop finds an existing outstanding transaction in a remote caching agent when it CMAs that caching agent. This triggers the conflict resolution hardware. This covers both RspConflct and RspCnflctWBI",
561     .ucode  = 0x4000,
562   },
563   { .uname = "OTHER",
564     .udesc  = "Filters all other snoop responses",
565     .ucode  = 0x8000,
566   },
567 };
568
569 static const intel_x86_umask_t ivbep_unc_h_tracker_cycles_full[]={
570   { .uname = "GP",
571     .udesc  = "Number of cycles when the general purpose (GP) HA tracker pool is completely used. It will not return valid count when BT is disabled",
572     .ucode  = 0x100,
573   },
574   { .uname = "ALL",
575     .udesc  = "Number of cycles when the general purpose (GP) HA tracker pool is completely used including reserved HT entries. It will not return vaid count when BT is disabled",
576     .ucode  = 0x200,
577     .uflags = INTEL_X86_DFL,
578   },
579 };
580
581 static const intel_x86_umask_t ivbep_unc_h_txr_ak[]={
582   { .uname = "NDR",
583     .udesc  = "Number of outbound NDR (non-data response) transactions send on the AK ring. AK NDR is used for messages to the local socket",
584     .ucode  = 0x100,
585   },
586   { .uname = "CRD_CBO",
587     .udesc  = "Number of outbound CDR transactions send on the AK ring to CBO",
588     .ucode  = 0x200,
589   },
590   { .uname = "CRD_QPI",
591     .udesc  = "Number of outbound CDR transactions send on the AK ring to QPI",
592     .ucode  = 0x400,
593   },
594 };
595
596 static const intel_x86_umask_t ivbep_unc_h_iodc_conflicts[]={
597   { .uname = "ANY",
598     .udesc  = "Any conflict",
599     .ucode  = 0x100,
600     .uflags = INTEL_X86_DFL | INTEL_X86_NCOMBO,
601   },
602   { .uname = "LAST",
603     .udesc  = "Last conflict",
604     .ucode  = 0x400,
605   }
606 };
607
608 static const intel_x86_entry_t intel_ivbep_unc_h_pe[]={
609   { .name   = "UNC_H_CLOCKTICKS",
610     .desc   = "HA Uncore clockticks",
611     .modmsk = IVBEP_UNC_HA_ATTRS,
612     .cntmsk = 0xf,
613     .code = 0x00,
614   },
615   { .name = "UNC_H_CONFLICT_CYCLES",
616     .desc = "Conflict Checks",
617     .code = 0xb,
618     .cntmsk = 0xf,
619     .ngrp = 1,
620     .modmsk = IVBEP_UNC_HA_ATTRS,
621     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_conflict_cycles),
622     .umasks  = ivbep_unc_h_conflict_cycles,
623   },
624   { .name = "UNC_H_DIRECT2CORE_COUNT",
625     .desc = "Direct2Core Messages Sent",
626     .code = 0x11,
627     .cntmsk = 0xf,
628     .modmsk = IVBEP_UNC_HA_ATTRS,
629   },
630   { .name = "UNC_H_DIRECT2CORE_CYCLES_DISABLED",
631     .desc = "Cycles when Direct2Core was Disabled",
632     .code = 0x12,
633     .cntmsk = 0xf,
634     .modmsk = IVBEP_UNC_HA_ATTRS,
635   },
636   { .name = "UNC_H_DIRECT2CORE_TXN_OVERRIDE",
637     .desc = "Number of Reads that had Direct2Core Overridden",
638     .code = 0x13,
639     .cntmsk = 0xf,
640     .modmsk = IVBEP_UNC_HA_ATTRS,
641   },
642   { .name = "UNC_H_DIRECTORY_LOOKUP",
643     .desc = "Directory Lookups",
644     .code = 0xc,
645     .cntmsk = 0xf,
646     .ngrp = 1,
647     .modmsk = IVBEP_UNC_HA_ATTRS,
648     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_directory_lookup),
649     .umasks  = ivbep_unc_h_directory_lookup
650   },
651   { .name = "UNC_H_DIRECTORY_UPDATE",
652     .desc = "Directory Updates",
653     .code = 0xd,
654     .cntmsk = 0xf,
655     .ngrp = 1,
656     .modmsk = IVBEP_UNC_HA_ATTRS,
657     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_directory_update),
658     .umasks  = ivbep_unc_h_directory_update
659   },
660   { .name = "UNC_H_IGR_NO_CREDIT_CYCLES",
661     .desc = "Cycles without QPI Ingress Credits",
662     .code = 0x22,
663     .cntmsk = 0xf,
664     .ngrp = 1,
665     .modmsk = IVBEP_UNC_HA_ATTRS,
666     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_igr_no_credit_cycles),
667     .umasks  = ivbep_unc_h_igr_no_credit_cycles
668   },
669   { .name = "UNC_H_IMC_RETRY",
670     .desc = "Retry Events",
671     .code = 0x1e,
672     .cntmsk = 0xf,
673     .modmsk = IVBEP_UNC_HA_ATTRS,
674   },
675   { .name = "UNC_H_IMC_WRITES",
676     .desc = "HA to IMC Full Line Writes Issued",
677     .code = 0x1a,
678     .cntmsk = 0xf,
679     .ngrp = 1,
680     .modmsk = IVBEP_UNC_HA_ATTRS,
681     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_imc_writes),
682     .umasks  = ivbep_unc_h_imc_writes
683   },
684   { .name = "UNC_H_IMC_READS",
685     .desc = "HA to IMC normal priority reads issued",
686     .code = 0x17,
687     .cntmsk = 0xf,
688     .ngrp = 1,
689     .modmsk = IVBEP_UNC_HA_ATTRS,
690     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_imc_reads),
691     .umasks  = ivbep_unc_h_imc_reads
692   },
693   { .name = "UNC_H_REQUESTS",
694     .desc = "Read and Write Requests",
695     .code = 0x1,
696     .cntmsk = 0xf,
697     .ngrp = 1,
698     .modmsk = IVBEP_UNC_HA_ATTRS,
699     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_requests),
700     .umasks  = ivbep_unc_h_requests
701   },
702   { .name = "UNC_H_RPQ_CYCLES_NO_REG_CREDITS",
703     .desc = "IMC RPQ Credits Empty",
704     .code = 0x15,
705     .cntmsk = 0xf,
706     .ngrp = 1,
707     .modmsk = IVBEP_UNC_HA_ATTRS,
708     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_rpq_cycles_no_reg_credits),
709     .umasks  = ivbep_unc_h_rpq_cycles_no_reg_credits
710   },
711   { .name = "UNC_H_TAD_REQUESTS_G0",
712     .desc = "HA Requests to a TAD Region",
713     .code = 0x1b,
714     .cntmsk = 0xf,
715     .ngrp = 1,
716     .modmsk = IVBEP_UNC_HA_ATTRS,
717     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_tad_requests_g0),
718     .umasks  = ivbep_unc_h_tad_requests_g0
719   },
720   { .name = "UNC_H_TAD_REQUESTS_G1",
721     .desc = "HA Requests to a TAD Region",
722     .code = 0x1c,
723     .cntmsk = 0xf,
724     .ngrp = 1,
725     .modmsk = IVBEP_UNC_HA_ATTRS,
726     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_tad_requests_g1),
727     .umasks  = ivbep_unc_h_tad_requests_g1
728   },
729   { .name = "UNC_H_TXR_AD_CYCLES_FULL",
730     .desc = "AD Egress Full",
731     .code = 0x2a,
732     .cntmsk = 0xf,
733     .ngrp = 1,
734     .modmsk = IVBEP_UNC_HA_ATTRS,
735     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_txr_ad_cycles_full),
736     .umasks  = ivbep_unc_h_txr_ad_cycles_full
737   },
738   { .name = "UNC_H_TXR_AK_CYCLES_FULL",
739     .desc = "AK Egress Full",
740     .code = 0x32,
741     .cntmsk = 0xf,
742     .ngrp = 1,
743     .modmsk = IVBEP_UNC_HA_ATTRS,
744     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_txr_ak_cycles_full),
745     .umasks  = ivbep_unc_h_txr_ak_cycles_full
746   },
747   { .name = "UNC_H_TXR_AK",
748     .desc = "Outbound Ring Transactions on AK",
749     .code = 0xe,
750     .cntmsk = 0xf,
751     .ngrp = 1,
752     .modmsk = IVBEP_UNC_HA_ATTRS,
753     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_txr_ak),
754     .umasks  = ivbep_unc_h_txr_ak
755   },
756   { .name = "UNC_H_TXR_BL",
757     .desc = "Outbound DRS Ring Transactions to Cache",
758     .code = 0x10,
759     .cntmsk = 0xf,
760     .ngrp = 1,
761     .modmsk = IVBEP_UNC_HA_ATTRS,
762     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_txr_bl),
763     .umasks  = ivbep_unc_h_txr_bl
764   },
765   { .name = "UNC_H_TXR_BL_CYCLES_FULL",
766     .desc = "BL Egress Full",
767     .code = 0x36,
768     .cntmsk = 0xf,
769     .ngrp = 1,
770     .modmsk = IVBEP_UNC_HA_ATTRS,
771     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_txr_ak_cycles_full),
772     .umasks  = ivbep_unc_h_txr_ak_cycles_full, /* identical to snbep_unc_h_txr_ak_cycles_full */
773   },
774   { .name = "UNC_H_WPQ_CYCLES_NO_REG_CREDITS",
775     .desc = "HA IMC CHN0 WPQ Credits Empty",
776     .code = 0x18,
777     .cntmsk = 0xf,
778     .ngrp = 1,
779     .modmsk = IVBEP_UNC_HA_ATTRS,
780     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_rpq_cycles_no_reg_credits),
781     .umasks  = ivbep_unc_h_rpq_cycles_no_reg_credits, /* shared */
782   },
783   { .name = "UNC_H_BT_BYPASS",
784     .desc = "Backup Tracker bypass",
785     .code = 0x52,
786     .cntmsk = 0xf,
787     .modmsk = IVBEP_UNC_HA_ATTRS,
788   },
789   { .name = "UNC_H_BYPASS_IMC",
790     .desc = "HA to IMC bypass",
791     .code = 0x14,
792     .cntmsk = 0xf,
793     .ngrp = 1,
794     .modmsk = IVBEP_UNC_HA_ATTRS,
795     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_bypass_imc),
796     .umasks  = ivbep_unc_h_bypass_imc,
797   },
798   { .name = "UNC_H_BT_CYCLES_NE",
799     .desc = "Backup Tracker cycles not empty",
800     .code = 0x42,
801     .cntmsk = 0xf,
802     .modmsk = IVBEP_UNC_HA_ATTRS,
803   },
804   { .name = "UNC_H_BT_OCCUPANCY",
805     .desc = "Backup Tracker inserts",
806     .code = 0x43,
807     .cntmsk = 0xf,
808     .ngrp = 1,
809     .modmsk = IVBEP_UNC_HA_ATTRS,
810     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_bt_occupancy),
811     .umasks  = ivbep_unc_h_bt_occupancy,
812   },
813   { .name = "UNC_H_IGR_AD_QPI2",
814     .desc = "AD QPI Link 2 credit accumulator",
815     .code = 0x59,
816     .cntmsk = 0xf,
817     .modmsk = IVBEP_UNC_HA_ATTRS,
818   },
819   { .name = "UNC_H_IGR_BL_QPI2",
820     .desc = "BL QPI Link 2 credit accumulator",
821     .code = 0x5a,
822     .cntmsk = 0xf,
823     .modmsk = IVBEP_UNC_HA_ATTRS,
824   },
825   { .name = "UNC_H_IODC_INSERTS",
826     .desc = "IODC inserts",
827     .code = 0x56,
828     .cntmsk = 0xf,
829     .modmsk = IVBEP_UNC_HA_ATTRS,
830   },
831   { .name = "UNC_H_IODC_CONFLICTS",
832     .desc = "IODC conflicts",
833     .code = 0x57,
834     .cntmsk = 0xf,
835     .ngrp = 1,
836     .modmsk = IVBEP_UNC_HA_ATTRS,
837     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_iodc_conflicts),
838     .umasks  = ivbep_unc_h_iodc_conflicts,
839   },
840   { .name = "UNC_H_IODC_OLEN_WBMTOI",
841     .desc = "IODC zero length writes",
842     .code = 0x58,
843     .cntmsk = 0xf,
844     .modmsk = IVBEP_UNC_HA_ATTRS,
845   },
846   { .name = "UNC_H_OSB",
847     .desc = "OSB snoop broadcast",
848     .code = 0x53,
849     .cntmsk = 0xf,
850     .ngrp = 1,
851     .modmsk = IVBEP_UNC_HA_ATTRS,
852     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_osb),
853     .umasks  = ivbep_unc_h_osb,
854   },
855   { .name = "UNC_H_OSB_EDR",
856     .desc = "OSB early data return",
857     .code = 0x54,
858     .cntmsk = 0xf,
859     .ngrp = 1,
860     .modmsk = IVBEP_UNC_HA_ATTRS,
861     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_osb_edr),
862     .umasks  = ivbep_unc_h_osb_edr,
863   },
864   { .name = "UNC_H_RING_AD_USED",
865     .desc = "AD ring in use",
866     .code = 0x3e,
867     .cntmsk = 0xf,
868     .ngrp = 1,
869     .modmsk = IVBEP_UNC_HA_ATTRS,
870     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_ring_ad_used),
871     .umasks  = ivbep_unc_h_ring_ad_used,
872   },
873   { .name = "UNC_H_RING_AK_USED",
874     .desc = "AK ring in use",
875     .code = 0x3f,
876     .cntmsk = 0xf,
877     .ngrp = 1,
878     .modmsk = IVBEP_UNC_HA_ATTRS,
879     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_ring_ad_used), /* shared */
880     .umasks  = ivbep_unc_h_ring_ad_used,
881   },
882   { .name = "UNC_H_RING_BL_USED",
883     .desc = "BL ring in use",
884     .code = 0x40,
885     .cntmsk = 0xf,
886     .ngrp = 1,
887     .modmsk = IVBEP_UNC_HA_ATTRS,
888     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_ring_ad_used), /* shared */
889     .umasks  = ivbep_unc_h_ring_ad_used,
890   },
891   { .name = "UNC_H_DIRECTORY_LAT_OPT",
892     .desc = "Directory latency optimization data return path taken",
893     .code = 0x41,
894     .cntmsk = 0xf,
895     .modmsk = IVBEP_UNC_HA_ATTRS,
896   },
897
898   { .name = "UNC_H_SNP_RESP_RECV_LOCAL",
899     .desc = "Snoop responses received local",
900     .code = 0x60,
901     .cntmsk = 0xf,
902     .ngrp = 1,
903     .modmsk = IVBEP_UNC_HA_ATTRS,
904     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_snp_resp_recv_local),
905     .umasks  = ivbep_unc_h_snp_resp_recv_local,
906   },
907   { .name = "UNC_H_TXR_BL_OCCUPANCY",
908     .desc = "BL Egress occupancy",
909     .code = 0x34,
910     .cntmsk = 0xf,
911     .ngrp = 1,
912     .modmsk = IVBEP_UNC_HA_ATTRS,
913     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_txr_bl_occupancy),
914     .umasks  = ivbep_unc_h_txr_bl_occupancy,
915   },
916   { .name = "UNC_H_SNOOP_RESP",
917     .desc = "Snoop responses received",
918     .code = 0x21,
919     .cntmsk = 0xf,
920     .ngrp = 1,
921     .modmsk = IVBEP_UNC_HA_ATTRS,
922     .numasks = LIBPFM_ARRAY_SIZE(ivbep_unc_h_snoop_resp),
923     .umasks  = ivbep_unc_h_snoop_resp
924   },
925 };