0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __SEV_DEV_H__
0011 #define __SEV_DEV_H__
0012
0013 #include <linux/device.h>
0014 #include <linux/spinlock.h>
0015 #include <linux/mutex.h>
0016 #include <linux/list.h>
0017 #include <linux/wait.h>
0018 #include <linux/dmapool.h>
0019 #include <linux/hw_random.h>
0020 #include <linux/bitops.h>
0021 #include <linux/interrupt.h>
0022 #include <linux/irqreturn.h>
0023 #include <linux/dmaengine.h>
0024 #include <linux/psp-sev.h>
0025 #include <linux/miscdevice.h>
0026 #include <linux/capability.h>
0027
0028 #define SEV_CMD_COMPLETE BIT(1)
0029 #define SEV_CMDRESP_CMD_SHIFT 16
0030 #define SEV_CMDRESP_IOC BIT(0)
0031
0032 struct sev_misc_dev {
0033 struct kref refcount;
0034 struct miscdevice misc;
0035 };
0036
0037 struct sev_device {
0038 struct device *dev;
0039 struct psp_device *psp;
0040
0041 void __iomem *io_regs;
0042
0043 struct sev_vdata *vdata;
0044
0045 int state;
0046 unsigned int int_rcvd;
0047 wait_queue_head_t int_queue;
0048 struct sev_misc_dev *misc;
0049
0050 u8 api_major;
0051 u8 api_minor;
0052 u8 build;
0053
0054 void *cmd_buf;
0055 };
0056
0057 int sev_dev_init(struct psp_device *psp);
0058 void sev_dev_destroy(struct psp_device *psp);
0059
0060 void sev_pci_init(void);
0061 void sev_pci_exit(void);
0062
0063 #endif