// Copyright 2019 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.

#ifndef GARNET_BIN_CPUPERF_PROVIDER_INTEL_EVENTS_H_
#define GARNET_BIN_CPUPERF_PROVIDER_INTEL_EVENTS_H_

#include <lib/zircon-internal/device/cpu-trace/perf-mon.h>

namespace cpuperf_provider {

enum EventId {

#define DEF_FIXED_EVENT(symbol, event_name, id, regnum, flags, \
                        readable_name, description) \
  symbol = PERFMON_MAKE_EVENT_ID(PERFMON_GROUP_FIXED, id),
#define DEF_ARCH_EVENT(symbol, event_name, id, ebx_bit, event, \
                       umask, flags, readable_name, description) \
  symbol = PERFMON_MAKE_EVENT_ID(PERFMON_GROUP_ARCH, id),
#include <lib/zircon-internal/device/cpu-trace/intel-pm-events.inc>

#define DEF_SKL_EVENT(symbol, event_name, id, event, umask, \
                      flags, readable_name, description) \
  symbol = PERFMON_MAKE_EVENT_ID(PERFMON_GROUP_MODEL, id),
#include <lib/zircon-internal/device/cpu-trace/skylake-pm-events.inc>

#define DEF_MISC_SKL_EVENT(symbol, event_name, id, offset, size, \
                           flags, readable_name, description) \
  symbol = PERFMON_MAKE_EVENT_ID(PERFMON_GROUP_MISC, id),
#include <lib/zircon-internal/device/cpu-trace/skylake-misc-events.inc>

};

}  // namespace cpuperf_provider

#endif // GARNET_BIN_CPUPERF_PROVIDER_INTEL_EVENTS_H_
