/** @file
  This file defines the Redfish Interface Specific Data.

  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
  (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#ifndef REDFISH_HOST_INTERFACE_
#define REDFISH_HOST_INTERFACE_

#include <IndustryStandard/SmBios.h>

#define REDFISH_HOST_INTERFACE_DEVICE_TYPE_USB  0x02        // We don't support this type of interface.
                                                            // Use REDFISH_HOST_INTERFACE_DEVICE_TYPE_USB_V2 instead.
#define REDFISH_HOST_INTERFACE_DEVICE_TYPE_PCI_PCIE  0x03   // We don't support this type of interface.
                                                            // Use REDFISH_HOST_INTERFACE_DEVICE_TYPE_PCI_PCIE_V2 instead.
#define REDFISH_HOST_INTERFACE_DEVICE_TYPE_USB_V2       0x04
#define REDFISH_HOST_INTERFACE_DEVICE_TYPE_PCI_PCIE_V2  0x05

#define REDFISH_HOST_INTERFACE_HOST_IP_ASSIGNMENT_TYPE_UNKNOWN         0x00
#define REDFISH_HOST_INTERFACE_HOST_IP_ASSIGNMENT_TYPE_STATIC          0x01
#define REDFISH_HOST_INTERFACE_HOST_IP_ASSIGNMENT_TYPE_DHCP            0x02
#define REDFISH_HOST_INTERFACE_HOST_IP_ASSIGNMENT_TYPE_AUTO_CONFIGURE  0x03
#define REDFISH_HOST_INTERFACE_HOST_IP_ASSIGNMENT_TYPE_HOST_SELECTED   0x04

#define REDFISH_HOST_INTERFACE_HOST_IP_ADDRESS_FORMAT_UNKNOWN  0x00
#define REDFISH_HOST_INTERFACE_HOST_IP_ADDRESS_FORMAT_IP4      0x01
#define REDFISH_HOST_INTERFACE_HOST_IP_ADDRESS_FORMAT_IP6      0x02

///
/// Definitions for IP assignment tyeps.
///
typedef enum {
  RedfishHostIpAssignmentUnknown,
  RedfishHostIpAssignmentStatic,
  RedfishHostIpAssignmentDhcp,
  RedfishHostIpAssignmentAutoConfigure,
  RedfishHostIpAssignmentHostSelected,
  RedfishHostIpAssignmentReserved
} REDFISH_HOST_IP_ASSIGNMENT;

#pragma pack(1)
///
/// Structure definitions of Host Interface device type 04h (USB Network Interface V2)
///
typedef struct {
  UINT8     Length;                        ///< Length of the structure, including Device Type
                                           ///< and Length fields.
  UINT16    IdVendor;                      ///< The Vendor ID of the device, as read from the
                                           ///< idVendor field of the USB descriptor.
  UINT16    IdProduct;                     ///< The Product ID of the device, as read from the
                                           ///< idProduct field of the USB descriptor.
  UINT8     SerialNumberStr;               ///< The string number for the Serial Number of the
                                           ///< device. The string data is read from the
                                           ///< iSerialNumber.bDescriptorType field of the USB
                                           ///< descriptor, and is converted from Unicode to ASCII
                                           ///< and is NULL terminated.
  UINT8     MacAddress[6];                 ///< The MAC address of the PCI/PCIe network device.

  ///
  /// Below is defined in Redfish Host Interface spec v1.3
  ///
  UINT16    Characteristics;               ///< Additional device characteristics.
  UINT16    CredentialBootstrappingHandle; ///< Credential bootstrapping handle.
} USB_INTERFACE_DEVICE_DESCRIPTOR_V2;

//
// Structure definitions of Host Interface device type 05h (PCI/PCIE V2)
//
typedef struct {
  UINT8     Length;                             ///< Length of the structure, including Device Type and Length fields.
  UINT16    VendorId;                           ///< The Vendor ID of the PCI/PCIe device.
  UINT16    DeviceId;                           ///< The Device ID of the PCI/PCIe device.
  UINT16    SubsystemVendorId;                  ///< The Subsystem Vendor ID of the PCI/PCIe device.
  UINT16    SubsystemId;                        ///< The Subsystem ID of the PCI/PCIe device.
  UINT8     MacAddress[6];                      ///< The MAC address of the PCI/PCIe network device.
  UINT16    SegmemtGroupNumber;                 ///< The Segment Group Number of the PCI/PCIe.
  UINT8     BusNumber;                          ///< The Bus Number of the PCI/PCIe device.
  UINT8     DeviceFunctionNumber;               ///< The Device/Function Number of the PCI/PCIe.
} PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2;

///
/// Structure definitions of Host Interface device type 80-FFh (OEM)
///
typedef struct {
  UINT32    VendorIana;                        ///< The IANA code for the vendor (MSB first).
  UINT8     OemDefinedData[1];                 ///< OEM defined data.
} OEM_DEVICE_DESCRIPTOR;

///
/// Define union for the Host Interface Device Descriptor
///
#define USB_INTERFACE_DEVICE_DESCRIPTOR_V2_SIZE_1_3  0x11        ///< Length USB interface device v2 defined in
                                                                 ///< Redfish host interface spec v1.3
#define USB_INTERFACE_DEVICE_DESCRIPTOR_V2_SIZE_1_2  0x0d        ///< Length USB interface device v2 defined in
                                                                 ///< Redfish host interface spec v1.2
typedef union {
  USB_INTERFACE_DEVICE_DESCRIPTOR_V2            UsbDeviceV2;     ///< Device type USB V2 device discriptor.
  PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2    PciPcieDeviceV2; ///< Device type PCI/PCIe V2 device discriptor.
  OEM_DEVICE_DESCRIPTOR                         OemDevice;       ///< OEM type device discriptor.
} DEVICE_DESCRITOR; /// Device descriptor data formated based on Device Type.

///
///  Interface Specific Data starts at offset 06h of the SMBIOS Type 42 struct.
///  This table defines the Interface Specific data for Interface Type 40h. There
///  are 3 types of Device Descriptor3 defined , however only 1 may be used in
///  specific Tape 42 table.
///
typedef struct {
  UINT8               DeviceType;       ///< The Device Type of the interface.
  DEVICE_DESCRITOR    DeviceDescriptor; ///< The Device descriptor.
} REDFISH_INTERFACE_DATA;

//
//  the protocol-specific data for the "Redfish Over IP" protocol
//
typedef struct {
  EFI_GUID    ServiceUuid;          // same as Redfish Service UUID in Redfish Service Root resource

  //
  //  Unknown=00h,
  //  Static=01h,
  //  DHCP=02h,
  //  AutoConfigure=03h,
  //  HostSelected=04h,
  //  other values reserved
  //
  UINT8    HostIpAssignmentType;

  //
  //  Unknown=00h,
  //  Ipv4=01h,
  //  Ipv6=02h,
  //  other values reserved
  //
  UINT8    HostIpAddressFormat;

  //
  //  Used for Static and AutoConfigure.
  //  For IPV4, use the first 4 Bytes and zero fill the remaining bytes.
  //
  UINT8    HostIpAddress[16];

  //
  //  Used for Static and AutoConfigure.
  //  For IPV4, use the first 4 Bytes and zero fill the remaining bytes.
  //
  UINT8    HostIpMask[16];

  //
  //  Unknown=00h,
  //  Static=01h,
  //  DHCP=02h,
  //  AutoConfigure=03h,
  //  HostSelected=04h,
  //  other values reserved
  //
  UINT8     RedfishServiceIpDiscoveryType;

  //
  //  Unknown=00h,
  //  Ipv4=01h,
  //  Ipv6=02h,
  //  other values reserved
  //
  UINT8     RedfishServiceIpAddressFormat;

  //
  //  Used for Static and AutoConfigure.
  //  For IPV4, use the first 4 Bytes and zero fill the remaining bytes.
  //
  UINT8     RedfishServiceIpAddress[16];

  //
  //  Used for Static and AutoConfigure.
  //  For IPV4, use the first 4 Bytes and zero fill the remaining bytes.
  //
  UINT8     RedfishServiceIpMask[16];

  UINT16    RedfishServiceIpPort;            // Used for Static and AutoConfigure.
  UINT32    RedfishServiceVlanId;            // Used for Static and AutoConfigure.
  UINT8     RedfishServiceHostnameLength;    // length of the following hostname string
  UINT8     RedfishServiceHostname[1];       // hostname of Redfish Service
} REDFISH_OVER_IP_PROTOCOL_DATA;

#pragma pack()

#endif
