/** @file
DxeIpmiUsb.h -- Header for DxeIpmiUsb
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __DXEIPMIUSB_H__
#define __DXEIPMIUSB_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
ReadTimeStampCounter(
VOID
);
EFI_STATUS
EFIAPI
ReadEflags(
VOID
);
EFI_STATUS
EFIAPI
CpuPause(
VOID
);
EFI_STATUS
EFIAPI
EnableInterrupts(
VOID
);
EFI_STATUS
EFIAPI
DisableInterrupts(
VOID
);
EFI_STATUS
EFIAPI
DebugPrint(
VOID
);
EFI_STATUS
EFIAPI
AssertHandler(
VOID
);
EFI_STATUS
EFIAPI
GetPcdBool(
VOID
);
EFI_STATUS
EFIAPI
PciExpressMmioAddress(
VOID
);
EFI_STATUS
EFIAPI
IoRead32(
VOID
);
EFI_STATUS
EFIAPI
IoWrite16(
VOID
);
EFI_STATUS
EFIAPI
MicrosecondDelay(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
MatchSioGuid(
VOID
);
EFI_STATUS
EFIAPI
UsbClearEndpointHalt(
VOID
);
EFI_STATUS
EFIAPI
SendIpmiUsbControlReport(
VOID
);
EFI_STATUS
EFIAPI
IpmiUsbSendCommand(
VOID
);
EFI_STATUS
EFIAPI
IpmiUsbReceiveResponse(
VOID
);
EFI_STATUS
EFIAPI
IpmiUsbSelfTest(
VOID
);
EFI_STATUS
EFIAPI
ReportSmmEvent(
VOID
);
EFI_STATUS
EFIAPI
ConfigureIpmiUsbEndpoints(
VOID
);
EFI_STATUS
EFIAPI
IpmiUsbSupported(
VOID
);
EFI_STATUS
EFIAPI
IpmiUsbStart(
VOID
);
EFI_STATUS
EFIAPI
IpmiUsbStop(
VOID
);
EFI_STATUS
EFIAPI
DxeIpmiUsbEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
IpmiusbUsbIoProtocolNotify(
VOID
);
EFI_STATUS
EFIAPI
variable definitions(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
PCD_PROTOCOL *mPcdProtocol = NULL; // qword_1FF8(
VOID
);
EFI_STATUS
EFIAPI
STATIC VOID *mHobList = NULL; // qword_2008(
VOID
);
EFI_STATUS
EFIAPI
//(
VOID
);
EFI_STATUS
EFIAPI
IPMI USB device instance pointer(
VOID
);
EFI_STATUS
EFIAPI
IPMI_USB_DEVICE *mIpmiDevice = NULL; // qword_1FB8(
VOID
);
EFI_STATUS
EFIAPI
device descriptor fields and transfer tracking(
VOID
);
EFI_STATUS
EFIAPI
UINT16 mUsbBcdDevice = 0; // word_1FC8(
VOID
);
EFI_STATUS
EFIAPI
STATIC UINT8 mTransferInProgress = 0; // byte_1FD0(
VOID
);
EFI_STATUS
EFIAPI
Memory Operation Helpers (wrappers around BaseLib)(
VOID
);
EFI_STATUS
EFIAPI
/ Platform Helpers(
VOID
);
EFI_STATUS
EFIAPI
/ Debug Helpers(
VOID
);
EFI_STATUS
EFIAPI
by the ASSERT() macro when the test expression is FALSE.(
VOID
);
EFI_STATUS
EFIAPI
Protocol Helper(
VOID
);
EFI_STATUS
EFIAPI
Express MMIO Access(
VOID
);
EFI_STATUS
EFIAPI
I/O and Timer Helpers(
VOID
);
EFI_STATUS
EFIAPI
into whole milliseconds (each ~0x400000 TSC ticks)(
VOID
);
EFI_STATUS
EFIAPI
a remainder.(
VOID
);
EFI_STATUS
EFIAPI
= Microseconds >> 22;(
VOID
);
EFI_STATUS
EFIAPI
1-ms chunk on subsequent iterations(
VOID
);
EFI_STATUS
EFIAPI
(Hand-Off Block) List Helpers(
VOID
);
EFI_STATUS
EFIAPI
the SIO GUID for comparison.(
VOID
);
EFI_STATUS
EFIAPI
= ReadUnaligned64 ((VOID *)(UINTN)&gEfiSioProtocolGuid);(
VOID
);
EFI_STATUS
EFIAPI
Endpoint Reset(
VOID
);
EFI_STATUS
EFIAPI
UsbIo->UsbControlTransfer with the ClearFeature(ENDPOINT_HALT)(
VOID
);
EFI_STATUS
EFIAPI
request (bmRequestType = 0x02, bRequest = 0x01(
VOID
);
EFI_STATUS
EFIAPI
= 0x00, wIndex = Endpoint).(
VOID
);
EFI_STATUS
EFIAPI
is a standard USB device request sent via the default pipe.(
VOID
);
/// call UsbIo->UsbControlTransfer
EFI_STATUS
EFIAPI
EFI_UNSUPPORTED; // Placeholder(
VOID
);
EFI_STATUS
EFIAPI
Transfer / IPMI Command Send and Response Receive(
VOID
);
EFI_STATUS
EFIAPI
1: Send the report via control transfer.(
VOID
);
EFI_STATUS
EFIAPI
UsbIo->UsbControlTransfer ((
VOID
);
EFI_STATUS
EFIAPI
-- built internally by UsbIo(
VOID
);
EFI_STATUS
EFIAPI
the IPMI request data into the device's data buffer.(
VOID
);
EFI_STATUS
EFIAPI
(Device->DataBuffer, Buffer, BufferSize);(
VOID
);
EFI_STATUS
EFIAPI
the sequence number.(
VOID
);
EFI_STATUS
EFIAPI
via USB interrupt OUT endpoint (or control endpoint depending on(
VOID
);
EFI_STATUS
EFIAPI
specific report type).(
VOID
);
EFI_STATUS
EFIAPI
(ReportId == USB_ENDPOINT_INTERRUPT) {(
VOID
);
EFI_STATUS
EFIAPI
OUT transfer for streaming data.(
VOID
);
EFI_STATUS
EFIAPI
TransferSize = BufferSize;(
VOID
);
EFI_STATUS
EFIAPI
the control endpoint with SET_REPORT.(
VOID
);
EFI_STATUS
EFIAPI
= SendIpmiUsbControlReport ((
VOID
);
EFI_STATUS
EFIAPI
from the interrupt IN endpoint.(
VOID
);
EFI_STATUS
EFIAPI
UsbIo->UsbInterruptTransfer ((
VOID
);
EFI_STATUS
EFIAPI
USB Self-Test(
VOID
);
EFI_STATUS
EFIAPI
up the IPMI Get Device ID command parameters.(
VOID
);
EFI_STATUS
EFIAPI
device's NetFunction field is set to NetFn Application (0x06).(
VOID
);
EFI_STATUS
EFIAPI
LUN is 0x00.(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
the command.(
VOID
);
EFI_STATUS
EFIAPI
SendCommand with the Get Device ID command.(
VOID
);
EFI_STATUS
EFIAPI
= Device->SendIpmiCommand ((
VOID
);
EFI_STATUS
EFIAPI
for the control endpoint(
VOID
);
EFI_STATUS
EFIAPI
&BmcStatus(
VOID
);
EFI_STATUS
EFIAPI
the response.(
VOID
);
EFI_STATUS
EFIAPI
= Device->ReceiveIpmiResponse ((
VOID
);
EFI_STATUS
EFIAPI
the self-test result from the first byte of the response.(
VOID
);
EFI_STATUS
EFIAPI
= Self-test passed successfully(
VOID
);
EFI_STATUS
EFIAPI
= Self-test completed with errors(
VOID
);
EFI_STATUS
EFIAPI
= Self-test in progress(
VOID
);
EFI_STATUS
EFIAPI
= Device not ready / self-test not implemented(
VOID
);
EFI_STATUS
EFIAPI
= Device->DataBuffer[0];(
VOID
);
EFI_STATUS
EFIAPI
code < 0x55: self-test passed.(
VOID
);
EFI_STATUS
EFIAPI
Communication (Reporting Events to SMM)(
VOID
);
EFI_STATUS
EFIAPI
via SMM with a platform-specific command.(
VOID
);
EFI_STATUS
EFIAPI
Endpoint Configuration Discovery(
VOID
);
EFI_STATUS
EFIAPI
the interface's endpoints and store the addresses.(
VOID
);
EFI_STATUS
EFIAPI
EFI_SUCCESS;(
VOID
);
EFI_STATUS
EFIAPI
Binding Protocol Implementation(
VOID
);
EFI_STATUS
EFIAPI
USB IO protocol BY_DRIVER.(
VOID
);
EFI_STATUS
EFIAPI
= gBS->OpenProtocol ((
VOID
);
EFI_STATUS
EFIAPI
the interface descriptor.(
VOID
);
EFI_STATUS
EFIAPI
= sizeof (IfcDesc);(
VOID
);
EFI_STATUS
EFIAPI
bInterfaceClass, bInterfaceSubClass, bInterfaceProtocol.(
VOID
);
EFI_STATUS
EFIAPI
IPMI USB: class=0xFF, subclass=0x01, protocol=0x86.(
VOID
);
EFI_STATUS
EFIAPI
((IfcDesc[5] == IPMI_USB_INTERFACE_CLASS) &&(
VOID
);
EFI_STATUS
EFIAPI
USB IO protocol.(
VOID
);
EFI_STATUS
EFIAPI
the IPMI_USB_DEVICE (size 32834 = 0x8042 bytes).(
VOID
);
EFI_STATUS
EFIAPI
= (IPMI_USB_DEVICE *)AllocateZeroPool (sizeof (IPMI_USB_DEVICE));(
VOID
);
EFI_STATUS
EFIAPI
the device structure.(
VOID
);
EFI_STATUS
EFIAPI
the interface descriptor to discover endpoints.(
VOID
);
EFI_STATUS
EFIAPI
the endpoint addresses (stored at NetFunction and Lun fields)(
VOID
);
EFI_STATUS
EFIAPI
the interface descriptor's endpoint addresses.(
VOID
);
EFI_STATUS
EFIAPI
first endpoint is typically Interrupt IN (bit 7 set).(
VOID
);
EFI_STATUS
EFIAPI
second endpoint is typically Interrupt OUT (bit 7 clear).(
VOID
);
EFI_STATUS
EFIAPI
- would iterate endpoints(
VOID
);
EFI_STATUS
EFIAPI
pointers for subsequent use.(
VOID
);
EFI_STATUS
EFIAPI
= Device;(
VOID
);
EFI_STATUS
EFIAPI
self-test.(
VOID
);
EFI_STATUS
EFIAPI
= IpmiUsbSelfTest (Device);(
VOID
);
EFI_STATUS
EFIAPI
the self-test set the state to failed, return error.(
VOID
);
EFI_STATUS
EFIAPI
(Device->CompletionCode == IPMI_USB_STATE_FAILED) {(
VOID
);
EFI_STATUS
EFIAPI
the protocol interface.(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallMultipleProtocolInterfaces ((
VOID
);
EFI_STATUS
EFIAPI
Binding Protocol instance(
VOID
);
EFI_STATUS
EFIAPI
EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = {(
VOID
);
EFI_STATUS
EFIAPI
Entry Point(
VOID
);
EFI_STATUS
EFIAPI
initialization.(
VOID
);
EFI_STATUS
EFIAPI
= ImageHandle;(
VOID
);
EFI_STATUS
EFIAPI
the HOB list pointer.(
VOID
);
EFI_STATUS
EFIAPI
(SystemTable);(
VOID
);
EFI_STATUS
EFIAPI
PCI Express MMIO base address from PCD (token 5).(
VOID
);
EFI_STATUS
EFIAPI
= GetPcdBool (5);(
VOID
);
EFI_STATUS
EFIAPI
PCIe MMIO config in the chipset.(
VOID
);
EFI_STATUS
EFIAPI
0x500 to the PCI Express config register at address 1024064(
VOID
);
EFI_STATUS
EFIAPI
that enables MMIO-based PCI config access).(
VOID
);
EFI_STATUS
EFIAPI
(GetPcdBool (1024068) >= 0) {(
VOID
);
EFI_STATUS
EFIAPI
the enable bit in the PCD.(
VOID
);
EFI_STATUS
EFIAPI
(1024068) |= 0x80;(
VOID
);
EFI_STATUS
EFIAPI
if interrupts were enabled before we enter our delay loop.(
VOID
);
EFI_STATUS
EFIAPI
(ReadEflags () & 0x200) {(
VOID
);
EFI_STATUS
EFIAPI
were enabled. Calibrate a TSC-based delay.(
VOID
);
EFI_STATUS
EFIAPI
= ReadTimeStampCounter () & 0xFFFFFF;(
VOID
);
EFI_STATUS
EFIAPI
waiting for 357 TSC ticks (~1 us at 357 MHz TSC).(
VOID
);
EFI_STATUS
EFIAPI
(((TscStart + 357 - (IoRead32 (0x508) & 0xFFFFFF)) & 0x800000) == 0) {(
VOID
);
EFI_STATUS
EFIAPI
up the Driver Binding Protocol.(
VOID
);
EFI_STATUS
EFIAPI
the Driver Binding Protocol.(
VOID
);
EFI_STATUS
EFIAPI
protocol notification to bind existing USB IO handles.(
VOID
);
EFI_STATUS
EFIAPI
((
VOID
);
EFI_STATUS
EFIAPI
callback is invoked each time a USB IO protocol is registered.(
VOID
);
EFI_STATUS
EFIAPI
actual binding happens through the UEFI Driver Binding Protocol(
VOID
);
EFI_STATUS
EFIAPI
calls IpmiUsbSupported() and IpmiUsbStart() as USB IO handles(
VOID
);
EFI_STATUS
EFIAPI
enumerated.(
VOID
);
#endif /* __DXEIPMIUSB_H__ */