| // 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. |
| |
| #include "garnet/lib/cpuperf/events.h" |
| |
| #include <assert.h> |
| |
| #include "lib/fxl/logging.h" |
| |
| namespace cpuperf { |
| |
| const EventDetails g_arch_event_details[] = { |
| #define DEF_ARCH_EVENT(symbol, id, ebx_bit, event, umask, flags, name, \ |
| description) \ |
| [id] = {CPUPERF_MAKE_EVENT_ID(CPUPERF_UNIT_ARCH, id), name, description}, |
| #include <zircon/device/cpu-trace/intel-pm-events.inc> |
| }; |
| |
| const EventDetails g_fixed_event_details[] = { |
| #define DEF_FIXED_EVENT(symbol, id, regnum, flags, name, description) \ |
| [id] = {CPUPERF_MAKE_EVENT_ID(CPUPERF_UNIT_FIXED, id), name, description}, |
| #include <zircon/device/cpu-trace/intel-pm-events.inc> |
| }; |
| |
| const EventDetails g_skl_event_details[] = { |
| #define DEF_SKL_EVENT(symbol, id, event, umask, flags, name, description) \ |
| [id] = {CPUPERF_MAKE_EVENT_ID(CPUPERF_UNIT_MODEL, id), name, description}, |
| #include <zircon/device/cpu-trace/skylake-pm-events.inc> |
| }; |
| |
| const EventDetails g_misc_event_details[] = { |
| #define DEF_MISC_SKL_EVENT(symbol, id, offset, size, flags, name, description) \ |
| [id] = {CPUPERF_MAKE_EVENT_ID(CPUPERF_UNIT_MISC, id), name, description}, |
| #include <zircon/device/cpu-trace/skylake-misc-events.inc> |
| }; |
| |
| bool EventIdToEventDetails(cpuperf_event_id_t id, |
| const EventDetails** out_details) { |
| unsigned event = CPUPERF_EVENT_ID_EVENT(id); |
| const EventDetails* details; |
| |
| switch (CPUPERF_EVENT_ID_UNIT(id)) { |
| case CPUPERF_UNIT_ARCH: |
| details = &g_arch_event_details[event]; |
| break; |
| case CPUPERF_UNIT_FIXED: |
| details = &g_fixed_event_details[event]; |
| break; |
| case CPUPERF_UNIT_MODEL: |
| // TODO(dje): For now assume Skylake, Kaby Lake. |
| details = &g_skl_event_details[event]; |
| break; |
| case CPUPERF_UNIT_MISC: |
| // TODO(dje): For now assume Skylake, Kaby Lake. |
| details = &g_misc_event_details[event]; |
| break; |
| default: |
| return false; |
| } |
| |
| if (details->id == 0) |
| return false; |
| *out_details = details; |
| return true; |
| } |
| |
| } // namespace cpuperf |