• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*++
2 
3 Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution.  The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8 
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 Module Name:
13 
14     IsaIo.h
15 
16 Abstract:
17 
18     EFI_ISA_IO_PROTOCOL
19 
20 Revision History
21 
22 --*/
23 
24 #ifndef _EFI_ISA_IO_H
25 #define _EFI_ISA_IO_H
26 
27 //
28 // Common definitions for Light ISA I/O Protocol and ISA I/O Protocol
29 //
30 
31 #include EFI_PROTOCOL_DEFINITION(IsaAcpi)
32 
33 typedef enum {
34   EfiIsaIoWidthUint8,
35   EfiIsaIoWidthUint16,
36   EfiIsaIoWidthUint32,
37   EfiIsaIoWidthReserved,
38   EfiIsaIoWidthFifoUint8,
39   EfiIsaIoWidthFifoUint16,
40   EfiIsaIoWidthFifoUint32,
41   EfiIsaIoWidthFifoReserved,
42   EfiIsaIoWidthFillUint8,
43   EfiIsaIoWidthFillUint16,
44   EfiIsaIoWidthFillUint32,
45   EfiIsaIoWidthFillReserved,
46   EfiIsaIoWidthMaximum
47 } EFI_ISA_IO_PROTOCOL_WIDTH;
48 
49 //
50 // Attributes for common buffer allocations
51 //
52 #define EFI_ISA_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE  0x080    // Map a memory range so write are combined
53 #define EFI_ISA_IO_ATTRIBUTE_MEMORY_CACHED         0x800    // Map a memory range so all r/w accesses are cached
54 #define EFI_ISA_IO_ATTRIBUTE_MEMORY_DISABLE        0x1000   // Disable a memory range
55 
56 //
57 // Channel attribute for DMA operations
58 //
59 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_COMPATIBLE  0x001
60 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_A           0x002
61 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_B           0x004
62 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_C           0x008
63 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_WIDTH_8           0x010
64 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_WIDTH_16          0x020
65 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SINGLE_MODE       0x040
66 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_DEMAND_MODE       0x080
67 #define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_AUTO_INITIALIZE   0x100
68 
69 typedef enum {
70   EfiIsaIoOperationBusMasterRead,
71   EfiIsaIoOperationBusMasterWrite,
72   EfiIsaIoOperationBusMasterCommonBuffer,
73   EfiIsaIoOperationSlaveRead,
74   EfiIsaIoOperationSlaveWrite,
75   EfiIsaIoOperationMaximum
76 } EFI_ISA_IO_PROTOCOL_OPERATION;
77 
78 //
79 // Specific for ISA I/O Protocol
80 //
81 
82 #define EFI_INTERFACE_DEFINITION_FOR_ISA_IO EFI_ISA_IO_PROTOCOL
83 #define EFI_ISA_IO_PROTOCOL_VERSION         &gEfiIsaIoProtocolGuid
84 #define EFI_ISA_IO_OPERATION_TOKEN          EfiIsaIoOperationBusMasterWrite
85 
86 
87 //
88 // Global ID for the ISA I/O Protocol
89 //
90 
91 #define EFI_ISA_IO_PROTOCOL_GUID \
92   { 0x7ee2bd44, 0x3da0, 0x11d4, {0x9a, 0x38, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
93 
94 EFI_FORWARD_DECLARATION (EFI_ISA_IO_PROTOCOL);
95 
96 typedef
97 EFI_STATUS
98 (EFIAPI *EFI_ISA_IO_PROTOCOL_IO_MEM) (
99   IN EFI_ISA_IO_PROTOCOL  *This,
100   IN     EFI_ISA_IO_PROTOCOL_WIDTH    Width,
101   IN     UINT32                       Offset,
102   IN     UINTN                        Count,
103   IN OUT VOID                         *Buffer
104   );
105 
106 typedef struct {
107   EFI_ISA_IO_PROTOCOL_IO_MEM  Read;
108   EFI_ISA_IO_PROTOCOL_IO_MEM  Write;
109 } EFI_ISA_IO_PROTOCOL_ACCESS;
110 
111 typedef
112 EFI_STATUS
113 (EFIAPI *EFI_ISA_IO_PROTOCOL_COPY_MEM) (
114   IN EFI_ISA_IO_PROTOCOL  *This,
115   IN     EFI_ISA_IO_PROTOCOL_WIDTH    Width,
116   IN     UINT32                       DestOffset,
117   IN     UINT32                       SrcOffset,
118   IN     UINTN                        Count
119   );
120 
121 typedef
122 EFI_STATUS
123 (EFIAPI *EFI_ISA_IO_PROTOCOL_MAP) (
124   IN EFI_ISA_IO_PROTOCOL    *This,
125   IN     EFI_ISA_IO_PROTOCOL_OPERATION  Operation,
126   IN     UINT8                          ChannelNumber      OPTIONAL,
127   IN     UINT32                         ChannelAttributes,
128   IN     VOID                           *HostAddress,
129   IN OUT UINTN                          *NumberOfBytes,
130   OUT    EFI_PHYSICAL_ADDRESS           *DeviceAddress,
131   OUT    VOID                           **Mapping
132   );
133 
134 typedef
135 EFI_STATUS
136 (EFIAPI *EFI_ISA_IO_PROTOCOL_UNMAP) (
137   IN EFI_ISA_IO_PROTOCOL  *This,
138   IN  VOID                         *Mapping
139   );
140 
141 typedef
142 EFI_STATUS
143 (EFIAPI *EFI_ISA_IO_PROTOCOL_ALLOCATE_BUFFER) (
144   IN EFI_ISA_IO_PROTOCOL  *This,
145   IN  EFI_ALLOCATE_TYPE            Type,
146   IN  EFI_MEMORY_TYPE              MemoryType,
147   IN  UINTN                        Pages,
148   OUT VOID                         **HostAddress,
149   IN  UINT64                       Attributes
150   );
151 
152 typedef
153 EFI_STATUS
154 (EFIAPI *EFI_ISA_IO_PROTOCOL_FREE_BUFFER) (
155   IN EFI_ISA_IO_PROTOCOL  *This,
156   IN  UINTN                        Pages,
157   IN  VOID                         *HostAddress
158   );
159 
160 typedef
161 EFI_STATUS
162 (EFIAPI *EFI_ISA_IO_PROTOCOL_FLUSH) (
163   IN EFI_ISA_IO_PROTOCOL  *This
164   );
165 
166 //
167 // Interface structure for the ISA I/O Protocol
168 //
169 struct _EFI_ISA_IO_PROTOCOL {
170   EFI_ISA_IO_PROTOCOL_ACCESS           Mem;
171   EFI_ISA_IO_PROTOCOL_ACCESS           Io;
172   EFI_ISA_IO_PROTOCOL_COPY_MEM         CopyMem;
173   EFI_ISA_IO_PROTOCOL_MAP              Map;
174   EFI_ISA_IO_PROTOCOL_UNMAP            Unmap;
175   EFI_ISA_IO_PROTOCOL_ALLOCATE_BUFFER  AllocateBuffer;
176   EFI_ISA_IO_PROTOCOL_FREE_BUFFER      FreeBuffer;
177   EFI_ISA_IO_PROTOCOL_FLUSH            Flush;
178   EFI_ISA_ACPI_RESOURCE_LIST           *ResourceList;
179   UINT32                               RomSize;
180   VOID                                 *RomImage;
181 };
182 
183 extern EFI_GUID gEfiIsaIoProtocolGuid;
184 
185 
186 #endif
187