]> git.proxmox.com Git - mirror_edk2.git/blame - UnixPkg/UnixSerialIoDxe/UnixSerialIo.h
UnixSerialIo driver was changed to produce the flow control device path node when...
[mirror_edk2.git] / UnixPkg / UnixSerialIoDxe / UnixSerialIo.h
CommitLineData
804405e7 1/*++\r
2\r
ccd55824 3Copyright (c) 2006 - 2009, Intel Corporation \r
4Portions copyright (c) 2008-2009 Apple Inc.\r
804405e7 5All rights reserved. This program and the accompanying materials \r
6are licensed and made available under the terms and conditions of the BSD License \r
7which accompanies this distribution. The full text of the license may be found at \r
8http://opensource.org/licenses/bsd-license.php \r
9 \r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12\r
13Module Name:\r
14\r
15 UnixSerialIo.h\r
16\r
17Abstract:\r
18\r
19\r
20--*/\r
21\r
22#ifndef _UNIXPKG_SERIAL_IO_\r
23#define _UNIXPKG_SERIAL_IO_\r
24#include <sys/types.h>\r
25#include <sys/stat.h>\r
26#include <stdio.h>\r
ccd55824 27\r
28#ifdef __APPLE__\r
29#else\r
804405e7 30#include <stdlib.h>\r
31#include <termio.h>\r
ccd55824 32#endif\r
33\r
804405e7 34#include <fcntl.h>\r
35#include <errno.h>\r
36\r
cf4afc91 37#include "Uefi.h"\r
804405e7 38#include <Protocol/SerialIo.h>\r
39#include <Protocol/DevicePath.h>\r
40\r
41#include <Library/DebugLib.h>\r
42#include <Library/BaseLib.h>\r
43#include <Library/UefiDriverEntryPoint.h>\r
44#include <Library/UefiLib.h>\r
45#include <Library/BaseMemoryLib.h>\r
46#include <Library/UefiBootServicesTableLib.h>\r
47#include <Library/DevicePathLib.h>\r
48#include <Library/MemoryAllocationLib.h>\r
49#include "UnixDxe.h"\r
50\r
51extern EFI_DRIVER_BINDING_PROTOCOL gUnixSerialIoDriverBinding;\r
52extern EFI_COMPONENT_NAME_PROTOCOL gUnixSerialIoComponentName;\r
53\r
54#define SERIAL_MAX_BUFFER_SIZE 256\r
55#define TIMEOUT_STALL_INTERVAL 10\r
56\r
57typedef struct {\r
58 UINT32 First;\r
59 UINT32 Last;\r
60 UINT32 Surplus;\r
61 UINT8 Data[SERIAL_MAX_BUFFER_SIZE];\r
62} SERIAL_DEV_FIFO;\r
63\r
208301e9 64#define UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('U', 'N', 's', 'i')\r
804405e7 65typedef struct {\r
66 UINT64 Signature;\r
67\r
68 //\r
69 // Protocol data for the new handle we are going to add\r
70 //\r
71 EFI_HANDLE Handle;\r
72 EFI_SERIAL_IO_PROTOCOL SerialIo;\r
73 EFI_SERIAL_IO_MODE SerialIoMode;\r
74 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
75\r
76 //\r
77 // Private Data\r
78 //\r
79 EFI_HANDLE ControllerHandle;\r
80 EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
81 UART_DEVICE_PATH UartDevicePath;\r
82 EFI_UNIX_THUNK_PROTOCOL *UnixThunk;\r
83\r
84 EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
85\r
86 //\r
87 // Private NT type Data;\r
88 //\r
89 UINTN UnixHandle;\r
90 struct termios UnixTermios;\r
91\r
92 BOOLEAN SoftwareLoopbackEnable;\r
93 BOOLEAN HardwareFlowControl;\r
94 BOOLEAN HardwareLoopbackEnable;\r
95\r
96 SERIAL_DEV_FIFO Fifo;\r
97\r
98} UNIX_SERIAL_IO_PRIVATE_DATA;\r
99\r
100#define UNIX_SERIAL_IO_PRIVATE_DATA_FROM_THIS(a) \\r
101 CR(a, UNIX_SERIAL_IO_PRIVATE_DATA, SerialIo, UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE)\r
102\r
103//\r
104// Global Protocol Variables\r
105//\r
106extern EFI_DRIVER_BINDING_PROTOCOL gUnixSerialIoDriverBinding;\r
107extern EFI_COMPONENT_NAME_PROTOCOL gUnixSerialIoComponentName;\r
108\r
109//\r
110// Macros to convert EFI serial types to NT serial types.\r
111//\r
112\r
113//\r
114// one second\r
115//\r
116#define SERIAL_TIMEOUT_DEFAULT (1000 * 1000) \r
117#define SERIAL_BAUD_DEFAULT 115200\r
118#define SERIAL_FIFO_DEFAULT 14\r
119#define SERIAL_DATABITS_DEFAULT 8\r
120#define SERIAL_PARITY_DEFAULT DefaultParity\r
121#define SERIAL_STOPBITS_DEFAULT DefaultStopBits\r
122\r
526bf28c
RN
123#define SERIAL_CONTROL_MASK (EFI_SERIAL_CLEAR_TO_SEND | \\r
124 EFI_SERIAL_DATA_SET_READY | \\r
125 EFI_SERIAL_RING_INDICATE | \\r
126 EFI_SERIAL_CARRIER_DETECT | \\r
127 EFI_SERIAL_REQUEST_TO_SEND | \\r
128 EFI_SERIAL_DATA_TERMINAL_READY | \\r
129 EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE | \\r
130 EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE | \\r
131 EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE | \\r
804405e7 132 EFI_SERIAL_INPUT_BUFFER_EMPTY)\r
133\r
134#define ConvertBaud2Nt(x) (DWORD) x\r
135#define ConvertData2Nt(x) (BYTE) x\r
136\r
137#define ConvertParity2Nt(x) \\r
138 (BYTE) ( \\r
139 x == DefaultParity ? NOPARITY : \\r
140 x == NoParity ? NOPARITY : \\r
141 x == EvenParity ? EVENPARITY : \\r
142 x == OddParity ? ODDPARITY : \\r
143 x == MarkParity ? MARKPARITY : \\r
144 x == SpaceParity ? SPACEPARITY : 0 \\r
145 )\r
146\r
147#define ConvertStop2Nt(x) \\r
148 (BYTE) ( \\r
149 x == DefaultParity ? ONESTOPBIT : \\r
150 x == OneFiveStopBits ? ONE5STOPBITS : \\r
151 x == TwoStopBits ? TWOSTOPBITS : 0 \\r
152 )\r
153\r
154#define ConvertTime2Nt(x) ((x) / 1000)\r
155\r
156//\r
157// 115400 baud with rounding errors\r
158//\r
159#define SERIAL_PORT_MAX_BAUD_RATE 115400 \r
160\r
161//\r
162// Fix the differences issue of linux header files termios.h \r
163// \r
164#ifndef B460800\r
165#define B460800 0010004\r
166#endif\r
167#ifndef B500000\r
168#define B500000 0010005\r
169#endif\r
170#ifndef B576000\r
171#define B576000 0010006\r
172#endif\r
173#ifndef B921600\r
174#define B921600 0010007\r
175#endif\r
176#ifndef B1000000\r
177#define B1000000 0010010\r
178#endif\r
179#ifndef B1152000\r
180#define B1152000 0010011\r
181#endif\r
182#ifndef B1500000\r
183#define B1500000 0010012\r
184#endif\r
185#ifndef B2000000\r
186#define B2000000 0010013\r
187#endif\r
188#ifndef B2500000\r
189#define B2500000 0010014\r
190#endif\r
191#ifndef B3000000\r
192#define B3000000 0010015\r
193#endif\r
194#ifndef B3500000\r
195#define B3500000 0010016\r
196#endif\r
197#ifndef B4000000\r
198#define B4000000 0010017\r
199#endif\r
200#ifndef __MAX_BAUD\r
201#define __MAX_BAUD B4000000\r
202#endif\r
203#ifndef CMSPAR\r
204#define CMSPAR 010000000000 /* mark or space (stick) parity */\r
205#endif\r
206#ifndef FIONREAD\r
207#define FIONREAD 0x541B\r
208#endif\r
209//\r
210// Function Prototypes\r
211//\r
212EFI_STATUS\r
213EFIAPI\r
214InitializeUnixSerialIo (\r
215 IN EFI_HANDLE ImageHandle,\r
216 IN EFI_SYSTEM_TABLE *SystemTable\r
217 )\r
218/*++\r
219\r
220Routine Description:\r
221\r
222 TODO: Add function description\r
223\r
224Arguments:\r
225\r
226 ImageHandle - TODO: add argument description\r
227 SystemTable - TODO: add argument description\r
228\r
229Returns:\r
230\r
231 TODO: add return values\r
232\r
233--*/\r
234;\r
235\r
236EFI_STATUS\r
237EFIAPI\r
238UnixSerialIoDriverBindingSupported (\r
239 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
240 IN EFI_HANDLE Handle,\r
241 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
242 )\r
243/*++\r
244\r
245Routine Description:\r
246\r
247 TODO: Add function description\r
248\r
249Arguments:\r
250\r
251 This - TODO: add argument description\r
252 Handle - TODO: add argument description\r
253 RemainingDevicePath - TODO: add argument description\r
254\r
255Returns:\r
256\r
257 TODO: add return values\r
258\r
259--*/\r
260;\r
261\r
262EFI_STATUS\r
263EFIAPI\r
264UnixSerialIoDriverBindingStart (\r
265 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
266 IN EFI_HANDLE Handle,\r
267 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
268 )\r
269/*++\r
270\r
271Routine Description:\r
272\r
273 TODO: Add function description\r
274\r
275Arguments:\r
276\r
277 This - TODO: add argument description\r
278 Handle - TODO: add argument description\r
279 RemainingDevicePath - TODO: add argument description\r
280\r
281Returns:\r
282\r
283 TODO: add return values\r
284\r
285--*/\r
286;\r
287\r
288EFI_STATUS\r
289EFIAPI\r
290UnixSerialIoDriverBindingStop (\r
291 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
292 IN EFI_HANDLE Handle,\r
293 IN UINTN NumberOfChildren,\r
294 IN EFI_HANDLE *ChildHandleBuffer\r
295 )\r
296/*++\r
297\r
298Routine Description:\r
299\r
300 TODO: Add function description\r
301\r
302Arguments:\r
303\r
304 This - TODO: add argument description\r
305 Handle - TODO: add argument description\r
306 NumberOfChildren - TODO: add argument description\r
307 ChildHandleBuffer - TODO: add argument description\r
308\r
309Returns:\r
310\r
311 TODO: add return values\r
312\r
313--*/\r
314;\r
315\r
316EFI_STATUS\r
317EFIAPI\r
318UnixSerialIoReset (\r
319 IN EFI_SERIAL_IO_PROTOCOL *This\r
320 )\r
321/*++\r
322\r
323Routine Description:\r
324\r
325 TODO: Add function description\r
326\r
327Arguments:\r
328\r
329 This - TODO: add argument description\r
330\r
331Returns:\r
332\r
333 TODO: add return values\r
334\r
335--*/\r
336;\r
337\r
338EFI_STATUS\r
339EFIAPI\r
340UnixSerialIoSetAttributes (\r
341 IN EFI_SERIAL_IO_PROTOCOL *This,\r
342 IN UINT64 BaudRate,\r
343 IN UINT32 ReceiveFifoDepth,\r
344 IN UINT32 Timeout,\r
345 IN EFI_PARITY_TYPE Parity,\r
346 IN UINT8 DataBits,\r
347 IN EFI_STOP_BITS_TYPE StopBits\r
348 )\r
349/*++\r
350\r
351Routine Description:\r
352\r
353 TODO: Add function description\r
354\r
355Arguments:\r
356\r
357 This - TODO: add argument description\r
358 BaudRate - TODO: add argument description\r
359 ReceiveFifoDepth - TODO: add argument description\r
360 Timeout - TODO: add argument description\r
361 Parity - TODO: add argument description\r
362 DataBits - TODO: add argument description\r
363 StopBits - TODO: add argument description\r
364\r
365Returns:\r
366\r
367 TODO: add return values\r
368\r
369--*/\r
370;\r
371\r
372EFI_STATUS\r
373EFIAPI\r
374UnixSerialIoSetControl (\r
375 IN EFI_SERIAL_IO_PROTOCOL *This,\r
376 IN UINT32 Control\r
377 )\r
378/*++\r
379\r
380Routine Description:\r
381\r
382 TODO: Add function description\r
383\r
384Arguments:\r
385\r
386 This - TODO: add argument description\r
387 Control - TODO: add argument description\r
388\r
389Returns:\r
390\r
391 TODO: add return values\r
392\r
393--*/\r
394;\r
395\r
396EFI_STATUS\r
397EFIAPI\r
398UnixSerialIoGetControl (\r
399 IN EFI_SERIAL_IO_PROTOCOL *This,\r
400 OUT UINT32 *Control\r
401 )\r
402/*++\r
403\r
404Routine Description:\r
405\r
406 TODO: Add function description\r
407\r
408Arguments:\r
409\r
410 This - TODO: add argument description\r
411 Control - TODO: add argument description\r
412\r
413Returns:\r
414\r
415 TODO: add return values\r
416\r
417--*/\r
418;\r
419\r
420EFI_STATUS\r
421EFIAPI\r
422UnixSerialIoWrite (\r
423 IN EFI_SERIAL_IO_PROTOCOL *This,\r
424 IN OUT UINTN *BufferSize,\r
425 IN VOID *Buffer\r
426 )\r
427/*++\r
428\r
429Routine Description:\r
430\r
431 TODO: Add function description\r
432\r
433Arguments:\r
434\r
435 This - TODO: add argument description\r
436 BufferSize - TODO: add argument description\r
437 Buffer - TODO: add argument description\r
438\r
439Returns:\r
440\r
441 TODO: add return values\r
442\r
443--*/\r
444;\r
445\r
446EFI_STATUS\r
447EFIAPI\r
448UnixSerialIoRead (\r
449 IN EFI_SERIAL_IO_PROTOCOL *This,\r
450 IN OUT UINTN *BufferSize,\r
451 OUT VOID *Buffer\r
452 )\r
453/*++\r
454\r
455Routine Description:\r
456\r
457 TODO: Add function description\r
458\r
459Arguments:\r
460\r
461 This - TODO: add argument description\r
462 BufferSize - TODO: add argument description\r
463 Buffer - TODO: add argument description\r
464\r
465Returns:\r
466\r
467 TODO: add return values\r
468\r
469--*/\r
470;\r
471\r
472BOOLEAN\r
473IsaSerialFifoFull (\r
474 IN SERIAL_DEV_FIFO *Fifo\r
475 )\r
476/*++\r
477\r
478Routine Description:\r
479\r
480 TODO: Add function description\r
481\r
482Arguments:\r
483\r
484 Fifo - TODO: add argument description\r
485\r
486Returns:\r
487\r
488 TODO: add return values\r
489\r
490--*/\r
491;\r
492\r
493BOOLEAN\r
494IsaSerialFifoEmpty (\r
495 IN SERIAL_DEV_FIFO *Fifo\r
496 )\r
497/*++\r
498\r
499Routine Description:\r
500\r
501 TODO: Add function description\r
502\r
503Arguments:\r
504\r
505 Fifo - TODO: add argument description\r
506\r
507Returns:\r
508\r
509 TODO: add return values\r
510\r
511--*/\r
512;\r
513\r
514EFI_STATUS\r
515IsaSerialFifoAdd (\r
516 IN SERIAL_DEV_FIFO *Fifo,\r
517 IN UINT8 Data\r
518 )\r
519/*++\r
520\r
521Routine Description:\r
522\r
523 TODO: Add function description\r
524\r
525Arguments:\r
526\r
527 Fifo - TODO: add argument description\r
528 Data - TODO: add argument description\r
529\r
530Returns:\r
531\r
532 TODO: add return values\r
533\r
534--*/\r
535;\r
536\r
537EFI_STATUS\r
538IsaSerialFifoRemove (\r
539 IN SERIAL_DEV_FIFO *Fifo,\r
540 OUT UINT8 *Data\r
541 )\r
542/*++\r
543\r
544Routine Description:\r
545\r
546 TODO: Add function description\r
547\r
548Arguments:\r
549\r
550 Fifo - TODO: add argument description\r
551 Data - TODO: add argument description\r
552\r
553Returns:\r
554\r
555 TODO: add return values\r
556\r
557--*/\r
558;\r
559\r
560EFI_STATUS\r
561IsaSerialReceiveTransmit (\r
562 UNIX_SERIAL_IO_PRIVATE_DATA *Private\r
563 )\r
564/*++\r
565\r
566Routine Description:\r
567\r
568 TODO: Add function description\r
569\r
570Arguments:\r
571\r
572 Private - TODO: add argument description\r
573\r
574Returns:\r
575\r
576 TODO: add return values\r
577\r
578--*/\r
579;\r
580\r
581#endif\r