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

📄 ide_modes.h

📁 em85xx的大硬盘修正代码包
💻 H
字号:
/* *  linux/drivers/ide/ide_modes.h * *  Copyright (C) 1996  Linus Torvalds, Igor Abramov, and Mark Lord */#ifndef _IDE_MODES_H#define _IDE_MODES_H#include <linux/config.h>/* * Shared data/functions for determining best PIO mode for an IDE drive. * Most of this stuff originally lived in cmd640.c, and changes to the * ide_pio_blacklist[] table should be made with EXTREME CAUTION to avoid * breaking the fragile cmd640.c support. */#ifdef CONFIG_BLK_DEV_IDE_MODES/* * Standard (generic) timings for PIO modes, from ATA2 specification. * These timings are for access to the IDE data port register *only*. * Some drives may specify a mode, while also specifying a different * value for cycle_time (from drive identification data). */typedef struct ide_pio_timings_s {	int	setup_time;	/* Address setup (ns) minimum */	int	active_time;	/* Active pulse (ns) minimum */	int	cycle_time;	/* Cycle time (ns) minimum = (setup + active + recovery) */} ide_pio_timings_t;typedef struct ide_pio_data_s {	byte pio_mode;	byte use_iordy;	byte overridden;	byte blacklisted;	unsigned int cycle_time;} ide_pio_data_t;	#ifndef _IDE_Cint ide_scan_pio_blacklist (char *model);byte ide_get_best_pio_mode (ide_drive_t *drive, byte mode_wanted, byte max_mode, ide_pio_data_t *d);extern const ide_pio_timings_t ide_pio_timings[6];#else /* _IDE_C */const ide_pio_timings_t ide_pio_timings[6] = {	{ 70,	165,	600 },	/* PIO Mode 0 */	{ 50,	125,	383 },	/* PIO Mode 1 */	{ 30,	100,	240 },	/* PIO Mode 2 */	{ 30,	80,	180 },	/* PIO Mode 3 with IORDY */	{ 25,	70,	120 },	/* PIO Mode 4 with IORDY */	{ 20,	50,	100 }	/* PIO Mode 5 with IORDY (nonstandard) */};/* * Black list. Some drives incorrectly report their maximal PIO mode, * at least in respect to CMD640. Here we keep info on some known drives. */static struct ide_pio_info {	const char	*name;	int		pio;} ide_pio_blacklist [] = {/*	{ "Conner Peripherals 1275MB - CFS1275A", 4 }, */	{ "Conner Peripherals 540MB - CFS540A", 3 },	{ "WDC AC2700",  3 },	{ "WDC AC2540",  3 },	{ "WDC AC2420",  3 },	{ "WDC AC2340",  3 },	{ "WDC AC2250",  0 },	{ "WDC AC2200",  0 },	{ "WDC AC21200", 4 },	{ "WDC AC2120",  0 },	{ "WDC AC2850",  3 },	{ "WDC AC1270",  3 },	{ "WDC AC1170",  1 },	{ "WDC AC1210",  1 },	{ "WDC AC280",   0 },/*	{ "WDC AC21000", 4 }, */	{ "WDC AC31000", 3 },	{ "WDC AC31200", 3 },/*	{ "WDC AC31600", 4 }, */	{ "Maxtor 7131 AT", 1 },	{ "Maxtor 7171 AT", 1 },	{ "Maxtor 7213 AT", 1 },	{ "Maxtor 7245 AT", 1 },	{ "Maxtor 7345 AT", 1 },	{ "Maxtor 7546 AT", 3 },	{ "Maxtor 7540 AV", 3 },	{ "SAMSUNG SHD-3121A", 1 },	{ "SAMSUNG SHD-3122A", 1 },	{ "SAMSUNG SHD-3172A", 1 },/*	{ "ST51080A", 4 }, *	{ "ST51270A", 4 }, *	{ "ST31220A", 4 }, *	{ "ST31640A", 4 }, *	{ "ST32140A", 4 }, *	{ "ST3780A",  4 }, */	{ "ST5660A",  3 },	{ "ST3660A",  3 },	{ "ST3630A",  3 },	{ "ST3655A",  3 },	{ "ST3391A",  3 },	{ "ST3390A",  1 },	{ "ST3600A",  1 },	{ "ST3290A",  0 },	{ "ST3144A",  0 },	{ "ST3491A",  1 },	/* reports 3, should be 1 or 2 (depending on */					/* drive) according to Seagates FIND-ATA program */	{ "QUANTUM ELS127A", 0 },	{ "QUANTUM ELS170A", 0 },	{ "QUANTUM LPS240A", 0 },	{ "QUANTUM LPS210A", 3 },	{ "QUANTUM LPS270A", 3 },	{ "QUANTUM LPS365A", 3 },	{ "QUANTUM LPS540A", 3 },	{ "QUANTUM LIGHTNING 540A", 3 },	{ "QUANTUM LIGHTNING 730A", 3 },        { "QUANTUM FIREBALL_540", 3 }, /* Older Quantum Fireballs don't work */        { "QUANTUM FIREBALL_640", 3 },         { "QUANTUM FIREBALL_1080", 3 },        { "QUANTUM FIREBALL_1280", 3 },	{ NULL,	0 }};/* * This routine searches the ide_pio_blacklist for an entry * matching the start/whole of the supplied model name. * * Returns -1 if no match found. * Otherwise returns the recommended PIO mode from ide_pio_blacklist[]. */int ide_scan_pio_blacklist (char *model){	struct ide_pio_info *p;	for (p = ide_pio_blacklist; p->name != NULL; p++) {		if (strncmp(p->name, model, strlen(p->name)) == 0)			return p->pio;	}	return -1;}/* * This routine returns the recommended PIO settings for a given drive, * based on the drive->id information and the ide_pio_blacklist[]. * This is used by most chipset support modules when "auto-tuning". *//* * Drive PIO mode auto selection */byte ide_get_best_pio_mode (ide_drive_t *drive, byte mode_wanted, byte max_mode, ide_pio_data_t *d){	int pio_mode;	int cycle_time = 0;	int use_iordy = 0;	struct hd_driveid* id = drive->id;	int overridden  = 0;	int blacklisted = 0;	if (mode_wanted != 255) {		pio_mode = mode_wanted;	} else if (!drive->id) {		pio_mode = 0;	} else if ((pio_mode = ide_scan_pio_blacklist(id->model)) != -1) {		overridden = 1;		blacklisted = 1;		use_iordy = (pio_mode > 2);	} else {		pio_mode = id->tPIO;		if (pio_mode > 2) {	/* 2 is maximum allowed tPIO value */			pio_mode = 2;			overridden = 1;		}		if (id->field_valid & 2) {	  /* drive implements ATA2? */			if (id->capability & 8) { /* drive supports use_iordy? */				use_iordy = 1;				cycle_time = id->eide_pio_iordy;				if (id->eide_pio_modes & 7) {					overridden = 0;					if (id->eide_pio_modes & 4)						pio_mode = 5;					else if (id->eide_pio_modes & 2)						pio_mode = 4;					else						pio_mode = 3;				}			} else {				cycle_time = id->eide_pio;			}		}#if 0		if (drive->id->major_rev_num & 0x0004) printk("ATA-2 ");#endif		/*		 * Conservative "downgrade" for all pre-ATA2 drives		 */		if (pio_mode && pio_mode < 4) {			pio_mode--;			overridden = 1;#if 0			use_iordy = (pio_mode > 2);#endif			if (cycle_time && cycle_time < ide_pio_timings[pio_mode].cycle_time)				cycle_time = 0; /* use standard timing */		}	}	if (pio_mode > max_mode) {		pio_mode = max_mode;		cycle_time = 0;	}	if (d) {		d->pio_mode = pio_mode;		d->cycle_time = cycle_time ? cycle_time : ide_pio_timings[pio_mode].cycle_time;		d->use_iordy = use_iordy;		d->overridden = overridden;		d->blacklisted = blacklisted;	}	return pio_mode;}#endif /* _IDE_C */#endif /* CONFIG_BLK_DEV_IDE_MODES */#endif /* _IDE_MODES_H */

⌨️ 快捷键说明

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