mirror of https://github.com/acidanthera/audk.git
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
|