Lines Matching +full:x +full:- +full:rc
1 // SPDX-License-Identifier: GPL-2.0+
7 * Copyright (C) 2001,2003 Greg Kroah-Hartman (greg@kroah.com)
8 * Copyright (C) 2001-2003 IBM Corp.
55 int rc = 1; in get_cur_bus_info() local
58 debug("options = %x\n", slot_cur->ctrl->options); in get_cur_bus_info()
59 debug("revision = %x\n", slot_cur->ctrl->revision); in get_cur_bus_info()
61 if (READ_BUS_STATUS(slot_cur->ctrl)) in get_cur_bus_info()
62 rc = ibmphp_hpc_readslot(slot_cur, READ_BUSSTATUS, NULL); in get_cur_bus_info()
64 if (rc) in get_cur_bus_info()
65 return rc; in get_cur_bus_info()
67 slot_cur->bus_on->current_speed = CURRENT_BUS_SPEED(slot_cur->busstatus); in get_cur_bus_info()
68 if (READ_BUS_MODE(slot_cur->ctrl)) in get_cur_bus_info()
69 slot_cur->bus_on->current_bus_mode = in get_cur_bus_info()
70 CURRENT_BUS_MODE(slot_cur->busstatus); in get_cur_bus_info()
72 slot_cur->bus_on->current_bus_mode = 0xFF; in get_cur_bus_info()
74 debug("busstatus = %x, bus_speed = %x, bus_mode = %x\n", in get_cur_bus_info()
75 slot_cur->busstatus, in get_cur_bus_info()
76 slot_cur->bus_on->current_speed, in get_cur_bus_info()
77 slot_cur->bus_on->current_bus_mode); in get_cur_bus_info()
85 int rc; in slot_update() local
86 rc = ibmphp_hpc_readslot(*sl, READ_ALLSTAT, NULL); in slot_update()
87 if (rc) in slot_update()
88 return rc; in slot_update()
90 rc = get_cur_bus_info(sl); in slot_update()
91 return rc; in slot_update()
100 /* sometimes the hot-pluggable slots start with 4 (not always from 1) */ in get_max_slots()
101 slot_count = max(slot_count, slot_cur->number); in get_max_slots()
106 /* This routine will put the correct slot->device information per slot. It's
122 return -ENOMEM; in ibmphp_init_devno()
125 len = (rtable->size - sizeof(struct irq_routing_table)) / in ibmphp_init_devno()
130 return -1; in ibmphp_init_devno()
133 if ((*cur_slot)->number == rtable->slots[loop].slot && in ibmphp_init_devno()
134 (*cur_slot)->bus == rtable->slots[loop].bus) { in ibmphp_init_devno()
135 (*cur_slot)->device = PCI_SLOT(rtable->slots[loop].devfn); in ibmphp_init_devno()
137 (*cur_slot)->irq[i] = IO_APIC_get_PCI_irq_vector((int) (*cur_slot)->bus, in ibmphp_init_devno()
138 (int) (*cur_slot)->device, i); in ibmphp_init_devno()
140 debug("(*cur_slot)->irq[0] = %x\n", in ibmphp_init_devno()
141 (*cur_slot)->irq[0]); in ibmphp_init_devno()
142 debug("(*cur_slot)->irq[1] = %x\n", in ibmphp_init_devno()
143 (*cur_slot)->irq[1]); in ibmphp_init_devno()
144 debug("(*cur_slot)->irq[2] = %x\n", in ibmphp_init_devno()
145 (*cur_slot)->irq[2]); in ibmphp_init_devno()
146 debug("(*cur_slot)->irq[3] = %x\n", in ibmphp_init_devno()
147 (*cur_slot)->irq[3]); in ibmphp_init_devno()
149 debug("rtable->exclusive_irqs = %x\n", in ibmphp_init_devno()
150 rtable->exclusive_irqs); in ibmphp_init_devno()
151 debug("rtable->slots[loop].irq[0].bitmap = %x\n", in ibmphp_init_devno()
152 rtable->slots[loop].irq[0].bitmap); in ibmphp_init_devno()
153 debug("rtable->slots[loop].irq[1].bitmap = %x\n", in ibmphp_init_devno()
154 rtable->slots[loop].irq[1].bitmap); in ibmphp_init_devno()
155 debug("rtable->slots[loop].irq[2].bitmap = %x\n", in ibmphp_init_devno()
156 rtable->slots[loop].irq[2].bitmap); in ibmphp_init_devno()
157 debug("rtable->slots[loop].irq[3].bitmap = %x\n", in ibmphp_init_devno()
158 rtable->slots[loop].irq[3].bitmap); in ibmphp_init_devno()
160 debug("rtable->slots[loop].irq[0].link = %x\n", in ibmphp_init_devno()
161 rtable->slots[loop].irq[0].link); in ibmphp_init_devno()
162 debug("rtable->slots[loop].irq[1].link = %x\n", in ibmphp_init_devno()
163 rtable->slots[loop].irq[1].link); in ibmphp_init_devno()
164 debug("rtable->slots[loop].irq[2].link = %x\n", in ibmphp_init_devno()
165 rtable->slots[loop].irq[2].link); in ibmphp_init_devno()
166 debug("rtable->slots[loop].irq[3].link = %x\n", in ibmphp_init_devno()
167 rtable->slots[loop].irq[3].link); in ibmphp_init_devno()
175 return -1; in ibmphp_init_devno()
188 if (CTLR_RESULT(slot_cur->ctrl->status)) { in power_on()
190 return -EIO; in power_on()
206 if (CTLR_RESULT(slot_cur->ctrl->status)) { in power_off()
208 retval = -EIO; in power_off()
215 int rc = 0; in set_attention_status() local
219 debug("set_attention_status - Entry hotplug_slot[%lx] value[%x]\n", in set_attention_status()
236 rc = -ENODEV; in set_attention_status()
237 err("set_attention_status - Error : invalid input [%x]\n", in set_attention_status()
241 if (rc == 0) { in set_attention_status()
243 rc = ibmphp_hpc_writeslot(pslot, cmd); in set_attention_status()
246 rc = -ENODEV; in set_attention_status()
250 debug("set_attention_status - Exit rc[%d]\n", rc); in set_attention_status()
251 return rc; in set_attention_status()
256 int rc = -ENODEV; in get_attention_status() local
260 debug("get_attention_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", in get_attention_status()
267 rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, in get_attention_status()
269 if (!rc) in get_attention_status()
270 rc = ibmphp_hpc_readslot(pslot, READ_EXTSLOTSTATUS, in get_attention_status()
272 if (!rc) in get_attention_status()
277 debug("get_attention_status - Exit rc[%d] value[%x]\n", rc, *value); in get_attention_status()
278 return rc; in get_attention_status()
283 int rc = -ENODEV; in get_latch_status() local
287 debug("get_latch_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", in get_latch_status()
293 rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, in get_latch_status()
295 if (!rc) in get_latch_status()
300 debug("get_latch_status - Exit rc[%d] rc[%x] value[%x]\n", in get_latch_status()
301 rc, rc, *value); in get_latch_status()
302 return rc; in get_latch_status()
308 int rc = -ENODEV; in get_power_status() local
312 debug("get_power_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", in get_power_status()
318 rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, in get_power_status()
320 if (!rc) in get_power_status()
325 debug("get_power_status - Exit rc[%d] rc[%x] value[%x]\n", in get_power_status()
326 rc, rc, *value); in get_power_status()
327 return rc; in get_power_status()
332 int rc = -ENODEV; in get_adapter_present() local
337 debug("get_adapter_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", in get_adapter_present()
343 rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, in get_adapter_present()
345 if (!rc) { in get_adapter_present()
355 debug("get_adapter_present - Exit rc[%d] value[%x]\n", rc, *value); in get_adapter_present()
356 return rc; in get_adapter_present()
361 int rc = 0; in get_max_bus_speed() local
364 struct pci_bus *bus = slot->hotplug_slot.pci_slot->bus; in get_max_bus_speed()
366 debug("%s - Entry slot[%p]\n", __func__, slot); in get_max_bus_speed()
369 mode = slot->supported_bus_mode; in get_max_bus_speed()
370 speed = slot->supported_speed; in get_max_bus_speed()
386 rc = -ENODEV; in get_max_bus_speed()
389 if (!rc) in get_max_bus_speed()
390 bus->max_bus_speed = speed; in get_max_bus_speed()
392 debug("%s - Exit rc[%d] speed[%x]\n", __func__, rc, speed); in get_max_bus_speed()
393 return rc; in get_max_bus_speed()
405 int rc; in init_ops() local
408 debug("BEFORE GETTING SLOT STATUS, slot # %x\n", in init_ops()
409 slot_cur->number); in init_ops()
410 if (slot_cur->ctrl->revision == 0xFF) in init_ops()
412 &slot_cur->ctrl->revision)) in init_ops()
413 return -1; in init_ops()
415 if (slot_cur->bus_on->current_speed == 0xFF) in init_ops()
417 return -1; in init_ops()
420 if (slot_cur->ctrl->options == 0xFF) in init_ops()
421 if (get_hpc_options(slot_cur, &slot_cur->ctrl->options)) in init_ops()
422 return -1; in init_ops()
428 debug("status = %x\n", slot_cur->status); in init_ops()
429 debug("ext_status = %x\n", slot_cur->ext_status); in init_ops()
430 debug("SLOT_POWER = %x\n", SLOT_POWER(slot_cur->status)); in init_ops()
431 debug("SLOT_PRESENT = %x\n", SLOT_PRESENT(slot_cur->status)); in init_ops()
432 debug("SLOT_LATCH = %x\n", SLOT_LATCH(slot_cur->status)); in init_ops()
434 if ((SLOT_PWRGD(slot_cur->status)) && in init_ops()
435 !(SLOT_PRESENT(slot_cur->status)) && in init_ops()
436 !(SLOT_LATCH(slot_cur->status))) { in init_ops()
438 rc = power_off(slot_cur); in init_ops()
439 if (rc) in init_ops()
440 return rc; in init_ops()
464 return -ENODEV; in validate()
465 number = slot_cur->number; in validate()
467 return -EBADSLT; in validate()
468 debug("slot_number in validate is %d\n", slot_cur->number); in validate()
476 if (!(SLOT_PWRGD(slot_cur->status)) && in validate()
477 (SLOT_PRESENT(slot_cur->status)) && in validate()
478 !(SLOT_LATCH(slot_cur->status))) in validate()
482 if ((SLOT_PWRGD(slot_cur->status)) && in validate()
483 (SLOT_PRESENT(slot_cur->status)) && in validate()
484 !(SLOT_LATCH(slot_cur->status))) in validate()
491 return -EINVAL; in validate()
501 struct pci_bus *bus = slot_cur->hotplug_slot.pci_slot->bus; in ibmphp_update_slot_info()
505 bus_speed = slot_cur->bus_on->current_speed; in ibmphp_update_slot_info()
506 mode = slot_cur->bus_on->current_bus_mode; in ibmphp_update_slot_info()
527 bus->cur_bus_speed = bus_speed; in ibmphp_update_slot_info()
544 if (slot_cur->func) { in ibm_slot_find()
545 func_cur = slot_cur->func; in ibm_slot_find()
547 if ((func_cur->busno == busno) && in ibm_slot_find()
548 (func_cur->device == device) && in ibm_slot_find()
549 (func_cur->function == function)) in ibm_slot_find()
551 func_cur = func_cur->next; in ibm_slot_find()
567 debug("%s -- enter\n", __func__); in free_slots()
571 pci_hp_del(&slot_cur->hotplug_slot); in free_slots()
572 slot_cur->ctrl = NULL; in free_slots()
573 slot_cur->bus_on = NULL; in free_slots()
579 ibmphp_unconfigure_card(&slot_cur, -1); in free_slots()
581 pci_hp_destroy(&slot_cur->hotplug_slot); in free_slots()
584 debug("%s -- exit\n", __func__); in free_slots()
593 debug("func->device = %x, func->function = %x\n", in ibm_unconfigure_device()
594 func->device, func->function); in ibm_unconfigure_device()
595 debug("func->device << 3 | 0x0 = %x\n", func->device << 3 | 0x0); in ibm_unconfigure_device()
600 temp = pci_get_domain_bus_and_slot(0, func->busno, in ibm_unconfigure_device()
601 (func->device << 3) | j); in ibm_unconfigure_device()
608 pci_dev_put(func->dev); in ibm_unconfigure_device()
637 bus->number = busno; in bus_structure_fixup()
638 bus->ops = ibmphp_pci_bus->ops; in bus_structure_fixup()
639 dev->bus = bus; in bus_structure_fixup()
640 for (dev->devfn = 0; dev->devfn < 256; dev->devfn += 8) { in bus_structure_fixup()
643 debug("%s - Inside bus_structure_fixup()\n", in bus_structure_fixup()
645 b = pci_scan_bus(busno, ibmphp_pci_bus->ops, NULL); in bus_structure_fixup()
669 if (!(bus_structure_fixup(func->busno))) in ibm_configure_device()
671 if (func->dev == NULL) in ibm_configure_device()
672 func->dev = pci_get_domain_bus_and_slot(0, func->busno, in ibm_configure_device()
673 PCI_DEVFN(func->device, func->function)); in ibm_configure_device()
675 if (func->dev == NULL) { in ibm_configure_device()
676 struct pci_bus *bus = pci_find_bus(0, func->busno); in ibm_configure_device()
681 PCI_DEVFN(func->device, func->function)); in ibm_configure_device()
685 func->dev = pci_get_domain_bus_and_slot(0, func->busno, in ibm_configure_device()
686 PCI_DEVFN(func->device, func->function)); in ibm_configure_device()
687 if (func->dev == NULL) { in ibm_configure_device()
692 if (!(flag) && (func->dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)) { in ibm_configure_device()
693 pci_hp_add_bridge(func->dev); in ibm_configure_device()
694 child = func->dev->subordinate; in ibm_configure_device()
709 int rc; in is_bus_empty() local
711 u8 i = slot_cur->bus_on->slot_min; in is_bus_empty()
713 while (i <= slot_cur->bus_on->slot_max) { in is_bus_empty()
714 if (i == slot_cur->number) { in is_bus_empty()
721 rc = slot_update(&tmp_slot); in is_bus_empty()
722 if (rc) in is_bus_empty()
724 if (SLOT_PRESENT(tmp_slot->status) && in is_bus_empty()
725 SLOT_PWRGD(tmp_slot->status)) in is_bus_empty()
740 int rc; in set_bus() local
749 debug("%s - entry slot # %d\n", __func__, slot_cur->number); in set_bus()
750 if (SET_BUS_STATUS(slot_cur->ctrl) && is_bus_empty(slot_cur)) { in set_bus()
751 rc = slot_update(&slot_cur); in set_bus()
752 if (rc) in set_bus()
753 return rc; in set_bus()
754 speed = SLOT_SPEED(slot_cur->ext_status); in set_bus()
755 debug("ext_status = %x, speed = %x\n", slot_cur->ext_status, speed); in set_bus()
761 if (SLOT_PCIX(slot_cur->ext_status)) { in set_bus()
762 if ((slot_cur->supported_speed >= BUS_SPEED_66) && in set_bus()
763 (slot_cur->supported_bus_mode == BUS_MODE_PCIX)) in set_bus()
765 else if (!SLOT_BUS_MODE(slot_cur->ext_status)) in set_bus()
773 if (slot_cur->supported_speed >= BUS_SPEED_66) in set_bus()
780 switch (slot_cur->supported_speed) { in set_bus()
785 if (slot_cur->supported_bus_mode == BUS_MODE_PCIX) in set_bus()
802 return -ENODEV; in set_bus()
807 return -ENODEV; in set_bus()
809 debug("setting bus speed for slot %d, cmd %x\n", in set_bus()
810 slot_cur->number, cmd); in set_bus()
816 if (CTLR_RESULT(slot_cur->ctrl->status)) { in set_bus()
818 return -EIO; in set_bus()
824 debug("%s -Exit\n", __func__); in set_bus()
833 * Returns: 0 = no limitations, -EINVAL = exceeded limitations on the bus
842 for (i = slot_cur->bus_on->slot_min; i <= slot_cur->bus_on->slot_max; i++) { in check_limitations()
845 return -ENODEV; in check_limitations()
846 if ((SLOT_PWRGD(tmp_slot->status)) && in check_limitations()
847 !(SLOT_CONNECT(tmp_slot->status))) in check_limitations()
851 switch (slot_cur->bus_on->current_speed) { in check_limitations()
853 limitation = slot_cur->bus_on->slots_at_33_conv; in check_limitations()
856 if (slot_cur->bus_on->current_bus_mode == BUS_MODE_PCIX) in check_limitations()
857 limitation = slot_cur->bus_on->slots_at_66_pcix; in check_limitations()
859 limitation = slot_cur->bus_on->slots_at_66_conv; in check_limitations()
862 limitation = slot_cur->bus_on->slots_at_100_pcix; in check_limitations()
865 limitation = slot_cur->bus_on->slots_at_133_pcix; in check_limitations()
870 return -EINVAL; in check_limitations()
877 if ((slot_cur->ext_status & CARD_INFO) == PCIX133) in print_card_capability()
878 info(" 133 MHz PCI-X\n"); in print_card_capability()
879 else if ((slot_cur->ext_status & CARD_INFO) == PCIX66) in print_card_capability()
880 info(" 66 MHz PCI-X\n"); in print_card_capability()
881 else if ((slot_cur->ext_status & CARD_INFO) == PCI66) in print_card_capability()
895 int rc, i, rcpr; in enable_slot() local
905 rc = validate(slot_cur, ENABLE); in enable_slot()
906 if (rc) { in enable_slot()
913 rc = set_bus(slot_cur); in enable_slot()
914 if (rc) { in enable_slot()
919 /*-----------------debugging------------------------------*/ in enable_slot()
921 debug("the current bus speed right after set_bus = %x\n", in enable_slot()
922 slot_cur->bus_on->current_speed); in enable_slot()
923 /*----------------------------------------------------------*/ in enable_slot()
925 rc = check_limitations(slot_cur); in enable_slot()
926 if (rc) { in enable_slot()
929 err("Try hot-adding into another bus\n"); in enable_slot()
930 rc = -EINVAL; in enable_slot()
934 rc = power_on(slot_cur); in enable_slot()
936 if (rc) { in enable_slot()
944 rc = -ENODEV; in enable_slot()
948 if ((SLOT_POWER(slot_cur->status)) && in enable_slot()
949 !(SLOT_PWRGD(slot_cur->status))) in enable_slot()
951 else if (SLOT_BUS_SPEED(slot_cur->status)) { in enable_slot()
954 } else if (SLOT_BUS_MODE(slot_cur->ext_status)) { in enable_slot()
962 /*-----------------------debugging---------------------------*/ in enable_slot()
964 debug("the current bus speed right after power_on = %x\n", in enable_slot()
965 slot_cur->bus_on->current_speed); in enable_slot()
966 /*----------------------------------------------------------*/ in enable_slot()
968 rc = slot_update(&slot_cur); in enable_slot()
969 if (rc) in enable_slot()
972 rc = -EINVAL; in enable_slot()
973 if (SLOT_POWER(slot_cur->status) && !(SLOT_PWRGD(slot_cur->status))) { in enable_slot()
977 if (SLOT_POWER(slot_cur->status) && (SLOT_BUS_SPEED(slot_cur->status))) { in enable_slot()
984 if (!(SLOT_POWER(slot_cur->status))) { in enable_slot()
989 slot_cur->func = kzalloc(sizeof(struct pci_func), GFP_KERNEL); in enable_slot()
990 if (!slot_cur->func) { in enable_slot()
992 rc = -ENOMEM; in enable_slot()
995 slot_cur->func->busno = slot_cur->bus; in enable_slot()
996 slot_cur->func->device = slot_cur->device; in enable_slot()
998 slot_cur->func->irq[i] = slot_cur->irq[i]; in enable_slot()
1000 debug("b4 configure_card, slot_cur->bus = %x, slot_cur->device = %x\n", in enable_slot()
1001 slot_cur->bus, slot_cur->device); in enable_slot()
1003 if (ibmphp_configure_card(slot_cur->func, slot_cur->number)) { in enable_slot()
1009 slot_cur->func = NULL; in enable_slot()
1010 rc = -ENOMEM; in enable_slot()
1016 tmp_func = ibm_slot_find(slot_cur->bus, slot_cur->func->device, in enable_slot()
1018 if (tmp_func && !(tmp_func->dev)) in enable_slot()
1024 rc = -EFAULT; in enable_slot()
1028 rc = ibmphp_update_slot_info(slot_cur); in enable_slot()
1031 return rc; in enable_slot()
1039 rc = rcpr; in enable_slot()
1050 rc = rcpr; in enable_slot()
1065 int rc; in ibmphp_disable_slot() local
1068 rc = ibmphp_do_disable_slot(slot); in ibmphp_disable_slot()
1070 return rc; in ibmphp_disable_slot()
1075 int rc; in ibmphp_do_disable_slot() local
1080 if ((slot_cur == NULL) || (slot_cur->ctrl == NULL)) in ibmphp_do_disable_slot()
1081 return -ENODEV; in ibmphp_do_disable_slot()
1083 flag = slot_cur->flag; in ibmphp_do_disable_slot()
1084 slot_cur->flag = 1; in ibmphp_do_disable_slot()
1087 rc = validate(slot_cur, DISABLE); in ibmphp_do_disable_slot()
1089 if (rc) in ibmphp_do_disable_slot()
1094 if (slot_cur->func == NULL) { in ibmphp_do_disable_slot()
1096 slot_cur->func = kzalloc(sizeof(struct pci_func), GFP_KERNEL); in ibmphp_do_disable_slot()
1097 if (!slot_cur->func) { in ibmphp_do_disable_slot()
1098 rc = -ENOMEM; in ibmphp_do_disable_slot()
1101 slot_cur->func->busno = slot_cur->bus; in ibmphp_do_disable_slot()
1102 slot_cur->func->device = slot_cur->device; in ibmphp_do_disable_slot()
1105 ibm_unconfigure_device(slot_cur->func); in ibmphp_do_disable_slot()
1119 rc = ibmphp_unconfigure_card(&slot_cur, 0); in ibmphp_do_disable_slot()
1120 slot_cur->func = NULL; in ibmphp_do_disable_slot()
1122 if (rc) { in ibmphp_do_disable_slot()
1127 rc = ibmphp_hpc_writeslot(slot_cur, HPC_SLOT_OFF); in ibmphp_do_disable_slot()
1128 if (rc) in ibmphp_do_disable_slot()
1132 rc = slot_update(&slot_cur); in ibmphp_do_disable_slot()
1133 if (rc) in ibmphp_do_disable_slot()
1136 rc = ibmphp_update_slot_info(slot_cur); in ibmphp_do_disable_slot()
1139 return rc; in ibmphp_do_disable_slot()
1146 rc = -EFAULT; in ibmphp_do_disable_slot()
1184 int rc = 0; in ibmphp_init() local
1192 rc = -ENOMEM; in ibmphp_init()
1199 rc = -ENODEV; in ibmphp_init()
1209 rc = ibmphp_access_ebda(); in ibmphp_init()
1210 if (rc) in ibmphp_init()
1214 rc = ibmphp_rsrc_init(); in ibmphp_init()
1215 if (rc) in ibmphp_init()
1221 rc = ibmphp_register_pci(); in ibmphp_init()
1222 if (rc) in ibmphp_init()
1226 rc = -ENODEV; in ibmphp_init()
1231 rc = ibmphp_hpc_start_poll_thread(); in ibmphp_init()
1232 if (rc) in ibmphp_init()
1236 return rc; in ibmphp_init()