Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * AMD Secure Encrypted Virtualization (SEV) driver interface
0004  *
0005  * Copyright (C) 2016-2017 Advanced Micro Devices, Inc.
0006  *
0007  * Author: Brijesh Singh <brijesh.singh@amd.com>
0008  *
0009  * SEV API spec is available at https://developer.amd.com/sev
0010  */
0011 
0012 #ifndef __PSP_SEV_H__
0013 #define __PSP_SEV_H__
0014 
0015 #include <uapi/linux/psp-sev.h>
0016 
0017 #ifdef CONFIG_X86
0018 #include <linux/mem_encrypt.h>
0019 
0020 #define __psp_pa(x) __sme_pa(x)
0021 #else
0022 #define __psp_pa(x) __pa(x)
0023 #endif
0024 
0025 #define SEV_FW_BLOB_MAX_SIZE    0x4000  /* 16KB */
0026 
0027 /**
0028  * SEV platform state
0029  */
0030 enum sev_state {
0031     SEV_STATE_UNINIT        = 0x0,
0032     SEV_STATE_INIT          = 0x1,
0033     SEV_STATE_WORKING       = 0x2,
0034 
0035     SEV_STATE_MAX
0036 };
0037 
0038 /**
0039  * SEV platform and guest management commands
0040  */
0041 enum sev_cmd {
0042     /* platform commands */
0043     SEV_CMD_INIT            = 0x001,
0044     SEV_CMD_SHUTDOWN        = 0x002,
0045     SEV_CMD_FACTORY_RESET       = 0x003,
0046     SEV_CMD_PLATFORM_STATUS     = 0x004,
0047     SEV_CMD_PEK_GEN         = 0x005,
0048     SEV_CMD_PEK_CSR         = 0x006,
0049     SEV_CMD_PEK_CERT_IMPORT     = 0x007,
0050     SEV_CMD_PDH_CERT_EXPORT     = 0x008,
0051     SEV_CMD_PDH_GEN         = 0x009,
0052     SEV_CMD_DF_FLUSH        = 0x00A,
0053     SEV_CMD_DOWNLOAD_FIRMWARE   = 0x00B,
0054     SEV_CMD_GET_ID          = 0x00C,
0055     SEV_CMD_INIT_EX                 = 0x00D,
0056 
0057     /* Guest commands */
0058     SEV_CMD_DECOMMISSION        = 0x020,
0059     SEV_CMD_ACTIVATE        = 0x021,
0060     SEV_CMD_DEACTIVATE      = 0x022,
0061     SEV_CMD_GUEST_STATUS        = 0x023,
0062 
0063     /* Guest launch commands */
0064     SEV_CMD_LAUNCH_START        = 0x030,
0065     SEV_CMD_LAUNCH_UPDATE_DATA  = 0x031,
0066     SEV_CMD_LAUNCH_UPDATE_VMSA  = 0x032,
0067     SEV_CMD_LAUNCH_MEASURE      = 0x033,
0068     SEV_CMD_LAUNCH_UPDATE_SECRET    = 0x034,
0069     SEV_CMD_LAUNCH_FINISH       = 0x035,
0070     SEV_CMD_ATTESTATION_REPORT  = 0x036,
0071 
0072     /* Guest migration commands (outgoing) */
0073     SEV_CMD_SEND_START      = 0x040,
0074     SEV_CMD_SEND_UPDATE_DATA    = 0x041,
0075     SEV_CMD_SEND_UPDATE_VMSA    = 0x042,
0076     SEV_CMD_SEND_FINISH     = 0x043,
0077     SEV_CMD_SEND_CANCEL     = 0x044,
0078 
0079     /* Guest migration commands (incoming) */
0080     SEV_CMD_RECEIVE_START       = 0x050,
0081     SEV_CMD_RECEIVE_UPDATE_DATA = 0x051,
0082     SEV_CMD_RECEIVE_UPDATE_VMSA = 0x052,
0083     SEV_CMD_RECEIVE_FINISH      = 0x053,
0084 
0085     /* Guest debug commands */
0086     SEV_CMD_DBG_DECRYPT     = 0x060,
0087     SEV_CMD_DBG_ENCRYPT     = 0x061,
0088 
0089     SEV_CMD_MAX,
0090 };
0091 
0092 /**
0093  * struct sev_data_init - INIT command parameters
0094  *
0095  * @flags: processing flags
0096  * @tmr_address: system physical address used for SEV-ES
0097  * @tmr_len: len of tmr_address
0098  */
0099 struct sev_data_init {
0100     u32 flags;          /* In */
0101     u32 reserved;           /* In */
0102     u64 tmr_address;        /* In */
0103     u32 tmr_len;            /* In */
0104 } __packed;
0105 
0106 /**
0107  * struct sev_data_init_ex - INIT_EX command parameters
0108  *
0109  * @length: len of the command buffer read by the PSP
0110  * @flags: processing flags
0111  * @tmr_address: system physical address used for SEV-ES
0112  * @tmr_len: len of tmr_address
0113  * @nv_address: system physical address used for PSP NV storage
0114  * @nv_len: len of nv_address
0115  */
0116 struct sev_data_init_ex {
0117     u32 length;                     /* In */
0118     u32 flags;                      /* In */
0119     u64 tmr_address;                /* In */
0120     u32 tmr_len;                    /* In */
0121     u32 reserved;                   /* In */
0122     u64 nv_address;                 /* In/Out */
0123     u32 nv_len;                     /* In */
0124 } __packed;
0125 
0126 #define SEV_INIT_FLAGS_SEV_ES   0x01
0127 
0128 /**
0129  * struct sev_data_pek_csr - PEK_CSR command parameters
0130  *
0131  * @address: PEK certificate chain
0132  * @len: len of certificate
0133  */
0134 struct sev_data_pek_csr {
0135     u64 address;                /* In */
0136     u32 len;                /* In/Out */
0137 } __packed;
0138 
0139 /**
0140  * struct sev_data_cert_import - PEK_CERT_IMPORT command parameters
0141  *
0142  * @pek_address: PEK certificate chain
0143  * @pek_len: len of PEK certificate
0144  * @oca_address: OCA certificate chain
0145  * @oca_len: len of OCA certificate
0146  */
0147 struct sev_data_pek_cert_import {
0148     u64 pek_cert_address;           /* In */
0149     u32 pek_cert_len;           /* In */
0150     u32 reserved;               /* In */
0151     u64 oca_cert_address;           /* In */
0152     u32 oca_cert_len;           /* In */
0153 } __packed;
0154 
0155 /**
0156  * struct sev_data_download_firmware - DOWNLOAD_FIRMWARE command parameters
0157  *
0158  * @address: physical address of firmware image
0159  * @len: len of the firmware image
0160  */
0161 struct sev_data_download_firmware {
0162     u64 address;                /* In */
0163     u32 len;                /* In */
0164 } __packed;
0165 
0166 /**
0167  * struct sev_data_get_id - GET_ID command parameters
0168  *
0169  * @address: physical address of region to place unique CPU ID(s)
0170  * @len: len of the region
0171  */
0172 struct sev_data_get_id {
0173     u64 address;                /* In */
0174     u32 len;                /* In/Out */
0175 } __packed;
0176 /**
0177  * struct sev_data_pdh_cert_export - PDH_CERT_EXPORT command parameters
0178  *
0179  * @pdh_address: PDH certificate address
0180  * @pdh_len: len of PDH certificate
0181  * @cert_chain_address: PDH certificate chain
0182  * @cert_chain_len: len of PDH certificate chain
0183  */
0184 struct sev_data_pdh_cert_export {
0185     u64 pdh_cert_address;           /* In */
0186     u32 pdh_cert_len;           /* In/Out */
0187     u32 reserved;               /* In */
0188     u64 cert_chain_address;         /* In */
0189     u32 cert_chain_len;         /* In/Out */
0190 } __packed;
0191 
0192 /**
0193  * struct sev_data_decommission - DECOMMISSION command parameters
0194  *
0195  * @handle: handle of the VM to decommission
0196  */
0197 struct sev_data_decommission {
0198     u32 handle;             /* In */
0199 } __packed;
0200 
0201 /**
0202  * struct sev_data_activate - ACTIVATE command parameters
0203  *
0204  * @handle: handle of the VM to activate
0205  * @asid: asid assigned to the VM
0206  */
0207 struct sev_data_activate {
0208     u32 handle;             /* In */
0209     u32 asid;               /* In */
0210 } __packed;
0211 
0212 /**
0213  * struct sev_data_deactivate - DEACTIVATE command parameters
0214  *
0215  * @handle: handle of the VM to deactivate
0216  */
0217 struct sev_data_deactivate {
0218     u32 handle;             /* In */
0219 } __packed;
0220 
0221 /**
0222  * struct sev_data_guest_status - SEV GUEST_STATUS command parameters
0223  *
0224  * @handle: handle of the VM to retrieve status
0225  * @policy: policy information for the VM
0226  * @asid: current ASID of the VM
0227  * @state: current state of the VM
0228  */
0229 struct sev_data_guest_status {
0230     u32 handle;             /* In */
0231     u32 policy;             /* Out */
0232     u32 asid;               /* Out */
0233     u8 state;               /* Out */
0234 } __packed;
0235 
0236 /**
0237  * struct sev_data_launch_start - LAUNCH_START command parameters
0238  *
0239  * @handle: handle assigned to the VM
0240  * @policy: guest launch policy
0241  * @dh_cert_address: physical address of DH certificate blob
0242  * @dh_cert_len: len of DH certificate blob
0243  * @session_address: physical address of session parameters
0244  * @session_len: len of session parameters
0245  */
0246 struct sev_data_launch_start {
0247     u32 handle;             /* In/Out */
0248     u32 policy;             /* In */
0249     u64 dh_cert_address;            /* In */
0250     u32 dh_cert_len;            /* In */
0251     u32 reserved;               /* In */
0252     u64 session_address;            /* In */
0253     u32 session_len;            /* In */
0254 } __packed;
0255 
0256 /**
0257  * struct sev_data_launch_update_data - LAUNCH_UPDATE_DATA command parameter
0258  *
0259  * @handle: handle of the VM to update
0260  * @len: len of memory to be encrypted
0261  * @address: physical address of memory region to encrypt
0262  */
0263 struct sev_data_launch_update_data {
0264     u32 handle;             /* In */
0265     u32 reserved;
0266     u64 address;                /* In */
0267     u32 len;                /* In */
0268 } __packed;
0269 
0270 /**
0271  * struct sev_data_launch_update_vmsa - LAUNCH_UPDATE_VMSA command
0272  *
0273  * @handle: handle of the VM
0274  * @address: physical address of memory region to encrypt
0275  * @len: len of memory region to encrypt
0276  */
0277 struct sev_data_launch_update_vmsa {
0278     u32 handle;             /* In */
0279     u32 reserved;
0280     u64 address;                /* In */
0281     u32 len;                /* In */
0282 } __packed;
0283 
0284 /**
0285  * struct sev_data_launch_measure - LAUNCH_MEASURE command parameters
0286  *
0287  * @handle: handle of the VM to process
0288  * @address: physical address containing the measurement blob
0289  * @len: len of measurement blob
0290  */
0291 struct sev_data_launch_measure {
0292     u32 handle;             /* In */
0293     u32 reserved;
0294     u64 address;                /* In */
0295     u32 len;                /* In/Out */
0296 } __packed;
0297 
0298 /**
0299  * struct sev_data_launch_secret - LAUNCH_SECRET command parameters
0300  *
0301  * @handle: handle of the VM to process
0302  * @hdr_address: physical address containing the packet header
0303  * @hdr_len: len of packet header
0304  * @guest_address: system physical address of guest memory region
0305  * @guest_len: len of guest_paddr
0306  * @trans_address: physical address of transport memory buffer
0307  * @trans_len: len of transport memory buffer
0308  */
0309 struct sev_data_launch_secret {
0310     u32 handle;             /* In */
0311     u32 reserved1;
0312     u64 hdr_address;            /* In */
0313     u32 hdr_len;                /* In */
0314     u32 reserved2;
0315     u64 guest_address;          /* In */
0316     u32 guest_len;              /* In */
0317     u32 reserved3;
0318     u64 trans_address;          /* In */
0319     u32 trans_len;              /* In */
0320 } __packed;
0321 
0322 /**
0323  * struct sev_data_launch_finish - LAUNCH_FINISH command parameters
0324  *
0325  * @handle: handle of the VM to process
0326  */
0327 struct sev_data_launch_finish {
0328     u32 handle;             /* In */
0329 } __packed;
0330 
0331 /**
0332  * struct sev_data_send_start - SEND_START command parameters
0333  *
0334  * @handle: handle of the VM to process
0335  * @policy: policy information for the VM
0336  * @pdh_cert_address: physical address containing PDH certificate
0337  * @pdh_cert_len: len of PDH certificate
0338  * @plat_certs_address: physical address containing platform certificate
0339  * @plat_certs_len: len of platform certificate
0340  * @amd_certs_address: physical address containing AMD certificate
0341  * @amd_certs_len: len of AMD certificate
0342  * @session_address: physical address containing Session data
0343  * @session_len: len of session data
0344  */
0345 struct sev_data_send_start {
0346     u32 handle;             /* In */
0347     u32 policy;             /* Out */
0348     u64 pdh_cert_address;           /* In */
0349     u32 pdh_cert_len;           /* In */
0350     u32 reserved1;
0351     u64 plat_certs_address;         /* In */
0352     u32 plat_certs_len;         /* In */
0353     u32 reserved2;
0354     u64 amd_certs_address;          /* In */
0355     u32 amd_certs_len;          /* In */
0356     u32 reserved3;
0357     u64 session_address;            /* In */
0358     u32 session_len;            /* In/Out */
0359 } __packed;
0360 
0361 /**
0362  * struct sev_data_send_update - SEND_UPDATE_DATA command
0363  *
0364  * @handle: handle of the VM to process
0365  * @hdr_address: physical address containing packet header
0366  * @hdr_len: len of packet header
0367  * @guest_address: physical address of guest memory region to send
0368  * @guest_len: len of guest memory region to send
0369  * @trans_address: physical address of host memory region
0370  * @trans_len: len of host memory region
0371  */
0372 struct sev_data_send_update_data {
0373     u32 handle;             /* In */
0374     u32 reserved1;
0375     u64 hdr_address;            /* In */
0376     u32 hdr_len;                /* In/Out */
0377     u32 reserved2;
0378     u64 guest_address;          /* In */
0379     u32 guest_len;              /* In */
0380     u32 reserved3;
0381     u64 trans_address;          /* In */
0382     u32 trans_len;              /* In */
0383 } __packed;
0384 
0385 /**
0386  * struct sev_data_send_update - SEND_UPDATE_VMSA command
0387  *
0388  * @handle: handle of the VM to process
0389  * @hdr_address: physical address containing packet header
0390  * @hdr_len: len of packet header
0391  * @guest_address: physical address of guest memory region to send
0392  * @guest_len: len of guest memory region to send
0393  * @trans_address: physical address of host memory region
0394  * @trans_len: len of host memory region
0395  */
0396 struct sev_data_send_update_vmsa {
0397     u32 handle;             /* In */
0398     u64 hdr_address;            /* In */
0399     u32 hdr_len;                /* In/Out */
0400     u32 reserved2;
0401     u64 guest_address;          /* In */
0402     u32 guest_len;              /* In */
0403     u32 reserved3;
0404     u64 trans_address;          /* In */
0405     u32 trans_len;              /* In */
0406 } __packed;
0407 
0408 /**
0409  * struct sev_data_send_finish - SEND_FINISH command parameters
0410  *
0411  * @handle: handle of the VM to process
0412  */
0413 struct sev_data_send_finish {
0414     u32 handle;             /* In */
0415 } __packed;
0416 
0417 /**
0418  * struct sev_data_send_cancel - SEND_CANCEL command parameters
0419  *
0420  * @handle: handle of the VM to process
0421  */
0422 struct sev_data_send_cancel {
0423     u32 handle;             /* In */
0424 } __packed;
0425 
0426 /**
0427  * struct sev_data_receive_start - RECEIVE_START command parameters
0428  *
0429  * @handle: handle of the VM to perform receive operation
0430  * @pdh_cert_address: system physical address containing PDH certificate blob
0431  * @pdh_cert_len: len of PDH certificate blob
0432  * @session_address: system physical address containing session blob
0433  * @session_len: len of session blob
0434  */
0435 struct sev_data_receive_start {
0436     u32 handle;             /* In/Out */
0437     u32 policy;             /* In */
0438     u64 pdh_cert_address;           /* In */
0439     u32 pdh_cert_len;           /* In */
0440     u32 reserved1;
0441     u64 session_address;            /* In */
0442     u32 session_len;            /* In */
0443 } __packed;
0444 
0445 /**
0446  * struct sev_data_receive_update_data - RECEIVE_UPDATE_DATA command parameters
0447  *
0448  * @handle: handle of the VM to update
0449  * @hdr_address: physical address containing packet header blob
0450  * @hdr_len: len of packet header
0451  * @guest_address: system physical address of guest memory region
0452  * @guest_len: len of guest memory region
0453  * @trans_address: system physical address of transport buffer
0454  * @trans_len: len of transport buffer
0455  */
0456 struct sev_data_receive_update_data {
0457     u32 handle;             /* In */
0458     u32 reserved1;
0459     u64 hdr_address;            /* In */
0460     u32 hdr_len;                /* In */
0461     u32 reserved2;
0462     u64 guest_address;          /* In */
0463     u32 guest_len;              /* In */
0464     u32 reserved3;
0465     u64 trans_address;          /* In */
0466     u32 trans_len;              /* In */
0467 } __packed;
0468 
0469 /**
0470  * struct sev_data_receive_update_vmsa - RECEIVE_UPDATE_VMSA command parameters
0471  *
0472  * @handle: handle of the VM to update
0473  * @hdr_address: physical address containing packet header blob
0474  * @hdr_len: len of packet header
0475  * @guest_address: system physical address of guest memory region
0476  * @guest_len: len of guest memory region
0477  * @trans_address: system physical address of transport buffer
0478  * @trans_len: len of transport buffer
0479  */
0480 struct sev_data_receive_update_vmsa {
0481     u32 handle;             /* In */
0482     u32 reserved1;
0483     u64 hdr_address;            /* In */
0484     u32 hdr_len;                /* In */
0485     u32 reserved2;
0486     u64 guest_address;          /* In */
0487     u32 guest_len;              /* In */
0488     u32 reserved3;
0489     u64 trans_address;          /* In */
0490     u32 trans_len;              /* In */
0491 } __packed;
0492 
0493 /**
0494  * struct sev_data_receive_finish - RECEIVE_FINISH command parameters
0495  *
0496  * @handle: handle of the VM to finish
0497  */
0498 struct sev_data_receive_finish {
0499     u32 handle;             /* In */
0500 } __packed;
0501 
0502 /**
0503  * struct sev_data_dbg - DBG_ENCRYPT/DBG_DECRYPT command parameters
0504  *
0505  * @handle: handle of the VM to perform debug operation
0506  * @src_addr: source address of data to operate on
0507  * @dst_addr: destination address of data to operate on
0508  * @len: len of data to operate on
0509  */
0510 struct sev_data_dbg {
0511     u32 handle;             /* In */
0512     u32 reserved;
0513     u64 src_addr;               /* In */
0514     u64 dst_addr;               /* In */
0515     u32 len;                /* In */
0516 } __packed;
0517 
0518 /**
0519  * struct sev_data_attestation_report - SEV_ATTESTATION_REPORT command parameters
0520  *
0521  * @handle: handle of the VM
0522  * @mnonce: a random nonce that will be included in the report.
0523  * @address: physical address where the report will be copied.
0524  * @len: length of the physical buffer.
0525  */
0526 struct sev_data_attestation_report {
0527     u32 handle;             /* In */
0528     u32 reserved;
0529     u64 address;                /* In */
0530     u8 mnonce[16];              /* In */
0531     u32 len;                /* In/Out */
0532 } __packed;
0533 
0534 #ifdef CONFIG_CRYPTO_DEV_SP_PSP
0535 
0536 /**
0537  * sev_platform_init - perform SEV INIT command
0538  *
0539  * @error: SEV command return code
0540  *
0541  * Returns:
0542  * 0 if the SEV successfully processed the command
0543  * -%ENODEV    if the SEV device is not available
0544  * -%ENOTSUPP  if the SEV does not support SEV
0545  * -%ETIMEDOUT if the SEV command timed out
0546  * -%EIO       if the SEV returned a non-zero return code
0547  */
0548 int sev_platform_init(int *error);
0549 
0550 /**
0551  * sev_platform_status - perform SEV PLATFORM_STATUS command
0552  *
0553  * @status: sev_user_data_status structure to be processed
0554  * @error: SEV command return code
0555  *
0556  * Returns:
0557  * 0 if the SEV successfully processed the command
0558  * -%ENODEV    if the SEV device is not available
0559  * -%ENOTSUPP  if the SEV does not support SEV
0560  * -%ETIMEDOUT if the SEV command timed out
0561  * -%EIO       if the SEV returned a non-zero return code
0562  */
0563 int sev_platform_status(struct sev_user_data_status *status, int *error);
0564 
0565 /**
0566  * sev_issue_cmd_external_user - issue SEV command by other driver with a file
0567  * handle.
0568  *
0569  * This function can be used by other drivers to issue a SEV command on
0570  * behalf of userspace. The caller must pass a valid SEV file descriptor
0571  * so that we know that it has access to SEV device.
0572  *
0573  * @filep - SEV device file pointer
0574  * @cmd - command to issue
0575  * @data - command buffer
0576  * @error: SEV command return code
0577  *
0578  * Returns:
0579  * 0 if the SEV successfully processed the command
0580  * -%ENODEV    if the SEV device is not available
0581  * -%ENOTSUPP  if the SEV does not support SEV
0582  * -%ETIMEDOUT if the SEV command timed out
0583  * -%EIO       if the SEV returned a non-zero return code
0584  * -%EINVAL    if the SEV file descriptor is not valid
0585  */
0586 int sev_issue_cmd_external_user(struct file *filep, unsigned int id,
0587                 void *data, int *error);
0588 
0589 /**
0590  * sev_guest_deactivate - perform SEV DEACTIVATE command
0591  *
0592  * @deactivate: sev_data_deactivate structure to be processed
0593  * @sev_ret: sev command return code
0594  *
0595  * Returns:
0596  * 0 if the sev successfully processed the command
0597  * -%ENODEV    if the sev device is not available
0598  * -%ENOTSUPP  if the sev does not support SEV
0599  * -%ETIMEDOUT if the sev command timed out
0600  * -%EIO       if the sev returned a non-zero return code
0601  */
0602 int sev_guest_deactivate(struct sev_data_deactivate *data, int *error);
0603 
0604 /**
0605  * sev_guest_activate - perform SEV ACTIVATE command
0606  *
0607  * @activate: sev_data_activate structure to be processed
0608  * @sev_ret: sev command return code
0609  *
0610  * Returns:
0611  * 0 if the sev successfully processed the command
0612  * -%ENODEV    if the sev device is not available
0613  * -%ENOTSUPP  if the sev does not support SEV
0614  * -%ETIMEDOUT if the sev command timed out
0615  * -%EIO       if the sev returned a non-zero return code
0616  */
0617 int sev_guest_activate(struct sev_data_activate *data, int *error);
0618 
0619 /**
0620  * sev_guest_df_flush - perform SEV DF_FLUSH command
0621  *
0622  * @sev_ret: sev command return code
0623  *
0624  * Returns:
0625  * 0 if the sev successfully processed the command
0626  * -%ENODEV    if the sev device is not available
0627  * -%ENOTSUPP  if the sev does not support SEV
0628  * -%ETIMEDOUT if the sev command timed out
0629  * -%EIO       if the sev returned a non-zero return code
0630  */
0631 int sev_guest_df_flush(int *error);
0632 
0633 /**
0634  * sev_guest_decommission - perform SEV DECOMMISSION command
0635  *
0636  * @decommission: sev_data_decommission structure to be processed
0637  * @sev_ret: sev command return code
0638  *
0639  * Returns:
0640  * 0 if the sev successfully processed the command
0641  * -%ENODEV    if the sev device is not available
0642  * -%ENOTSUPP  if the sev does not support SEV
0643  * -%ETIMEDOUT if the sev command timed out
0644  * -%EIO       if the sev returned a non-zero return code
0645  */
0646 int sev_guest_decommission(struct sev_data_decommission *data, int *error);
0647 
0648 void *psp_copy_user_blob(u64 uaddr, u32 len);
0649 
0650 #else   /* !CONFIG_CRYPTO_DEV_SP_PSP */
0651 
0652 static inline int
0653 sev_platform_status(struct sev_user_data_status *status, int *error) { return -ENODEV; }
0654 
0655 static inline int sev_platform_init(int *error) { return -ENODEV; }
0656 
0657 static inline int
0658 sev_guest_deactivate(struct sev_data_deactivate *data, int *error) { return -ENODEV; }
0659 
0660 static inline int
0661 sev_guest_decommission(struct sev_data_decommission *data, int *error) { return -ENODEV; }
0662 
0663 static inline int
0664 sev_guest_activate(struct sev_data_activate *data, int *error) { return -ENODEV; }
0665 
0666 static inline int sev_guest_df_flush(int *error) { return -ENODEV; }
0667 
0668 static inline int
0669 sev_issue_cmd_external_user(struct file *filep, unsigned int id, void *data, int *error) { return -ENODEV; }
0670 
0671 static inline void *psp_copy_user_blob(u64 __user uaddr, u32 len) { return ERR_PTR(-EINVAL); }
0672 
0673 #endif  /* CONFIG_CRYPTO_DEV_SP_PSP */
0674 
0675 #endif  /* __PSP_SEV_H__ */