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

📄 global.c

📁 DOS_PCI_DRIVER,DOS环境下运行的PCI驱动程序,个人觉得比较好用.
💻 C
📖 第 1 页 / 共 2 页
字号:
				u16 typeReq, u16 wValue, u16 wIndex,
				char far * buf, u16 wLength);*/NULL,

	/*long        (*post_unlink_timeout)(struct usb_hcd far * hcd,
		struct usb_device far * dev,atomic_t * p_refcnt);*/
	NULL
};

const struct pci_device_id ohci_pci_ids [] =
{
	{/*unsigned long vendor*/ PCI_ANY_ID,
	/*unsigned long device*/ PCI_ANY_ID,
	/*unsigned long subvendor*/ PCI_ANY_ID,
	/*unsigned long subdevice*/ PCI_ANY_ID,
	/*unsigned long class*/ (PCI_CLASS_SERIAL_USB << 8) | 0x10,
	/*unsigned long class_mask*/ ~0L,
	/*unsigned long driver_data*/ (unsigned long) &ohci_driver},
	{0,0,0,0,0,0,0}
};

struct pci_driver ohci_pci_driver =
{
	/*struct list_head node*/{NULL,NULL},
	/*char *name*/ohci_hcd_name,
	/*const struct pci_device_id *id_table*/ohci_pci_ids,
	/*long	(*probe)  (struct pci_dev *dev, const struct pci_device_id *id)*/
	usb_hcd_pci_probe,
	/*void (*remove) (struct pci_dev *dev)*/usb_hcd_pci_remove,
	/*long	(*save_state) (struct pci_dev *dev, u32 state)*/NULL,

	#ifdef	CONFIG_PM

		/*long	(*suspend)(struct pci_dev *dev, u32 state)*/usb_hcd_pci_suspend,
		/*long	(*resume) (struct pci_dev *dev)*/usb_hcd_pci_resume,

	#endif

	/*long	(*enable_wake) (struct pci_dev *dev, u32 state, long enable)*/NULL
};

/* pci.c */

unsigned long pcibios_max_latency = 255;

LIST_HEAD(pci_root_buses);
LIST_HEAD(pci_devices);
LIST_HEAD(pci_drivers);

struct pci_driver pci_compat_driver = {
	/*struct list_head node;*/{NULL,NULL},
	/*char *name*/"compat",
	/*const struct pci_device_id *id_table;	*/NULL,
	/*long  (*probe)  (struct pci_dev *dev, const struct pci_device_id *id);*/NULL,
	/*void (*remove) (struct pci_dev *dev);*/NULL,
	/*long	(*save_state) (struct pci_dev *dev, u32 state);*/NULL,

	#ifdef CONFIG_PM
		/*long	(*suspend)(struct pci_dev *dev, u32 state);*/NULL,
		/*long	(*resume) (struct pci_dev *dev);*/NULL,
	#endif
	/*long  (*enable_wake) (struct pci_dev *dev, u32 state, long enable);*/NULL	
};

/* pcifixup.c */

struct pci_fixup pcibios_fixups[] = 
{
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82451NX,	pci_fixup_i450nx },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82454GX,	pci_fixup_i450gx },
#if 0
/* Until we get proper handling pray the BIOS gets it right */
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_SERVERWORKS,	PCI_DEVICE_ID_SERVERWORKS_HE,		pci_fixup_serverworks },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_SERVERWORKS,	PCI_DEVICE_ID_SERVERWORKS_LE,		pci_fixup_serverworks },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_SERVERWORKS,	PCI_DEVICE_ID_SERVERWORKS_CMIC_HE,	pci_fixup_serverworks },
#endif	
#if 1
/* Our bus code shouldnt need this fixup any more. Delete once verified */
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_COMPAQ,	PCI_DEVICE_ID_COMPAQ_6010,	pci_fixup_compaq },
#endif	
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_UMC,	PCI_DEVICE_ID_UMC_UM8886BF,	pci_fixup_umc_ide },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_SI,	PCI_DEVICE_ID_SI_5513,		pci_fixup_ide_trash },
	{ PCI_FIXUP_HEADER,	PCI_ANY_ID,		PCI_ANY_ID,			pci_fixup_ide_bases },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_SI,	PCI_DEVICE_ID_SI_5597,		pci_fixup_latency },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_SI,	PCI_DEVICE_ID_SI_5598,		pci_fixup_latency },
 	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82371AB_3,	pci_fixup_piix4_acpi },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8363_0,	pci_fixup_via_athlon_bug },
	{ 0 }
};

long isa_dma_bridge_buggy;		/* Exported */
long pci_pci_problems;

#ifdef CONFIG_X86_IO_APIC 

long nr_ioapics;

#endif

struct pci_fixup pci_fixups[]  = 
{
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82441,	quirk_passive_release },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82441,	quirk_passive_release },
	/*
	 * Its not totally clear which chipsets are the problematic ones
	 * We know 82C586 and 82C596 variants are affected.
	 */
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C586_0,	quirk_isa_dma_hangs },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C596,	quirk_isa_dma_hangs },
	{ PCI_FIXUP_FINAL,  PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82371SB_0,  quirk_isa_dma_hangs },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_S3,	PCI_DEVICE_ID_S3_868,		quirk_s3_64M },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_S3,	PCI_DEVICE_ID_S3_968,		quirk_s3_64M },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82437, 	quirk_triton }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82437VX, 	quirk_triton }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82439, 	quirk_triton }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82439TX, 	quirk_triton }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82441, 	quirk_natoma }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82443LX_0, 	quirk_natoma }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82443LX_1, 	quirk_natoma }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82443BX_0, 	quirk_natoma }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82443BX_1, 	quirk_natoma }, 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL, 	PCI_DEVICE_ID_INTEL_82443BX_2, 	quirk_natoma },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_SI,	PCI_DEVICE_ID_SI_5597,		quirk_nopcipci },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_SI,	PCI_DEVICE_ID_SI_496,		quirk_nopcipci },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8363_0,	quirk_vialatency },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8371_1,	quirk_vialatency },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	0x3112	/* Not out yet ? */,	quirk_vialatency },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C576,	quirk_vsfx },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C597_0,	quirk_viaetbf },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C597_0,	quirk_vt82c598_id },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C586_3,	quirk_vt82c586_acpi },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C686_4,	quirk_vt82c686_acpi },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82371AB_3,	quirk_piix4_acpi },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_AL,	PCI_DEVICE_ID_AL_M7101,		quirk_ali7101_acpi },
 	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82371SB_2,	quirk_piix3_usb },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82371AB_2,	quirk_piix3_usb },
	{ PCI_FIXUP_FINAL,	PCI_ANY_ID,		PCI_ANY_ID,			quirk_cardbus_legacy },

#ifdef CONFIG_X86_IO_APIC 
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C686,	quirk_via_ioapic },
#endif
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C586_3,	quirk_via_acpi },
	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C686_4,	quirk_via_acpi },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C586_2,	quirk_via_irqpic },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C686_5,	quirk_via_irqpic },
	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C686_6,	quirk_via_irqpic },

	{ 0 }
};

/* pciirq.c */

struct irq_routing_table far * pirq_table = NULL;

struct irq_router pirq_bios_router =
	{ "BIOS", 0, 0, NULL, pirq_bios_set};

struct irq_router pirq_routers[] = {
	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_0, pirq_piix_get, pirq_piix_set },
	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, pirq_piix_get, pirq_piix_set },
	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0, pirq_piix_get, pirq_piix_set },
	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX,   pirq_piix_get, pirq_piix_set },
	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_0, pirq_piix_get, pirq_piix_set },
	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, pirq_piix_get, pirq_piix_set },

	{ "ALI", PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, pirq_ali_get, pirq_ali_set },

	{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, pirq_via_get, pirq_via_set },
	{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596, pirq_via_get, pirq_via_set },
	{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, pirq_via_get, pirq_via_set },

	{ "OPTI", PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C700, pirq_opti_get, pirq_opti_set },

	{ "NatSemi", PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, pirq_cyrix_get, pirq_cyrix_set },
	{ "SIS", PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, pirq_sis_get, pirq_sis_set },
	{ "VLSI 82C534", PCI_VENDOR_ID_VLSI, PCI_DEVICE_ID_VLSI_82C534, pirq_vlsi_get, pirq_vlsi_set },
	{ "ServerWorks", PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4,
	  pirq_serverworks_get, pirq_serverworks_set },
	{ "ServerWorks", PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5,
	  pirq_serverworks_get, pirq_serverworks_set },
	{ "AMD756 VIPER", PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_740B,
		pirq_amd756_get, pirq_amd756_set },

	{ "default", 0, 0, NULL, NULL }
};

unsigned short total_pirq_routers = sizeof(pirq_routers) /
       sizeof(struct irq_router);

long pirq_penalty[16] = {
	1000000, 1000000, 1000000, 1000, 1000, 0, 1000, 1000,
	0, 0, 0, 0, 1000, 100000, 100000, 100000
};

unsigned long pcibios_irq_mask = 0xfff8;

struct pci_dev *pirq_router_dev;

struct irq_router * pirq_router;

/* pcilow.c */

struct resource ioport_resource = { "PCI IO", 0x0000, IO_SPACE_LIMIT, IORESOURCE_IO , 0};
struct resource iomem_resource = { "PCI mem", 0x00000000, 0xfffffffc, IORESOURCE_MEM, 0};

int pci_bios_present;
	
unsigned short pci_probe = PCI_BIOS_IRQ_SCAN | PCI_PROBE_BIOS | PCI_PROBE_CONF1 | 
	PCI_PROBE_CONF2 | PCI_ASSIGN_ALL_BUSSES;
	
short pcibios_last_bus = -1;
struct pci_bus *pci_root_bus = NULL;
struct pci_ops *pci_root_ops = NULL;	

long (*pci_config_read)(long seg, long bus, long dev, long fn, long reg, long len, u32 *value) = NULL;
long (*pci_config_write)(long seg, long bus, long dev, long fn, long reg, long len, u32 value) = NULL;

struct pci_ops pci_direct_conf1 = {
	pci_conf1_read_config_byte,
	pci_conf1_read_config_word,
	pci_conf1_read_config_dword,
	pci_conf1_write_config_byte,
	pci_conf1_write_config_word,
	pci_conf1_write_config_dword
};

struct pci_ops pci_direct_conf2 = {
	pci_conf2_read_config_byte,
	pci_conf2_read_config_word,
	pci_conf2_read_config_dword,
	pci_conf2_write_config_byte,
	pci_conf2_write_config_word,
	pci_conf2_write_config_dword
};

struct pci_ops pci_bios_access = {
      pci_bios_read_config_byte,
      pci_bios_read_config_word,
      pci_bios_read_config_dword,
      pci_bios_write_config_byte,
      pci_bios_write_config_word,
      pci_bios_write_config_dword
};

/* pm.c */

short pm_active;

LIST_HEAD(pm_devs);

/* uhci.c */
char uhci_hcd_name [] = "uhci-hcd";

const struct hc_driver uhci_driver = {
	/*const char	far * description*/uhci_hcd_name,
	/*void	(*irq) (struct usb_hcd far * hcd)*/uhci_irq,
	/*long flags*/HCD_USB11,
	/*long	(*start) (struct usb_hcd far * hcd)*/uhci_start,

	#ifdef CONFIG_PM
		 /*long	(*suspend) (struct usb_hcd far * hcd, u32 state)*/uhci_suspend,
		 /*long	(*resume) (struct usb_hcd far * hcd)*/uhci_resume,
	#endif

	/*void	(*stop) (struct usb_hcd far * hcd)*/uhci_stop,
	/*long	(*get_frame_number) (struct usb_hcd far * hcd)*/uhci_get_frame,
	/*ruct usb_hcd	far * (*hcd_alloc) (void)*/uhci_hcd_alloc,
	/*void		(*hcd_free) (struct usb_hcd far * hcd);*/uhci_hcd_free,
	/*long	(*urb_enqueue) (struct usb_hcd far * hcd, struct urb far * urb,
					int mem_flags)*/uhci_urb_enqueue,
	/*long	(*urb_dequeue) (struct usb_hcd far * hcd, struct urb far * urb)*/
	uhci_urb_dequeue,
	/*void		(*free_config) (struct usb_hcd far * hcd,
				struct usb_device far * dev,unsigned char mode)*/
	uhci_free_config,
	/*long		(*hub_status_data) (struct usb_hcd far * hcd,struct urb far * urb)*/
	uhci_hub_status_data,
	/*long		(*hub_control) (struct usb_hcd far * hcd,
				u16 typeReq, u16 wValue, u16 wIndex,
				char far * buf, u16 wLength);*/uhci_hub_control,
	/*long        (*post_unlink_timeout)(struct usb_hcd far * hcd,
		struct usb_device far * dev,atomic_t * p_refcnt);*/
	uhci_post_unlink_timeout
};

const struct pci_device_id uhci_pci_ids [] =
{
	{/*unsigned long vendor*/PCI_ANY_ID,
	/*unsigned long device*/PCI_ANY_ID,
	/*unsigned long subvendor*/PCI_ANY_ID,
	/*unsigned long subdevice*/PCI_ANY_ID,
	/*unsigned long class*/((PCI_CLASS_SERIAL_USB << 8) | 0x00),
	/*unsigned long class_mask*/~0L,
	/*unsigned long driver_data;*/(unsigned long) &uhci_driver},
	{0,0,0,0,0,0,0}
};

/* pci driver glue; this is a "new style" PCI driver module */
struct pci_driver uhci_pci_driver =
{
	/*struct list_head node*/{NULL,NULL},
	/*char *name*/uhci_hcd_name,
	/*const struct pci_device_id *id_table*/uhci_pci_ids,
	/*long	(*probe)  (struct pci_dev *dev, const struct pci_device_id *id)*/
	usb_hcd_pci_probe,
	/*void (*remove) (struct pci_dev *dev)*/usb_hcd_pci_remove,
	/*long	(*save_state) (struct pci_dev *dev, u32 state)*/NULL,

	#ifdef CONFIG_PM
	    /*long  (*suspend)(struct pci_dev *dev, u32 state)*/usb_hcd_pci_suspend,
	    /*long  (*resume) (struct pci_dev *dev)*/usb_hcd_pci_resume,
	#endif

	/*long  (*enable_wake) (struct pci_dev *dev, u32 state, long enable)*/NULL
};

/* usb.c */

LIST_HEAD(usb_driver_list);
LIST_HEAD(usb_bus_list);

struct usb_busmap busmap;

struct driver_info driver_map[16];

const char usb_bandwidth_option = 1;

/* low.c */

unsigned long GlobalTickCount = 0L;

unsigned char is_chain = 0;

unsigned long event_next = 0L;

struct LDT moveld;

struct LDT far * p_moveld = (struct LDT far *)(&(moveld));

unsigned char mystack[MY_STACK_SIZE];        
unsigned char busy = 0;

void (_interrupt _far * old_int1c_handler)(void) = NULL;
void (_interrupt _far * old_int8_handler)(void) = NULL;

unsigned char common_is_sti;
struct irq_action far * common_action;
long common_irq;
unsigned char common_is_sti;
void far * common_ptr;
unsigned short common_intsp,common_intss;
unsigned short common_temp;

#ifdef DEBUG_HARDWARE_INTERRUPT_USE_MEMORY
    unsigned long run_status = 0L;
    unsigned long status1 = 0;
    unsigned long status2 = 0;
	void (_far * irq_handler)(long irq,void far * __hcd) = 0;
    unsigned long pass_count = 0;
#endif

#ifdef DEBUG_HARDWARE_INTERRUPT

void (_interrupt _far * old_flush_handler)(void) = NULL;

unsigned short iOffset1 = 0;
unsigned short iSeg1 = 0;
unsigned short XmsHandle = 0;
unsigned long LoggedSize = 0L;
unsigned char IsLogging = 0;
unsigned char IsLogChecked = 0;
unsigned short PassCount = 0;
unsigned short BeginCount = 0;
unsigned short EndCount = 0;

#endif

unsigned char int1c_is_sti;
struct event_item far * int1c_item;
unsigned short int1c_temp;

unsigned long flags = 0L;
unsigned short flags_irq[16];

unsigned char is_in_interrupt = 0;

struct eventmap event_map;

LIST_HEAD(global_event_list);

struct irq_table global_irq_table[16];

⌨️ 快捷键说明

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