.. | .. |
---|
247 | 247 | break; |
---|
248 | 248 | } |
---|
249 | 249 | if (rc == 0) { |
---|
250 | | - pslot = hotplug_slot->private; |
---|
251 | | - if (pslot) |
---|
252 | | - rc = ibmphp_hpc_writeslot(pslot, cmd); |
---|
253 | | - else |
---|
254 | | - rc = -ENODEV; |
---|
| 250 | + pslot = to_slot(hotplug_slot); |
---|
| 251 | + rc = ibmphp_hpc_writeslot(pslot, cmd); |
---|
255 | 252 | } |
---|
256 | 253 | } else |
---|
257 | 254 | rc = -ENODEV; |
---|
.. | .. |
---|
273 | 270 | |
---|
274 | 271 | ibmphp_lock_operations(); |
---|
275 | 272 | if (hotplug_slot) { |
---|
276 | | - pslot = hotplug_slot->private; |
---|
277 | | - if (pslot) { |
---|
278 | | - memcpy(&myslot, pslot, sizeof(struct slot)); |
---|
279 | | - rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, |
---|
280 | | - &(myslot.status)); |
---|
281 | | - if (!rc) |
---|
282 | | - rc = ibmphp_hpc_readslot(pslot, |
---|
283 | | - READ_EXTSLOTSTATUS, |
---|
284 | | - &(myslot.ext_status)); |
---|
285 | | - if (!rc) |
---|
286 | | - *value = SLOT_ATTN(myslot.status, |
---|
287 | | - myslot.ext_status); |
---|
288 | | - } |
---|
| 273 | + pslot = to_slot(hotplug_slot); |
---|
| 274 | + memcpy(&myslot, pslot, sizeof(struct slot)); |
---|
| 275 | + rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, |
---|
| 276 | + &myslot.status); |
---|
| 277 | + if (!rc) |
---|
| 278 | + rc = ibmphp_hpc_readslot(pslot, READ_EXTSLOTSTATUS, |
---|
| 279 | + &myslot.ext_status); |
---|
| 280 | + if (!rc) |
---|
| 281 | + *value = SLOT_ATTN(myslot.status, myslot.ext_status); |
---|
289 | 282 | } |
---|
290 | 283 | |
---|
291 | 284 | ibmphp_unlock_operations(); |
---|
.. | .. |
---|
303 | 296 | (ulong) hotplug_slot, (ulong) value); |
---|
304 | 297 | ibmphp_lock_operations(); |
---|
305 | 298 | if (hotplug_slot) { |
---|
306 | | - pslot = hotplug_slot->private; |
---|
307 | | - if (pslot) { |
---|
308 | | - memcpy(&myslot, pslot, sizeof(struct slot)); |
---|
309 | | - rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, |
---|
310 | | - &(myslot.status)); |
---|
311 | | - if (!rc) |
---|
312 | | - *value = SLOT_LATCH(myslot.status); |
---|
313 | | - } |
---|
| 299 | + pslot = to_slot(hotplug_slot); |
---|
| 300 | + memcpy(&myslot, pslot, sizeof(struct slot)); |
---|
| 301 | + rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, |
---|
| 302 | + &myslot.status); |
---|
| 303 | + if (!rc) |
---|
| 304 | + *value = SLOT_LATCH(myslot.status); |
---|
314 | 305 | } |
---|
315 | 306 | |
---|
316 | 307 | ibmphp_unlock_operations(); |
---|
.. | .. |
---|
330 | 321 | (ulong) hotplug_slot, (ulong) value); |
---|
331 | 322 | ibmphp_lock_operations(); |
---|
332 | 323 | if (hotplug_slot) { |
---|
333 | | - pslot = hotplug_slot->private; |
---|
334 | | - if (pslot) { |
---|
335 | | - memcpy(&myslot, pslot, sizeof(struct slot)); |
---|
336 | | - rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, |
---|
337 | | - &(myslot.status)); |
---|
338 | | - if (!rc) |
---|
339 | | - *value = SLOT_PWRGD(myslot.status); |
---|
340 | | - } |
---|
| 324 | + pslot = to_slot(hotplug_slot); |
---|
| 325 | + memcpy(&myslot, pslot, sizeof(struct slot)); |
---|
| 326 | + rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, |
---|
| 327 | + &myslot.status); |
---|
| 328 | + if (!rc) |
---|
| 329 | + *value = SLOT_PWRGD(myslot.status); |
---|
341 | 330 | } |
---|
342 | 331 | |
---|
343 | 332 | ibmphp_unlock_operations(); |
---|
.. | .. |
---|
357 | 346 | (ulong) hotplug_slot, (ulong) value); |
---|
358 | 347 | ibmphp_lock_operations(); |
---|
359 | 348 | if (hotplug_slot) { |
---|
360 | | - pslot = hotplug_slot->private; |
---|
361 | | - if (pslot) { |
---|
362 | | - memcpy(&myslot, pslot, sizeof(struct slot)); |
---|
363 | | - rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, |
---|
364 | | - &(myslot.status)); |
---|
365 | | - if (!rc) { |
---|
366 | | - present = SLOT_PRESENT(myslot.status); |
---|
367 | | - if (present == HPC_SLOT_EMPTY) |
---|
368 | | - *value = 0; |
---|
369 | | - else |
---|
370 | | - *value = 1; |
---|
371 | | - } |
---|
| 349 | + pslot = to_slot(hotplug_slot); |
---|
| 350 | + memcpy(&myslot, pslot, sizeof(struct slot)); |
---|
| 351 | + rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, |
---|
| 352 | + &myslot.status); |
---|
| 353 | + if (!rc) { |
---|
| 354 | + present = SLOT_PRESENT(myslot.status); |
---|
| 355 | + if (present == HPC_SLOT_EMPTY) |
---|
| 356 | + *value = 0; |
---|
| 357 | + else |
---|
| 358 | + *value = 1; |
---|
372 | 359 | } |
---|
373 | 360 | } |
---|
374 | 361 | |
---|
.. | .. |
---|
382 | 369 | int rc = 0; |
---|
383 | 370 | u8 mode = 0; |
---|
384 | 371 | enum pci_bus_speed speed; |
---|
385 | | - struct pci_bus *bus = slot->hotplug_slot->pci_slot->bus; |
---|
| 372 | + struct pci_bus *bus = slot->hotplug_slot.pci_slot->bus; |
---|
386 | 373 | |
---|
387 | 374 | debug("%s - Entry slot[%p]\n", __func__, slot); |
---|
388 | 375 | |
---|
.. | .. |
---|
582 | 569 | ****************************************************************************/ |
---|
583 | 570 | int ibmphp_update_slot_info(struct slot *slot_cur) |
---|
584 | 571 | { |
---|
585 | | - struct hotplug_slot_info *info; |
---|
586 | | - struct pci_bus *bus = slot_cur->hotplug_slot->pci_slot->bus; |
---|
587 | | - int rc; |
---|
| 572 | + struct pci_bus *bus = slot_cur->hotplug_slot.pci_slot->bus; |
---|
588 | 573 | u8 bus_speed; |
---|
589 | 574 | u8 mode; |
---|
590 | | - |
---|
591 | | - info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); |
---|
592 | | - if (!info) |
---|
593 | | - return -ENOMEM; |
---|
594 | | - |
---|
595 | | - info->power_status = SLOT_PWRGD(slot_cur->status); |
---|
596 | | - info->attention_status = SLOT_ATTN(slot_cur->status, |
---|
597 | | - slot_cur->ext_status); |
---|
598 | | - info->latch_status = SLOT_LATCH(slot_cur->status); |
---|
599 | | - if (!SLOT_PRESENT(slot_cur->status)) { |
---|
600 | | - info->adapter_status = 0; |
---|
601 | | -/* info->max_adapter_speed_status = MAX_ADAPTER_NONE; */ |
---|
602 | | - } else { |
---|
603 | | - info->adapter_status = 1; |
---|
604 | | -/* get_max_adapter_speed_1(slot_cur->hotplug_slot, |
---|
605 | | - &info->max_adapter_speed_status, 0); */ |
---|
606 | | - } |
---|
607 | 575 | |
---|
608 | 576 | bus_speed = slot_cur->bus_on->current_speed; |
---|
609 | 577 | mode = slot_cur->bus_on->current_bus_mode; |
---|
.. | .. |
---|
630 | 598 | bus->cur_bus_speed = bus_speed; |
---|
631 | 599 | // To do: bus_names |
---|
632 | 600 | |
---|
633 | | - rc = pci_hp_change_slot_info(slot_cur->hotplug_slot, info); |
---|
634 | | - kfree(info); |
---|
635 | | - return rc; |
---|
| 601 | + return 0; |
---|
636 | 602 | } |
---|
637 | 603 | |
---|
638 | 604 | |
---|
.. | .. |
---|
673 | 639 | |
---|
674 | 640 | list_for_each_entry_safe(slot_cur, next, &ibmphp_slot_head, |
---|
675 | 641 | ibm_slot_list) { |
---|
676 | | - pci_hp_del(slot_cur->hotplug_slot); |
---|
| 642 | + pci_hp_del(&slot_cur->hotplug_slot); |
---|
677 | 643 | slot_cur->ctrl = NULL; |
---|
678 | 644 | slot_cur->bus_on = NULL; |
---|
679 | 645 | |
---|
.. | .. |
---|
683 | 649 | */ |
---|
684 | 650 | ibmphp_unconfigure_card(&slot_cur, -1); |
---|
685 | 651 | |
---|
686 | | - pci_hp_destroy(slot_cur->hotplug_slot); |
---|
687 | | - kfree(slot_cur->hotplug_slot->info); |
---|
688 | | - kfree(slot_cur->hotplug_slot); |
---|
| 652 | + pci_hp_destroy(&slot_cur->hotplug_slot); |
---|
689 | 653 | kfree(slot_cur); |
---|
690 | 654 | } |
---|
691 | 655 | debug("%s -- exit\n", __func__); |
---|
.. | .. |
---|
1007 | 971 | ibmphp_lock_operations(); |
---|
1008 | 972 | |
---|
1009 | 973 | debug("ENABLING SLOT........\n"); |
---|
1010 | | - slot_cur = hs->private; |
---|
| 974 | + slot_cur = to_slot(hs); |
---|
1011 | 975 | |
---|
1012 | 976 | rc = validate(slot_cur, ENABLE); |
---|
1013 | 977 | if (rc) { |
---|
.. | .. |
---|
1095 | 1059 | |
---|
1096 | 1060 | slot_cur->func = kzalloc(sizeof(struct pci_func), GFP_KERNEL); |
---|
1097 | 1061 | if (!slot_cur->func) { |
---|
1098 | | - /* We cannot do update_slot_info here, since no memory for |
---|
1099 | | - * kmalloc n.e.ways, and update_slot_info allocates some */ |
---|
| 1062 | + /* do update_slot_info here? */ |
---|
1100 | 1063 | rc = -ENOMEM; |
---|
1101 | 1064 | goto error_power; |
---|
1102 | 1065 | } |
---|
.. | .. |
---|
1169 | 1132 | **************************************************************/ |
---|
1170 | 1133 | static int ibmphp_disable_slot(struct hotplug_slot *hotplug_slot) |
---|
1171 | 1134 | { |
---|
1172 | | - struct slot *slot = hotplug_slot->private; |
---|
| 1135 | + struct slot *slot = to_slot(hotplug_slot); |
---|
1173 | 1136 | int rc; |
---|
1174 | 1137 | |
---|
1175 | 1138 | ibmphp_lock_operations(); |
---|
.. | .. |
---|
1259 | 1222 | goto exit; |
---|
1260 | 1223 | } |
---|
1261 | 1224 | |
---|
1262 | | -struct hotplug_slot_ops ibmphp_hotplug_slot_ops = { |
---|
| 1225 | +const struct hotplug_slot_ops ibmphp_hotplug_slot_ops = { |
---|
1263 | 1226 | .set_attention_status = set_attention_status, |
---|
1264 | 1227 | .enable_slot = enable_slot, |
---|
1265 | 1228 | .disable_slot = ibmphp_disable_slot, |
---|
.. | .. |
---|
1313 | 1276 | memcpy(ibmphp_pci_bus, bus, sizeof(*ibmphp_pci_bus)); |
---|
1314 | 1277 | |
---|
1315 | 1278 | ibmphp_debug = debug; |
---|
1316 | | - |
---|
1317 | | - ibmphp_hpc_initvars(); |
---|
1318 | 1279 | |
---|
1319 | 1280 | for (i = 0; i < 16; i++) |
---|
1320 | 1281 | irqs[i] = 0; |
---|