| /* SPDX-License-Identifier: GPL-2.0-only */ | 
 | /* | 
 |  * AMD Platform Security Processor (PSP) interface driver | 
 |  * | 
 |  * Copyright (C) 2017-2019 Advanced Micro Devices, Inc. | 
 |  * | 
 |  * Author: Brijesh Singh <brijesh.singh@amd.com> | 
 |  */ | 
 |  | 
 | #ifndef __PSP_DEV_H__ | 
 | #define __PSP_DEV_H__ | 
 |  | 
 | #include <linux/device.h> | 
 | #include <linux/list.h> | 
 | #include <linux/bits.h> | 
 | #include <linux/interrupt.h> | 
 |  | 
 | #include "sp-dev.h" | 
 |  | 
 | #define PSP_CMDRESP_RESP		BIT(31) | 
 | #define PSP_CMDRESP_ERR_MASK		0xffff | 
 |  | 
 | #define MAX_PSP_NAME_LEN		16 | 
 |  | 
 | extern struct psp_device *psp_master; | 
 |  | 
 | typedef void (*psp_irq_handler_t)(int, void *, unsigned int); | 
 |  | 
 | struct psp_device { | 
 | 	struct list_head entry; | 
 |  | 
 | 	struct psp_vdata *vdata; | 
 | 	char name[MAX_PSP_NAME_LEN]; | 
 |  | 
 | 	struct device *dev; | 
 | 	struct sp_device *sp; | 
 |  | 
 | 	void __iomem *io_regs; | 
 |  | 
 | 	psp_irq_handler_t sev_irq_handler; | 
 | 	void *sev_irq_data; | 
 |  | 
 | 	psp_irq_handler_t tee_irq_handler; | 
 | 	void *tee_irq_data; | 
 |  | 
 | 	void *sev_data; | 
 | 	void *tee_data; | 
 | }; | 
 |  | 
 | void psp_set_sev_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, | 
 | 			     void *data); | 
 | void psp_clear_sev_irq_handler(struct psp_device *psp); | 
 |  | 
 | void psp_set_tee_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, | 
 | 			     void *data); | 
 | void psp_clear_tee_irq_handler(struct psp_device *psp); | 
 |  | 
 | struct psp_device *psp_get_master_device(void); | 
 |  | 
 | #endif /* __PSP_DEV_H */ |