]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Csm/BiosThunk/BlockIoDxe/Edd.h
IntelFrameworkModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / BiosThunk / BlockIoDxe / Edd.h
CommitLineData
bcecde14 1/** @file\r
2 Include file to suport EDD 3.0.\r
3 This file is coded to T13 D1386 Revision 3\r
4 Availible on http://www.t13.org/#Project drafts\r
5 Currently at ftp://fission.dt.wdc.com/pub/standards/x3t13/project/d1386r3.pdf\r
6\r
7Copyright (c) 1999 - 2010, Intel Corporation. All rights reserved.<BR>\r
8\r
c0a00b14 9SPDX-License-Identifier: BSD-2-Clause-Patent\r
bcecde14 10\r
11**/\r
12\r
13#ifndef _EDD_H_\r
14#define _EDD_H_\r
15\r
16//\r
17// packing with no compiler padding, so that the fields\r
18// of the following architected structures can be\r
19// properly accessed from C code.\r
20//\r
21#pragma pack(1)\r
22\r
23typedef struct {\r
24 UINT8 Bus;\r
25 UINT8 Device;\r
26 UINT8 Function;\r
27 UINT8 Controller;\r
28 UINT32 Reserved;\r
29} EDD_PCI;\r
30\r
31typedef struct {\r
32 UINT16 Base;\r
33 UINT16 Reserved;\r
34 UINT32 Reserved2;\r
35} EDD_LEGACY;\r
36\r
37typedef union {\r
38 EDD_PCI Pci;\r
39 EDD_LEGACY Legacy;\r
40} EDD_INTERFACE_PATH;\r
41\r
42typedef struct {\r
43 UINT8 Master;\r
44 UINT8 Reserved[15];\r
45} EDD_ATA;\r
46\r
47typedef struct {\r
48 UINT8 Master;\r
49 UINT8 Lun;\r
50 UINT8 Reserved[14];\r
51} EDD_ATAPI;\r
52\r
53typedef struct {\r
54 UINT16 Pun;\r
55 UINT64 Lun;\r
56 UINT8 Reserved[6];\r
57} EDD_SCSI;\r
58\r
59typedef struct {\r
60 UINT64 SerialNumber;\r
61 UINT64 Reserved;\r
62} EDD_USB;\r
63\r
64typedef struct {\r
65 UINT64 Guid;\r
66 UINT64 Reserved;\r
67} EDD_1394;\r
68\r
69typedef struct {\r
70 UINT64 Wwn;\r
71 UINT64 Lun;\r
72} EDD_FIBRE;\r
73\r
74typedef union {\r
75 EDD_ATA Ata;\r
76 EDD_ATAPI Atapi;\r
77 EDD_SCSI Scsi;\r
78 EDD_USB Usb;\r
79 EDD_1394 FireWire;\r
80 EDD_FIBRE FibreChannel;\r
81} EDD_DEVICE_PATH;\r
82\r
83typedef struct {\r
84 UINT16 StructureSize;\r
85 UINT16 Flags;\r
86 UINT32 MaxCylinders;\r
87 UINT32 MaxHeads;\r
88 UINT32 SectorsPerTrack;\r
89 UINT64 PhysicalSectors;\r
90 UINT16 BytesPerSector;\r
91 UINT32 Fdpt;\r
92 UINT16 Key;\r
93 UINT8 DevicePathLength;\r
94 UINT8 Reserved1;\r
95 UINT16 Reserved2;\r
96 CHAR8 HostBusType[4];\r
97 CHAR8 InterfaceType[8];\r
98 EDD_INTERFACE_PATH InterfacePath;\r
99 EDD_DEVICE_PATH DevicePath;\r
100 UINT8 Reserved3;\r
101 UINT8 Checksum;\r
102} EDD_DRIVE_PARAMETERS;\r
103\r
104//\r
105// EDD_DRIVE_PARAMETERS.Flags defines\r
106//\r
107#define EDD_GEOMETRY_VALID 0x02\r
108#define EDD_DEVICE_REMOVABLE 0x04\r
109#define EDD_WRITE_VERIFY_SUPPORTED 0x08\r
110#define EDD_DEVICE_CHANGE 0x10\r
111#define EDD_DEVICE_LOCKABLE 0x20\r
112\r
113//\r
114// BUGBUG: This bit does not follow the spec. It tends to be always set\r
115// to work properly with Win98.\r
116//\r
117#define EDD_DEVICE_GEOMETRY_MAX 0x40\r
118\r
119typedef struct {\r
120 UINT8 PacketSizeInBytes; // 0x18\r
121 UINT8 Zero;\r
122 UINT8 NumberOfBlocks; // Max 0x7f\r
123 UINT8 Zero2;\r
124 UINT32 SegOffset;\r
125 UINT64 Lba;\r
126 UINT64 TransferBuffer;\r
127 UINT32 ExtendedBlockCount; // Max 0xffffffff\r
128 UINT32 Zero3;\r
129} EDD_DEVICE_ADDRESS_PACKET;\r
130\r
131#define EDD_VERSION_30 0x30\r
132\r
133//\r
134// Int 13 BIOS Errors\r
135//\r
136#define BIOS_PASS 0x00\r
137#define BIOS_WRITE_PROTECTED 0x03\r
138#define BIOS_SECTOR_NOT_FOUND 0x04\r
139#define BIOS_RESET_FAILED 0x05\r
140#define BIOS_DISK_CHANGED 0x06\r
141#define BIOS_DRIVE_DOES_NOT_EXIST 0x07\r
142#define BIOS_DMA_ERROR 0x08\r
143#define BIOS_DATA_BOUNDRY_ERROR 0x09\r
144#define BIOS_BAD_SECTOR 0x0a\r
145#define BIOS_BAD_TRACK 0x0b\r
146#define BIOS_MEADIA_TYPE_NOT_FOUND 0x0c\r
147#define BIOS_INVALED_FORMAT 0x0d\r
148#define BIOS_ECC_ERROR 0x10\r
149#define BIOS_ECC_CORRECTED_ERROR 0x11\r
150#define BIOS_HARD_DRIVE_FAILURE 0x20\r
151#define BIOS_SEEK_FAILED 0x40\r
152#define BIOS_DRIVE_TIMEOUT 0x80\r
153#define BIOS_DRIVE_NOT_READY 0xaa\r
154#define BIOS_UNDEFINED_ERROR 0xbb\r
155#define BIOS_WRITE_FAULT 0xcc\r
156#define BIOS_SENSE_FAILED 0xff\r
157\r
158#define MAX_EDD11_XFER 0xfe00\r
159\r
160#pragma pack()\r
161//\r
162// Internal Data Structures\r
163//\r
164typedef struct {\r
165 CHAR8 Letter;\r
166 UINT8 Number;\r
167 UINT8 EddVersion;\r
168 BOOLEAN ExtendedInt13;\r
169 BOOLEAN DriveLockingAndEjecting;\r
170 BOOLEAN Edd;\r
171 BOOLEAN Extensions64Bit;\r
172 BOOLEAN ParametersValid;\r
173 UINT8 ErrorCode;\r
174 VOID *FdptPointer;\r
175 BOOLEAN Floppy;\r
176 BOOLEAN AtapiFloppy;\r
177 UINT8 MaxHead;\r
178 UINT8 MaxSector;\r
179 UINT16 MaxCylinder;\r
180 UINT16 Pad;\r
181 EDD_DRIVE_PARAMETERS Parameters;\r
182} BIOS_LEGACY_DRIVE;\r
183\r
184#define BIOS_CONSOLE_BLOCK_IO_DEV_SIGNATURE SIGNATURE_32 ('b', 'b', 'i', 'o')\r
185typedef struct {\r
186 UINTN Signature;\r
187\r
188 EFI_HANDLE Handle;\r
189 EFI_HANDLE ControllerHandle;\r
190 EFI_BLOCK_IO_PROTOCOL BlockIo;\r
191 EFI_BLOCK_IO_MEDIA BlockMedia;\r
192 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
193 EFI_PCI_IO_PROTOCOL *PciIo;\r
194 EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;\r
195\r
196 BIOS_LEGACY_DRIVE Bios;\r
197\r
198} BIOS_BLOCK_IO_DEV;\r
199\r
200#define BIOS_BLOCK_IO_FROM_THIS(a) CR (a, BIOS_BLOCK_IO_DEV, BlockIo, BIOS_CONSOLE_BLOCK_IO_DEV_SIGNATURE)\r
201\r
202#endif\r