]> git.proxmox.com Git - mirror_edk2.git/blame - UnixPkg/UnixSerialIoDxe/UnixSerialIo.h
Integrate patch from Andrew Fish to make it run on OS X.
[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
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_INPUT_BUFFER_EMPTY)\r
130\r
131#define ConvertBaud2Nt(x) (DWORD) x\r
132#define ConvertData2Nt(x) (BYTE) x\r
133\r
134#define ConvertParity2Nt(x) \\r
135 (BYTE) ( \\r
136 x == DefaultParity ? NOPARITY : \\r
137 x == NoParity ? NOPARITY : \\r
138 x == EvenParity ? EVENPARITY : \\r
139 x == OddParity ? ODDPARITY : \\r
140 x == MarkParity ? MARKPARITY : \\r
141 x == SpaceParity ? SPACEPARITY : 0 \\r
142 )\r
143\r
144#define ConvertStop2Nt(x) \\r
145 (BYTE) ( \\r
146 x == DefaultParity ? ONESTOPBIT : \\r
147 x == OneFiveStopBits ? ONE5STOPBITS : \\r
148 x == TwoStopBits ? TWOSTOPBITS : 0 \\r
149 )\r
150\r
151#define ConvertTime2Nt(x) ((x) / 1000)\r
152\r
153//\r
154// 115400 baud with rounding errors\r
155//\r
156#define SERIAL_PORT_MAX_BAUD_RATE 115400 \r
157\r
158//\r
159// Fix the differences issue of linux header files termios.h \r
160// \r
161#ifndef B460800\r
162#define B460800 0010004\r
163#endif\r
164#ifndef B500000\r
165#define B500000 0010005\r
166#endif\r
167#ifndef B576000\r
168#define B576000 0010006\r
169#endif\r
170#ifndef B921600\r
171#define B921600 0010007\r
172#endif\r
173#ifndef B1000000\r
174#define B1000000 0010010\r
175#endif\r
176#ifndef B1152000\r
177#define B1152000 0010011\r
178#endif\r
179#ifndef B1500000\r
180#define B1500000 0010012\r
181#endif\r
182#ifndef B2000000\r
183#define B2000000 0010013\r
184#endif\r
185#ifndef B2500000\r
186#define B2500000 0010014\r
187#endif\r
188#ifndef B3000000\r
189#define B3000000 0010015\r
190#endif\r
191#ifndef B3500000\r
192#define B3500000 0010016\r
193#endif\r
194#ifndef B4000000\r
195#define B4000000 0010017\r
196#endif\r
197#ifndef __MAX_BAUD\r
198#define __MAX_BAUD B4000000\r
199#endif\r
200#ifndef CMSPAR\r
201#define CMSPAR 010000000000 /* mark or space (stick) parity */\r
202#endif\r
203#ifndef FIONREAD\r
204#define FIONREAD 0x541B\r
205#endif\r
206//\r
207// Function Prototypes\r
208//\r
209EFI_STATUS\r
210EFIAPI\r
211InitializeUnixSerialIo (\r
212 IN EFI_HANDLE ImageHandle,\r
213 IN EFI_SYSTEM_TABLE *SystemTable\r
214 )\r
215/*++\r
216\r
217Routine Description:\r
218\r
219 TODO: Add function description\r
220\r
221Arguments:\r
222\r
223 ImageHandle - TODO: add argument description\r
224 SystemTable - TODO: add argument description\r
225\r
226Returns:\r
227\r
228 TODO: add return values\r
229\r
230--*/\r
231;\r
232\r
233EFI_STATUS\r
234EFIAPI\r
235UnixSerialIoDriverBindingSupported (\r
236 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
237 IN EFI_HANDLE Handle,\r
238 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
239 )\r
240/*++\r
241\r
242Routine Description:\r
243\r
244 TODO: Add function description\r
245\r
246Arguments:\r
247\r
248 This - TODO: add argument description\r
249 Handle - TODO: add argument description\r
250 RemainingDevicePath - TODO: add argument description\r
251\r
252Returns:\r
253\r
254 TODO: add return values\r
255\r
256--*/\r
257;\r
258\r
259EFI_STATUS\r
260EFIAPI\r
261UnixSerialIoDriverBindingStart (\r
262 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
263 IN EFI_HANDLE Handle,\r
264 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
265 )\r
266/*++\r
267\r
268Routine Description:\r
269\r
270 TODO: Add function description\r
271\r
272Arguments:\r
273\r
274 This - TODO: add argument description\r
275 Handle - TODO: add argument description\r
276 RemainingDevicePath - TODO: add argument description\r
277\r
278Returns:\r
279\r
280 TODO: add return values\r
281\r
282--*/\r
283;\r
284\r
285EFI_STATUS\r
286EFIAPI\r
287UnixSerialIoDriverBindingStop (\r
288 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
289 IN EFI_HANDLE Handle,\r
290 IN UINTN NumberOfChildren,\r
291 IN EFI_HANDLE *ChildHandleBuffer\r
292 )\r
293/*++\r
294\r
295Routine Description:\r
296\r
297 TODO: Add function description\r
298\r
299Arguments:\r
300\r
301 This - TODO: add argument description\r
302 Handle - TODO: add argument description\r
303 NumberOfChildren - TODO: add argument description\r
304 ChildHandleBuffer - TODO: add argument description\r
305\r
306Returns:\r
307\r
308 TODO: add return values\r
309\r
310--*/\r
311;\r
312\r
313EFI_STATUS\r
314EFIAPI\r
315UnixSerialIoReset (\r
316 IN EFI_SERIAL_IO_PROTOCOL *This\r
317 )\r
318/*++\r
319\r
320Routine Description:\r
321\r
322 TODO: Add function description\r
323\r
324Arguments:\r
325\r
326 This - TODO: add argument description\r
327\r
328Returns:\r
329\r
330 TODO: add return values\r
331\r
332--*/\r
333;\r
334\r
335EFI_STATUS\r
336EFIAPI\r
337UnixSerialIoSetAttributes (\r
338 IN EFI_SERIAL_IO_PROTOCOL *This,\r
339 IN UINT64 BaudRate,\r
340 IN UINT32 ReceiveFifoDepth,\r
341 IN UINT32 Timeout,\r
342 IN EFI_PARITY_TYPE Parity,\r
343 IN UINT8 DataBits,\r
344 IN EFI_STOP_BITS_TYPE StopBits\r
345 )\r
346/*++\r
347\r
348Routine Description:\r
349\r
350 TODO: Add function description\r
351\r
352Arguments:\r
353\r
354 This - TODO: add argument description\r
355 BaudRate - TODO: add argument description\r
356 ReceiveFifoDepth - TODO: add argument description\r
357 Timeout - TODO: add argument description\r
358 Parity - TODO: add argument description\r
359 DataBits - TODO: add argument description\r
360 StopBits - TODO: add argument description\r
361\r
362Returns:\r
363\r
364 TODO: add return values\r
365\r
366--*/\r
367;\r
368\r
369EFI_STATUS\r
370EFIAPI\r
371UnixSerialIoSetControl (\r
372 IN EFI_SERIAL_IO_PROTOCOL *This,\r
373 IN UINT32 Control\r
374 )\r
375/*++\r
376\r
377Routine Description:\r
378\r
379 TODO: Add function description\r
380\r
381Arguments:\r
382\r
383 This - TODO: add argument description\r
384 Control - TODO: add argument description\r
385\r
386Returns:\r
387\r
388 TODO: add return values\r
389\r
390--*/\r
391;\r
392\r
393EFI_STATUS\r
394EFIAPI\r
395UnixSerialIoGetControl (\r
396 IN EFI_SERIAL_IO_PROTOCOL *This,\r
397 OUT UINT32 *Control\r
398 )\r
399/*++\r
400\r
401Routine Description:\r
402\r
403 TODO: Add function description\r
404\r
405Arguments:\r
406\r
407 This - TODO: add argument description\r
408 Control - TODO: add argument description\r
409\r
410Returns:\r
411\r
412 TODO: add return values\r
413\r
414--*/\r
415;\r
416\r
417EFI_STATUS\r
418EFIAPI\r
419UnixSerialIoWrite (\r
420 IN EFI_SERIAL_IO_PROTOCOL *This,\r
421 IN OUT UINTN *BufferSize,\r
422 IN VOID *Buffer\r
423 )\r
424/*++\r
425\r
426Routine Description:\r
427\r
428 TODO: Add function description\r
429\r
430Arguments:\r
431\r
432 This - TODO: add argument description\r
433 BufferSize - TODO: add argument description\r
434 Buffer - TODO: add argument description\r
435\r
436Returns:\r
437\r
438 TODO: add return values\r
439\r
440--*/\r
441;\r
442\r
443EFI_STATUS\r
444EFIAPI\r
445UnixSerialIoRead (\r
446 IN EFI_SERIAL_IO_PROTOCOL *This,\r
447 IN OUT UINTN *BufferSize,\r
448 OUT VOID *Buffer\r
449 )\r
450/*++\r
451\r
452Routine Description:\r
453\r
454 TODO: Add function description\r
455\r
456Arguments:\r
457\r
458 This - TODO: add argument description\r
459 BufferSize - TODO: add argument description\r
460 Buffer - TODO: add argument description\r
461\r
462Returns:\r
463\r
464 TODO: add return values\r
465\r
466--*/\r
467;\r
468\r
469BOOLEAN\r
470IsaSerialFifoFull (\r
471 IN SERIAL_DEV_FIFO *Fifo\r
472 )\r
473/*++\r
474\r
475Routine Description:\r
476\r
477 TODO: Add function description\r
478\r
479Arguments:\r
480\r
481 Fifo - TODO: add argument description\r
482\r
483Returns:\r
484\r
485 TODO: add return values\r
486\r
487--*/\r
488;\r
489\r
490BOOLEAN\r
491IsaSerialFifoEmpty (\r
492 IN SERIAL_DEV_FIFO *Fifo\r
493 )\r
494/*++\r
495\r
496Routine Description:\r
497\r
498 TODO: Add function description\r
499\r
500Arguments:\r
501\r
502 Fifo - TODO: add argument description\r
503\r
504Returns:\r
505\r
506 TODO: add return values\r
507\r
508--*/\r
509;\r
510\r
511EFI_STATUS\r
512IsaSerialFifoAdd (\r
513 IN SERIAL_DEV_FIFO *Fifo,\r
514 IN UINT8 Data\r
515 )\r
516/*++\r
517\r
518Routine Description:\r
519\r
520 TODO: Add function description\r
521\r
522Arguments:\r
523\r
524 Fifo - TODO: add argument description\r
525 Data - TODO: add argument description\r
526\r
527Returns:\r
528\r
529 TODO: add return values\r
530\r
531--*/\r
532;\r
533\r
534EFI_STATUS\r
535IsaSerialFifoRemove (\r
536 IN SERIAL_DEV_FIFO *Fifo,\r
537 OUT UINT8 *Data\r
538 )\r
539/*++\r
540\r
541Routine Description:\r
542\r
543 TODO: Add function description\r
544\r
545Arguments:\r
546\r
547 Fifo - TODO: add argument description\r
548 Data - TODO: add argument description\r
549\r
550Returns:\r
551\r
552 TODO: add return values\r
553\r
554--*/\r
555;\r
556\r
557EFI_STATUS\r
558IsaSerialReceiveTransmit (\r
559 UNIX_SERIAL_IO_PRIVATE_DATA *Private\r
560 )\r
561/*++\r
562\r
563Routine Description:\r
564\r
565 TODO: Add function description\r
566\r
567Arguments:\r
568\r
569 Private - TODO: add argument description\r
570\r
571Returns:\r
572\r
573 TODO: add return values\r
574\r
575--*/\r
576;\r
577\r
578#endif\r