brintos

brintos / linux-shallow public Read only

0
0
Text · 5.0 KiB · 99924a1 Raw
132 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/* Copyright (c) 2018-2021 Intel Corporation */3 4#ifndef __PECI_INTERNAL_H5#define __PECI_INTERNAL_H6 7#include <linux/device.h>8#include <linux/types.h>9 10struct peci_controller;11struct attribute_group;12struct peci_device;13struct peci_request;14 15/* PECI CPU address range 0x30-0x37 */16#define PECI_BASE_ADDR		0x3017#define PECI_DEVICE_NUM_MAX	818 19struct peci_request *peci_request_alloc(struct peci_device *device, u8 tx_len, u8 rx_len);20void peci_request_free(struct peci_request *req);21 22int peci_request_status(struct peci_request *req);23 24u64 peci_request_dib_read(struct peci_request *req);25s16 peci_request_temp_read(struct peci_request *req);26 27u8 peci_request_data_readb(struct peci_request *req);28u16 peci_request_data_readw(struct peci_request *req);29u32 peci_request_data_readl(struct peci_request *req);30u64 peci_request_data_readq(struct peci_request *req);31 32struct peci_request *peci_xfer_get_dib(struct peci_device *device);33struct peci_request *peci_xfer_get_temp(struct peci_device *device);34 35struct peci_request *peci_xfer_pkg_cfg_readb(struct peci_device *device, u8 index, u16 param);36struct peci_request *peci_xfer_pkg_cfg_readw(struct peci_device *device, u8 index, u16 param);37struct peci_request *peci_xfer_pkg_cfg_readl(struct peci_device *device, u8 index, u16 param);38struct peci_request *peci_xfer_pkg_cfg_readq(struct peci_device *device, u8 index, u16 param);39 40struct peci_request *peci_xfer_pci_cfg_local_readb(struct peci_device *device,41						   u8 bus, u8 dev, u8 func, u16 reg);42struct peci_request *peci_xfer_pci_cfg_local_readw(struct peci_device *device,43						   u8 bus, u8 dev, u8 func, u16 reg);44struct peci_request *peci_xfer_pci_cfg_local_readl(struct peci_device *device,45						   u8 bus, u8 dev, u8 func, u16 reg);46 47struct peci_request *peci_xfer_ep_pci_cfg_local_readb(struct peci_device *device, u8 seg,48						      u8 bus, u8 dev, u8 func, u16 reg);49struct peci_request *peci_xfer_ep_pci_cfg_local_readw(struct peci_device *device, u8 seg,50						      u8 bus, u8 dev, u8 func, u16 reg);51struct peci_request *peci_xfer_ep_pci_cfg_local_readl(struct peci_device *device, u8 seg,52						      u8 bus, u8 dev, u8 func, u16 reg);53 54struct peci_request *peci_xfer_ep_pci_cfg_readb(struct peci_device *device, u8 seg,55						u8 bus, u8 dev, u8 func, u16 reg);56struct peci_request *peci_xfer_ep_pci_cfg_readw(struct peci_device *device, u8 seg,57						u8 bus, u8 dev, u8 func, u16 reg);58struct peci_request *peci_xfer_ep_pci_cfg_readl(struct peci_device *device, u8 seg,59						u8 bus, u8 dev, u8 func, u16 reg);60 61struct peci_request *peci_xfer_ep_mmio32_readl(struct peci_device *device, u8 bar, u8 seg,62					       u8 bus, u8 dev, u8 func, u64 offset);63 64struct peci_request *peci_xfer_ep_mmio64_readl(struct peci_device *device, u8 bar, u8 seg,65					       u8 bus, u8 dev, u8 func, u64 offset);66/**67 * struct peci_device_id - PECI device data to match68 * @data: pointer to driver private data specific to device69 * @x86_vfm: device vendor-family-model70 */71struct peci_device_id {72	const void *data;73	u32 x86_vfm;74};75 76extern const struct device_type peci_device_type;77extern const struct attribute_group *peci_device_groups[];78 79int peci_device_create(struct peci_controller *controller, u8 addr);80void peci_device_destroy(struct peci_device *device);81 82extern const struct bus_type peci_bus_type;83extern const struct attribute_group *peci_bus_groups[];84 85/**86 * struct peci_driver - PECI driver87 * @driver: inherit device driver88 * @probe: probe callback89 * @remove: remove callback90 * @id_table: PECI device match table to decide which device to bind91 */92struct peci_driver {93	struct device_driver driver;94	int (*probe)(struct peci_device *device, const struct peci_device_id *id);95	void (*remove)(struct peci_device *device);96	const struct peci_device_id *id_table;97};98 99#define to_peci_driver(__drv)	container_of_const(__drv, struct peci_driver, driver)100 101int __peci_driver_register(struct peci_driver *driver, struct module *owner,102			   const char *mod_name);103/**104 * peci_driver_register() - register PECI driver105 * @driver: the driver to be registered106 *107 * PECI drivers that don't need to do anything special in module init should108 * use the convenience "module_peci_driver" macro instead109 *110 * Return: zero on success, else a negative error code.111 */112#define peci_driver_register(driver) \113	__peci_driver_register(driver, THIS_MODULE, KBUILD_MODNAME)114void peci_driver_unregister(struct peci_driver *driver);115 116/**117 * module_peci_driver() - helper macro for registering a modular PECI driver118 * @__peci_driver: peci_driver struct119 *120 * Helper macro for PECI drivers which do not do anything special in module121 * init/exit. This eliminates a lot of boilerplate. Each module may only122 * use this macro once, and calling it replaces module_init() and module_exit()123 */124#define module_peci_driver(__peci_driver) \125	module_driver(__peci_driver, peci_driver_register, peci_driver_unregister)126 127extern const struct device_type peci_controller_type;128 129int peci_controller_scan_devices(struct peci_controller *controller);130 131#endif /* __PECI_INTERNAL_H */132