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 { 51*8e75dff5SSuma Hegde struct miscdevice mdev; 521757d2b8SSuma Hegde struct hsmp_socket *sock; 531757d2b8SSuma Hegde u32 proto_ver; 541757d2b8SSuma Hegde u16 num_sockets; 551757d2b8SSuma Hegde bool is_acpi_device; 561757d2b8SSuma Hegde bool is_probed; 571757d2b8SSuma Hegde }; 58e47c018aSSuma Hegde 59*8e75dff5SSuma Hegde extern struct hsmp_plat_device hsmp_pdev; 60e47c018aSSuma Hegde 61e47c018aSSuma Hegde ssize_t hsmp_metric_tbl_read(struct file *filp, struct kobject *kobj, 62e47c018aSSuma Hegde struct bin_attribute *bin_attr, char *buf, 63e47c018aSSuma Hegde loff_t off, size_t count); 64e47c018aSSuma Hegde int hsmp_create_non_acpi_sysfs_if(struct device *dev); 65969f9154SSuma Hegde int hsmp_create_acpi_sysfs_if(struct device *dev); 66e47c018aSSuma Hegde int hsmp_cache_proto_ver(u16 sock_ind); 67e47c018aSSuma Hegde umode_t hsmp_is_sock_attr_visible(struct kobject *kobj, 68e47c018aSSuma Hegde struct bin_attribute *battr, int id); 69e47c018aSSuma Hegde int hsmp_create_attr_list(struct attribute_group *attr_grp, 70e47c018aSSuma Hegde struct device *dev, u16 sock_ind); 71e47c018aSSuma Hegde int hsmp_test(u16 sock_ind, u32 value); 72e47c018aSSuma Hegde int init_platform_device(struct device *dev); 73969f9154SSuma Hegde int init_acpi(struct device *dev); 741757d2b8SSuma Hegde #endif /* HSMP_H */ 75