1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
---|---|
2 | /* |
3 | * AMD Platform Security Processor (PSP) interface driver |
4 | * |
5 | * Copyright (C) 2017-2019 Advanced Micro Devices, Inc. |
6 | * |
7 | * Author: Brijesh Singh <brijesh.singh@amd.com> |
8 | */ |
9 | |
10 | #ifndef __SEV_DEV_H__ |
11 | #define __SEV_DEV_H__ |
12 | |
13 | #include <linux/device.h> |
14 | #include <linux/spinlock.h> |
15 | #include <linux/mutex.h> |
16 | #include <linux/list.h> |
17 | #include <linux/wait.h> |
18 | #include <linux/dmapool.h> |
19 | #include <linux/hw_random.h> |
20 | #include <linux/bitops.h> |
21 | #include <linux/interrupt.h> |
22 | #include <linux/irqreturn.h> |
23 | #include <linux/dmaengine.h> |
24 | #include <linux/psp-sev.h> |
25 | #include <linux/miscdevice.h> |
26 | #include <linux/capability.h> |
27 | |
28 | #define SEV_CMDRESP_CMD GENMASK(26, 16) |
29 | #define SEV_CMD_COMPLETE BIT(1) |
30 | #define SEV_CMDRESP_IOC BIT(0) |
31 | |
32 | struct sev_misc_dev { |
33 | struct kref refcount; |
34 | struct miscdevice misc; |
35 | }; |
36 | |
37 | struct sev_device { |
38 | struct device *dev; |
39 | struct psp_device *psp; |
40 | |
41 | void __iomem *io_regs; |
42 | |
43 | struct sev_vdata *vdata; |
44 | |
45 | int state; |
46 | unsigned int int_rcvd; |
47 | wait_queue_head_t int_queue; |
48 | struct sev_misc_dev *misc; |
49 | |
50 | u8 api_major; |
51 | u8 api_minor; |
52 | u8 build; |
53 | |
54 | void *cmd_buf; |
55 | void *cmd_buf_backup; |
56 | bool cmd_buf_active; |
57 | bool cmd_buf_backup_active; |
58 | |
59 | bool snp_initialized; |
60 | }; |
61 | |
62 | int sev_dev_init(struct psp_device *psp); |
63 | void sev_dev_destroy(struct psp_device *psp); |
64 | |
65 | void sev_pci_init(void); |
66 | void sev_pci_exit(void); |
67 | |
68 | #endif /* __SEV_DEV_H */ |
69 |