summaryrefslogtreecommitdiff
path: root/Core/EM/Ahci/AInt13.h
diff options
context:
space:
mode:
Diffstat (limited to 'Core/EM/Ahci/AInt13.h')
-rw-r--r--Core/EM/Ahci/AInt13.h395
1 files changed, 395 insertions, 0 deletions
diff --git a/Core/EM/Ahci/AInt13.h b/Core/EM/Ahci/AInt13.h
new file mode 100644
index 0000000..a55d3d0
--- /dev/null
+++ b/Core/EM/Ahci/AInt13.h
@@ -0,0 +1,395 @@
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
+
+//****************************************************************************
+// $Header: /Alaska/SOURCE/Modules/AHCI/INT13/AInt13.h 17 11/25/14 12:00a Kapilporwal $
+//
+// $Revision: 17 $
+//
+// $Date: 11/25/14 12:00a $
+//
+//****************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/AHCI/INT13/AInt13.h $
+//
+// 17 11/25/14 12:00a Kapilporwal
+// [TAG] EIP191939
+// [Category] Improvement
+// [Description] Issue about BIG_REAL_MODE_MMIO_ACCESS of AHCI module
+// [Files] AI13.bin
+// AHCIACC.ASM
+// AhciInt13Dxe.c
+// AhciInt13Dxe.dxs
+// AhciInt13Smm.c
+// AhciInt13Smm.cif
+// AhciInt13Smm.dxs
+// AhciInt13Smm.h
+// AhciInt13Smm.mak
+// AhciInt13Smm.sdl
+// AInt13.c
+// Aint13.cif
+// AInt13.h
+// AhciSmm.c
+// AhciSmm.h
+// AhciSmmProtocol.h
+//
+// 16 11/29/12 12:58a Rameshr
+// [TAG] EIP107365
+// [Category] Improvement
+// [Description] Increase the SATA_PORT_COUNT to 32 to support 32 SATA
+// devices on Legacyboot
+// [Files] Aint13.h, Ahci.sdl ( Ain13.bin)
+//
+// 15 8/02/12 8:12a Deepthins
+// [TAG] EIP93480
+// [Category] Bug Fix
+// [Symptom] AHCI legacy support module is corrupting the memory.
+// [RootCause] AHCI legacy support module is corrupting the memory as it
+// was using wrong offset for storing the base address.
+// [Solution] Properly calculating offset for storing the base address.
+// [Files] AINT13.EQU, AInt13.c, AInt13.h and AHCIACC.ASM
+//
+// 14 7/20/12 6:12a Anandakrishnanl
+// [TAG] EIP88683
+// [Category] New Feature
+// [Description] EFI_ATA_PASS_THRU_PROTOCOL Support for Aptio IDE
+// [Files] AhciBus.c
+// AhciBus.h
+// AInt13.h
+// IdeBus.c
+// IdeBus.h
+// PIDEBus.h
+// PAhciBus.h
+// AtaPassThru.sdl
+// AtaPassThru.mak
+// AtaPassThru.c
+// AtaPassThruSupport.h
+// AtaPassThru.chm
+//
+// 13 4/24/12 12:54a Deepthins
+// [TAG] EIP86336
+// [Category] Bug Fix
+// [Severity] Normal
+// [Symptom] Can't boot from AHCI if SATA_PORT_COUNT=12
+// [RootCause] The controller number was not updated in DEV_INFO_STRUC
+// for all the Hard Disk
+// [Solution] Updated the controller number in the DEV_INFO_STRUC for
+// all the AHCI devices.
+// [Files] AInt13.c, AInt13.h
+//
+// 12 1/13/12 12:18a Deepthins
+// [TAG] EIP78099
+// [Category] Improvement
+// [Description] Handle multiple AHCI controller in legacy.
+// [Files] Aint13.sdl , AInt13.c , AInt13.h , AHCIACC.ASM , AHCI.EQU ,
+// AINT13.bin (AHCIACC.ASM , AINT13.EQU)
+//
+// 11 11/29/11 4:27a Rameshr
+// [TAG] EIP76393
+// [Category] Bug Fix
+// [Severity] Important
+// [Symptom] Any time AHCI is starting when EBDA size is more than 64K,
+// the problem will show as memory corruption.
+// [RootCause] AHCI INT13 code does not use EBDA properly when at the
+// time of EBDA allocation current size of EBDA exceeds 64K
+// [Solution] Modified code to extend the width of EbdaStart offset from
+// 16-bit to 32-bit.
+// [Files] Aint13.asm, Ahcibsp.asm, Aint13.c, Aint13.h, Aint13.bin
+//
+// 10 2/10/11 10:49a Rameshr
+// [TAG] EIP53704
+// [Category] Improvement
+// [Description] AMI headers update for Alaska Ahci Driver
+// [Files] Aint13.mak
+// AInt13.h
+// AInt13.c
+//
+// 9 6/21/10 5:32a Rameshr
+// AHCI Legacy booting through MMIO reg.
+// EIP 38444
+//
+// 8 9/09/08 3:19p Michaela
+// Added AHCI_CD_CSM_ID_OFFSET for assigning
+// device numbers for CDs/DVDs in order to
+// avoid a CSM16 conflict with PATA devices, which
+// may be present on some systems
+//
+// 7 5/28/08 9:41a Rameshraju
+// Updated the AMI Address.
+//
+// 6 5/13/08 4:31p Olegi
+// Modifications in DEV_PARAM_STRUC and DEV_PTR_STRUC to accomodate the
+// new AI13.BIN that is based on the latest AHCI Core8 src.
+//
+// 3 3/28/08 12:16p Michaela
+// updated copyright
+//
+// 2 19/12/07 4:29p Anandakrishnanl
+//
+// 1 12/07/07 11:17a Olegi
+//
+//****************************************************************************
+
+#ifndef __AI13_HEADER__
+#define __AI13_HEADER__
+
+#include "efi.h"
+#include "Protocol\PciIo.h"
+
+#pragma pack(1)
+
+//<AMI_FHDR_START>
+//---------------------------------------------------------------------------
+//
+// Name: AINT13.H
+// Description: Definitions and structures for AHCI INT13
+//
+//---------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+typedef struct _DEV_INFO_STRUC {
+ UINT8 bDetectType; // Detected Device Type (Details Below)
+ UINT8 bInstalledType; // Device Installed Type (See Below)
+ UINT16 wStatus; // Bit-mapped device Init Status (Details Below)
+ UINT8 bInt13Num; // Device# for INT13 (8xh)
+ UINT8 bPMNum; // Port Multipier Port #
+ UINT8 bPortNum; // SATA Port# (0-Based) where device is present
+ UINT16 wBusDevFunc; // Bus#, Dev#, Func# of Controller
+ UINT8 bControllerNo; // Ahci Controller number
+ UINT32 dHbaBase; // HBA Base Address of Generic Host Control Registers
+ UINT32 dHbaCap; // HBA Capabilities
+ UINT32 dPortBase; // Base Address of SATA port where device is present
+ UINT8 bSelector; // Device selector value
+ UINT8 bIrq; // IRQ used by this device
+ UINT8 bInfoFlag; // Information Flag (details below)
+ UINT8 bSectorSizeN; // N value of Sector size 2^N ;For 512bytes sector, N = 9
+ UINT16 wSmartInfo; // SMART info (details below)
+ UINT32 dTotalSectorsLo;// Total #of sectors in device (1-based)
+ UINT32 dTotalSectorsHi;
+ UINT16 wXferCount; // Device transfer count. Used for ATAPI packer size
+ UINT8 bBlockInfo;
+ UINT8 b32BitInfo;
+ UINT8 bUDMAInfo;
+ UINT8 bPIOInfo;
+} DEV_INFO_STRUC;
+
+typedef struct _CONTROLLER_INFO_STRUC
+{
+ UINT16 BusDevFun; // Bus, Device and Function number for a controller
+ UINT8 ControllerNo; // Controler number for a controller
+}CONTROLLER_INFO_STRUC;
+
+// Details of bDetectType
+
+#define DETECT_NO 0
+#define DETECT_ATA 1
+#define DETECT_ATAPI_CD 2
+#define DETECT_ATAPI_ARMD 3
+
+// Details of bInstalledType
+
+#define INSTALLED_NO 0
+#define INSTALLED_HDD 1
+#define INSTALLED_CDROM 2
+#define INSTALLED_ARMD_FDD 3
+#define INSTALLED_ARMD_HDD 4
+
+// Details of wStatus
+
+// Bit 0 = 1, successful (device is installed in this case)
+// Bit 1 = 1, Identify Device Failed
+// Bit 2 = 1, Invalid Device Geometry
+// Bit 3 = 1, Init device parameter failed
+// Bit 4 = 1, Recalibrate failed
+// Bit 5 = 1, SMART failed
+// Bit 6 = 1, Verify failed
+// Bit 7 = 1, Security Freeze Lock failed
+// Bit 8 = 1, Port Reset failed
+// Bit 9 = 1, SMART Event was found
+// Bit 10 = 1, Device will be supported by RIAD OROM, not AHCI OROM (ex. HDD)
+// Bit 14-11, Reserved for future use
+// Bit 15 = 1, Device not supported
+
+#define ST_SUCCESS 0x0001
+#define ST_ID_DEV_ERR 0x0002
+#define ST_DEV_GEOMETRY_ERR 0x0004
+#define ST_INIT_DEV_PARAM_ERR 0x0008
+#define ST_RECALI_ERR 0x0010
+#define ST_SMART_ERR 0x0020
+#define ST_VERIFY_ERR 0x0040
+#define ST_FREEZE_LOCK_ERR 0x0080
+#define ST_PORT_RESET_ERR 0x0100
+#define ST_SMART_EVENT 0x0200
+#define ST_RAID_SUPPORT_ERR 0x0400
+#define ST_NOT_SUPPORT_ERR 0x8000
+
+
+// Details of bInt13Num
+
+// Bit 7 = 1, this bit must be set for CDs/HDDs
+// AHCI_CD_CSM_ID_OFFSET, PATA CDs/DVDs use the device handle range 0x80-0x8F
+// so this value will be added to ensure AHCI CDs/DVDs
+// are above that range
+
+#define AHCI_CD_CSM_ID_OFFSET 0x10
+
+
+// Details of bInfoFlag, a bit-mapped field
+
+// Bit 0 = 1, Device supports removable media
+// Bit 1 = 1, 48bit LBA enabled
+// Bit 2 = 1, Device uses IRQ; 0, Device uses DRQ
+// Bit 6-2, Reserved
+// Bit 7 = 1, ATAPI Device; 0, ATA Device
+
+#define INFO_REMOVABLE 0x01
+#define INFO_LBA_48 0x02
+#define INFO_IRQ 0x04
+#define INFO_ATAPI 0x80
+
+// Details wSmartInfo
+
+// Bit 0 = 0/1, SMART (Not Supported/Supported)
+// Bit 1 = 0/1, SMART (Disabled/Enabled)
+// Bit 2 = 0/1, Device Status Good/Bad
+// Bit 7 = 0/1, SMART Execution Successful/Error
+// Bit 15-8, Reserved
+
+#define AHCI_SMART_SUPPORT 0x01
+#define AHCI_SMART_ENABLE 0x02
+#define AHCI_SMART_EN 0x02
+#define AHCI_SMART_STATUS 0x04
+#define AHCI_SMART_COMMAND_STATUS 0x80
+
+#define SECTOR_LENGTH_N 9
+#define SELECTOR_NON_LBA 0xA0
+#define SELECTOR_LBA 0xE0
+#define MAX_STND_XFER_SECTOR 0x80
+#define MAX_EXTD_XFER_SECTOR 0x7F
+#define BLOCK_SIZE 0x80
+#define BLOCK_SIZE_N 0xB
+
+typedef struct _DEV_PTR_STRUC {
+ UINT8 bInt13Num; // INT13 Drive# for this Port
+ UINT8 bDetectType; // Detected Device Type
+ UINT8 bPMnum; // Port Multipier port #
+ UINT8 bPortNum; // Port# (0-based) on Controller
+ UINT32 dParamTablePtr; // Ptr to device parameter table
+ UINT32 dInfoTablePtr; // Ptr to device info table
+} DEV_PTR_STRUC;
+
+typedef struct _DEV_PARAM_STRUC {
+ UINT16 wMAXCYL; // maximum no. of cylinders..INT13 interface. (logical)
+ UINT8 bMAXHN; // maximum no. of heads..INT13 interface. (logical)
+ UINT8 bLBASIG; // LBA signature
+ UINT8 bLBASPT; // #of sectors per track drive is configured for. (physical)
+ UINT16 wWPCYL; // start write precomp cyl no.
+ UINT8 bReserved; // reserved
+ UINT8 bCBYTE; // bit 3 for more than 8 heads
+ UINT16 wLBACYL; // #of cylinders drive is configured for. (physical)
+ UINT8 bLBAHD; // #of heads drive is configured for. (physical)
+ UINT16 wLANDZ; // Landing zone
+ UINT8 bMAXSN; // no. of sectors per track..INT13 interface. (logical)
+ UINT8 bLBACHK; // checksum..LBA
+} DEV_PARAM_STRUC;
+
+//
+// The following definitions should be in sync with 16-bit definition
+//
+#define SATA_PORT_COUNT 32
+#define MAX_DESCRIPTION_STRLEN 32
+
+typedef struct _AHCI_SMM_RTS {
+ UINT8 MiscInfo;
+ UINT16 SmmAttr;
+ UINT32 SmmPort;
+ UINT32 SmmData;
+} AHCI_SMM_RTS;
+
+typedef struct _AHCI_RT_MISC_DATA {
+ UINT8 NumAhciDevice; // #of AHCI device installed by BIOS
+ UINT8 RunAttribute; // Bit-mapped information about runtime environment
+ UINT8 AhciEbdaSizeK; // Size of EBDA in unit of 1k that is created by AHCI init
+ UINT32 AhciEbdaStart; // Start offset of AHCI communication area in EBDA
+ AHCI_SMM_RTS AhciSmmRt; // Port and Data information to generate software SMI
+} AHCI_RT_MISC_DATA;
+
+typedef struct _DEV_BBS_OUTFIT {
+ UINT8 DescString[MAX_DESCRIPTION_STRLEN];
+} DEV_BBS_OUTFIT;
+
+typedef struct _AHCI_I13_RTDATA {
+ DEV_PARAM_STRUC DevParam[SATA_PORT_COUNT];
+ DEV_INFO_STRUC DevInfo[SATA_PORT_COUNT+1];
+ DEV_PTR_STRUC DevPtr[SATA_PORT_COUNT];
+ AHCI_RT_MISC_DATA AhciRtMiscData;
+ DEV_BBS_OUTFIT DevOutfit[SATA_PORT_COUNT];
+} AHCI_I13_RTDATA;
+
+typedef struct _AHCI_I13_DATA {
+ AHCI_I13_RTDATA rtdata;
+ UINT16 CheckForAhciCdromOffset;
+ UINT16 AhciBcvOffset;
+} AHCI_I13_DATA;
+
+// Details of bSignature field: A signature Axh indicates that the table is translated.
+#define DPTBL_SIG_MASK 0x0F0
+// A0h signature indicating LBA translation
+#define LBA_SIGNATURE 0x0A0
+
+//-------------------------------------------------------------------------
+// Port registers
+//
+#define PORT_REGISTER_START 0x100
+#define PORT_REGISTER_SET_SIZE 0x80
+#define PORT_REGISTER_SET_SIZE_N 7
+
+#define SIZE_CLCTFIS_AREA_K 4
+#define A_EBDA_USED 1
+#define A_INT13_SWSMI_USED BIT2
+
+#define BAID_TYPE_HDD 1
+#define BAID_TYPE_RMD_HDD 2
+#define BAID_TYPE_CDROM 3
+#define BAID_TYPE_RMD_FDD 4
+#define BAID_TYPE_FDD 5
+
+#define DEFAULT_DEVICE_STATUS 0x50
+#define SYSTYPE_ATA 0
+#define DEVTYPE_SYS 1
+
+EFI_STATUS GetAccessInfo (EFI_PCI_IO_PROTOCOL*, UINT16*, UINT16*);
+EFI_STATUS InitCspData (UINT16, UINT16,UINT32,UINT8);
+UINT16 CountDrives(IN EFI_HANDLE *HandleBuffer,
+ IN UINTN HandleCount,
+ IN VOID *Devices
+ );
+#pragma pack()
+
+#endif
+
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************