162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * AMD Platform Security Processor (PSP) interface driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2017-2019 Advanced Micro Devices, Inc.
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Author: Brijesh Singh <brijesh.singh@amd.com>
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef __SEV_DEV_H__
1162306a36Sopenharmony_ci#define __SEV_DEV_H__
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <linux/device.h>
1462306a36Sopenharmony_ci#include <linux/spinlock.h>
1562306a36Sopenharmony_ci#include <linux/mutex.h>
1662306a36Sopenharmony_ci#include <linux/list.h>
1762306a36Sopenharmony_ci#include <linux/wait.h>
1862306a36Sopenharmony_ci#include <linux/dmapool.h>
1962306a36Sopenharmony_ci#include <linux/hw_random.h>
2062306a36Sopenharmony_ci#include <linux/bitops.h>
2162306a36Sopenharmony_ci#include <linux/interrupt.h>
2262306a36Sopenharmony_ci#include <linux/irqreturn.h>
2362306a36Sopenharmony_ci#include <linux/dmaengine.h>
2462306a36Sopenharmony_ci#include <linux/psp-sev.h>
2562306a36Sopenharmony_ci#include <linux/miscdevice.h>
2662306a36Sopenharmony_ci#include <linux/capability.h>
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#define SEV_CMDRESP_CMD			GENMASK(26, 16)
2962306a36Sopenharmony_ci#define SEV_CMD_COMPLETE		BIT(1)
3062306a36Sopenharmony_ci#define SEV_CMDRESP_IOC			BIT(0)
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct sev_misc_dev {
3362306a36Sopenharmony_ci	struct kref refcount;
3462306a36Sopenharmony_ci	struct miscdevice misc;
3562306a36Sopenharmony_ci};
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistruct sev_device {
3862306a36Sopenharmony_ci	struct device *dev;
3962306a36Sopenharmony_ci	struct psp_device *psp;
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci	void __iomem *io_regs;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	struct sev_vdata *vdata;
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci	int state;
4662306a36Sopenharmony_ci	unsigned int int_rcvd;
4762306a36Sopenharmony_ci	wait_queue_head_t int_queue;
4862306a36Sopenharmony_ci	struct sev_misc_dev *misc;
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci	u8 api_major;
5162306a36Sopenharmony_ci	u8 api_minor;
5262306a36Sopenharmony_ci	u8 build;
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci	void *cmd_buf;
5562306a36Sopenharmony_ci};
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciint sev_dev_init(struct psp_device *psp);
5862306a36Sopenharmony_civoid sev_dev_destroy(struct psp_device *psp);
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_civoid sev_pci_init(void);
6162306a36Sopenharmony_civoid sev_pci_exit(void);
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#endif /* __SEV_DEV_H */
64