summaryrefslogtreecommitdiff
path: root/Silicon/Hisilicon/Include/Protocol/IpmiInterfaceProtocol.h
blob: c5f0f8551cdca1d23dc67f7446b7f822efa7bc3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/** @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