]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.h
remove some comments introduced by tools.
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Isa / IsaSerialDxe / Serial.h
CommitLineData
637ff819 1/*++\r
2\r
366565e0 3 Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
4 All rights reserved. This program and the accompanying materials\r
5 are licensed and made available under the terms and conditions of the BSD License\r
6 which accompanies this distribution. The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php\r
8\r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
637ff819 11\r
12\r
13Module Name:\r
14\r
15 serial.h\r
16\r
17Abstract:\r
18\r
19 Include for Serial Driver\r
20\r
21Revision History:\r
22\r
23--*/\r
24\r
25#ifndef _SERIAL_H\r
26#define _SERIAL_H\r
27\r
ed7748fe 28\r
637ff819 29#include <PiDxe.h>\r
30#include <FrameworkPei.h>\r
ed7748fe 31\r
637ff819 32#include <Protocol/IsaIo.h>\r
33#include <Protocol/SerialIo.h>\r
34#include <Protocol/DevicePath.h>\r
ed7748fe 35\r
637ff819 36#include <Library/DebugLib.h>\r
37#include <Library/UefiDriverEntryPoint.h>\r
38#include <Library/BaseLib.h>\r
39#include <Library/UefiLib.h>\r
40#include <Library/DevicePathLib.h>\r
41#include <Library/BaseMemoryLib.h>\r
42#include <Library/MemoryAllocationLib.h>\r
43#include <Library/UefiBootServicesTableLib.h>\r
44#include <Library/ReportStatusCodeLib.h>\r
45#include <Library/PcdLib.h>\r
46//\r
47// Driver Binding Externs\r
48//\r
49extern EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver;\r
50extern EFI_COMPONENT_NAME_PROTOCOL gIsaSerialComponentName;\r
51\r
52//\r
53// Internal Data Structures\r
54//\r
55#define SERIAL_DEV_SIGNATURE EFI_SIGNATURE_32 ('s', 'e', 'r', 'd')\r
56#define SERIAL_MAX_BUFFER_SIZE 16\r
57#define TIMEOUT_STALL_INTERVAL 10\r
58\r
59//\r
60// Name: SERIAL_DEV_FIFO\r
61// Purpose: To define Receive FIFO and Transmit FIFO\r
62// Context: Used by serial data transmit and receive\r
63// Fields:\r
64// First UINT32: The index of the first data in array Data[]\r
65// Last UINT32: The index, which you can put a new data into array Data[]\r
66// Surplus UINT32: Identify how many data you can put into array Data[]\r
67// Data[] UINT8 : An array, which used to store data\r
68//\r
69typedef struct {\r
70 UINT32 First;\r
71 UINT32 Last;\r
72 UINT32 Surplus;\r
73 UINT8 Data[SERIAL_MAX_BUFFER_SIZE];\r
74} SERIAL_DEV_FIFO;\r
75\r
76typedef enum {\r
77 UART8250 = 0,\r
78 UART16450 = 1,\r
79 UART16550 = 2,\r
80 UART16550A= 3\r
81} EFI_UART_TYPE;\r
82\r
83//\r
84// Name: SERIAL_DEV\r
85// Purpose: To provide device specific information\r
86// Context:\r
87// Fields:\r
88// Signature UINTN: The identity of the serial device\r
89// SerialIo SERIAL_IO_PROTOCOL: Serial I/O protocol interface\r
90// SerialMode SERIAL_IO_MODE:\r
91// DevicePath EFI_DEVICE_PATH_PROTOCOL *: Device path of the serial device\r
92// Handle EFI_HANDLE: The handle instance attached to serial device\r
93// BaseAddress UINT16: The base address of specific serial device\r
94// Receive SERIAL_DEV_FIFO: The FIFO used to store data,\r
95// which is received by UART\r
96// Transmit SERIAL_DEV_FIFO: The FIFO used to store data,\r
97// which you want to transmit by UART\r
98// SoftwareLoopbackEnable BOOLEAN:\r
99// Type EFI_UART_TYPE: Specify the UART type of certain serial device\r
100//\r
101typedef struct {\r
102 UINTN Signature;\r
103\r
104 EFI_HANDLE Handle;\r
105 EFI_SERIAL_IO_PROTOCOL SerialIo;\r
106 EFI_SERIAL_IO_MODE SerialMode;\r
107 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
108\r
109 EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
110 UART_DEVICE_PATH UartDevicePath;\r
111 EFI_ISA_IO_PROTOCOL *IsaIo;\r
112\r
113 UINT16 BaseAddress;\r
114 SERIAL_DEV_FIFO Receive;\r
115 SERIAL_DEV_FIFO Transmit;\r
116 BOOLEAN SoftwareLoopbackEnable;\r
117 BOOLEAN HardwareFlowControl;\r
118 EFI_UART_TYPE Type;\r
119 EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
120} SERIAL_DEV;\r
121\r
122#include "ComponentName.h"\r
123\r
124#define SERIAL_DEV_FROM_THIS(a) CR (a, SERIAL_DEV, SerialIo, SERIAL_DEV_SIGNATURE)\r
125\r
126//\r
127// Globale Variables\r
128//\r
129extern EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver;\r
130\r
131//\r
132// Serial Driver Defaults\r
133//\r
134#define SERIAL_PORT_DEFAULT_BAUD_RATE 115200\r
135#define SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH 1\r
136#define SERIAL_PORT_DEFAULT_TIMEOUT 1000000\r
137#define SERIAL_PORT_DEFAULT_PARITY NoParity\r
138#define SERIAL_PORT_DEFAULT_DATA_BITS 8\r
139#define SERIAL_PORT_DEFAULT_STOP_BITS 1\r
140#define SERIAL_PORT_DEFAULT_CONTROL_MASK 0\r
141\r
142//\r
143// (24000000/13)MHz input clock\r
144//\r
145#define SERIAL_PORT_INPUT_CLOCK 1843200\r
146\r
147//\r
148// 115200 baud with rounding errors\r
149//\r
150#define SERIAL_PORT_MAX_BAUD_RATE 115400\r
151#define SERIAL_PORT_MIN_BAUD_RATE 50\r
152\r
153#define SERIAL_PORT_MAX_RECEIVE_FIFO_DEPTH 16\r
154#define SERIAL_PORT_MIN_TIMEOUT 1 // 1 uS\r
155#define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds\r
156//\r
157// UART Registers\r
158//\r
159#define SERIAL_REGISTER_THR 0 // WO Transmit Holding Register\r
160#define SERIAL_REGISTER_RBR 0 // RO Receive Buffer Register\r
161#define SERIAL_REGISTER_DLL 0 // R/W Divisor Latch LSB\r
162#define SERIAL_REGISTER_DLM 1 // R/W Divisor Latch MSB\r
163#define SERIAL_REGISTER_IER 1 // R/W Interrupt Enable Register\r
164#define SERIAL_REGISTER_IIR 2 // RO Interrupt Identification Register\r
165#define SERIAL_REGISTER_FCR 2 // WO FIFO Cotrol Register\r
166#define SERIAL_REGISTER_LCR 3 // R/W Line Control Register\r
167#define SERIAL_REGISTER_MCR 4 // R/W Modem Control Register\r
168#define SERIAL_REGISTER_LSR 5 // R/W Line Status Register\r
169#define SERIAL_REGISTER_MSR 6 // R/W Modem Status Register\r
170#define SERIAL_REGISTER_SCR 7 // R/W Scratch Pad Register\r
171#pragma pack(1)\r
172//\r
173// Name: SERIAL_PORT_IER_BITS\r
174// Purpose: Define each bit in Interrupt Enable Register\r
175// Context:\r
176// Fields:\r
177// RAVIE Bit0: Receiver Data Available Interrupt Enable\r
178// THEIE Bit1: Transmistter Holding Register Empty Interrupt Enable\r
179// RIE Bit2: Receiver Interrupt Enable\r
180// MIE Bit3: Modem Interrupt Enable\r
181// Reserved Bit4-Bit7: Reserved\r
182//\r
183typedef struct {\r
184 UINT8 RAVIE : 1;\r
185 UINT8 THEIE : 1;\r
186 UINT8 RIE : 1;\r
187 UINT8 MIE : 1;\r
188 UINT8 Reserved : 4;\r
189} SERIAL_PORT_IER_BITS;\r
190\r
191//\r
192// Name: SERIAL_PORT_IER\r
193// Purpose:\r
194// Context:\r
195// Fields:\r
196// Bits SERIAL_PORT_IER_BITS: Bits of the IER\r
197// Data UINT8: the value of the IER\r
198//\r
199typedef union {\r
200 SERIAL_PORT_IER_BITS Bits;\r
201 UINT8 Data;\r
202} SERIAL_PORT_IER;\r
203\r
204//\r
205// Name: SERIAL_PORT_IIR_BITS\r
206// Purpose: Define each bit in Interrupt Identification Register\r
207// Context:\r
208// Fields:\r
209// IPS Bit0: Interrupt Pending Status\r
210// IIB Bit1-Bit3: Interrupt ID Bits\r
211// Reserved Bit4-Bit5: Reserved\r
212// FIFOES Bit6-Bit7: FIFO Mode Enable Status\r
213//\r
214typedef struct {\r
215 UINT8 IPS : 1;\r
216 UINT8 IIB : 3;\r
217 UINT8 Reserved : 2;\r
218 UINT8 FIFOES : 2;\r
219} SERIAL_PORT_IIR_BITS;\r
220\r
221//\r
222// Name: SERIAL_PORT_IIR\r
223// Purpose:\r
224// Context:\r
225// Fields:\r
226// Bits SERIAL_PORT_IIR_BITS: Bits of the IIR\r
227// Data UINT8: the value of the IIR\r
228//\r
229typedef union {\r
230 SERIAL_PORT_IIR_BITS Bits;\r
231 UINT8 Data;\r
232} SERIAL_PORT_IIR;\r
233\r
234//\r
235// Name: SERIAL_PORT_FCR_BITS\r
236// Purpose: Define each bit in FIFO Control Register\r
237// Context:\r
238// Fields:\r
239// TRFIFOE Bit0: Transmit and Receive FIFO Enable\r
240// RESETRF Bit1: Reset Reciever FIFO\r
241// RESETTF Bit2: Reset Transmistter FIFO\r
242// DMS Bit3: DMA Mode Select\r
243// Reserved Bit4-Bit5: Reserved\r
244// RTB Bit6-Bit7: Receive Trigger Bits\r
245//\r
246typedef struct {\r
247 UINT8 TRFIFOE : 1;\r
248 UINT8 RESETRF : 1;\r
249 UINT8 RESETTF : 1;\r
250 UINT8 DMS : 1;\r
251 UINT8 Reserved : 2;\r
252 UINT8 RTB : 2;\r
253} SERIAL_PORT_FCR_BITS;\r
254\r
255//\r
256// Name: SERIAL_PORT_FCR\r
257// Purpose:\r
258// Context:\r
259// Fields:\r
260// Bits SERIAL_PORT_FCR_BITS: Bits of the FCR\r
261// Data UINT8: the value of the FCR\r
262//\r
263typedef union {\r
264 SERIAL_PORT_FCR_BITS Bits;\r
265 UINT8 Data;\r
266} SERIAL_PORT_FCR;\r
267\r
268//\r
269// Name: SERIAL_PORT_LCR_BITS\r
270// Purpose: Define each bit in Line Control Register\r
271// Context:\r
272// Fields:\r
273// SERIALDB Bit0-Bit1: Number of Serial Data Bits\r
274// STOPB Bit2: Number of Stop Bits\r
275// PAREN Bit3: Parity Enable\r
276// EVENPAR Bit4: Even Parity Select\r
277// STICPAR Bit5: Sticky Parity\r
278// BRCON Bit6: Break Control\r
279// DLAB Bit7: Divisor Latch Access Bit\r
280//\r
281typedef struct {\r
282 UINT8 SERIALDB : 2;\r
283 UINT8 STOPB : 1;\r
284 UINT8 PAREN : 1;\r
285 UINT8 EVENPAR : 1;\r
286 UINT8 STICPAR : 1;\r
287 UINT8 BRCON : 1;\r
288 UINT8 DLAB : 1;\r
289} SERIAL_PORT_LCR_BITS;\r
290\r
291//\r
292// Name: SERIAL_PORT_LCR\r
293// Purpose:\r
294// Context:\r
295// Fields:\r
296// Bits SERIAL_PORT_LCR_BITS: Bits of the LCR\r
297// Data UINT8: the value of the LCR\r
298//\r
299typedef union {\r
300 SERIAL_PORT_LCR_BITS Bits;\r
301 UINT8 Data;\r
302} SERIAL_PORT_LCR;\r
303\r
304//\r
305// Name: SERIAL_PORT_MCR_BITS\r
306// Purpose: Define each bit in Modem Control Register\r
307// Context:\r
308// Fields:\r
309// DTRC Bit0: Data Terminal Ready Control\r
310// RTS Bit1: Request To Send Control\r
311// OUT1 Bit2: Output1\r
312// OUT2 Bit3: Output2, used to disable interrupt\r
313// LME; Bit4: Loopback Mode Enable\r
314// Reserved Bit5-Bit7: Reserved\r
315//\r
316typedef struct {\r
317 UINT8 DTRC : 1;\r
318 UINT8 RTS : 1;\r
319 UINT8 OUT1 : 1;\r
320 UINT8 OUT2 : 1;\r
321 UINT8 LME : 1;\r
322 UINT8 Reserved : 3;\r
323} SERIAL_PORT_MCR_BITS;\r
324\r
325//\r
326// Name: SERIAL_PORT_MCR\r
327// Purpose:\r
328// Context:\r
329// Fields:\r
330// Bits SERIAL_PORT_MCR_BITS: Bits of the MCR\r
331// Data UINT8: the value of the MCR\r
332//\r
333typedef union {\r
334 SERIAL_PORT_MCR_BITS Bits;\r
335 UINT8 Data;\r
336} SERIAL_PORT_MCR;\r
337\r
338//\r
339// Name: SERIAL_PORT_LSR_BITS\r
340// Purpose: Define each bit in Line Status Register\r
341// Context:\r
342// Fields:\r
343// DR Bit0: Receiver Data Ready Status\r
344// OE Bit1: Overrun Error Status\r
345// PE Bit2: Parity Error Status\r
346// FE Bit3: Framing Error Status\r
347// BI Bit4: Break Interrupt Status\r
348// THRE Bit5: Transmistter Holding Register Status\r
349// TEMT Bit6: Transmitter Empty Status\r
350// FIFOE Bit7: FIFO Error Status\r
351//\r
352typedef struct {\r
353 UINT8 DR : 1;\r
354 UINT8 OE : 1;\r
355 UINT8 PE : 1;\r
356 UINT8 FE : 1;\r
357 UINT8 BI : 1;\r
358 UINT8 THRE : 1;\r
359 UINT8 TEMT : 1;\r
360 UINT8 FIFOE : 1;\r
361} SERIAL_PORT_LSR_BITS;\r
362\r
363//\r
364// Name: SERIAL_PORT_LSR\r
365// Purpose:\r
366// Context:\r
367// Fields:\r
368// Bits SERIAL_PORT_LSR_BITS: Bits of the LSR\r
369// Data UINT8: the value of the LSR\r
370//\r
371typedef union {\r
372 SERIAL_PORT_LSR_BITS Bits;\r
373 UINT8 Data;\r
374} SERIAL_PORT_LSR;\r
375\r
376//\r
377// Name: SERIAL_PORT_MSR_BITS\r
378// Purpose: Define each bit in Modem Status Register\r
379// Context:\r
380// Fields:\r
381// DeltaCTS Bit0: Delta Clear To Send Status\r
382// DeltaDSR Bit1: Delta Data Set Ready Status\r
383// TrailingEdgeRI Bit2: Trailing Edge of Ring Indicator Status\r
384// DeltaDCD Bit3: Delta Data Carrier Detect Status\r
385// CTS Bit4: Clear To Send Status\r
386// DSR Bit5: Data Set Ready Status\r
387// RI Bit6: Ring Indicator Status\r
388// DCD Bit7: Data Carrier Detect Status\r
389//\r
390typedef struct {\r
391 UINT8 DeltaCTS : 1;\r
392 UINT8 DeltaDSR : 1;\r
393 UINT8 TrailingEdgeRI : 1;\r
394 UINT8 DeltaDCD : 1;\r
395 UINT8 CTS : 1;\r
396 UINT8 DSR : 1;\r
397 UINT8 RI : 1;\r
398 UINT8 DCD : 1;\r
399} SERIAL_PORT_MSR_BITS;\r
400\r
401//\r
402// Name: SERIAL_PORT_MSR\r
403// Purpose:\r
404// Context:\r
405// Fields:\r
406// Bits SERIAL_PORT_MSR_BITS: Bits of the MSR\r
407// Data UINT8: the value of the MSR\r
408//\r
409typedef union {\r
410 SERIAL_PORT_MSR_BITS Bits;\r
411 UINT8 Data;\r
412} SERIAL_PORT_MSR;\r
413\r
414#pragma pack()\r
415//\r
416// Define serial register I/O macros\r
417//\r
418#define READ_RBR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_RBR)\r
419#define READ_DLL(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_DLL)\r
420#define READ_DLM(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_DLM)\r
421#define READ_IER(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_IER)\r
422#define READ_IIR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_IIR)\r
423#define READ_LCR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_LCR)\r
424#define READ_MCR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_MCR)\r
425#define READ_LSR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_LSR)\r
426#define READ_MSR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_MSR)\r
427#define READ_SCR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_SCR)\r
428\r
429#define WRITE_THR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_THR, D)\r
430#define WRITE_DLL(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_DLL, D)\r
431#define WRITE_DLM(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_DLM, D)\r
432#define WRITE_IER(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_IER, D)\r
433#define WRITE_FCR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_FCR, D)\r
434#define WRITE_LCR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_LCR, D)\r
435#define WRITE_MCR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_MCR, D)\r
436#define WRITE_LSR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_LSR, D)\r
437#define WRITE_MSR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_MSR, D)\r
438#define WRITE_SCR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_SCR, D)\r
439\r
440//\r
441// Prototypes\r
442// Driver model protocol interface\r
443//\r
444\r
445EFI_STATUS\r
446EFIAPI\r
447SerialControllerDriverSupported (\r
448 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
449 IN EFI_HANDLE Controller,\r
450 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
451 );\r
452\r
453EFI_STATUS\r
454EFIAPI\r
455SerialControllerDriverStart (\r
456 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
457 IN EFI_HANDLE Controller,\r
458 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
459 );\r
460\r
461EFI_STATUS\r
462EFIAPI\r
463SerialControllerDriverStop (\r
464 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
465 IN EFI_HANDLE Controller,\r
466 IN UINTN NumberOfChildren,\r
467 IN EFI_HANDLE *ChildHandleBuffer\r
468 );\r
469\r
470//\r
471// Serial I/O Protocol Interface\r
472//\r
473EFI_STATUS\r
474EFIAPI\r
475IsaSerialReset (\r
476 IN EFI_SERIAL_IO_PROTOCOL *This\r
477 );\r
478\r
479EFI_STATUS\r
480EFIAPI\r
481IsaSerialSetAttributes (\r
482 IN EFI_SERIAL_IO_PROTOCOL *This,\r
483 IN UINT64 BaudRate,\r
484 IN UINT32 ReceiveFifoDepth,\r
485 IN UINT32 Timeout,\r
486 IN EFI_PARITY_TYPE Parity,\r
487 IN UINT8 DataBits,\r
488 IN EFI_STOP_BITS_TYPE StopBits\r
489 );\r
490\r
491EFI_STATUS\r
492EFIAPI\r
493IsaSerialSetControl (\r
494 IN EFI_SERIAL_IO_PROTOCOL *This,\r
495 IN UINT32 Control\r
496 );\r
497\r
498EFI_STATUS\r
499EFIAPI\r
500IsaSerialGetControl (\r
501 IN EFI_SERIAL_IO_PROTOCOL *This,\r
502 OUT UINT32 *Control\r
503 );\r
504\r
505EFI_STATUS\r
506EFIAPI\r
507IsaSerialWrite (\r
508 IN EFI_SERIAL_IO_PROTOCOL *This,\r
509 IN OUT UINTN *BufferSize,\r
510 IN VOID *Buffer\r
511 );\r
512\r
513EFI_STATUS\r
514EFIAPI\r
515IsaSerialRead (\r
516 IN EFI_SERIAL_IO_PROTOCOL *This,\r
517 IN OUT UINTN *BufferSize,\r
518 OUT VOID *Buffer\r
519 );\r
520\r
521//\r
522// Internal Functions\r
523//\r
524BOOLEAN\r
525IsaSerialPortPresent (\r
526 IN SERIAL_DEV *SerialDevice\r
527 );\r
528\r
529BOOLEAN\r
530IsaSerialFifoFull (\r
531 IN SERIAL_DEV_FIFO *Fifo\r
532 );\r
533\r
534BOOLEAN\r
535IsaSerialFifoEmpty (\r
536 IN SERIAL_DEV_FIFO *Fifo\r
537 );\r
538\r
539EFI_STATUS\r
540IsaSerialFifoAdd (\r
541 IN SERIAL_DEV_FIFO *Fifo,\r
542 IN UINT8 Data\r
543 );\r
544\r
545EFI_STATUS\r
546IsaSerialFifoRemove (\r
547 IN SERIAL_DEV_FIFO *Fifo,\r
548 OUT UINT8 *Data\r
549 );\r
550\r
551EFI_STATUS\r
552IsaSerialReceiveTransmit (\r
553 IN SERIAL_DEV *SerialDevice\r
554 );\r
555\r
556UINT8\r
557IsaSerialReadPort (\r
558 IN EFI_ISA_IO_PROTOCOL *IsaIo,\r
559 IN UINT16 BaseAddress,\r
560 IN UINT32 Offset\r
561 );\r
562\r
563VOID\r
564IsaSerialWritePort (\r
565 IN EFI_ISA_IO_PROTOCOL *IsaIo,\r
566 IN UINT16 BaseAddress,\r
567 IN UINT32 Offset,\r
568 IN UINT8 Data\r
569 );\r
570\r
571#endif\r