/** @file | |
* | |
* Copyright (c) 2016, Hisilicon Limited. All rights reserved. | |
* Copyright (c) 2016, Linaro Limited. All rights reserved. | |
* | |
* This program and the accompanying materials | |
* are licensed and made available under the terms and conditions of the BSD License | |
* which accompanies this distribution. The full text of the license may be found at | |
* http://opensource.org/licenses/bsd-license.php | |
* | |
* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
* | |
**/ | |
#ifndef _IPMI_INTERFACE_PROTOCOL_H_ | |
#define _IPMI_INTERFACE_PROTOCOL_H_ | |
#define IPMI_INTERFACE_PROTOCOL_GUID \ | |
{0xa37e200e, 0xda90, 0x473b, {0x8b, 0xb5, 0x1d, 0x7b, 0x11, 0xba, 0x32, 0x33}} | |
typedef struct _IPMI_INTERFACE_PROTOCOL IPMI_INTERFACE_PROTOCOL; | |
// | |
// Structure to store IPMI Network Function, LUN and command | |
// | |
typedef struct { | |
UINT8 Lun : 2; | |
UINT8 NetFn : 6; | |
UINT8 Cmd; | |
} IPMI_CMD_HEADER; | |
// | |
// System Interface Type | |
// | |
typedef enum { | |
IPMI_SYSTEM_INTERFACE_UNKNOWN, | |
IPMI_SYSTEM_INTERFACE_KCS, | |
IPMI_SYSTEM_INTERFACE_SMIC, | |
IPMI_SYSTEM_INTERFACE_BT, | |
IPMI_SYSTEM_INTERFACE_SSIF, | |
IPMI_SYSTEM_INTERFACE_MAX_TYPE | |
} IPMI_SYSTEM_INTERFACE_TYPE; | |
// | |
// System Interface Address Type | |
// | |
typedef enum { | |
IPMI_MEMORY, | |
IPMI_IO, | |
IPMI_MAX_INTERFACE_ADDRESS_TYPE | |
} IPMI_INTERFACE_ADDRESS_TYPE; | |
typedef | |
EFI_STATUS | |
(EFIAPI *IPMI_INTERFACE_PROTOCOL_EXECUTE_IPMI_CMD) ( | |
IN IPMI_INTERFACE_PROTOCOL *This, | |
IN IPMI_CMD_HEADER Request, | |
IN VOID *SendData OPTIONAL, | |
IN UINT8 SendLength, | |
OUT VOID *RecvData, | |
OUT UINT8 *RecvLength, | |
OUT UINT16 *StatusCodes OPTIONAL | |
); | |
typedef | |
IPMI_SYSTEM_INTERFACE_TYPE | |
(EFIAPI *IPMI_INTERFACE_PROTOCOL_GET_IPMI_INTERFACE_TYPE) ( | |
IN IPMI_INTERFACE_PROTOCOL *This | |
); | |
typedef | |
UINT16 | |
(EFIAPI *IPMI_INTERFACE_PROTOCOL_GET_IPMI_BASE_ADDRESS) ( | |
IN IPMI_INTERFACE_PROTOCOL *This | |
); | |
typedef | |
IPMI_INTERFACE_ADDRESS_TYPE | |
(EFIAPI *IPMI_INTERFACE_PROTOCOL_GET_IPMI_BASE_ADDRESS_TYPE) ( | |
IN IPMI_INTERFACE_PROTOCOL *This | |
); | |
typedef | |
UINT8 | |
(EFIAPI *IPMI_INTERFACE_PROTOCOL_GET_IPMI_VERSION) ( | |
IN IPMI_INTERFACE_PROTOCOL *This | |
); | |
// | |
// Structure of IPMI_INTERFACE_PROTOCOL | |
// | |
struct _IPMI_INTERFACE_PROTOCOL{ | |
IPMI_INTERFACE_PROTOCOL_EXECUTE_IPMI_CMD ExecuteIpmiCmd; | |
IPMI_INTERFACE_PROTOCOL_GET_IPMI_INTERFACE_TYPE GetIpmiInterfaceType; | |
IPMI_INTERFACE_PROTOCOL_GET_IPMI_BASE_ADDRESS GetIpmiBaseAddress; | |
IPMI_INTERFACE_PROTOCOL_GET_IPMI_BASE_ADDRESS_TYPE GetIpmiBaseAddressType; | |
IPMI_INTERFACE_PROTOCOL_GET_IPMI_VERSION GetIpmiVersion; | |
} ; | |
extern EFI_GUID gIpmiInterfaceProtocolGuid; | |
#endif |