/** @file
  IPMI 2.0 definitions from the IPMI Specification Version 2.0, Revision 1.1.

  This file contains all NetFn Transport commands, including:
    IPM LAN Commands (Chapter 23)
    IPMI Serial/Modem Commands (Chapter 25)
    SOL Commands (Chapter 26)
    Command Forwarding Commands (Chapter 35b)

  See IPMI specification, Appendix G, Command Assignments
  and Appendix H, Sub-function Assignments.

  Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>
  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#ifndef _IPMI_NET_FN_TRANSPORT_H_
#define _IPMI_NET_FN_TRANSPORT_H_

#pragma pack(1)
//
// Net function definition for Transport command
//
#define IPMI_NETFN_TRANSPORT  0x0C

//
//  Below is Definitions for IPM LAN Commands (Chapter 23)
//

//
//  Definitions for Set Lan Configuration Parameters command
//
#define IPMI_TRANSPORT_SET_LAN_CONFIG_PARAMETERS  0x01

//
//  Constants and Structure definitions for "Set Lan Configuration Parameters" command to follow here
//

//
// LAN Management Structure
//
typedef enum {
  IpmiLanReserved1,
  IpmiLanReserved2,
  IpmiLanAuthType,
  IpmiLanIpAddress,
  IpmiLanIpAddressSource,
  IpmiLanMacAddress,
  IpmiLanSubnetMask,
  IpmiLanIpv4HeaderParam,
  IpmiLanPrimaryRcmpPort,
  IpmiLanSecondaryRcmpPort,
  IpmiLanBmcGeneratedArpCtrl,
  IpmiLanArpInterval,
  IpmiLanDefaultGateway,
  IpmiLanDefaultGatewayMac,
  IpmiLanBackupGateway,
  IpmiLanBackupGatewayMac,
  IpmiLanCommunityString,
  IpmiLanReserved3,
  IpmiLanDestinationType,
  IpmiLanDestinationAddress,
  IpmiLanVlanId         = 0x14,
  IpmiIpv4OrIpv6Support = 0x32,
  IpmiIpv4OrIpv6AddressEnable,
  IpmiIpv6HdrStatTrafficClass,
  IpmiIpv6HdrStatHopLimit,
  IpmiIpv6HdrFlowLabel,
  IpmiIpv6Status,
  IpmiIpv6StaticAddress,
  IpmiIpv6DhcpStaticDuidLen,
  IpmiIpv6DhcpStaticDuid,
  IpmiIpv6DhcpAddress,
  IpmiIpv6DhcpDynamicDuidLen,
  IpmiIpv6DhcpDynamicDuid,
  IpmiIpv6RouterConfig = 0x40,
  IpmiIpv6StaticRouter1IpAddr,
  IpmiIpv6DynamicRouterIpAddr = 0x4a
} IPMI_LAN_OPTION_TYPE;

//
// IP Address Source
//
typedef enum {
  IpmiUnspecified,
  IpmiStaticAddrsss,
  IpmiDynamicAddressBmcDhcp,
  IpmiDynamicAddressBiosDhcp,
  IpmiDynamicAddressBmcNonDhcp
} IPMI_IP_ADDRESS_SRC;

//
// Destination Type
//
typedef enum {
  IpmiPetTrapDestination,
  IpmiDirectedEventDestination,
  IpmiReserved1,
  IpmiReserved2,
  IpmiReserved3,
  IpmiReserved4,
  IpmiReserved5,
  IpmiOem1,
  IpmiOem2
} IPMI_LAN_DEST_TYPE_DEST_TYPE;

//
// Destination address format
//
typedef enum {
  IpmiDestinationAddressVersion4,
  IpmiDestinationAddressVersion6
} IPMI_LAN_DEST_ADDRESS_VERSION;

typedef union {
  struct {
    UINT8    NoAuth       : 1;
    UINT8    MD2Auth      : 1;
    UINT8    MD5Auth      : 1;
    UINT8    Reserved1    : 1;
    UINT8    StraightPswd : 1;
    UINT8    OemType      : 1;
    UINT8    Reserved2    : 2;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_AUTH_TYPE;

typedef struct {
  UINT8    IpAddress[4];
} IPMI_LAN_IP_ADDRESS;

typedef union {
  struct {
    UINT8    AddressSrc : 4;
    UINT8    Reserved   : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_IP_ADDRESS_SRC;

typedef struct {
  UINT8    MacAddress[6];
} IPMI_LAN_MAC_ADDRESS;

typedef struct {
  UINT8    IpAddress[4];
} IPMI_LAN_SUBNET_MASK;

typedef union {
  struct {
    UINT8    IpFlag   : 3;
    UINT8    Reserved : 5;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_IPV4_HDR_PARAM_DATA_2;

typedef union {
  struct {
    UINT8    Precedence  : 3;
    UINT8    Reserved    : 1;
    UINT8    ServiceType : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_IPV4_HDR_PARAM_DATA_3;

typedef struct {
  UINT8                             TimeToLive;
  IPMI_LAN_IPV4_HDR_PARAM_DATA_2    Data2;
  IPMI_LAN_IPV4_HDR_PARAM_DATA_3    Data3;
} IPMI_LAN_IPV4_HDR_PARAM;

typedef struct {
  UINT8    RcmpPortMsb;
  UINT8    RcmpPortLsb;
} IPMI_LAN_RCMP_PORT;

typedef union {
  struct {
    UINT8    EnableBmcArpResponse   : 1;
    UINT8    EnableBmcGratuitousArp : 1;
    UINT8    Reserved               : 6;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_BMC_GENERATED_ARP_CONTROL;

typedef struct {
  UINT8    ArpInterval;
} IPMI_LAN_ARP_INTERVAL;

typedef struct {
  UINT8    IpAddress[4];
} IPMI_LAN_DEFAULT_GATEWAY;

typedef struct {
  UINT8    Data[18];
} IPMI_LAN_COMMUNITY_STRING;

typedef union {
  struct {
    UINT8    DestinationSelector : 4;
    UINT8    Reserved            : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_SET_SELECTOR;

typedef union {
  struct {
    UINT8    DestinationType   : 3;
    UINT8    Reserved          : 4;
    UINT8    AlertAcknowledged : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_DEST_TYPE_DESTINATION_TYPE;

typedef struct {
  IPMI_LAN_SET_SELECTOR                  SetSelector;
  IPMI_LAN_DEST_TYPE_DESTINATION_TYPE    DestinationType;
} IPMI_LAN_DEST_TYPE;

typedef union {
  struct {
    UINT8    AlertingIpAddressSelector : 4;
    UINT8    AddressFormat             : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_ADDRESS_FORMAT;

typedef union {
  struct {
    UINT8    UseDefaultGateway : 1;
    UINT8    Reserved2         : 7;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_GATEWAY_SELECTOR;

typedef struct {
  IPMI_LAN_SET_SELECTOR        SetSelector;
  IPMI_LAN_ADDRESS_FORMAT      AddressFormat;
  IPMI_LAN_GATEWAY_SELECTOR    GatewaySelector;
  IPMI_LAN_IP_ADDRESS          AlertingIpAddress;
  IPMI_LAN_MAC_ADDRESS         AlertingMacAddress;
} IPMI_LAN_DEST_ADDRESS;

typedef struct {
  UINT8    VanIdLowByte;
} IPMI_LAN_VLAN_ID_DATA1;

typedef union {
  struct {
    UINT8    VanIdHighByte : 4;
    UINT8    Reserved      : 3;
    UINT8    Enabled       : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_VLAN_ID_DATA2;

typedef struct {
  IPMI_LAN_VLAN_ID_DATA1    Data1;
  IPMI_LAN_VLAN_ID_DATA2    Data2;
} IPMI_LAN_VLAN_ID;

typedef union {
  IPMI_LAN_AUTH_TYPE                    IpmiLanAuthType;
  IPMI_LAN_IP_ADDRESS                   IpmiLanIpAddress;
  IPMI_LAN_IP_ADDRESS_SRC               IpmiLanIpAddressSrc;
  IPMI_LAN_MAC_ADDRESS                  IpmiLanMacAddress;
  IPMI_LAN_SUBNET_MASK                  IpmiLanSubnetMask;
  IPMI_LAN_IPV4_HDR_PARAM               IpmiLanIpv4HdrParam;
  IPMI_LAN_RCMP_PORT                    IpmiLanPrimaryRcmpPort;
  IPMI_LAN_BMC_GENERATED_ARP_CONTROL    IpmiLanArpControl;
  IPMI_LAN_ARP_INTERVAL                 IpmiLanArpInterval;
  IPMI_LAN_COMMUNITY_STRING             IpmiLanCommunityString;
  IPMI_LAN_DEST_TYPE                    IpmiLanDestType;
  IPMI_LAN_DEST_ADDRESS                 IpmiLanDestAddress;
} IPMI_LAN_OPTIONS;

typedef union {
  struct {
    UINT8    AddressSourceType : 4;
    UINT8    Reserved          : 3;
    UINT8    EnableStatus      : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_IPV6_ADDRESS_SOURCE_TYPE;

typedef struct {
  UINT8                                SetSelector;
  IPMI_LAN_IPV6_ADDRESS_SOURCE_TYPE    AddressSourceType;
  UINT8                                Ipv6Address[16];
  UINT8                                AddressPrefixLen;
  UINT8                                AddressStatus;
} IPMI_LAN_IPV6_STATIC_ADDRESS;

//
//  Set in progress parameter
//
typedef union {
  struct {
    UINT8    SetInProgress : 2;
    UINT8    Reserved      : 6;
  } Bits;
  UINT8    Uint8;
} IPMI_LAN_SET_IN_PROGRESS;

typedef union {
  struct {
    UINT8    ChannelNo : 4;
    UINT8    Reserved  : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_SET_LAN_CONFIG_CHANNEL_NUM;

typedef struct {
  IPMI_SET_LAN_CONFIG_CHANNEL_NUM    ChannelNumber;
  UINT8                              ParameterSelector;
  UINT8                              ParameterData[0];
} IPMI_SET_LAN_CONFIGURATION_PARAMETERS_COMMAND_REQUEST;

//
//  Definitions for Get Lan Configuration Parameters command
//
#define IPMI_TRANSPORT_GET_LAN_CONFIG_PARAMETERS  0x02

//
//  Constants and Structure definitions for "Get Lan Configuration Parameters" command to follow here
//
typedef union {
  struct {
    UINT8    ChannelNo    : 4;
    UINT8    Reserved     : 3;
    UINT8    GetParameter : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_GET_LAN_CONFIG_CHANNEL_NUM;

typedef struct {
  IPMI_GET_LAN_CONFIG_CHANNEL_NUM    ChannelNumber;
  UINT8                              ParameterSelector;
  UINT8                              SetSelector;
  UINT8                              BlockSelector;
} IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST;

typedef struct {
  UINT8    CompletionCode;
  UINT8    ParameterRevision;
  UINT8    ParameterData[0];
} IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE;

//
//  Definitions for Suspend BMC ARPs command
//
#define IPMI_TRANSPORT_SUSPEND_BMC_ARPS  0x03

//
//  Constants and Structure definitions for "Suspend BMC ARPs" command to follow here
//

//
//  Definitions for Get IP-UDP-RMCP Statistics command
//
#define IPMI_TRANSPORT_GET_PACKET_STATISTICS  0x04

//
//  Constants and Structure definitions for "Get IP-UDP-RMCP Statistics" command to follow here
//

//
//  Below is Definitions for IPMI Serial/Modem Commands (Chapter 25)
//

//
//  Definitions for Set Serial/Modem Configuration command
//
#define IPMI_TRANSPORT_SET_SERIAL_CONFIGURATION  0x10

//
//  Constants and Structure definitions for "Set Serial/Modem Configuration" command to follow here
//

//
// EMP OPTION DATA
//
typedef union {
  struct {
    UINT8    NoAuthentication  : 1;
    UINT8    MD2Authentication : 1;
    UINT8    MD5Authentication : 1;
    UINT8    Reserved1         : 1;
    UINT8    StraightPassword  : 1;
    UINT8    OemProprietary    : 1;
    UINT8    Reservd2          : 2;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_AUTH_TYPE;

typedef union {
  struct {
    UINT8    EnableBasicMode       : 1;
    UINT8    EnablePPPMode         : 1;
    UINT8    EnableTerminalMode    : 1;
    UINT8    Reserved1             : 2;
    UINT8    SnoopOsPPPNegotiation : 1;
    UINT8    Reserved2             : 1;
    UINT8    DirectConnect         : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_CONNECTION_TYPE;

typedef union {
  struct {
    UINT8    InactivityTimeout : 4;
    UINT8    Reserved          : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_INACTIVITY_TIMEOUT;

typedef union {
  struct {
    UINT8    IpmiCallback : 1;
    UINT8    CBCPCallback : 1;
    UINT8    Reserved     : 6;
  } Bits;
  UINT8    Uint8;
} IPMI_CHANNEL_CALLBACK_CONTROL_ENABLE;

typedef union {
  struct {
    UINT8    CbcpEnableNoCallback          : 1;
    UINT8    CbcpEnablePreSpecifiedNumber  : 1;
    UINT8    CbcpEnableUserSpecifiedNumber : 1;
    UINT8    CbcpEnableCallbackFromList    : 1;
    UINT8    Reserved                      : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_CHANNEL_CALLBACK_CONTROL_CBCP;

typedef struct {
  IPMI_CHANNEL_CALLBACK_CONTROL_ENABLE    CallbackEnable;
  IPMI_CHANNEL_CALLBACK_CONTROL_CBCP      CBCPNegotiation;
  UINT8                                   CallbackDestination1;
  UINT8                                   CallbackDestination2;
  UINT8                                   CallbackDestination3;
} IPMI_EMP_CHANNEL_CALLBACK_CONTROL;

typedef union {
  struct {
    UINT8    CloseSessionOnDCDLoss          : 1;
    UINT8    EnableSessionInactivityTimeout : 1;
    UINT8    Reserved                       : 6;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_SESSION_TERMINATION;

typedef union {
  struct {
    UINT8    Reserved1       : 5;
    UINT8    EnableDtrHangup : 1;
    UINT8    FlowControl     : 2;
    UINT8    BitRate         : 4;
    UINT8    Reserved2       : 4;
    UINT8    SaveSetting     : 1;
    UINT8    SetComPort      : 1;
    UINT8    Reserved3       : 6;
  } Bits;
  UINT8     Uint8;
  UINT16    Uint16;
} IPMI_EMP_MESSAGING_COM_SETTING;

typedef union {
  struct {
    UINT8    RingDurationInterval : 6;
    UINT8    Reserved1            : 2;
    UINT8    RingDeadTime         : 4;
    UINT8    Reserved2            : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_MODEM_RING_TIME;

typedef struct {
  UINT8    Reserved;
  UINT8    InitString[48];
} IPMI_EMP_MODEM_INIT_STRING;

typedef struct {
  UINT8    EscapeSequence[5];
} IPMI_EMP_MODEM_ESC_SEQUENCE;

typedef struct {
  UINT8    HangupSequence[8];
} IPMI_EMP_MODEM_HANGUP_SEQUENCE;

typedef struct {
  UINT8    ModelDialCommend[8];
} IPMI_MODEM_DIALUP_COMMAND;

typedef struct {
  UINT8    PageBlackoutInterval;
} IPMI_PAGE_BLACKOUT_INTERVAL;

typedef struct {
  UINT8    CommunityString[18];
} IPMI_EMP_COMMUNITY_STRING;

typedef union {
  struct {
    UINT8    Reserved           : 4;
    UINT8    DialStringSelector : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_DIAL_PAGE_DESTINATION;

typedef union {
  struct {
    UINT8    TapAccountSelector : 4;
    UINT8    Reserved           : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_TAP_PAGE_DESTINATION;

typedef struct {
  UINT8    PPPAccountSetSelector;
  UINT8    DialStringSelector;
} IPMI_PPP_ALERT_DESTINATION;

typedef union {
  IPMI_DIAL_PAGE_DESTINATION    DialPageDestination;
  IPMI_TAP_PAGE_DESTINATION     TapPageDestination;
  IPMI_PPP_ALERT_DESTINATION    PppAlertDestination;
} IPMI_DEST_TYPE_SPECIFIC;

typedef union {
  struct {
    UINT8    DestinationSelector : 4;
    UINT8    Reserved            : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_DESTINATION_SELECTOR;

typedef union {
  struct {
    UINT8    DestinationType  : 4;
    UINT8    Reserved         : 3;
    UINT8    AlertAckRequired : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_DESTINATION_TYPE;

typedef union {
  struct {
    UINT8    NumRetriesCall : 3;
    UINT8    Reserved1      : 1;
    UINT8    NumRetryAlert  : 3;
    UINT8    Reserved2      : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_RETRIES;

typedef struct {
  IPMI_EMP_DESTINATION_SELECTOR    DestinationSelector;
  IPMI_EMP_DESTINATION_TYPE        DestinationType;
  UINT8                            AlertAckTimeoutSeconds;
  IPMI_EMP_RETRIES                 Retries;
  IPMI_DEST_TYPE_SPECIFIC          DestinationTypeSpecific;
} IPMI_EMP_DESTINATION_INFO;

typedef union {
  struct {
    UINT8    Parity        : 3;
    UINT8    CharacterSize : 1;
    UINT8    StopBit       : 1;
    UINT8    DtrHangup     : 1;
    UINT8    FlowControl   : 2;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_DESTINATION_COM_SETTING_DATA_2;

typedef union {
  struct {
    UINT8    BitRate  : 4;
    UINT8    Reserved : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_EMP_BIT_RATE;

typedef struct {
  IPMI_EMP_DESTINATION_SELECTOR              DestinationSelector;
  IPMI_EMP_DESTINATION_COM_SETTING_DATA_2    Data2;
  IPMI_EMP_BIT_RATE                          BitRate;
} IPMI_EMP_DESTINATION_COM_SETTING;

typedef union {
  struct {
    UINT8    DialStringSelector : 4;
    UINT8    Reserved           : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_DIAL_STRING_SELECTOR;

typedef struct {
  IPMI_DIAL_STRING_SELECTOR    DestinationSelector;
  UINT8                        Reserved;
  UINT8                        DialString[48];
} IPMI_DESTINATION_DIAL_STRING;

typedef union {
  UINT32    IpAddressLong;
  UINT8     IpAddress[4];
} IPMI_PPP_IP_ADDRESS;

typedef union {
  struct {
    UINT8    IpAddressSelector : 4;
    UINT8    Reserved          : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_DESTINATION_IP_ADDRESS_SELECTOR;

typedef struct {
  IPMI_DESTINATION_IP_ADDRESS_SELECTOR    DestinationSelector;
  IPMI_PPP_IP_ADDRESS                     PppIpAddress;
} IPMI_DESTINATION_IP_ADDRESS;

typedef union {
  struct {
    UINT8    TapServiceSelector    : 4;
    UINT8    TapDialStringSelector : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_TAP_DIAL_STRING_SERVICE_SELECTOR;

typedef struct {
  UINT8                                    TapSelector;
  IPMI_TAP_DIAL_STRING_SERVICE_SELECTOR    TapDialStringServiceSelector;
} IPMI_DESTINATION_TAP_ACCOUNT;

typedef struct {
  UINT8    TapSelector;
  UINT8    PagerIdString[16];
} IPMI_TAP_PAGER_ID_STRING;

typedef union {
  UINT8                                OptionData;
  IPMI_EMP_AUTH_TYPE                   EmpAuthType;
  IPMI_EMP_CONNECTION_TYPE             EmpConnectionType;
  IPMI_EMP_INACTIVITY_TIMEOUT          EmpInactivityTimeout;
  IPMI_EMP_CHANNEL_CALLBACK_CONTROL    EmpCallbackControl;
  IPMI_EMP_SESSION_TERMINATION         EmpSessionTermination;
  IPMI_EMP_MESSAGING_COM_SETTING       EmpMessagingComSetting;
  IPMI_EMP_MODEM_RING_TIME             EmpModemRingTime;
  IPMI_EMP_MODEM_INIT_STRING           EmpModemInitString;
  IPMI_EMP_MODEM_ESC_SEQUENCE          EmpModemEscSequence;
  IPMI_EMP_MODEM_HANGUP_SEQUENCE       EmpModemHangupSequence;
  IPMI_MODEM_DIALUP_COMMAND            EmpModemDialupCommand;
  IPMI_PAGE_BLACKOUT_INTERVAL          EmpPageBlackoutInterval;
  IPMI_EMP_COMMUNITY_STRING            EmpCommunityString;
  IPMI_EMP_DESTINATION_INFO            EmpDestinationInfo;
  IPMI_EMP_DESTINATION_COM_SETTING     EmpDestinationComSetting;
  UINT8                                CallRetryBusySignalInterval;
  IPMI_DESTINATION_DIAL_STRING         DestinationDialString;
  IPMI_DESTINATION_IP_ADDRESS          DestinationIpAddress;
  IPMI_DESTINATION_TAP_ACCOUNT         DestinationTapAccount;
  IPMI_TAP_PAGER_ID_STRING             TapPagerIdString;
} IPMI_EMP_OPTIONS;

//
//  Definitions for Get Serial/Modem Configuration command
//
#define IPMI_TRANSPORT_GET_SERIAL_CONFIGURATION  0x11

//
//  Constants and Structure definitions for "Get Serial/Modem Configuration" command to follow here
//

//
//  Definitions for Set Serial/Modem Mux command
//
#define IPMI_TRANSPORT_SET_SERIAL_MUX  0x12

//
//  Constants and Structure definitions for "Set Serial/Modem Mux" command to follow here
//

//
// Set Serial/Modem Mux command request return status
//
#define IPMI_MUX_SETTING_REQUEST_REJECTED  0x00
#define IPMI_MUX_SETTING_REQUEST_ACCEPTED  0x01

//
//  Definitions for serial multiplex settings
//
#define IPMI_MUX_SETTING_GET_MUX_SETTING              0x0
#define IPMI_MUX_SETTING_REQUEST_MUX_TO_SYSTEM        0x1
#define IPMI_MUX_SETTING_REQUEST_MUX_TO_BMC           0x2
#define IPMI_MUX_SETTING_FORCE_MUX_TO_SYSTEM          0x3
#define IPMI_MUX_SETTING_FORCE_MUX_TO_BMC             0x4
#define IPMI_MUX_SETTING_BLOCK_REQUEST_MUX_TO_SYSTEM  0x5
#define IPMI_MUX_SETTING_ALLOW_REQUEST_MUX_TO_SYSTEM  0x6
#define IPMI_MUX_SETTING_BLOCK_REQUEST_MUX_TO_BMC     0x7
#define IPMI_MUX_SETTING_ALLOW_REQUEST_MUX_TO_BMC     0x8

typedef union {
  struct {
    UINT8    ChannelNo : 4;
    UINT8    Reserved  : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_MUX_CHANNEL_NUM;

typedef union {
  struct {
    UINT8    MuxSetting : 4;
    UINT8    Reserved   : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_MUX_SETTING_REQUEST;

typedef struct {
  IPMI_MUX_CHANNEL_NUM        ChannelNumber;
  IPMI_MUX_SETTING_REQUEST    MuxSetting;
} IPMI_SET_SERIAL_MODEM_MUX_COMMAND_REQUEST;

typedef union {
  struct {
    UINT8    MuxSetToBmc            : 1;
    UINT8    CommandStatus          : 1;
    UINT8    MessagingSessionActive : 1;
    UINT8    AlertInProgress        : 1;
    UINT8    Reserved               : 2;
    UINT8    MuxToBmcAllowed        : 1;
    UINT8    MuxToSystemBlocked     : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_MUX_SETTING_PRESENT_STATE;

typedef struct {
  UINT8                             CompletionCode;
  IPMI_MUX_SETTING_PRESENT_STATE    MuxSetting;
} IPMI_SET_SERIAL_MODEM_MUX_COMMAND_RESPONSE;

//
//  Definitions for Get TAP Response Code command
//
#define IPMI_TRANSPORT_GET_TAP_RESPONSE_CODE  0x13

//
//  Constants and Structure definitions for "Get TAP Response Code" command to follow here
//

//
//  Definitions for Set PPP UDP Proxy Transmit Data command
//
#define IPMI_TRANSPORT_SET_PPP_UDP_PROXY_TXDATA  0x14

//
//  Constants and Structure definitions for "Set PPP UDP Proxy Transmit Data" command to follow here
//

//
//  Definitions for Get PPP UDP Proxy Transmit Data command
//
#define IPMI_TRANSPORT_GET_PPP_UDP_PROXY_TXDATA  0x15

//
//  Constants and Structure definitions for "Get PPP UDP Proxy Transmit Data" command to follow here
//

//
//  Definitions for Send PPP UDP Proxy Packet command
//
#define IPMI_TRANSPORT_SEND_PPP_UDP_PROXY_PACKET  0x16

//
//  Constants and Structure definitions for "Send PPP UDP Proxy Packet" command to follow here
//

//
//  Definitions for Get PPP UDP Proxy Receive Data command
//
#define IPMI_TRANSPORT_GET_PPP_UDP_PROXY_RX  0x17

//
//  Constants and Structure definitions for "Get PPP UDP Proxy Receive Data" command to follow here
//

//
//  Definitions for Serial/Modem connection active command
//
#define IPMI_TRANSPORT_SERIAL_CONNECTION_ACTIVE  0x18

//
//  Constants and Structure definitions for "Serial/Modem connection active" command to follow here
//

//
//  Definitions for Callback command
//
#define IPMI_TRANSPORT_CALLBACK  0x19

//
//  Constants and Structure definitions for "Callback" command to follow here
//

//
//  Definitions for Set user Callback Options command
//
#define IPMI_TRANSPORT_SET_USER_CALLBACK_OPTIONS  0x1A

//
//  Constants and Structure definitions for "Set user Callback Options" command to follow here
//

//
//  Definitions for Get user Callback Options command
//
#define IPMI_TRANSPORT_GET_USER_CALLBACK_OPTIONS  0x1B

//
//  Constants and Structure definitions for "Get user Callback Options" command to follow here
//

//
//  Below is Definitions for SOL Commands (Chapter 26)
//

//
//  Definitions for SOL activating command
//
#define IPMI_TRANSPORT_SOL_ACTIVATING  0x20

//
//  Constants and Structure definitions for "SOL activating" command to follow here
//
typedef union {
  struct {
    UINT8    SessionState : 4;
    UINT8    Reserved     : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_SOL_SESSION_STATE;

typedef struct {
  IPMI_SOL_SESSION_STATE    SessionState;
  UINT8                     PayloadInstance;
  UINT8                     FormatVersionMajor; // 1
  UINT8                     FormatVersionMinor; // 0
} IPMI_SOL_ACTIVATING_REQUEST;

//
//  Definitions for Set SOL Configuration Parameters command
//
#define IPMI_TRANSPORT_SET_SOL_CONFIG_PARAM  0x21

//
//  Constants and Structure definitions for "Set SOL Configuration Parameters" command to follow here
//

//
// SOL Configuration Parameters selector
//
#define IPMI_SOL_CONFIGURATION_PARAMETER_SET_IN_PROGRESS        0
#define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_ENABLE             1
#define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_AUTHENTICATION     2
#define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_CHARACTER_PARAM    3
#define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_RETRY              4
#define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_NV_BIT_RATE        5
#define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_VOLATILE_BIT_RATE  6
#define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_PAYLOAD_CHANNEL    7
#define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_PAYLOAD_PORT       8

typedef union {
  struct {
    UINT8    ChannelNumber : 4;
    UINT8    Reserved      : 4;
  } Bits;
  UINT8    Uint8;
} IPMI_SET_SOL_CONFIG_PARAM_CHANNEL_NUM;

typedef struct {
  IPMI_SET_SOL_CONFIG_PARAM_CHANNEL_NUM    ChannelNumber;
  UINT8                                    ParameterSelector;
  UINT8                                    ParameterData[0];
} IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST;

//
//  Definitions for Get SOL Configuration Parameters command
//
#define IPMI_TRANSPORT_GET_SOL_CONFIG_PARAM  0x22

//
//  Constants and Structure definitions for "Get SOL Configuration Parameters" command to follow here
//
typedef union {
  struct {
    UINT8    ChannelNumber : 4;
    UINT8    Reserved      : 3;
    UINT8    GetParameter  : 1;
  } Bits;
  UINT8    Uint8;
} IPMI_GET_SOL_CONFIG_PARAM_CHANNEL_NUM;

typedef struct {
  IPMI_GET_SOL_CONFIG_PARAM_CHANNEL_NUM    ChannelNumber;
  UINT8                                    ParameterSelector;
  UINT8                                    SetSelector;
  UINT8                                    BlockSelector;
} IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST;

typedef struct {
  UINT8    CompletionCode;
  UINT8    ParameterRevision;
  UINT8    ParameterData[0];
} IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE;

#pragma pack()
#endif
