📄 ide.h
字号:
#define IDE_DATA (0)#define IDE_ERROR (1) /* r */#define IDE_FEATURE (1) /* w */#define IDE_NSECTOR (2)#define IDE_SECTOR (3)#define IDE_LCYL (4)#define IDE_HCYL (5)#define IDE_SELECT (6)#define IDE_STATUS (7) /* r */#define IDE_COMMAND (7) /* w */#define IDE_ALTSTATUS (8) /* r */#define IDE_CONTROL (8) /* w */#define ERR_STAT 0x01#define INDEX_STAT 0x02#define ECC_STAT 0x04 /* Corrected error */#define DRQ_STAT 0x08#define SEEK_STAT 0x10#define WRERR_STAT 0x20#define READY_STAT 0x40#define BUSY_STAT 0x80#define BAD_R_STAT (BUSY_STAT | ERR_STAT)#define WIN_IDENTIFY 0xEC /* ask drive to identify itself */#define WIN_READ 0x20#define WIN_SETFEATURES 0xEF#define PIO_PIO0 0#define PIO_PIO1 7#define PIO_PIO2 12#define PIO_PIO3 14#define PIO_PIO4 16#define DMA_NONE 0#define DMA_DMA0 1#define DMA_DMA1 2#define DMA_DMA2 3#define DMA_UDMA0 4#define DMA_UDMA1 5#define DMA_UDMA2 6struct hd_driveid { u16 gen_cfg; /* 000: general configuration */ u16 def_log_cyls; /* 001: default logical cylinders */ u16 spec_cfg; /* 002: specific configuration */ u16 def_log_heads; /* 003: default logical heads */ u16 retired4; /* 004: retired */ u16 retired5; /* 005: retired */ u16 def_log_sects; /* 006: default logical sectors */ u16 vendor7; /* 007: vendor unique */ u16 vendor8; /* 008: vendor unique */ u16 retired9; /* 009: retired */ u8 serial_no[20]; /* 010: 0 = not_specified */ u16 retired20; /* 020: retired */ u16 retired21; /* 021: retired */ u16 obsolete22; /* 022: obsolete */ u8 fw_rev[8]; /* 023: firmware rev, 0 = not_specified */ u8 model[40]; /* 027: model, 0 = not_specified */ u8 max_multsect; /* 047l: max sectors/multi-rw cmds */ u8 reserved47; /* 047h: reserved */ u16 reserved48; /* 048: reserved */ u8 retired49; /* 049l: retired */ u8 capability; /* 049h: capability */ /* 0: 1 for IDENTIFY PACKET */ /* 2 disable IORDY supported */ /* 3 IORDY support */ /* 4 for IDENTIFY PACKET */ /* 5 standard standby timer */ /* 6: 7 for IDENTIFY PACKET */ u16 reserved50; /* 050: capability */ u16 obsolete51; /* 051: obsolete */ u16 obsolete52; /* 052: obsolete */ u16 field_valid; /* 053: field validity */ /* 0 words 54-58 valid */ /* 1 words 64-70 valid */ /* 2 word 88 valid */ u16 cur_log_cyls; /* 054: logical cylinders */ u16 cur_log_heads; /* 055: logical heads */ u16 cur_log_sects; /* 056: logical sectors per track */ u16 cur_capacity0; /* 057: logical total sectors on drive */ u16 cur_capacity1; /* 058: (2 words, misaligned int) */ u8 multsect; /* 059l: current multiple sector count */ u8 multsect_valid; /* 059h: when (bit0==1) multsect is ok */ u32 lba_capacity; /* 060: total number of sectors */ u16 dma_1word; /* 062: single-word dma info */ u16 dma_mword; /* 063: multiple-word dma info */ u16 eide_pio_modes; /* 064: bits 0:mode3 1:mode4 */ u16 eide_dma_min; /* 065: min mword dma cycle time (ns) */ u16 eide_dma_time; /* 066: recommended mword dma cycle time (ns) */ u16 eide_pio; /* 067: min cycle time (ns), no IORDY */ u16 eide_pio_iordy; /* 068: min cycle time (ns), with IORDY */ u16 word69; /* 069: reserved */ u16 word70; /* 070: reserved */ u16 word71; /* 071: reserved */ u16 word72; /* 072: reserved */ u16 word73; /* 073: reserved */ u16 word74; /* 074: reserved */ u16 word75; u16 word76; u16 word77; u16 word78; u16 word79; u16 word80; /* 080: major ATA version number */ u16 word81; /* 081: minor ATA version number */ u16 word82; /* 082: feature support */ /* 0 SMART */ /* 1 Security mode */ /* 2 Removable media */ /* 3 Power management */ /* 4 unused */ /* 5 write cache */ /* 6 look-ahead */ /* 7 release interrupt */ /* 8 service interrupt */ /* 9 DEVICE RESET command */ /* 10 host protected area */ /* 11 obsolete */ /* 12 WRITE BUFFER command */ /* 13 READ BUFFER command */ /* 14 NOP command */ /* 15 obsolete */ u16 word83; /* 083: feature support */ /* 0 DOWNLOAD MICROCODE command*/ /* 1 * DMA QUEUED command */ /* 2 CFA feature set */ /* 3 APM feature set */ /* 4 Removable media status */ /* 5 Powerup in standby */ /* 6 SET FEATURES to spinup */ /* 7 reserved */ /* 8 SET MAX security extn */ /* 9 automatic acoustic manage */ u16 word84; /* 084: feature support */ u16 word85; /* 085: feature enabled */ /* 0 SMART */ /* 1 Security mode */ /* 2 Removable media */ /* 3 Power management */ /* 4 unused */ /* 5 write cache */ /* 6 look-ahead */ /* 7 release interrupt */ /* 8 service interrupt */ /* 9 DEVICE RESET command */ /* 10 host protected area */ /* 11 obsolete */ /* 12 WRITE BUFFER command */ /* 13 READ BUFFER command */ /* 14 NOP command */ /* 15 obsolete */ u16 word86; /* 086: feature enabled */ /* 0 DOWNLOAD MICROCODE command*/ /* 1 * DMA QUEUED command */ /* 2 CFA feature set */ /* 3 APM feature set */ /* 4 Removable media status */ /* 5 Powerup in standby */ /* 6 SET FEATURES to spinup */ /* 7 reserved */ /* 8 SET MAX security extn */ /* 9 automatic acoustic manage */ u16 word87; /* 087: feature enabled */ u16 dma_ultra; /* 088: ultra dma modes */ u16 reserved[256-89];};#define ID_NOT_ATA_DEV(id) ((id)->gen_cfg & (1 << 15))#define ID_REMOVABLE_MEDIA(id) ((id)->gen_cfg & (1 << 7))#define ID_INCOMPLETE(id) ((id)->gen_cfg & (1 << 2))#define ID_CURLOGGEO_VALID(id) ((id)->field_valid & (1 << 0))#define ID_PIODMA_VALID(id) ((id)->field_valid & (1 << 1))#define ID_UDMA_VALID(id) ((id)->field_valid & (1 << 2))struct ide_drive;struct ide_hw;struct dma_hw { u32 vendev; const char *name; int split_cfg:1; int (*check)(struct pci_dev *); void (*init)(struct ide_hw *); void (*setup_dma)(struct ide_drive *, struct hd_driveid *);};struct ide_hw { unsigned int regs[9]; /* IO register addresses */ unsigned int dma_base; /* IO dma base address */ struct pci_dev *dev; /* PCI device */ const struct dma_hw *dma; /* DMA information */ struct ide_drive *drive[2]; /* Master & Slave Drives */ u8 ifnr; /* interface number */ u8 statusreg; /* status register */};struct ide_drive { struct ide_hw *hw; /* hardware */ struct hd_driveid id; unsigned int sect; unsigned int head; unsigned int cyl; unsigned int capacity; u8 select; u8 statusreg; /* status register */ u8 dma_speed; u8 pio_speed; char name; u8 dma:2; u8 lba:1; u8 iordy:1; u8 slave:1;};#define ide_inb(h,x) pci_io_read_byte((h)->regs[(x)])#define ide_outb(h,w,x) pci_io_write_byte((w), (h)->regs[(x)])#define ide_inw(h,x) pci_io_read_word((h)->regs[(x)])#define ide_outw(h,w,x) pci_io_write_word((w), (h)->regs[(x)])#define ide_inl(h,x) pci_io_read_long((h)->regs[(x)])#define ide_outl(h,w,x) pci_io_write_long((w), (h)->regs[(x)])#define ide_in_dma(h,x) pci_io_read_byte((h)->dma_base)#define ide_out_dma(h,w,x) pci_io_write_byte((w), (h)->dma_base)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -