| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- /****************************************************************************
- * This file is part of the AVRIDE device driver.
- *
- * Copyright (c) 2002-2003 by Michael Fischer. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of its contributors may
- * be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- ****************************************************************************
- * History:
- *
- * 14.12.02 mifi First Version
- * 18.01.03 mifi Change Licence from GPL to BSD.
- * 19.06.03 mifi Change address for ide port from 0x8000 to 0xE000
- * 29.06.03 mifi First ATAPI-Version
- ****************************************************************************/
- #ifndef __IDEP_H__
- #define __IDEP_H__
- #include <dev/ide.h>
- #include <fs/typedefs.h>
- /*-------------------------------------------------------------------------*/
- /* global defines */
- /*-------------------------------------------------------------------------*/
- //
- // If the driver should support the old
- // CHS drives, set IDE_SUPPORT_CHS to 1
- //
- #define IDE_SUPPORT_CHS 0
- #define IDE_BASE_ADDRESS 0xE000
- #define IDECS0 0x0000
- #define IDECS1 0x0500
- #define DATA_WRITE_REG_LOW (IDECS0 + 0x0100)
- #define DATA_WRITE_REG_HIGH (IDECS0 + 0x0200)
- #define DATA_READ_REG_LOW (IDECS0 + 0x0300)
- #define DATA_READ_REG_HIGH (IDECS0 + 0x0400)
- #define ERROR_REG (IDECS0 + 1)
- #define FEATURE_REG (IDECS0 + 1)
- #define SECTOR_COUNT_REG (IDECS0 + 2)
- #define SECTOR_REG (IDECS0 + 3)
- #define CYLINDER_LOW_REG (IDECS0 + 4)
- #define CYLINDER_HIGH_REG (IDECS0 + 5)
- #define DISK_HEAD_REG (IDECS0 + 6)
- #define COMMAND_REG (IDECS0 + 7)
- #define STATUS_REG (IDECS0 + 7)
- #define LBA_0_7 (IDECS0 + 3)
- #define LBA_8_15 (IDECS0 + 4)
- #define LBA_16_23 (IDECS0 + 5)
- #define CF_ERROR_REG (IDECS1 + 0)
- #define CONTROL_REG (IDECS1 + 6)
- #define ALTERNATE_STATUS (IDECS1 + 6)
- #define STATUS_BUSY 0x80
- #define STATUS_DRIVE_READY 0x40
- #define STATUS_DEVIDE_FAULT 0x20
- #define STATUS_SEEK_COMPLETE 0x10
- #define STATUS_DATA_REQUEST 0x08
- #define STATUS_CORRECTED_DATA 0x04
- #define STATUS_INDEX 0x02
- #define STATUS_ERROR 0x01
- #define ERROR_CRC 0x80
- #define ERROR_UNC 0x40
- #define ERROR_IDN 0x10
- #define ERROR_ABT 0x04
- #define ERROR_T0N 0x02
- #define ERROR_AMN 0x01
- #define COMMAND_DEVICE_INFO 0xEC
- #define COMMAND_DEVICE_INFO_P 0xA1
- #define COMMAND_READ_SECTORS 0x20
- #define COMMAND_WRITE_SECTORS 0x30
- #define COMMAND_RECALIBRATE 0x10
- #define COMMAND_DIAG 0x90
- #define SERIAL_SIZE 20
- #define REV_SIZE 8
- #define MODEL_SIZE 40
- //
- // ATAPI stuff
- //
- #define ATAPI_CMD_READ_CAPACITY 0x25
- #define ATAPI_CMD_MODE_SELECT 0x55
- #define ATAPI_CMD_MODE_SENSE 0x5A
- #define ATAPI_CMD_READ12 0xA8
- #define ATAPI_CMD_SET_CD_SPEED 0xBB
- /*-------------------------------------------------------------------------*/
- /* global types */
- /*-------------------------------------------------------------------------*/
- typedef struct {
- unsigned UnUsed0:1; // 0
- unsigned HardSector_O:1; // 0
- unsigned SoftSector_O:1; // 0
- unsigned MFM_O:1; // 0
- unsigned SlowHead_O:1; // 0
- unsigned SynchDriveMotor_O:1; // 0
- unsigned FixedDevice:1; // 0
- unsigned RemoveableDevice:1; // 0
- unsigned DiskTransferRate_O:3; // 0
- unsigned InaccurateSpeed_O:1; // 0
- unsigned DataStrobeOffset_O:1; // 0
- unsigned TrackOffsetOption_O:1; // 0
- unsigned FormatGapRequired_O:1; // 0
- unsigned ATAPI:1; // 0
- WORD Cylinders; // 1
- WORD UnUsed1; // 2
- WORD Heads; // 3
- WORD BytesPerTrack_O; // 4
- WORD BytesPerSector_O; // 5
- WORD SectorsPerTrack; // 6
- WORD VendorSpecific[3]; // 7 - 9
- char SerialNumber[SERIAL_SIZE]; // 10 - 19
- WORD BufferType_O; // 20
- WORD BufferSizeSectors_O; // 21
- WORD ECCBytes; // 22
- char FirmwareRevision[REV_SIZE]; // 23 - 26
- char Model[MODEL_SIZE]; // 27 - 46
- BYTE MaxMultipleSectors; // 47
- BYTE UnUsed2; // 47
- WORD Can32Bit_O; // 48
- unsigned CanDMA_O:1; // 49
- unsigned UnUsed3:9; // 49
- unsigned CanDisableIORDY:1; // 49
- unsigned IORDYSupported:1; // 49
- unsigned AdvancedTransferMode:1; // 49
- unsigned ATA3StandbyTimer:1; // 49
- unsigned UnUsed4:2;
- WORD UnUsed5; // 50
- BYTE UnUsed6; // 51
- BYTE PIOTransferSpeed; // 51
- BYTE UnUsed7; // 52
- BYTE DMATransferSpeed; // 52
- unsigned Fields_6C_75_Valid:1; // 53
- unsigned Fields_80_8C_Valid:1; // 53
- unsigned UnUsed8:14; // 53
- WORD Cylinders2; // 54
- WORD Heads2; // 55
- WORD SectorsPerTrack2; // 56
- DWORD Sectors; // 57,58
- BYTE MaxSectorsPerInt; // 59
- unsigned MaxSectorsPerIntIsValid:1; // 59
- unsigned UnUsed9:7; // 59
- DWORD LBASectors; // 60,61
- WORD UnUsed10; // 62
- BYTE SupportedDMAModes; // 63
- BYTE ActiveDMAModes; // 63
- BYTE PIOModesSupported; // 64
- BYTE UnUsed11; // 64
- WORD DMACycleTime; // 65
- WORD RecommendedDMACycleTime; // 66
- WORD PIOCycleTime; // 67
- WORD IORDYPIOCycleTime; // 68
- WORD Reserved1[2]; // 69 - 70
- WORD Reserved2[4]; // 71 - 74
- WORD QueueDepth; // 75
- WORD Reserved3[4]; // 76 - 79
- WORD ATAVersionMajor; // 80
- WORD ATAVersionMinor; // 81
- WORD CommandSetSupported[2]; // 82 - 83
- WORD CommandSetSupportedExtension; // 84
- WORD CommandSetEnabled[2]; // 85 - 86
- WORD CommandSetDefault; // 87
- WORD UltraDMAMode; // 88
- WORD SecurityStatus[2]; // 89 - 90
- WORD AdvancedPowerManagement; // 91
- WORD MasterPasswordRevisionCode; // 92
- WORD HardwareResetResult; // 93
- WORD AcousticManagementValue; // 94
- WORD Reserved4[5]; // 95 - 99
- WORD MaximumUserLBA48[4]; // 100 - 103
- WORD Reserved5[23]; // 104 - 126
- } IDEDEVICEINFO;
- /*-------------------------------------------------------------------------*/
- /* global macros */
- /*-------------------------------------------------------------------------*/
- /*-------------------------------------------------------------------------*/
- /* Prototypes */
- /*-------------------------------------------------------------------------*/
- #endif /* !__IDE_H__ */
|