]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - arch/ia64/sn/pci/pcibr/pcibr_provider.c
[IA64-SGI] sn2 minor fixes and cleanups
[net-next-2.6.git] / arch / ia64 / sn / pci / pcibr / pcibr_provider.c
index 1f500c81002c88869a47935cad3237eaad10bca3..98f716bd92f0ce414d414f8c1c6cf68523d01f7f 100644 (file)
@@ -23,14 +23,16 @@ int
 sal_pcibr_slot_enable(struct pcibus_info *soft, int device, void *resp)
 {
        struct ia64_sal_retval ret_stuff;
-       uint64_t busnum;
+       u64 busnum;
+       u64 segment;
 
        ret_stuff.status = 0;
        ret_stuff.v0 = 0;
 
+       segment = soft->pbi_buscommon.bs_persist_segment;
        busnum = soft->pbi_buscommon.bs_persist_busnum;
-       SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_ENABLE, (u64) busnum,
-                       (u64) device, (u64) resp, 0, 0, 0, 0);
+       SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_ENABLE, segment,
+                       busnum, (u64) device, (u64) resp, 0, 0, 0);
 
        return (int)ret_stuff.v0;
 }
@@ -40,15 +42,17 @@ sal_pcibr_slot_disable(struct pcibus_info *soft, int device, int action,
                       void *resp)
 {
        struct ia64_sal_retval ret_stuff;
-       uint64_t busnum;
+       u64 busnum;
+       u64 segment;
 
        ret_stuff.status = 0;
        ret_stuff.v0 = 0;
 
+       segment = soft->pbi_buscommon.bs_persist_segment;
        busnum = soft->pbi_buscommon.bs_persist_busnum;
        SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_DISABLE,
-                       (u64) busnum, (u64) device, (u64) action,
-                       (u64) resp, 0, 0, 0);
+                       segment, busnum, (u64) device, (u64) action,
+                       (u64) resp, 0, 0);
 
        return (int)ret_stuff.v0;
 }
@@ -56,7 +60,7 @@ sal_pcibr_slot_disable(struct pcibus_info *soft, int device, int action,
 static int sal_pcibr_error_interrupt(struct pcibus_info *soft)
 {
        struct ia64_sal_retval ret_stuff;
-       uint64_t busnum;
+       u64 busnum;
        int segment;
        ret_stuff.status = 0;
        ret_stuff.v0 = 0;
@@ -92,7 +96,8 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
        cnodeid_t near_cnode;
        struct hubdev_info *hubdev_info;
        struct pcibus_info *soft;
-       struct sn_flush_device_list *sn_flush_device_list;
+       struct sn_flush_device_kernel *sn_flush_device_kernel;
+       struct sn_flush_device_common *common;
 
        if (! IS_PCI_BRIDGE_ASIC(prom_bussoft->bs_asic_type)) {
                return NULL;
@@ -137,20 +142,19 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
        hubdev_info = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
 
        if (hubdev_info->hdi_flush_nasid_list.widget_p) {
-               sn_flush_device_list = hubdev_info->hdi_flush_nasid_list.
+               sn_flush_device_kernel = hubdev_info->hdi_flush_nasid_list.
                    widget_p[(int)soft->pbi_buscommon.bs_xid];
-               if (sn_flush_device_list) {
+               if (sn_flush_device_kernel) {
                        for (j = 0; j < DEV_PER_WIDGET;
-                            j++, sn_flush_device_list++) {
-                               if (sn_flush_device_list->sfdl_slot == -1)
+                            j++, sn_flush_device_kernel++) {
+                               common = sn_flush_device_kernel->common;
+                               if (common->sfdl_slot == -1)
                                        continue;
-                               if ((sn_flush_device_list->
-                                    sfdl_persistent_segment ==
+                               if ((common->sfdl_persistent_segment ==
                                     soft->pbi_buscommon.bs_persist_segment) &&
-                                    (sn_flush_device_list->
-                                    sfdl_persistent_busnum ==
+                                    (common->sfdl_persistent_busnum ==
                                     soft->pbi_buscommon.bs_persist_busnum))
-                                       sn_flush_device_list->sfdl_pcibus_info =
+                                       common->sfdl_pcibus_info =
                                            soft;
                        }
                }
@@ -159,9 +163,12 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
        /* Setup the PMU ATE map */
        soft->pbi_int_ate_resource.lowest_free_index = 0;
        soft->pbi_int_ate_resource.ate =
-           kmalloc(soft->pbi_int_ate_size * sizeof(uint64_t), GFP_KERNEL);
-       memset(soft->pbi_int_ate_resource.ate, 0,
-              (soft->pbi_int_ate_size * sizeof(uint64_t)));
+           kzalloc(soft->pbi_int_ate_size * sizeof(u64), GFP_KERNEL);
+
+       if (!soft->pbi_int_ate_resource.ate) {
+               kfree(soft);
+               return NULL;
+       }
 
        if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) {
                /* TIO PCI Bridge: find nearest node with CPUs */
@@ -203,7 +210,7 @@ void pcibr_target_interrupt(struct sn_irq_info *sn_irq_info)
        struct pcidev_info *pcidev_info;
        struct pcibus_info *pcibus_info;
        int bit = sn_irq_info->irq_int_bit;
-       uint64_t xtalk_addr = sn_irq_info->irq_xtalkaddr;
+       u64 xtalk_addr = sn_irq_info->irq_xtalkaddr;
 
        pcidev_info = (struct pcidev_info *)sn_irq_info->irq_pciioinfo;
        if (pcidev_info) {