Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/dma/idxd/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  perfmon.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright(c) 2020 Intel Corporation. All rights rsvd. */

#ifndef _PERFMON_H_
#define _PERFMON_H_

#include <linux/slab.h>
#include <linux/pci.h>
#include <linux/sbitmap.h>
#include <linux/dmaengine.h>
#include <linux/percpu-rwsem.h>
#include <linux/wait.h>
#include <linux/cdev.h>
#include <linux/uuid.h>
#include <linux/idxd.h>
#include <linux/perf_event.h>
#include "registers.h"

static inline struct idxd_pmu *event_to_pmu(struct perf_event *event)
{
 struct idxd_pmu *idxd_pmu;
 struct pmu *pmu;

 pmu = event->pmu;
 idxd_pmu = container_of(pmu, struct idxd_pmu, pmu);

 return idxd_pmu;
}

static inline struct idxd_device *event_to_idxd(struct perf_event *event)
{
 struct idxd_pmu *idxd_pmu;
 struct pmu *pmu;

 pmu = event->pmu;
 idxd_pmu = container_of(pmu, struct idxd_pmu, pmu);

 return idxd_pmu->idxd;
}

static inline struct idxd_device *pmu_to_idxd(struct pmu *pmu)
{
 struct idxd_pmu *idxd_pmu;

 idxd_pmu = container_of(pmu, struct idxd_pmu, pmu);

 return idxd_pmu->idxd;
}

enum dsa_perf_events {
 DSA_PERF_EVENT_WQ = 0,
 DSA_PERF_EVENT_ENGINE,
 DSA_PERF_EVENT_ADDR_TRANS,
 DSA_PERF_EVENT_OP,
 DSA_PERF_EVENT_COMPL,
 DSA_PERF_EVENT_MAX,
};

enum filter_enc {
 FLT_WQ = 0,
 FLT_TC,
 FLT_PG_SZ,
 FLT_XFER_SZ,
 FLT_ENG,
 FLT_MAX,
};

#define CONFIG_RESET  0x0000000000000001
#define CNTR_RESET  0x0000000000000002
#define CNTR_ENABLE  0x0000000000000001
#define INTR_OVFL  0x0000000000000002

#define COUNTER_FREEZE  0x00000000FFFFFFFF
#define COUNTER_UNFREEZE 0x0000000000000000
#define OVERFLOW_SIZE  32

#define CNTRCFG_ENABLE  BIT(0)
#define CNTRCFG_IRQ_OVERFLOW BIT(1)
#define CNTRCFG_CATEGORY_SHIFT 8
#define CNTRCFG_EVENT_SHIFT 32

#define PERFMON_TABLE_OFFSET(_idxd)    \
({        \
 typeof(_idxd) __idxd = (_idxd);    \
 ((__idxd)->reg_base + (__idxd)->perfmon_offset); \
})
#define PERFMON_REG_OFFSET(idxd, offset)   \
 (PERFMON_TABLE_OFFSET(idxd) + (offset))

#define PERFCAP_REG(idxd) (PERFMON_REG_OFFSET(idxd, IDXD_PERFCAP_OFFSET))
#define PERFRST_REG(idxd) (PERFMON_REG_OFFSET(idxd, IDXD_PERFRST_OFFSET))
#define OVFSTATUS_REG(idxd) (PERFMON_REG_OFFSET(idxd, IDXD_OVFSTATUS_OFFSET))
#define PERFFRZ_REG(idxd) (PERFMON_REG_OFFSET(idxd, IDXD_PERFFRZ_OFFSET))

#define FLTCFG_REG(idxd, cntr, flt)    \
 (PERFMON_REG_OFFSET(idxd, IDXD_FLTCFG_OFFSET) + ((cntr) * 32) + ((flt) * 4))

#define CNTRCFG_REG(idxd, cntr)     \
 (PERFMON_REG_OFFSET(idxd, IDXD_CNTRCFG_OFFSET) + ((cntr) * 8))
#define CNTRDATA_REG(idxd, cntr)     \
 (PERFMON_REG_OFFSET(idxd, IDXD_CNTRDATA_OFFSET) + ((cntr) * 8))
#define CNTRCAP_REG(idxd, cntr)     \
 (PERFMON_REG_OFFSET(idxd, IDXD_CNTRCAP_OFFSET) + ((cntr) * 8))

#define EVNTCAP_REG(idxd, category) \
 (PERFMON_REG_OFFSET(idxd, IDXD_EVNTCAP_OFFSET) + ((category) * 8))

#define DEFINE_PERFMON_FORMAT_ATTR(_name, _format)   \
static ssize_t __perfmon_idxd_##_name##_show(struct kobject *kobj, \
    struct kobj_attribute *attr,  \
    char *page)    \
{         \
 BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE);   \
 return sprintf(page, _format "\n");    \
}         \
static struct kobj_attribute format_attr_idxd_##_name =   \
 __ATTR(_name, 0444, __perfmon_idxd_##_name##_show, NULL)

#endif

Messung V0.5
C=90 H=90 G=90

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.