1 | /** @file
|
---|
2 | EFI_TAPE_IO_PROTOCOL as defined in the UEFI 2.0.
|
---|
3 | Provide services to control and access a tape device.
|
---|
4 |
|
---|
5 | Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
---|
6 | This program and the accompanying materials are licensed and made available under
|
---|
7 | the terms and conditions of the BSD License that accompanies this distribution.
|
---|
8 | The full text of the license may be found at
|
---|
9 | http://opensource.org/licenses/bsd-license.php.
|
---|
10 |
|
---|
11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
---|
12 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
---|
13 |
|
---|
14 | **/
|
---|
15 |
|
---|
16 | #ifndef __EFI_TAPE_IO_PROTOCOL_H__
|
---|
17 | #define __EFI_TAPE_IO_PROTOCOL_H__
|
---|
18 |
|
---|
19 | #define EFI_TAPE_IO_PROTOCOL_GUID \
|
---|
20 | { \
|
---|
21 | 0x1e93e633, 0xd65a, 0x459e, {0xab, 0x84, 0x93, 0xd9, 0xec, 0x26, 0x6d, 0x18 } \
|
---|
22 | }
|
---|
23 |
|
---|
24 | typedef struct _EFI_TAPE_IO_PROTOCOL EFI_TAPE_IO_PROTOCOL;
|
---|
25 |
|
---|
26 | typedef struct _EFI_TAPE_HEADER {
|
---|
27 | UINT64 Signature;
|
---|
28 | UINT32 Revision;
|
---|
29 | UINT32 BootDescSize;
|
---|
30 | UINT32 BootDescCRC;
|
---|
31 | EFI_GUID TapeGUID;
|
---|
32 | EFI_GUID TapeType;
|
---|
33 | EFI_GUID TapeUnique;
|
---|
34 | UINT32 BLLocation;
|
---|
35 | UINT32 BLBlocksize;
|
---|
36 | UINT32 BLFilesize;
|
---|
37 | CHAR8 OSVersion[40];
|
---|
38 | CHAR8 AppVersion[40];
|
---|
39 | CHAR8 CreationDate[10];
|
---|
40 | CHAR8 CreationTime[10];
|
---|
41 | CHAR8 SystemName[256]; // UTF-8
|
---|
42 | CHAR8 TapeTitle[120]; // UTF-8
|
---|
43 | CHAR8 pad[468]; // pad to 1024
|
---|
44 | } EFI_TAPE_HEADER;
|
---|
45 |
|
---|
46 | /**
|
---|
47 | Reads from the tape.
|
---|
48 |
|
---|
49 | @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.
|
---|
50 | @param BufferSize The size of the buffer in bytes pointed to by Buffer.
|
---|
51 | @param Buffer The pointer to the buffer for data to be read into.
|
---|
52 |
|
---|
53 | @retval EFI_SUCCESS Data was successfully transferred from the media.
|
---|
54 | @retval EFI_END_OF_FILE A filemark was encountered which limited the data
|
---|
55 | transferred by the read operation or the head is positioned
|
---|
56 | just after a filemark.
|
---|
57 | @retval EFI_NO_MEDIA No media is loaded in the device.
|
---|
58 | @retval EFI_NOT_READY The transfer failed since the device was not ready (e.g. not
|
---|
59 | online). The transfer may be retried at a later time.
|
---|
60 | @retval EFI_UNSUPPORTED The device does not support this type of transfer.
|
---|
61 | @retval EFI_TIMEOUT The transfer failed to complete within the timeout specified.
|
---|
62 | @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.
|
---|
63 | The transfer was aborted since the current position of the
|
---|
64 | media may be incorrect.
|
---|
65 | @retval EFI_INVALID_PARAMETER A NULL Buffer was specified with a non-zero
|
---|
66 | BufferSize, or the device is operating in fixed block
|
---|
67 | size mode and the BufferSize was not a multiple of
|
---|
68 | device's fixed block size
|
---|
69 | @retval EFI_DEVICE_ERROR A device error occurred while attempting to transfer data
|
---|
70 | from the media.
|
---|
71 |
|
---|
72 | **/
|
---|
73 | typedef
|
---|
74 | EFI_STATUS
|
---|
75 | (EFIAPI *EFI_TAPE_READ)(
|
---|
76 | IN EFI_TAPE_IO_PROTOCOL *This,
|
---|
77 | IN OUT UINTN *BufferSize,
|
---|
78 | OUT VOID *Buffer
|
---|
79 | );
|
---|
80 |
|
---|
81 | /**
|
---|
82 | Writes to the tape.
|
---|
83 |
|
---|
84 | @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.
|
---|
85 | @param BufferSize Size of the buffer in bytes pointed to by Buffer.
|
---|
86 | @param Buffer The pointer to the buffer for data to be written from.
|
---|
87 |
|
---|
88 | @retval EFI_SUCCESS Data was successfully transferred to the media.
|
---|
89 | @retval EFI_END_OF_MEDIA The logical end of media has been reached. Data may have
|
---|
90 | been successfully transferred to the media.
|
---|
91 | @retval EFI_NO_MEDIA No media is loaded in the device.
|
---|
92 | @retval EFI_NOT_READY The transfer failed since the device was not ready (e.g. not
|
---|
93 | online). The transfer may be retried at a later time.
|
---|
94 | @retval EFI_UNSUPPORTED The device does not support this type of transfer.
|
---|
95 | @retval EFI_TIMEOUT The transfer failed to complete within the timeout specified.
|
---|
96 | @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.
|
---|
97 | The transfer was aborted since the current position of the
|
---|
98 | media may be incorrect.
|
---|
99 | @retval EFI_WRITE_PROTECTED The media in the device is write-protected. The transfer
|
---|
100 | was aborted since a write cannot be completed.
|
---|
101 | @retval EFI_INVALID_PARAMETER A NULL Buffer was specified with a non-zero
|
---|
102 | BufferSize, or the device is operating in fixed block
|
---|
103 | size mode and the BufferSize was not a multiple of
|
---|
104 | device's fixed block size
|
---|
105 | @retval EFI_DEVICE_ERROR A device error occurred while attempting to transfer data
|
---|
106 | from the media.
|
---|
107 |
|
---|
108 | **/
|
---|
109 | typedef
|
---|
110 | EFI_STATUS
|
---|
111 | (EFIAPI *EFI_TAPE_WRITE)(
|
---|
112 | IN EFI_TAPE_IO_PROTOCOL *This,
|
---|
113 | IN UINTN *BufferSize,
|
---|
114 | IN VOID *Buffer
|
---|
115 | );
|
---|
116 |
|
---|
117 |
|
---|
118 | /**
|
---|
119 | Rewinds the tape.
|
---|
120 |
|
---|
121 | @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.
|
---|
122 |
|
---|
123 | @retval EFI_SUCCESS The media was successfully repositioned.
|
---|
124 | @retval EFI_NO_MEDIA No media is loaded in the device.
|
---|
125 | @retval EFI_NOT_READY Repositioning the media failed since the device was not
|
---|
126 | ready (e.g. not online). The transfer may be retried at a later time.
|
---|
127 | @retval EFI_UNSUPPORTED The device does not support this type of media repositioning.
|
---|
128 | @retval EFI_TIMEOUT Repositioning of the media did not complete within the timeout specified.
|
---|
129 | @retval EFI_DEVICE_ERROR A device error occurred while attempting to reposition the media.
|
---|
130 |
|
---|
131 | **/
|
---|
132 | typedef
|
---|
133 | EFI_STATUS
|
---|
134 | (EFIAPI *EFI_TAPE_REWIND)(
|
---|
135 | IN EFI_TAPE_IO_PROTOCOL *This
|
---|
136 | );
|
---|
137 |
|
---|
138 |
|
---|
139 | /**
|
---|
140 | Positions the tape.
|
---|
141 |
|
---|
142 | @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.
|
---|
143 | @param Direction Direction and number of data blocks or filemarks to space over on media.
|
---|
144 | @param Type Type of mark to space over on media.
|
---|
145 | The following Type marks are mandatory:
|
---|
146 | BLOCK type : 0
|
---|
147 | FILEMARK type : 1
|
---|
148 |
|
---|
149 | @retval EFI_SUCCESS The media was successfully repositioned.
|
---|
150 | @retval EFI_END_OF_MEDIA Beginning or end of media was reached before the
|
---|
151 | indicated number of data blocks or filemarks were found.
|
---|
152 | @retval EFI_NO_MEDIA No media is loaded in the device.
|
---|
153 | @retval EFI_NOT_READY The reposition failed since the device was not ready (e.g. not
|
---|
154 | online). The reposition may be retried at a later time.
|
---|
155 | @retval EFI_UNSUPPORTED The device does not support this type of repositioning.
|
---|
156 | @retval EFI_TIMEOUT The repositioning failed to complete within the timeout specified.
|
---|
157 | @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.
|
---|
158 | Repositioning the media was aborted since the current
|
---|
159 | position of the media may be incorrect.
|
---|
160 | @retval EFI_DEVICE_ERROR A device error occurred while attempting to reposition the media.
|
---|
161 |
|
---|
162 | **/
|
---|
163 | typedef
|
---|
164 | EFI_STATUS
|
---|
165 | (EFIAPI *EFI_TAPE_SPACE)(
|
---|
166 | IN EFI_TAPE_IO_PROTOCOL *This,
|
---|
167 | IN INTN Direction,
|
---|
168 | IN UINTN Type
|
---|
169 | );
|
---|
170 |
|
---|
171 |
|
---|
172 | /**
|
---|
173 | Writes filemarks to the media.
|
---|
174 |
|
---|
175 | @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.
|
---|
176 | @param Count Number of filemarks to write to the media.
|
---|
177 |
|
---|
178 | @retval EFI_SUCCESS Data was successfully transferred from the media.
|
---|
179 | @retval EFI_NO_MEDIA No media is loaded in the device.
|
---|
180 | @retval EFI_NOT_READY The transfer failed since the device was not ready (e.g. not
|
---|
181 | online). The transfer may be retried at a later time.
|
---|
182 | @retval EFI_UNSUPPORTED The device does not support this type of repositioning.
|
---|
183 | @retval EFI_TIMEOUT The transfer failed to complete within the timeout specified.
|
---|
184 | @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.
|
---|
185 | The transfer was aborted since the current position of the
|
---|
186 | media may be incorrect.
|
---|
187 | @retval EFI_DEVICE_ERROR A device error occurred while attempting to transfer data from the media.
|
---|
188 |
|
---|
189 | **/
|
---|
190 | typedef
|
---|
191 | EFI_STATUS
|
---|
192 | (EFIAPI *EFI_TAPE_WRITEFM)(
|
---|
193 | IN EFI_TAPE_IO_PROTOCOL *This,
|
---|
194 | IN UINTN Count
|
---|
195 | );
|
---|
196 |
|
---|
197 |
|
---|
198 | /**
|
---|
199 | Resets the tape device.
|
---|
200 |
|
---|
201 | @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.
|
---|
202 | @param ExtendedVerification Indicates whether the parent bus should also be reset.
|
---|
203 |
|
---|
204 | @retval EFI_SUCCESS The bus and/or device were successfully reset.
|
---|
205 | @retval EFI_NO_MEDIA No media is loaded in the device.
|
---|
206 | @retval EFI_NOT_READY The reset failed since the device and/or bus was not ready.
|
---|
207 | The reset may be retried at a later time.
|
---|
208 | @retval EFI_UNSUPPORTED The device does not support this type of reset.
|
---|
209 | @retval EFI_TIMEOUT The reset did not complete within the timeout allowed.
|
---|
210 | @retval EFI_DEVICE_ERROR A device error occurred while attempting to reset the bus and/or device.
|
---|
211 |
|
---|
212 | **/
|
---|
213 | typedef
|
---|
214 | EFI_STATUS
|
---|
215 | (EFIAPI *EFI_TAPE_RESET)(
|
---|
216 | IN EFI_TAPE_IO_PROTOCOL *This,
|
---|
217 | IN BOOLEAN ExtendedVerification
|
---|
218 | );
|
---|
219 |
|
---|
220 | ///
|
---|
221 | /// The EFI_TAPE_IO_PROTOCOL provides basic sequential operations for tape devices.
|
---|
222 | /// These include read, write, rewind, space, write filemarks and reset functions.
|
---|
223 | /// Per this specification, a boot application uses the services of this protocol
|
---|
224 | /// to load the bootloader image from tape.
|
---|
225 | ///
|
---|
226 | struct _EFI_TAPE_IO_PROTOCOL {
|
---|
227 | EFI_TAPE_READ TapeRead;
|
---|
228 | EFI_TAPE_WRITE TapeWrite;
|
---|
229 | EFI_TAPE_REWIND TapeRewind;
|
---|
230 | EFI_TAPE_SPACE TapeSpace;
|
---|
231 | EFI_TAPE_WRITEFM TapeWriteFM;
|
---|
232 | EFI_TAPE_RESET TapeReset;
|
---|
233 | };
|
---|
234 |
|
---|
235 | extern EFI_GUID gEfiTapeIoProtocolGuid;
|
---|
236 |
|
---|
237 | #endif
|
---|