.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
---|
1 | 2 | /* |
---|
2 | 3 | * AMD Platform Security Processor (PSP) interface driver |
---|
3 | 4 | * |
---|
4 | | - * Copyright (C) 2017 Advanced Micro Devices, Inc. |
---|
| 5 | + * Copyright (C) 2017-2019 Advanced Micro Devices, Inc. |
---|
5 | 6 | * |
---|
6 | 7 | * Author: Brijesh Singh <brijesh.singh@amd.com> |
---|
7 | | - * |
---|
8 | | - * This program is free software; you can redistribute it and/or modify |
---|
9 | | - * it under the terms of the GNU General Public License version 2 as |
---|
10 | | - * published by the Free Software Foundation. |
---|
11 | 8 | */ |
---|
12 | 9 | |
---|
13 | 10 | #ifndef __PSP_DEV_H__ |
---|
14 | 11 | #define __PSP_DEV_H__ |
---|
15 | 12 | |
---|
16 | 13 | #include <linux/device.h> |
---|
17 | | -#include <linux/pci.h> |
---|
18 | | -#include <linux/spinlock.h> |
---|
19 | | -#include <linux/mutex.h> |
---|
20 | 14 | #include <linux/list.h> |
---|
21 | | -#include <linux/wait.h> |
---|
22 | | -#include <linux/dmapool.h> |
---|
23 | | -#include <linux/hw_random.h> |
---|
24 | | -#include <linux/bitops.h> |
---|
| 15 | +#include <linux/bits.h> |
---|
25 | 16 | #include <linux/interrupt.h> |
---|
26 | | -#include <linux/irqreturn.h> |
---|
27 | | -#include <linux/dmaengine.h> |
---|
28 | | -#include <linux/psp-sev.h> |
---|
29 | | -#include <linux/miscdevice.h> |
---|
30 | 17 | |
---|
31 | 18 | #include "sp-dev.h" |
---|
32 | 19 | |
---|
33 | | -#define PSP_CMD_COMPLETE BIT(1) |
---|
34 | | - |
---|
35 | | -#define PSP_CMDRESP_CMD_SHIFT 16 |
---|
36 | | -#define PSP_CMDRESP_IOC BIT(0) |
---|
37 | 20 | #define PSP_CMDRESP_RESP BIT(31) |
---|
38 | 21 | #define PSP_CMDRESP_ERR_MASK 0xffff |
---|
39 | 22 | |
---|
40 | 23 | #define MAX_PSP_NAME_LEN 16 |
---|
41 | 24 | |
---|
42 | | -struct sev_misc_dev { |
---|
43 | | - struct kref refcount; |
---|
44 | | - struct miscdevice misc; |
---|
45 | | -}; |
---|
| 25 | +extern struct psp_device *psp_master; |
---|
| 26 | + |
---|
| 27 | +typedef void (*psp_irq_handler_t)(int, void *, unsigned int); |
---|
46 | 28 | |
---|
47 | 29 | struct psp_device { |
---|
48 | 30 | struct list_head entry; |
---|
.. | .. |
---|
55 | 37 | |
---|
56 | 38 | void __iomem *io_regs; |
---|
57 | 39 | |
---|
58 | | - int sev_state; |
---|
59 | | - unsigned int sev_int_rcvd; |
---|
60 | | - wait_queue_head_t sev_int_queue; |
---|
61 | | - struct sev_misc_dev *sev_misc; |
---|
62 | | - struct sev_user_data_status status_cmd_buf; |
---|
63 | | - struct sev_data_init init_cmd_buf; |
---|
| 40 | + psp_irq_handler_t sev_irq_handler; |
---|
| 41 | + void *sev_irq_data; |
---|
64 | 42 | |
---|
65 | | - u8 api_major; |
---|
66 | | - u8 api_minor; |
---|
67 | | - u8 build; |
---|
| 43 | + psp_irq_handler_t tee_irq_handler; |
---|
| 44 | + void *tee_irq_data; |
---|
| 45 | + |
---|
| 46 | + void *sev_data; |
---|
| 47 | + void *tee_data; |
---|
68 | 48 | }; |
---|
69 | 49 | |
---|
| 50 | +void psp_set_sev_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, |
---|
| 51 | + void *data); |
---|
| 52 | +void psp_clear_sev_irq_handler(struct psp_device *psp); |
---|
| 53 | + |
---|
| 54 | +void psp_set_tee_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, |
---|
| 55 | + void *data); |
---|
| 56 | +void psp_clear_tee_irq_handler(struct psp_device *psp); |
---|
| 57 | + |
---|
| 58 | +struct psp_device *psp_get_master_device(void); |
---|
| 59 | + |
---|
70 | 60 | #endif /* __PSP_DEV_H */ |
---|