~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/ipxe/src/include/ipxe/efi/Protocol/SerialIo.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/** @file
 
2
  Serial IO protocol as defined in the UEFI 2.0 specification.
 
3
 
 
4
  Abstraction of a basic serial device. Targeted at 16550 UART, but
 
5
  could be much more generic.
 
6
 
 
7
  Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
 
8
  This program and the accompanying materials
 
9
  are licensed and made available under the terms and conditions of the BSD License
 
10
  which accompanies this distribution.  The full text of the license may be found at
 
11
  http://opensource.org/licenses/bsd-license.php
 
12
 
 
13
  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 
14
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 
15
 
 
16
**/
 
17
 
 
18
#ifndef __SERIAL_IO_PROTOCOL_H__
 
19
#define __SERIAL_IO_PROTOCOL_H__
 
20
 
 
21
FILE_LICENCE ( BSD3 );
 
22
 
 
23
#define EFI_SERIAL_IO_PROTOCOL_GUID \
 
24
  { \
 
25
    0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD } \
 
26
  }
 
27
 
 
28
///
 
29
/// Protocol GUID defined in EFI1.1.
 
30
///
 
31
#define SERIAL_IO_PROTOCOL  EFI_SERIAL_IO_PROTOCOL_GUID
 
32
 
 
33
typedef struct _EFI_SERIAL_IO_PROTOCOL EFI_SERIAL_IO_PROTOCOL;
 
34
 
 
35
 
 
36
///
 
37
/// Backward-compatible with EFI1.1.
 
38
///
 
39
typedef EFI_SERIAL_IO_PROTOCOL  SERIAL_IO_INTERFACE;
 
40
 
 
41
///
 
42
/// Parity type that is computed or checked as each character is transmitted or received. If the
 
43
/// device does not support parity, the value is the default parity value.
 
44
///
 
45
typedef enum {
 
46
  DefaultParity,
 
47
  NoParity,
 
48
  EvenParity,
 
49
  OddParity,
 
50
  MarkParity,
 
51
  SpaceParity
 
52
} EFI_PARITY_TYPE;
 
53
 
 
54
///
 
55
/// Stop bits type
 
56
///
 
57
typedef enum {
 
58
  DefaultStopBits,
 
59
  OneStopBit,
 
60
  OneFiveStopBits,
 
61
  TwoStopBits
 
62
} EFI_STOP_BITS_TYPE;
 
63
 
 
64
//
 
65
// define for Control bits, grouped by read only, write only, and read write
 
66
//
 
67
//
 
68
// Read Only
 
69
//
 
70
#define EFI_SERIAL_CLEAR_TO_SEND        0x00000010
 
71
#define EFI_SERIAL_DATA_SET_READY       0x00000020
 
72
#define EFI_SERIAL_RING_INDICATE        0x00000040
 
73
#define EFI_SERIAL_CARRIER_DETECT       0x00000080
 
74
#define EFI_SERIAL_INPUT_BUFFER_EMPTY   0x00000100
 
75
#define EFI_SERIAL_OUTPUT_BUFFER_EMPTY  0x00000200
 
76
 
 
77
//
 
78
// Write Only
 
79
//
 
80
#define EFI_SERIAL_REQUEST_TO_SEND      0x00000002
 
81
#define EFI_SERIAL_DATA_TERMINAL_READY  0x00000001
 
82
 
 
83
//
 
84
// Read Write
 
85
//
 
86
#define EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE     0x00001000
 
87
#define EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE     0x00002000
 
88
#define EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE 0x00004000
 
89
 
 
90
//
 
91
// Serial IO Member Functions
 
92
//
 
93
/**
 
94
  Reset the serial device.
 
95
 
 
96
  @param  This              Protocol instance pointer.
 
97
 
 
98
  @retval EFI_SUCCESS       The device was reset.
 
99
  @retval EFI_DEVICE_ERROR  The serial device could not be reset.
 
100
 
 
101
**/
 
102
typedef
 
103
EFI_STATUS
 
104
(EFIAPI *EFI_SERIAL_RESET)(
 
105
  IN EFI_SERIAL_IO_PROTOCOL *This
 
106
  );
 
107
 
 
108
/**
 
109
  Sets the baud rate, receive FIFO depth, transmit/receice time out, parity,
 
110
  data bits, and stop bits on a serial device.
 
111
 
 
112
  @param  This             Protocol instance pointer.
 
113
  @param  BaudRate         The requested baud rate. A BaudRate value of 0 will use the
 
114
                           device's default interface speed.
 
115
  @param  ReveiveFifoDepth The requested depth of the FIFO on the receive side of the
 
116
                           serial interface. A ReceiveFifoDepth value of 0 will use
 
117
                           the device's default FIFO depth.
 
118
  @param  Timeout          The requested time out for a single character in microseconds.
 
119
                           This timeout applies to both the transmit and receive side of the
 
120
                           interface. A Timeout value of 0 will use the device's default time
 
121
                           out value.
 
122
  @param  Parity           The type of parity to use on this serial device. A Parity value of
 
123
                           DefaultParity will use the device's default parity value.
 
124
  @param  DataBits         The number of data bits to use on the serial device. A DataBits
 
125
                           vaule of 0 will use the device's default data bit setting.
 
126
  @param  StopBits         The number of stop bits to use on this serial device. A StopBits
 
127
                           value of DefaultStopBits will use the device's default number of
 
128
                           stop bits.
 
129
 
 
130
  @retval EFI_SUCCESS      The device was reset.
 
131
  @retval EFI_DEVICE_ERROR The serial device could not be reset.
 
132
 
 
133
**/
 
134
typedef
 
135
EFI_STATUS
 
136
(EFIAPI *EFI_SERIAL_SET_ATTRIBUTES)(
 
137
  IN EFI_SERIAL_IO_PROTOCOL         *This,
 
138
  IN UINT64                         BaudRate,
 
139
  IN UINT32                         ReceiveFifoDepth,
 
140
  IN UINT32                         Timeout,
 
141
  IN EFI_PARITY_TYPE                Parity,
 
142
  IN UINT8                          DataBits,
 
143
  IN EFI_STOP_BITS_TYPE             StopBits
 
144
  );
 
145
 
 
146
/**
 
147
  Set the control bits on a serial device
 
148
 
 
149
  @param  This             Protocol instance pointer.
 
150
  @param  Control          Set the bits of Control that are settable.
 
151
 
 
152
  @retval EFI_SUCCESS      The new control bits were set on the serial device.
 
153
  @retval EFI_UNSUPPORTED  The serial device does not support this operation.
 
154
  @retval EFI_DEVICE_ERROR The serial device is not functioning correctly.
 
155
 
 
156
**/
 
157
typedef
 
158
EFI_STATUS
 
159
(EFIAPI *EFI_SERIAL_SET_CONTROL_BITS)(
 
160
  IN EFI_SERIAL_IO_PROTOCOL         *This,
 
161
  IN UINT32                         Control
 
162
  );
 
163
 
 
164
/**
 
165
  Retrieves the status of thecontrol bits on a serial device
 
166
 
 
167
  @param  This              Protocol instance pointer.
 
168
  @param  Control           A pointer to return the current Control signals from the serial device.
 
169
 
 
170
  @retval EFI_SUCCESS       The control bits were read from the serial device.
 
171
  @retval EFI_DEVICE_ERROR  The serial device is not functioning correctly.
 
172
 
 
173
**/
 
174
typedef
 
175
EFI_STATUS
 
176
(EFIAPI *EFI_SERIAL_GET_CONTROL_BITS)(
 
177
  IN EFI_SERIAL_IO_PROTOCOL         *This,
 
178
  OUT UINT32                        *Control
 
179
  );
 
180
 
 
181
/**
 
182
  Writes data to a serial device.
 
183
 
 
184
  @param  This              Protocol instance pointer.
 
185
  @param  BufferSize        On input, the size of the Buffer. On output, the amount of
 
186
                            data actually written.
 
187
  @param  Buffer            The buffer of data to write
 
188
 
 
189
  @retval EFI_SUCCESS       The data was written.
 
190
  @retval EFI_DEVICE_ERROR  The device reported an error.
 
191
  @retval EFI_TIMEOUT       The data write was stopped due to a timeout.
 
192
 
 
193
**/
 
194
typedef
 
195
EFI_STATUS
 
196
(EFIAPI *EFI_SERIAL_WRITE)(
 
197
  IN EFI_SERIAL_IO_PROTOCOL         *This,
 
198
  IN OUT UINTN                      *BufferSize,
 
199
  IN VOID                           *Buffer
 
200
  );
 
201
 
 
202
/**
 
203
  Writes data to a serial device.
 
204
 
 
205
  @param  This              Protocol instance pointer.
 
206
  @param  BufferSize        On input, the size of the Buffer. On output, the amount of
 
207
                            data returned in Buffer.
 
208
  @param  Buffer            The buffer to return the data into.
 
209
 
 
210
  @retval EFI_SUCCESS       The data was read.
 
211
  @retval EFI_DEVICE_ERROR  The device reported an error.
 
212
  @retval EFI_TIMEOUT       The data write was stopped due to a timeout.
 
213
 
 
214
**/
 
215
typedef
 
216
EFI_STATUS
 
217
(EFIAPI *EFI_SERIAL_READ)(
 
218
  IN EFI_SERIAL_IO_PROTOCOL         *This,
 
219
  IN OUT UINTN                      *BufferSize,
 
220
  OUT VOID                          *Buffer
 
221
  );
 
222
 
 
223
/**
 
224
  @par Data Structure Description:
 
225
  The data values in SERIAL_IO_MODE are read-only and are updated by the code
 
226
  that produces the SERIAL_IO_PROTOCOL member functions.
 
227
 
 
228
  @param ControlMask
 
229
  A mask for the Control bits that the device supports. The device
 
230
  must always support the Input Buffer Empty control bit.
 
231
 
 
232
  @param TimeOut
 
233
  If applicable, the number of microseconds to wait before timing out
 
234
  a Read or Write operation.
 
235
 
 
236
  @param BaudRate
 
237
  If applicable, the current baud rate setting of the device; otherwise,
 
238
  baud rate has the value of zero to indicate that device runs at the
 
239
  device's designed speed.
 
240
 
 
241
  @param ReceiveFifoDepth
 
242
  The number of characters the device will buffer on input
 
243
 
 
244
  @param DataBits
 
245
  The number of characters the device will buffer on input
 
246
 
 
247
  @param Parity
 
248
  If applicable, this is the EFI_PARITY_TYPE that is computed or
 
249
  checked as each character is transmitted or reveived. If the device
 
250
  does not support parity the value is the default parity value.
 
251
 
 
252
  @param StopBits
 
253
  If applicable, the EFI_STOP_BITS_TYPE number of stop bits per
 
254
  character. If the device does not support stop bits the value is
 
255
  the default stop bit values.
 
256
 
 
257
**/
 
258
typedef struct {
 
259
  UINT32  ControlMask;
 
260
 
 
261
  //
 
262
  // current Attributes
 
263
  //
 
264
  UINT32  Timeout;
 
265
  UINT64  BaudRate;
 
266
  UINT32  ReceiveFifoDepth;
 
267
  UINT32  DataBits;
 
268
  UINT32  Parity;
 
269
  UINT32  StopBits;
 
270
} EFI_SERIAL_IO_MODE;
 
271
 
 
272
#define EFI_SERIAL_IO_PROTOCOL_REVISION    0x00010000
 
273
#define SERIAL_IO_INTERFACE_REVISION  EFI_SERIAL_IO_PROTOCOL_REVISION
 
274
 
 
275
///
 
276
/// The Serial I/O protocol is used to communicate with UART-style serial devices.
 
277
/// These can be standard UART serial ports in PC-AT systems, serial ports attached
 
278
/// to a USB interface, or potentially any character-based I/O device.
 
279
///
 
280
struct _EFI_SERIAL_IO_PROTOCOL {
 
281
  ///
 
282
  /// The revision to which the EFI_SERIAL_IO_PROTOCOL adheres. All future revisions
 
283
  /// must be backwards compatible. If a future version is not backwards compatible,
 
284
  /// it is not the same GUID.
 
285
  ///
 
286
  UINT32                      Revision;
 
287
  EFI_SERIAL_RESET            Reset;
 
288
  EFI_SERIAL_SET_ATTRIBUTES   SetAttributes;
 
289
  EFI_SERIAL_SET_CONTROL_BITS SetControl;
 
290
  EFI_SERIAL_GET_CONTROL_BITS GetControl;
 
291
  EFI_SERIAL_WRITE            Write;
 
292
  EFI_SERIAL_READ             Read;
 
293
  ///
 
294
  /// Pointer to SERIAL_IO_MODE data.
 
295
  ///
 
296
  EFI_SERIAL_IO_MODE          *Mode;
 
297
};
 
298
 
 
299
extern EFI_GUID gEfiSerialIoProtocolGuid;
 
300
 
 
301
#endif