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

📄 ide.h

📁 1. 8623L平台
💻 H
字号:
/***************************************** Copyright (c) 2003 Sigma Designs, Inc. All Rights Reserved Proprietary and Confidential *****************************************//* This file is part of the MAMBO boot loader *//* * ide.h * * IDE controller * * by Ho Lee 03/12/2003 */#ifndef __BOOTLOADER_IDE_H#define __BOOTLOADER_IDE_H// sector#define SECTOR_SIZE			512#define SECTOR_WORDS		(SECTOR_SIZE / 4)	/* number of 32bit words per sector */#if 0// ID structurestruct hd_driveid {	unsigned short	config;		/* lots of obsolete bit flags */	unsigned short	cyls;		/* Obsolete, "physical" cyls */	unsigned short	reserved2;	/* reserved (word 2) */	unsigned short	heads;		/* Obsolete, "physical" heads */	unsigned short	track_bytes;	/* unformatted bytes per track */	unsigned short	sector_bytes;	/* unformatted bytes per sector */	unsigned short	sectors;	/* Obsolete, "physical" sectors per track */	unsigned short	vendor0;	/* vendor unique */	unsigned short	vendor1;	/* vendor unique */	unsigned short	vendor2;	/* Retired vendor unique */	unsigned char	serial_no[20];	/* 0 = not_specified */	unsigned short	buf_type;	/* Retired */	unsigned short	buf_size;	/* Retired, 512 byte increments					 * 0 = not_specified					 */	unsigned short	ecc_bytes;	/* for r/w long cmds; 0 = not_specified */	unsigned char	fw_rev[8];	/* 0 = not_specified */	unsigned char	model[40];	/* 0 = not_specified */	unsigned char	max_multsect;	/* 0=not_implemented */	unsigned char	vendor3;	/* vendor unique */	unsigned short	dword_io;	/* 0=not_implemented; 1=implemented */	unsigned char	vendor4;	/* vendor unique */	unsigned char	capability;	/* (upper byte of word 49)					 *  3:	IORDYsup					 *  2:	IORDYsw					 *  1:	LBA					 *  0:	DMA					 */	unsigned short	reserved50;	/* reserved (word 50) */	unsigned char	vendor5;	/* Obsolete, vendor unique */	unsigned char	tPIO;		/* Obsolete, 0=slow, 1=medium, 2=fast */	unsigned char	vendor6;	/* Obsolete, vendor unique */	unsigned char	tDMA;		/* Obsolete, 0=slow, 1=medium, 2=fast */	unsigned short	field_valid;	/* (word 53)					 *  2:	ultra_ok	word  88					 *  1:	eide_ok		words 64-70					 *  0:	cur_ok		words 54-58					 */	unsigned short	cur_cyls;	/* Obsolete, logical cylinders */	unsigned short	cur_heads;	/* Obsolete, l heads */	unsigned short	cur_sectors;	/* Obsolete, l sectors per track */	unsigned short	cur_capacity0;	/* Obsolete, l total sectors on drive */	unsigned short	cur_capacity1;	/* Obsolete, (2 words, misaligned int)     */	unsigned char	multsect;	/* current multiple sector count */	unsigned char	multsect_valid;	/* when (bit0==1) multsect is ok */	unsigned int	lba_capacity;	/* Obsolete, total number of sectors */	unsigned short	dma_1word;	/* Obsolete, single-word dma info */	unsigned short	dma_mword;	/* multiple-word dma info */	unsigned short  eide_pio_modes; /* bits 0:mode3 1:mode4 */	unsigned short  eide_dma_min;	/* min mword dma cycle time (ns) */	unsigned short  eide_dma_time;	/* recommended mword dma cycle time (ns) */	unsigned short  eide_pio;       /* min cycle time (ns), no IORDY  */	unsigned short  eide_pio_iordy; /* min cycle time (ns), with IORDY */	unsigned short	words69_70[2];	/* reserved words 69-70					 * future command overlap and queuing					 */	/* HDIO_GET_IDENTITY currently returns only words 0 through 70 */	unsigned short	words71_74[4];	/* reserved words 71-74					 * for IDENTIFY PACKET DEVICE command					 */	unsigned short  queue_depth;	/* (word 75)					 * 15:5	reserved					 *  4:0	Maximum queue depth -1					 */	unsigned short  words76_79[4];	/* reserved words 76-79 */	unsigned short  major_rev_num;	/* (word 80) */	unsigned short  minor_rev_num;	/* (word 81) */	unsigned short  command_set_1;	/* (word 82) supported					 * 15:	Obsolete					 * 14:	NOP command					 * 13:	READ_BUFFER					 * 12:	WRITE_BUFFER					 * 11:	Obsolete					 * 10:	Host Protected Area					 *  9:	DEVICE Reset					 *  8:	SERVICE Interrupt					 *  7:	Release Interrupt					 *  6:	look-ahead					 *  5:	write cache					 *  4:	PACKET Command					 *  3:	Power Management Feature Set					 *  2:	Removable Feature Set					 *  1:	Security Feature Set					 *  0:	SMART Feature Set					 */	unsigned short  command_set_2;	/* (word 83)					 * 15:	Shall be ZERO					 * 14:	Shall be ONE					 * 13:	FLUSH CACHE EXT					 * 12:	FLUSH CACHE					 * 11:	Device Configuration Overlay					 * 10:	48-bit Address Feature Set					 *  9:	Automatic Acoustic Management					 *  8:	SET MAX security					 *  7:	reserved 1407DT PARTIES					 *  6:	SetF sub-command Power-Up					 *  5:	Power-Up in Standby Feature Set					 *  4:	Removable Media Notification					 *  3:	APM Feature Set					 *  2:	CFA Feature Set					 *  1:	READ/WRITE DMA QUEUED					 *  0:	Download MicroCode					 */	unsigned short  cfsse;		/* (word 84)					 * cmd set-feature supported extensions					 * 15:	Shall be ZERO					 * 14:	Shall be ONE					 * 13:3	reserved					 *  2:	Media Serial Number Valid					 *  1:	SMART selt-test supported					 *  0:	SMART error logging					 */	unsigned short  cfs_enable_1;	/* (word 85)					 * command set-feature enabled					 * 15:	Obsolete					 * 14:	NOP command					 * 13:	READ_BUFFER					 * 12:	WRITE_BUFFER					 * 11:	Obsolete					 * 10:	Host Protected Area					 *  9:	DEVICE Reset					 *  8:	SERVICE Interrupt					 *  7:	Release Interrupt					 *  6:	look-ahead					 *  5:	write cache					 *  4:	PACKET Command					 *  3:	Power Management Feature Set					 *  2:	Removable Feature Set					 *  1:	Security Feature Set					 *  0:	SMART Feature Set					 */	unsigned short  cfs_enable_2;	/* (word 86)					 * command set-feature enabled					 * 15:	Shall be ZERO					 * 14:	Shall be ONE					 * 13:	FLUSH CACHE EXT					 * 12:	FLUSH CACHE					 * 11:	Device Configuration Overlay					 * 10:	48-bit Address Feature Set					 *  9:	Automatic Acoustic Management					 *  8:	SET MAX security					 *  7:	reserved 1407DT PARTIES					 *  6:	SetF sub-command Power-Up					 *  5:	Power-Up in Standby Feature Set					 *  4:	Removable Media Notification					 *  3:	APM Feature Set					 *  2:	CFA Feature Set					 *  1:	READ/WRITE DMA QUEUED					 *  0:	Download MicroCode					 */	unsigned short  csf_default;	/* (word 87)					 * command set-feature default					 * 15:	Shall be ZERO					 * 14:	Shall be ONE					 * 13:3	reserved					 *  2:	Media Serial Number Valid					 *  1:	SMART selt-test supported					 *  0:	SMART error logging					 */	unsigned short  dma_ultra;	/* (word 88) */	unsigned short	word89;		/* reserved (word 89) */	unsigned short	word90;		/* reserved (word 90) */	unsigned short	CurAPMvalues;	/* current APM values */	unsigned short	word92;		/* reserved (word 92) */	unsigned short	hw_config;	/* hardware config (word 93)					 * 15:					 * 14:					 * 13:					 * 12:					 * 11:					 * 10:					 *  9:					 *  8:					 *  7:					 *  6:					 *  5:					 *  4:					 *  3:					 *  2:					 *  1:					 *  0:					 */	unsigned short	acoustic;	/* (word 94)					 * 15:8	Vendor's recommended value					 *  7:0	current value					 */	unsigned short	words95_99[5];	/* reserved words 95-99 */#if 0	unsigned short	words100_103[4]	;/* reserved words 100-103 */#else	unsigned long long lba_capacity_2;/* 48-bit total number of sectors */#endif	unsigned short	words104_125[22];/* reserved words 104-125 */	unsigned short	last_lun;	/* (word 126) */	unsigned short	word127;	/* (word 127) Feature Set					 * Removable Media Notification					 * 15:2	reserved					 *  1:0	00 = not supported					 *	01 = supported					 *	10 = reserved					 *	11 = reserved					 */	unsigned short	dlf;		/* (word 128)					 * device lock function					 * 15:9	reserved					 *  8	security level 1:max 0:high					 *  7:6	reserved					 *  5	enhanced erase					 *  4	expire					 *  3	frozen					 *  2	locked					 *  1	en/disabled					 *  0	capability					 */	unsigned short  csfo;		/*  (word 129)					 * current set features options					 * 15:4	reserved					 *  3:	auto reassign					 *  2:	reverting					 *  1:	read-look-ahead					 *  0:	write cache					 */	unsigned short	words130_155[26];/* reserved vendor words 130-155 */	unsigned short	word156;	/* reserved vendor word 156 */	unsigned short	words157_159[3];/* reserved vendor words 157-159 */	unsigned short	cfa_power;	/* (word 160) CFA Power Mode					 * 15 word 160 supported					 * 14 reserved					 * 13					 * 12					 * 11:0					 */	unsigned short	words161_175[14];/* Reserved for CFA */	unsigned short	words176_205[31];/* Current Media Serial Number */	unsigned short	words206_254[48];/* reserved words 206-254 */	unsigned short	integrity_word;	/* (word 255)					 * 15:8 Checksum					 *  7:0 Signature					 */};#endif//// IDE information structure//#define MAX_CONTROLLER		6#define MAX_DRIVES			(MAX_CONTROLLER * 2)#define MAX_DRIVES_MASK		((1 << MAX_DRIVES) - 1)#define IDE_CONTROLLER(x)	((x) >> 1)#define IDE_DRIVE(x)		((x) & 0x01)#define MAX_PARTITIONS		16typedef union {	unsigned all			: 8;	/* all of the bits together */	struct {		unsigned head		: 4;	/* always zeros here */		unsigned unit		: 1;	/* drive select number, 0 or 1 */		unsigned bit5		: 1;	/* always 1 */		unsigned lba		: 1;	/* using LBA instead of CHS */		unsigned bit7		: 1;	/* always 1 */	} b;} select_t;typedef struct {	int type;	int cyls;	int heads;	int sectors;	int lba;	int nsectors;	int size;	struct hd_driveid id;	select_t select;	int cap_dma, cap_udma;} ide_info_t;extern ide_info_t g_ideinfo[MAX_DRIVES];// IDE typeenum { IDE_NONE, IDE_ATA, IDE_ATAPI, IDE_ALL };// function prototypeint ide_init(void);int ide_found(int mask);int ide_probe(int drivemask, int verbose);// identifyide_info_t *ide_identify(int drive);// other commandsint ide_set_drive_speed(int drive, int speed);// read & writeint ide_rw_sector(int read, int dma, int drive, int cyl, int head, int sector, unsigned char *buf);int ide_rw_block(int read, int dma, int drive, int block, unsigned char *buf, int nsector);int ide_rw_dma_block(int read, int drive, int block, unsigned char *buf, int nsector);// partition tableint ide_read_partition(int drive, int *sectors, int showlist);int ide_rw_block_partition(int read, int dma, int drive, int partition, int block, unsigned char *buf, int nsector);// image I/Oenum { IMAGE_TYPE_NONE, IMAGE_TYPE_KERNEL, IMAGE_TYPE_ROMFS };#define IMAGE_SIGNATURE			"Sigma Designs"#define IMAGE_ID_KERNEL			"Kernel"#define IMAGE_ID_ROMFS			"ROMFS"typedef union {	unsigned char data[SECTOR_SIZE];	struct {		unsigned char dummy[16];		unsigned char signature[16];		unsigned char id[8];		unsigned short major, minor;		unsigned int len;	} u;} image_infoblock_t;int ide_probe_image(int drive, int *ppart, void *pinfo);int ide_check_image(int drive, int part, void *pinfo);int ide_read_image(int type, int drive, int part, unsigned char *buf);int ide_write_image(int type, int drive, int part, unsigned char *buf, int len);void ide_test(int drive, int part);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -