// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Table of categories for configuring Intel Performance Monitor hardware
// for Skylake/Kabylake. See Intel Vol3 Chapter 19.2 Performance Monitoring
// Events For 6th And 7th Generation Processors.
// The entries here are sorted by their general order of appearance in the
// manual.

#ifndef DEF_SKL_CATEGORY
#error "DEF_SKL_CATEGORY not defined"
#endif

// Arguments:
// - symbol (must be unique among all categories)
// - name (must be unique among all non-model-specific categories,
//         models can have use the same categories,
//         cannot have any spaces: used in trace category name)
// - varargs list of register names (from event .inc files)

DEF_SKL_CATEGORY(SKL_CATEGORY_DTLB_LOAD, "dtlb_load",
  SKL_DTLB_LOAD_MISSES_MISS_CAUSES_A_WALK,
  SKL_DTLB_LOAD_MISSES_WALK_COMPLETED,
  SKL_DTLB_LOAD_MISSES_WALK_ACTIVE,
  SKL_DTLB_LOAD_MISSES_STLB_HIT)

DEF_SKL_CATEGORY(SKL_CATEGORY_L2_DATA, "l2_data",
  SKL_L2_RQSTS_DEMAND_DATA_RD_MISS,
  SKL_L2_RQSTS_DEMAND_DATA_RD_HIT,
  SKL_L2_RQSTS_ALL_DEMAND_DATA_RD)

DEF_SKL_CATEGORY(SKL_CATEGORY_L2_CODE, "l2_code",
  SKL_L2_RQSTS_CODE_RD_MISS,
  SKL_L2_RQSTS_CODE_RD_HIT,
  SKL_L2_RQSTS_ALL_CODE_RD)

DEF_SKL_CATEGORY(SKL_CATEGORY_L2_RFO, "l2_rfo",
  SKL_L2_RQSTS_RFO_MISS,
  SKL_L2_RQSTS_RFO_HIT,
  SKL_L2_RQSTS_ALL_RFO)

DEF_SKL_CATEGORY(SKL_CATEGORY_L2_ALL, "l2_summary",
  SKL_L2_RQSTS_ALL_DEMAND_MISS,
  SKL_L2_RQSTS_MISS,
  SKL_L2_RQSTS_ALL_DEMAND_REFERENCES,
  SKL_L2_RQSTS_REFERENCES)

DEF_SKL_CATEGORY(SKL_CATEGORY_PREFETCH_SUMMARY, "prefetch_summary",
  SKL_L2_RQSTS_PF_MISS,
  SKL_L2_RQSTS_PF_HIT,
  SKL_L2_RQSTS_ALL_PF)

DEF_SKL_CATEGORY(SKL_CATEGORY_L3_SUMMARY, "l3_summary",
  SKL_LONGEST_LAT_CACHE_REFERENCE,
  SKL_LONGEST_LAT_CACHE_MISS)

DEF_SKL_CATEGORY(SKL_CATEGORY_L1_SUMMARY, "l1_summary",
  SKL_L1D_PEND_MISS_PENDING_CYCLES,
  SKL_L1D_PEND_MISS_PENDING_CYCLES_ANY,
  SKL_L1D_REPLACEMENT)

DEF_SKL_CATEGORY(SKL_CATEGORY_DTLB_STORE, "dtlb_store",
  SKL_DTLB_STORE_MISSES_MISS_CAUSES_A_WALK,
  SKL_DTLB_STORE_MISSES_WALK_COMPLETED,
  SKL_DTLB_STORE_MISSES_WALK_ACTIVE,
  SKL_DTLB_STORE_MISSES_STLB_HIT)

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_DEMAND_DATA, "offcore_demand_data",
  SKL_OFFCORE_REQUESTS_OUTSTANDING_DEMAND_DATA_RD,
  SKL_OFFCORE_REQUESTS_OUTSTANDING_CYCLES_WITH_DEMAND_DATA_RD,
  SKL_OFFCORE_REQUESTS_OUTSTANDING_CYCLES_WITH_DEMAND_DATA_RD_GE_6)

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_CODE, "offcore_demand_code",
  SKL_OFFCORE_REQUESTS_OUTSTANDING_DEMAND_CODE_RD,
  SKL_OFFCORE_REQUESTS_OUTSTANDING_CYCLES_WITH_DEMAND_CODE_RD)

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_RFO, "offcore_demand_rfo",
  SKL_OFFCORE_REQUESTS_OUTSTANDING_DEMAND_RFO,
  SKL_OFFCORE_REQUESTS_OUTSTANDING_CYCLES_WITH_DEMAND_RFO)

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_DATA, "offcore_data",
  SKL_OFFCORE_REQUESTS_OUTSTANDING_DATA_RD,
  SKL_OFFCORE_REQUESTS_OUTSTANDING_CYCLES_WITH_DATA_RD)

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_L3_MISS, "offcore_l3_miss",
  SKL_OFFCORE_REQUESTS_OUTSTANDING_L3_MISS_DEMAND_DATA_RD,
  SKL_OFFCORE_REQUESTS_OUTSTANDING_CYCLES_WITH_L3_MISS_DEMAND_DATA_RD,
  SKL_OFFCORE_REQUESTS_OUTSTANDING_CYCLES_WITH_L3_MISS_DEMAND_DATA_RD_GE_6)

DEF_SKL_CATEGORY(SKL_CATEGORY_ICACHE, "icache",
  SKL_ICACHE_64B_IFDATA_STALL,
  SKL_ICACHE_64B_IFTAG_HIT,
  SKL_ICACHE_64B_IFTAG_MISS)

DEF_SKL_CATEGORY(SKL_CATEGORY_ITLB, "itlb",
  SKL_ITLB_MISSES_MISS_CAUSES_A_WALK,
  SKL_ITLB_MISSES_WALK_COMPLETED,
  SKL_ITLB_MISSES_WALK_PENDING,
  SKL_ITLB_MISSES_STLB_HIT)

DEF_SKL_CATEGORY(SKL_CATEGORY_STALL_SUMMARY, "stall_summary",
  SKL_RESOURCE_STALLS_ANY,
  SKL_RESOURCE_STALLS_SB)

DEF_SKL_CATEGORY(SKL_CATEGORY_L1_CYCLES, "l1_miss_cycles",
  SKL_CYCLE_ACTIVITY_CYCLES_L1D_MISS,
  SKL_CYCLE_ACTIVITY_STALLS_L1D_MISS)

DEF_SKL_CATEGORY(SKL_CATEGORY_L2_CYCLES, "l2_miss_cycles",
  SKL_CYCLE_ACTIVITY_CYCLES_L2_MISS,
  SKL_CYCLE_ACTIVITY_STALLS_L2_MISS)

DEF_SKL_CATEGORY(SKL_CATEGORY_L3_CYCLES, "l3_miss_cycles",
  SKL_CYCLE_ACTIVITY_CYCLES_L3_MISS,
  SKL_CYCLE_ACTIVITY_STALLS_L3_MISS)

DEF_SKL_CATEGORY(SKL_CATEGORY_MEM_CYCLES, "mem_cycles",
  SKL_CYCLE_ACTIVITY_CYCLES_MEM_ANY,
  SKL_CYCLE_ACTIVITY_STALLS_MEM_ANY)

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_REQUESTS, "offcore_requests",
  SKL_OFFCORE_REQUESTS_DEMAND_DATA_RD,
  SKL_OFFCORE_REQUESTS_DEMAND_CODE_RD,
  SKL_OFFCORE_REQUESTS_DEMAND_RFO,
  SKL_OFFCORE_REQUESTS_ALL_DATA_RD)

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_MISC, "offcore_misc",
  SKL_OFFCORE_REQUESTS_L3_MISS_DEMAND_DATA_RD,
  SKL_OFFCORE_REQUESTS_ALL_REQUESTS,
  SKL_OFFCORE_REQUEST_BUFFER_SQ_FULL)

DEF_SKL_CATEGORY(SKL_CATEGORY_BR_MISP, "br_misp",
  SKL_BR_MISP_RETIRED_ALL_BRANCHES,
  SKL_BR_MISP_RETIRED_CONDITIONAL,
  SKL_BR_MISP_RETIRED_MACRO,
  SKL_BR_MISP_RETIRED_NEAR_TAKEN)

DEF_SKL_CATEGORY(SKL_CATEGORY_HW_INTERRUPTS, "hw_interrupts",
  SKL_HW_INTERRUPTS_RECEIVED)

DEF_SKL_CATEGORY(SKL_CATEGORY_MEM_RETIRED, "mem_retired_summary",
  SKL_MEM_INST_RETIRED_LOCKED_LOADS,
  SKL_MEM_INST_RETIRED_ALL_LOADS,
  SKL_MEM_INST_RETIRED_ALL_STORES)

DEF_SKL_CATEGORY(SKL_CATEGORY_MEM_RETIRED_HIT, "mem_retired_hit",
  SKL_MEM_LOAD_RETIRED_L1_HIT,
  SKL_MEM_LOAD_RETIRED_L2_HIT,
  SKL_MEM_LOAD_RETIRED_L3_HIT)

DEF_SKL_CATEGORY(SKL_CATEGORY_MEM_RETIRED_MISS, "mem_retired_miss",
  SKL_MEM_LOAD_RETIRED_L1_MISS,
  SKL_MEM_LOAD_RETIRED_L2_MISS,
  SKL_MEM_LOAD_RETIRED_L3_MISS)

DEF_SKL_CATEGORY(SKL_CATEGORY_L3_HIT_RETIRED_XSNP, "l3_hit_retired_xsnp",
  SKL_MEM_LOAD_L3_HIT_RETIRED_XSNP_MISS,
  SKL_MEM_LOAD_L3_HIT_RETIRED_XSNP_HIT,
  SKL_MEM_LOAD_L3_HIT_RETIRED_XSNP_HITM,
  SKL_MEM_LOAD_L3_HIT_RETIRED_XSNP_NONE)

DEF_SKL_CATEGORY(SKL_CATEGORY_L2_LINES, "l2_lines",
  SKL_L2_TRANS_L2_WB,
  SKL_L2_LINES_IN_ALL)

#undef DEF_SKL_CATEGORY
