|
|
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1992 Microsoft Corporation
Module Name:
p5data.c
Abstract:
a file containing the constant data structures used by the Performance Monitor data for the P5 Extensible Objects.
This file contains a set of constant data structures which are currently defined for the P5 Extensible Objects. This is an example of how other such objects could be defined.
Created:
Russ Blake 24 Dec 93
Revision History:
None.
--*/ //
// Include Files
//
#include <windows.h>
#include <winperf.h>
#include <assert.h>
#include "p5ctrnam.h"
#include "pentdata.h"
//
// Constant structure initializations for the sturcture defined in p5data.h
//
P5_DATA_DEFINITION P5DataDefinition = {
{ sizeof(P5_DATA_DEFINITION) + sizeof(P5_COUNTER_DATA), sizeof(P5_DATA_DEFINITION), sizeof(PERF_OBJECT_TYPE), PENTIUM, 0, PENTIUM, 0, PERF_DETAIL_WIZARD, (sizeof(P5_DATA_DEFINITION)-sizeof(PERF_OBJECT_TYPE))/ sizeof(PERF_COUNTER_DEFINITION), 62, 0, 0 }, { sizeof(PERF_COUNTER_DEFINITION), DATA_READ, 0, DATA_READ, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_read), (DWORD)&((PP5_COUNTER_DATA)0)->llData_read }, { sizeof(PERF_COUNTER_DEFINITION), DATA_WRITE, 0, DATA_WRITE, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_write), (DWORD)&((PP5_COUNTER_DATA)0)->llData_write }, { sizeof(PERF_COUNTER_DEFINITION), DATA_TLB_MISS, 0, DATA_TLB_MISS, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_tlb_miss), (DWORD)&((PP5_COUNTER_DATA)0)->llData_tlb_miss }, { sizeof(PERF_COUNTER_DEFINITION), DATA_READ_MISS, 0, DATA_READ_MISS, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_read_miss), (DWORD)&((PP5_COUNTER_DATA)0)->llData_read_miss }, { sizeof(PERF_COUNTER_DEFINITION), DATA_WRITE_MISS, 0, DATA_WRITE_MISS, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_write_miss), (DWORD)&((PP5_COUNTER_DATA)0)->llData_write_miss }, { sizeof(PERF_COUNTER_DEFINITION), WRITE_HIT_TO_ME_LINE, 0, WRITE_HIT_TO_ME_LINE, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llWrite_hit_to_me_line), (DWORD)&((PP5_COUNTER_DATA)0)->llWrite_hit_to_me_line }, { sizeof(PERF_COUNTER_DEFINITION), DATA_CACHE_LINE_WB, 0, DATA_CACHE_LINE_WB, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_cache_line_wb), (DWORD)&((PP5_COUNTER_DATA)0)->llData_cache_line_wb }, { sizeof(PERF_COUNTER_DEFINITION), DATA_CACHE_SNOOPS, 0, DATA_CACHE_SNOOPS, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_cache_snoops), (DWORD)&((PP5_COUNTER_DATA)0)->llData_cache_snoops }, { sizeof(PERF_COUNTER_DEFINITION), DATA_CACHE_SNOOP_HITS, 0, DATA_CACHE_SNOOP_HITS, 0, -1, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_cache_snoop_hits), (DWORD)&((PP5_COUNTER_DATA)0)->llData_cache_snoop_hits }, { sizeof(PERF_COUNTER_DEFINITION), MEMORY_ACCESSES_IN_PIPES, 0, MEMORY_ACCESSES_IN_PIPES, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llMemory_accesses_in_pipes), (DWORD)&((PP5_COUNTER_DATA)0)->llMemory_accesses_in_pipes }, { sizeof(PERF_COUNTER_DEFINITION), BANK_CONFLICTS, 0, BANK_CONFLICTS, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llBank_conflicts), (DWORD)&((PP5_COUNTER_DATA)0)->llBank_conflicts }, { sizeof(PERF_COUNTER_DEFINITION), MISADLIGNED_DATA_REF, 0, MISADLIGNED_DATA_REF, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llMisaligned_data_ref), (DWORD)&((PP5_COUNTER_DATA)0)->llMisaligned_data_ref }, { sizeof(PERF_COUNTER_DEFINITION), CODE_READ, 0, CODE_READ, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llCode_read), (DWORD)&((PP5_COUNTER_DATA)0)->llCode_read }, { sizeof(PERF_COUNTER_DEFINITION), CODE_TLB_MISS, 0, CODE_TLB_MISS, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llCode_tlb_miss), (DWORD)&((PP5_COUNTER_DATA)0)->llCode_tlb_miss }, { sizeof(PERF_COUNTER_DEFINITION), CODE_CACHE_MISS, 0, CODE_CACHE_MISS, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llCode_cache_miss), (DWORD)&((PP5_COUNTER_DATA)0)->llCode_cache_miss }, { sizeof(PERF_COUNTER_DEFINITION), SEGMENT_LOADS, 0, SEGMENT_LOADS, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llSegment_loads), (DWORD)&((PP5_COUNTER_DATA)0)->llSegment_loads }, { sizeof(PERF_COUNTER_DEFINITION), BRANCHES, 0, BRANCHES, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llBranches), (DWORD)&((PP5_COUNTER_DATA)0)->llBranches }, { sizeof(PERF_COUNTER_DEFINITION), BTB_HITS, 0, BTB_HITS, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llBtb_hits), (DWORD)&((PP5_COUNTER_DATA)0)->llBtb_hits }, { sizeof(PERF_COUNTER_DEFINITION), TAKEN_BRANCH_OR_BTB_HITS, 0, TAKEN_BRANCH_OR_BTB_HITS, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llTaken_branch_or_btb_hits), (DWORD)&((PP5_COUNTER_DATA)0)->llTaken_branch_or_btb_hits }, { sizeof(PERF_COUNTER_DEFINITION), PIPELINE_FLUSHES, 0, PIPELINE_FLUSHES, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llPipeline_flushes), (DWORD)&((PP5_COUNTER_DATA)0)->llPipeline_flushes }, { sizeof(PERF_COUNTER_DEFINITION), INSTRUCTIONS_EXECUTED, 0, INSTRUCTIONS_EXECUTED, 0, -5, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llInstructions_executed), (DWORD)&((PP5_COUNTER_DATA)0)->llInstructions_executed }, { sizeof(PERF_COUNTER_DEFINITION), INSTRUCTIONS_EXECUTED_IN_VPIPE, 0, INSTRUCTIONS_EXECUTED_IN_VPIPE, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llInstructions_executed_in_vpipe), (DWORD)&((PP5_COUNTER_DATA)0)->llInstructions_executed_in_vpipe }, { sizeof(PERF_COUNTER_DEFINITION), BUS_UTILIZATION, 0, BUS_UTILIZATION, 0, -5, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llBus_utilization), (DWORD)&((PP5_COUNTER_DATA)0)->llBus_utilization }, { sizeof(PERF_COUNTER_DEFINITION), PIPE_STALLED_ON_WRITES, 0, PIPE_STALLED_ON_WRITES, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llPipe_stalled_on_writes), (DWORD)&((PP5_COUNTER_DATA)0)->llPipe_stalled_on_writes }, { sizeof(PERF_COUNTER_DEFINITION), PIPE_STALLED_ON_READ, 0, PIPE_STALLED_ON_READ, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llPipe_stalled_on_read), (DWORD)&((PP5_COUNTER_DATA)0)->llPipe_stalled_on_read }, { sizeof(PERF_COUNTER_DEFINITION), STALLED_WHILE_EWBE, 0, STALLED_WHILE_EWBE, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llStalled_while_ewbe), (DWORD)&((PP5_COUNTER_DATA)0)->llStalled_while_ewbe }, { sizeof(PERF_COUNTER_DEFINITION), LOCKED_BUS_CYCLE, 0, LOCKED_BUS_CYCLE, 0, -1, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llLocked_bus_cycle), (DWORD)&((PP5_COUNTER_DATA)0)->llLocked_bus_cycle }, { sizeof(PERF_COUNTER_DEFINITION), IO_RW_CYCLE, 0, IO_RW_CYCLE, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llIo_rw_cycle), (DWORD)&((PP5_COUNTER_DATA)0)->llIo_rw_cycle }, { sizeof(PERF_COUNTER_DEFINITION), NON_CACHED_MEMORY_REF, 0, NON_CACHED_MEMORY_REF, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llNon_cached_memory_ref), (DWORD)&((PP5_COUNTER_DATA)0)->llNon_cached_memory_ref }, { sizeof(PERF_COUNTER_DEFINITION), PIPE_STALLED_ON_ADDR_GEN, 0, PIPE_STALLED_ON_ADDR_GEN, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llPipe_stalled_on_addr_gen), (DWORD)&((PP5_COUNTER_DATA)0)->llPipe_stalled_on_addr_gen }, { sizeof(PERF_COUNTER_DEFINITION), FLOPS, 0, FLOPS, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llFlops), (DWORD)&((PP5_COUNTER_DATA)0)->llFlops }, { sizeof(PERF_COUNTER_DEFINITION), DR0, 0, DR0, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llDebugRegister0), (DWORD)&((PP5_COUNTER_DATA)0)->llDebugRegister0 }, { sizeof(PERF_COUNTER_DEFINITION), DR1, 0, DR1, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llDebugRegister1), (DWORD)&((PP5_COUNTER_DATA)0)->llDebugRegister1 }, { sizeof(PERF_COUNTER_DEFINITION), DR2, 0, DR2, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llDebugRegister2), (DWORD)&((PP5_COUNTER_DATA)0)->llDebugRegister2 }, { sizeof(PERF_COUNTER_DEFINITION), DR3, 0, DR3, 0, -2, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llDebugRegister3), (DWORD)&((PP5_COUNTER_DATA)0)->llDebugRegister3 }, { sizeof(PERF_COUNTER_DEFINITION), INTERRUPTS, 0, INTERRUPTS, 0, -1, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llInterrupts), (DWORD)&((PP5_COUNTER_DATA)0)->llInterrupts }, { sizeof(PERF_COUNTER_DEFINITION), DATA_RW, 0, DATA_RW, 0, -4, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_rw), (DWORD)&((PP5_COUNTER_DATA)0)->llData_rw }, { sizeof(PERF_COUNTER_DEFINITION), DATA_RW_MISS, 0, DATA_RW_MISS, 0, -3, PERF_DETAIL_WIZARD, PERF_COUNTER_BULK_COUNT, sizeof(((PP5_COUNTER_DATA)0)->llData_rw_miss), (DWORD)&((PP5_COUNTER_DATA)0)->llData_rw_miss }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_READ_MISS, 0, PCT_DATA_READ_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataReadMiss), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataReadMiss }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_READ_MISS, 0, PCT_DATA_READ_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataReadBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataReadBase }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_WRITE_MISS, 0, PCT_DATA_WRITE_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataWriteMiss), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataWriteMiss }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_WRITE_MISS, 0, PCT_DATA_WRITE_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataWriteBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataWriteBase }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_RW_MISS, 0, PCT_DATA_RW_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataRWMiss), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataRWMiss }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_RW_MISS, 0, PCT_DATA_RW_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataRWBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataRWBase }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_TLB_MISS, 0, PCT_DATA_TLB_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataTLBMiss), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataTLBMiss }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_TLB_MISS, 0, PCT_DATA_TLB_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataTLBBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataTLBBase }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_SNOOP_HITS, 0, PCT_DATA_SNOOP_HITS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataSnoopHits), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataSnoopHits }, { sizeof(PERF_COUNTER_DEFINITION), PCT_DATA_SNOOP_HITS, 0, PCT_DATA_SNOOP_HITS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctDataSnoopBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctDataSnoopBase }, { sizeof(PERF_COUNTER_DEFINITION), PCT_CODE_READ_MISS, 0, PCT_CODE_READ_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctCodeReadMiss), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctCodeReadMiss }, { sizeof(PERF_COUNTER_DEFINITION), PCT_CODE_READ_MISS, 0, PCT_CODE_READ_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctCodeReadBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctCodeReadBase }, { sizeof(PERF_COUNTER_DEFINITION), PCT_CODE_TLB_MISS, 0, PCT_CODE_TLB_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctCodeTLBMiss), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctCodeTLBMiss }, { sizeof(PERF_COUNTER_DEFINITION), PCT_CODE_TLB_MISS, 0, PCT_CODE_TLB_MISS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctCodeTLBMiss), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctCodeTLBMiss }, { sizeof(PERF_COUNTER_DEFINITION), PCT_BTB_HITS, 0, PCT_BTB_HITS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctBTBHits), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctBTBHits }, { sizeof(PERF_COUNTER_DEFINITION), PCT_BTB_HITS, 0, PCT_BTB_HITS, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctBTBBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctBTBBase }, { sizeof(PERF_COUNTER_DEFINITION), PCT_VPIPE_INST, 0, PCT_VPIPE_INST, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctVpipeInst), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctVpipeInst }, { sizeof(PERF_COUNTER_DEFINITION), PCT_VPIPE_INST, 0, PCT_VPIPE_INST, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctVpipeBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctVpipeBase }, { sizeof(PERF_COUNTER_DEFINITION), PCT_BRANCHES, 0, PCT_BRANCHES, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_FRACTION, sizeof(((PP5_COUNTER_DATA)0)->dwPctBranches), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctBranches }, { sizeof(PERF_COUNTER_DEFINITION), PCT_BRANCHES, 0, PCT_BRANCHES, 0, 0, PERF_DETAIL_WIZARD, PERF_SAMPLE_BASE, sizeof(((PP5_COUNTER_DATA)0)->dwPctBranchesBase), (DWORD)&((PP5_COUNTER_DATA)0)->dwPctBranchesBase } };
//
// initialize the event Id to direct counter data field
// the index of the element in the array is the event Id of the
// data and the value of the array element is the offset to the
// LONGLONG data location from the start of the counter data
//
DWORD P5IndexToData[] = { (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_read), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_write), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_tlb_miss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_read_miss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_write_miss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llWrite_hit_to_me_line), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_cache_line_wb), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_cache_snoops), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_cache_snoop_hits), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llMemory_accesses_in_pipes), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llBank_conflicts), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llMisaligned_data_ref), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llCode_read), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llCode_tlb_miss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llCode_cache_miss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llSegment_loads), PENT_INDEX_NOT_USED, PENT_INDEX_NOT_USED, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llBranches), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llBtb_hits), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llTaken_branch_or_btb_hits), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llPipeline_flushes), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llInstructions_executed), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llInstructions_executed_in_vpipe), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llBus_utilization), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llPipe_stalled_on_writes), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llPipe_stalled_on_read), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llStalled_while_ewbe), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llLocked_bus_cycle), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llIo_rw_cycle), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llNon_cached_memory_ref), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llPipe_stalled_on_addr_gen), PENT_INDEX_NOT_USED, PENT_INDEX_NOT_USED, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llFlops), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llDebugRegister0), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llDebugRegister1), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llDebugRegister2), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llDebugRegister3), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llInterrupts), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_rw), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->llData_rw_miss) };
// define the limit value
DWORD P5IndexMax = sizeof(P5IndexToData) / sizeof (P5IndexToData[0]);
//
// load the table of direct counters used by derived counters. As in the above
// table, the index of the array is the Event Id and the value of the array element
// indicates that the counter is used in a derived counter.
//
BOOL dwDerivedp5Counters[] = { TRUE, // 0x00
TRUE, // 0x01
TRUE, // 0x02
TRUE, // 0x03
TRUE, // 0x04
FALSE, // 0x05
FALSE, // 0x06
TRUE, // 0x07
TRUE, // 0x08
FALSE, // 0x09
FALSE, // 0x0a
FALSE, // 0x0b
TRUE, // 0x0c
TRUE, // 0x0d
TRUE, // 0x0e
FALSE, // 0x0f
FALSE, // 0x10
FALSE, // 0x11
TRUE, // 0x12
TRUE, // 0x13
FALSE, // 0x14
FALSE, // 0x15
TRUE, // 0x16
TRUE, // 0x17
FALSE, // 0x18
FALSE, // 0x19
FALSE, // 0x1a
FALSE, // 0x1b
FALSE, // 0x1c
FALSE, // 0x1d
FALSE, // 0x1e
FALSE, // 0x1f
FALSE, // 0x20
FALSE, // 0x21
FALSE, // 0x22
FALSE, // 0x23
FALSE, // 0x24
FALSE, // 0x25
FALSE, // 0x26
FALSE, // 0x27
TRUE, // 0x28
TRUE // 0x29
};
//
// this table maps the direct counter event Id's to the derived counters
// that use the data. Both event ID's must match for the data to be stored.
//
DERIVED_P5_COUNTER_DEF P5DerivedCounters[] = { {0x00, 0x03, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataReadBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataReadMiss)}, {0x01, 0x04, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataWriteBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataWriteMiss)}, {0x02, 0x28, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataTLBMiss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataTLBBase)}, {0x03, 0x00, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataReadMiss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataReadBase)}, {0x04, 0x01, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataWriteMiss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataWriteBase)}, {0x07, 0x08, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataSnoopBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataSnoopHits)}, {0x08, 0x07, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataSnoopHits), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataSnoopBase)}, {0x0c, 0x0d, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctCodeTLBBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctCodeTLBMiss)}, {0x0c, 0x0e, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctCodeReadBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctCodeReadMiss)}, {0x0d, 0x0c, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctCodeTLBMiss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctCodeTLBBase)}, {0x0e, 0x0c, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctCodeReadMiss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctCodeReadBase)}, {0x12, 0x13, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctBTBBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctBTBHits)}, {0x12, 0x16, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctBranches), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctBranchesBase)}, {0x13, 0x12, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctBTBHits), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctBTBBase)}, {0x16, 0x12, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctBranchesBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctBranches)}, {0x16, 0x17, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctVpipeBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctVpipeInst)}, {0x17, 0x16, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctVpipeInst), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctVpipeBase)}, {0x28, 0x02, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataTLBBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataTLBMiss)}, {0x28, 0x29, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataRWBase), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataRWMiss)}, {0x29, 0x28, (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataRWMiss), (DWORD)((LPBYTE)&((PP5_COUNTER_DATA)0)->dwPctDataRWBase)} };
//
// define the number of derived counter entries
//
DWORD dwP5DerivedCountersCount = sizeof (P5DerivedCounters) / sizeof (P5DerivedCounters[0]);
|