/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright (c) 2018-2021 Intel Corporation */
#ifndef __LINUX_PECI_H
#define __LINUX_PECI_H
#include <linux/device.h>
#include <linux/kernel.h>
#include <linux/mutex.h>
#include <linux/types.h>
/*
* Currently we don ' t support any PECI command over 32 bytes .
*/
#define PECI_REQUEST_MAX_BUF_SIZE 32
struct peci_controller;
struct peci_request;
/**
* struct peci_controller_ops - PECI controller specific methods
* @ xfer : PECI transfer function
*
* PECI controllers may have different hardware interfaces - the drivers
* implementing PECI controllers can use this structure to abstract away those
* differences by exposing a common interface for PECI core .
*/
struct peci_controller_ops {
int (*xfer)(struct peci_controller *controller, u8 addr, struct peci_request *req);
};
/**
* struct peci_controller - PECI controller
* @ dev : device object to register PECI controller to the device model
* @ ops : pointer to device specific controller operations
* @ bus_lock : lock used to protect multiple callers
* @ id : PECI controller ID
*
* PECI controllers usually connect to their drivers using non - PECI bus ,
* such as the platform bus .
* Each PECI controller can communicate with one or more PECI devices .
*/
struct peci_controller {
struct device dev;
const struct peci_controller_ops *ops;
struct mutex bus_lock; /* held for the duration of xfer */
u8 id;
};
struct peci_controller *devm_peci_controller_add(struct device *parent,
const struct peci_controller_ops *ops);
static inline struct peci_controller *to_peci_controller(void *d)
{
return container_of(d, struct peci_controller, dev);
}
/**
* struct peci_device - PECI device
* @ dev : device object to register PECI device to the device model
* @ info : PECI device characteristics
* @ info . x86_vfm : device vendor - family - model
* @ info . peci_revision : PECI revision supported by the PECI device
* @ info . socket_id : the socket ID represented by the PECI device
* @ addr : address used on the PECI bus connected to the parent controller
* @ deleted : indicates that PECI device was already deleted
*
* A peci_device identifies a single device ( i . e . CPU ) connected to a PECI bus .
* The behaviour exposed to the rest of the system is defined by the PECI driver
* managing the device .
*/
struct peci_device {
struct device dev;
struct {
u32 x86_vfm;
u8 peci_revision;
u8 socket_id;
} info;
u8 addr;
bool deleted;
};
static inline struct peci_device *to_peci_device(struct device *d)
{
return container_of(d, struct peci_device, dev);
}
/**
* struct peci_request - PECI request
* @ device : PECI device to which the request is sent
* @ tx : TX buffer specific data
* @ tx . buf : TX buffer
* @ tx . len : transfer data length in bytes
* @ rx : RX buffer specific data
* @ rx . buf : RX buffer
* @ rx . len : received data length in bytes
*
* A peci_request represents a request issued by PECI originator ( TX ) and
* a response received from PECI responder ( RX ) .
*/
struct peci_request {
struct peci_device *device;
struct {
u8 buf[PECI_REQUEST_MAX_BUF_SIZE];
u8 len;
} rx, tx;
};
#endif /* __LINUX_PECI_H */
Messung V0.5 in Prozent C=93 H=100 G=96
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland