| UbixOS V2
    2.0
    | 


Go to the source code of this file.
| Data Structures | |
| struct | ata_identify_data | 
| struct | bsd_disklabel | 
| struct | bsd_disklabel::partition | 
| struct | dos_partition | 
| struct | driveInfo | 
| Macros | |
| #define | ATA_A_4BIT 0x00 | 
| #define | ATA_A_HOB 0x80 /* High Order Byte enable */ | 
| #define | ATA_A_IDS 0x02 /* disable interrupts */ | 
| #define | ATA_A_RESET 0x04 /* RESET controller */ | 
| #define | ATA_ALTSTAT 11 /* (R) alternate status */ | 
| #define | ATA_CHECK_POWER_MODE 0xE5 | 
| #define | ATA_COMMAND 7 /* (W) command */ | 
| #define | ATA_CONTROL 12 /* (W) control */ | 
| #define | ATA_COUNT 2 /* (W) sector count */ | 
| #define | ATA_CTLOFFSET 0x206 /* control register offset */ | 
| #define | ATA_CYL_LSB 4 /* (RW) cylinder# LSB */ | 
| #define | ATA_CYL_MSB 5 /* (RW) cylinder# MSB */ | 
| #define | ATA_D_IBM 0xa0 /* 512 byte sectors, ECC */ | 
| #define | ATA_D_LBA 0x40 /* use LBA addressing */ | 
| #define | ATA_DATA 0 /* (RW) data */ | 
| #define | ATA_DATA_SET_MANAGEMENT 0x06 | 
| #define | ATA_DEVICE_RESET 0x08 | 
| #define | ATA_DOWNLOAD_MICROCODE 0x92 | 
| #define | ATA_DRIVE 6 /* (W) Sector/Drive/Head */ | 
| #define | ATA_E_ABORT 0x04 /* command aborted */ | 
| #define | ATA_E_ATAPI_SENSE_MASK 0xf0 /* ATAPI sense key mask */ | 
| #define | ATA_E_ICRC 0x80 /* UDMA crc error */ | 
| #define | ATA_E_IDNF 0x10 /* ID not found */ | 
| #define | ATA_E_ILI 0x01 /* illegal length */ | 
| #define | ATA_E_MC 0x20 /* media changed */ | 
| #define | ATA_E_MCR 0x08 /* media change request */ | 
| #define | ATA_E_NM 0x02 /* no media */ | 
| #define | ATA_E_UNC 0x40 /* uncorrectable data */ | 
| #define | ATA_ERROR 8 /* (R) error */ | 
| #define | ATA_EXECUTE_DEVICE_DIAG 0x90 | 
| #define | ATA_F_DMA 0x01 /* enable DMA */ | 
| #define | ATA_F_OVL 0x02 /* enable overlap */ | 
| #define | ATA_FEATURE 1 /* (W) feature */ | 
| #define | ATA_FLUSH_CACHE 0xE7 | 
| #define | ATA_FLUSH_CACHE_EXT 0xEA | 
| #define | ATA_I_CMD 0x01 /* cmd (1) | data (0) */ | 
| #define | ATA_I_IN 0x02 /* read (1) | write (0) */ | 
| #define | ATA_I_RELEASE 0x04 /* released bus (1) */ | 
| #define | ATA_I_TAGMASK 0xf8 /* tag mask */ | 
| #define | ATA_IDENTIFY 0xEC | 
| #define | ATA_IDENTIFY_COMMAND_SET_SUPPORTED1_48BIT_ENABLE 0x0400 | 
| #define | ATA_IDENTIFY_SECTOR_LARGER_THEN_512_ENABLE 0x0100 | 
| #define | ATA_IDLE 0xE3 | 
| #define | ATA_IDLE_IMMED 0xE1 | 
| #define | ATA_IREASON 9 /* (R) interrupt reason */ | 
| #define | ATA_MEDIA_EJECT 0xED | 
| #define | ATA_NOP 0x00 | 
| #define | ATA_PACKET 0xA0 | 
| #define | ATA_PACKET_IDENTIFY 0xA1 | 
| #define | ATA_PC98_CTLOFFSET 0x10c /* do for PC98 devices */ | 
| #define | ATA_PCCARD_CTLOFFSET 0x0e /* do for PCCARD devices */ | 
| #define | ATA_READ_BUFFER 0xE4 | 
| #define | ATA_READ_DMA 0xC8 | 
| #define | ATA_READ_DMA_EXT 0x25 | 
| #define | ATA_READ_DMA_QUEUED 0xC7 | 
| #define | ATA_READ_DMA_QUEUED_EXT 0x26 | 
| #define | ATA_READ_FPDMA 0x60 | 
| #define | ATA_READ_LOG_DMA_EXT 0x47 | 
| #define | ATA_READ_LOG_EXT 0x2F | 
| #define | ATA_READ_MULTIPLE 0xC4 | 
| #define | ATA_READ_MULTIPLE_EXT 0x29 | 
| #define | ATA_READ_SECTORS 0x20 | 
| #define | ATA_READ_SECTORS_EXT 0x24 | 
| #define | ATA_READ_STREAM_DMA_EXT 0x2A | 
| #define | ATA_READ_VERIFY_SECTORS 0x40 | 
| #define | ATA_READ_VERIFY_SECTORS_EXT 0x42 | 
| #define | ATA_S_BUSY 0x80 /* busy */ | 
| #define | ATA_S_CORR 0x04 /* data corrected */ | 
| #define | ATA_S_DMA 0x20 /* DMA ready */ | 
| #define | ATA_S_DRQ 0x08 /* data request */ | 
| #define | ATA_S_DSC 0x10 /* drive seek completed */ | 
| #define | ATA_S_DWF 0x20 /* drive write fault */ | 
| #define | ATA_S_ERROR 0x01 /* error */ | 
| #define | ATA_S_INDEX 0x02 /* index */ | 
| #define | ATA_S_READY 0x40 /* drive ready */ | 
| #define | ATA_S_SERVICE 0x10 /* drive needs service */ | 
| #define | ATA_SECTOR 3 /* (RW) sector # */ | 
| #define | ATA_SECURITY_FREEZE_LOCK 0xF5 | 
| #define | ATA_SECURITY_UNLOCK 0xF2 | 
| #define | ATA_SET_FEATURES 0xEF | 
| #define | ATA_SMART 0xB0 | 
| #define | ATA_STANDBY 0xE2 | 
| #define | ATA_STANDBY_IMMED 0xE0 | 
| #define | ATA_STATUS 10 /* (R) status */ | 
| #define | ATA_WRITE_BUFFER 0xE8 | 
| #define | ATA_WRITE_DMA 0xCA | 
| #define | ATA_WRITE_DMA_EXT 0x35 | 
| #define | ATA_WRITE_DMA_FUA 0x3D | 
| #define | ATA_WRITE_DMA_QUEUED 0xCC | 
| #define | ATA_WRITE_DMA_QUEUED_EXT 0x36 | 
| #define | ATA_WRITE_DMA_QUEUED_FUA_EXT 0x3E | 
| #define | ATA_WRITE_FPDMA 0x61 | 
| #define | ATA_WRITE_LOG_DMA_EXT 0x57 | 
| #define | ATA_WRITE_MULTIPLE 0xC5 | 
| #define | ATA_WRITE_MULTIPLE_EXT 0x39 | 
| #define | ATA_WRITE_MULTIPLE_FUA_EXT 0xCE | 
| #define | ATA_WRITE_SECTORS 0x30 | 
| #define | ATA_WRITE_SECTORS_EXT 0x34 | 
| #define | ATA_WRITE_STREAM_DMA_EXT 0x3A | 
| #define | ATA_WRITE_UNCORRECTABLE 0x45 | 
| #define | hdCmd 0x7 | 
| #define | hdCylHi 0x5 | 
| #define | hdCylLow 0x4 | 
| #define | hdData 0x0 | 
| #define | hdError 0x1 | 
| #define | hdHead 0x6 | 
| #define | hdSecCount 0x2 | 
| #define | hdSecNum 0x3 | 
| #define | hdStat 0x7 | 
| #define | MAXPARTITIONS 8 | 
| #define | NDDATA 5 | 
| #define | NSPARE 5 | 
| Functions | |
| int | hdInit (struct device_node *dev) | 
| int | hdIoctl () | 
| int | hdRead (struct driveInfo *hdd, void *, uInt32, uInt32) | 
| int | hdReset () | 
| int | hdStandby () | 
| int | hdStart () | 
| int | hdStop () | 
| int | hdWrite (struct driveInfo *hdd, void *, uInt32, uInt32) | 
| int | initHardDisk () | 
| ATA_IDENTIFY_DEVICE_FIELD_LENGTHS | |
| The following constants define the number of bytes contained in various fields found in the IDENTIFY DEVICE data structure. | |
| #define | ATA_IDENTIFY_48_LBA_LEN 8 | 
| #define | ATA_IDENTIFY_FW_REVISION_LEN 8 | 
| #define | ATA_IDENTIFY_MEDIA_SERIAL_NUMBER_LEN 30 | 
| #define | ATA_IDENTIFY_MODEL_NUMBER_LEN 40 | 
| #define | ATA_IDENTIFY_SERIAL_NUMBER_LEN 20 | 
| #define | ATA_IDENTIFY_WWN_LEN 8 | 
| int hdInit | ( | struct device_node * | dev | ) | 
Definition at line 221 of file hd.c.
References ATA_COMMAND, ATA_DATA, ATA_DRIVE, ATA_IDENTIFY, driveInfo::ata_identify, ATA_IDENTIFY_COMMAND_SET_SUPPORTED1_48BIT_ENABLE, ATA_IDENTIFY_SECTOR_LARGER_THEN_512_ENABLE, ATA_S_BUSY, ata_identify_data::command_set_enabled1, device_node::devInfo, hdCmd, driveInfo::hdDev, driveInfo::hdEnable, hdHead, driveInfo::hdMask, driveInfo::hdMulti, driveInfo::hdPort, hdSecCount, driveInfo::hdShift, driveInfo::hdSize, device_interface::info, device_interface::initialized, inportByte(), inportWord(), kprintf(), driveInfo::lba_high, driveInfo::lba_low, ata_identify_data::max_48bit_lba, outportByte(), ata_identify_data::physical_logical_sector_info, driveInfo::sector_size, device_interface::size, ata_identify_data::total_num_sectors, and ata_identify_data::words_per_logical_sector.

Definition at line 423 of file hd.c.
References driveInfo::hdCalc, hdCmd, hdCylHi, hdCylLow, hdData, driveInfo::hdDev, driveInfo::hdEnable, hdHead, driveInfo::hdMulti, driveInfo::hdPort, hdSecCount, hdSecNum, driveInfo::hdShift, hdStat, inportByte(), inportWord(), kprintf(), driveInfo::lba_start, outportByte(), and driveInfo::parOffset.

Definition at line 356 of file hd.c.
References driveInfo::hdCalc, hdCmd, hdCylHi, hdCylLow, hdData, driveInfo::hdDev, driveInfo::hdEnable, hdHead, driveInfo::hdMulti, driveInfo::hdPort, hdSecCount, hdSecNum, driveInfo::hdShift, hdStat, inportByte(), kprintf(), driveInfo::lba_start, outportByte(), outportWord(), and driveInfo::parOffset.

| int initHardDisk | ( | ) | 
Definition at line 42 of file hd.c.
References _initHardDisk().
