/** @file KCS Transport Hook head file. @copyright Copyright 1999 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _KCS_BMC_H #define _KCS_BMC_H #include #include #include #include #define KCS_WRITE_START 0x61 #define KCS_WRITE_END 0x62 #define KCS_READ 0x68 #define KCS_GET_STATUS 0x60 #define KCS_ABORT 0x60 #define KCS_DELAY_UNIT 50 // [s] Each KSC IO delay // // In OpenBMC, UpdateMode: the bit 7 of byte 4 in get device id command is used for the BMC status: // 0 means BMC is ready, 1 means BMC is not ready. // At the very beginning of BMC power on, the status is 1 means BMC is in booting process and not ready. It is not the flag for force update mode. // #define BMC_READY 0 #define KCS_ABORT_RETRY_COUNT 1 //#define TIMEOUT64(a,b) ((INT64)((b) - (a)) < 0) typedef enum { KcsIdleState, KcsReadState, KcsWriteState, KcsErrorState } KCS_STATE; typedef union { UINT8 RawData; struct { UINT8 Obf : 1; UINT8 Ibf : 1; UINT8 SmAtn : 1; UINT8 CD : 1; UINT8 Oem1 : 1; UINT8 Oem2 : 1; UINT8 State : 2; } Status; } KCS_STATUS; // //External Fucntion List // EFI_STATUS SendDataToBmcPort ( UINT64 KcsTimeoutPeriod, UINT16 KcsPort, VOID *Context, UINT8 *Data, UINT8 DataSize ) /*++ Routine Description: Send data to BMC Arguments: IpmiInstance - The pointer of IPMI_BMC_INSTANCE_DATA Context - The context of this operation Data - The data pointer to be sent DataSize - The data size Returns: EFI_SUCCESS - Send out the data successfully --*/ ; EFI_STATUS ReceiveBmcDataFromPort ( UINT64 KcsTimeoutPeriod, UINT16 KcsPort, VOID *Context, UINT8 *Data, UINT8 *DataSize ) /*++ Routine Description: Routine Description: Receive data from BMC Arguments: IpmiInstance - The pointer of IPMI_BMC_INSTANCE_DATA Context - The context of this operation Data - The buffer pointer DataSize - The buffer size Returns: EFI_SUCCESS - Received data successfully --*/ ; // //Internal Fucntion List // EFI_STATUS KcsErrorExit ( UINT64 KcsTimeoutPeriod, UINT16 KcsPort, VOID *Context ) /*++ Routine Description: Check the KCS error status Arguments: IpmiInstance - The pointer of IPMI_BMC_INSTANCE_DATA KcsPort - The base port of KCS Context - The Context for this operation Returns: EFI_DEVICE_ERROR - The device error happened EFI_SUCCESS - Successfully check the KCS error status --*/ ; EFI_STATUS KcsCheckStatus ( UINT64 KcsTimeoutPeriod, UINT16 KcsPort, KCS_STATE KcsState, BOOLEAN *Idle, VOID *Context ) /*++ Routine Description: Ckeck KCS status Arguments: IpmiInstance - The pointer of IPMI_BMC_INSTANCE_DATA KcsPort - The base port of KCS KcsState - The state of KCS to be checked Idle - If the KCS is idle Context - The context for this operation Returns: EFI_SUCCESS - Checked the KCS status successfully --*/ ; EFI_STATUS SendDataToBmc ( UINT64 KcsTimeoutPeriod, UINT16 KcsPort, VOID *Context, UINT8 *Data, UINT8 DataSize ) /*++ Routine Description: Send data to BMC Arguments: IpmiInstance - The pointer of IPMI_BMC_INSTANCE_DATA Context - The context of this operation Data - The data pointer to be sent DataSize - The data size Returns: EFI_SUCCESS - Send out the data successfully --*/ ; EFI_STATUS ReceiveBmcData ( UINT64 KcsTimeoutPeriod, UINT16 KcsPort, VOID *Context, UINT8 *Data, UINT8 *DataSize ) /*++ Routine Description: Routine Description: Receive data from BMC Arguments: IpmiInstance - The pointer of IPMI_BMC_INSTANCE_DATA Context - The context of this operation Data - The buffer pointer DataSize - The buffer size Returns: EFI_SUCCESS - Received data successfully --*/ ; #endif