⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ide.h

📁 开源的BIOS启动软件
💻 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 + -