11757d2b8SSuma Hegde /* SPDX-License-Identifier: GPL-2.0 */ 21757d2b8SSuma Hegde /* 31757d2b8SSuma Hegde * AMD HSMP Platform Driver 41757d2b8SSuma Hegde * Copyright (c) 2024, AMD. 51757d2b8SSuma Hegde * All Rights Reserved. 61757d2b8SSuma Hegde * 71757d2b8SSuma Hegde * Header file for HSMP driver 81757d2b8SSuma Hegde */ 91757d2b8SSuma Hegde 101757d2b8SSuma Hegde #ifndef HSMP_H 111757d2b8SSuma Hegde #define HSMP_H 121757d2b8SSuma Hegde 131757d2b8SSuma Hegde #include <linux/compiler_types.h> 141757d2b8SSuma Hegde #include <linux/device.h> 151757d2b8SSuma Hegde #include <linux/miscdevice.h> 161757d2b8SSuma Hegde #include <linux/pci.h> 171757d2b8SSuma Hegde #include <linux/semaphore.h> 181757d2b8SSuma Hegde #include <linux/sysfs.h> 191757d2b8SSuma Hegde 201757d2b8SSuma Hegde #define HSMP_METRICS_TABLE_NAME "metrics_bin" 211757d2b8SSuma Hegde 221757d2b8SSuma Hegde #define HSMP_ATTR_GRP_NAME_SIZE 10 231757d2b8SSuma Hegde 241757d2b8SSuma Hegde #define MAX_AMD_SOCKETS 8 251757d2b8SSuma Hegde 261757d2b8SSuma Hegde #define HSMP_CDEV_NAME "hsmp_cdev" 271757d2b8SSuma Hegde #define HSMP_DEVNODE_NAME "hsmp" 281757d2b8SSuma Hegde 291757d2b8SSuma Hegde struct hsmp_mbaddr_info { 301757d2b8SSuma Hegde u32 base_addr; 311757d2b8SSuma Hegde u32 msg_id_off; 321757d2b8SSuma Hegde u32 msg_resp_off; 331757d2b8SSuma Hegde u32 msg_arg_off; 341757d2b8SSuma Hegde u32 size; 351757d2b8SSuma Hegde }; 361757d2b8SSuma Hegde 371757d2b8SSuma Hegde struct hsmp_socket { 381757d2b8SSuma Hegde struct bin_attribute hsmp_attr; 391757d2b8SSuma Hegde struct hsmp_mbaddr_info mbinfo; 401757d2b8SSuma Hegde void __iomem *metric_tbl_addr; 411757d2b8SSuma Hegde void __iomem *virt_base_addr; 421757d2b8SSuma Hegde struct semaphore hsmp_sem; 431757d2b8SSuma Hegde char name[HSMP_ATTR_GRP_NAME_SIZE]; 441757d2b8SSuma Hegde struct pci_dev *root; 451757d2b8SSuma Hegde struct device *dev; 461757d2b8SSuma Hegde u16 sock_ind; 471757d2b8SSuma Hegde int (*amd_hsmp_rdwr)(struct hsmp_socket *sock, u32 off, u32 *val, bool rw); 481757d2b8SSuma Hegde }; 491757d2b8SSuma Hegde 501757d2b8SSuma Hegde struct hsmp_plat_device { 518e75dff5SSuma Hegde struct miscdevice mdev; 521757d2b8SSuma Hegde struct hsmp_socket *sock; 531757d2b8SSuma Hegde u32 proto_ver; 541757d2b8SSuma Hegde u16 num_sockets; 551757d2b8SSuma Hegde bool is_probed; 561757d2b8SSuma Hegde }; 57e47c018aSSuma Hegde 58e47c018aSSuma Hegde int hsmp_cache_proto_ver(u16 sock_ind); 59e47c018aSSuma Hegde int hsmp_test(u16 sock_ind, u32 value); 607d3135d1SSuma Hegde long hsmp_ioctl(struct file *fp, unsigned int cmd, unsigned long arg); 617d3135d1SSuma Hegde void hsmp_misc_deregister(void); 627d3135d1SSuma Hegde int hsmp_misc_register(struct device *dev); 63c1691730SSuma Hegde int hsmp_get_tbl_dram_base(u16 sock_ind); 64c1691730SSuma Hegde ssize_t hsmp_metric_tbl_read(struct hsmp_socket *sock, char *buf, size_t size); 65*1349dd7dSSuma Hegde struct hsmp_plat_device *get_hsmp_pdev(void); 661757d2b8SSuma Hegde #endif /* HSMP_H */ 67