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