kernel/eka/drivers/medata/ata.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/drivers/medata/ata.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,170 @@
+// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32\drivers\medata\ata.h
+// 
+//
+
+#include <partitions.h>
+
+#if defined (SELECT_PRIMARY_IO_CONFIG)
+//
+// ATA Register addresses (for primary)
+// 
+const TUint KAtaDataRdWr16=0x000001F0;
+const TUint KAtaDataRdWr8=0x000001F0;
+
+const TUint KAtaErrorRd8=0x000001F1;
+const TUint KAtaFeaturesWr8=0x000001F1;
+
+const TUint KAtaSectorCountRdWr8=0x000001F2;
+
+const TUint KAtaSectorNoRdWr8=0x000001F3;
+const TUint KAtaLba7_0RdWr8=0x000001F3;
+
+const TUint KAtaCylinderLowRdWr8=0x000001F4;
+const TUint KAtaLba15_8RdWr8=0x000001F4;
+
+const TUint KAtaCylinderHighRdWr8=0x000001F5;
+const TUint KAtaLba23_16RdWr8=0x000001F5;
+
+const TUint KAtaSelectDriveHeadRdWr8=0x000001F6;
+const TUint KAtaDriveLba27_24RdWr8=0x000001F6;
+
+const TUint KAtaStatusRd8=0x000001F7;
+const TUint KAtaCommandWr8=0x000001F7;
+
+#else
+//
+// ATA Register addresses (for either contiguous I/O or memory mapped)
+// 
+const TUint KAtaDataRdWr16=0x00000000;
+const TUint KAtaDataRdWr8=0x00000000;
+const TUint KAtaDataRdWrWinBase16=0x00000400;	// Memory mapped only
+const TUint KAtaDataRdWrWinBase8=0x00000400;	// Memory mapped only
+
+const TUint KAtaErrorRd8=0x00000001;
+const TUint KAtaFeaturesWr8=0x00000001;
+
+const TUint KAtaSectorCountRdWr8=0x00000002;
+
+const TUint KAtaSectorNoRdWr8=0x00000003;
+const TUint KAtaLba7_0RdWr8=0x00000003;
+
+const TUint KAtaCylinderLowRdWr8=0x00000004;
+const TUint KAtaLba15_8RdWr8=0x00000004;
+
+const TUint KAtaCylinderHighRdWr8=0x00000005;
+const TUint KAtaLba23_16RdWr8=0x00000005;
+
+const TUint KAtaSelectDriveHeadRdWr8=0x00000006;
+const TUint KAtaDriveLba27_24RdWr8=0x00000006;
+
+const TUint KAtaStatusRd8=0x00000007;
+const TUint KAtaCommandWr8=0x00000007;
+#endif
+
+//
+// ATA Register addresses (for contiguous I/O or memory mapped)
+// 
+const TUint KAtaDupEvenDataRdWr8=0x00000008;
+const TUint KAtaDupOddDataRdWr8=0x00000009;
+const TUint KAtaDupErrorRd8=0x0000000D;
+const TUint KAtaDupFeaturesWr8=0x0000000D;
+const TUint KAtaAltStatusRd8=0x0000000E;
+const TUint KAtaDeviceCtlWr8=0x0000000E;
+const TUint KAtaDriveAddressRd8=0x0000000F;
+
+//
+// ATA Register bit fields 
+// 
+// KAtaErrorRd8
+const TUint8	KAtaErrorAmnf=0x01;
+const TUint8	KAtaErrorAbort=0x04;
+const TUint8	KAtaErrorIdnf=0x10;
+const TUint8	KAtaErrorUnc=0x40;
+const TUint8	KAtaErrorBbk=0x80;
+
+// KAtaSelectDriveHeadRdWr8
+// KAtaDriveLba27_24RdWr8
+const TUint8	KAtaDrvHeadLba27_24=0x0F;
+const TUint8	KAtaDrvHeadDrive1=0x10;
+const TUint8	KAtaDrvHeadLbaOn=0x40;
+
+// KAtaStatusRd8
+const TUint8	KAtaStatusErr=0x01;
+const TUint8	KAtaStatusCorr=0x04;
+const TUint8	KAtaStatusDrq=0x08;
+const TUint8	KAtaStatusDsc=0x10;
+const TUint8	KAtaStatusDwf=0x20;
+const TUint8	KAtaStatusRdy=0x40;
+const TUint8	KAtaStatusBusy=0x80;
+
+// KAtaDeviceCtlWr8
+const TUint8	KAtaDeviceCtlIntDis=0x02;
+const TUint8	KAtaDeviceCtlSwRes=0x04;
+
+//
+// ATA commands
+// 
+const TUint8 KAtaCmdIdentifyDrive=0xEC;
+const TUint8 KAtaCmdReadSectors=0x20;
+const TUint8 KAtaCmdWriteSectors=0x30;
+const TUint8 KAtaCmdSetFeatures=0xEF;
+const TUint8 KAtaCmdRequestSense=0x03;
+const TUint8 KAtaCmdFormatTrack=0x50;
+const TUint8 KAtaCmdIdle=0xE3;
+
+//
+// Defines for Identify Drive Command
+//
+const TInt KAtaIdDefaultCylinders=2;			// Offset in bytes
+const TInt KAtaIdDefaultHeads=6;			
+const TInt KAtaIdDefaultSectorsPerTrack=12;			
+const TInt KAtaIdCapabilities=98;			
+const TUint16	KAtaIdCapLbaSupported=0x0200;
+const TInt KAtaIdTranslationParams=106;		
+const TUint16 	KAtaIdTrParamsValid=0x0001;		
+const TInt KAtaIdCurrentCylinders=108;		
+const TInt KAtaIdCurrentHeads=110;			
+const TInt KAtaIdCurrentSectorsPerTrack=112;			
+const TInt KAtaIdCurrentTotalSectors=114;			
+const TInt KAtaIdTotalSectorsInLba=120;		
+
+//
+// Drive parameters
+//
+class TDriveParameters
+	{
+public:
+	TInt iCylinders;
+	TInt iHeads;
+	TInt iSectorsPerTrack;
+	TInt iSectorsPerCylinder;
+	TBool iSupportsLba;
+	TInt iTotalSectorsInLba;
+	};
+
+const TInt KAtaSectorSize=512;
+const TInt KAtaSectorSizeMinusOne=(KAtaSectorSize-1);
+const TInt KAtaSectorShift=9;
+const TUint KAtaSectorMask=0xFFFFFE00;
+
+const TInt KMaxSectorsPerCmd=256; // Maximum sectors that can be transfered in single command
+
+enum TAtaDriveSelect
+	{
+	ESelectDrive1=KAtaDrvHeadDrive1,
+	ESelectDrive0=0x00
+	};
+