root/arch/powerpc/perf/hv-common.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef LINUX_POWERPC_PERF_HV_COMMON_H_
   3 #define LINUX_POWERPC_PERF_HV_COMMON_H_
   4 
   5 #include <linux/perf_event.h>
   6 #include <linux/types.h>
   7 
   8 struct hv_perf_caps {
   9         u16 version;
  10         u16 collect_privileged:1,
  11             ga:1,
  12             expanded:1,
  13             lab:1,
  14             unused:12;
  15 };
  16 
  17 unsigned long hv_perf_caps_get(struct hv_perf_caps *caps);
  18 
  19 
  20 #define EVENT_DEFINE_RANGE_FORMAT(name, attr_var, bit_start, bit_end)   \
  21 PMU_FORMAT_ATTR(name, #attr_var ":" #bit_start "-" #bit_end);           \
  22 EVENT_DEFINE_RANGE(name, attr_var, bit_start, bit_end)
  23 
  24 /*
  25  * The EVENT_DEFINE_RANGE_FORMAT() macro above includes helper functions
  26  * for the fields (eg: event_get_starting_index()). For some fields we
  27  * need the bit-range definition, but no the helper functions. Define a
  28  * lite version of the above macro without the helpers and silence
  29  * compiler warnings unused static functions.
  30  */
  31 #define EVENT_DEFINE_RANGE_FORMAT_LITE(name, attr_var, bit_start, bit_end) \
  32 PMU_FORMAT_ATTR(name, #attr_var ":" #bit_start "-" #bit_end);
  33 
  34 #define EVENT_DEFINE_RANGE(name, attr_var, bit_start, bit_end)  \
  35 static u64 event_get_##name##_max(void)                                 \
  36 {                                                                       \
  37         BUILD_BUG_ON((bit_start > bit_end)                              \
  38                     || (bit_end >= (sizeof(1ull) * 8)));                \
  39         return (((1ull << (bit_end - bit_start)) - 1) << 1) + 1;        \
  40 }                                                                       \
  41 static u64 event_get_##name(struct perf_event *event)                   \
  42 {                                                                       \
  43         return (event->attr.attr_var >> (bit_start)) &                  \
  44                 event_get_##name##_max();                               \
  45 }
  46 
  47 #endif

/* [<][>][^][v][top][bottom][index][help] */