?? ide-pci.c
字號:
/* * linux/drivers/ide/ide-pci.c Version 1.05 June 9, 2000 * * Copyright (c) 1998-2000 Andre Hedrick <andre@linux-ide.org> * * Copyright (c) 1995-1998 Mark Lord * May be copied or modified under the terms of the GNU General Public License *//* * This module provides support for automatic detection and * configuration of all PCI IDE interfaces present in a system. */#include <linux/config.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/timer.h>#include <linux/mm.h>#include <linux/interrupt.h>#include <linux/pci.h>#include <linux/init.h>#include <linux/ide.h>#include <asm/io.h>#include <asm/irq.h>#define DEVID_PIIXa ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_0})#define DEVID_PIIXb ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_1})#define DEVID_MPIIX ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX})#define DEVID_PIIX3 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_1})#define DEVID_PIIX4 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB})#define DEVID_PIIX4E ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_1})#define DEVID_PIIX4E2 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_1})#define DEVID_PIIX4U ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_1})#define DEVID_PIIX4U2 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82372FB_1})#define DEVID_PIIX4NX ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX})#define DEVID_PIIX4U3 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_9})#define DEVID_PIIX4U4 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_8})#define DEVID_PIIX4U5 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10})#define DEVID_VIA_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C561})#define DEVID_MR_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1})#define DEVID_VP_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1})#define DEVID_PDC20246 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20246})#define DEVID_PDC20262 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20262})#define DEVID_PDC20265 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20265})#define DEVID_PDC20267 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20267})#define DEVID_PDC20268 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268})#define DEVID_PDC20268R ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268R})#define DEVID_RZ1000 ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000})#define DEVID_RZ1001 ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001})#define DEVID_SAMURAI ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_SAMURAI_IDE})#define DEVID_CMD640 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_640})#define DEVID_CMD643 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_643})#define DEVID_CMD646 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_646})#define DEVID_CMD648 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_648})#define DEVID_CMD649 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_649})#define DEVID_SIS5513 ((ide_pci_devid_t){PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513})#define DEVID_OPTI621 ((ide_pci_devid_t){PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C621})#define DEVID_OPTI621V ((ide_pci_devid_t){PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C558})#define DEVID_OPTI621X ((ide_pci_devid_t){PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C825})#define DEVID_TRM290 ((ide_pci_devid_t){PCI_VENDOR_ID_TEKRAM, PCI_DEVICE_ID_TEKRAM_DC290})#define DEVID_NS87410 ((ide_pci_devid_t){PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87410})#define DEVID_NS87415 ((ide_pci_devid_t){PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87415})#define DEVID_HT6565 ((ide_pci_devid_t){PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_6565})#define DEVID_AEC6210 ((ide_pci_devid_t){PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP850UF})#define DEVID_AEC6260 ((ide_pci_devid_t){PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860})#define DEVID_AEC6260R ((ide_pci_devid_t){PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860R})#define DEVID_W82C105 ((ide_pci_devid_t){PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105})#define DEVID_UM8673F ((ide_pci_devid_t){PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8673F})#define DEVID_UM8886A ((ide_pci_devid_t){PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886A})#define DEVID_UM8886BF ((ide_pci_devid_t){PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886BF})#define DEVID_HPT34X ((ide_pci_devid_t){PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT343})#define DEVID_HPT366 ((ide_pci_devid_t){PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT366})#define DEVID_ALI15X3 ((ide_pci_devid_t){PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5229})#define DEVID_CY82C693 ((ide_pci_devid_t){PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693})#define DEVID_HINT ((ide_pci_devid_t){0x3388, 0x8013})#define DEVID_CS5530 ((ide_pci_devid_t){PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE})#define DEVID_AMD7401 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_COBRA_7401})#define DEVID_AMD7409 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7409})#define DEVID_AMD7411 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411})#define DEVID_PDCADMA ((ide_pci_devid_t){PCI_VENDOR_ID_PDC, PCI_DEVICE_ID_PDC_1841})#define DEVID_SLC90E66 ((ide_pci_devid_t){PCI_VENDOR_ID_EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_1})#define DEVID_OSB4 ((ide_pci_devid_t){PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE})#define DEVID_CSB5 ((ide_pci_devid_t){PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE})#define DEVID_ITE8172G ((ide_pci_devid_t){PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_IT8172G})#define IDE_IGNORE ((void *)-1)#ifdef CONFIG_BLK_DEV_AEC62XXextern unsigned int pci_init_aec62xx(struct pci_dev *, const char *);extern unsigned int ata66_aec62xx(ide_hwif_t *);extern void ide_init_aec62xx(ide_hwif_t *);extern void ide_dmacapable_aec62xx(ide_hwif_t *, unsigned long);#define PCI_AEC62XX &pci_init_aec62xx#define ATA66_AEC62XX &ata66_aec62xx#define INIT_AEC62XX &ide_init_aec62xx#define DMA_AEC62XX &ide_dmacapable_aec62xx#else#define PCI_AEC62XX NULL#define ATA66_AEC62XX NULL#define INIT_AEC62XX NULL#define DMA_AEC62XX NULL#endif#ifdef CONFIG_BLK_DEV_ALI15X3extern unsigned int pci_init_ali15x3(struct pci_dev *, const char *);extern unsigned int ata66_ali15x3(ide_hwif_t *);extern void ide_init_ali15x3(ide_hwif_t *);extern void ide_dmacapable_ali15x3(ide_hwif_t *, unsigned long);#define PCI_ALI15X3 &pci_init_ali15x3#define ATA66_ALI15X3 &ata66_ali15x3#define INIT_ALI15X3 &ide_init_ali15x3#define DMA_ALI15X3 &ide_dmacapable_ali15x3#else#define PCI_ALI15X3 NULL#define ATA66_ALI15X3 NULL#define INIT_ALI15X3 NULL#define DMA_ALI15X3 NULL#endif#ifdef CONFIG_BLK_DEV_AMD74XXextern unsigned int pci_init_amd74xx(struct pci_dev *, const char *);extern unsigned int ata66_amd74xx(ide_hwif_t *);extern void ide_init_amd74xx(ide_hwif_t *);extern void ide_dmacapable_amd74xx(ide_hwif_t *, unsigned long);#define PCI_AMD74XX &pci_init_amd74xx#define ATA66_AMD74XX &ata66_amd74xx#define INIT_AMD74XX &ide_init_amd74xx#define DMA_AMD74XX &ide_dmacapable_amd74xx#else#define PCI_AMD74XX NULL#define ATA66_AMD74XX NULL#define INIT_AMD74XX NULL#define DMA_AMD74XX NULL#endif#ifdef CONFIG_BLK_DEV_CMD64Xextern unsigned int pci_init_cmd64x(struct pci_dev *, const char *);extern unsigned int ata66_cmd64x(ide_hwif_t *);extern void ide_init_cmd64x(ide_hwif_t *);extern void ide_dmacapable_cmd64x(ide_hwif_t *, unsigned long);#define PCI_CMD64X &pci_init_cmd64x#define ATA66_CMD64X &ata66_cmd64x#define INIT_CMD64X &ide_init_cmd64x#else#define PCI_CMD64X NULL#define ATA66_CMD64X NULL#ifdef __sparc_v9__#define INIT_CMD64X IDE_IGNORE#else#define INIT_CMD64X NULL#endif#endif#ifdef CONFIG_BLK_DEV_CY82C693extern unsigned int pci_init_cy82c693(struct pci_dev *, const char *);extern void ide_init_cy82c693(ide_hwif_t *);#define PCI_CY82C693 &pci_init_cy82c693#define INIT_CY82C693 &ide_init_cy82c693#else#define PCI_CY82C693 NULL#define INIT_CY82C693 NULL#endif#ifdef CONFIG_BLK_DEV_CS5530extern unsigned int pci_init_cs5530(struct pci_dev *, const char *);extern void ide_init_cs5530(ide_hwif_t *);#define PCI_CS5530 &pci_init_cs5530#define INIT_CS5530 &ide_init_cs5530#else#define PCI_CS5530 NULL#define INIT_CS5530 NULL#endif#ifdef CONFIG_BLK_DEV_HPT34Xextern unsigned int pci_init_hpt34x(struct pci_dev *, const char *);extern void ide_init_hpt34x(ide_hwif_t *);#define PCI_HPT34X &pci_init_hpt34x#define INIT_HPT34X &ide_init_hpt34x#else#define PCI_HPT34X NULL#define INIT_HPT34X IDE_IGNORE#endif#ifdef CONFIG_BLK_DEV_HPT366extern byte hpt363_shared_irq;extern byte hpt363_shared_pin;extern unsigned int pci_init_hpt366(struct pci_dev *, const char *);extern unsigned int ata66_hpt366(ide_hwif_t *);extern void ide_init_hpt366(ide_hwif_t *);extern void ide_dmacapable_hpt366(ide_hwif_t *, unsigned long);#define PCI_HPT366 &pci_init_hpt366#define ATA66_HPT366 &ata66_hpt366#define INIT_HPT366 &ide_init_hpt366#define DMA_HPT366 &ide_dmacapable_hpt366#elsestatic byte hpt363_shared_irq;static byte hpt363_shared_pin;#define PCI_HPT366 NULL#define ATA66_HPT366 NULL#define INIT_HPT366 NULL#define DMA_HPT366 NULL#endif#ifdef CONFIG_BLK_DEV_NS87415extern void ide_init_ns87415(ide_hwif_t *);#define INIT_NS87415 &ide_init_ns87415#else#define INIT_NS87415 IDE_IGNORE#endif#ifdef CONFIG_BLK_DEV_OPTI621extern void ide_init_opti621(ide_hwif_t *);#define INIT_OPTI621 &ide_init_opti621#else#define INIT_OPTI621 NULL#endif#ifdef CONFIG_BLK_DEV_PDC_ADMAextern unsigned int pci_init_pdcadma(struct pci_dev *, const char *);extern unsigned int ata66_pdcadma(ide_hwif_t *);extern void ide_init_pdcadma(ide_hwif_t *);extern void ide_dmacapable_pdcadma(ide_hwif_t *, unsigned long);#define PCI_PDCADMA &pci_init_pdcadma#define ATA66_PDCADMA &ata66_pdcadma#define INIT_PDCADMA &ide_init_pdcadma#define DMA_PDCADMA &ide_dmacapable_pdcadma#else#define PCI_PDCADMA IDE_IGNORE#define ATA66_PDCADMA IDE_IGNORE#define INIT_PDCADMA IDE_IGNORE#define DMA_PDCADMA IDE_IGNORE#endif#ifdef CONFIG_BLK_DEV_PDC202XXextern unsigned int pci_init_pdc202xx(struct pci_dev *, const char *);extern unsigned int ata66_pdc202xx(ide_hwif_t *);extern void ide_init_pdc202xx(ide_hwif_t *);#define PCI_PDC202XX &pci_init_pdc202xx#define ATA66_PDC202XX &ata66_pdc202xx#define INIT_PDC202XX &ide_init_pdc202xx#else#define PCI_PDC202XX NULL#define ATA66_PDC202XX NULL#define INIT_PDC202XX NULL#endif#ifdef CONFIG_BLK_DEV_PIIXextern unsigned int pci_init_piix(struct pci_dev *, const char *);extern unsigned int ata66_piix(ide_hwif_t *);extern void ide_init_piix(ide_hwif_t *);#define PCI_PIIX &pci_init_piix#define ATA66_PIIX &ata66_piix#define INIT_PIIX &ide_init_piix#else#define PCI_PIIX NULL#define ATA66_PIIX NULL#define INIT_PIIX NULL#endif#ifdef CONFIG_BLK_DEV_IT8172extern unsigned int pci_init_it8172(struct pci_dev *, const char *);extern unsigned int ata66_it8172(ide_hwif_t *);extern void ide_init_it8172(ide_hwif_t *);#define PCI_IT8172 &pci_init_it8172#define INIT_IT8172 &ide_init_it8172#else#define PCI_IT8172 NULL#define ATA66_IT8172 NULL#define INIT_IT8172 NULL#endif#ifdef CONFIG_BLK_DEV_RZ1000extern void ide_init_rz1000(ide_hwif_t *);#define INIT_RZ1000 &ide_init_rz1000#else#define INIT_RZ1000 IDE_IGNORE#endif#define INIT_SAMURAI NULL#ifdef CONFIG_BLK_DEV_SVWKSextern unsigned int pci_init_svwks(struct pci_dev *, const char *);extern unsigned int ata66_svwks(ide_hwif_t *);extern void ide_init_svwks(ide_hwif_t *);#define PCI_SVWKS &pci_init_svwks#define ATA66_SVWKS &ata66_svwks#define INIT_SVWKS &ide_init_svwks#else#define PCI_SVWKS NULL#define ATA66_SVWKS NULL#define INIT_SVWKS NULL#endif#ifdef CONFIG_BLK_DEV_SIS5513extern unsigned int pci_init_sis5513(struct pci_dev *, const char *);extern unsigned int ata66_sis5513(ide_hwif_t *);extern void ide_init_sis5513(ide_hwif_t *);#define PCI_SIS5513 &pci_init_sis5513#define ATA66_SIS5513 &ata66_sis5513#define INIT_SIS5513 &ide_init_sis5513#else#define PCI_SIS5513 NULL#define ATA66_SIS5513 NULL#define INIT_SIS5513 NULL#endif#ifdef CONFIG_BLK_DEV_SLC90E66extern unsigned int pci_init_slc90e66(struct pci_dev *, const char *);extern unsigned int ata66_slc90e66(ide_hwif_t *);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -