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