crypto: ccp: Provide an API to issue SEV and SNP commands
Export sev_do_cmd() as a generic API for the hypervisor to issue commands to manage an SEV or an SNP guest. The commands for SEV and SNP are defined in the SEV and SEV-SNP firmware specifications. Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> Signed-off-by: Ashish Kalra <ashish.kalra@amd.com> Signed-off-by: Michael Roth <michael.roth@amd.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/r/20240126041126.1927228-15-michael.roth@amd.com
This commit is contained in:
committed by
Borislav Petkov (AMD)
parent
1ca5614b84
commit
18085ac2f2
@@ -431,7 +431,7 @@ static int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int sev_do_cmd(int cmd, void *data, int *psp_ret)
|
||||
int sev_do_cmd(int cmd, void *data, int *psp_ret)
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -441,6 +441,7 @@ static int sev_do_cmd(int cmd, void *data, int *psp_ret)
|
||||
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sev_do_cmd);
|
||||
|
||||
static int __sev_init_locked(int *error)
|
||||
{
|
||||
|
||||
@@ -915,6 +915,22 @@ int sev_guest_df_flush(int *error);
|
||||
*/
|
||||
int sev_guest_decommission(struct sev_data_decommission *data, int *error);
|
||||
|
||||
/**
|
||||
* sev_do_cmd - issue an SEV or an SEV-SNP command
|
||||
*
|
||||
* @cmd: SEV or SEV-SNP firmware command to issue
|
||||
* @data: arguments for firmware command
|
||||
* @psp_ret: SEV command return code
|
||||
*
|
||||
* Returns:
|
||||
* 0 if the SEV device successfully processed the command
|
||||
* -%ENODEV if the PSP device is not available
|
||||
* -%ENOTSUPP if PSP device does not support SEV
|
||||
* -%ETIMEDOUT if the SEV command timed out
|
||||
* -%EIO if PSP device returned a non-zero return code
|
||||
*/
|
||||
int sev_do_cmd(int cmd, void *data, int *psp_ret);
|
||||
|
||||
void *psp_copy_user_blob(u64 uaddr, u32 len);
|
||||
|
||||
#else /* !CONFIG_CRYPTO_DEV_SP_PSP */
|
||||
@@ -930,6 +946,9 @@ sev_guest_deactivate(struct sev_data_deactivate *data, int *error) { return -ENO
|
||||
static inline int
|
||||
sev_guest_decommission(struct sev_data_decommission *data, int *error) { return -ENODEV; }
|
||||
|
||||
static inline int
|
||||
sev_do_cmd(int cmd, void *data, int *psp_ret) { return -ENODEV; }
|
||||
|
||||
static inline int
|
||||
sev_guest_activate(struct sev_data_activate *data, int *error) { return -ENODEV; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user