1#ifndef _EFI_SER_H
2#define _EFI_SER_H
3
4/*++
5
6Copyright (c) 1998  Intel Corporation
7
8Module Name:
9
10    efiser.h
11
12Abstract:
13
14    EFI serial protocol
15
16Revision History
17
18--*/
19
20//
21// Serial protocol
22//
23
24#define SERIAL_IO_PROTOCOL \
25    { 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD} }
26
27INTERFACE_DECL(_SERIAL_IO_INTERFACE);
28
29typedef enum {
30    DefaultParity,
31    NoParity,
32    EvenParity,
33    OddParity,
34    MarkParity,
35    SpaceParity
36} EFI_PARITY_TYPE;
37
38typedef enum {
39    DefaultStopBits,
40    OneStopBit,         // 1 stop bit
41    OneFiveStopBits,    // 1.5 stop bits
42    TwoStopBits         // 2 stop bits
43} EFI_STOP_BITS_TYPE;
44
45#define EFI_SERIAL_CLEAR_TO_SEND                   0x0010  // RO
46#define EFI_SERIAL_DATA_SET_READY                  0x0020  // RO
47#define EFI_SERIAL_RING_INDICATE                   0x0040  // RO
48#define EFI_SERIAL_CARRIER_DETECT                  0x0080  // RO
49#define EFI_SERIAL_REQUEST_TO_SEND                 0x0002  // WO
50#define EFI_SERIAL_DATA_TERMINAL_READY             0x0001  // WO
51#define EFI_SERIAL_INPUT_BUFFER_EMPTY              0x0100  // RO
52#define EFI_SERIAL_OUTPUT_BUFFER_EMPTY             0x0200  // RO
53#define EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE        0x1000  // RW
54#define EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE        0x2000  // RW
55#define EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE    0x4000  // RW
56
57typedef
58EFI_STATUS
59(EFIAPI *EFI_SERIAL_RESET) (
60    IN struct _SERIAL_IO_INTERFACE  *This
61    );
62
63typedef
64EFI_STATUS
65(EFIAPI *EFI_SERIAL_SET_ATTRIBUTES) (
66    IN struct _SERIAL_IO_INTERFACE  *This,
67    IN UINT64                       BaudRate,
68    IN UINT32                       ReceiveFifoDepth,
69    IN UINT32                       Timeout,
70    IN EFI_PARITY_TYPE              Parity,
71    IN UINT8                        DataBits,
72    IN EFI_STOP_BITS_TYPE           StopBits
73    );
74
75typedef
76EFI_STATUS
77(EFIAPI *EFI_SERIAL_SET_CONTROL_BITS) (
78    IN struct _SERIAL_IO_INTERFACE  *This,
79    IN UINT32                       Control
80    );
81
82typedef
83EFI_STATUS
84(EFIAPI *EFI_SERIAL_GET_CONTROL_BITS) (
85    IN struct _SERIAL_IO_INTERFACE  *This,
86    OUT UINT32                      *Control
87    );
88
89typedef
90EFI_STATUS
91(EFIAPI *EFI_SERIAL_WRITE) (
92    IN struct _SERIAL_IO_INTERFACE  *This,
93    IN OUT UINTN                    *BufferSize,
94    IN VOID                         *Buffer
95    );
96
97typedef
98EFI_STATUS
99(EFIAPI *EFI_SERIAL_READ) (
100    IN struct _SERIAL_IO_INTERFACE  *This,
101    IN OUT UINTN                    *BufferSize,
102    OUT VOID                        *Buffer
103    );
104
105typedef struct {
106    UINT32                  ControlMask;
107
108    // current Attributes
109    UINT32                  Timeout;
110    UINT64                  BaudRate;
111    UINT32                  ReceiveFifoDepth;
112    UINT32                  DataBits;
113    UINT32                  Parity;
114    UINT32                  StopBits;
115} SERIAL_IO_MODE;
116
117#define SERIAL_IO_INTERFACE_REVISION    0x00010000
118
119typedef struct _SERIAL_IO_INTERFACE {
120    UINT32                       Revision;
121    EFI_SERIAL_RESET             Reset;
122    EFI_SERIAL_SET_ATTRIBUTES    SetAttributes;
123    EFI_SERIAL_SET_CONTROL_BITS  SetControl;
124    EFI_SERIAL_GET_CONTROL_BITS  GetControl;
125    EFI_SERIAL_WRITE             Write;
126    EFI_SERIAL_READ              Read;
127
128    SERIAL_IO_MODE               *Mode;
129} SERIAL_IO_INTERFACE;
130
131#endif
132
133