100 lines
3.8 KiB
Plaintext
100 lines
3.8 KiB
Plaintext
/** @file
|
|
* SPCR Table
|
|
*
|
|
* Copyright (c) 2014 - 2016, ARM Limited. All rights reserved.
|
|
*
|
|
* This program and the accompanying materials are licensed and made available
|
|
* under the terms and conditions of the BSD License which accompanies this
|
|
* distribution. The full text of the license may be found at
|
|
* http://opensource.org/licenses/bsd-license.php
|
|
*
|
|
* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
*
|
|
**/
|
|
|
|
#include "ArmPlatform.h"
|
|
#include <Library/AcpiLib.h>
|
|
#include <Library/ArmLib.h>
|
|
#include <Library/PcdLib.h>
|
|
#include <IndustryStandard/Acpi.h>
|
|
#include <IndustryStandard/SerialPortConsoleRedirectionTable.h>
|
|
|
|
/**
|
|
* References:
|
|
* Serial Port Console Redirection Table Specification Version 1.03 - August 10, 2015
|
|
**/
|
|
|
|
|
|
///
|
|
/// SPCR Flow Control
|
|
///
|
|
#define SPCR_FLOW_CONTROL_NONE 0
|
|
|
|
|
|
STATIC EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE Spcr = {
|
|
ARM_ACPI_HEADER (EFI_ACPI_5_1_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE,
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION),
|
|
// UINT8 InterfaceType;
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART,
|
|
// UINT8 Reserved1[3];
|
|
{
|
|
EFI_ACPI_RESERVED_BYTE,
|
|
EFI_ACPI_RESERVED_BYTE,
|
|
EFI_ACPI_RESERVED_BYTE
|
|
},
|
|
// EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE BaseAddress;
|
|
ARM_GAS32 (FixedPcdGet64 (PcdSerialRegisterBase)),
|
|
// UINT8 InterruptType;
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERRUPT_TYPE_GIC,
|
|
// UINT8 Irq;
|
|
0, // Not used on ARM
|
|
// UINT32 GlobalSystemInterrupt;
|
|
FixedPcdGet32 (PL011UartInterrupt),
|
|
// UINT8 BaudRate;
|
|
#if (FixedPcdGet64 (PcdUartDefaultBaudRate) == 9600)
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_9600,
|
|
#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 19200)
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_19200,
|
|
#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 57600)
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_57600,
|
|
#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 115200)
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_115200,
|
|
#else
|
|
#error Unsupported SPCR Baud Rate
|
|
#endif
|
|
// UINT8 Parity;
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_PARITY_NO_PARITY,
|
|
// UINT8 StopBits;
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_STOP_BITS_1,
|
|
// UINT8 FlowControl;
|
|
SPCR_FLOW_CONTROL_NONE,
|
|
// UINT8 TerminalType;
|
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_TERMINAL_TYPE_ANSI,
|
|
// UINT8 Reserved2;
|
|
EFI_ACPI_RESERVED_BYTE,
|
|
// UINT16 PciDeviceId;
|
|
0xFFFF,
|
|
// UINT16 PciVendorId;
|
|
0xFFFF,
|
|
// UINT8 PciBusNumber;
|
|
0x00,
|
|
// UINT8 PciDeviceNumber;
|
|
0x00,
|
|
// UINT8 PciFunctionNumber;
|
|
0x00,
|
|
// UINT32 PciFlags;
|
|
0x00000000,
|
|
// UINT8 PciSegment;
|
|
0x00,
|
|
// UINT32 Reserved3;
|
|
EFI_ACPI_RESERVED_DWORD
|
|
};
|
|
|
|
//
|
|
// Reference the table being generated to prevent the optimizer from removing the
|
|
// data structure from the executable
|
|
//
|
|
VOID* CONST ReferenceAcpiTable = &Spcr;
|