mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 12:54:17 +00:00 
			
		
		
		
	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
 |