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