1 /** @file 2 * 3 * Copyright (c) 2016, Hisilicon Limited. All rights reserved. 4 * Copyright (c) 2016, Linaro Limited. All rights reserved. 5 * 6 * This program and the accompanying materials 7 * are licensed and made available under the terms and conditions of the BSD License 8 * which accompanies this distribution. The full text of the license may be found at 9 * http://opensource.org/licenses/bsd-license.php 10 * 11 * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 * 14 **/ 15 16 #ifndef _IPMI_INTERFACE_PROTOCOL_H_ 17 #define _IPMI_INTERFACE_PROTOCOL_H_ 18 19 #define IPMI_INTERFACE_PROTOCOL_GUID \ 20 {0xa37e200e, 0xda90, 0x473b, {0x8b, 0xb5, 0x1d, 0x7b, 0x11, 0xba, 0x32, 0x33}} 21 22 typedef struct _IPMI_INTERFACE_PROTOCOL IPMI_INTERFACE_PROTOCOL; 23 24 // 25 // Structure to store IPMI Network Function, LUN and command 26 // 27 typedef struct { 28 UINT8 Lun : 2; 29 UINT8 NetFn : 6; 30 UINT8 Cmd; 31 } IPMI_CMD_HEADER; 32 33 // 34 // System Interface Type 35 // 36 typedef enum { 37 IPMI_SYSTEM_INTERFACE_UNKNOWN, 38 IPMI_SYSTEM_INTERFACE_KCS, 39 IPMI_SYSTEM_INTERFACE_SMIC, 40 IPMI_SYSTEM_INTERFACE_BT, 41 IPMI_SYSTEM_INTERFACE_SSIF, 42 IPMI_SYSTEM_INTERFACE_MAX_TYPE 43 } IPMI_SYSTEM_INTERFACE_TYPE; 44 45 // 46 // System Interface Address Type 47 // 48 typedef enum { 49 IPMI_MEMORY, 50 IPMI_IO, 51 IPMI_MAX_INTERFACE_ADDRESS_TYPE 52 } IPMI_INTERFACE_ADDRESS_TYPE; 53 54 typedef 55 EFI_STATUS 56 (EFIAPI *IPMI_INTERFACE_PROTOCOL_EXECUTE_IPMI_CMD) ( 57 IN IPMI_INTERFACE_PROTOCOL *This, 58 IN IPMI_CMD_HEADER Request, 59 IN VOID *SendData OPTIONAL, 60 IN UINT8 SendLength, 61 OUT VOID *RecvData, 62 OUT UINT8 *RecvLength, 63 OUT UINT16 *StatusCodes OPTIONAL 64 ); 65 typedef 66 IPMI_SYSTEM_INTERFACE_TYPE 67 (EFIAPI *IPMI_INTERFACE_PROTOCOL_GET_IPMI_INTERFACE_TYPE) ( 68 IN IPMI_INTERFACE_PROTOCOL *This 69 ); 70 typedef 71 UINT16 72 (EFIAPI *IPMI_INTERFACE_PROTOCOL_GET_IPMI_BASE_ADDRESS) ( 73 IN IPMI_INTERFACE_PROTOCOL *This 74 ); 75 typedef 76 IPMI_INTERFACE_ADDRESS_TYPE 77 (EFIAPI *IPMI_INTERFACE_PROTOCOL_GET_IPMI_BASE_ADDRESS_TYPE) ( 78 IN IPMI_INTERFACE_PROTOCOL *This 79 ); 80 typedef 81 UINT8 82 (EFIAPI *IPMI_INTERFACE_PROTOCOL_GET_IPMI_VERSION) ( 83 IN IPMI_INTERFACE_PROTOCOL *This 84 ); 85 86 // 87 // Structure of IPMI_INTERFACE_PROTOCOL 88 // 89 struct _IPMI_INTERFACE_PROTOCOL{ 90 IPMI_INTERFACE_PROTOCOL_EXECUTE_IPMI_CMD ExecuteIpmiCmd; 91 IPMI_INTERFACE_PROTOCOL_GET_IPMI_INTERFACE_TYPE GetIpmiInterfaceType; 92 IPMI_INTERFACE_PROTOCOL_GET_IPMI_BASE_ADDRESS GetIpmiBaseAddress; 93 IPMI_INTERFACE_PROTOCOL_GET_IPMI_BASE_ADDRESS_TYPE GetIpmiBaseAddressType; 94 IPMI_INTERFACE_PROTOCOL_GET_IPMI_VERSION GetIpmiVersion; 95 } ; 96 97 extern EFI_GUID gIpmiInterfaceProtocolGuid; 98 99 #endif 100