diff options
Diffstat (limited to 'drivers/firewire')
-rw-r--r-- | drivers/firewire/fw-device.c | 14 | ||||
-rw-r--r-- | drivers/firewire/fw-ohci.c | 63 | ||||
-rw-r--r-- | drivers/firewire/fw-sbp2.c | 45 | ||||
-rw-r--r-- | drivers/firewire/fw-topology.c | 6 | ||||
-rw-r--r-- | drivers/firewire/fw-transaction.c | 3 | ||||
-rw-r--r-- | drivers/firewire/fw-transaction.h | 4 |
6 files changed, 98 insertions, 37 deletions
diff --git a/drivers/firewire/fw-device.c b/drivers/firewire/fw-device.c index 3fccdd484100..6b9be42c7b98 100644 --- a/drivers/firewire/fw-device.c +++ b/drivers/firewire/fw-device.c | |||
@@ -587,8 +587,7 @@ static void create_units(struct fw_device *device) | |||
587 | unit->device.bus = &fw_bus_type; | 587 | unit->device.bus = &fw_bus_type; |
588 | unit->device.type = &fw_unit_type; | 588 | unit->device.type = &fw_unit_type; |
589 | unit->device.parent = &device->device; | 589 | unit->device.parent = &device->device; |
590 | snprintf(unit->device.bus_id, sizeof(unit->device.bus_id), | 590 | dev_set_name(&unit->device, "%s.%d", dev_name(&device->device), i++); |
591 | "%s.%d", device->device.bus_id, i++); | ||
592 | 591 | ||
593 | init_fw_attribute_group(&unit->device, | 592 | init_fw_attribute_group(&unit->device, |
594 | fw_unit_attributes, | 593 | fw_unit_attributes, |
@@ -711,8 +710,7 @@ static void fw_device_init(struct work_struct *work) | |||
711 | device->device.type = &fw_device_type; | 710 | device->device.type = &fw_device_type; |
712 | device->device.parent = device->card->device; | 711 | device->device.parent = device->card->device; |
713 | device->device.devt = MKDEV(fw_cdev_major, minor); | 712 | device->device.devt = MKDEV(fw_cdev_major, minor); |
714 | snprintf(device->device.bus_id, sizeof(device->device.bus_id), | 713 | dev_set_name(&device->device, "fw%d", minor); |
715 | "fw%d", minor); | ||
716 | 714 | ||
717 | init_fw_attribute_group(&device->device, | 715 | init_fw_attribute_group(&device->device, |
718 | fw_device_attributes, | 716 | fw_device_attributes, |
@@ -741,13 +739,13 @@ static void fw_device_init(struct work_struct *work) | |||
741 | if (device->config_rom_retries) | 739 | if (device->config_rom_retries) |
742 | fw_notify("created device %s: GUID %08x%08x, S%d00, " | 740 | fw_notify("created device %s: GUID %08x%08x, S%d00, " |
743 | "%d config ROM retries\n", | 741 | "%d config ROM retries\n", |
744 | device->device.bus_id, | 742 | dev_name(&device->device), |
745 | device->config_rom[3], device->config_rom[4], | 743 | device->config_rom[3], device->config_rom[4], |
746 | 1 << device->max_speed, | 744 | 1 << device->max_speed, |
747 | device->config_rom_retries); | 745 | device->config_rom_retries); |
748 | else | 746 | else |
749 | fw_notify("created device %s: GUID %08x%08x, S%d00\n", | 747 | fw_notify("created device %s: GUID %08x%08x, S%d00\n", |
750 | device->device.bus_id, | 748 | dev_name(&device->device), |
751 | device->config_rom[3], device->config_rom[4], | 749 | device->config_rom[3], device->config_rom[4], |
752 | 1 << device->max_speed); | 750 | 1 << device->max_speed); |
753 | device->config_rom_retries = 0; | 751 | device->config_rom_retries = 0; |
@@ -883,12 +881,12 @@ static void fw_device_refresh(struct work_struct *work) | |||
883 | FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) | 881 | FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) |
884 | goto gone; | 882 | goto gone; |
885 | 883 | ||
886 | fw_notify("refreshed device %s\n", device->device.bus_id); | 884 | fw_notify("refreshed device %s\n", dev_name(&device->device)); |
887 | device->config_rom_retries = 0; | 885 | device->config_rom_retries = 0; |
888 | goto out; | 886 | goto out; |
889 | 887 | ||
890 | give_up: | 888 | give_up: |
891 | fw_notify("giving up on refresh of device %s\n", device->device.bus_id); | 889 | fw_notify("giving up on refresh of device %s\n", dev_name(&device->device)); |
892 | gone: | 890 | gone: |
893 | atomic_set(&device->state, FW_DEVICE_SHUTDOWN); | 891 | atomic_set(&device->state, FW_DEVICE_SHUTDOWN); |
894 | fw_device_shutdown(work); | 892 | fw_device_shutdown(work); |
diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c index 251416f2148f..ab9c01e462ef 100644 --- a/drivers/firewire/fw-ohci.c +++ b/drivers/firewire/fw-ohci.c | |||
@@ -476,6 +476,7 @@ static int ar_context_add_page(struct ar_context *ctx) | |||
476 | if (ab == NULL) | 476 | if (ab == NULL) |
477 | return -ENOMEM; | 477 | return -ENOMEM; |
478 | 478 | ||
479 | ab->next = NULL; | ||
479 | memset(&ab->descriptor, 0, sizeof(ab->descriptor)); | 480 | memset(&ab->descriptor, 0, sizeof(ab->descriptor)); |
480 | ab->descriptor.control = cpu_to_le16(DESCRIPTOR_INPUT_MORE | | 481 | ab->descriptor.control = cpu_to_le16(DESCRIPTOR_INPUT_MORE | |
481 | DESCRIPTOR_STATUS | | 482 | DESCRIPTOR_STATUS | |
@@ -496,6 +497,21 @@ static int ar_context_add_page(struct ar_context *ctx) | |||
496 | return 0; | 497 | return 0; |
497 | } | 498 | } |
498 | 499 | ||
500 | static void ar_context_release(struct ar_context *ctx) | ||
501 | { | ||
502 | struct ar_buffer *ab, *ab_next; | ||
503 | size_t offset; | ||
504 | dma_addr_t ab_bus; | ||
505 | |||
506 | for (ab = ctx->current_buffer; ab; ab = ab_next) { | ||
507 | ab_next = ab->next; | ||
508 | offset = offsetof(struct ar_buffer, data); | ||
509 | ab_bus = le32_to_cpu(ab->descriptor.data_address) - offset; | ||
510 | dma_free_coherent(ctx->ohci->card.device, PAGE_SIZE, | ||
511 | ab, ab_bus); | ||
512 | } | ||
513 | } | ||
514 | |||
499 | #if defined(CONFIG_PPC_PMAC) && defined(CONFIG_PPC32) | 515 | #if defined(CONFIG_PPC_PMAC) && defined(CONFIG_PPC32) |
500 | #define cond_le32_to_cpu(v) \ | 516 | #define cond_le32_to_cpu(v) \ |
501 | (ohci->old_uninorth ? (__force __u32)(v) : le32_to_cpu(v)) | 517 | (ohci->old_uninorth ? (__force __u32)(v) : le32_to_cpu(v)) |
@@ -958,6 +974,7 @@ at_context_queue_packet(struct context *ctx, struct fw_packet *packet) | |||
958 | packet->ack = RCODE_SEND_ERROR; | 974 | packet->ack = RCODE_SEND_ERROR; |
959 | return -1; | 975 | return -1; |
960 | } | 976 | } |
977 | packet->payload_bus = payload_bus; | ||
961 | 978 | ||
962 | d[2].req_count = cpu_to_le16(packet->payload_length); | 979 | d[2].req_count = cpu_to_le16(packet->payload_length); |
963 | d[2].data_address = cpu_to_le32(payload_bus); | 980 | d[2].data_address = cpu_to_le32(payload_bus); |
@@ -1009,7 +1026,6 @@ static int handle_at_packet(struct context *context, | |||
1009 | struct driver_data *driver_data; | 1026 | struct driver_data *driver_data; |
1010 | struct fw_packet *packet; | 1027 | struct fw_packet *packet; |
1011 | struct fw_ohci *ohci = context->ohci; | 1028 | struct fw_ohci *ohci = context->ohci; |
1012 | dma_addr_t payload_bus; | ||
1013 | int evt; | 1029 | int evt; |
1014 | 1030 | ||
1015 | if (last->transfer_status == 0) | 1031 | if (last->transfer_status == 0) |
@@ -1022,9 +1038,8 @@ static int handle_at_packet(struct context *context, | |||
1022 | /* This packet was cancelled, just continue. */ | 1038 | /* This packet was cancelled, just continue. */ |
1023 | return 1; | 1039 | return 1; |
1024 | 1040 | ||
1025 | payload_bus = le32_to_cpu(last->data_address); | 1041 | if (packet->payload_bus) |
1026 | if (payload_bus != 0) | 1042 | dma_unmap_single(ohci->card.device, packet->payload_bus, |
1027 | dma_unmap_single(ohci->card.device, payload_bus, | ||
1028 | packet->payload_length, DMA_TO_DEVICE); | 1043 | packet->payload_length, DMA_TO_DEVICE); |
1029 | 1044 | ||
1030 | evt = le16_to_cpu(last->transfer_status) & 0x1f; | 1045 | evt = le16_to_cpu(last->transfer_status) & 0x1f; |
@@ -1681,6 +1696,10 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet) | |||
1681 | if (packet->ack != 0) | 1696 | if (packet->ack != 0) |
1682 | goto out; | 1697 | goto out; |
1683 | 1698 | ||
1699 | if (packet->payload_bus) | ||
1700 | dma_unmap_single(ohci->card.device, packet->payload_bus, | ||
1701 | packet->payload_length, DMA_TO_DEVICE); | ||
1702 | |||
1684 | log_ar_at_event('T', packet->speed, packet->header, 0x20); | 1703 | log_ar_at_event('T', packet->speed, packet->header, 0x20); |
1685 | driver_data->packet = NULL; | 1704 | driver_data->packet = NULL; |
1686 | packet->ack = RCODE_CANCELLED; | 1705 | packet->ack = RCODE_CANCELLED; |
@@ -2349,8 +2368,8 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) | |||
2349 | 2368 | ||
2350 | ohci = kzalloc(sizeof(*ohci), GFP_KERNEL); | 2369 | ohci = kzalloc(sizeof(*ohci), GFP_KERNEL); |
2351 | if (ohci == NULL) { | 2370 | if (ohci == NULL) { |
2352 | fw_error("Could not malloc fw_ohci data.\n"); | 2371 | err = -ENOMEM; |
2353 | return -ENOMEM; | 2372 | goto fail; |
2354 | } | 2373 | } |
2355 | 2374 | ||
2356 | fw_card_initialize(&ohci->card, &ohci_driver, &dev->dev); | 2375 | fw_card_initialize(&ohci->card, &ohci_driver, &dev->dev); |
@@ -2359,7 +2378,7 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) | |||
2359 | 2378 | ||
2360 | err = pci_enable_device(dev); | 2379 | err = pci_enable_device(dev); |
2361 | if (err) { | 2380 | if (err) { |
2362 | fw_error("Failed to enable OHCI hardware.\n"); | 2381 | fw_error("Failed to enable OHCI hardware\n"); |
2363 | goto fail_free; | 2382 | goto fail_free; |
2364 | } | 2383 | } |
2365 | 2384 | ||
@@ -2427,9 +2446,8 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) | |||
2427 | ohci->ir_context_list = kzalloc(size, GFP_KERNEL); | 2446 | ohci->ir_context_list = kzalloc(size, GFP_KERNEL); |
2428 | 2447 | ||
2429 | if (ohci->it_context_list == NULL || ohci->ir_context_list == NULL) { | 2448 | if (ohci->it_context_list == NULL || ohci->ir_context_list == NULL) { |
2430 | fw_error("Out of memory for it/ir contexts.\n"); | ||
2431 | err = -ENOMEM; | 2449 | err = -ENOMEM; |
2432 | goto fail_registers; | 2450 | goto fail_contexts; |
2433 | } | 2451 | } |
2434 | 2452 | ||
2435 | /* self-id dma buffer allocation */ | 2453 | /* self-id dma buffer allocation */ |
@@ -2438,9 +2456,8 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) | |||
2438 | &ohci->self_id_bus, | 2456 | &ohci->self_id_bus, |
2439 | GFP_KERNEL); | 2457 | GFP_KERNEL); |
2440 | if (ohci->self_id_cpu == NULL) { | 2458 | if (ohci->self_id_cpu == NULL) { |
2441 | fw_error("Out of memory for self ID buffer.\n"); | ||
2442 | err = -ENOMEM; | 2459 | err = -ENOMEM; |
2443 | goto fail_registers; | 2460 | goto fail_contexts; |
2444 | } | 2461 | } |
2445 | 2462 | ||
2446 | bus_options = reg_read(ohci, OHCI1394_BusOptions); | 2463 | bus_options = reg_read(ohci, OHCI1394_BusOptions); |
@@ -2454,15 +2471,19 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) | |||
2454 | goto fail_self_id; | 2471 | goto fail_self_id; |
2455 | 2472 | ||
2456 | fw_notify("Added fw-ohci device %s, OHCI version %x.%x\n", | 2473 | fw_notify("Added fw-ohci device %s, OHCI version %x.%x\n", |
2457 | dev->dev.bus_id, version >> 16, version & 0xff); | 2474 | dev_name(&dev->dev), version >> 16, version & 0xff); |
2458 | return 0; | 2475 | return 0; |
2459 | 2476 | ||
2460 | fail_self_id: | 2477 | fail_self_id: |
2461 | dma_free_coherent(ohci->card.device, SELF_ID_BUF_SIZE, | 2478 | dma_free_coherent(ohci->card.device, SELF_ID_BUF_SIZE, |
2462 | ohci->self_id_cpu, ohci->self_id_bus); | 2479 | ohci->self_id_cpu, ohci->self_id_bus); |
2463 | fail_registers: | 2480 | fail_contexts: |
2464 | kfree(ohci->it_context_list); | ||
2465 | kfree(ohci->ir_context_list); | 2481 | kfree(ohci->ir_context_list); |
2482 | kfree(ohci->it_context_list); | ||
2483 | context_release(&ohci->at_response_ctx); | ||
2484 | context_release(&ohci->at_request_ctx); | ||
2485 | ar_context_release(&ohci->ar_response_ctx); | ||
2486 | ar_context_release(&ohci->ar_request_ctx); | ||
2466 | pci_iounmap(dev, ohci->registers); | 2487 | pci_iounmap(dev, ohci->registers); |
2467 | fail_iomem: | 2488 | fail_iomem: |
2468 | pci_release_region(dev, 0); | 2489 | pci_release_region(dev, 0); |
@@ -2471,6 +2492,9 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) | |||
2471 | fail_free: | 2492 | fail_free: |
2472 | kfree(&ohci->card); | 2493 | kfree(&ohci->card); |
2473 | ohci_pmac_off(dev); | 2494 | ohci_pmac_off(dev); |
2495 | fail: | ||
2496 | if (err == -ENOMEM) | ||
2497 | fw_error("Out of memory\n"); | ||
2474 | 2498 | ||
2475 | return err; | 2499 | return err; |
2476 | } | 2500 | } |
@@ -2491,8 +2515,19 @@ static void pci_remove(struct pci_dev *dev) | |||
2491 | 2515 | ||
2492 | software_reset(ohci); | 2516 | software_reset(ohci); |
2493 | free_irq(dev->irq, ohci); | 2517 | free_irq(dev->irq, ohci); |
2518 | |||
2519 | if (ohci->next_config_rom && ohci->next_config_rom != ohci->config_rom) | ||
2520 | dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE, | ||
2521 | ohci->next_config_rom, ohci->next_config_rom_bus); | ||
2522 | if (ohci->config_rom) | ||
2523 | dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE, | ||
2524 | ohci->config_rom, ohci->config_rom_bus); | ||
2494 | dma_free_coherent(ohci->card.device, SELF_ID_BUF_SIZE, | 2525 | dma_free_coherent(ohci->card.device, SELF_ID_BUF_SIZE, |
2495 | ohci->self_id_cpu, ohci->self_id_bus); | 2526 | ohci->self_id_cpu, ohci->self_id_bus); |
2527 | ar_context_release(&ohci->ar_request_ctx); | ||
2528 | ar_context_release(&ohci->ar_response_ctx); | ||
2529 | context_release(&ohci->at_request_ctx); | ||
2530 | context_release(&ohci->at_response_ctx); | ||
2496 | kfree(ohci->it_context_list); | 2531 | kfree(ohci->it_context_list); |
2497 | kfree(ohci->ir_context_list); | 2532 | kfree(ohci->ir_context_list); |
2498 | pci_iounmap(dev, ohci->registers); | 2533 | pci_iounmap(dev, ohci->registers); |
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c index ef0b9b419c27..e54403ee59e7 100644 --- a/drivers/firewire/fw-sbp2.c +++ b/drivers/firewire/fw-sbp2.c | |||
@@ -173,6 +173,9 @@ struct sbp2_target { | |||
173 | int blocked; /* ditto */ | 173 | int blocked; /* ditto */ |
174 | }; | 174 | }; |
175 | 175 | ||
176 | /* Impossible login_id, to detect logout attempt before successful login */ | ||
177 | #define INVALID_LOGIN_ID 0x10000 | ||
178 | |||
176 | /* | 179 | /* |
177 | * Per section 7.4.8 of the SBP-2 spec, a mgt_ORB_timeout value can be | 180 | * Per section 7.4.8 of the SBP-2 spec, a mgt_ORB_timeout value can be |
178 | * provided in the config rom. Most devices do provide a value, which | 181 | * provided in the config rom. Most devices do provide a value, which |
@@ -369,6 +372,11 @@ static const struct { | |||
369 | }, | 372 | }, |
370 | /* iPod mini */ { | 373 | /* iPod mini */ { |
371 | .firmware_revision = 0x0a2700, | 374 | .firmware_revision = 0x0a2700, |
375 | .model = 0x000022, | ||
376 | .workarounds = SBP2_WORKAROUND_FIX_CAPACITY, | ||
377 | }, | ||
378 | /* iPod mini */ { | ||
379 | .firmware_revision = 0x0a2700, | ||
372 | .model = 0x000023, | 380 | .model = 0x000023, |
373 | .workarounds = SBP2_WORKAROUND_FIX_CAPACITY, | 381 | .workarounds = SBP2_WORKAROUND_FIX_CAPACITY, |
374 | }, | 382 | }, |
@@ -788,9 +796,20 @@ static void sbp2_release_target(struct kref *kref) | |||
788 | scsi_remove_device(sdev); | 796 | scsi_remove_device(sdev); |
789 | scsi_device_put(sdev); | 797 | scsi_device_put(sdev); |
790 | } | 798 | } |
791 | sbp2_send_management_orb(lu, tgt->node_id, lu->generation, | 799 | if (lu->login_id != INVALID_LOGIN_ID) { |
792 | SBP2_LOGOUT_REQUEST, lu->login_id, NULL); | 800 | int generation, node_id; |
793 | 801 | /* | |
802 | * tgt->node_id may be obsolete here if we failed | ||
803 | * during initial login or after a bus reset where | ||
804 | * the topology changed. | ||
805 | */ | ||
806 | generation = device->generation; | ||
807 | smp_rmb(); /* node_id vs. generation */ | ||
808 | node_id = device->node_id; | ||
809 | sbp2_send_management_orb(lu, node_id, generation, | ||
810 | SBP2_LOGOUT_REQUEST, | ||
811 | lu->login_id, NULL); | ||
812 | } | ||
794 | fw_core_remove_address_handler(&lu->address_handler); | 813 | fw_core_remove_address_handler(&lu->address_handler); |
795 | list_del(&lu->link); | 814 | list_del(&lu->link); |
796 | kfree(lu); | 815 | kfree(lu); |
@@ -805,19 +824,20 @@ static void sbp2_release_target(struct kref *kref) | |||
805 | 824 | ||
806 | static struct workqueue_struct *sbp2_wq; | 825 | static struct workqueue_struct *sbp2_wq; |
807 | 826 | ||
827 | static void sbp2_target_put(struct sbp2_target *tgt) | ||
828 | { | ||
829 | kref_put(&tgt->kref, sbp2_release_target); | ||
830 | } | ||
831 | |||
808 | /* | 832 | /* |
809 | * Always get the target's kref when scheduling work on one its units. | 833 | * Always get the target's kref when scheduling work on one its units. |
810 | * Each workqueue job is responsible to call sbp2_target_put() upon return. | 834 | * Each workqueue job is responsible to call sbp2_target_put() upon return. |
811 | */ | 835 | */ |
812 | static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay) | 836 | static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay) |
813 | { | 837 | { |
814 | if (queue_delayed_work(sbp2_wq, &lu->work, delay)) | 838 | kref_get(&lu->tgt->kref); |
815 | kref_get(&lu->tgt->kref); | 839 | if (!queue_delayed_work(sbp2_wq, &lu->work, delay)) |
816 | } | 840 | sbp2_target_put(lu->tgt); |
817 | |||
818 | static void sbp2_target_put(struct sbp2_target *tgt) | ||
819 | { | ||
820 | kref_put(&tgt->kref, sbp2_release_target); | ||
821 | } | 841 | } |
822 | 842 | ||
823 | /* | 843 | /* |
@@ -978,6 +998,7 @@ static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry) | |||
978 | 998 | ||
979 | lu->tgt = tgt; | 999 | lu->tgt = tgt; |
980 | lu->lun = lun_entry & 0xffff; | 1000 | lu->lun = lun_entry & 0xffff; |
1001 | lu->login_id = INVALID_LOGIN_ID; | ||
981 | lu->retries = 0; | 1002 | lu->retries = 0; |
982 | lu->has_sdev = false; | 1003 | lu->has_sdev = false; |
983 | lu->blocked = false; | 1004 | lu->blocked = false; |
@@ -1119,7 +1140,7 @@ static int sbp2_probe(struct device *dev) | |||
1119 | tgt->unit = unit; | 1140 | tgt->unit = unit; |
1120 | kref_init(&tgt->kref); | 1141 | kref_init(&tgt->kref); |
1121 | INIT_LIST_HEAD(&tgt->lu_list); | 1142 | INIT_LIST_HEAD(&tgt->lu_list); |
1122 | tgt->bus_id = unit->device.bus_id; | 1143 | tgt->bus_id = dev_name(&unit->device); |
1123 | tgt->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4]; | 1144 | tgt->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4]; |
1124 | 1145 | ||
1125 | if (fw_device_enable_phys_dma(device) < 0) | 1146 | if (fw_device_enable_phys_dma(device) < 0) |
@@ -1147,7 +1168,7 @@ static int sbp2_probe(struct device *dev) | |||
1147 | 1168 | ||
1148 | /* Do the login in a workqueue so we can easily reschedule retries. */ | 1169 | /* Do the login in a workqueue so we can easily reschedule retries. */ |
1149 | list_for_each_entry(lu, &tgt->lu_list, link) | 1170 | list_for_each_entry(lu, &tgt->lu_list, link) |
1150 | sbp2_queue_work(lu, 0); | 1171 | sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5)); |
1151 | return 0; | 1172 | return 0; |
1152 | 1173 | ||
1153 | fail_tgt_put: | 1174 | fail_tgt_put: |
diff --git a/drivers/firewire/fw-topology.c b/drivers/firewire/fw-topology.c index c1b81077c4a8..5e204713002d 100644 --- a/drivers/firewire/fw-topology.c +++ b/drivers/firewire/fw-topology.c | |||
@@ -413,7 +413,7 @@ static void | |||
413 | update_tree(struct fw_card *card, struct fw_node *root) | 413 | update_tree(struct fw_card *card, struct fw_node *root) |
414 | { | 414 | { |
415 | struct list_head list0, list1; | 415 | struct list_head list0, list1; |
416 | struct fw_node *node0, *node1; | 416 | struct fw_node *node0, *node1, *next1; |
417 | int i, event; | 417 | int i, event; |
418 | 418 | ||
419 | INIT_LIST_HEAD(&list0); | 419 | INIT_LIST_HEAD(&list0); |
@@ -485,7 +485,9 @@ update_tree(struct fw_card *card, struct fw_node *root) | |||
485 | } | 485 | } |
486 | 486 | ||
487 | node0 = fw_node(node0->link.next); | 487 | node0 = fw_node(node0->link.next); |
488 | node1 = fw_node(node1->link.next); | 488 | next1 = fw_node(node1->link.next); |
489 | fw_node_put(node1); | ||
490 | node1 = next1; | ||
489 | } | 491 | } |
490 | } | 492 | } |
491 | 493 | ||
diff --git a/drivers/firewire/fw-transaction.c b/drivers/firewire/fw-transaction.c index 022ac4fabb67..2884f876397b 100644 --- a/drivers/firewire/fw-transaction.c +++ b/drivers/firewire/fw-transaction.c | |||
@@ -207,6 +207,7 @@ fw_fill_request(struct fw_packet *packet, int tcode, int tlabel, | |||
207 | packet->speed = speed; | 207 | packet->speed = speed; |
208 | packet->generation = generation; | 208 | packet->generation = generation; |
209 | packet->ack = 0; | 209 | packet->ack = 0; |
210 | packet->payload_bus = 0; | ||
210 | } | 211 | } |
211 | 212 | ||
212 | /** | 213 | /** |
@@ -581,6 +582,8 @@ fw_fill_response(struct fw_packet *response, u32 *request_header, | |||
581 | BUG(); | 582 | BUG(); |
582 | return; | 583 | return; |
583 | } | 584 | } |
585 | |||
586 | response->payload_bus = 0; | ||
584 | } | 587 | } |
585 | EXPORT_SYMBOL(fw_fill_response); | 588 | EXPORT_SYMBOL(fw_fill_response); |
586 | 589 | ||
diff --git a/drivers/firewire/fw-transaction.h b/drivers/firewire/fw-transaction.h index 027f58ce81ad..839466f0a795 100644 --- a/drivers/firewire/fw-transaction.h +++ b/drivers/firewire/fw-transaction.h | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/list.h> | 27 | #include <linux/list.h> |
28 | #include <linux/spinlock_types.h> | 28 | #include <linux/spinlock_types.h> |
29 | #include <linux/timer.h> | 29 | #include <linux/timer.h> |
30 | #include <linux/types.h> | ||
30 | #include <linux/workqueue.h> | 31 | #include <linux/workqueue.h> |
31 | 32 | ||
32 | #define TCODE_IS_READ_REQUEST(tcode) (((tcode) & ~1) == 4) | 33 | #define TCODE_IS_READ_REQUEST(tcode) (((tcode) & ~1) == 4) |
@@ -153,6 +154,7 @@ struct fw_packet { | |||
153 | size_t header_length; | 154 | size_t header_length; |
154 | void *payload; | 155 | void *payload; |
155 | size_t payload_length; | 156 | size_t payload_length; |
157 | dma_addr_t payload_bus; | ||
156 | u32 timestamp; | 158 | u32 timestamp; |
157 | 159 | ||
158 | /* | 160 | /* |
@@ -248,7 +250,7 @@ struct fw_card { | |||
248 | struct fw_node *local_node; | 250 | struct fw_node *local_node; |
249 | struct fw_node *root_node; | 251 | struct fw_node *root_node; |
250 | struct fw_node *irm_node; | 252 | struct fw_node *irm_node; |
251 | int color; | 253 | u8 color; /* must be u8 to match the definition in struct fw_node */ |
252 | int gap_count; | 254 | int gap_count; |
253 | bool beta_repeaters_present; | 255 | bool beta_repeaters_present; |
254 | 256 | ||