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

📄 aic7xxx_pci.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 4 页
字号:
/* * Product specific probe and attach routines for: *      3940, 2940, aic7895, aic7890, aic7880, *	aic7870, aic7860 and aic7850 SCSI controllers * * Copyright (c) 1994-2001 Justin T. Gibbs. * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions, and the following disclaimer, *    without modification. * 2. Redistributions in binary form must reproduce at minimum a disclaimer *    substantially similar to the "NO WARRANTY" disclaimer below *    ("Disclaimer") and any redistribution must be conditioned upon *    including a substantially similar Disclaimer requirement for further *    binary redistribution. * 3. Neither the names of the above-listed copyright holders nor the names *    of any contributors may be used to endorse or promote products derived *    from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * NO WARRANTY * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_pci.c#32 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx_pci.c,v 1.6 2000/11/10 20:13:41 gibbs Exp $ */#include "aic7xxx_osm.h"#include "aic7xxx_inline.h"#include "aic7xxx_93cx6.h"#define AHC_PCI_IOADDR	PCIR_MAPS	/* I/O Address */#define AHC_PCI_MEMADDR	(PCIR_MAPS + 4)	/* Mem I/O Address */static __inline uint64_tahc_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor){	uint64_t id;	id = subvendor	   | (subdevice << 16)	   | ((uint64_t)vendor << 32)	   | ((uint64_t)device << 48);	return (id);}#define ID_ALL_MASK			0xFFFFFFFFFFFFFFFFull#define ID_DEV_VENDOR_MASK		0xFFFFFFFF00000000ull#define ID_9005_GENERIC_MASK		0xFFF0FFFF00000000ull#define ID_9005_SISL_MASK		0x000FFFFF00000000ull#define ID_9005_SISL_ID			0x0005900500000000ull#define ID_AIC7850			0x5078900400000000ull#define ID_AHA_2902_04_10_15_20_30C	0x5078900478509004ull#define ID_AIC7855			0x5578900400000000ull#define ID_AIC7859			0x3860900400000000ull#define ID_AHA_2930CU			0x3860900438699004ull#define ID_AIC7860			0x6078900400000000ull#define ID_AIC7860C			0x6078900478609004ull#define ID_AHA_1480A			0x6075900400000000ull#define ID_AHA_2940AU_0			0x6178900400000000ull#define ID_AHA_2940AU_1			0x6178900478619004ull#define ID_AHA_2940AU_CN		0x2178900478219004ull#define ID_AHA_2930C_VAR		0x6038900438689004ull#define ID_AIC7870			0x7078900400000000ull#define ID_AHA_2940			0x7178900400000000ull#define ID_AHA_3940			0x7278900400000000ull#define ID_AHA_398X			0x7378900400000000ull#define ID_AHA_2944			0x7478900400000000ull#define ID_AHA_3944			0x7578900400000000ull#define ID_AHA_4944			0x7678900400000000ull#define ID_AIC7880			0x8078900400000000ull#define ID_AIC7880_B			0x8078900478809004ull#define ID_AHA_2940U			0x8178900400000000ull#define ID_AHA_3940U			0x8278900400000000ull#define ID_AHA_2944U			0x8478900400000000ull#define ID_AHA_3944U			0x8578900400000000ull#define ID_AHA_398XU			0x8378900400000000ull#define ID_AHA_4944U			0x8678900400000000ull#define ID_AHA_2940UB			0x8178900478819004ull#define ID_AHA_2930U			0x8878900478889004ull#define ID_AHA_2940U_PRO		0x8778900478879004ull#define ID_AHA_2940U_CN			0x0078900478009004ull#define ID_AIC7895			0x7895900478959004ull#define ID_AIC7895_ARO			0x7890900478939004ull#define ID_AIC7895_ARO_MASK		0xFFF0FFFFFFFFFFFFull#define ID_AHA_2940U_DUAL		0x7895900478919004ull#define ID_AHA_3940AU			0x7895900478929004ull#define ID_AHA_3944AU			0x7895900478949004ull#define ID_AIC7890			0x001F9005000F9005ull#define ID_AIC7890_ARO			0x00139005000F9005ull#define ID_AAA_131U2			0x0013900500039005ull#define ID_AHA_2930U2			0x0011900501819005ull#define ID_AHA_2940U2B			0x00109005A1009005ull#define ID_AHA_2940U2_OEM		0x0010900521809005ull#define ID_AHA_2940U2			0x00109005A1809005ull#define ID_AHA_2950U2B			0x00109005E1009005ull#define ID_AIC7892			0x008F9005FFFF9005ull#define ID_AIC7892_ARO			0x00839005FFFF9005ull#define ID_AHA_29160			0x00809005E2A09005ull#define ID_AHA_29160_CPQ		0x00809005E2A00E11ull#define ID_AHA_29160N			0x0080900562A09005ull#define ID_AHA_29160C			0x0080900562209005ull#define ID_AHA_29160B			0x00809005E2209005ull#define ID_AHA_19160B			0x0081900562A19005ull#define ID_AIC7896			0x005F9005FFFF9005ull#define ID_AIC7896_ARO			0x00539005FFFF9005ull#define ID_AHA_3950U2B_0		0x00509005FFFF9005ull#define ID_AHA_3950U2B_1		0x00509005F5009005ull#define ID_AHA_3950U2D_0		0x00519005FFFF9005ull#define ID_AHA_3950U2D_1		0x00519005B5009005ull#define ID_AIC7899			0x00CF9005FFFF9005ull#define ID_AIC7899_ARO			0x00C39005FFFF9005ull#define ID_AHA_3960D			0x00C09005F6209005ull#define ID_AHA_3960D_CPQ		0x00C09005F6200E11ull#define ID_AIC7810			0x1078900400000000ull#define ID_AIC7815			0x7815900400000000ull#define DEVID_9005_TYPE(id) ((id) & 0xF)#define		DEVID_9005_TYPE_HBA		0x0	/* Standard Card */#define		DEVID_9005_TYPE_AAA		0x3	/* RAID Card */#define		DEVID_9005_TYPE_SISL		0x5	/* Container ROMB */#define		DEVID_9005_TYPE_MB		0xF	/* On Motherboard */#define DEVID_9005_MAXRATE(id) (((id) & 0x30) >> 4)#define		DEVID_9005_MAXRATE_U160		0x0#define		DEVID_9005_MAXRATE_ULTRA2	0x1#define		DEVID_9005_MAXRATE_ULTRA	0x2#define		DEVID_9005_MAXRATE_FAST		0x3#define DEVID_9005_MFUNC(id) (((id) & 0x40) >> 6)#define DEVID_9005_CLASS(id) (((id) & 0xFF00) >> 8)#define		DEVID_9005_CLASS_SPI		0x0	/* Parallel SCSI */#define SUBID_9005_TYPE(id) ((id) & 0xF)#define		SUBID_9005_TYPE_MB		0xF	/* On Motherboard */#define		SUBID_9005_TYPE_CARD		0x0	/* Standard Card */#define		SUBID_9005_TYPE_LCCARD		0x1	/* Low Cost Card */#define		SUBID_9005_TYPE_RAID		0x3	/* Combined with Raid */#define SUBID_9005_TYPE_KNOWN(id)			\	  ((((id) & 0xF) == SUBID_9005_TYPE_MB)		\	|| (((id) & 0xF) == SUBID_9005_TYPE_CARD)	\	|| (((id) & 0xF) == SUBID_9005_TYPE_LCCARD)	\	|| (((id) & 0xF) == SUBID_9005_TYPE_RAID))#define SUBID_9005_MAXRATE(id) (((id) & 0x30) >> 4)#define		SUBID_9005_MAXRATE_ULTRA2	0x0#define		SUBID_9005_MAXRATE_ULTRA	0x1#define		SUBID_9005_MAXRATE_U160		0x2#define		SUBID_9005_MAXRATE_RESERVED	0x3#define SUBID_9005_SEEPTYPE(id)						\	((SUBID_9005_TYPE(id) == SUBID_9005_TYPE_MB)			\	 ? ((id) & 0xC0) >> 6						\	 : ((id) & 0x300) >> 8)#define		SUBID_9005_SEEPTYPE_NONE	0x0#define		SUBID_9005_SEEPTYPE_1K		0x1#define		SUBID_9005_SEEPTYPE_2K_4K	0x2#define		SUBID_9005_SEEPTYPE_RESERVED	0x3#define SUBID_9005_AUTOTERM(id)						\	((SUBID_9005_TYPE(id) == SUBID_9005_TYPE_MB)			\	 ? (((id) & 0x400) >> 10) == 0					\	 : (((id) & 0x40) >> 6) == 0)#define SUBID_9005_NUMCHAN(id)						\	((SUBID_9005_TYPE(id) == SUBID_9005_TYPE_MB)			\	 ? ((id) & 0x300) >> 8						\	 : ((id) & 0xC00) >> 10)#define SUBID_9005_LEGACYCONN(id)					\	((SUBID_9005_TYPE(id) == SUBID_9005_TYPE_MB)			\	 ? 0								\	 : ((id) & 0x80) >> 7)#define SUBID_9005_MFUNCENB(id)						\	((SUBID_9005_TYPE(id) == SUBID_9005_TYPE_MB)			\	 ? ((id) & 0x800) >> 11						\	 : ((id) & 0x1000) >> 12)/* * Informational only. Should use chip register to be * ceratian, but may be use in identification strings. */#define SUBID_9005_CARD_SCSIWIDTH_MASK	0x2000#define SUBID_9005_CARD_PCIWIDTH_MASK	0x4000#define SUBID_9005_CARD_SEDIFF_MASK	0x8000static ahc_device_setup_t ahc_aic785X_setup;static ahc_device_setup_t ahc_aic7860_setup;static ahc_device_setup_t ahc_apa1480_setup;static ahc_device_setup_t ahc_aic7870_setup;static ahc_device_setup_t ahc_aha394X_setup;static ahc_device_setup_t ahc_aha494X_setup;static ahc_device_setup_t ahc_aha398X_setup;static ahc_device_setup_t ahc_aic7880_setup;static ahc_device_setup_t ahc_aha2940Pro_setup;static ahc_device_setup_t ahc_aha394XU_setup;static ahc_device_setup_t ahc_aha398XU_setup;static ahc_device_setup_t ahc_aic7890_setup;static ahc_device_setup_t ahc_aic7892_setup;static ahc_device_setup_t ahc_aic7895_setup;static ahc_device_setup_t ahc_aic7896_setup;static ahc_device_setup_t ahc_aic7899_setup;static ahc_device_setup_t ahc_aha29160C_setup;static ahc_device_setup_t ahc_raid_setup;static ahc_device_setup_t ahc_aha394XX_setup;static ahc_device_setup_t ahc_aha494XX_setup;static ahc_device_setup_t ahc_aha398XX_setup;struct ahc_pci_identity ahc_pci_ident_table [] ={	/* aic7850 based controllers */	{		ID_AHA_2902_04_10_15_20_30C,		ID_ALL_MASK,		"Adaptec 2902/04/10/15/20/30C SCSI adapter",		ahc_aic785X_setup	},	/* aic7860 based controllers */	{		ID_AHA_2930CU,		ID_ALL_MASK,		"Adaptec 2930CU SCSI adapter",		ahc_aic7860_setup	},	{		ID_AHA_1480A & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 1480A Ultra SCSI adapter",		ahc_apa1480_setup	},	{		ID_AHA_2940AU_0 & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 2940A Ultra SCSI adapter",		ahc_aic7860_setup	},	{		ID_AHA_2940AU_CN & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 2940A/CN Ultra SCSI adapter",		ahc_aic7860_setup	},	{		ID_AHA_2930C_VAR & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 2930C Ultra SCSI adapter (VAR)",		ahc_aic7860_setup	},	/* aic7870 based controllers */	{		ID_AHA_2940,		ID_ALL_MASK,		"Adaptec 2940 SCSI adapter",		ahc_aic7870_setup	},	{		ID_AHA_3940,		ID_ALL_MASK,		"Adaptec 3940 SCSI adapter",		ahc_aha394X_setup	},	{		ID_AHA_398X,		ID_ALL_MASK,		"Adaptec 398X SCSI RAID adapter",		ahc_aha398X_setup	},	{		ID_AHA_2944,		ID_ALL_MASK,		"Adaptec 2944 SCSI adapter",		ahc_aic7870_setup	},	{		ID_AHA_3944,		ID_ALL_MASK,		"Adaptec 3944 SCSI adapter",		ahc_aha394X_setup	},	{		ID_AHA_4944,		ID_ALL_MASK,		"Adaptec 4944 SCSI adapter",		ahc_aha494X_setup	},	/* aic7880 based controllers */	{		ID_AHA_2940U & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 2940 Ultra SCSI adapter",		ahc_aic7880_setup	},	{		ID_AHA_3940U & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 3940 Ultra SCSI adapter",		ahc_aha394XU_setup	},	{		ID_AHA_2944U & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 2944 Ultra SCSI adapter",		ahc_aic7880_setup	},	{		ID_AHA_3944U & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 3944 Ultra SCSI adapter",		ahc_aha394XU_setup	},	{		ID_AHA_398XU & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 398X Ultra SCSI RAID adapter",		ahc_aha398XU_setup	},	{		/*		 * XXX Don't know the slot numbers		 * so we can't identify channels		 */		ID_AHA_4944U & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 4944 Ultra SCSI adapter",		ahc_aic7880_setup	},	{		ID_AHA_2930U & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 2930 Ultra SCSI adapter",		ahc_aic7880_setup	},	{		ID_AHA_2940U_PRO & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 2940 Pro Ultra SCSI adapter",		ahc_aha2940Pro_setup	},	{		ID_AHA_2940U_CN & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec 2940/CN Ultra SCSI adapter",		ahc_aic7880_setup	},	/* Ignore all SISL (AAC on MB) based controllers. */	{		ID_9005_SISL_ID,		ID_9005_SISL_MASK,		NULL,		NULL	},	/* aic7890 based controllers */	{		ID_AHA_2930U2,		ID_ALL_MASK,		"Adaptec 2930 Ultra2 SCSI adapter",		ahc_aic7890_setup	},	{		ID_AHA_2940U2B,		ID_ALL_MASK,		"Adaptec 2940B Ultra2 SCSI adapter",		ahc_aic7890_setup	},	{		ID_AHA_2940U2_OEM,		ID_ALL_MASK,		"Adaptec 2940 Ultra2 SCSI adapter (OEM)",		ahc_aic7890_setup	},	{		ID_AHA_2940U2,		ID_ALL_MASK,		"Adaptec 2940 Ultra2 SCSI adapter",		ahc_aic7890_setup	},	{		ID_AHA_2950U2B,		ID_ALL_MASK,		"Adaptec 2950 Ultra2 SCSI adapter",		ahc_aic7890_setup	},	{		ID_AIC7890_ARO,		ID_ALL_MASK,		"Adaptec aic7890/91 Ultra2 SCSI adapter (ARO)",		ahc_aic7890_setup	},	{		ID_AAA_131U2,		ID_ALL_MASK,		"Adaptec AAA-131 Ultra2 RAID adapter",		ahc_aic7890_setup	},	/* aic7892 based controllers */	{		ID_AHA_29160,		ID_ALL_MASK,		"Adaptec 29160 Ultra160 SCSI adapter",		ahc_aic7892_setup	},	{		ID_AHA_29160_CPQ,		ID_ALL_MASK,		"Adaptec (Compaq OEM) 29160 Ultra160 SCSI adapter",		ahc_aic7892_setup	},	{		ID_AHA_29160N,		ID_ALL_MASK,		"Adaptec 29160N Ultra160 SCSI adapter",		ahc_aic7892_setup	},	{		ID_AHA_29160C,		ID_ALL_MASK,		"Adaptec 29160C Ultra160 SCSI adapter",		ahc_aha29160C_setup	},	{		ID_AHA_29160B,		ID_ALL_MASK,		"Adaptec 29160B Ultra160 SCSI adapter",		ahc_aic7892_setup	},	{		ID_AHA_19160B,		ID_ALL_MASK,		"Adaptec 19160B Ultra160 SCSI adapter",		ahc_aic7892_setup	},	{		ID_AIC7892_ARO,		ID_ALL_MASK,		"Adaptec aic7892 Ultra160 SCSI adapter (ARO)",		ahc_aic7892_setup	},	/* aic7895 based controllers */		{		ID_AHA_2940U_DUAL,		ID_ALL_MASK,		"Adaptec 2940/DUAL Ultra SCSI adapter",		ahc_aic7895_setup	},	{		ID_AHA_3940AU,		ID_ALL_MASK,		"Adaptec 3940A Ultra SCSI adapter",		ahc_aic7895_setup	},	{		ID_AHA_3944AU,		ID_ALL_MASK,		"Adaptec 3944A Ultra SCSI adapter",		ahc_aic7895_setup	},	{		ID_AIC7895_ARO,		ID_AIC7895_ARO_MASK,		"Adaptec aic7895 Ultra SCSI adapter (ARO)",		ahc_aic7895_setup	},	/* aic7896/97 based controllers */		{		ID_AHA_3950U2B_0,		ID_ALL_MASK,		"Adaptec 3950B Ultra2 SCSI adapter",		ahc_aic7896_setup	},	{		ID_AHA_3950U2B_1,		ID_ALL_MASK,		"Adaptec 3950B Ultra2 SCSI adapter",		ahc_aic7896_setup	},	{		ID_AHA_3950U2D_0,		ID_ALL_MASK,		"Adaptec 3950D Ultra2 SCSI adapter",		ahc_aic7896_setup	},	{		ID_AHA_3950U2D_1,		ID_ALL_MASK,		"Adaptec 3950D Ultra2 SCSI adapter",		ahc_aic7896_setup	},	{		ID_AIC7896_ARO,		ID_ALL_MASK,		"Adaptec aic7896/97 Ultra2 SCSI adapter (ARO)",		ahc_aic7896_setup	},	/* aic7899 based controllers */		{		ID_AHA_3960D,		ID_ALL_MASK,		"Adaptec 3960D Ultra160 SCSI adapter",		ahc_aic7899_setup	},	{		ID_AHA_3960D_CPQ,		ID_ALL_MASK,		"Adaptec (Compaq OEM) 3960D Ultra160 SCSI adapter",		ahc_aic7899_setup	},	{		ID_AIC7899_ARO,		ID_ALL_MASK,		"Adaptec aic7899 Ultra160 SCSI adapter (ARO)",		ahc_aic7899_setup	},	/* Generic chip probes for devices we don't know 'exactly' */	{		ID_AIC7850 & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec aic7850 SCSI adapter",		ahc_aic785X_setup	},	{		ID_AIC7855 & ID_DEV_VENDOR_MASK,		ID_DEV_VENDOR_MASK,		"Adaptec aic7855 SCSI adapter",		ahc_aic785X_setup	},

⌨️ 快捷键说明

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