blob: 5541c723ec44f8207338daad94263ed5806c198b [file]
/** @file
Copyright (c) 2026, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference:
- DSP0270 version 1.3.1 (https://www.dmtf.org/dsp/DSP0270)
**/
#pragma once
#define MCHI_NETWORK_DEVICE_CHARACTERISTIC_CREDENTIAL_VIA_IPMI_SUPPORT (BIT0)
#define MCHI_NETWORK_DEVICE_CHARACTERISTIC_RESERVED_BITS (~(BIT0))
/** Network Device type value.
See DSP0270 7.3.1 Table 3: Device type values.
*/
typedef enum MchiNetworkDeviceType {
MchiNetworkDeviceTypeReserved00 = 0x00,
MchiNetworkDeviceTypeReserved01 = 0x01,
MchiNetworkDeviceTypeUsb = 0x02,
MchiNetworkDeviceTypePci = 0x03,
MchiNetworkDeviceTypeUsbv2 = 0x04,
MchiNetworkDeviceTypePciv2 = 0x05,
MchiNetworkDeviceTypeOemStart = 0x80,
MchiNetworkDeviceTypeOemEnd = 0xff,
MchiNetworkDeviceTypeMax,
} MCHI_NETWORK_DEVICE_TYPE;
#pragma pack(1)
/** Interface-specific data for interface type 40h (Network)
See DSP0270 7.3 Table 2: Interface-specific data for interface type 40h.
*/
typedef struct MchiNetworkSpecificData {
/// Device Type (REDFISH_INTERFACE_DEVICE_TYPE)
UINT8 DeviceType;
/// Followed by Device Data. See the REDFISH_HOST_INTERFACE_*_DATA.
} MCHI_NETWORK_SPECIFIC_DATA;
/** Interface-specific USB data for interface type 40h (Network)
See DSP0270 7.3.2 Table 4: Device descriptor data for device type 02h,
USB network interface.
*/
typedef struct MchiNetworkDeviceDescUsbData {
/// Vendor Id.
UINT16 VendorId;
/// Product Id.
UINT16 ProductId;
/// Serial number descriptor Length. minimum is 0x02.
UINT8 SerialNumberDescLength;
/// Serial number descriptor Type. always 0x03 (unicode)
UINT8 SerialNumberDescType;
/// followed by SerialNumber Unicode string without NULL terminator.
/// UINT16 SerialNumber[]
} MCHI_NETWORK_DEVICE_DESC_USB_DATA;
/** Interface-specific PCI data for interface type 40h (Network)
See DSP0270 7.3.3 Table 5: Device descriptor data for device type 03h,
PCI/PCIe network interface.
*/
typedef struct MchiNetworkDeviceDescPciData {
/// Vendor Id.
UINT16 VendorId;
/// Device Id.
UINT16 DeviceId;
/// Subsystem Vendor Id.
UINT16 SubSystemVendorId;
/// Subsystem Id.
UINT16 SubSystemId;
} MCHI_NETWORK_DEVICE_DESC_PCI_DATA;
/** Interface-specific USB v2 data for interface type 40h (Network)
See DSP0270 7.3.4 Table 6: Device descriptor data for device type 04h,
USB network interface v2.
*/
typedef struct MchiNetworkDeviceDescUsbv2Data {
/// Length of this structure.
UINT8 Length;
/// Vendor Id.
UINT16 VendorId;
/// Product Id.
UINT16 ProductId;
/// Serial number reference in string table.
UINT8 SerialNumberRef;
/// Mac address of the USB.
UINT8 MacAddress[6];
/// Device Characteristics (version 2 only).
UINT16 Characteristic;
/// Credential bootstrapping with IPMI interface (Type 38) otherwise 0xFFFF.
UINT16 CredentialBootStrappingHandle;
} MCHI_NETWORK_DEVICE_DESC_USB_V2_DATA;
/** Interface-specific PCI/PCIe v2 data for interface type 40h (Network)
See DSP0270 7.3.5 Table 7: Device descriptor data for device type 04h,
PCI/PCIe network interface v2.
*/
typedef struct MchiNetworkDeviceDescPciv2Data {
/// Length of this structure.
UINT8 Length;
/// Vendor Id.
UINT16 VendorId;
/// Device Id.
UINT16 DeviceId;
/// Subsystem Vendor Id.
UINT16 SubSystemVendorId;
/// Subsystem Id.
UINT16 SubSystemId;
/// MAC address (v2 only).
UINT8 MacAddress[6];
/// Segment group number
UINT16 Segment;
/// Bus
UINT8 Bus;
/*
* Function (device) number (v2 only):
* Bits 7:3 - Device Number
* Bits 2:0 - Function Number
*/
UINT8 Function;
/// Device Characteristics (version 2 only).
UINT16 Characteristic;
/// Credential bootstrapping with IPMI interface (Type 38) otherwise 0xFFFF.
UINT16 CredentialBootStrappingHandle;
} MCHI_NETWORK_DEVICE_DESC_PCI_V2_DATA;
/** Interface-specific OEM data for interface type 40h (Network)
See DSP0270 7.3.6 Table 8: Device descriptor data for device type 80h-FFh,
OEM device.
*/
typedef struct MchiNetworkDeviceDescOemData {
/// Vendor IANA
UINT32 Iana;
/// Followed by OEM defined data.
} MCHI_NETWORK_DEVICE_DESC_OEM_DATA;
/** Assignment and discovery type values
See DSP0270 7.4.2 Table 12
*/
typedef enum RedfishIpType {
RedfishIpTypeUnknown = 0x00,
RedfishIpTypeStatic = 0x01,
RedfishIpTypeDhcp = 0x02,
RedfishIpTypeAutoConfigure = 0x03,
RedfishIpTypeHostSelected = 0x04,
RedfishIpTypeMax,
} REDFISH_IP_TYPE;
/** IP address format values
See DSP0270 7.4.3 Table 13
*/
typedef enum RedfishIpAddressFormat {
RedfishIpFormatUnknown = 0x00,
RedfishIpFormatIpv4 = 0x01,
RedfishIpFormatIpv6 = 0x02,
RedfishIpFormatMax,
} REDFISH_IP_ADDRESS_FORMAT;
/** Redfish over IP protocol-specific record data
See DSP0270 7.4.1 Table 11
*/
typedef struct RedfishProtocolOverIpData {
/// Service UUID.
EFI_GUID ServiceUuid;
/// Host Ip assignment type.
UINT8 HostIpAssignType;
/// Host Ip address format.
UINT8 HostIpAddressFormat;
/// Host Ip address.
UINT8 HostIpAddress[16];
/// Host Ip mask.
UINT8 HostIpMask[16];
/// Service Ip discovery type.
UINT8 ServiceIpDiscoveryType;
/// Service Ip address format.
UINT8 ServiceIpAddressFormat;
/// Service Ip address.
UINT8 ServiceIpAddress[16];
/// Service Ip Mask.
UINT8 ServiceIpMask[16];
/// Service Ip Port.
UINT16 ServiceIpPort;
/// Service Vlan Id.
UINT32 ServiceVlanId;
/// Length of Hostname
UINT8 HostnameLength;
/// followed by Hostname
} REDFISH_PROTOCOL_OVER_IP_DATA;
#pragma pack()
/* Note. GetSizeof should get the number of string in the string table. */