// 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
// - id
// - name (cannot have any spaces, used in trace category name)
// - varargs list of register names (from event .inc files)

// By convention each model's set of categories has NONE with id zero
// and name "none"
DEF_SKL_CATEGORY(SKL_CATEGORY_NONE, 0, "none")

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

DEF_SKL_CATEGORY(SKL_CATEGORY_L2_DATA, 2, "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, 3, "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, 4, "l2_rfo",
  SKL_L2_RQSTS_RFO_MISS,
  SKL_L2_RQSTS_RFO_HIT,
  SKL_L2_RQSTS_ALL_RFO)

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

// id 6 reserved

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

DEF_SKL_CATEGORY(SKL_CATEGORY_L1_SUMMARY, 8, "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, 9, "dtlb_store",
  SKL_DTLB_STORE_MISSES_MISS_CAUSES_A_WALK,
  SKL_DTLB_STORE_MISSES_WALK_COMPLETED,
  SKL_DTLB_STORE_MISSES_WALK_PENDING,
  SKL_DTLB_STORE_MISSES_WALK_ACTIVE,
  SKL_DTLB_STORE_MISSES_STLB_HIT)

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_DEMAND_DATA, 10, "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, 11, "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, 12, "offcore_demand_rfo",
  SKL_OFFCORE_REQUESTS_OUTSTANDING_DEMAND_RFO,
  SKL_OFFCORE_REQUESTS_OUTSTANDING_CYCLES_WITH_DEMAND_RFO)

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

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_L3_MISS, 14, "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, 15, "icache",
  SKL_ICACHE_64B_IFDATA_STALL,
  SKL_ICACHE_64B_IFTAG_HIT,
  SKL_ICACHE_64B_IFTAG_MISS)

DEF_SKL_CATEGORY(SKL_CATEGORY_ITLB, 16, "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, 17, "stall_summary",
  SKL_RESOURCE_STALLS_ANY,
  SKL_RESOURCE_STALLS_SB)

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

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

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

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

DEF_SKL_CATEGORY(SKL_CATEGORY_OFFCORE_REQUESTS, 22, "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,
  SKL_OFFCORE_REQUESTS_L3_MISS_DEMAND_DATA_RD,
  SKL_OFFCORE_REQUESTS_ALL_REQUESTS,
  SKL_OFFCORE_REQUEST_BUFFER_SQ_FULL)

// id 23 reserved

DEF_SKL_CATEGORY(SKL_CATEGORY_BR_MISP, 24, "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, 25, "hw_interrupts",
  SKL_HW_INTERRUPTS_RECEIVED)

DEF_SKL_CATEGORY(SKL_CATEGORY_MEM_RETIRED, 26, "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, 27, "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, 28, "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, 29, "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, 30, "l2_lines",
  SKL_L2_TRANS_L2_WB,
  SKL_L2_LINES_IN_ALL)

#undef DEF_SKL_CATEGORY
