mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-11 02:29:58 +00:00
232 lines
6.7 KiB
C
232 lines
6.7 KiB
C
/*
|
|
* SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <nvtypes.h>
|
|
|
|
//
|
|
// This file was generated with FINN, an NVIDIA coding tool.
|
|
// Source file: ctrl/ctrl2080/ctrl2080spdm.finn
|
|
//
|
|
|
|
|
|
|
|
/*************************** SPDM COMMANDS ************************************/
|
|
|
|
#include "cc_drv.h"
|
|
|
|
/*!
|
|
* @brief SPDM Command Types
|
|
*
|
|
*/
|
|
#define RM_GSP_SPDM_CMD_ID_CC_INIT (0x1)
|
|
#define RM_GSP_SPDM_CMD_ID_CC_DEINIT (0x2)
|
|
#define RM_GSP_SPDM_CMD_ID_CC_CTRL (0x3)
|
|
#define RM_GSP_SPDM_CMD_ID_CC_INIT_RM_DATA (0x4)
|
|
#define RM_GSP_SPDM_CMD_ID_CC_HEARTBEAT_CTRL (0x5)
|
|
#define RM_GSP_SPDM_CMD_ID_FIPS_SELFTEST (0x6)
|
|
|
|
|
|
#define RM_GSP_SPDM_CMD_ID_INVALID_COMMAND (0xFF)
|
|
|
|
|
|
|
|
#define RSVD7_SIZE 16
|
|
|
|
#define RSVD8_SIZE 2
|
|
|
|
/*!
|
|
* Guest RM provides INIT context
|
|
*/
|
|
typedef struct RM_GSP_SPDM_CMD_CC_INIT {
|
|
// Command must be first as this struct is the part of union
|
|
NvU8 cmdType;
|
|
} RM_GSP_SPDM_CMD_CC_INIT;
|
|
typedef struct RM_GSP_SPDM_CMD_CC_INIT *PRM_GSP_SPDM_CMD_CC_INIT;
|
|
|
|
/*!
|
|
* Guest RM provides INIT context
|
|
*/
|
|
typedef struct RM_GSP_SPDM_CMD_CC_DEINIT {
|
|
// Command must be first as this struct is the part of union
|
|
NvU8 cmdType;
|
|
} RM_GSP_SPDM_CMD_CC_DEINIT;
|
|
typedef struct RM_GSP_SPDM_CMD_CC_DEINIT *PRM_GSP_SPDM_CMD_CC_DEINIT;
|
|
|
|
/*!
|
|
* RM provides the SPDM request info to GSP
|
|
*/
|
|
typedef struct RM_GSP_SPDM_CMD_CC_CTRL {
|
|
// Command must be first as this struct is the part of union
|
|
NvU8 cmdType;
|
|
} RM_GSP_SPDM_CMD_CC_CTRL;
|
|
typedef struct RM_GSP_SPDM_CMD_CC_CTRL *PRM_GSP_SPDM_CMD_CC_CTRL;
|
|
|
|
typedef struct RM_GSP_SPDM_CMD_CC_INIT_RM_DATA {
|
|
// Command must be first as this struct is the part of union
|
|
NvU8 cmdType;
|
|
|
|
NvU32 rsvd0[2];
|
|
|
|
NvU32 rsvd1;
|
|
|
|
char rsvd2[9];
|
|
|
|
char rsvd3[5];
|
|
|
|
char rsvd4[5];
|
|
|
|
char rsvd5[5];
|
|
|
|
char rsvd6[2];
|
|
|
|
char rsvd7[RSVD7_SIZE];
|
|
|
|
NvU32 rsvd8[RSVD8_SIZE];
|
|
} RM_GSP_SPDM_CMD_CC_INIT_RM_DATA;
|
|
typedef struct RM_GSP_SPDM_CMD_CC_INIT_RM_DATA *PRM_GSP_SPDM_CMD_CC_INIT_RM_DATA;
|
|
|
|
typedef struct RM_GSP_SPDM_CMD_CC_HEARTBEAT_CTRL {
|
|
// Command must be first as this struct is the part of union
|
|
NvU8 cmdType;
|
|
|
|
// Whether to enable or disable heartbeats
|
|
NvBool bEnable;
|
|
} RM_GSP_SPDM_CMD_CC_HEARTBEAT_CTRL;
|
|
typedef struct RM_GSP_SPDM_CMD_CC_HEARTBEAT_CTRL *PRM_GSP_SPDM_CMD_CC_HEARTBEAT_CTRL;
|
|
|
|
|
|
|
|
/*!
|
|
* HCC FIPS Self-test.
|
|
*/
|
|
#define CE_FIPS_SELF_TEST_DATA_SIZE 16
|
|
#define CE_FIPS_SELF_TEST_AUTH_TAG_SIZE 16
|
|
#define CE_FIPS_SELF_TEST_IV_SIZE 12
|
|
|
|
typedef struct RM_GSP_SPDM_CMD_FIPS_SELFTEST {
|
|
NvU8 cmdType;
|
|
NvU8 isEnc;
|
|
CC_KMB kmb;
|
|
NvU8 text[CE_FIPS_SELF_TEST_DATA_SIZE];
|
|
NvU8 authTag[CE_FIPS_SELF_TEST_AUTH_TAG_SIZE];
|
|
} RM_GSP_SPDM_CMD_FIPS_SELFTEST;
|
|
typedef struct RM_GSP_SPDM_CMD_FIPS_SELFTEST *PRM_GSP_SPDM_CMD_FIPS_SELFTEST;
|
|
|
|
|
|
|
|
/*!
|
|
* NOTE : Do not include structure members that have alignment requirement >= 8 to avoid alignment directives
|
|
* getting added in FINN generated structures / unions as RM_GSP_SPDM_CMD / RM_GSP_SPDM_MSG are pragma packed in
|
|
* other structures like RM_FLCN_CMD_GSP / RM_FLCN_MSG_GSP and pragma pack does not produce consistent behavior
|
|
* when paired with alignment directives on Linux and Windows.
|
|
*/
|
|
|
|
/*!
|
|
* A union of all SPDM Commands.
|
|
*/
|
|
typedef union RM_GSP_SPDM_CMD {
|
|
NvU8 cmdType;
|
|
RM_GSP_SPDM_CMD_CC_INIT ccInit;
|
|
RM_GSP_SPDM_CMD_CC_DEINIT ccDeinit;
|
|
RM_GSP_SPDM_CMD_CC_CTRL ccCtrl;
|
|
RM_GSP_SPDM_CMD_CC_INIT_RM_DATA rmDataInitCmd;
|
|
RM_GSP_SPDM_CMD_CC_HEARTBEAT_CTRL ccHeartbeatCtrl;
|
|
|
|
|
|
RM_GSP_SPDM_CMD_FIPS_SELFTEST ccFipsTest;
|
|
|
|
} RM_GSP_SPDM_CMD;
|
|
typedef union RM_GSP_SPDM_CMD *PRM_GSP_SPDM_CMD;
|
|
|
|
/***************************** SPDM MESSAGES *********************************/
|
|
|
|
/*!
|
|
* SPDM Message Status
|
|
*/
|
|
|
|
/*!
|
|
* Returns the status for program CE keys to RM
|
|
*/
|
|
#define RM_GSP_SPDM_MSG_ID_CC_INIT (0x1)
|
|
#define RM_GSP_SPDM_MSG_ID_CC_DEINIT (0x2)
|
|
#define RM_GSP_SPDM_MSG_ID_CC_CTRL (0x3)
|
|
#define RM_GSP_SPDM_MSG_ID_CC_INIT_RM_DATA (0x4)
|
|
#define RM_GSP_SPDM_MSG_ID_CC_HEARTBEAT_CTRL (0x5)
|
|
#define RM_GSP_SPDM_MSG_ID_FIPS_SELFTEST (0x6)
|
|
|
|
|
|
|
|
/*!
|
|
* Returns the Error Status for Invalid Command
|
|
*/
|
|
#define RM_GSP_SPDM_MSG_ID_INVALID_COMMAND (0xFF)
|
|
|
|
/*!
|
|
* NOTE : Do not include structure members that have alignment requirement >= 8 to avoid alignment directives
|
|
* getting added in FINN generated structures / unions as RM_GSP_SPDM_CMD / RM_GSP_SPDM_MSG are pragma packed in
|
|
* other structures like RM_FLCN_CMD_GSP / RM_FLCN_MSG_GSP and pragma pack does not produce consistent behavior
|
|
* when paired with alignment directives on Linux and Windows.
|
|
*/
|
|
|
|
/*!
|
|
* SPDM message structure.
|
|
*/
|
|
typedef struct RM_GSP_SPDM_MSG {
|
|
NvU8 msgType;
|
|
|
|
// status returned from GSP message infrastructure.
|
|
NvU32 status;
|
|
|
|
NvU32 rsvd1;
|
|
|
|
NvU32 rsvd2;
|
|
|
|
NvU32 rsvd3;
|
|
|
|
NvU32 rsvd4;
|
|
|
|
NvU32 rsvd5;
|
|
} RM_GSP_SPDM_MSG;
|
|
typedef struct RM_GSP_SPDM_MSG *PRM_GSP_SPDM_MSG;
|
|
|
|
/*
|
|
* NV2080_CTRL_CMD_INTERNAL_SPDM_PARTITION
|
|
*
|
|
* This command does a partition switch to SPDM partition
|
|
*
|
|
*/
|
|
#define NV2080_CTRL_INTERNAL_SPDM_PARTITION (0x20800ad9) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_0_INTERNAL_INTERFACE_ID << 8) | NV2080_CTRL_INTERNAL_SPDM_PARTITION_PARAMS_MESSAGE_ID" */
|
|
|
|
#define NV2080_CTRL_INTERNAL_SPDM_PARTITION_PARAMS_MESSAGE_ID (0xD9U)
|
|
|
|
typedef struct NV2080_CTRL_INTERNAL_SPDM_PARTITION_PARAMS {
|
|
NvU8 index;
|
|
RM_GSP_SPDM_CMD cmd;
|
|
RM_GSP_SPDM_MSG msg;
|
|
} NV2080_CTRL_INTERNAL_SPDM_PARTITION_PARAMS;
|
|
|
|
|
|
|