aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firewire
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firewire')
-rw-r--r--drivers/firewire/fw-device.c14
-rw-r--r--drivers/firewire/fw-ohci.c63
-rw-r--r--drivers/firewire/fw-sbp2.c45
-rw-r--r--drivers/firewire/fw-topology.c6
-rw-r--r--drivers/firewire/fw-transaction.c3
-rw-r--r--drivers/firewire/fw-transaction.h4
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
500static 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
806static struct workqueue_struct *sbp2_wq; 825static struct workqueue_struct *sbp2_wq;
807 826
827static 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 */
812static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay) 836static 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
818static 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
413update_tree(struct fw_card *card, struct fw_node *root) 413update_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}
585EXPORT_SYMBOL(fw_fill_response); 588EXPORT_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