Files
Jeremy Linton fe59663f0a Platform/RaspberryPi: Add further mailbox helpers
Lets add some further mailbox helpers and convert the existing
RpiFirmwareSetLed into a generic SetGpio() function.

Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
Reviewed-by: Andrei Warkentin <awarkentin@vmware.com>
Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com>
2021-01-08 10:42:13 +01:00

205 lines
3.8 KiB
C

/** @file
*
* Copyright (c) 2019, ARM Limited. All rights reserved.
* Copyright (c) 2017 - 2020, Andrei Warkentin <andrey.warkentin@gmail.com>
* Copyright (c) 2016, Linaro Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*
**/
#ifndef __RASPBERRY_PI_FIRMWARE_PROTOCOL_H__
#define __RASPBERRY_PI_FIRMWARE_PROTOCOL_H__
#define RASPBERRY_PI_FIRMWARE_PROTOL_GUID \
{ 0x0ACA9535, 0x7AD0, 0x4286, { 0xB0, 0x2E, 0x87, 0xFA, 0x7E, 0x2A, 0x57, 0x11 } }
typedef
EFI_STATUS
(EFIAPI *SET_POWER_STATE) (
IN UINT32 DeviceId,
IN BOOLEAN PowerState,
IN BOOLEAN Wait
);
typedef
EFI_STATUS
(EFIAPI *GET_MAC_ADDRESS) (
OUT UINT8 MacAddress[6]
);
typedef
EFI_STATUS
(EFIAPI *GET_COMMAND_LINE) (
IN UINTN BufferSize,
OUT CHAR8 CommandLine[]
);
typedef
EFI_STATUS
(EFIAPI *GET_CLOCK_STATE) (
IN UINT32 ClockId,
OUT UINT32 *ClockState
);
typedef
EFI_STATUS
(EFIAPI *SET_CLOCK_STATE) (
IN UINT32 ClockId,
IN UINT32 ClockState
);
typedef
EFI_STATUS
(EFIAPI *GET_CLOCK_RATE) (
IN UINT32 ClockId,
OUT UINT32 *ClockRate
);
typedef
EFI_STATUS
(EFIAPI *SET_CLOCK_RATE) (
IN UINT32 ClockId,
OUT UINT32 ClockRate,
IN BOOLEAN SkipTurbo
);
typedef
EFI_STATUS
(EFIAPI *GET_FB) (
IN UINT32 Width,
IN UINT32 Height,
IN UINT32 Depth,
OUT EFI_PHYSICAL_ADDRESS *FbBase,
OUT UINTN *FbSize,
OUT UINTN *Pitch
);
typedef
EFI_STATUS
(EFIAPI *GET_FB_SIZE) (
OUT UINT32 *Width,
OUT UINT32 *Height
);
typedef
EFI_STATUS
(EFIAPI *FREE_FB) (
VOID
);
typedef
VOID
(EFIAPI *SET_LED) (
BOOLEAN On
);
typedef
EFI_STATUS
(EFIAPI *GET_SERIAL) (
UINT64 *Serial
);
typedef
EFI_STATUS
(EFIAPI *GET_MODEL) (
UINT32 *Model
);
typedef
EFI_STATUS
(EFIAPI *GET_MODEL_REVISION) (
UINT32 *Revision
);
typedef
CHAR8*
(EFIAPI *GET_MODEL_NAME) (
INTN ModelId
);
typedef
EFI_STATUS
(EFIAPI *GET_MODEL_FAMILY) (
UINT32 *ModelFamily
);
typedef
EFI_STATUS
(EFIAPI *GET_FIRMWARE_REVISION) (
UINT32 *Revision
);
typedef
EFI_STATUS
(EFIAPI *GET_MODEL_INSTALLED_MB) (
UINT32 *InstalledMB
);
typedef
CHAR8*
(EFIAPI *GET_MANUFACTURER_NAME) (
INTN ManufacturerId
);
typedef
CHAR8*
(EFIAPI *GET_CPU_NAME) (
INTN CpuId
);
typedef
EFI_STATUS
(EFIAPI *GET_ARM_MEM) (
UINT32 *Base,
UINT32 *Size
);
typedef
EFI_STATUS
(EFIAPI *NOTIFY_XHCI_RESET) (
UINTN BusNumber,
UINTN DeviceNumber,
UINTN FunctionNumber
);
typedef
EFI_STATUS
(EFIAPI *GPIO_SET_CFG) (
UINTN Gpio,
UINTN Direction,
UINTN State
);
typedef struct {
SET_POWER_STATE SetPowerState;
GET_MAC_ADDRESS GetMacAddress;
GET_COMMAND_LINE GetCommandLine;
GET_CLOCK_RATE GetClockRate;
GET_CLOCK_RATE GetMaxClockRate;
GET_CLOCK_RATE GetMinClockRate;
SET_CLOCK_RATE SetClockRate;
GET_FB GetFB;
FREE_FB FreeFB;
GET_FB_SIZE GetFBSize;
SET_LED SetLed;
GET_SERIAL GetSerial;
GET_MODEL GetModel;
GET_MODEL_REVISION GetModelRevision;
GET_MODEL_NAME GetModelName;
GET_MODEL_FAMILY GetModelFamily;
GET_FIRMWARE_REVISION GetFirmwareRevision;
GET_MANUFACTURER_NAME GetManufacturerName;
GET_CPU_NAME GetCpuName;
GET_ARM_MEM GetArmMem;
GET_MODEL_INSTALLED_MB GetModelInstalledMB;
NOTIFY_XHCI_RESET NotifyXhciReset;
GET_CLOCK_STATE GetClockState;
SET_CLOCK_STATE SetClockState;
GPIO_SET_CFG SetGpioConfig;
} RASPBERRY_PI_FIRMWARE_PROTOCOL;
extern EFI_GUID gRaspberryPiFirmwareProtocolGuid;
#endif /* __RASPBERRY_PI_FIRMWARE_PROTOCOL_H__ */