mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-27 18:45:25 +00:00 
			
		
		
		
	 bcecde140a
			
		
	
	
		bcecde140a
		
	
	
	
	
		
			
			Added these drivers: * LegacyBiosDxe * BlockIoDxe * KeyboardDxe * Snp16Dxe * VideoDxe Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: geekboy15a git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11905 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			210 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Include file to suport EDD 3.0.
 | |
|   This file is coded to T13 D1386 Revision 3
 | |
|   Availible on http://www.t13.org/#Project drafts
 | |
|   Currently at ftp://fission.dt.wdc.com/pub/standards/x3t13/project/d1386r3.pdf
 | |
| 
 | |
| Copyright (c) 1999 - 2010, Intel Corporation. All rights reserved.<BR>
 | |
| 
 | |
| This program and the accompanying materials
 | |
| are licensed and made available under the terms and conditions
 | |
| of the BSD License which accompanies this distribution.  The
 | |
| full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _EDD_H_
 | |
| #define _EDD_H_
 | |
| 
 | |
| //
 | |
| // packing with no compiler padding, so that the fields
 | |
| // of the following architected structures can be
 | |
| // properly accessed from C code.
 | |
| //
 | |
| #pragma pack(1)
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8   Bus;
 | |
|   UINT8   Device;
 | |
|   UINT8   Function;
 | |
|   UINT8   Controller;
 | |
|   UINT32  Reserved;
 | |
| } EDD_PCI;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT16  Base;
 | |
|   UINT16  Reserved;
 | |
|   UINT32  Reserved2;
 | |
| } EDD_LEGACY;
 | |
| 
 | |
| typedef union {
 | |
|   EDD_PCI     Pci;
 | |
|   EDD_LEGACY  Legacy;
 | |
| } EDD_INTERFACE_PATH;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8 Master;
 | |
|   UINT8 Reserved[15];
 | |
| } EDD_ATA;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8 Master;
 | |
|   UINT8 Lun;
 | |
|   UINT8 Reserved[14];
 | |
| } EDD_ATAPI;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT16  Pun;
 | |
|   UINT64  Lun;
 | |
|   UINT8   Reserved[6];
 | |
| } EDD_SCSI;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT64  SerialNumber;
 | |
|   UINT64  Reserved;
 | |
| } EDD_USB;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT64  Guid;
 | |
|   UINT64  Reserved;
 | |
| } EDD_1394;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT64  Wwn;
 | |
|   UINT64  Lun;
 | |
| } EDD_FIBRE;
 | |
| 
 | |
| typedef union {
 | |
|   EDD_ATA   Ata;
 | |
|   EDD_ATAPI Atapi;
 | |
|   EDD_SCSI  Scsi;
 | |
|   EDD_USB   Usb;
 | |
|   EDD_1394  FireWire;
 | |
|   EDD_FIBRE FibreChannel;
 | |
| } EDD_DEVICE_PATH;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT16              StructureSize;
 | |
|   UINT16              Flags;
 | |
|   UINT32              MaxCylinders;
 | |
|   UINT32              MaxHeads;
 | |
|   UINT32              SectorsPerTrack;
 | |
|   UINT64              PhysicalSectors;
 | |
|   UINT16              BytesPerSector;
 | |
|   UINT32              Fdpt;
 | |
|   UINT16              Key;
 | |
|   UINT8               DevicePathLength;
 | |
|   UINT8               Reserved1;
 | |
|   UINT16              Reserved2;
 | |
|   CHAR8               HostBusType[4];
 | |
|   CHAR8               InterfaceType[8];
 | |
|   EDD_INTERFACE_PATH  InterfacePath;
 | |
|   EDD_DEVICE_PATH     DevicePath;
 | |
|   UINT8               Reserved3;
 | |
|   UINT8               Checksum;
 | |
| } EDD_DRIVE_PARAMETERS;
 | |
| 
 | |
| //
 | |
| // EDD_DRIVE_PARAMETERS.Flags defines
 | |
| //
 | |
| #define EDD_GEOMETRY_VALID          0x02
 | |
| #define EDD_DEVICE_REMOVABLE        0x04
 | |
| #define EDD_WRITE_VERIFY_SUPPORTED  0x08
 | |
| #define EDD_DEVICE_CHANGE           0x10
 | |
| #define EDD_DEVICE_LOCKABLE         0x20
 | |
| 
 | |
| //
 | |
| // BUGBUG: This bit does not follow the spec. It tends to be always set
 | |
| //  to work properly with Win98.
 | |
| //
 | |
| #define EDD_DEVICE_GEOMETRY_MAX 0x40
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8   PacketSizeInBytes;  // 0x18
 | |
|   UINT8   Zero;
 | |
|   UINT8   NumberOfBlocks;     // Max 0x7f
 | |
|   UINT8   Zero2;
 | |
|   UINT32  SegOffset;
 | |
|   UINT64  Lba;
 | |
|   UINT64  TransferBuffer;
 | |
|   UINT32  ExtendedBlockCount; // Max 0xffffffff
 | |
|   UINT32  Zero3;
 | |
| } EDD_DEVICE_ADDRESS_PACKET;
 | |
| 
 | |
| #define EDD_VERSION_30  0x30
 | |
| 
 | |
| //
 | |
| // Int 13 BIOS Errors
 | |
| //
 | |
| #define BIOS_PASS                   0x00
 | |
| #define BIOS_WRITE_PROTECTED        0x03
 | |
| #define BIOS_SECTOR_NOT_FOUND       0x04
 | |
| #define BIOS_RESET_FAILED           0x05
 | |
| #define BIOS_DISK_CHANGED           0x06
 | |
| #define BIOS_DRIVE_DOES_NOT_EXIST   0x07
 | |
| #define BIOS_DMA_ERROR              0x08
 | |
| #define BIOS_DATA_BOUNDRY_ERROR     0x09
 | |
| #define BIOS_BAD_SECTOR             0x0a
 | |
| #define BIOS_BAD_TRACK              0x0b
 | |
| #define BIOS_MEADIA_TYPE_NOT_FOUND  0x0c
 | |
| #define BIOS_INVALED_FORMAT         0x0d
 | |
| #define BIOS_ECC_ERROR              0x10
 | |
| #define BIOS_ECC_CORRECTED_ERROR    0x11
 | |
| #define BIOS_HARD_DRIVE_FAILURE     0x20
 | |
| #define BIOS_SEEK_FAILED            0x40
 | |
| #define BIOS_DRIVE_TIMEOUT          0x80
 | |
| #define BIOS_DRIVE_NOT_READY        0xaa
 | |
| #define BIOS_UNDEFINED_ERROR        0xbb
 | |
| #define BIOS_WRITE_FAULT            0xcc
 | |
| #define BIOS_SENSE_FAILED           0xff
 | |
| 
 | |
| #define MAX_EDD11_XFER              0xfe00
 | |
| 
 | |
| #pragma pack()
 | |
| //
 | |
| // Internal Data Structures
 | |
| //
 | |
| typedef struct {
 | |
|   CHAR8                 Letter;
 | |
|   UINT8                 Number;
 | |
|   UINT8                 EddVersion;
 | |
|   BOOLEAN               ExtendedInt13;
 | |
|   BOOLEAN               DriveLockingAndEjecting;
 | |
|   BOOLEAN               Edd;
 | |
|   BOOLEAN               Extensions64Bit;
 | |
|   BOOLEAN               ParametersValid;
 | |
|   UINT8                 ErrorCode;
 | |
|   VOID                  *FdptPointer;
 | |
|   BOOLEAN               Floppy;
 | |
|   BOOLEAN               AtapiFloppy;
 | |
|   UINT8                 MaxHead;
 | |
|   UINT8                 MaxSector;
 | |
|   UINT16                MaxCylinder;
 | |
|   UINT16                Pad;
 | |
|   EDD_DRIVE_PARAMETERS  Parameters;
 | |
| } BIOS_LEGACY_DRIVE;
 | |
| 
 | |
| #define BIOS_CONSOLE_BLOCK_IO_DEV_SIGNATURE SIGNATURE_32 ('b', 'b', 'i', 'o')
 | |
| typedef struct {
 | |
|   UINTN                     Signature;
 | |
| 
 | |
|   EFI_HANDLE                Handle;
 | |
|   EFI_HANDLE                ControllerHandle;
 | |
|   EFI_BLOCK_IO_PROTOCOL     BlockIo;
 | |
|   EFI_BLOCK_IO_MEDIA        BlockMedia;
 | |
|   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
 | |
|   EFI_PCI_IO_PROTOCOL       *PciIo;
 | |
|   EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;
 | |
| 
 | |
|   BIOS_LEGACY_DRIVE         Bios;
 | |
| 
 | |
| } BIOS_BLOCK_IO_DEV;
 | |
| 
 | |
| #define BIOS_BLOCK_IO_FROM_THIS(a)  CR (a, BIOS_BLOCK_IO_DEV, BlockIo, BIOS_CONSOLE_BLOCK_IO_DEV_SIGNATURE)
 | |
| 
 | |
| #endif
 |