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

#include <src/lib/fxl/arraysize.h>

#include "garnet/bin/cpuperf_provider/arm64-events.h"
#include "garnet/bin/cpuperf_provider/categories.h"

namespace cpuperf_provider {

#define DEF_FIXED_CATEGORY(symbol, name, events...) \
  const perfmon_event_id_t symbol##_events[] = {events};
#define DEF_ARCH_CATEGORY(symbol, name, events...) \
  const perfmon_event_id_t symbol##_events[] = {events};
#include "arm64-pm-categories.inc"

extern const CategorySpec kTargetCategories[] = {

// Fixed events.
#define DEF_FIXED_CATEGORY(symbol, name, events...)                     \
  {"cpu:" name, CategoryGroup::kFixedArch, 0, arraysize(symbol##_events), \
   &symbol##_events[0]},
#include "arm64-pm-categories.inc"

// Architecturally specified programmable events.
#define DEF_ARCH_CATEGORY(symbol, name, events...)                             \
  {"cpu:" name, CategoryGroup::kProgrammableArch, 0, arraysize(symbol##_events), \
   &symbol##_events[0]},
#include "arm64-pm-categories.inc"

}; // kTargetCategories

extern const size_t kNumTargetCategories = arraysize(kTargetCategories);

extern const TimebaseSpec kTimebaseCategories[] = {
#define DEF_TIMEBASE_CATEGORY(symbol, name, event) {"cpu:" name, event},
#include "arm64-timebase-categories.inc"
};

extern const size_t kNumTimebaseCategories = arraysize(kTimebaseCategories);

}  // namespace cpuperf_provider
