| /* | 
 |  * Copyright (c) 2006 IBM Corp. | 
 |  * Contributed by Kevin Corry <kevcorry@us.ibm.com> | 
 |  * | 
 |  * Permission is hereby granted, free of charge, to any person obtaining a | 
 |  * copy of this software and associated documentation files (the "Software"), | 
 |  * to deal in the Software without restriction, including without limitation | 
 |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | 
 |  * and/or sell copies of the Software, and to permit persons to whom the | 
 |  * Software is furnished to do so, subject to the following conditions: | 
 |  * | 
 |  * The above copyright notice and this permission notice shall be included in | 
 |  * all copies or substantial portions of the Software. | 
 |  * | 
 |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
 |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
 |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
 |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
 |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | 
 |  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | 
 |  * IN THE SOFTWARE. | 
 |  * | 
 |  * This header contains arrays to describe the Event-Selection-Control | 
 |  * Registers (ESCRs), Counter-Configuration-Control Registers (CCCRs), | 
 |  * and countable events on Pentium4/Xeon/EM64T systems. | 
 |  * | 
 |  * For more details, see: | 
 |  * - IA-32 Intel Architecture Software Developer's Manual, | 
 |  *   Volume 3B: System Programming Guide, Part 2 | 
 |  *   (available at: http://www.intel.com/design/Pentium4/manuals/253669.htm) | 
 |  *   - Chapter 18.10: Performance Monitoring Overview | 
 |  *   - Chapter 18.13: Performance Monitoring - Pentium4 and Xeon Processors | 
 |  *   - Chapter 18.14: Performance Monitoring and Hyper-Threading Technology | 
 |  *   - Appendix A.1: Pentium4 and Xeon Processor Performance-Monitoring Events | 
 |  * | 
 |  * This header also contains an array to describe how the Perfmon PMCs map to | 
 |  * the ESCRs and CCCRs. | 
 |  */ | 
 |  | 
 | #ifndef _NETBURST_EVENTS_H_ | 
 | #define _NETBURST_EVENTS_H_ | 
 | /** | 
 |  * netburst_events | 
 |  * | 
 |  * Array of events that can be counted on Pentium4. | 
 |  **/ | 
 | static const netburst_entry_t netburst_events[] = { | 
 |  | 
 | 	/* 0 */ | 
 | 	{.name = "TC_deliver_mode", | 
 | 	 .desc = "The duration (in clock cycles) of the operating modes of " | 
 | 		 "the trace cache and decode engine in the processor package", | 
 | 	 .event_select = 0x1, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 9, 32 }, | 
 | 	 .perf_code = P4_EVENT_TC_DELIVER_MODE, | 
 | 	 .event_masks = { | 
 | 		{.name = "DD", | 
 | 		 .desc = "Both logical CPUs in deliver mode", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "DB", | 
 | 		 .desc = "Logical CPU 0 in deliver mode and " | 
 | 			 "logical CPU 1 in build mode", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "DI", | 
 | 		 .desc = "Logical CPU 0 in deliver mode and logical CPU 1 " | 
 | 			 "either halted, under machine clear condition, or " | 
 | 			 "transitioning to a long microcode flow", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "BD", | 
 | 		 .desc = "Logical CPU 0 in build mode and " | 
 | 			 "logical CPU 1 is in deliver mode", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "BB", | 
 | 		 .desc = "Both logical CPUs in build mode", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "BI", | 
 | 		 .desc = "Logical CPU 0 in build mode and logical CPU 1 " | 
 | 			 "either halted, under machine clear condition, or " | 
 | 			 "transitioning to a long microcode flow", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 		{.name = "ID", | 
 | 		 .desc = "Logical CPU 0 either halted, under machine clear " | 
 | 			 "condition, or transitioning to a long microcode " | 
 | 			 "flow, and logical CPU 1 in deliver mode", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 		{.name = "IB", | 
 | 		 .desc = "Logical CPU 0 either halted, under machine clear " | 
 | 			 "condition, or transitioning to a long microcode " | 
 | 			 "flow, and logical CPU 1 in build mode", | 
 | 		 .bit = 7, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 1 */ | 
 | 	{.name = "BPU_fetch_request", | 
 | 	 .desc = "Instruction fetch requests by the Branch Prediction Unit", | 
 | 	 .event_select = 0x3, | 
 | 	 .escr_select = 0x0, | 
 | 	 .allowed_escrs = { 0, 23 }, | 
 | 	 .perf_code = P4_EVENT_BPU_FETCH_REQUEST, | 
 | 	 .event_masks = { | 
 | 		{.name = "TCMISS", | 
 | 		 .desc = "Trace cache lookup miss", | 
 | 		 .bit = 0, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 2 */ | 
 | 	{.name = "ITLB_reference", | 
 | 	 .desc = "Translations using the Instruction " | 
 | 		 "Translation Look-Aside Buffer", | 
 | 	 .event_select = 0x18, | 
 | 	 .escr_select = 0x3, | 
 | 	 .allowed_escrs = { 3, 26 }, | 
 | 	 .perf_code = P4_EVENT_ITLB_REFERENCE, | 
 | 	 .event_masks = { | 
 | 		{.name = "HIT", | 
 | 		 .desc = "ITLB hit", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "MISS", | 
 | 		 .desc = "ITLB miss", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "HIT_UC", | 
 | 		 .desc = "Uncacheable ITLB hit", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 3 */ | 
 | 	{.name = "memory_cancel", | 
 | 	 .desc = "Canceling of various types of requests in the " | 
 | 		 "Data cache Address Control unit (DAC)", | 
 | 	 .event_select = 0x2, | 
 | 	 .escr_select = 0x5, | 
 | 	 .allowed_escrs = { 15, 38 }, | 
 | 	 .perf_code = P4_EVENT_MEMORY_CANCEL, | 
 | 	 .event_masks = { | 
 | 		{.name = "ST_RB_FULL", | 
 | 		 .desc = "Replayed because no store request " | 
 | 			 "buffer is available", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "64K_CONF", | 
 | 		 .desc = "Conflicts due to 64K aliasing", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 4 */ | 
 | 	{.name = "memory_complete", | 
 | 	 .desc = "Completions of a load split, store split, " | 
 | 		 "uncacheable (UC) split, or UC load", | 
 | 	 .event_select = 0x8, | 
 | 	 .escr_select = 0x2, | 
 | 	 .allowed_escrs = { 13, 36 }, | 
 | 	 .perf_code = P4_EVENT_MEMORY_COMPLETE, | 
 | 	 .event_masks = { | 
 | 		{.name = "LSC", | 
 | 		 .desc = "Load split completed, excluding UC/WC loads", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "SSC", | 
 | 		 .desc = "Any split stores completed", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 5 */ | 
 | 	{.name = "load_port_replay", | 
 | 	 .desc = "Replayed events at the load port", | 
 | 	 .event_select = 0x4, | 
 | 	 .escr_select = 0x2, | 
 | 	 .allowed_escrs = { 13, 36 }, | 
 | 	 .perf_code = P4_EVENT_LOAD_PORT_REPLAY, | 
 | 	 .event_masks = { | 
 | 		{.name = "SPLIT_LD", | 
 | 		 .desc = "Split load", | 
 | 		 .bit = 1, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 6 */ | 
 | 	{.name = "store_port_replay", | 
 | 	 .desc = "Replayed events at the store port", | 
 | 	 .event_select = 0x5, | 
 | 	 .escr_select = 0x2, | 
 | 	 .allowed_escrs = { 13, 36 }, | 
 | 	 .perf_code = P4_EVENT_STORE_PORT_REPLAY, | 
 | 	 .event_masks = { | 
 | 		{.name = "SPLIT_ST", | 
 | 		 .desc = "Split store", | 
 | 		 .bit = 1, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 7 */ | 
 | 	{.name = "MOB_load_replay", | 
 | 	 .desc = "Count of times the memory order buffer (MOB) " | 
 | 		 "caused a load operation to be replayed", | 
 | 	 .event_select = 0x3, | 
 | 	 .escr_select = 0x2, | 
 | 	 .allowed_escrs = { 2, 25 }, | 
 | 	 .perf_code = P4_EVENT_MOB_LOAD_REPLAY, | 
 | 	 .event_masks = { | 
 | 		{.name = "NO_STA", | 
 | 		 .desc = "Replayed because of unknown store address", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "NO_STD", | 
 | 		 .desc = "Replayed because of unknown store data", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "PARTIAL_DATA", | 
 | 		 .desc = "Replayed because of partially overlapped data " | 
 | 			 "access between the load and store operations", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "UNALGN_ADDR", | 
 | 		 .desc = "Replayed because the lower 4 bits of the " | 
 | 			 "linear address do not match between the " | 
 | 			 "load and store operations", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 8 */ | 
 | 	{.name = "page_walk_type", | 
 | 	 .desc = "Page walks that the page miss handler (PMH) performs", | 
 | 	 .event_select = 0x1, | 
 | 	 .escr_select = 0x4, | 
 | 	 .allowed_escrs = { 4, 27 }, | 
 | 	 .perf_code = P4_EVENT_PAGE_WALK_TYPE, | 
 | 	 .event_masks = { | 
 | 		{.name = "DTMISS", | 
 | 		 .desc = "Page walk for a data TLB miss (load or store)", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "ITMISS", | 
 | 		 .desc = "Page walk for an instruction TLB miss", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 9 */ | 
 | 	{.name = "BSQ_cache_reference", | 
 | 	 .desc = "Cache references (2nd or 3rd level caches) as seen by the " | 
 | 		 "bus unit. Read types include both load and RFO, and write " | 
 | 		 "types include writebacks and evictions", | 
 | 	 .event_select = 0xC, | 
 | 	 .escr_select = 0x7, | 
 | 	 .allowed_escrs = { 7, 30 }, | 
 | 	 .perf_code = P4_EVENT_BSQ_CACHE_REFERENCE, | 
 | 	 .event_masks = { | 
 | 		{.name = "RD_2ndL_HITS", | 
 | 		 .desc = "Read 2nd level cache hit Shared", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "RD_2ndL_HITE", | 
 | 		 .desc = "Read 2nd level cache hit Exclusive", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "RD_2ndL_HITM", | 
 | 		 .desc = "Read 2nd level cache hit Modified", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "RD_3rdL_HITS", | 
 | 		 .desc = "Read 3rd level cache hit Shared", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "RD_3rdL_HITE", | 
 | 		 .desc = "Read 3rd level cache hit Exclusive", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "RD_3rdL_HITM", | 
 | 		 .desc = "Read 3rd level cache hit Modified", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 		{.name = "RD_2ndL_MISS", | 
 | 		 .desc = "Read 2nd level cache miss", | 
 | 		 .bit = 8, | 
 | 		}, | 
 | 		{.name = "RD_3rdL_MISS", | 
 | 		 .desc = "Read 3rd level cache miss", | 
 | 		 .bit = 9, | 
 | 		}, | 
 | 		{.name = "WR_2ndL_MISS", | 
 | 		 .desc = "A writeback lookup from DAC misses the 2nd " | 
 | 			 "level cache (unlikely to happen)", | 
 | 		 .bit = 10, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 10 */ | 
 | 	{.name = "IOQ_allocation", | 
 | 	 .desc = "Count of various types of transactions on the bus. A count " | 
 | 		 "is generated each time a transaction is allocated into the " | 
 | 		 "IOQ that matches the specified mask bits. An allocated entry " | 
 | 		 "can be a sector (64 bytes) or a chunk of 8 bytes. Requests " | 
 | 		 "are counted once per retry. All 'TYPE_BIT*' event-masks " | 
 | 		 "together are treated as a single 5-bit value", | 
 | 	 .event_select = 0x3, | 
 | 	 .escr_select = 0x6, | 
 | 	 .allowed_escrs = { 6, 29 }, | 
 | 	 .perf_code = P4_EVENT_IOQ_ALLOCATION, | 
 | 	 .event_masks = { | 
 | 		{.name = "TYPE_BIT0", | 
 | 		 .desc = "Bus request type (bit 0)", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "TYPE_BIT1", | 
 | 		 .desc = "Bus request type (bit 1)", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "TYPE_BIT2", | 
 | 		 .desc = "Bus request type (bit 2)", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "TYPE_BIT3", | 
 | 		 .desc = "Bus request type (bit 3)", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "TYPE_BIT4", | 
 | 		 .desc = "Bus request type (bit 4)", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "ALL_READ", | 
 | 		 .desc = "Count read entries", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 		{.name = "ALL_WRITE", | 
 | 		 .desc = "Count write entries", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 		{.name = "MEM_UC", | 
 | 		 .desc = "Count UC memory access entries", | 
 | 		 .bit = 7, | 
 | 		}, | 
 | 		{.name = "MEM_WC", | 
 | 		 .desc = "Count WC memory access entries", | 
 | 		 .bit = 8, | 
 | 		}, | 
 | 		{.name = "MEM_WT", | 
 | 		 .desc = "Count write-through (WT) memory access entries", | 
 | 		 .bit = 9, | 
 | 		}, | 
 | 		{.name = "MEM_WP", | 
 | 		 .desc = "Count write-protected (WP) memory access entries", | 
 | 		 .bit = 10, | 
 | 		}, | 
 | 		{.name = "MEM_WB", | 
 | 		 .desc = "Count WB memory access entries", | 
 | 		 .bit = 11, | 
 | 		}, | 
 | 		{.name = "OWN", | 
 | 		 .desc = "Count all store requests driven by processor, as " | 
 | 			 "opposed to other processor or DMA", | 
 | 		 .bit = 13, | 
 | 		}, | 
 | 		{.name = "OTHER", | 
 | 		 .desc = "Count all requests driven by other " | 
 | 			 "processors or DMA", | 
 | 		 .bit = 14, | 
 | 		}, | 
 | 		{.name = "PREFETCH", | 
 | 		 .desc = "Include HW and SW prefetch requests in the count", | 
 | 		 .bit = 15, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 11 */ | 
 | 	{.name = "IOQ_active_entries", | 
 | 	 .desc = "Number of entries (clipped at 15) in the IOQ that are " | 
 | 		 "active. An allocated entry can be a sector (64 bytes) " | 
 | 		 "or a chunk of 8 bytes. This event must be programmed in " | 
 | 		 "conjunction with IOQ_allocation. All 'TYPE_BIT*' event-masks " | 
 | 		 "together are treated as a single 5-bit value", | 
 | 	 .event_select = 0x1A, | 
 | 	 .escr_select = 0x6, | 
 | 	 .allowed_escrs = { 29, -1 }, | 
 | 	 .perf_code = P4_EVENT_IOQ_ACTIVE_ENTRIES, | 
 | 	 .event_masks = { | 
 | 		{.name = "TYPE_BIT0", | 
 | 		 .desc = "Bus request type (bit 0)", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "TYPE_BIT1", | 
 | 		 .desc = "Bus request type (bit 1)", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "TYPE_BIT2", | 
 | 		 .desc = "Bus request type (bit 2)", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "TYPE_BIT3", | 
 | 		 .desc = "Bus request type (bit 3)", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "TYPE_BIT4", | 
 | 		 .desc = "Bus request type (bit 4)", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "ALL_READ", | 
 | 		 .desc = "Count read entries", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 		{.name = "ALL_WRITE", | 
 | 		 .desc = "Count write entries", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 		{.name = "MEM_UC", | 
 | 		 .desc = "Count UC memory access entries", | 
 | 		 .bit = 7, | 
 | 		}, | 
 | 		{.name = "MEM_WC", | 
 | 		 .desc = "Count WC memory access entries", | 
 | 		 .bit = 8, | 
 | 		}, | 
 | 		{.name = "MEM_WT", | 
 | 		 .desc = "Count write-through (WT) memory access entries", | 
 | 		 .bit = 9, | 
 | 		}, | 
 | 		{.name = "MEM_WP", | 
 | 		 .desc = "Count write-protected (WP) memory access entries", | 
 | 		 .bit = 10, | 
 | 		}, | 
 | 		{.name = "MEM_WB", | 
 | 		 .desc = "Count WB memory access entries", | 
 | 		 .bit = 11, | 
 | 		}, | 
 | 		{.name = "OWN", | 
 | 		 .desc = "Count all store requests driven by processor, as " | 
 | 			 "opposed to other processor or DMA", | 
 | 		 .bit = 13, | 
 | 		}, | 
 | 		{.name = "OTHER", | 
 | 		 .desc = "Count all requests driven by other " | 
 | 			 "processors or DMA", | 
 | 		 .bit = 14, | 
 | 		}, | 
 | 		{.name = "PREFETCH", | 
 | 		 .desc = "Include HW and SW prefetch requests in the count", | 
 | 		 .bit = 15, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 12 */ | 
 | 	{.name = "FSB_data_activity", | 
 | 	 .desc = "Count of DRDY or DBSY events that " | 
 | 		 "occur on the front side bus", | 
 | 	 .event_select = 0x17, | 
 | 	 .escr_select = 0x6, | 
 | 	 .allowed_escrs = { 6, 29 }, | 
 | 	 .perf_code = P4_EVENT_FSB_DATA_ACTIVITY, | 
 | 	 .event_masks = { | 
 | 		{.name = "DRDY_DRV", | 
 | 		 .desc = "Count when this processor drives data onto the bus. " | 
 | 			 "Includes writes and implicit writebacks", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "DRDY_OWN", | 
 | 		 .desc = "Count when this processor reads data from the bus. " | 
 | 			 "Includes loads and some PIC transactions. Count " | 
 | 			 "DRDY events that we drive. Count DRDY events sampled " | 
 | 			 "that we own", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "DRDY_OTHER", | 
 | 		 .desc = "Count when data is on the bus but not being sampled " | 
 | 			 "by the processor. It may or may not be driven by " | 
 | 			 "this processor", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "DBSY_DRV", | 
 | 		 .desc = "Count when this processor reserves the bus for use " | 
 | 			 "in the next bus cycle in order to drive data", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "DBSY_OWN", | 
 | 		 .desc = "Count when some agent reserves the bus for use in " | 
 | 			 "the next bus cycle to drive data that this processor " | 
 | 			 "will sample", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "DBSY_OTHER", | 
 | 		 .desc = "Count when some agent reserves the bus for use in " | 
 | 			 "the next bus cycle to drive data that this processor " | 
 | 			 "will NOT sample. It may or may not be being driven " | 
 | 			 "by this processor", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 13 */ | 
 | 	{.name = "BSQ_allocation", | 
 | 	 .desc = "Allocations in the Bus Sequence Unit (BSQ). The event mask " | 
 | 		 "bits consist of four sub-groups: request type, request " | 
 | 		 "length, memory type, and a sub-group consisting mostly of " | 
 | 		 "independent bits (5 through 10). Must specify a mask for " | 
 | 		 "each sub-group", | 
 | 	 .event_select = 0x5, | 
 | 	 .escr_select = 0x7, | 
 | 	 .allowed_escrs = { 7, -1 }, | 
 | 	 .perf_code = P4_EVENT_BSQ_ALLOCATION, | 
 | 	 .event_masks = { | 
 | 		{.name = "REQ_TYPE0", | 
 | 		 .desc = "Along with REQ_TYPE1, request type encodings are: " | 
 | 			 "0 - Read (excludes read invalidate), 1 - Read " | 
 | 			 "invalidate, 2 - Write (other than writebacks), 3 - " | 
 | 			 "Writeback (evicted from cache)", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "REQ_TYPE1", | 
 | 		 .desc = "Along with REQ_TYPE0, request type encodings are: " | 
 | 			 "0 - Read (excludes read invalidate), 1 - Read " | 
 | 			 "invalidate, 2 - Write (other than writebacks), 3 - " | 
 | 			 "Writeback (evicted from cache)", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "REQ_LEN0", | 
 | 		 .desc = "Along with REQ_LEN1, request length encodings are: " | 
 | 			 "0 - zero chunks, 1 - one chunk, 3 - eight chunks", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "REQ_LEN1", | 
 | 		 .desc = "Along with REQ_LEN0, request length encodings are: " | 
 | 			 "0 - zero chunks, 1 - one chunk, 3 - eight chunks", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "REQ_IO_TYPE", | 
 | 		 .desc = "Request type is input or output", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 		{.name = "REQ_LOCK_TYPE", | 
 | 		 .desc = "Request type is bus lock", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 		{.name = "REQ_CACHE_TYPE", | 
 | 		 .desc = "Request type is cacheable", | 
 | 		 .bit = 7, | 
 | 		}, | 
 | 		{.name = "REQ_SPLIT_TYPE", | 
 | 		 .desc = "Request type is a bus 8-byte chunk split across " | 
 | 			 "an 8-byte boundary", | 
 | 		 .bit = 8, | 
 | 		}, | 
 | 		{.name = "REQ_DEM_TYPE", | 
 | 		 .desc = "0: Request type is HW.SW prefetch. " | 
 | 			 "1: Request type is a demand", | 
 | 		 .bit = 9, | 
 | 		}, | 
 | 		{.name = "REQ_ORD_TYPE", | 
 | 		 .desc = "Request is an ordered type", | 
 | 		 .bit = 10, | 
 | 		}, | 
 | 		{.name = "MEM_TYPE0", | 
 | 		 .desc = "Along with MEM_TYPE1 and MEM_TYPE2, " | 
 | 			 "memory type encodings are: 0 - UC, " | 
 | 			 "1 - USWC, 4- WT, 5 - WP, 6 - WB", | 
 | 		 .bit = 11, | 
 | 		}, | 
 | 		{.name = "MEM_TYPE1", | 
 | 		 .desc = "Along with MEM_TYPE0 and MEM_TYPE2, " | 
 | 			 "memory type encodings are: 0 - UC, " | 
 | 			 "1 - USWC, 4- WT, 5 - WP, 6 - WB", | 
 | 		 .bit = 12, | 
 | 		}, | 
 | 		{.name = "MEM_TYPE2", | 
 | 		 .desc = "Along with MEM_TYPE0 and MEM_TYPE1, " | 
 | 			 "memory type encodings are: 0 - UC, " | 
 | 			 "1 - USWC, 4- WT, 5 - WP, 6 - WB", | 
 | 		 .bit = 13, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 14 */ | 
 | 	{.name = "BSQ_active_entries", | 
 | 	 .desc = "Number of BSQ entries (clipped at 15) currently active " | 
 | 		 "(valid) which meet the subevent mask criteria during " | 
 | 		 "allocation in the BSQ. Active request entries are allocated " | 
 | 		 "on the BSQ until de-allocated. De-allocation of an entry " | 
 | 		 "does not necessarily imply the request is filled. This " | 
 | 		 "event must be programmed in conjunction with BSQ_allocation", | 
 | 	 .event_select = 0x6, | 
 | 	 .escr_select = 0x7, | 
 | 	 .allowed_escrs = { 30, -1 }, | 
 | 	 .perf_code = P4_EVENT_BSQ_ACTIVE_ENTRIES, | 
 | 	 .event_masks = { | 
 | 		{.name = "REQ_TYPE0", | 
 | 		 .desc = "Along with REQ_TYPE1, request type encodings are: " | 
 | 			 "0 - Read (excludes read invalidate), 1 - Read " | 
 | 			 "invalidate, 2 - Write (other than writebacks), 3 - " | 
 | 			 "Writeback (evicted from cache)", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "REQ_TYPE1", | 
 | 		 .desc = "Along with REQ_TYPE0, request type encodings are: " | 
 | 			 "0 - Read (excludes read invalidate), 1 - Read " | 
 | 			 "invalidate, 2 - Write (other than writebacks), 3 - " | 
 | 			 "Writeback (evicted from cache)", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "REQ_LEN0", | 
 | 		 .desc = "Along with REQ_LEN1, request length encodings are: " | 
 | 			 "0 - zero chunks, 1 - one chunk, 3 - eight chunks", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "REQ_LEN1", | 
 | 		 .desc = "Along with REQ_LEN0, request length encodings are: " | 
 | 			 "0 - zero chunks, 1 - one chunk, 3 - eight chunks", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "REQ_IO_TYPE", | 
 | 		 .desc = "Request type is input or output", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 		{.name = "REQ_LOCK_TYPE", | 
 | 		 .desc = "Request type is bus lock", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 		{.name = "REQ_CACHE_TYPE", | 
 | 		 .desc = "Request type is cacheable", | 
 | 		 .bit = 7, | 
 | 		}, | 
 | 		{.name = "REQ_SPLIT_TYPE", | 
 | 		 .desc = "Request type is a bus 8-byte chunk split across " | 
 | 			 "an 8-byte boundary", | 
 | 		 .bit = 8, | 
 | 		}, | 
 | 		{.name = "REQ_DEM_TYPE", | 
 | 		 .desc = "0: Request type is HW.SW prefetch. " | 
 | 			 "1: Request type is a demand", | 
 | 		 .bit = 9, | 
 | 		}, | 
 | 		{.name = "REQ_ORD_TYPE", | 
 | 		 .desc = "Request is an ordered type", | 
 | 		 .bit = 10, | 
 | 		}, | 
 | 		{.name = "MEM_TYPE0", | 
 | 		 .desc = "Along with MEM_TYPE1 and MEM_TYPE2, " | 
 | 			 "memory type encodings are: 0 - UC, " | 
 | 			 "1 - USWC, 4- WT, 5 - WP, 6 - WB", | 
 | 		 .bit = 11, | 
 | 		}, | 
 | 		{.name = "MEM_TYPE1", | 
 | 		 .desc = "Along with MEM_TYPE0 and MEM_TYPE2, " | 
 | 			 "memory type encodings are: 0 - UC, " | 
 | 			 "1 - USWC, 4- WT, 5 - WP, 6 - WB", | 
 | 		 .bit = 12, | 
 | 		}, | 
 | 		{.name = "MEM_TYPE2", | 
 | 		 .desc = "Along with MEM_TYPE0 and MEM_TYPE1, " | 
 | 			 "memory type encodings are: 0 - UC, " | 
 | 			 "1 - USWC, 4- WT, 5 - WP, 6 - WB", | 
 | 		 .bit = 13, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 15 */ | 
 | 	{.name = "SSE_input_assist", | 
 | 	 .desc = "Number of times an assist is requested to handle problems " | 
 | 		 "with input operands for SSE/SSE2/SSE3 operations; most " | 
 | 		 "notably denormal source operands when the DAZ bit isn't set", | 
 | 	 .event_select = 0x34, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 12, 35 }, | 
 | 	 .perf_code = P4_EVENT_SSE_INPUT_ASSIST, | 
 | 	 .event_masks = { | 
 | 		{.name = "ALL", | 
 | 		 .desc = "Count assists for SSE/SSE2/SSE3 uops", | 
 | 		 .bit = 15, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 16 */ | 
 | 	{.name = "packed_SP_uop", | 
 | 	 .desc = "Number of packed single-precision uops", | 
 | 	 .event_select = 0x8, | 
 | 	 .escr_select = 0x1, | 
 | 	 .perf_code = P4_EVENT_PACKED_SP_UOP, | 
 | 	 .allowed_escrs = { 12, 35 }, | 
 | 	 .event_masks = { | 
 | 		{.name = "ALL", | 
 | 		 .desc = "Count all uops operating on packed " | 
 | 			 "single-precisions operands", | 
 | 		 .bit = 15, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 		{.name = "TAG0", | 
 | 		 .desc = "Tag this event with tag bit 0 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 16, | 
 | 		}, | 
 | 		{.name = "TAG1", | 
 | 		 .desc = "Tag this event with tag bit 1 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 17, | 
 | 		}, | 
 | 		{.name = "TAG2", | 
 | 		 .desc = "Tag this event with tag bit 2 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 18, | 
 | 		}, | 
 | 		{.name = "TAG3", | 
 | 		 .desc = "Tag this event with tag bit 3 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 19, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 17 */ | 
 | 	{.name = "packed_DP_uop", | 
 | 	 .desc = "Number of packed double-precision uops", | 
 | 	 .event_select = 0xC, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 12, 35 }, | 
 | 	 .perf_code = P4_EVENT_PACKED_DP_UOP, | 
 | 	 .event_masks = { | 
 | 		{.name = "ALL", | 
 | 		 .desc = "Count all uops operating on packed " | 
 | 			 "double-precisions operands", | 
 | 		 .bit = 15, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 		{.name = "TAG0", | 
 | 		 .desc = "Tag this event with tag bit 0 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 16, | 
 | 		}, | 
 | 		{.name = "TAG1", | 
 | 		 .desc = "Tag this event with tag bit 1 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 17, | 
 | 		}, | 
 | 		{.name = "TAG2", | 
 | 		 .desc = "Tag this event with tag bit 2 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 18, | 
 | 		}, | 
 | 		{.name = "TAG3", | 
 | 		 .desc = "Tag this event with tag bit 3 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 19, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 18 */ | 
 | 	{.name = "scalar_SP_uop", | 
 | 	 .desc = "Number of scalar single-precision uops", | 
 | 	 .event_select = 0xA, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 12, 35 }, | 
 | 	 .perf_code = P4_EVENT_SCALAR_SP_UOP, | 
 | 	 .event_masks = { | 
 | 		{.name = "ALL", | 
 | 		 .desc = "Count all uops operating on scalar " | 
 | 			 "single-precisions operands", | 
 | 		 .bit = 15, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 		{.name = "TAG0", | 
 | 		 .desc = "Tag this event with tag bit 0 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 16, | 
 | 		}, | 
 | 		{.name = "TAG1", | 
 | 		 .desc = "Tag this event with tag bit 1 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 17, | 
 | 		}, | 
 | 		{.name = "TAG2", | 
 | 		 .desc = "Tag this event with tag bit 2 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 18, | 
 | 		}, | 
 | 		{.name = "TAG3", | 
 | 		 .desc = "Tag this event with tag bit 3 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 19, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 19 */ | 
 | 	{.name = "scalar_DP_uop", | 
 | 	 .desc = "Number of scalar double-precision uops", | 
 | 	 .event_select = 0xE, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 12, 35 }, | 
 | 	 .perf_code = P4_EVENT_SCALAR_DP_UOP, | 
 | 	 .event_masks = { | 
 | 		{.name = "ALL", | 
 | 		 .desc = "Count all uops operating on scalar " | 
 | 			 "double-precisions operands", | 
 | 		 .bit = 15, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 		{.name = "TAG0", | 
 | 		 .desc = "Tag this event with tag bit 0 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 16, | 
 | 		}, | 
 | 		{.name = "TAG1", | 
 | 		 .desc = "Tag this event with tag bit 1 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 17, | 
 | 		}, | 
 | 		{.name = "TAG2", | 
 | 		 .desc = "Tag this event with tag bit 2 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 18, | 
 | 		}, | 
 | 		{.name = "TAG3", | 
 | 		 .desc = "Tag this event with tag bit 3 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 19, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 20 */ | 
 | 	{.name = "64bit_MMX_uop", | 
 | 	 .desc = "Number of MMX instructions which " | 
 | 		 "operate on 64-bit SIMD operands", | 
 | 	 .event_select = 0x2, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 12, 35 }, | 
 | 	 .perf_code = P4_EVENT_64BIT_MMX_UOP, | 
 | 	 .event_masks = { | 
 | 		{.name = "ALL", | 
 | 		 .desc = "Count all uops operating on 64-bit SIMD integer " | 
 | 			 "operands in memory or MMX registers", | 
 | 		 .bit = 15, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 		{.name = "TAG0", | 
 | 		 .desc = "Tag this event with tag bit 0 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 16, | 
 | 		}, | 
 | 		{.name = "TAG1", | 
 | 		 .desc = "Tag this event with tag bit 1 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 17, | 
 | 		}, | 
 | 		{.name = "TAG2", | 
 | 		 .desc = "Tag this event with tag bit 2 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 18, | 
 | 		}, | 
 | 		{.name = "TAG3", | 
 | 		 .desc = "Tag this event with tag bit 3 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 19, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 21 */ | 
 | 	{.name = "128bit_MMX_uop", | 
 | 	 .desc = "Number of MMX instructions which " | 
 | 		 "operate on 128-bit SIMD operands", | 
 | 	 .event_select = 0x1A, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 12, 35 }, | 
 | 	 .perf_code = P4_EVENT_128BIT_MMX_UOP, | 
 | 	 .event_masks = { | 
 | 		{.name = "ALL", | 
 | 		 .desc = "Count all uops operating on 128-bit SIMD integer " | 
 | 			 "operands in memory or MMX registers", | 
 | 		 .bit = 15, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 		{.name = "TAG0", | 
 | 		 .desc = "Tag this event with tag bit 0 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 16, | 
 | 		}, | 
 | 		{.name = "TAG1", | 
 | 		 .desc = "Tag this event with tag bit 1 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 17, | 
 | 		}, | 
 | 		{.name = "TAG2", | 
 | 		 .desc = "Tag this event with tag bit 2 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 18, | 
 | 		}, | 
 | 		{.name = "TAG3", | 
 | 		 .desc = "Tag this event with tag bit 3 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 19, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 22 */ | 
 | 	{.name = "x87_FP_uop", | 
 | 	 .desc = "Number of x87 floating-point uops", | 
 | 	 .event_select = 0x4, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 12, 35 }, | 
 | 	 .perf_code = P4_EVENT_X87_FP_UOP, | 
 | 	 .event_masks = { | 
 | 		{.name = "ALL", | 
 | 		 .desc = "Count all x87 FP uops", | 
 | 		 .bit = 15, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 		{.name = "TAG0", | 
 | 		 .desc = "Tag this event with tag bit 0 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 16, | 
 | 		}, | 
 | 		{.name = "TAG1", | 
 | 		 .desc = "Tag this event with tag bit 1 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 17, | 
 | 		}, | 
 | 		{.name = "TAG2", | 
 | 		 .desc = "Tag this event with tag bit 2 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 18, | 
 | 		}, | 
 | 		{.name = "TAG3", | 
 | 		 .desc = "Tag this event with tag bit 3 " | 
 | 			 "for retirement counting with execution_event", | 
 | 		 .bit = 19, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 23 */ | 
 | 	{.name = "TC_misc", | 
 | 	 .desc = "Miscellaneous events detected by the TC. The counter will " | 
 | 		 "count twice for each occurrence", | 
 | 	 .event_select = 0x6, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 9, 32 }, | 
 | 	 .perf_code = P4_EVENT_TC_MISC, | 
 | 	 .event_masks = { | 
 | 		{.name = "FLUSH", | 
 | 		 .desc = "Number of flushes", | 
 | 		 .bit = 4, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 24 */ | 
 | 	{.name = "global_power_events", | 
 | 	 .desc = "Counts the time during which a processor is not stopped", | 
 | 	 .event_select = 0x13, | 
 | 	 .escr_select = 0x6, | 
 | 	 .allowed_escrs = { 6, 29 }, | 
 | 	 .perf_code = P4_EVENT_GLOBAL_POWER_EVENTS, | 
 | 	 .event_masks = { | 
 | 		{.name = "RUNNING", | 
 | 		 .desc = "The processor is active (includes the " | 
 | 			 "handling of HLT STPCLK and throttling", | 
 | 		 .bit = 0, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 25 */ | 
 | 	{.name = "tc_ms_xfer", | 
 | 	 .desc = "Number of times that uop delivery changed from TC to MS ROM", | 
 | 	 .event_select = 0x5, | 
 | 	 .escr_select = 0x0, | 
 | 	 .allowed_escrs = { 8, 31 }, | 
 | 	 .perf_code = P4_EVENT_TC_MS_XFER, | 
 | 	 .event_masks = { | 
 | 		{.name = "CISC", | 
 | 		 .desc = "A TC to MS transfer occurred", | 
 | 		 .bit = 0, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 26 */ | 
 | 	{.name = "uop_queue_writes", | 
 | 	 .desc = "Number of valid uops written to the uop queue", | 
 | 	 .event_select = 0x9, | 
 | 	 .escr_select = 0x0, | 
 | 	 .allowed_escrs = { 8, 31 }, | 
 | 	 .perf_code = P4_EVENT_UOP_QUEUE_WRITES, | 
 | 	 .event_masks = { | 
 | 		{.name = "FROM_TC_BUILD", | 
 | 		 .desc = "The uops being written are from TC build mode", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "FROM_TC_DELIVER", | 
 | 		 .desc = "The uops being written are from TC deliver mode", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "FROM_ROM", | 
 | 		 .desc = "The uops being written are from microcode ROM", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 27 */ | 
 | 	{.name = "retired_mispred_branch_type", | 
 | 	 .desc = "Number of retiring mispredicted branches by type", | 
 | 	 .event_select = 0x5, | 
 | 	 .escr_select = 0x2, | 
 | 	 .allowed_escrs = { 10, 33 }, | 
 | 	 .perf_code = P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE, | 
 | 	 .event_masks = { | 
 | 		{.name = "CONDITIONAL", | 
 | 		 .desc = "Conditional jumps", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "CALL", | 
 | 		 .desc = "Indirect call branches", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "RETURN", | 
 | 		 .desc = "Return branches", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "INDIRECT", | 
 | 		 .desc = "Returns, indirect calls, or indirect jumps", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 28 */ | 
 | 	{.name = "retired_branch_type", | 
 | 	 .desc = "Number of retiring branches by type", | 
 | 	 .event_select = 0x4, | 
 | 	 .escr_select = 0x2, | 
 | 	 .allowed_escrs = { 10, 33 }, | 
 | 	 .perf_code = P4_EVENT_RETIRED_BRANCH_TYPE, | 
 | 	 .event_masks = { | 
 | 		{.name = "CONDITIONAL", | 
 | 		 .desc = "Conditional jumps", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "CALL", | 
 | 		 .desc = "Indirect call branches", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "RETURN", | 
 | 		 .desc = "Return branches", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "INDIRECT", | 
 | 		 .desc = "Returns, indirect calls, or indirect jumps", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 29 */ | 
 | 	{.name = "resource_stall", | 
 | 	 .desc = "Occurrences of latency or stalls in the Allocator", | 
 | 	 .event_select = 0x1, | 
 | 	 .escr_select = 0x1, | 
 | 	 .allowed_escrs = { 17, 40 }, | 
 | 	 .perf_code = P4_EVENT_RESOURCE_STALL, | 
 | 	 .event_masks = { | 
 | 		{.name = "SBFULL", | 
 | 		 .desc = "A stall due to lack of store buffers", | 
 | 		 .bit = 5, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 30 */ | 
 | 	{.name = "WC_Buffer", | 
 | 	 .desc = "Number of Write Combining Buffer operations", | 
 | 	 .event_select = 0x5, | 
 | 	 .escr_select = 0x5, | 
 | 	 .allowed_escrs = { 15, 38 }, | 
 | 	 .perf_code = P4_EVENT_WC_BUFFER, | 
 | 	 .event_masks = { | 
 | 		{.name = "WCB_EVICTS", | 
 | 		 .desc = "WC Buffer evictions of all causes", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "WCB_FULL_EVICT", | 
 | 		 .desc = "WC Buffer eviction; no WC buffer is available", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 31 */ | 
 | 	{.name = "b2b_cycles", | 
 | 	 .desc = "Number of back-to-back bus cycles", | 
 | 	 .event_select = 0x16, | 
 | 	 .escr_select = 0x3, | 
 | 	 .allowed_escrs = { 6, 29 }, | 
 | 	 .perf_code = P4_EVENT_B2B_CYCLES, | 
 | 	 .event_masks = { | 
 | 		{.name = "BIT1", | 
 | 		 .desc = "bit 1", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "BIT2", | 
 | 		 .desc = "bit 2", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "BIT3", | 
 | 		 .desc = "bit 3", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "BIT4", | 
 | 		 .desc = "bit 4", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "BIT5", | 
 | 		 .desc = "bit 5", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "BIT6", | 
 | 		 .desc = "bit 6", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 | 	/* 32 */ | 
 | 	{.name = "bnr", | 
 | 	 .desc = "Number of bus-not-ready conditions", | 
 | 	 .event_select = 0x8, | 
 | 	 .escr_select = 0x3, | 
 | 	 .allowed_escrs = { 6, 29 }, | 
 | 	 .perf_code = P4_EVENT_BNR, | 
 | 	 .event_masks = { | 
 | 		{.name = "BIT0", | 
 | 		 .desc = "bit 0", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "BIT1", | 
 | 		 .desc = "bit 1", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "BIT2", | 
 | 		 .desc = "bit 2", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 33 */ | 
 | 	{.name = "snoop", | 
 | 	 .desc = "Number of snoop hit modified bus traffic", | 
 | 	 .event_select = 0x6, | 
 | 	 .escr_select = 0x3, | 
 | 	 .allowed_escrs = { 6, 29 }, | 
 | 	 .perf_code = P4_EVENT_SNOOP, | 
 | 	 .event_masks = { | 
 | 		{.name = "BIT2", | 
 | 		 .desc = "bit 2", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "BIT6", | 
 | 		 .desc = "bit 6", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 		{.name = "BIT7", | 
 | 		 .desc = "bit 7", | 
 | 		 .bit = 7, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 34 */ | 
 | 	{.name = "response", | 
 | 	 .desc = "Count of different types of responses", | 
 | 	 .event_select = 0x4, | 
 | 	 .escr_select = 0x3, | 
 | 	 .allowed_escrs = { 6, 29 }, | 
 | 	 .perf_code = P4_EVENT_RESPONSE, | 
 | 	 .event_masks = { | 
 | 		{.name = "BIT1", | 
 | 		 .desc = "bit 1", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "BIT2", | 
 | 		 .desc = "bit 2", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "BIT8", | 
 | 		 .desc = "bit 8", | 
 | 		 .bit = 8, | 
 | 		}, | 
 | 		{.name = "BIT9", | 
 | 		 .desc = "bit 9", | 
 | 		 .bit = 9, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 35 */ | 
 | 	{.name = "front_end_event", | 
 | 	 .desc = "Number of retirements of tagged uops which are specified " | 
 | 		 "through the front-end tagging mechanism", | 
 | 	 .event_select = 0x8, | 
 | 	 .escr_select = 0x5, | 
 | 	 .allowed_escrs = { 21, 43 }, | 
 | 	 .perf_code = P4_EVENT_FRONT_END_EVENT, | 
 | 	 .event_masks = { | 
 | 		{.name = "NBOGUS", | 
 | 		 .desc = "The marked uops are not bogus", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "BOGUS", | 
 | 		 .desc = "The marked uops are bogus", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 36 */ | 
 | 	{.name = "execution_event", | 
 | 	 .desc = "Number of retirements of tagged uops which are specified " | 
 | 		 "through the execution tagging mechanism. The event-mask " | 
 | 		 "allows from one to four types of uops to be tagged", | 
 | 	 .event_select = 0xC, | 
 | 	 .escr_select = 0x5, | 
 | 	 .allowed_escrs = { 21, 43 }, | 
 | 	 .perf_code = P4_EVENT_EXECUTION_EVENT, | 
 | 	 .event_masks = { | 
 | 		{.name = "NBOGUS0", | 
 | 		 .desc = "The marked uops are not bogus", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "NBOGUS1", | 
 | 		 .desc = "The marked uops are not bogus", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "NBOGUS2", | 
 | 		 .desc = "The marked uops are not bogus", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "NBOGUS3", | 
 | 		 .desc = "The marked uops are not bogus", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "BOGUS0", | 
 | 		 .desc = "The marked uops are bogus", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "BOGUS1", | 
 | 		 .desc = "The marked uops are bogus", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 		{.name = "BOGUS2", | 
 | 		 .desc = "The marked uops are bogus", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 		{.name = "BOGUS3", | 
 | 		 .desc = "The marked uops are bogus", | 
 | 		 .bit = 7, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 37 */ | 
 | 	{.name = "replay_event", | 
 | 	 .desc = "Number of retirements of tagged uops which are specified " | 
 | 		 "through the replay tagging mechanism", | 
 | 	 .event_select = 0x9, | 
 | 	 .escr_select = 0x5, | 
 | 	 .allowed_escrs = { 21, 43 }, | 
 | 	 .perf_code = P4_EVENT_REPLAY_EVENT, | 
 | 	 .event_masks = { | 
 | 		{.name = "NBOGUS", | 
 | 		 .desc = "The marked uops are not bogus", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "BOGUS", | 
 | 		 .desc = "The marked uops are bogus", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "L1_LD_MISS", | 
 | 		 .desc = "Virtual mask for L1 cache load miss replays", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "L2_LD_MISS", | 
 | 		 .desc = "Virtual mask for L2 cache load miss replays", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "DTLB_LD_MISS", | 
 | 		 .desc = "Virtual mask for DTLB load miss replays", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 		{.name = "DTLB_ST_MISS", | 
 | 		 .desc = "Virtual mask for DTLB store miss replays", | 
 | 		 .bit = 5, | 
 | 		}, | 
 | 		{.name = "DTLB_ALL_MISS", | 
 | 		 .desc = "Virtual mask for all DTLB miss replays", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 		{.name = "BR_MSP", | 
 | 		 .desc = "Virtual mask for tagged mispredicted branch replays", | 
 | 		 .bit = 7, | 
 | 		}, | 
 | 		{.name = "MOB_LD_REPLAY", | 
 | 		 .desc = "Virtual mask for MOB load replays", | 
 | 		 .bit = 8, | 
 | 		}, | 
 | 		{.name = "SP_LD_RET", | 
 | 		 .desc = "Virtual mask for split load replays. Use with load_port_replay event", | 
 | 		 .bit = 9, | 
 | 		}, | 
 | 		{.name = "SP_ST_RET", | 
 | 		 .desc = "Virtual mask for split store replays. Use with store_port_replay event", | 
 | 		 .bit = 10, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 38 */ | 
 | 	{.name = "instr_retired", | 
 | 	 .desc = "Number of instructions retired during a clock cycle", | 
 | 	 .event_select = 0x2, | 
 | 	 .escr_select = 0x4, | 
 | 	 .allowed_escrs = { 20, 42 }, | 
 | 	 .perf_code = P4_EVENT_INSTR_RETIRED, | 
 | 	 .event_masks = { | 
 | 		{.name = "NBOGUSNTAG", | 
 | 		 .desc = "Non-bogus instructions that are not tagged", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "NBOGUSTAG", | 
 | 		 .desc = "Non-bogus instructions that are tagged", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "BOGUSNTAG", | 
 | 		 .desc = "Bogus instructions that are not tagged", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "BOGUSTAG", | 
 | 		 .desc = "Bogus instructions that are tagged", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 39 */ | 
 | 	{.name = "uops_retired", | 
 | 	 .desc = "Number of uops retired during a clock cycle", | 
 | 	 .event_select = 0x1, | 
 | 	 .escr_select = 0x4, | 
 | 	 .allowed_escrs = { 20, 42 }, | 
 | 	 .perf_code = P4_EVENT_UOPS_RETIRED, | 
 | 	 .event_masks = { | 
 | 		{.name = "NBOGUS", | 
 | 		 .desc = "The marked uops are not bogus", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "BOGUS", | 
 | 		 .desc = "The marked uops are bogus", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 40 */ | 
 | 	{.name = "uops_type", | 
 | 	 .desc = "This event is used in conjunction with with the front-end " | 
 | 		 "mechanism to tag load and store uops", | 
 | 	 .event_select = 0x2, | 
 | 	 .escr_select = 0x2, | 
 | 	 .allowed_escrs = { 18, 41 }, | 
 | 	 .perf_code = P4_EVENT_UOP_TYPE, | 
 | 	 .event_masks = { | 
 | 		{.name = "TAGLOADS", | 
 | 		 .desc = "The uop is a load operation", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "TAGSTORES", | 
 | 		 .desc = "The uop is a store operation", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 41 */ | 
 | 	{.name = "branch_retired", | 
 | 	 .desc = "Number of retirements of a branch", | 
 | 	 .event_select = 0x6, | 
 | 	 .escr_select = 0x5, | 
 | 	 .allowed_escrs = { 21, 43 }, | 
 | 	 .perf_code = P4_EVENT_BRANCH_RETIRED, | 
 | 	 .event_masks = { | 
 | 		{.name = "MMNP", | 
 | 		 .desc = "Branch not-taken predicted", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "MMNM", | 
 | 		 .desc = "Branch not-taken mispredicted", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "MMTP", | 
 | 		 .desc = "Branch taken predicted", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "MMTM", | 
 | 		 .desc = "Branch taken mispredicted", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 42 */ | 
 | 	{.name = "mispred_branch_retired", | 
 | 	 .desc = "Number of retirements of mispredicted " | 
 | 		 "IA-32 branch instructions", | 
 | 	 .event_select = 0x3, | 
 | 	 .escr_select = 0x4, | 
 | 	 .allowed_escrs = { 20, 42 }, | 
 | 	 .perf_code = P4_EVENT_MISPRED_BRANCH_RETIRED, | 
 | 	 .event_masks = { | 
 | 		{.name = "BOGUS", | 
 | 		 .desc = "The retired instruction is not bogus", | 
 | 		 .bit = 0, | 
 | 		 .flags = NETBURST_FL_DFL, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 43 */ | 
 | 	{.name = "x87_assist", | 
 | 	 .desc = "Number of retirements of x87 instructions that required " | 
 | 		 "special handling", | 
 | 	 .event_select = 0x3, | 
 | 	 .escr_select = 0x5, | 
 | 	 .allowed_escrs = { 21, 43 }, | 
 | 	 .perf_code = P4_EVENT_X87_ASSIST, | 
 | 	 .event_masks = { | 
 | 		{.name = "FPSU", | 
 | 		 .desc = "Handle FP stack underflow", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "FPSO", | 
 | 		 .desc = "Handle FP stack overflow", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 		{.name = "POAO", | 
 | 		 .desc = "Handle x87 output overflow", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "POAU", | 
 | 		 .desc = "Handle x87 output underflow", | 
 | 		 .bit = 3, | 
 | 		}, | 
 | 		{.name = "PREA", | 
 | 		 .desc = "Handle x87 input assist", | 
 | 		 .bit = 4, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 44 */ | 
 | 	{.name = "machine_clear", | 
 | 	 .desc = "Number of occurrences when the entire " | 
 | 		 "pipeline of the machine is cleared", | 
 | 	 .event_select = 0x2, | 
 | 	 .escr_select = 0x5, | 
 | 	 .allowed_escrs = { 21, 43 }, | 
 | 	 .perf_code = P4_EVENT_MACHINE_CLEAR, | 
 | 	 .event_masks = { | 
 | 		{.name = "CLEAR", | 
 | 		 .desc = "Counts for a portion of the many cycles while the " | 
 | 			 "machine is cleared for any cause. Use edge-" | 
 | 			 "triggering for this bit only to get a count of " | 
 | 			 "occurrences versus a duration", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "MOCLEAR", | 
 | 		 .desc = "Increments each time the machine is cleared due to " | 
 | 			 "memory ordering issues", | 
 | 		 .bit = 2, | 
 | 		}, | 
 | 		{.name = "SMCLEAR", | 
 | 		 .desc = "Increments each time the machine is cleared due to " | 
 | 			 "self-modifying code issues", | 
 | 		 .bit = 6, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 |  | 
 | 	/* 45 */ | 
 | 	{.name = "instr_completed", | 
 | 	 .desc = "Instructions that have completed and " | 
 | 		 "retired during a clock cycle (models 3, 4, 6 only)", | 
 | 	 .event_select = 0x7, | 
 | 	 .escr_select = 0x4, | 
 | 	 .allowed_escrs = { 21, 42 }, | 
 | 	 .perf_code = P4_EVENT_INSTR_COMPLETED, | 
 | 	 .event_masks = { | 
 | 		{.name = "NBOGUS", | 
 | 		 .desc = "Non-bogus instructions", | 
 | 		 .bit = 0, | 
 | 		}, | 
 | 		{.name = "BOGUS", | 
 | 		 .desc = "Bogus instructions", | 
 | 		 .bit = 1, | 
 | 		}, | 
 | 	 }, | 
 | 	}, | 
 | }; | 
 | #define PME_REPLAY_EVENT    37 | 
 | #define NETBURST_EVENT_COUNT (sizeof(netburst_events)/sizeof(netburst_entry_t)) | 
 |  | 
 | #endif | 
 |  |