perf_event_p4.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. /*
  2. * Netburst Perfomance Events (P4, old Xeon)
  3. */
  4. #ifndef PERF_EVENT_P4_H
  5. #define PERF_EVENT_P4_H
  6. #include <linux/cpu.h>
  7. #include <linux/bitops.h>
  8. /*
  9. * NetBurst has perfomance MSRs shared between
  10. * threads if HT is turned on, ie for both logical
  11. * processors (mem: in turn in Atom with HT support
  12. * perf-MSRs are not shared and every thread has its
  13. * own perf-MSRs set)
  14. */
  15. #define ARCH_P4_TOTAL_ESCR (46)
  16. #define ARCH_P4_RESERVED_ESCR (2) /* IQ_ESCR(0,1) not always present */
  17. #define ARCH_P4_MAX_ESCR (ARCH_P4_TOTAL_ESCR - ARCH_P4_RESERVED_ESCR)
  18. #define ARCH_P4_MAX_CCCR (18)
  19. #define ARCH_P4_MAX_COUNTER (ARCH_P4_MAX_CCCR / 2)
  20. #define P4_EVNTSEL_EVENT_MASK 0x7e000000U
  21. #define P4_EVNTSEL_EVENT_SHIFT 25
  22. #define P4_EVNTSEL_EVENTMASK_MASK 0x01fffe00U
  23. #define P4_EVNTSEL_EVENTMASK_SHIFT 9
  24. #define P4_EVNTSEL_TAG_MASK 0x000001e0U
  25. #define P4_EVNTSEL_TAG_SHIFT 5
  26. #define P4_EVNTSEL_TAG_ENABLE 0x00000010U
  27. #define P4_EVNTSEL_T0_OS 0x00000008U
  28. #define P4_EVNTSEL_T0_USR 0x00000004U
  29. #define P4_EVNTSEL_T1_OS 0x00000002U
  30. #define P4_EVNTSEL_T1_USR 0x00000001U
  31. /* Non HT mask */
  32. #define P4_EVNTSEL_MASK \
  33. (P4_EVNTSEL_EVENT_MASK | \
  34. P4_EVNTSEL_EVENTMASK_MASK | \
  35. P4_EVNTSEL_TAG_MASK | \
  36. P4_EVNTSEL_TAG_ENABLE | \
  37. P4_EVNTSEL_T0_OS | \
  38. P4_EVNTSEL_T0_USR)
  39. /* HT mask */
  40. #define P4_EVNTSEL_MASK_HT \
  41. (P4_EVNTSEL_MASK | \
  42. P4_EVNTSEL_T1_OS | \
  43. P4_EVNTSEL_T1_USR)
  44. #define P4_CCCR_OVF 0x80000000U
  45. #define P4_CCCR_CASCADE 0x40000000U
  46. #define P4_CCCR_OVF_PMI_T0 0x04000000U
  47. #define P4_CCCR_OVF_PMI_T1 0x08000000U
  48. #define P4_CCCR_FORCE_OVF 0x02000000U
  49. #define P4_CCCR_EDGE 0x01000000U
  50. #define P4_CCCR_THRESHOLD_MASK 0x00f00000U
  51. #define P4_CCCR_THRESHOLD_SHIFT 20
  52. #define P4_CCCR_THRESHOLD(v) ((v) << P4_CCCR_THRESHOLD_SHIFT)
  53. #define P4_CCCR_COMPLEMENT 0x00080000U
  54. #define P4_CCCR_COMPARE 0x00040000U
  55. #define P4_CCCR_ESCR_SELECT_MASK 0x0000e000U
  56. #define P4_CCCR_ESCR_SELECT_SHIFT 13
  57. #define P4_CCCR_ENABLE 0x00001000U
  58. #define P4_CCCR_THREAD_SINGLE 0x00010000U
  59. #define P4_CCCR_THREAD_BOTH 0x00020000U
  60. #define P4_CCCR_THREAD_ANY 0x00030000U
  61. #define P4_CCCR_RESERVED 0x00000fffU
  62. /* Non HT mask */
  63. #define P4_CCCR_MASK \
  64. (P4_CCCR_OVF | \
  65. P4_CCCR_CASCADE | \
  66. P4_CCCR_OVF_PMI_T0 | \
  67. P4_CCCR_FORCE_OVF | \
  68. P4_CCCR_EDGE | \
  69. P4_CCCR_THRESHOLD_MASK | \
  70. P4_CCCR_COMPLEMENT | \
  71. P4_CCCR_COMPARE | \
  72. P4_CCCR_ESCR_SELECT_MASK | \
  73. P4_CCCR_ENABLE)
  74. /* HT mask */
  75. #define P4_CCCR_MASK_HT \
  76. (P4_CCCR_MASK | \
  77. P4_CCCR_THREAD_ANY)
  78. /*
  79. * format is 32 bit: ee ss aa aa
  80. * where
  81. * ee - 8 bit event
  82. * ss - 8 bit selector
  83. * aa aa - 16 bits reserved for tags/attributes
  84. */
  85. #define P4_EVENT_PACK(event, selector) (((event) << 24) | ((selector) << 16))
  86. #define P4_EVENT_UNPACK_EVENT(packed) (((packed) >> 24) & 0xff)
  87. #define P4_EVENT_UNPACK_SELECTOR(packed) (((packed) >> 16) & 0xff)
  88. #define P4_EVENT_PACK_ATTR(attr) ((attr))
  89. #define P4_EVENT_UNPACK_ATTR(packed) ((packed) & 0xffff)
  90. #define P4_MAKE_EVENT_ATTR(class, name, bit) class##_##name = (1 << bit)
  91. #define P4_EVENT_ATTR(class, name) class##_##name
  92. #define P4_EVENT_ATTR_STR(class, name) __stringify(class##_##name)
  93. /*
  94. * config field is 64bit width and consists of
  95. * HT << 63 | ESCR << 32 | CCCR
  96. * where HT is HyperThreading bit (since ESCR
  97. * has it reserved we may use it for own purpose)
  98. *
  99. * note that this is NOT the addresses of respective
  100. * ESCR and CCCR but rather an only packed value should
  101. * be unpacked and written to a proper addresses
  102. *
  103. * the base idea is to pack as much info as
  104. * possible
  105. */
  106. #define p4_config_pack_escr(v) (((u64)(v)) << 32)
  107. #define p4_config_pack_cccr(v) (((u64)(v)) & 0xffffffffULL)
  108. #define p4_config_unpack_escr(v) (((u64)(v)) >> 32)
  109. #define p4_config_unpack_cccr(v) (((u64)(v)) & 0xfffff000ULL)
  110. #define p4_config_unpack_emask(v) \
  111. ({ \
  112. u32 t = p4_config_unpack_escr((v)); \
  113. t &= P4_EVNTSEL_EVENTMASK_MASK; \
  114. t >>= P4_EVNTSEL_EVENTMASK_SHIFT; \
  115. t; \
  116. })
  117. #define p4_config_unpack_key(v) (((u64)(v)) & P4_CCCR_RESERVED)
  118. #define P4_CONFIG_HT_SHIFT 63
  119. #define P4_CONFIG_HT (1ULL << P4_CONFIG_HT_SHIFT)
  120. static inline u32 p4_config_unpack_opcode(u64 config)
  121. {
  122. u32 e, s;
  123. /*
  124. * we don't care about HT presence here since
  125. * event opcode doesn't depend on it
  126. */
  127. e = (p4_config_unpack_escr(config) & P4_EVNTSEL_EVENT_MASK) >> P4_EVNTSEL_EVENT_SHIFT;
  128. s = (p4_config_unpack_cccr(config) & P4_CCCR_ESCR_SELECT_MASK) >> P4_CCCR_ESCR_SELECT_SHIFT;
  129. return P4_EVENT_PACK(e, s);
  130. }
  131. static inline bool p4_is_event_cascaded(u64 config)
  132. {
  133. u32 cccr = p4_config_unpack_cccr(config);
  134. return !!(cccr & P4_CCCR_CASCADE);
  135. }
  136. static inline int p4_ht_config_thread(u64 config)
  137. {
  138. return !!(config & P4_CONFIG_HT);
  139. }
  140. static inline u64 p4_set_ht_bit(u64 config)
  141. {
  142. return config | P4_CONFIG_HT;
  143. }
  144. static inline u64 p4_clear_ht_bit(u64 config)
  145. {
  146. return config & ~P4_CONFIG_HT;
  147. }
  148. static inline int p4_ht_active(void)
  149. {
  150. #ifdef CONFIG_SMP
  151. return smp_num_siblings > 1;
  152. #endif
  153. return 0;
  154. }
  155. static inline int p4_ht_thread(int cpu)
  156. {
  157. #ifdef CONFIG_SMP
  158. if (smp_num_siblings == 2)
  159. return cpu != cpumask_first(__get_cpu_var(cpu_sibling_map));
  160. #endif
  161. return 0;
  162. }
  163. static inline int p4_should_swap_ts(u64 config, int cpu)
  164. {
  165. return p4_ht_config_thread(config) ^ p4_ht_thread(cpu);
  166. }
  167. static inline u32 p4_default_cccr_conf(int cpu)
  168. {
  169. /*
  170. * Note that P4_CCCR_THREAD_ANY is "required" on
  171. * non-HT machines (on HT machines we count TS events
  172. * regardless the state of second logical processor
  173. */
  174. u32 cccr = P4_CCCR_THREAD_ANY;
  175. if (!p4_ht_thread(cpu))
  176. cccr |= P4_CCCR_OVF_PMI_T0;
  177. else
  178. cccr |= P4_CCCR_OVF_PMI_T1;
  179. return cccr;
  180. }
  181. static inline u32 p4_default_escr_conf(int cpu, int exclude_os, int exclude_usr)
  182. {
  183. u32 escr = 0;
  184. if (!p4_ht_thread(cpu)) {
  185. if (!exclude_os)
  186. escr |= P4_EVNTSEL_T0_OS;
  187. if (!exclude_usr)
  188. escr |= P4_EVNTSEL_T0_USR;
  189. } else {
  190. if (!exclude_os)
  191. escr |= P4_EVNTSEL_T1_OS;
  192. if (!exclude_usr)
  193. escr |= P4_EVNTSEL_T1_USR;
  194. }
  195. return escr;
  196. }
  197. /*
  198. * Comments below the event represent ESCR restriction
  199. * for this event and counter index per ESCR
  200. *
  201. * MSR_P4_IQ_ESCR0 and MSR_P4_IQ_ESCR1 are available only on early
  202. * processor builds (family 0FH, models 01H-02H). These MSRs
  203. * are not available on later versions, so that we don't use
  204. * them completely
  205. *
  206. * Also note that CCCR1 do not have P4_CCCR_ENABLE bit properly
  207. * working so that we should not use this CCCR and respective
  208. * counter as result
  209. */
  210. #define P4_TC_DELIVER_MODE P4_EVENT_PACK(0x01, 0x01)
  211. /*
  212. * MSR_P4_TC_ESCR0: 4, 5
  213. * MSR_P4_TC_ESCR1: 6, 7
  214. */
  215. #define P4_BPU_FETCH_REQUEST P4_EVENT_PACK(0x03, 0x00)
  216. /*
  217. * MSR_P4_BPU_ESCR0: 0, 1
  218. * MSR_P4_BPU_ESCR1: 2, 3
  219. */
  220. #define P4_ITLB_REFERENCE P4_EVENT_PACK(0x18, 0x03)
  221. /*
  222. * MSR_P4_ITLB_ESCR0: 0, 1
  223. * MSR_P4_ITLB_ESCR1: 2, 3
  224. */
  225. #define P4_MEMORY_CANCEL P4_EVENT_PACK(0x02, 0x05)
  226. /*
  227. * MSR_P4_DAC_ESCR0: 8, 9
  228. * MSR_P4_DAC_ESCR1: 10, 11
  229. */
  230. #define P4_MEMORY_COMPLETE P4_EVENT_PACK(0x08, 0x02)
  231. /*
  232. * MSR_P4_SAAT_ESCR0: 8, 9
  233. * MSR_P4_SAAT_ESCR1: 10, 11
  234. */
  235. #define P4_LOAD_PORT_REPLAY P4_EVENT_PACK(0x04, 0x02)
  236. /*
  237. * MSR_P4_SAAT_ESCR0: 8, 9
  238. * MSR_P4_SAAT_ESCR1: 10, 11
  239. */
  240. #define P4_STORE_PORT_REPLAY P4_EVENT_PACK(0x05, 0x02)
  241. /*
  242. * MSR_P4_SAAT_ESCR0: 8, 9
  243. * MSR_P4_SAAT_ESCR1: 10, 11
  244. */
  245. #define P4_MOB_LOAD_REPLAY P4_EVENT_PACK(0x03, 0x02)
  246. /*
  247. * MSR_P4_MOB_ESCR0: 0, 1
  248. * MSR_P4_MOB_ESCR1: 2, 3
  249. */
  250. #define P4_PAGE_WALK_TYPE P4_EVENT_PACK(0x01, 0x04)
  251. /*
  252. * MSR_P4_PMH_ESCR0: 0, 1
  253. * MSR_P4_PMH_ESCR1: 2, 3
  254. */
  255. #define P4_BSQ_CACHE_REFERENCE P4_EVENT_PACK(0x0c, 0x07)
  256. /*
  257. * MSR_P4_BSU_ESCR0: 0, 1
  258. * MSR_P4_BSU_ESCR1: 2, 3
  259. */
  260. #define P4_IOQ_ALLOCATION P4_EVENT_PACK(0x03, 0x06)
  261. /*
  262. * MSR_P4_FSB_ESCR0: 0, 1
  263. * MSR_P4_FSB_ESCR1: 2, 3
  264. */
  265. #define P4_IOQ_ACTIVE_ENTRIES P4_EVENT_PACK(0x1a, 0x06)
  266. /*
  267. * MSR_P4_FSB_ESCR1: 2, 3
  268. */
  269. #define P4_FSB_DATA_ACTIVITY P4_EVENT_PACK(0x17, 0x06)
  270. /*
  271. * MSR_P4_FSB_ESCR0: 0, 1
  272. * MSR_P4_FSB_ESCR1: 2, 3
  273. */
  274. #define P4_BSQ_ALLOCATION P4_EVENT_PACK(0x05, 0x07)
  275. /*
  276. * MSR_P4_BSU_ESCR0: 0, 1
  277. */
  278. #define P4_BSQ_ACTIVE_ENTRIES P4_EVENT_PACK(0x06, 0x07)
  279. /*
  280. * NOTE: no ESCR name in docs, it's guessed
  281. * MSR_P4_BSU_ESCR1: 2, 3
  282. */
  283. #define P4_SSE_INPUT_ASSIST P4_EVENT_PACK(0x34, 0x01)
  284. /*
  285. * MSR_P4_FIRM_ESCR0: 8, 9
  286. * MSR_P4_FIRM_ESCR1: 10, 11
  287. */
  288. #define P4_PACKED_SP_UOP P4_EVENT_PACK(0x08, 0x01)
  289. /*
  290. * MSR_P4_FIRM_ESCR0: 8, 9
  291. * MSR_P4_FIRM_ESCR1: 10, 11
  292. */
  293. #define P4_PACKED_DP_UOP P4_EVENT_PACK(0x0c, 0x01)
  294. /*
  295. * MSR_P4_FIRM_ESCR0: 8, 9
  296. * MSR_P4_FIRM_ESCR1: 10, 11
  297. */
  298. #define P4_SCALAR_SP_UOP P4_EVENT_PACK(0x0a, 0x01)
  299. /*
  300. * MSR_P4_FIRM_ESCR0: 8, 9
  301. * MSR_P4_FIRM_ESCR1: 10, 11
  302. */
  303. #define P4_SCALAR_DP_UOP P4_EVENT_PACK(0x0e, 0x01)
  304. /*
  305. * MSR_P4_FIRM_ESCR0: 8, 9
  306. * MSR_P4_FIRM_ESCR1: 10, 11
  307. */
  308. #define P4_64BIT_MMX_UOP P4_EVENT_PACK(0x02, 0x01)
  309. /*
  310. * MSR_P4_FIRM_ESCR0: 8, 9
  311. * MSR_P4_FIRM_ESCR1: 10, 11
  312. */
  313. #define P4_128BIT_MMX_UOP P4_EVENT_PACK(0x1a, 0x01)
  314. /*
  315. * MSR_P4_FIRM_ESCR0: 8, 9
  316. * MSR_P4_FIRM_ESCR1: 10, 11
  317. */
  318. #define P4_X87_FP_UOP P4_EVENT_PACK(0x04, 0x01)
  319. /*
  320. * MSR_P4_FIRM_ESCR0: 8, 9
  321. * MSR_P4_FIRM_ESCR1: 10, 11
  322. */
  323. #define P4_TC_MISC P4_EVENT_PACK(0x06, 0x01)
  324. /*
  325. * MSR_P4_TC_ESCR0: 4, 5
  326. * MSR_P4_TC_ESCR1: 6, 7
  327. */
  328. #define P4_GLOBAL_POWER_EVENTS P4_EVENT_PACK(0x13, 0x06)
  329. /*
  330. * MSR_P4_FSB_ESCR0: 0, 1
  331. * MSR_P4_FSB_ESCR1: 2, 3
  332. */
  333. #define P4_TC_MS_XFER P4_EVENT_PACK(0x05, 0x00)
  334. /*
  335. * MSR_P4_MS_ESCR0: 4, 5
  336. * MSR_P4_MS_ESCR1: 6, 7
  337. */
  338. #define P4_UOP_QUEUE_WRITES P4_EVENT_PACK(0x09, 0x00)
  339. /*
  340. * MSR_P4_MS_ESCR0: 4, 5
  341. * MSR_P4_MS_ESCR1: 6, 7
  342. */
  343. #define P4_RETIRED_MISPRED_BRANCH_TYPE P4_EVENT_PACK(0x05, 0x02)
  344. /*
  345. * MSR_P4_TBPU_ESCR0: 4, 5
  346. * MSR_P4_TBPU_ESCR0: 6, 7
  347. */
  348. #define P4_RETIRED_BRANCH_TYPE P4_EVENT_PACK(0x04, 0x02)
  349. /*
  350. * MSR_P4_TBPU_ESCR0: 4, 5
  351. * MSR_P4_TBPU_ESCR0: 6, 7
  352. */
  353. #define P4_RESOURCE_STALL P4_EVENT_PACK(0x01, 0x01)
  354. /*
  355. * MSR_P4_ALF_ESCR0: 12, 13, 16
  356. * MSR_P4_ALF_ESCR1: 14, 15, 17
  357. */
  358. #define P4_WC_BUFFER P4_EVENT_PACK(0x05, 0x05)
  359. /*
  360. * MSR_P4_DAC_ESCR0: 8, 9
  361. * MSR_P4_DAC_ESCR1: 10, 11
  362. */
  363. #define P4_B2B_CYCLES P4_EVENT_PACK(0x16, 0x03)
  364. /*
  365. * MSR_P4_FSB_ESCR0: 0, 1
  366. * MSR_P4_FSB_ESCR1: 2, 3
  367. */
  368. #define P4_BNR P4_EVENT_PACK(0x08, 0x03)
  369. /*
  370. * MSR_P4_FSB_ESCR0: 0, 1
  371. * MSR_P4_FSB_ESCR1: 2, 3
  372. */
  373. #define P4_SNOOP P4_EVENT_PACK(0x06, 0x03)
  374. /*
  375. * MSR_P4_FSB_ESCR0: 0, 1
  376. * MSR_P4_FSB_ESCR1: 2, 3
  377. */
  378. #define P4_RESPONSE P4_EVENT_PACK(0x04, 0x03)
  379. /*
  380. * MSR_P4_FSB_ESCR0: 0, 1
  381. * MSR_P4_FSB_ESCR1: 2, 3
  382. */
  383. #define P4_FRONT_END_EVENT P4_EVENT_PACK(0x08, 0x05)
  384. /*
  385. * MSR_P4_CRU_ESCR2: 12, 13, 16
  386. * MSR_P4_CRU_ESCR3: 14, 15, 17
  387. */
  388. #define P4_EXECUTION_EVENT P4_EVENT_PACK(0x0c, 0x05)
  389. /*
  390. * MSR_P4_CRU_ESCR2: 12, 13, 16
  391. * MSR_P4_CRU_ESCR3: 14, 15, 17
  392. */
  393. #define P4_REPLAY_EVENT P4_EVENT_PACK(0x09, 0x05)
  394. /*
  395. * MSR_P4_CRU_ESCR2: 12, 13, 16
  396. * MSR_P4_CRU_ESCR3: 14, 15, 17
  397. */
  398. #define P4_INSTR_RETIRED P4_EVENT_PACK(0x02, 0x04)
  399. /*
  400. * MSR_P4_CRU_ESCR0: 12, 13, 16
  401. * MSR_P4_CRU_ESCR1: 14, 15, 17
  402. */
  403. #define P4_UOPS_RETIRED P4_EVENT_PACK(0x01, 0x04)
  404. /*
  405. * MSR_P4_CRU_ESCR0: 12, 13, 16
  406. * MSR_P4_CRU_ESCR1: 14, 15, 17
  407. */
  408. #define P4_UOP_TYPE P4_EVENT_PACK(0x02, 0x02)
  409. /*
  410. * MSR_P4_RAT_ESCR0: 12, 13, 16
  411. * MSR_P4_RAT_ESCR1: 14, 15, 17
  412. */
  413. #define P4_BRANCH_RETIRED P4_EVENT_PACK(0x06, 0x05)
  414. /*
  415. * MSR_P4_CRU_ESCR2: 12, 13, 16
  416. * MSR_P4_CRU_ESCR3: 14, 15, 17
  417. */
  418. #define P4_MISPRED_BRANCH_RETIRED P4_EVENT_PACK(0x03, 0x04)
  419. /*
  420. * MSR_P4_CRU_ESCR0: 12, 13, 16
  421. * MSR_P4_CRU_ESCR1: 14, 15, 17
  422. */
  423. #define P4_X87_ASSIST P4_EVENT_PACK(0x03, 0x05)
  424. /*
  425. * MSR_P4_CRU_ESCR2: 12, 13, 16
  426. * MSR_P4_CRU_ESCR3: 14, 15, 17
  427. */
  428. #define P4_MACHINE_CLEAR P4_EVENT_PACK(0x02, 0x05)
  429. /*
  430. * MSR_P4_CRU_ESCR2: 12, 13, 16
  431. * MSR_P4_CRU_ESCR3: 14, 15, 17
  432. */
  433. #define P4_INSTR_COMPLETED P4_EVENT_PACK(0x07, 0x04)
  434. /*
  435. * MSR_P4_CRU_ESCR0: 12, 13, 16
  436. * MSR_P4_CRU_ESCR1: 14, 15, 17
  437. */
  438. /*
  439. * a caller should use P4_EVENT_ATTR helper to
  440. * pick the attribute needed, for example
  441. *
  442. * P4_EVENT_ATTR(P4_TC_DELIVER_MODE, DD)
  443. */
  444. enum P4_EVENTS_ATTR {
  445. P4_MAKE_EVENT_ATTR(P4_TC_DELIVER_MODE, DD, 0),
  446. P4_MAKE_EVENT_ATTR(P4_TC_DELIVER_MODE, DB, 1),
  447. P4_MAKE_EVENT_ATTR(P4_TC_DELIVER_MODE, DI, 2),
  448. P4_MAKE_EVENT_ATTR(P4_TC_DELIVER_MODE, BD, 3),
  449. P4_MAKE_EVENT_ATTR(P4_TC_DELIVER_MODE, BB, 4),
  450. P4_MAKE_EVENT_ATTR(P4_TC_DELIVER_MODE, BI, 5),
  451. P4_MAKE_EVENT_ATTR(P4_TC_DELIVER_MODE, ID, 6),
  452. P4_MAKE_EVENT_ATTR(P4_BPU_FETCH_REQUEST, TCMISS, 0),
  453. P4_MAKE_EVENT_ATTR(P4_ITLB_REFERENCE, HIT, 0),
  454. P4_MAKE_EVENT_ATTR(P4_ITLB_REFERENCE, MISS, 1),
  455. P4_MAKE_EVENT_ATTR(P4_ITLB_REFERENCE, HIT_UK, 2),
  456. P4_MAKE_EVENT_ATTR(P4_MEMORY_CANCEL, ST_RB_FULL, 2),
  457. P4_MAKE_EVENT_ATTR(P4_MEMORY_CANCEL, 64K_CONF, 3),
  458. P4_MAKE_EVENT_ATTR(P4_MEMORY_COMPLETE, LSC, 0),
  459. P4_MAKE_EVENT_ATTR(P4_MEMORY_COMPLETE, SSC, 1),
  460. P4_MAKE_EVENT_ATTR(P4_LOAD_PORT_REPLAY, SPLIT_LD, 1),
  461. P4_MAKE_EVENT_ATTR(P4_STORE_PORT_REPLAY, SPLIT_ST, 1),
  462. P4_MAKE_EVENT_ATTR(P4_MOB_LOAD_REPLAY, NO_STA, 1),
  463. P4_MAKE_EVENT_ATTR(P4_MOB_LOAD_REPLAY, NO_STD, 3),
  464. P4_MAKE_EVENT_ATTR(P4_MOB_LOAD_REPLAY, PARTIAL_DATA, 4),
  465. P4_MAKE_EVENT_ATTR(P4_MOB_LOAD_REPLAY, UNALGN_ADDR, 5),
  466. P4_MAKE_EVENT_ATTR(P4_PAGE_WALK_TYPE, DTMISS, 0),
  467. P4_MAKE_EVENT_ATTR(P4_PAGE_WALK_TYPE, ITMISS, 1),
  468. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, RD_2ndL_HITS, 0),
  469. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, RD_2ndL_HITE, 1),
  470. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, RD_2ndL_HITM, 2),
  471. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, RD_3rdL_HITS, 3),
  472. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, RD_3rdL_HITE, 4),
  473. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, RD_3rdL_HITM, 5),
  474. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, RD_2ndL_MISS, 8),
  475. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, RD_3rdL_MISS, 9),
  476. P4_MAKE_EVENT_ATTR(P4_BSQ_CACHE_REFERENCE, WR_2ndL_MISS, 10),
  477. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, DEFAULT, 0),
  478. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, ALL_READ, 5),
  479. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, ALL_WRITE, 6),
  480. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, MEM_UC, 7),
  481. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, MEM_WC, 8),
  482. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, MEM_WT, 9),
  483. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, MEM_WP, 10),
  484. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, MEM_WB, 11),
  485. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, OWN, 13),
  486. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, OTHER, 14),
  487. P4_MAKE_EVENT_ATTR(P4_IOQ_ALLOCATION, PREFETCH, 15),
  488. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, DEFAULT, 0),
  489. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, ALL_READ, 5),
  490. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, ALL_WRITE, 6),
  491. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, MEM_UC, 7),
  492. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, MEM_WC, 8),
  493. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, MEM_WT, 9),
  494. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, MEM_WP, 10),
  495. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, MEM_WB, 11),
  496. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, OWN, 13),
  497. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, OTHER, 14),
  498. P4_MAKE_EVENT_ATTR(P4_IOQ_ACTIVE_ENTRIES, PREFETCH, 15),
  499. P4_MAKE_EVENT_ATTR(P4_FSB_DATA_ACTIVITY, DRDY_DRV, 0),
  500. P4_MAKE_EVENT_ATTR(P4_FSB_DATA_ACTIVITY, DRDY_OWN, 1),
  501. P4_MAKE_EVENT_ATTR(P4_FSB_DATA_ACTIVITY, DRDY_OTHER, 2),
  502. P4_MAKE_EVENT_ATTR(P4_FSB_DATA_ACTIVITY, DBSY_DRV, 3),
  503. P4_MAKE_EVENT_ATTR(P4_FSB_DATA_ACTIVITY, DBSY_OWN, 4),
  504. P4_MAKE_EVENT_ATTR(P4_FSB_DATA_ACTIVITY, DBSY_OTHER, 5),
  505. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_TYPE0, 0),
  506. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_TYPE1, 1),
  507. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_LEN0, 2),
  508. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_LEN1, 3),
  509. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_IO_TYPE, 5),
  510. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_LOCK_TYPE, 6),
  511. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_CACHE_TYPE, 7),
  512. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_SPLIT_TYPE, 8),
  513. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_DEM_TYPE, 9),
  514. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, REQ_ORD_TYPE, 10),
  515. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, MEM_TYPE0, 11),
  516. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, MEM_TYPE1, 12),
  517. P4_MAKE_EVENT_ATTR(P4_BSQ_ALLOCATION, MEM_TYPE2, 13),
  518. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_TYPE0, 0),
  519. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_TYPE1, 1),
  520. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_LEN0, 2),
  521. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_LEN1, 3),
  522. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_IO_TYPE, 5),
  523. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_LOCK_TYPE, 6),
  524. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_CACHE_TYPE, 7),
  525. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_SPLIT_TYPE, 8),
  526. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_DEM_TYPE, 9),
  527. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, REQ_ORD_TYPE, 10),
  528. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, MEM_TYPE0, 11),
  529. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, MEM_TYPE1, 12),
  530. P4_MAKE_EVENT_ATTR(P4_BSQ_ACTIVE_ENTRIES, MEM_TYPE2, 13),
  531. P4_MAKE_EVENT_ATTR(P4_SSE_INPUT_ASSIST, ALL, 15),
  532. P4_MAKE_EVENT_ATTR(P4_PACKED_SP_UOP, ALL, 15),
  533. P4_MAKE_EVENT_ATTR(P4_PACKED_DP_UOP, ALL, 15),
  534. P4_MAKE_EVENT_ATTR(P4_SCALAR_SP_UOP, ALL, 15),
  535. P4_MAKE_EVENT_ATTR(P4_SCALAR_DP_UOP, ALL, 15),
  536. P4_MAKE_EVENT_ATTR(P4_64BIT_MMX_UOP, ALL, 15),
  537. P4_MAKE_EVENT_ATTR(P4_128BIT_MMX_UOP, ALL, 15),
  538. P4_MAKE_EVENT_ATTR(P4_X87_FP_UOP, ALL, 15),
  539. P4_MAKE_EVENT_ATTR(P4_TC_MISC, FLUSH, 4),
  540. P4_MAKE_EVENT_ATTR(P4_GLOBAL_POWER_EVENTS, RUNNING, 0),
  541. P4_MAKE_EVENT_ATTR(P4_TC_MS_XFER, CISC, 0),
  542. P4_MAKE_EVENT_ATTR(P4_UOP_QUEUE_WRITES, FROM_TC_BUILD, 0),
  543. P4_MAKE_EVENT_ATTR(P4_UOP_QUEUE_WRITES, FROM_TC_DELIVER, 1),
  544. P4_MAKE_EVENT_ATTR(P4_UOP_QUEUE_WRITES, FROM_ROM, 2),
  545. P4_MAKE_EVENT_ATTR(P4_RETIRED_MISPRED_BRANCH_TYPE, CONDITIONAL, 1),
  546. P4_MAKE_EVENT_ATTR(P4_RETIRED_MISPRED_BRANCH_TYPE, CALL, 2),
  547. P4_MAKE_EVENT_ATTR(P4_RETIRED_MISPRED_BRANCH_TYPE, RETURN, 3),
  548. P4_MAKE_EVENT_ATTR(P4_RETIRED_MISPRED_BRANCH_TYPE, INDIRECT, 4),
  549. P4_MAKE_EVENT_ATTR(P4_RETIRED_BRANCH_TYPE, CONDITIONAL, 1),
  550. P4_MAKE_EVENT_ATTR(P4_RETIRED_BRANCH_TYPE, CALL, 2),
  551. P4_MAKE_EVENT_ATTR(P4_RETIRED_BRANCH_TYPE, RETURN, 3),
  552. P4_MAKE_EVENT_ATTR(P4_RETIRED_BRANCH_TYPE, INDIRECT, 4),
  553. P4_MAKE_EVENT_ATTR(P4_RESOURCE_STALL, SBFULL, 5),
  554. P4_MAKE_EVENT_ATTR(P4_WC_BUFFER, WCB_EVICTS, 0),
  555. P4_MAKE_EVENT_ATTR(P4_WC_BUFFER, WCB_FULL_EVICTS, 1),
  556. P4_MAKE_EVENT_ATTR(P4_FRONT_END_EVENT, NBOGUS, 0),
  557. P4_MAKE_EVENT_ATTR(P4_FRONT_END_EVENT, BOGUS, 1),
  558. P4_MAKE_EVENT_ATTR(P4_EXECUTION_EVENT, NBOGUS0, 0),
  559. P4_MAKE_EVENT_ATTR(P4_EXECUTION_EVENT, NBOGUS1, 1),
  560. P4_MAKE_EVENT_ATTR(P4_EXECUTION_EVENT, NBOGUS2, 2),
  561. P4_MAKE_EVENT_ATTR(P4_EXECUTION_EVENT, NBOGUS3, 3),
  562. P4_MAKE_EVENT_ATTR(P4_EXECUTION_EVENT, BOGUS0, 4),
  563. P4_MAKE_EVENT_ATTR(P4_EXECUTION_EVENT, BOGUS1, 5),
  564. P4_MAKE_EVENT_ATTR(P4_EXECUTION_EVENT, BOGUS2, 6),
  565. P4_MAKE_EVENT_ATTR(P4_EXECUTION_EVENT, BOGUS3, 7),
  566. P4_MAKE_EVENT_ATTR(P4_REPLAY_EVENT, NBOGUS, 0),
  567. P4_MAKE_EVENT_ATTR(P4_REPLAY_EVENT, BOGUS, 1),
  568. P4_MAKE_EVENT_ATTR(P4_INSTR_RETIRED, NBOGUSNTAG, 0),
  569. P4_MAKE_EVENT_ATTR(P4_INSTR_RETIRED, NBOGUSTAG, 1),
  570. P4_MAKE_EVENT_ATTR(P4_INSTR_RETIRED, BOGUSNTAG, 2),
  571. P4_MAKE_EVENT_ATTR(P4_INSTR_RETIRED, BOGUSTAG, 3),
  572. P4_MAKE_EVENT_ATTR(P4_UOPS_RETIRED, NBOGUS, 0),
  573. P4_MAKE_EVENT_ATTR(P4_UOPS_RETIRED, BOGUS, 1),
  574. P4_MAKE_EVENT_ATTR(P4_UOP_TYPE, TAGLOADS, 1),
  575. P4_MAKE_EVENT_ATTR(P4_UOP_TYPE, TAGSTORES, 2),
  576. P4_MAKE_EVENT_ATTR(P4_BRANCH_RETIRED, MMNP, 0),
  577. P4_MAKE_EVENT_ATTR(P4_BRANCH_RETIRED, MMNM, 1),
  578. P4_MAKE_EVENT_ATTR(P4_BRANCH_RETIRED, MMTP, 2),
  579. P4_MAKE_EVENT_ATTR(P4_BRANCH_RETIRED, MMTM, 3),
  580. P4_MAKE_EVENT_ATTR(P4_MISPRED_BRANCH_RETIRED, NBOGUS, 0),
  581. P4_MAKE_EVENT_ATTR(P4_X87_ASSIST, FPSU, 0),
  582. P4_MAKE_EVENT_ATTR(P4_X87_ASSIST, FPSO, 1),
  583. P4_MAKE_EVENT_ATTR(P4_X87_ASSIST, POAO, 2),
  584. P4_MAKE_EVENT_ATTR(P4_X87_ASSIST, POAU, 3),
  585. P4_MAKE_EVENT_ATTR(P4_X87_ASSIST, PREA, 4),
  586. P4_MAKE_EVENT_ATTR(P4_MACHINE_CLEAR, CLEAR, 0),
  587. P4_MAKE_EVENT_ATTR(P4_MACHINE_CLEAR, MOCLEAR, 1),
  588. P4_MAKE_EVENT_ATTR(P4_MACHINE_CLEAR, SMCLEAR, 2),
  589. P4_MAKE_EVENT_ATTR(P4_INSTR_COMPLETED, NBOGUS, 0),
  590. P4_MAKE_EVENT_ATTR(P4_INSTR_COMPLETED, BOGUS, 1),
  591. };
  592. #endif /* PERF_EVENT_P4_H */