1fce96cf0SBrijesh Singh /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ 2fce96cf0SBrijesh Singh /* 3fce96cf0SBrijesh Singh * Userspace interface for AMD SEV and SNP guest driver. 4fce96cf0SBrijesh Singh * 5fce96cf0SBrijesh Singh * Copyright (C) 2021 Advanced Micro Devices, Inc. 6fce96cf0SBrijesh Singh * 7fce96cf0SBrijesh Singh * Author: Brijesh Singh <brijesh.singh@amd.com> 8fce96cf0SBrijesh Singh * 9fce96cf0SBrijesh Singh * SEV API specification is available at: https://developer.amd.com/sev/ 10fce96cf0SBrijesh Singh */ 11fce96cf0SBrijesh Singh 12fce96cf0SBrijesh Singh #ifndef __UAPI_LINUX_SEV_GUEST_H_ 13fce96cf0SBrijesh Singh #define __UAPI_LINUX_SEV_GUEST_H_ 14fce96cf0SBrijesh Singh 15fce96cf0SBrijesh Singh #include <linux/types.h> 16fce96cf0SBrijesh Singh 17*f4790678SDan Williams #define SNP_REPORT_USER_DATA_SIZE 64 18*f4790678SDan Williams 19fce96cf0SBrijesh Singh struct snp_report_req { 20fce96cf0SBrijesh Singh /* user data that should be included in the report */ 21*f4790678SDan Williams __u8 user_data[SNP_REPORT_USER_DATA_SIZE]; 22fce96cf0SBrijesh Singh 23fce96cf0SBrijesh Singh /* The vmpl level to be included in the report */ 24fce96cf0SBrijesh Singh __u32 vmpl; 25fce96cf0SBrijesh Singh 26fce96cf0SBrijesh Singh /* Must be zero filled */ 27fce96cf0SBrijesh Singh __u8 rsvd[28]; 28fce96cf0SBrijesh Singh }; 29fce96cf0SBrijesh Singh 30fce96cf0SBrijesh Singh struct snp_report_resp { 31fce96cf0SBrijesh Singh /* response data, see SEV-SNP spec for the format */ 32fce96cf0SBrijesh Singh __u8 data[4000]; 33fce96cf0SBrijesh Singh }; 34fce96cf0SBrijesh Singh 3568de0b2fSBrijesh Singh struct snp_derived_key_req { 3668de0b2fSBrijesh Singh __u32 root_key_select; 3768de0b2fSBrijesh Singh __u32 rsvd; 3868de0b2fSBrijesh Singh __u64 guest_field_select; 3968de0b2fSBrijesh Singh __u32 vmpl; 4068de0b2fSBrijesh Singh __u32 guest_svn; 4168de0b2fSBrijesh Singh __u64 tcb_version; 4268de0b2fSBrijesh Singh }; 4368de0b2fSBrijesh Singh 4468de0b2fSBrijesh Singh struct snp_derived_key_resp { 4568de0b2fSBrijesh Singh /* response data, see SEV-SNP spec for the format */ 4668de0b2fSBrijesh Singh __u8 data[64]; 4768de0b2fSBrijesh Singh }; 4868de0b2fSBrijesh Singh 49fce96cf0SBrijesh Singh struct snp_guest_request_ioctl { 50fce96cf0SBrijesh Singh /* message version number (must be non-zero) */ 51fce96cf0SBrijesh Singh __u8 msg_version; 52fce96cf0SBrijesh Singh 53fce96cf0SBrijesh Singh /* Request and response structure address */ 54fce96cf0SBrijesh Singh __u64 req_data; 55fce96cf0SBrijesh Singh __u64 resp_data; 56fce96cf0SBrijesh Singh 570144e3b8SDionna Glaze /* bits[63:32]: VMM error code, bits[31:0] firmware error code (see psp-sev.h) */ 580144e3b8SDionna Glaze union { 590144e3b8SDionna Glaze __u64 exitinfo2; 600144e3b8SDionna Glaze struct { 610144e3b8SDionna Glaze __u32 fw_error; 620144e3b8SDionna Glaze __u32 vmm_error; 630144e3b8SDionna Glaze }; 640144e3b8SDionna Glaze }; 65fce96cf0SBrijesh Singh }; 66fce96cf0SBrijesh Singh 67d80b494fSBrijesh Singh struct snp_ext_report_req { 68d80b494fSBrijesh Singh struct snp_report_req data; 69d80b494fSBrijesh Singh 70d80b494fSBrijesh Singh /* where to copy the certificate blob */ 71d80b494fSBrijesh Singh __u64 certs_address; 72d80b494fSBrijesh Singh 73d80b494fSBrijesh Singh /* length of the certificate blob */ 74d80b494fSBrijesh Singh __u32 certs_len; 75d80b494fSBrijesh Singh }; 76d80b494fSBrijesh Singh 77fce96cf0SBrijesh Singh #define SNP_GUEST_REQ_IOC_TYPE 'S' 78fce96cf0SBrijesh Singh 79fce96cf0SBrijesh Singh /* Get SNP attestation report */ 80fce96cf0SBrijesh Singh #define SNP_GET_REPORT _IOWR(SNP_GUEST_REQ_IOC_TYPE, 0x0, struct snp_guest_request_ioctl) 81fce96cf0SBrijesh Singh 8268de0b2fSBrijesh Singh /* Get a derived key from the root */ 8368de0b2fSBrijesh Singh #define SNP_GET_DERIVED_KEY _IOWR(SNP_GUEST_REQ_IOC_TYPE, 0x1, struct snp_guest_request_ioctl) 8468de0b2fSBrijesh Singh 85d80b494fSBrijesh Singh /* Get SNP extended report as defined in the GHCB specification version 2. */ 86d80b494fSBrijesh Singh #define SNP_GET_EXT_REPORT _IOWR(SNP_GUEST_REQ_IOC_TYPE, 0x2, struct snp_guest_request_ioctl) 87d80b494fSBrijesh Singh 880144e3b8SDionna Glaze /* Guest message request EXIT_INFO_2 constants */ 890144e3b8SDionna Glaze #define SNP_GUEST_FW_ERR_MASK GENMASK_ULL(31, 0) 900144e3b8SDionna Glaze #define SNP_GUEST_VMM_ERR_SHIFT 32 910144e3b8SDionna Glaze #define SNP_GUEST_VMM_ERR(x) (((u64)x) << SNP_GUEST_VMM_ERR_SHIFT) 920144e3b8SDionna Glaze 930144e3b8SDionna Glaze #define SNP_GUEST_VMM_ERR_INVALID_LEN 1 940144e3b8SDionna Glaze #define SNP_GUEST_VMM_ERR_BUSY 2 950144e3b8SDionna Glaze 96fce96cf0SBrijesh Singh #endif /* __UAPI_LINUX_SEV_GUEST_H_ */ 97