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 17fce96cf0SBrijesh Singh struct snp_report_req { 18fce96cf0SBrijesh Singh /* user data that should be included in the report */ 19fce96cf0SBrijesh Singh __u8 user_data[64]; 20fce96cf0SBrijesh Singh 21fce96cf0SBrijesh Singh /* The vmpl level to be included in the report */ 22fce96cf0SBrijesh Singh __u32 vmpl; 23fce96cf0SBrijesh Singh 24fce96cf0SBrijesh Singh /* Must be zero filled */ 25fce96cf0SBrijesh Singh __u8 rsvd[28]; 26fce96cf0SBrijesh Singh }; 27fce96cf0SBrijesh Singh 28fce96cf0SBrijesh Singh struct snp_report_resp { 29fce96cf0SBrijesh Singh /* response data, see SEV-SNP spec for the format */ 30fce96cf0SBrijesh Singh __u8 data[4000]; 31fce96cf0SBrijesh Singh }; 32fce96cf0SBrijesh Singh 3368de0b2fSBrijesh Singh struct snp_derived_key_req { 3468de0b2fSBrijesh Singh __u32 root_key_select; 3568de0b2fSBrijesh Singh __u32 rsvd; 3668de0b2fSBrijesh Singh __u64 guest_field_select; 3768de0b2fSBrijesh Singh __u32 vmpl; 3868de0b2fSBrijesh Singh __u32 guest_svn; 3968de0b2fSBrijesh Singh __u64 tcb_version; 4068de0b2fSBrijesh Singh }; 4168de0b2fSBrijesh Singh 4268de0b2fSBrijesh Singh struct snp_derived_key_resp { 4368de0b2fSBrijesh Singh /* response data, see SEV-SNP spec for the format */ 4468de0b2fSBrijesh Singh __u8 data[64]; 4568de0b2fSBrijesh Singh }; 4668de0b2fSBrijesh Singh 47fce96cf0SBrijesh Singh struct snp_guest_request_ioctl { 48fce96cf0SBrijesh Singh /* message version number (must be non-zero) */ 49fce96cf0SBrijesh Singh __u8 msg_version; 50fce96cf0SBrijesh Singh 51fce96cf0SBrijesh Singh /* Request and response structure address */ 52fce96cf0SBrijesh Singh __u64 req_data; 53fce96cf0SBrijesh Singh __u64 resp_data; 54fce96cf0SBrijesh Singh 55fce96cf0SBrijesh Singh /* firmware error code on failure (see psp-sev.h) */ 56fce96cf0SBrijesh Singh __u64 fw_err; 57fce96cf0SBrijesh Singh }; 58fce96cf0SBrijesh Singh 59*d80b494fSBrijesh Singh struct snp_ext_report_req { 60*d80b494fSBrijesh Singh struct snp_report_req data; 61*d80b494fSBrijesh Singh 62*d80b494fSBrijesh Singh /* where to copy the certificate blob */ 63*d80b494fSBrijesh Singh __u64 certs_address; 64*d80b494fSBrijesh Singh 65*d80b494fSBrijesh Singh /* length of the certificate blob */ 66*d80b494fSBrijesh Singh __u32 certs_len; 67*d80b494fSBrijesh Singh }; 68*d80b494fSBrijesh Singh 69fce96cf0SBrijesh Singh #define SNP_GUEST_REQ_IOC_TYPE 'S' 70fce96cf0SBrijesh Singh 71fce96cf0SBrijesh Singh /* Get SNP attestation report */ 72fce96cf0SBrijesh Singh #define SNP_GET_REPORT _IOWR(SNP_GUEST_REQ_IOC_TYPE, 0x0, struct snp_guest_request_ioctl) 73fce96cf0SBrijesh Singh 7468de0b2fSBrijesh Singh /* Get a derived key from the root */ 7568de0b2fSBrijesh Singh #define SNP_GET_DERIVED_KEY _IOWR(SNP_GUEST_REQ_IOC_TYPE, 0x1, struct snp_guest_request_ioctl) 7668de0b2fSBrijesh Singh 77*d80b494fSBrijesh Singh /* Get SNP extended report as defined in the GHCB specification version 2. */ 78*d80b494fSBrijesh Singh #define SNP_GET_EXT_REPORT _IOWR(SNP_GUEST_REQ_IOC_TYPE, 0x2, struct snp_guest_request_ioctl) 79*d80b494fSBrijesh Singh 80fce96cf0SBrijesh Singh #endif /* __UAPI_LINUX_SEV_GUEST_H_ */ 81