From: Pat Gefre New pci provider interfaces --- 25-akpm/arch/ia64/sn/io/machvec/pci_bus_cvlink.c | 26 ++++++++++++++++++----- 25-akpm/include/asm-ia64/sn/pci/pci_bus_cvlink.h | 1 2 files changed, 22 insertions(+), 5 deletions(-) diff -puN arch/ia64/sn/io/machvec/pci_bus_cvlink.c~sn48 arch/ia64/sn/io/machvec/pci_bus_cvlink.c --- 25/arch/ia64/sn/io/machvec/pci_bus_cvlink.c~sn48 Thu Jan 8 15:25:18 2004 +++ 25-akpm/arch/ia64/sn/io/machvec/pci_bus_cvlink.c Thu Jan 8 15:25:18 2004 @@ -32,6 +32,18 @@ void sn_dma_flush_init(unsigned long sta #define IS_ALTIX(nasid) (cbrick_type_get_nasid(nasid) == MODULE_CBRICK) /* + * Init the provider asic for a given device + */ + +static void +set_pci_provider(struct sn_device_sysdata *device_sysdata) +{ + pciio_info_t pciio_info = pciio_info_get(device_sysdata->vhdl); + + device_sysdata->pci_provider = pciio_info_pops_get(pciio_info); +} + +/* * pci_bus_cvlink_init() - To be called once during initialization before * SGI IO Infrastructure init is called. */ @@ -329,6 +341,7 @@ sn_pci_fixup(int arg) struct sn_widget_sysdata *widget_sysdata; struct sn_device_sysdata *device_sysdata; pcibr_intr_t intr_handle; + pciio_provider_t *pci_provider; int cpuid; vertex_hdl_t device_vertex; pciio_intr_line_t lines; @@ -404,6 +417,7 @@ sn_pci_fixup(int arg) device_vertex = device_sysdata->vhdl; device_dev->sysdata = (void *) device_sysdata; + set_pci_provider(device_sysdata); /* * Set the xbridge Device(X) Write Buffer Flush and Xbow Flush @@ -445,17 +459,19 @@ sn_pci_fixup(int arg) cmd |= PCI_COMMAND_MASTER; /* If the device doesn't support */ /* bit gets dropped .. no harm */ pci_write_config_word(device_dev, PCI_COMMAND, cmd); - + pci_read_config_byte(device_dev, PCI_INTERRUPT_PIN, (unsigned char *)&lines); - + device_sysdata = (struct sn_device_sysdata *)device_dev->sysdata; + device_vertex = device_sysdata->vhdl; + pci_provider = device_sysdata->pci_provider; + irqpdaindr->curr = device_dev; - intr_handle = pcibr_intr_alloc(device_vertex, NULL, lines, device_vertex); + intr_handle = (pci_provider->intr_alloc)(device_vertex, NULL, lines, device_vertex); irq = intr_handle->bi_irq; irqpdaindr->device_dev[irq] = device_dev; - cpuid = intr_handle->bi_cpu; - pcibr_intr_connect(intr_handle, (intr_func_t)0, (intr_arg_t)0); + (pci_provider->intr_connect)(intr_handle, (intr_func_t)0, (intr_arg_t)0); device_dev->irq = irq; register_pcibr_intr(irq, intr_handle); diff -puN include/asm-ia64/sn/pci/pci_bus_cvlink.h~sn48 include/asm-ia64/sn/pci/pci_bus_cvlink.h --- 25/include/asm-ia64/sn/pci/pci_bus_cvlink.h~sn48 Thu Jan 8 15:25:18 2004 +++ 25-akpm/include/asm-ia64/sn/pci/pci_bus_cvlink.h Thu Jan 8 15:25:18 2004 @@ -53,6 +53,7 @@ struct sn_device_sysdata { int isa64; volatile unsigned int *dma_buf_sync; volatile unsigned int *xbow_buf_sync; + pciio_provider_t *pci_provider; }; struct ioports_to_tlbs_s { _