Home | History | Annotate | Download | only in Protocol
      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