blob: c5f0f8551cdca1d23dc67f7446b7f822efa7bc3e [file] [log] [blame]
/** @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