/** @file
Header file for BDS Hook Library
Copyright (c) 2020, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _BOARD_BDS_HOOK_H_
#define _BOARD_BDS_HOOK_H_
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
///
/// ConnectType
///
#define CONSOLE_OUT 0x00000001
#define STD_ERROR 0x00000002
#define CONSOLE_IN 0x00000004
#define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
extern EFI_GUID gUefiShellFileGuid;
extern EFI_BOOT_MODE gBootMode;
#define gPciRootBridge \
{ \
{ \
ACPI_DEVICE_PATH, \
ACPI_DP, \
{ \
(UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
(UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
}, \
}, \
EISA_PNP_ID (0x0A03), \
0 \
}
#define gEndEntire \
{ \
END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { END_DEVICE_PATH_LENGTH, 0 } \
}
typedef struct {
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN ConnectType;
} BDS_CONSOLE_CONNECT_ENTRY;
//
// Platform Root Bridge
//
typedef struct {
ACPI_HID_DEVICE_PATH PciRootBridge;
EFI_DEVICE_PATH_PROTOCOL End;
} PLATFORM_ROOT_BRIDGE_DEVICE_PATH;
//
// Below is the platform console device path
//
typedef struct {
ACPI_HID_DEVICE_PATH PciRootBridge;
PCI_DEVICE_PATH IsaBridge;
ACPI_HID_DEVICE_PATH Keyboard;
EFI_DEVICE_PATH_PROTOCOL End;
} PLATFORM_KEYBOARD_DEVICE_PATH;
typedef struct {
ACPI_HID_DEVICE_PATH PciRootBridge;
PCI_DEVICE_PATH PciDevice;
EFI_DEVICE_PATH_PROTOCOL End;
} PLATFORM_ONBOARD_CONTROLLER_DEVICE_PATH;
typedef struct {
ACPI_HID_DEVICE_PATH PciRootBridge;
PCI_DEVICE_PATH Pci0Device;
EFI_DEVICE_PATH_PROTOCOL End;
} PLATFORM_PEG_ROOT_CONTROLLER_DEVICE_PATH;
typedef struct {
ACPI_HID_DEVICE_PATH PciRootBridge;
PCI_DEVICE_PATH PciBridge;
PCI_DEVICE_PATH PciDevice;
EFI_DEVICE_PATH_PROTOCOL End;
} PLATFORM_PCI_CONTROLLER_DEVICE_PATH;
//
// Below is the boot option device path
//
#define CLASS_HID 3
#define SUBCLASS_BOOT 1
#define PROTOCOL_KEYBOARD 1
typedef struct {
USB_CLASS_DEVICE_PATH UsbClass;
EFI_DEVICE_PATH_PROTOCOL End;
} USB_CLASS_FORMAT_DEVICE_PATH;
extern USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath;
//
// Platform BDS Functions
//
/**
Perform the memory test base on the memory test intensive level,
and update the memory resource.
@param Level The memory test intensive level.
@retval EFI_STATUS Success test all the system memory and update
the memory resource
**/
EFI_STATUS
MemoryTest (
IN EXTENDMEM_COVERAGE_LEVEL Level
);
/**
Connect with predeined platform connect sequence,
the OEM/IBV can customize with their own connect sequence.
@param[in] BootMode Boot mode of this boot.
**/
VOID
ConnectSequence (
IN EFI_BOOT_MODE BootMode
);
/**
Compares boot priorities of two boot options
@param Left The left boot option
@param Right The right boot option
@return The difference between the Left and Right
boot options
**/
INTN
EFIAPI
CompareBootOption (
CONST VOID *Left,
CONST VOID *Right
);
/**
This function is called after all the boot options are enumerated and ordered properly.
**/
VOID
RegisterStaticHotkey (
VOID
);
/**
Registers/Unregisters boot option hotkey
@param OptionNumber The boot option number for the key option.
@param Key The the key input
@param Add Flag to indicate to add or remove a key
**/
VOID
RegisterDefaultBootOption (
VOID
);
#endif