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 33*68de0b2fSBrijesh Singh struct snp_derived_key_req { 34*68de0b2fSBrijesh Singh __u32 root_key_select; 35*68de0b2fSBrijesh Singh __u32 rsvd; 36*68de0b2fSBrijesh Singh __u64 guest_field_select; 37*68de0b2fSBrijesh Singh __u32 vmpl; 38*68de0b2fSBrijesh Singh __u32 guest_svn; 39*68de0b2fSBrijesh Singh __u64 tcb_version; 40*68de0b2fSBrijesh Singh }; 41*68de0b2fSBrijesh Singh 42*68de0b2fSBrijesh Singh struct snp_derived_key_resp { 43*68de0b2fSBrijesh Singh /* response data, see SEV-SNP spec for the format */ 44*68de0b2fSBrijesh Singh __u8 data[64]; 45*68de0b2fSBrijesh Singh }; 46*68de0b2fSBrijesh 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 59fce96cf0SBrijesh Singh #define SNP_GUEST_REQ_IOC_TYPE 'S' 60fce96cf0SBrijesh Singh 61fce96cf0SBrijesh Singh /* Get SNP attestation report */ 62fce96cf0SBrijesh Singh #define SNP_GET_REPORT _IOWR(SNP_GUEST_REQ_IOC_TYPE, 0x0, struct snp_guest_request_ioctl) 63fce96cf0SBrijesh Singh 64*68de0b2fSBrijesh Singh /* Get a derived key from the root */ 65*68de0b2fSBrijesh Singh #define SNP_GET_DERIVED_KEY _IOWR(SNP_GUEST_REQ_IOC_TYPE, 0x1, struct snp_guest_request_ioctl) 66*68de0b2fSBrijesh Singh 67fce96cf0SBrijesh Singh #endif /* __UAPI_LINUX_SEV_GUEST_H_ */ 68