1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Copyright (c) 2018-2021 Intel Corporation */
7 #include <linux/device.h>
8 #include <linux/kernel.h>
9 #include <linux/mutex.h>
10 #include <linux/types.h>
13 * Currently we don't support any PECI command over 32 bytes.
15 #define PECI_REQUEST_MAX_BUF_SIZE 32
17 struct peci_controller
;
21 * struct peci_controller_ops - PECI controller specific methods
22 * @xfer: PECI transfer function
24 * PECI controllers may have different hardware interfaces - the drivers
25 * implementing PECI controllers can use this structure to abstract away those
26 * differences by exposing a common interface for PECI core.
28 struct peci_controller_ops
{
29 int (*xfer
)(struct peci_controller
*controller
, u8 addr
, struct peci_request
*req
);
33 * struct peci_controller - PECI controller
34 * @dev: device object to register PECI controller to the device model
35 * @ops: pointer to device specific controller operations
36 * @bus_lock: lock used to protect multiple callers
37 * @id: PECI controller ID
39 * PECI controllers usually connect to their drivers using non-PECI bus,
40 * such as the platform bus.
41 * Each PECI controller can communicate with one or more PECI devices.
43 struct peci_controller
{
45 const struct peci_controller_ops
*ops
;
46 struct mutex bus_lock
; /* held for the duration of xfer */
50 struct peci_controller
*devm_peci_controller_add(struct device
*parent
,
51 const struct peci_controller_ops
*ops
);
53 static inline struct peci_controller
*to_peci_controller(void *d
)
55 return container_of(d
, struct peci_controller
, dev
);
59 * struct peci_device - PECI device
60 * @dev: device object to register PECI device to the device model
61 * @info: PECI device characteristics
62 * @info.x86_vfm: device vendor-family-model
63 * @info.peci_revision: PECI revision supported by the PECI device
64 * @info.socket_id: the socket ID represented by the PECI device
65 * @addr: address used on the PECI bus connected to the parent controller
66 * @deleted: indicates that PECI device was already deleted
68 * A peci_device identifies a single device (i.e. CPU) connected to a PECI bus.
69 * The behaviour exposed to the rest of the system is defined by the PECI driver
70 * managing the device.
83 static inline struct peci_device
*to_peci_device(struct device
*d
)
85 return container_of(d
, struct peci_device
, dev
);
89 * struct peci_request - PECI request
90 * @device: PECI device to which the request is sent
91 * @tx: TX buffer specific data
93 * @tx.len: transfer data length in bytes
94 * @rx: RX buffer specific data
96 * @rx.len: received data length in bytes
98 * A peci_request represents a request issued by PECI originator (TX) and
99 * a response received from PECI responder (RX).
101 struct peci_request
{
102 struct peci_device
*device
;
104 u8 buf
[PECI_REQUEST_MAX_BUF_SIZE
];
109 #endif /* __LINUX_PECI_H */