blob: a5bfa14a9dfa6dc9778e7e1d3961a91ce68df850 [file] [log] [blame]
/** @file
IPMI SSIF Definitions
Copyright (c) 2023, Ampere Computing LLC. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Revision Reference:
- IPMI Specification
Version 2.0, Rev. 1.1
https://www.intel.com/content/www/us/en/products/docs/servers/ipmi/ipmi-second-gen-interface-spec-v2-rev1-1.html
**/
#ifndef IPMI_SSIF_H_
#define IPMI_SSIF_H_
///
/// Definitions for SMBUS Commands for SSIF
/// Table 12 - Summary of SMBUS Commands for SSIF
///
/// Write block
#define IPMI_SSIF_SMBUS_CMD_SINGLE_PART_WRITE 0x02
#define IPMI_SSIF_SMBUS_CMD_MULTI_PART_WRITE_START 0x06
#define IPMI_SSIF_SMBUS_CMD_MULTI_PART_WRITE_MIDDLE 0x07
#define IPMI_SSIF_SMBUS_CMD_MULTI_PART_WRITE_END 0x08
/// Read block
#define IPMI_SSIF_SMBUS_CMD_SINGLE_PART_READ 0x03
#define IPMI_SSIF_SMBUS_CMD_MULTI_PART_READ_START 0x03
#define IPMI_SSIF_SMBUS_CMD_MULTI_PART_READ_MIDDLE 0x09
#define IPMI_SSIF_SMBUS_CMD_MULTI_PART_READ_END 0x09
#define IPMI_SSIF_SMBUS_CMD_MULTI_PART_READ_RETRY 0x0A
///
/// Definitions for Multi-Part Read Transactions
/// Section 12.5
///
#define IPMI_SSIF_MULTI_PART_READ_START_SIZE 0x1E
#define IPMI_SSIF_MULTI_PART_READ_START_PATTERN1 0x00
#define IPMI_SSIF_MULTI_PART_READ_START_PATTERN2 0x01
#define IPMI_SSIF_MULTI_PART_READ_END_PATTERN 0xFF
///
/// IPMI SSIF maximum message size
///
#define IPMI_SSIF_INPUT_MESSAGE_SIZE_MAX 0xFF
#define IPMI_SSIF_OUTPUT_MESSAGE_SIZE_MAX 0xFF
///
/// IPMI SMBus system interface maximum packet size in byte
///
#define IPMI_SSIF_MAXIMUM_PACKET_SIZE_IN_BYTES 0x20
typedef enum {
IpmiSsifPacketStart = 0,
IpmiSsifPacketMiddle,
IpmiSsifPacketEnd,
IpmiSsifPacketSingle,
IpmiSsifPacketMax
} IPMI_SSIF_PACKET_ATTRIBUTE;
#pragma pack (1)
///
/// IPMI SSIF Interface Request Format
/// Section 12.2 and 12.3
///
typedef struct {
UINT8 NetFunc;
UINT8 Command;
} IPMI_SSIF_REQUEST_HEADER;
///
/// IPMI SSIF Interface Response Format
/// Section 12.4 and 12.5
///
typedef struct {
UINT8 StartPattern[2];
UINT8 NetFunc;
UINT8 Command;
} IPMI_SSIF_RESPONSE_PACKET_START;
typedef struct {
UINT8 BlockNumber;
} IPMI_SSIF_RESPONSE_PACKET_MIDDLE;
typedef struct {
UINT8 EndPattern;
} IPMI_SSIF_RESPONSE_PACKET_END;
typedef struct {
UINT8 NetFunc;
UINT8 Command;
} IPMI_SSIF_RESPONSE_SINGLE_PACKET;
#pragma pack ()
#endif /* IPMI_SSIF_H_ */