• Home
  • Raw
  • Download

Lines Matching +full:mem +full:- +full:io

1 // SPDX-License-Identifier: GPL-2.0+
7 * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com)
40 if (cur_func->irq[j] == 0xff) { in assign_alt_irq()
43 cur_func->irq[j] = SCSI_IRQ; in assign_alt_irq()
46 cur_func->irq[j] = LAN_IRQ; in assign_alt_irq()
49 cur_func->irq[j] = OTHER_IRQ; in assign_alt_irq()
59 * multi-functional
81 debug("inside configure_card, func->busno = %x\n", func->busno); in ibmphp_configure_card()
83 device = func->device; in ibmphp_configure_card()
87 * func->busno is correct, and func->device contains only device (at the 5 in ibmphp_configure_card()
94 ibmphp_pci_bus->number = cur_func->busno; in ibmphp_configure_card()
96 cur_func->function = function; in ibmphp_configure_card()
98 debug("inside the loop, cur_func->busno = %x, cur_func->device = %x, cur_func->function = %x\n", in ibmphp_configure_card()
99 cur_func->busno, cur_func->device, cur_func->function); in ibmphp_configure_card()
112 * |_=> 0 = single function device, 1 = multi-function device in ibmphp_configure_card()
123 "Please choose another device.\n", cur_func->device); in ibmphp_configure_card()
124 return -ENODEV; in ibmphp_configure_card()
127 cur_func->device); in ibmphp_configure_card()
128 return -ENODEV; in ibmphp_configure_card()
138 cur_func->device, cur_func->busno); in ibmphp_configure_card()
142 cur_func->next = NULL; in ibmphp_configure_card()
151 cur_func->device, cur_func->busno); in ibmphp_configure_card()
157 return -ENOMEM; in ibmphp_configure_card()
159 newfunc->busno = cur_func->busno; in ibmphp_configure_card()
160 newfunc->device = device; in ibmphp_configure_card()
161 cur_func->next = newfunc; in ibmphp_configure_card()
164 newfunc->irq[j] = cur_func->irq[j]; in ibmphp_configure_card()
169 …err("This %x is not PCI-to-PCI bridge, and as is not supported for hot-plugging. Please insert an… in ibmphp_configure_card()
170 cur_func->device); in ibmphp_configure_card()
171 return -ENODEV; in ibmphp_configure_card()
175 if (rc == -ENODEV) { in ibmphp_configure_card()
177 err("Bus %x, devfunc %x\n", cur_func->busno, cur_func->device); in ibmphp_configure_card()
182 err("was not able to hot-add PPB properly.\n"); in ibmphp_configure_card()
183 func->bus = 1; /* To indicate to the unconfigure function that this is a PPB */ in ibmphp_configure_card()
191 if (func->devices[i]) { in ibmphp_configure_card()
194 return -ENOMEM; in ibmphp_configure_card()
196 newfunc->busno = sec_number; in ibmphp_configure_card()
197 newfunc->device = (u8) i; in ibmphp_configure_card()
199 newfunc->irq[j] = cur_func->irq[j]; in ibmphp_configure_card()
202 for (prev_func = cur_func; prev_func->next; prev_func = prev_func->next) ; in ibmphp_configure_card()
203 prev_func->next = newfunc; in ibmphp_configure_card()
205 cur_func->next = newfunc; in ibmphp_configure_card()
211 func->bus = 1; /* To indicate to the unconfigure function that this is a PPB */ in ibmphp_configure_card()
221 return -ENOMEM; in ibmphp_configure_card()
223 newfunc->busno = cur_func->busno; in ibmphp_configure_card()
224 newfunc->device = device; in ibmphp_configure_card()
226 newfunc->irq[j] = cur_func->irq[j]; in ibmphp_configure_card()
227 for (prev_func = cur_func; prev_func->next; prev_func = prev_func->next); in ibmphp_configure_card()
228 prev_func->next = newfunc; in ibmphp_configure_card()
235 …err("This %x is not PCI-to-PCI bridge, and as is not supported for hot-plugging. Please insert an… in ibmphp_configure_card()
236 cur_func->device); in ibmphp_configure_card()
237 return -ENODEV; in ibmphp_configure_card()
242 debug("cur_func->busno b4 configure_bridge is %x\n", cur_func->busno); in ibmphp_configure_card()
244 if (rc == -ENODEV) { in ibmphp_configure_card()
246 err("Bus %x, devfunc %x\n", cur_func->busno, cur_func->device); in ibmphp_configure_card()
251 func->bus = 1; /* To indicate to the unconfigure function that this is a PPB */ in ibmphp_configure_card()
252 err("was not able to hot-add PPB properly.\n"); in ibmphp_configure_card()
256 debug("cur_func->busno = %x, device = %x, function = %x\n", in ibmphp_configure_card()
257 cur_func->busno, device, function); in ibmphp_configure_card()
262 if (func->devices[i]) { in ibmphp_configure_card()
266 return -ENOMEM; in ibmphp_configure_card()
268 newfunc->busno = sec_number; in ibmphp_configure_card()
269 newfunc->device = (u8) i; in ibmphp_configure_card()
271 newfunc->irq[j] = cur_func->irq[j]; in ibmphp_configure_card()
274 for (prev_func = cur_func; prev_func->next; prev_func = prev_func->next); in ibmphp_configure_card()
275 prev_func->next = newfunc; in ibmphp_configure_card()
277 cur_func->next = newfunc; in ibmphp_configure_card()
284 func->bus = 1; /* To indicate to the unconfigure function that this is a PPB */ in ibmphp_configure_card()
296 return -ENXIO; in ibmphp_configure_card()
304 return -ENODEV; in ibmphp_configure_card()
311 if (cur_func->io[i]) { in ibmphp_configure_card()
312 ibmphp_remove_resource(cur_func->io[i]); in ibmphp_configure_card()
313 cur_func->io[i] = NULL; in ibmphp_configure_card()
314 } else if (cur_func->pfmem[i]) { in ibmphp_configure_card()
315 ibmphp_remove_resource(cur_func->pfmem[i]); in ibmphp_configure_card()
316 cur_func->pfmem[i] = NULL; in ibmphp_configure_card()
317 } else if (cur_func->mem[i]) { in ibmphp_configure_card()
318 ibmphp_remove_resource(cur_func->mem[i]); in ibmphp_configure_card()
319 cur_func->mem[i] = NULL; in ibmphp_configure_card()
345 struct resource_node *io[6]; in configure_device() local
346 struct resource_node *mem[6]; in configure_device() local
351 debug("%s - inside\n", __func__); in configure_device()
353 devfn = PCI_DEVFN(func->device, func->function); in configure_device()
354 ibmphp_pci_bus->number = func->busno; in configure_device()
362 pcibios_read_config_byte(cur_func->busno, cur_func->device, in configure_device()
364 if (tmp & 0x01) // IO in configure_device()
365 pcibios_write_config_dword(cur_func->busno, cur_func->device, in configure_device()
368 pcibios_write_config_dword(cur_func->busno, cur_func->device, in configure_device()
377 debug("Device %x BAR %d wants %x\n", func->device, count, bar[count]); in configure_device()
380 /* This is IO */ in configure_device()
381 debug("inside IO SPACE\n"); in configure_device()
386 debug("len[count] in IO %x, count %d\n", len[count], count); in configure_device()
388 io[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL); in configure_device()
390 if (!io[count]) in configure_device()
391 return -ENOMEM; in configure_device()
393 io[count]->type = IO; in configure_device()
394 io[count]->busno = func->busno; in configure_device()
395 io[count]->devfunc = PCI_DEVFN(func->device, func->function); in configure_device()
396 io[count]->len = len[count]; in configure_device()
397 if (ibmphp_check_resource(io[count], 0) == 0) { in configure_device()
398 ibmphp_add_resource(io[count]); in configure_device()
399 func->io[count] = io[count]; in configure_device()
401 err("cannot allocate requested io for bus %x device %x function %x len %x\n", in configure_device()
402 func->busno, func->device, func->function, len[count]); in configure_device()
403 kfree(io[count]); in configure_device()
404 return -EIO; in configure_device()
406 pci_bus_write_config_dword(ibmphp_pci_bus, devfn, address[count], func->io[count]->start); in configure_device()
409 debug("b4 writing, the IO address is %x\n", func->io[count]->start); in configure_device()
427 return -ENOMEM; in configure_device()
429 pfmem[count]->type = PFMEM; in configure_device()
430 pfmem[count]->busno = func->busno; in configure_device()
431 pfmem[count]->devfunc = PCI_DEVFN(func->device, in configure_device()
432 func->function); in configure_device()
433 pfmem[count]->len = len[count]; in configure_device()
434 pfmem[count]->fromMem = 0; in configure_device()
437 func->pfmem[count] = pfmem[count]; in configure_device()
442 return -ENOMEM; in configure_device()
444 mem_tmp->type = MEM; in configure_device()
445 mem_tmp->busno = pfmem[count]->busno; in configure_device()
446 mem_tmp->devfunc = pfmem[count]->devfunc; in configure_device()
447 mem_tmp->len = pfmem[count]->len; in configure_device()
448 debug("there's no pfmem... going into mem.\n"); in configure_device()
451 pfmem[count]->fromMem = 1; in configure_device()
452 pfmem[count]->rangeno = mem_tmp->rangeno; in configure_device()
453 pfmem[count]->start = mem_tmp->start; in configure_device()
454 pfmem[count]->end = mem_tmp->end; in configure_device()
456 func->pfmem[count] = pfmem[count]; in configure_device()
459 func->busno, func->device, len[count]); in configure_device()
462 return -EIO; in configure_device()
466 pci_bus_write_config_dword(ibmphp_pci_bus, devfn, address[count], func->pfmem[count]->start); in configure_device()
469 debug("b4 writing, start address is %x\n", func->pfmem[count]->start); in configure_device()
475 debug("inside the mem 64 case, count %d\n", count); in configure_device()
482 debug("REGULAR MEM SPACE\n"); in configure_device()
487 debug("len[count] in Mem %x, count %d\n", len[count], count); in configure_device()
489 mem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL); in configure_device()
490 if (!mem[count]) in configure_device()
491 return -ENOMEM; in configure_device()
493 mem[count]->type = MEM; in configure_device()
494 mem[count]->busno = func->busno; in configure_device()
495 mem[count]->devfunc = PCI_DEVFN(func->device, in configure_device()
496 func->function); in configure_device()
497 mem[count]->len = len[count]; in configure_device()
498 if (ibmphp_check_resource(mem[count], 0) == 0) { in configure_device()
499 ibmphp_add_resource(mem[count]); in configure_device()
500 func->mem[count] = mem[count]; in configure_device()
502 err("cannot allocate requested mem for bus %x, device %x, len %x\n", in configure_device()
503 func->busno, func->device, len[count]); in configure_device()
504 kfree(mem[count]); in configure_device()
505 return -EIO; in configure_device()
507 pci_bus_write_config_dword(ibmphp_pci_bus, devfn, address[count], func->mem[count]->start); in configure_device()
509 debug("b4 writing, start address is %x\n", func->mem[count]->start); in configure_device()
516 debug("inside mem 64 case, reg. mem, count %d\n", count); in configure_device()
522 } /* end of mem */ in configure_device()
525 func->bus = 0; /* To indicate that this is not a PPB */ in configure_device()
528 pci_bus_write_config_byte(ibmphp_pci_bus, devfn, PCI_INTERRUPT_LINE, func->irq[irq - 1]); in configure_device()
540 * This routine configures a PCI-2-PCI bridge and the functions behind it
560 struct resource_node *io = NULL; in configure_bridge() local
562 struct resource_node *mem = NULL; in configure_bridge() local
578 debug("%s - enter\n", __func__); in configure_bridge()
580 devfn = PCI_DEVFN(func->function, func->device); in configure_bridge()
581 ibmphp_pci_bus->number = func->busno; in configure_bridge()
587 pci_bus_write_config_byte(ibmphp_pci_bus, devfn, PCI_PRIMARY_BUS, func->busno); in configure_bridge()
595 sec_number = find_sec_number(func->busno, slotno); in configure_bridge()
598 return -EINVAL; in configure_bridge()
602 debug("AFTER FIND_SEC_NUMBER, func->busno IS %x\n", func->busno); in configure_bridge()
622 debug("func->busno is %x\n", func->busno); in configure_bridge()
627 !!!!!!!!!!!!!!!NEED TO ADD!!! FAST BACK-TO-BACK ENABLE!!!!!!!!!!!!!!!!!!!! in configure_bridge()
631 /* First we need to allocate mem/io for the bridge itself in case it needs it */ in configure_bridge()
646 /* This is IO */ in configure_bridge()
650 debug("len[count] in IO = %x\n", len[count]); in configure_bridge()
655 retval = -ENOMEM; in configure_bridge()
658 bus_io[count]->type = IO; in configure_bridge()
659 bus_io[count]->busno = func->busno; in configure_bridge()
660 bus_io[count]->devfunc = PCI_DEVFN(func->device, in configure_bridge()
661 func->function); in configure_bridge()
662 bus_io[count]->len = len[count]; in configure_bridge()
665 func->io[count] = bus_io[count]; in configure_bridge()
667 err("cannot allocate requested io for bus %x, device %x, len %x\n", in configure_bridge()
668 func->busno, func->device, len[count]); in configure_bridge()
670 return -EIO; in configure_bridge()
673 pci_bus_write_config_dword(ibmphp_pci_bus, devfn, address[count], func->io[count]->start); in configure_bridge()
686 retval = -ENOMEM; in configure_bridge()
689 bus_pfmem[count]->type = PFMEM; in configure_bridge()
690 bus_pfmem[count]->busno = func->busno; in configure_bridge()
691 bus_pfmem[count]->devfunc = PCI_DEVFN(func->device, in configure_bridge()
692 func->function); in configure_bridge()
693 bus_pfmem[count]->len = len[count]; in configure_bridge()
694 bus_pfmem[count]->fromMem = 0; in configure_bridge()
697 func->pfmem[count] = bus_pfmem[count]; in configure_bridge()
701 retval = -ENOMEM; in configure_bridge()
704 mem_tmp->type = MEM; in configure_bridge()
705 mem_tmp->busno = bus_pfmem[count]->busno; in configure_bridge()
706 mem_tmp->devfunc = bus_pfmem[count]->devfunc; in configure_bridge()
707 mem_tmp->len = bus_pfmem[count]->len; in configure_bridge()
710 bus_pfmem[count]->fromMem = 1; in configure_bridge()
711 bus_pfmem[count]->rangeno = mem_tmp->rangeno; in configure_bridge()
713 func->pfmem[count] = bus_pfmem[count]; in configure_bridge()
716 func->busno, func->device, len[count]); in configure_bridge()
719 return -EIO; in configure_bridge()
723 pci_bus_write_config_dword(ibmphp_pci_bus, devfn, address[count], func->pfmem[count]->start); in configure_bridge()
741 retval = -ENOMEM; in configure_bridge()
744 bus_mem[count]->type = MEM; in configure_bridge()
745 bus_mem[count]->busno = func->busno; in configure_bridge()
746 bus_mem[count]->devfunc = PCI_DEVFN(func->device, in configure_bridge()
747 func->function); in configure_bridge()
748 bus_mem[count]->len = len[count]; in configure_bridge()
751 func->mem[count] = bus_mem[count]; in configure_bridge()
753 err("cannot allocate requested mem for bus %x, device %x, len %x\n", in configure_bridge()
754 func->busno, func->device, len[count]); in configure_bridge()
756 return -EIO; in configure_bridge()
759 pci_bus_write_config_dword(ibmphp_pci_bus, devfn, address[count], func->mem[count]->start); in configure_bridge()
769 } /* end of mem */ in configure_bridge()
775 return -ENOMEM; in configure_bridge()
777 ibmphp_pci_bus->number = func->busno; in configure_bridge()
779 debug("amount_needed->not_correct = %x\n", amount_needed->not_correct); in configure_bridge()
780 debug("amount_needed->io = %x\n", amount_needed->io); in configure_bridge()
781 debug("amount_needed->mem = %x\n", amount_needed->mem); in configure_bridge()
782 debug("amount_needed->pfmem = %x\n", amount_needed->pfmem); in configure_bridge()
784 if (amount_needed->not_correct) { in configure_bridge()
790 func->io[count] = NULL; in configure_bridge()
793 func->pfmem[count] = NULL; in configure_bridge()
796 func->mem[count] = NULL; in configure_bridge()
800 return -ENODEV; in configure_bridge()
803 if (!amount_needed->io) { in configure_bridge()
804 debug("it doesn't want IO?\n"); in configure_bridge()
807 debug("it wants %x IO behind the bridge\n", amount_needed->io); in configure_bridge()
808 io = kzalloc(sizeof(*io), GFP_KERNEL); in configure_bridge()
810 if (!io) { in configure_bridge()
811 retval = -ENOMEM; in configure_bridge()
814 io->type = IO; in configure_bridge()
815 io->busno = func->busno; in configure_bridge()
816 io->devfunc = PCI_DEVFN(func->device, func->function); in configure_bridge()
817 io->len = amount_needed->io; in configure_bridge()
818 if (ibmphp_check_resource(io, 1) == 0) { in configure_bridge()
819 debug("were we able to add io\n"); in configure_bridge()
820 ibmphp_add_resource(io); in configure_bridge()
825 if (!amount_needed->mem) { in configure_bridge()
829 debug("it wants %x memory behind the bridge\n", amount_needed->mem); in configure_bridge()
830 mem = kzalloc(sizeof(*mem), GFP_KERNEL); in configure_bridge()
831 if (!mem) { in configure_bridge()
832 retval = -ENOMEM; in configure_bridge()
835 mem->type = MEM; in configure_bridge()
836 mem->busno = func->busno; in configure_bridge()
837 mem->devfunc = PCI_DEVFN(func->device, func->function); in configure_bridge()
838 mem->len = amount_needed->mem; in configure_bridge()
839 if (ibmphp_check_resource(mem, 1) == 0) { in configure_bridge()
840 ibmphp_add_resource(mem); in configure_bridge()
842 debug("were we able to add mem\n"); in configure_bridge()
846 if (!amount_needed->pfmem) { in configure_bridge()
847 debug("it doesn't want n.e.pfmem mem?\n"); in configure_bridge()
850 debug("it wants %x pfmemory behind the bridge\n", amount_needed->pfmem); in configure_bridge()
853 retval = -ENOMEM; in configure_bridge()
856 pfmem->type = PFMEM; in configure_bridge()
857 pfmem->busno = func->busno; in configure_bridge()
858 pfmem->devfunc = PCI_DEVFN(func->device, func->function); in configure_bridge()
859 pfmem->len = amount_needed->pfmem; in configure_bridge()
860 pfmem->fromMem = 0; in configure_bridge()
867 retval = -ENOMEM; in configure_bridge()
870 mem_tmp->type = MEM; in configure_bridge()
871 mem_tmp->busno = pfmem->busno; in configure_bridge()
872 mem_tmp->devfunc = pfmem->devfunc; in configure_bridge()
873 mem_tmp->len = pfmem->len; in configure_bridge()
876 pfmem->fromMem = 1; in configure_bridge()
877 pfmem->rangeno = mem_tmp->rangeno; in configure_bridge()
897 retval = -ENOMEM; in configure_bridge()
900 bus->busno = sec_number; in configure_bridge()
902 rc = add_new_bus(bus, io, mem, pfmem, func->busno); in configure_bridge()
903 } else if (!(bus->rangeIO) && !(bus->rangeMem) && !(bus->rangePFMem)) in configure_bridge()
904 rc = add_new_bus(bus, io, mem, pfmem, 0xFF); in configure_bridge()
907 retval = -EIO; in configure_bridge()
911 if (rc == -ENOMEM) { in configure_bridge()
912 ibmphp_remove_bus(bus, func->busno); in configure_bridge()
923 debug("io 32\n"); in configure_bridge()
931 if (bus->noIORanges) { in configure_bridge()
932 pci_bus_write_config_byte(ibmphp_pci_bus, devfn, PCI_IO_BASE, 0x00 | bus->rangeIO->start >> 8); in configure_bridge()
933 pci_bus_write_config_byte(ibmphp_pci_bus, devfn, PCI_IO_LIMIT, 0x00 | bus->rangeIO->end >> 8); in configure_bridge()
951 if (bus->noMemRanges) { in configure_bridge()
952 …pci_bus_write_config_word(ibmphp_pci_bus, devfn, PCI_MEMORY_BASE, 0x0000 | bus->rangeMem->start >>… in configure_bridge()
953 …pci_bus_write_config_word(ibmphp_pci_bus, devfn, PCI_MEMORY_LIMIT, 0x0000 | bus->rangeMem->end >> … in configure_bridge()
966 if (bus->noPFMemRanges) { in configure_bridge()
967 …pci_bus_write_config_word(ibmphp_pci_bus, devfn, PCI_PREF_MEMORY_BASE, 0x0000 | bus->rangePFMem->s… in configure_bridge()
968 …ite_config_word(ibmphp_pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, 0x0000 | bus->rangePFMem->end >> 16); in configure_bridge()
990 pci_bus_write_config_byte(ibmphp_pci_bus, devfn, PCI_INTERRUPT_LINE, func->irq[irq - 1]); in configure_bridge()
1000 if (amount_needed->devices[i]) { in configure_bridge()
1002 func->devices[i] = 1; in configure_bridge()
1005 func->bus = 1; /* For unconfiguring, to indicate it's PPB */ in configure_bridge()
1007 debug("func->busno b4 returning is %x\n", func->busno); in configure_bridge()
1008 debug("func->busno b4 returning in the other structure is %x\n", (*func_passed)->busno); in configure_bridge()
1014 retval = -EIO; in configure_bridge()
1022 if (io) in configure_bridge()
1023 ibmphp_remove_resource(io); in configure_bridge()
1024 if (mem) in configure_bridge()
1025 ibmphp_remove_resource(mem); in configure_bridge()
1029 func->io[i] = NULL; in configure_bridge()
1032 func->pfmem[i] = NULL; in configure_bridge()
1035 func->mem[i] = NULL; in configure_bridge()
1072 ibmphp_pci_bus->number = busno; in scan_behind_bridge()
1077 amount->devices[device] = 0; in scan_behind_bridge()
1092 err("embedded bridges not supported for hot-plugging.\n"); in scan_behind_bridge()
1093 amount->not_correct = 1; in scan_behind_bridge()
1100 amount->not_correct = 1; in scan_behind_bridge()
1104 amount->not_correct = 1; in scan_behind_bridge()
1108 amount->devices[device] = 1; in scan_behind_bridge()
1114 if (tmp & 0x01) // IO in scan_behind_bridge()
1132 /* This is IO */ in scan_behind_bridge()
1135 amount->io += len[count]; in scan_behind_bridge()
1142 amount->pfmem += len[count]; in scan_behind_bridge()
1151 amount->mem += len[count]; in scan_behind_bridge()
1164 amount->not_correct = 1; in scan_behind_bridge()
1166 amount->not_correct = 0; in scan_behind_bridge()
1167 if ((amount->io) && (amount->io < IOBRIDGE)) in scan_behind_bridge()
1168 amount->io = IOBRIDGE; in scan_behind_bridge()
1169 if ((amount->mem) && (amount->mem < MEMBRIDGE)) in scan_behind_bridge()
1170 amount->mem = MEMBRIDGE; in scan_behind_bridge()
1171 if ((amount->pfmem) && (amount->pfmem < MEMBRIDGE)) in scan_behind_bridge()
1172 amount->pfmem = MEMBRIDGE; in scan_behind_bridge()
1179 * our resource lists. The functions return either 0, -ENODEV, or -1 (general failure)
1196 struct resource_node *io; in unconfigure_boot_device() local
1197 struct resource_node *mem; in unconfigure_boot_device() local
1206 debug("%s - enter\n", __func__); in unconfigure_boot_device()
1211 return -EINVAL; in unconfigure_boot_device()
1215 ibmphp_pci_bus->number = busno; in unconfigure_boot_device()
1234 /* This is IO */ in unconfigure_boot_device()
1238 end_address = start_address + size - 1; in unconfigure_boot_device()
1239 if (ibmphp_find_resource(bus, start_address, &io, IO)) in unconfigure_boot_device()
1242 debug("io->start = %x\n", io->start); in unconfigure_boot_device()
1243 temp_end = io->end; in unconfigure_boot_device()
1244 start_address = io->end + 1; in unconfigure_boot_device()
1245 ibmphp_remove_resource(io); in unconfigure_boot_device()
1249 &io, IO)) in unconfigure_boot_device()
1252 debug("io->start = %x\n", io->start); in unconfigure_boot_device()
1253 temp_end = io->end; in unconfigure_boot_device()
1254 start_address = io->end + 1; in unconfigure_boot_device()
1255 ibmphp_remove_resource(io); in unconfigure_boot_device()
1268 return -EIO; in unconfigure_boot_device()
1271 debug("pfmem->start = %x\n", pfmem->start); in unconfigure_boot_device()
1277 debug("start address of mem is %x\n", start_address); in unconfigure_boot_device()
1280 if (ibmphp_find_resource(bus, start_address, &mem, MEM) < 0) { in unconfigure_boot_device()
1281 err("cannot find corresponding MEM resource to remove\n"); in unconfigure_boot_device()
1282 return -EIO; in unconfigure_boot_device()
1284 if (mem) { in unconfigure_boot_device()
1285 debug("mem->start = %x\n", mem->start); in unconfigure_boot_device()
1287 ibmphp_remove_resource(mem); in unconfigure_boot_device()
1294 } /* end of mem */ in unconfigure_boot_device()
1300 err("cannot find corresponding IO resource to remove\n"); in unconfigure_boot_device()
1301 return -EIO; in unconfigure_boot_device()
1310 struct resource_node *io = NULL; in unconfigure_boot_bridge() local
1311 struct resource_node *mem = NULL; in unconfigure_boot_bridge() local
1322 ibmphp_pci_bus->number = busno; in unconfigure_boot_bridge()
1326 debug("%s - busno = %x, primary_number = %x\n", __func__, busno, pri_number); in unconfigure_boot_bridge()
1334 return -EINVAL; in unconfigure_boot_bridge()
1342 return -ENODEV; in unconfigure_boot_bridge()
1348 return -EINVAL; in unconfigure_boot_bridge()
1350 debug("bus->busno is %x\n", bus->busno); in unconfigure_boot_bridge()
1367 /* This is IO */ in unconfigure_boot_bridge()
1369 if (ibmphp_find_resource(bus, start_address, &io, IO) < 0) { in unconfigure_boot_bridge()
1370 err("cannot find corresponding IO resource to remove\n"); in unconfigure_boot_bridge()
1371 return -EIO; in unconfigure_boot_bridge()
1373 if (io) in unconfigure_boot_bridge()
1374 debug("io->start = %x\n", io->start); in unconfigure_boot_bridge()
1376 ibmphp_remove_resource(io); in unconfigure_boot_bridge()
1386 return -EINVAL; in unconfigure_boot_bridge()
1389 debug("pfmem->start = %x\n", pfmem->start); in unconfigure_boot_bridge()
1396 if (ibmphp_find_resource(bus, start_address, &mem, MEM) < 0) { in unconfigure_boot_bridge()
1397 err("cannot find corresponding MEM resource to remove\n"); in unconfigure_boot_bridge()
1398 return -EINVAL; in unconfigure_boot_bridge()
1400 if (mem) { in unconfigure_boot_bridge()
1401 debug("mem->start = %x\n", mem->start); in unconfigure_boot_bridge()
1403 ibmphp_remove_resource(mem); in unconfigure_boot_bridge()
1410 } /* end of mem */ in unconfigure_boot_bridge()
1412 debug("%s - exiting, returning success\n", __func__); in unconfigure_boot_bridge()
1428 debug("%s - enter\n", __func__); in unconfigure_boot_card()
1430 device = slot_cur->device; in unconfigure_boot_card()
1431 busno = slot_cur->bus; in unconfigure_boot_card()
1437 ibmphp_pci_bus->number = busno; in unconfigure_boot_card()
1445 debug("%s - found correct device\n", __func__); in unconfigure_boot_card()
1449 * |_=> 0 = single function device, 1 = multi-function device in unconfigure_boot_card()
1459 return -ENODEV; in unconfigure_boot_card()
1462 return -ENODEV; in unconfigure_boot_card()
1486 …err("This device %x function %x is not PCI-to-PCI bridge, and is not supported for hot-removing. … in unconfigure_boot_card()
1487 return -ENODEV; in unconfigure_boot_card()
1491 err("was not able to hot-remove PPB properly.\n"); in unconfigure_boot_card()
1500 …err("This device %x function %x is not PCI-to-PCI bridge, and is not supported for hot-removing. … in unconfigure_boot_card()
1501 return -ENODEV; in unconfigure_boot_card()
1505 err("was not able to hot-remove PPB properly.\n"); in unconfigure_boot_card()
1511 return -1; in unconfigure_boot_card()
1519 return -1; in unconfigure_boot_card()
1531 * Returns: 0, -1, -ENODEV
1542 debug("%s - enter\n", __func__); in ibmphp_unconfigure_card()
1547 if ((rc == -ENODEV) || (rc == -EIO) || (rc == -EINVAL)) { in ibmphp_unconfigure_card()
1553 if (sl->func) { in ibmphp_unconfigure_card()
1554 cur_func = sl->func; in ibmphp_unconfigure_card()
1557 if (cur_func->bus) { in ibmphp_unconfigure_card()
1565 if (cur_func->io[i]) { in ibmphp_unconfigure_card()
1566 debug("io[%d] exists\n", i); in ibmphp_unconfigure_card()
1568 ibmphp_remove_resource(cur_func->io[i]); in ibmphp_unconfigure_card()
1569 cur_func->io[i] = NULL; in ibmphp_unconfigure_card()
1571 if (cur_func->mem[i]) { in ibmphp_unconfigure_card()
1572 debug("mem[%d] exists\n", i); in ibmphp_unconfigure_card()
1574 ibmphp_remove_resource(cur_func->mem[i]); in ibmphp_unconfigure_card()
1575 cur_func->mem[i] = NULL; in ibmphp_unconfigure_card()
1577 if (cur_func->pfmem[i]) { in ibmphp_unconfigure_card()
1580 ibmphp_remove_resource(cur_func->pfmem[i]); in ibmphp_unconfigure_card()
1581 cur_func->pfmem[i] = NULL; in ibmphp_unconfigure_card()
1585 temp_func = cur_func->next; in ibmphp_unconfigure_card()
1591 sl->func = NULL; in ibmphp_unconfigure_card()
1593 debug("%s - exit\n", __func__); in ibmphp_unconfigure_card()
1598 * add a new bus resulting from hot-plugging a PPB bridge with devices
1603 * 0, -1, error
1605 static int add_new_bus(struct bus_node *bus, struct resource_node *io, struct resource_node *mem, s… in add_new_bus() argument
1617 return -ENODEV; in add_new_bus()
1620 list_add(&bus->bus_list, &cur_bus->bus_list); in add_new_bus()
1622 if (io) { in add_new_bus()
1625 return -ENOMEM; in add_new_bus()
1627 io_range->start = io->start; in add_new_bus()
1628 io_range->end = io->end; in add_new_bus()
1629 io_range->rangeno = 1; in add_new_bus()
1630 bus->noIORanges = 1; in add_new_bus()
1631 bus->rangeIO = io_range; in add_new_bus()
1633 if (mem) { in add_new_bus()
1636 return -ENOMEM; in add_new_bus()
1638 mem_range->start = mem->start; in add_new_bus()
1639 mem_range->end = mem->end; in add_new_bus()
1640 mem_range->rangeno = 1; in add_new_bus()
1641 bus->noMemRanges = 1; in add_new_bus()
1642 bus->rangeMem = mem_range; in add_new_bus()
1647 return -ENOMEM; in add_new_bus()
1649 pfmem_range->start = pfmem->start; in add_new_bus()
1650 pfmem_range->end = pfmem->end; in add_new_bus()
1651 pfmem_range->rangeno = 1; in add_new_bus()
1652 bus->noPFMemRanges = 1; in add_new_bus()
1653 bus->rangePFMem = pfmem_range; in add_new_bus()
1675 max = bus->slot_max; in find_sec_number()
1676 min = bus->slot_min; in find_sec_number()
1681 busno = (u8) (slotno - (u8) min); in find_sec_number()
1688 if ((!bus_cur) || (!(bus_cur->rangeIO) && !(bus_cur->rangeMem) && !(bus_cur->rangePFMem))) in find_sec_number()