brintos

brintos / linux-shallow public Read only

0
0
Text · 3.2 KiB · e43ce87 Raw
132 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * AMD Platform Security Processor (PSP) interface driver4 *5 * Copyright (C) 2017-2019 Advanced Micro Devices, Inc.6 *7 * Author: Brijesh Singh <brijesh.singh@amd.com>8 */9 10#ifndef __PSP_DEV_H__11#define __PSP_DEV_H__12 13#include <linux/device.h>14#include <linux/list.h>15#include <linux/bits.h>16#include <linux/interrupt.h>17#include <linux/mutex.h>18#include <linux/psp.h>19#include <linux/psp-platform-access.h>20 21#include "sp-dev.h"22 23#define MAX_PSP_NAME_LEN		1624 25extern struct psp_device *psp_master;26 27typedef void (*psp_irq_handler_t)(int, void *, unsigned int);28 29union psp_cap_register {30	unsigned int raw;31	struct {32		unsigned int sev			:1,33			     tee			:1,34			     dbc_thru_ext		:1,35			     rsvd1			:4,36			     security_reporting		:1,37			     fused_part			:1,38			     rsvd2			:1,39			     debug_lock_on		:1,40			     rsvd3			:2,41			     tsme_status		:1,42			     rsvd4			:1,43			     anti_rollback_status	:1,44			     rpmc_production_enabled	:1,45			     rpmc_spirom_available	:1,46			     hsp_tpm_available		:1,47			     rom_armor_enforced		:1,48			     rsvd5			:12;49	};50};51 52struct psp_device {53	struct list_head entry;54 55	struct psp_vdata *vdata;56	char name[MAX_PSP_NAME_LEN];57 58	struct device *dev;59	struct sp_device *sp;60 61	void __iomem *io_regs;62	struct mutex mailbox_mutex;63 64	psp_irq_handler_t sev_irq_handler;65	void *sev_irq_data;66 67	void *sev_data;68	void *tee_data;69	void *platform_access_data;70	void *dbc_data;71 72	union psp_cap_register capability;73};74 75void psp_set_sev_irq_handler(struct psp_device *psp, psp_irq_handler_t handler,76			     void *data);77void psp_clear_sev_irq_handler(struct psp_device *psp);78 79struct psp_device *psp_get_master_device(void);80 81/**82 * enum psp_cmd - PSP mailbox commands83 * @PSP_CMD_TEE_RING_INIT:	Initialize TEE ring buffer84 * @PSP_CMD_TEE_RING_DESTROY:	Destroy TEE ring buffer85 * @PSP_CMD_TEE_EXTENDED_CMD:	Extended command86 * @PSP_CMD_MAX:		Maximum command id87 */88enum psp_cmd {89	PSP_CMD_TEE_RING_INIT		= 1,90	PSP_CMD_TEE_RING_DESTROY	= 2,91	PSP_CMD_TEE_EXTENDED_CMD	= 14,92	PSP_CMD_MAX			= 15,93};94 95int psp_mailbox_command(struct psp_device *psp, enum psp_cmd cmd, void *cmdbuff,96			unsigned int timeout_msecs, unsigned int *cmdresp);97 98/**99 * struct psp_ext_req_buffer_hdr - Structure of the extended command header100 * @payload_size: total payload size101 * @sub_cmd_id: extended command ID102 * @status: status of command execution (out)103 */104struct psp_ext_req_buffer_hdr {105	u32 payload_size;106	u32 sub_cmd_id;107	u32 status;108} __packed;109 110struct psp_ext_request {111	struct psp_ext_req_buffer_hdr header;112	void *buf;113} __packed;114 115/**116 * enum psp_sub_cmd - PSP mailbox sub commands117 * @PSP_SUB_CMD_DBC_GET_NONCE:		Get nonce from DBC118 * @PSP_SUB_CMD_DBC_SET_UID:		Set UID for DBC119 * @PSP_SUB_CMD_DBC_GET_PARAMETER:	Get parameter from DBC120 * @PSP_SUB_CMD_DBC_SET_PARAMETER:	Set parameter for DBC121 */122enum psp_sub_cmd {123	PSP_SUB_CMD_DBC_GET_NONCE	= PSP_DYNAMIC_BOOST_GET_NONCE,124	PSP_SUB_CMD_DBC_SET_UID		= PSP_DYNAMIC_BOOST_SET_UID,125	PSP_SUB_CMD_DBC_GET_PARAMETER	= PSP_DYNAMIC_BOOST_GET_PARAMETER,126	PSP_SUB_CMD_DBC_SET_PARAMETER	= PSP_DYNAMIC_BOOST_SET_PARAMETER,127};128 129int psp_extended_mailbox_cmd(struct psp_device *psp, unsigned int timeout_msecs,130			     struct psp_ext_request *req);131#endif /* __PSP_DEV_H */132