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

📄 sym53c8xx_comm.h

📁 linux和2410结合开发 用他可以生成2410所需的zImage文件
💻 H
📖 第 1 页 / 共 5 页
字号:
	   1/2/4 out */	gpreg = old_gpreg & 0xe9;	OUTB (nc_gpreg, gpreg);	gpcntl = (old_gpcntl & 0xe9) | 0x09;	OUTB (nc_gpcntl, gpcntl);	/* input all of NVRAM, 64 words */	retv = T93C46_Read_Data(np, (u_short *) nvram,				sizeof(*nvram) / sizeof(short), &gpreg);		/* return GPIO0/1/2/4 to original states after having accessed NVRAM */	OUTB (nc_gpcntl, old_gpcntl);	OUTB (nc_gpreg,  old_gpreg);	return retv;}/* *  Try reading Tekram NVRAM. *  Return 0 if OK. */static int __init sym_read_Tekram_nvram (ncr_slot *np, u_short device_id, Tekram_nvram *nvram){	u_char *data = (u_char *) nvram;	int len = sizeof(*nvram);	u_short	csum;	int x;	switch (device_id) {	case PCI_DEVICE_ID_NCR_53C885:	case PCI_DEVICE_ID_NCR_53C895:	case PCI_DEVICE_ID_NCR_53C896:		x = sym_read_S24C16_nvram(np, TEKRAM_24C16_NVRAM_ADDRESS,					  data, len);		break;	case PCI_DEVICE_ID_NCR_53C875:		x = sym_read_S24C16_nvram(np, TEKRAM_24C16_NVRAM_ADDRESS,					  data, len);		if (!x)			break;	default:		x = sym_read_T93C46_nvram(np, nvram);		break;	}	if (x)		return 1;	/* verify checksum */	for (x = 0, csum = 0; x < len - 1; x += 2)		csum += data[x] + (data[x+1] << 8);	if (csum != 0x1234)		return 1;	return 0;}#endif	/* SCSI_NCR_NVRAM_SUPPORT *//*===================================================================****    Detect and try to read SYMBIOS and TEKRAM NVRAM.****    Data can be used to order booting of boards.****    Data is saved in ncr_device structure if NVRAM found. This**    is then used to find drive boot order for ncr_attach().****    NVRAM data is passed to Scsi_Host_Template later during **    ncr_attach() for any device set up.****===================================================================*/#ifdef SCSI_NCR_NVRAM_SUPPORTstatic void __init ncr_get_nvram(ncr_device *devp, ncr_nvram *nvp){	devp->nvram = nvp;	if (!nvp)		return;	/*	**    Get access to chip IO registers	*/#ifdef SCSI_NCR_IOMAPPED	request_region(devp->slot.io_port, 128, NAME53C8XX);	devp->slot.base_io = devp->slot.io_port;#else	devp->slot.reg = 		(struct ncr_reg *) remap_pci_mem(devp->slot.base_c, 128);	if (!devp->slot.reg)		return;#endif	/*	**    Try to read SYMBIOS nvram.	**    Try to read TEKRAM nvram if Symbios nvram not found.	*/	if	(!sym_read_Symbios_nvram(&devp->slot, &nvp->data.Symbios))		nvp->type = SCSI_NCR_SYMBIOS_NVRAM;	else if	(!sym_read_Tekram_nvram(&devp->slot, devp->chip.device_id,					&nvp->data.Tekram))		nvp->type = SCSI_NCR_TEKRAM_NVRAM;	else {		nvp->type = 0;		devp->nvram = 0;	}	/*	** Release access to chip IO registers	*/#ifdef SCSI_NCR_IOMAPPED	release_region(devp->slot.base_io, 128);#else	unmap_pci_mem((u_long) devp->slot.reg, 128ul);#endif}/*===================================================================****	Display the content of NVRAM for debugging purpose.****===================================================================*/#ifdef	SCSI_NCR_DEBUG_NVRAMstatic void __init ncr_display_Symbios_nvram(Symbios_nvram *nvram){	int i;	/* display Symbios nvram host data */	printk(KERN_DEBUG NAME53C8XX ": HOST ID=%d%s%s%s%s%s\n",		nvram->host_id & 0x0f,		(nvram->flags  & SYMBIOS_SCAM_ENABLE)	? " SCAM"	:"",		(nvram->flags  & SYMBIOS_PARITY_ENABLE)	? " PARITY"	:"",		(nvram->flags  & SYMBIOS_VERBOSE_MSGS)	? " VERBOSE"	:"", 		(nvram->flags  & SYMBIOS_CHS_MAPPING)	? " CHS_ALT"	:"", 		(nvram->flags1 & SYMBIOS_SCAN_HI_LO)	? " HI_LO"	:"");	/* display Symbios nvram drive data */	for (i = 0 ; i < 15 ; i++) {		struct Symbios_target *tn = &nvram->target[i];		printk(KERN_DEBUG NAME53C8XX 		"-%d:%s%s%s%s WIDTH=%d SYNC=%d TMO=%d\n",		i,		(tn->flags & SYMBIOS_DISCONNECT_ENABLE)	? " DISC"	: "",		(tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME)	? " SCAN_BOOT"	: "",		(tn->flags & SYMBIOS_SCAN_LUNS)		? " SCAN_LUNS"	: "",		(tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED)? " TCQ"	: "",		tn->bus_width,		tn->sync_period / 4,		tn->timeout);	}}static u_char Tekram_boot_delay[7] __initdata = {3, 5, 10, 20, 30, 60, 120};static void __init ncr_display_Tekram_nvram(Tekram_nvram *nvram){	int i, tags, boot_delay;	char *rem;	/* display Tekram nvram host data */	tags = 2 << nvram->max_tags_index;	boot_delay = 0;	if (nvram->boot_delay_index < 6)		boot_delay = Tekram_boot_delay[nvram->boot_delay_index];	switch((nvram->flags & TEKRAM_REMOVABLE_FLAGS) >> 6) {	default:	case 0:	rem = "";			break;	case 1: rem = " REMOVABLE=boot device";	break;	case 2: rem = " REMOVABLE=all";		break;	}	printk(KERN_DEBUG NAME53C8XX		": HOST ID=%d%s%s%s%s%s%s%s%s%s BOOT DELAY=%d tags=%d\n",		nvram->host_id & 0x0f,		(nvram->flags1 & SYMBIOS_SCAM_ENABLE)	? " SCAM"	:"",		(nvram->flags & TEKRAM_MORE_THAN_2_DRIVES) ? " >2DRIVES":"",		(nvram->flags & TEKRAM_DRIVES_SUP_1GB)	? " >1GB"	:"",		(nvram->flags & TEKRAM_RESET_ON_POWER_ON) ? " RESET"	:"",		(nvram->flags & TEKRAM_ACTIVE_NEGATION)	? " ACT_NEG"	:"",		(nvram->flags & TEKRAM_IMMEDIATE_SEEK)	? " IMM_SEEK"	:"",		(nvram->flags & TEKRAM_SCAN_LUNS)	? " SCAN_LUNS"	:"",		(nvram->flags1 & TEKRAM_F2_F6_ENABLED)	? " F2_F6"	:"",		rem, boot_delay, tags);	/* display Tekram nvram drive data */	for (i = 0; i <= 15; i++) {		int sync, j;		struct Tekram_target *tn = &nvram->target[i];		j = tn->sync_index & 0xf;		sync = Tekram_sync[j];		printk(KERN_DEBUG NAME53C8XX "-%d:%s%s%s%s%s%s PERIOD=%d\n",		i,		(tn->flags & TEKRAM_PARITY_CHECK)	? " PARITY"	: "",		(tn->flags & TEKRAM_SYNC_NEGO)		? " SYNC"	: "",		(tn->flags & TEKRAM_DISCONNECT_ENABLE)	? " DISC"	: "",		(tn->flags & TEKRAM_START_CMD)		? " START"	: "",		(tn->flags & TEKRAM_TAGGED_COMMANDS)	? " TCQ"	: "",		(tn->flags & TEKRAM_WIDE_NEGO)		? " WIDE"	: "",		sync);	}}#endif /* SCSI_NCR_DEBUG_NVRAM */#endif	/* SCSI_NCR_NVRAM_SUPPORT *//*===================================================================****	Utility routines that protperly return data through /proc FS.****===================================================================*/#ifdef SCSI_NCR_USER_INFO_SUPPORTstruct info_str{	char *buffer;	int length;	int offset;	int pos;};static void copy_mem_info(struct info_str *info, char *data, int len){	if (info->pos + len > info->length)		len = info->length - info->pos;	if (info->pos + len < info->offset) {		info->pos += len;		return;	}	if (info->pos < info->offset) {		data += (info->offset - info->pos);		len  -= (info->offset - info->pos);	}	if (len > 0) {		memcpy(info->buffer + info->pos, data, len);		info->pos += len;	}}static int copy_info(struct info_str *info, char *fmt, ...){	va_list args;	char buf[81];	int len;	va_start(args, fmt);	len = vsprintf(buf, fmt, args);	va_end(args);	copy_mem_info(info, buf, len);	return len;}#endif/*===================================================================****	Driver setup from the boot command line****===================================================================*/#ifdef MODULE#define	ARG_SEP	' '#else#define	ARG_SEP	','#endif#define OPT_TAGS		1#define OPT_MASTER_PARITY	2#define OPT_SCSI_PARITY		3#define OPT_DISCONNECTION	4#define OPT_SPECIAL_FEATURES	5#define OPT_UNUSED_1		6#define OPT_FORCE_SYNC_NEGO	7#define OPT_REVERSE_PROBE	8#define OPT_DEFAULT_SYNC	9#define OPT_VERBOSE		10#define OPT_DEBUG		11#define OPT_BURST_MAX		12#define OPT_LED_PIN		13#define OPT_MAX_WIDE		14#define OPT_SETTLE_DELAY	15#define OPT_DIFF_SUPPORT	16#define OPT_IRQM		17#define OPT_PCI_FIX_UP		18#define OPT_BUS_CHECK		19#define OPT_OPTIMIZE		20#define OPT_RECOVERY		21#define OPT_SAFE_SETUP		22#define OPT_USE_NVRAM		23#define OPT_EXCLUDE		24#define OPT_HOST_ID		25#ifdef SCSI_NCR_IARB_SUPPORT#define OPT_IARB		26#endifstatic char setup_token[] __initdata = 	"tags:"   "mpar:"	"spar:"   "disc:"	"specf:"  "ultra:"	"fsn:"    "revprob:"	"sync:"   "verb:"	"debug:"  "burst:"	"led:"    "wide:"	"settle:" "diff:"	"irqm:"   "pcifix:"	"buschk:" "optim:"	"recovery:"	"safe:"   "nvram:"	"excl:"   "hostid:"#ifdef SCSI_NCR_IARB_SUPPORT	"iarb:"#endif	;	/* DONNOT REMOVE THIS ';' */#ifdef MODULE#define	ARG_SEP	' '#else#define	ARG_SEP	','#endifstatic int __init get_setup_token(char *p){	char *cur = setup_token;	char *pc;	int i = 0;	while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {		++pc;		++i;		if (!strncmp(p, cur, pc - cur))			return i;		cur = pc;	}	return 0;}static int __init sym53c8xx__setup(char *str){#ifdef SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT	char *cur = str;	char *pc, *pv;	int i, val, c;	int xi = 0;	while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {		char *pe;		val = 0;		pv = pc;		c = *++pv;		if	(c == 'n')			val = 0;		else if	(c == 'y')			val = 1;		else			val = (int) simple_strtoul(pv, &pe, 0);		switch (get_setup_token(cur)) {		case OPT_TAGS:			driver_setup.default_tags = val;			if (pe && *pe == '/') {				i = 0;				while (*pe && *pe != ARG_SEP && 					i < sizeof(driver_setup.tag_ctrl)-1) {					driver_setup.tag_ctrl[i++] = *pe++;				}				driver_setup.tag_ctrl[i] = '\0';			}			break;		case OPT_MASTER_PARITY:			driver_setup.master_parity = val;			break;		case OPT_SCSI_PARITY:			driver_setup.scsi_parity = val;			break;		case OPT_DISCONNECTION:			driver_setup.disconnection = val;			break;		case OPT_SPECIAL_FEATURES:			driver_setup.special_features = val;			break;		case OPT_FORCE_SYNC_NEGO:			driver_setup.force_sync_nego = val;			break;		case OPT_REVERSE_PROBE:			driver_setup.reverse_probe = val;			break;		case OPT_DEFAULT_SYNC:			driver_setup.default_sync = val;			break;		case OPT_VERBOSE:			driver_setup.verbose = val;			break;		case OPT_DEBUG:			driver_setup.debug = val;			break;		case OPT_BURST_MAX:			driver_setup.burst_max = val;			break;		case OPT_LED_PIN:			driver_setup.led_pin = val;			break;		case OPT_MAX_WIDE:			driver_setup.max_wide = val? 1:0;			break;		case OPT_SETTLE_DELAY:			driver_setup.settle_delay = val;			break;		case OPT_DIFF_SUPPORT:			driver_setup.diff_support = val;			break;		case OPT_IRQM:			driver_setup.irqm = val;			break;		case OPT_PCI_FIX_UP:			driver_setup.pci_fix_up	= val;			break;		case OPT_BUS_CHECK:			driver_setup.bus_check = val;			break;		case OPT_OPTIMIZE:			driver_setup.optimize = val;			break;		case OPT_RECOVERY:			driver_setup.recovery = val;			break;		case OPT_USE_NVRAM:			driver_setup.use_nvram = val;			break;		case OPT_SAFE_SETUP:			memcpy(&driver_setup, &driver_safe_setup,				sizeof(driver_setup));			break;		case OPT_EXCLUDE:			if (xi < SCSI_NCR_MAX_EXCLUDES)				driver_setup.excludes[xi++] = val;			break;		case OPT_HOST_ID:			driver_setup.host_id = val;			break;#ifdef SCSI_NCR_IARB_SUPPORT		case OPT_IARB:			driver_setup.iarb = val;			break;#endif		default:			printk("sym53c8xx_setup: unexpected boot option '%.*s' ignored\n", (int)(pc-cur+1), cur);			break;		}		if ((cur = strchr(cur, ARG_SEP)) != NULL)			++cur;	}#endif /* SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT */	return 1;}/*===================================================================****	Get device queue depth from boot command line.****===================================================================*/#define DEF_DEPTH	(driver_setup.default_tags)#define ALL_TARGETS	-2#define NO_TARGET	-1#define ALL_LUNS	-2#define NO_LUN		-1static int device_queue_depth(int unit, int target, int lun){	int c, h, t, u, v;	char *p = driver_setup.tag_ctrl;	char *ep;	h = -1;	t = NO_TARGET;	u = NO_LUN;	while ((c = *p++) != 0) {		v = simple_strtoul(p, &ep, 0);		switch(c) {		case '/':			++h;			t = ALL_TARGETS;			u = ALL_LUNS;			break;		case 't':			if (t != target)				t = (target == v) ? v : NO_TARGET;			u = ALL_LUNS;			break;		case 'u':			if (u != lun)				u = (lun == v) ? v : NO_LUN;			break;		case 'q':			if (h == unit &&				(t == ALL_TARGETS || t == target) &&				(u == ALL_LUNS    || u == lun))				return v;			break;		case '-':			t = ALL_TARGETS;			u = ALL_LUNS;			break;		default:			break;

⌨️ 快捷键说明

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