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