xref: /linux/drivers/platform/x86/amd/hsmp/hsmp.h (revision 8e75dff56e003cdd38643024c4f5f8ba227100c8)
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