Commit 18085ac2 authored by Brijesh Singh's avatar Brijesh Singh Committed by Borislav Petkov (AMD)
Browse files

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: default avatarBrijesh Singh <brijesh.singh@amd.com>
Signed-off-by: default avatarAshish Kalra <ashish.kalra@amd.com>
Signed-off-by: default avatarMichael Roth <michael.roth@amd.com>
Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20240126041126.1927228-15-michael.roth@amd.com
parent 1ca5614b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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)
{
+19 −0
Original line number Diff line number Diff line
@@ -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; }