alder_lake_bios/Insyde/InsydeCrPkg/Include/Protocol/Uart16550Access.h

120 lines
3.1 KiB
C

/** @file
Protocol used for Terminal Policy definition.
;******************************************************************************
;* Copyright (c) 2012-2017, Insyde Software Corp. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#ifndef _UART_16550_ACCESS_PROTOCOL_H_
#define _UART_16550_ACCESS_PROTOCOL_H_
#include <Uefi.h>
#include <CrDeviceType.h>
//
// 16550 Compatible Device Path Node. This node is for non-pci controller device only.
//
#define UART_16550_COMPATIBLE_HW_GUID \
{ \
0xe76fd4e9, 0x0a30, 0x4ca9, {0x95, 0x40, 0xd7, 0x99, 0x53, 0x4c, 0xc4, 0xff} \
}
extern EFI_GUID gH2OUart16550CompatibleHwGuid;
//
// 16550 UART register offsets and bitfields
//
#define UART_REG_RBR 0
#define UART_REG_THR 0
#define UART_REG_IER 1
#define UART_REG_IIR 2
#define UART_REG_FCR 2
#define UART_REG_LCR 3
#define UART_REG_MCR 4
#define UART_REG_LSR 5
#define UART_REG_MSR 6
#define UART_REG_SCR 7
#define UART_REG_DLL 0
#define UART_REG_DLH 1
#define UART_LSR_DR BIT0
#define UART_LSR_THRE BIT5
#define UART_MCR_DTR BIT0
#define UART_MCR_RTS BIT1
#define UART_MSR_CTS BIT4
#define CREATE_UID(B,D,F) ((UINT16)(B<<8 | D<<3 | F))
#define GET_BUS(U) ((UINT8)(U>>8))
#define GET_DEV(U) ((UINT8)((U & 0x0FF) >> 3))
#define GET_FUN(U) ((UINT8)(U & 0x07))
#define H2O_UART_1600A_ACCESS_PROTOCOL_GUID \
{ \
0x76bce257, 0xb552, 0x415a, 0xa3, 0x2e, 0xb0, 0xe7, 0x1c, 0xf8, 0x59, 0xd0 \
}
typedef struct _H2O_UART_16550_ACCESS_PROTOCOL H2O_UART_16550_ACCESS_PROTOCOL;
enum UART_BASE_ADDRESS_TYPE {
UBAT_IO,
UBAT_MEMORY,
UBAT_PCI_CFG,
UBAT_BAR_INDEX
};
typedef struct {
UINT8 Bus;
UINT8 Dev;
UINT8 Func;
} PCI_DEVICE_PFA;
typedef struct _UART_16550_DEV_INFO {
CHAR16 *DeviceName;
UINT8 DeviceType;
UINT16 UID;
UINT8 RegisterByteWidth;
UINT8 BaseAddressType;
UINTN BaseAddress;
UINT8 DevIRQ;
UINT32 FifoSize;
UINTN SerialClockFreq;
UINT16 SampleRate;
BOOLEAN LegacySupport;
UINT8 UartUid;
} UART_16550_DEVICE_INFO;
typedef
EFI_STATUS
(EFIAPI *H2O_REGISTER_READ) (
H2O_UART_16550_ACCESS_PROTOCOL *This,
UINT16 Index,
UINT8 *Data
);
typedef
EFI_STATUS
(EFIAPI *H2O_REGISTER_WRITE) (
H2O_UART_16550_ACCESS_PROTOCOL *This,
UINT16 Index,
UINT8 Data
);
struct _H2O_UART_16550_ACCESS_PROTOCOL {
H2O_REGISTER_READ RegRead;
H2O_REGISTER_WRITE RegWrite;
UART_16550_DEVICE_INFO *DeviceInfo;
};
extern EFI_GUID gH2OCrUart16550AccessProtocolGuid;
#endif // _UART_16550_ACCESS_PROTOCOL_H_