aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firewire
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firewire')
-rw-r--r--drivers/firewire/Kconfig5
-rw-r--r--drivers/firewire/fw-card.c50
-rw-r--r--drivers/firewire/fw-cdev.c13
-rw-r--r--drivers/firewire/fw-device.c263
-rw-r--r--drivers/firewire/fw-device.h38
-rw-r--r--drivers/firewire/fw-iso.c5
-rw-r--r--drivers/firewire/fw-ohci.c402
-rw-r--r--drivers/firewire/fw-ohci.h2
-rw-r--r--drivers/firewire/fw-sbp2.c150
-rw-r--r--drivers/firewire/fw-topology.c10
-rw-r--r--drivers/firewire/fw-topology.h11
-rw-r--r--drivers/firewire/fw-transaction.c75
-rw-r--r--drivers/firewire/fw-transaction.h10
13 files changed, 713 insertions, 321 deletions
diff --git a/drivers/firewire/Kconfig b/drivers/firewire/Kconfig
index 25bdc2dd9ce1..fb4d391810b6 100644
--- a/drivers/firewire/Kconfig
+++ b/drivers/firewire/Kconfig
@@ -54,6 +54,11 @@ config FIREWIRE_OHCI
54 directive, use "install modulename /bin/true" for the modules to be 54 directive, use "install modulename /bin/true" for the modules to be
55 blacklisted. 55 blacklisted.
56 56
57config FIREWIRE_OHCI_DEBUG
58 bool
59 depends on FIREWIRE_OHCI
60 default y
61
57config FIREWIRE_SBP2 62config FIREWIRE_SBP2
58 tristate "Support for storage devices (SBP-2 protocol driver)" 63 tristate "Support for storage devices (SBP-2 protocol driver)"
59 depends on FIREWIRE && SCSI 64 depends on FIREWIRE && SCSI
diff --git a/drivers/firewire/fw-card.c b/drivers/firewire/fw-card.c
index a03462750b95..5b4c0d9f5173 100644
--- a/drivers/firewire/fw-card.c
+++ b/drivers/firewire/fw-card.c
@@ -167,7 +167,6 @@ fw_core_add_descriptor(struct fw_descriptor *desc)
167 167
168 return 0; 168 return 0;
169} 169}
170EXPORT_SYMBOL(fw_core_add_descriptor);
171 170
172void 171void
173fw_core_remove_descriptor(struct fw_descriptor *desc) 172fw_core_remove_descriptor(struct fw_descriptor *desc)
@@ -182,7 +181,6 @@ fw_core_remove_descriptor(struct fw_descriptor *desc)
182 181
183 mutex_unlock(&card_mutex); 182 mutex_unlock(&card_mutex);
184} 183}
185EXPORT_SYMBOL(fw_core_remove_descriptor);
186 184
187static const char gap_count_table[] = { 185static const char gap_count_table[] = {
188 63, 5, 7, 8, 10, 13, 16, 18, 21, 24, 26, 29, 32, 35, 37, 40 186 63, 5, 7, 8, 10, 13, 16, 18, 21, 24, 26, 29, 32, 35, 37, 40
@@ -220,7 +218,7 @@ fw_card_bm_work(struct work_struct *work)
220 struct bm_data bmd; 218 struct bm_data bmd;
221 unsigned long flags; 219 unsigned long flags;
222 int root_id, new_root_id, irm_id, gap_count, generation, grace; 220 int root_id, new_root_id, irm_id, gap_count, generation, grace;
223 int do_reset = 0; 221 bool do_reset = false;
224 222
225 spin_lock_irqsave(&card->lock, flags); 223 spin_lock_irqsave(&card->lock, flags);
226 local_node = card->local_node; 224 local_node = card->local_node;
@@ -331,7 +329,7 @@ fw_card_bm_work(struct work_struct *work)
331 */ 329 */
332 spin_unlock_irqrestore(&card->lock, flags); 330 spin_unlock_irqrestore(&card->lock, flags);
333 goto out; 331 goto out;
334 } else if (root_device->config_rom[2] & BIB_CMC) { 332 } else if (root_device->cmc) {
335 /* 333 /*
336 * FIXME: I suppose we should set the cmstr bit in the 334 * FIXME: I suppose we should set the cmstr bit in the
337 * STATE_CLEAR register of this node, as described in 335 * STATE_CLEAR register of this node, as described in
@@ -360,14 +358,14 @@ fw_card_bm_work(struct work_struct *work)
360 gap_count = 63; 358 gap_count = 63;
361 359
362 /* 360 /*
363 * Finally, figure out if we should do a reset or not. If we've 361 * Finally, figure out if we should do a reset or not. If we have
364 * done less that 5 resets with the same physical topology and we 362 * done less than 5 resets with the same physical topology and we
365 * have either a new root or a new gap count setting, let's do it. 363 * have either a new root or a new gap count setting, let's do it.
366 */ 364 */
367 365
368 if (card->bm_retries++ < 5 && 366 if (card->bm_retries++ < 5 &&
369 (card->gap_count != gap_count || new_root_id != root_id)) 367 (card->gap_count != gap_count || new_root_id != root_id))
370 do_reset = 1; 368 do_reset = true;
371 369
372 spin_unlock_irqrestore(&card->lock, flags); 370 spin_unlock_irqrestore(&card->lock, flags);
373 371
@@ -398,7 +396,6 @@ fw_card_initialize(struct fw_card *card, const struct fw_card_driver *driver,
398{ 396{
399 static atomic_t index = ATOMIC_INIT(-1); 397 static atomic_t index = ATOMIC_INIT(-1);
400 398
401 kref_init(&card->kref);
402 atomic_set(&card->device_count, 0); 399 atomic_set(&card->device_count, 0);
403 card->index = atomic_inc_return(&index); 400 card->index = atomic_inc_return(&index);
404 card->driver = driver; 401 card->driver = driver;
@@ -429,12 +426,6 @@ fw_card_add(struct fw_card *card,
429 card->link_speed = link_speed; 426 card->link_speed = link_speed;
430 card->guid = guid; 427 card->guid = guid;
431 428
432 /*
433 * The subsystem grabs a reference when the card is added and
434 * drops it when the driver calls fw_core_remove_card.
435 */
436 fw_card_get(card);
437
438 mutex_lock(&card_mutex); 429 mutex_lock(&card_mutex);
439 config_rom = generate_config_rom(card, &length); 430 config_rom = generate_config_rom(card, &length);
440 list_add_tail(&card->link, &card_list); 431 list_add_tail(&card->link, &card_list);
@@ -540,40 +531,9 @@ fw_core_remove_card(struct fw_card *card)
540 cancel_delayed_work_sync(&card->work); 531 cancel_delayed_work_sync(&card->work);
541 fw_flush_transactions(card); 532 fw_flush_transactions(card);
542 del_timer_sync(&card->flush_timer); 533 del_timer_sync(&card->flush_timer);
543
544 fw_card_put(card);
545} 534}
546EXPORT_SYMBOL(fw_core_remove_card); 535EXPORT_SYMBOL(fw_core_remove_card);
547 536
548struct fw_card *
549fw_card_get(struct fw_card *card)
550{
551 kref_get(&card->kref);
552
553 return card;
554}
555EXPORT_SYMBOL(fw_card_get);
556
557static void
558release_card(struct kref *kref)
559{
560 struct fw_card *card = container_of(kref, struct fw_card, kref);
561
562 kfree(card);
563}
564
565/*
566 * An assumption for fw_card_put() is that the card driver allocates
567 * the fw_card struct with kalloc and that it has been shut down
568 * before the last ref is dropped.
569 */
570void
571fw_card_put(struct fw_card *card)
572{
573 kref_put(&card->kref, release_card);
574}
575EXPORT_SYMBOL(fw_card_put);
576
577int 537int
578fw_core_initiate_bus_reset(struct fw_card *card, int short_reset) 538fw_core_initiate_bus_reset(struct fw_card *card, int short_reset)
579{ 539{
diff --git a/drivers/firewire/fw-cdev.c b/drivers/firewire/fw-cdev.c
index 46bc197a047f..4a541921a14a 100644
--- a/drivers/firewire/fw-cdev.c
+++ b/drivers/firewire/fw-cdev.c
@@ -269,21 +269,28 @@ static int ioctl_get_info(struct client *client, void *buffer)
269{ 269{
270 struct fw_cdev_get_info *get_info = buffer; 270 struct fw_cdev_get_info *get_info = buffer;
271 struct fw_cdev_event_bus_reset bus_reset; 271 struct fw_cdev_event_bus_reset bus_reset;
272 unsigned long ret = 0;
272 273
273 client->version = get_info->version; 274 client->version = get_info->version;
274 get_info->version = FW_CDEV_VERSION; 275 get_info->version = FW_CDEV_VERSION;
275 276
277 down_read(&fw_device_rwsem);
278
276 if (get_info->rom != 0) { 279 if (get_info->rom != 0) {
277 void __user *uptr = u64_to_uptr(get_info->rom); 280 void __user *uptr = u64_to_uptr(get_info->rom);
278 size_t want = get_info->rom_length; 281 size_t want = get_info->rom_length;
279 size_t have = client->device->config_rom_length * 4; 282 size_t have = client->device->config_rom_length * 4;
280 283
281 if (copy_to_user(uptr, client->device->config_rom, 284 ret = copy_to_user(uptr, client->device->config_rom,
282 min(want, have))) 285 min(want, have));
283 return -EFAULT;
284 } 286 }
285 get_info->rom_length = client->device->config_rom_length * 4; 287 get_info->rom_length = client->device->config_rom_length * 4;
286 288
289 up_read(&fw_device_rwsem);
290
291 if (ret != 0)
292 return -EFAULT;
293
287 client->bus_reset_closure = get_info->bus_reset_closure; 294 client->bus_reset_closure = get_info->bus_reset_closure;
288 if (get_info->bus_reset != 0) { 295 if (get_info->bus_reset != 0) {
289 void __user *uptr = u64_to_uptr(get_info->bus_reset); 296 void __user *uptr = u64_to_uptr(get_info->bus_reset);
diff --git a/drivers/firewire/fw-device.c b/drivers/firewire/fw-device.c
index 870125a3638e..2d01bc1b9752 100644
--- a/drivers/firewire/fw-device.c
+++ b/drivers/firewire/fw-device.c
@@ -25,7 +25,7 @@
25#include <linux/device.h> 25#include <linux/device.h>
26#include <linux/delay.h> 26#include <linux/delay.h>
27#include <linux/idr.h> 27#include <linux/idr.h>
28#include <linux/rwsem.h> 28#include <linux/string.h>
29#include <asm/semaphore.h> 29#include <asm/semaphore.h>
30#include <asm/system.h> 30#include <asm/system.h>
31#include <linux/ctype.h> 31#include <linux/ctype.h>
@@ -160,9 +160,9 @@ static void fw_device_release(struct device *dev)
160 * Take the card lock so we don't set this to NULL while a 160 * Take the card lock so we don't set this to NULL while a
161 * FW_NODE_UPDATED callback is being handled. 161 * FW_NODE_UPDATED callback is being handled.
162 */ 162 */
163 spin_lock_irqsave(&device->card->lock, flags); 163 spin_lock_irqsave(&card->lock, flags);
164 device->node->data = NULL; 164 device->node->data = NULL;
165 spin_unlock_irqrestore(&device->card->lock, flags); 165 spin_unlock_irqrestore(&card->lock, flags);
166 166
167 fw_node_put(device->node); 167 fw_node_put(device->node);
168 kfree(device->config_rom); 168 kfree(device->config_rom);
@@ -195,7 +195,9 @@ show_immediate(struct device *dev, struct device_attribute *dattr, char *buf)
195 container_of(dattr, struct config_rom_attribute, attr); 195 container_of(dattr, struct config_rom_attribute, attr);
196 struct fw_csr_iterator ci; 196 struct fw_csr_iterator ci;
197 u32 *dir; 197 u32 *dir;
198 int key, value; 198 int key, value, ret = -ENOENT;
199
200 down_read(&fw_device_rwsem);
199 201
200 if (is_fw_unit(dev)) 202 if (is_fw_unit(dev))
201 dir = fw_unit(dev)->directory; 203 dir = fw_unit(dev)->directory;
@@ -204,11 +206,15 @@ show_immediate(struct device *dev, struct device_attribute *dattr, char *buf)
204 206
205 fw_csr_iterator_init(&ci, dir); 207 fw_csr_iterator_init(&ci, dir);
206 while (fw_csr_iterator_next(&ci, &key, &value)) 208 while (fw_csr_iterator_next(&ci, &key, &value))
207 if (attr->key == key) 209 if (attr->key == key) {
208 return snprintf(buf, buf ? PAGE_SIZE : 0, 210 ret = snprintf(buf, buf ? PAGE_SIZE : 0,
209 "0x%06x\n", value); 211 "0x%06x\n", value);
212 break;
213 }
214
215 up_read(&fw_device_rwsem);
210 216
211 return -ENOENT; 217 return ret;
212} 218}
213 219
214#define IMMEDIATE_ATTR(name, key) \ 220#define IMMEDIATE_ATTR(name, key) \
@@ -221,9 +227,11 @@ show_text_leaf(struct device *dev, struct device_attribute *dattr, char *buf)
221 container_of(dattr, struct config_rom_attribute, attr); 227 container_of(dattr, struct config_rom_attribute, attr);
222 struct fw_csr_iterator ci; 228 struct fw_csr_iterator ci;
223 u32 *dir, *block = NULL, *p, *end; 229 u32 *dir, *block = NULL, *p, *end;
224 int length, key, value, last_key = 0; 230 int length, key, value, last_key = 0, ret = -ENOENT;
225 char *b; 231 char *b;
226 232
233 down_read(&fw_device_rwsem);
234
227 if (is_fw_unit(dev)) 235 if (is_fw_unit(dev))
228 dir = fw_unit(dev)->directory; 236 dir = fw_unit(dev)->directory;
229 else 237 else
@@ -238,18 +246,20 @@ show_text_leaf(struct device *dev, struct device_attribute *dattr, char *buf)
238 } 246 }
239 247
240 if (block == NULL) 248 if (block == NULL)
241 return -ENOENT; 249 goto out;
242 250
243 length = min(block[0] >> 16, 256U); 251 length = min(block[0] >> 16, 256U);
244 if (length < 3) 252 if (length < 3)
245 return -ENOENT; 253 goto out;
246 254
247 if (block[1] != 0 || block[2] != 0) 255 if (block[1] != 0 || block[2] != 0)
248 /* Unknown encoding. */ 256 /* Unknown encoding. */
249 return -ENOENT; 257 goto out;
250 258
251 if (buf == NULL) 259 if (buf == NULL) {
252 return length * 4; 260 ret = length * 4;
261 goto out;
262 }
253 263
254 b = buf; 264 b = buf;
255 end = &block[length + 1]; 265 end = &block[length + 1];
@@ -259,8 +269,11 @@ show_text_leaf(struct device *dev, struct device_attribute *dattr, char *buf)
259 /* Strip trailing whitespace and add newline. */ 269 /* Strip trailing whitespace and add newline. */
260 while (b--, (isspace(*b) || *b == '\0') && b > buf); 270 while (b--, (isspace(*b) || *b == '\0') && b > buf);
261 strcpy(b + 1, "\n"); 271 strcpy(b + 1, "\n");
272 ret = b + 2 - buf;
273 out:
274 up_read(&fw_device_rwsem);
262 275
263 return b + 2 - buf; 276 return ret;
264} 277}
265 278
266#define TEXT_LEAF_ATTR(name, key) \ 279#define TEXT_LEAF_ATTR(name, key) \
@@ -337,19 +350,28 @@ static ssize_t
337config_rom_show(struct device *dev, struct device_attribute *attr, char *buf) 350config_rom_show(struct device *dev, struct device_attribute *attr, char *buf)
338{ 351{
339 struct fw_device *device = fw_device(dev); 352 struct fw_device *device = fw_device(dev);
353 size_t length;
340 354
341 memcpy(buf, device->config_rom, device->config_rom_length * 4); 355 down_read(&fw_device_rwsem);
356 length = device->config_rom_length * 4;
357 memcpy(buf, device->config_rom, length);
358 up_read(&fw_device_rwsem);
342 359
343 return device->config_rom_length * 4; 360 return length;
344} 361}
345 362
346static ssize_t 363static ssize_t
347guid_show(struct device *dev, struct device_attribute *attr, char *buf) 364guid_show(struct device *dev, struct device_attribute *attr, char *buf)
348{ 365{
349 struct fw_device *device = fw_device(dev); 366 struct fw_device *device = fw_device(dev);
367 int ret;
368
369 down_read(&fw_device_rwsem);
370 ret = snprintf(buf, PAGE_SIZE, "0x%08x%08x\n",
371 device->config_rom[3], device->config_rom[4]);
372 up_read(&fw_device_rwsem);
350 373
351 return snprintf(buf, PAGE_SIZE, "0x%08x%08x\n", 374 return ret;
352 device->config_rom[3], device->config_rom[4]);
353} 375}
354 376
355static struct device_attribute fw_device_attributes[] = { 377static struct device_attribute fw_device_attributes[] = {
@@ -388,7 +410,7 @@ read_rom(struct fw_device *device, int generation, int index, u32 *data)
388 410
389 init_completion(&callback_data.done); 411 init_completion(&callback_data.done);
390 412
391 offset = 0xfffff0000400ULL + index * 4; 413 offset = (CSR_REGISTER_BASE | CSR_CONFIG_ROM) + index * 4;
392 fw_send_request(device->card, &t, TCODE_READ_QUADLET_REQUEST, 414 fw_send_request(device->card, &t, TCODE_READ_QUADLET_REQUEST,
393 device->node_id, generation, device->max_speed, 415 device->node_id, generation, device->max_speed,
394 offset, NULL, 4, complete_transaction, &callback_data); 416 offset, NULL, 4, complete_transaction, &callback_data);
@@ -400,6 +422,9 @@ read_rom(struct fw_device *device, int generation, int index, u32 *data)
400 return callback_data.rcode; 422 return callback_data.rcode;
401} 423}
402 424
425#define READ_BIB_ROM_SIZE 256
426#define READ_BIB_STACK_SIZE 16
427
403/* 428/*
404 * Read the bus info block, perform a speed probe, and read all of the rest of 429 * Read the bus info block, perform a speed probe, and read all of the rest of
405 * the config ROM. We do all this with a cached bus generation. If the bus 430 * the config ROM. We do all this with a cached bus generation. If the bus
@@ -409,16 +434,23 @@ read_rom(struct fw_device *device, int generation, int index, u32 *data)
409 */ 434 */
410static int read_bus_info_block(struct fw_device *device, int generation) 435static int read_bus_info_block(struct fw_device *device, int generation)
411{ 436{
412 static u32 rom[256]; 437 u32 *rom, *stack, *old_rom, *new_rom;
413 u32 stack[16], sp, key; 438 u32 sp, key;
414 int i, end, length; 439 int i, end, length, ret = -1;
440
441 rom = kmalloc(sizeof(*rom) * READ_BIB_ROM_SIZE +
442 sizeof(*stack) * READ_BIB_STACK_SIZE, GFP_KERNEL);
443 if (rom == NULL)
444 return -ENOMEM;
445
446 stack = &rom[READ_BIB_ROM_SIZE];
415 447
416 device->max_speed = SCODE_100; 448 device->max_speed = SCODE_100;
417 449
418 /* First read the bus info block. */ 450 /* First read the bus info block. */
419 for (i = 0; i < 5; i++) { 451 for (i = 0; i < 5; i++) {
420 if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE) 452 if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
421 return -1; 453 goto out;
422 /* 454 /*
423 * As per IEEE1212 7.2, during power-up, devices can 455 * As per IEEE1212 7.2, during power-up, devices can
424 * reply with a 0 for the first quadlet of the config 456 * reply with a 0 for the first quadlet of the config
@@ -428,7 +460,7 @@ static int read_bus_info_block(struct fw_device *device, int generation)
428 * retry mechanism will try again later. 460 * retry mechanism will try again later.
429 */ 461 */
430 if (i == 0 && rom[i] == 0) 462 if (i == 0 && rom[i] == 0)
431 return -1; 463 goto out;
432 } 464 }
433 465
434 device->max_speed = device->node->max_speed; 466 device->max_speed = device->node->max_speed;
@@ -478,26 +510,26 @@ static int read_bus_info_block(struct fw_device *device, int generation)
478 */ 510 */
479 key = stack[--sp]; 511 key = stack[--sp];
480 i = key & 0xffffff; 512 i = key & 0xffffff;
481 if (i >= ARRAY_SIZE(rom)) 513 if (i >= READ_BIB_ROM_SIZE)
482 /* 514 /*
483 * The reference points outside the standard 515 * The reference points outside the standard
484 * config rom area, something's fishy. 516 * config rom area, something's fishy.
485 */ 517 */
486 return -1; 518 goto out;
487 519
488 /* Read header quadlet for the block to get the length. */ 520 /* Read header quadlet for the block to get the length. */
489 if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE) 521 if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
490 return -1; 522 goto out;
491 end = i + (rom[i] >> 16) + 1; 523 end = i + (rom[i] >> 16) + 1;
492 i++; 524 i++;
493 if (end > ARRAY_SIZE(rom)) 525 if (end > READ_BIB_ROM_SIZE)
494 /* 526 /*
495 * This block extends outside standard config 527 * This block extends outside standard config
496 * area (and the array we're reading it 528 * area (and the array we're reading it
497 * into). That's broken, so ignore this 529 * into). That's broken, so ignore this
498 * device. 530 * device.
499 */ 531 */
500 return -1; 532 goto out;
501 533
502 /* 534 /*
503 * Now read in the block. If this is a directory 535 * Now read in the block. If this is a directory
@@ -507,9 +539,9 @@ static int read_bus_info_block(struct fw_device *device, int generation)
507 while (i < end) { 539 while (i < end) {
508 if (read_rom(device, generation, i, &rom[i]) != 540 if (read_rom(device, generation, i, &rom[i]) !=
509 RCODE_COMPLETE) 541 RCODE_COMPLETE)
510 return -1; 542 goto out;
511 if ((key >> 30) == 3 && (rom[i] >> 30) > 1 && 543 if ((key >> 30) == 3 && (rom[i] >> 30) > 1 &&
512 sp < ARRAY_SIZE(stack)) 544 sp < READ_BIB_STACK_SIZE)
513 stack[sp++] = i + rom[i]; 545 stack[sp++] = i + rom[i];
514 i++; 546 i++;
515 } 547 }
@@ -517,13 +549,23 @@ static int read_bus_info_block(struct fw_device *device, int generation)
517 length = i; 549 length = i;
518 } 550 }
519 551
520 device->config_rom = kmalloc(length * 4, GFP_KERNEL); 552 old_rom = device->config_rom;
521 if (device->config_rom == NULL) 553 new_rom = kmemdup(rom, length * 4, GFP_KERNEL);
522 return -1; 554 if (new_rom == NULL)
523 memcpy(device->config_rom, rom, length * 4); 555 goto out;
556
557 down_write(&fw_device_rwsem);
558 device->config_rom = new_rom;
524 device->config_rom_length = length; 559 device->config_rom_length = length;
560 up_write(&fw_device_rwsem);
525 561
526 return 0; 562 kfree(old_rom);
563 ret = 0;
564 device->cmc = rom[2] & 1 << 30;
565 out:
566 kfree(rom);
567
568 return ret;
527} 569}
528 570
529static void fw_unit_release(struct device *dev) 571static void fw_unit_release(struct device *dev)
@@ -592,7 +634,14 @@ static int shutdown_unit(struct device *device, void *data)
592 return 0; 634 return 0;
593} 635}
594 636
595static DECLARE_RWSEM(idr_rwsem); 637/*
638 * fw_device_rwsem acts as dual purpose mutex:
639 * - serializes accesses to fw_device_idr,
640 * - serializes accesses to fw_device.config_rom/.config_rom_length and
641 * fw_unit.directory, unless those accesses happen at safe occasions
642 */
643DECLARE_RWSEM(fw_device_rwsem);
644
596static DEFINE_IDR(fw_device_idr); 645static DEFINE_IDR(fw_device_idr);
597int fw_cdev_major; 646int fw_cdev_major;
598 647
@@ -600,11 +649,11 @@ struct fw_device *fw_device_get_by_devt(dev_t devt)
600{ 649{
601 struct fw_device *device; 650 struct fw_device *device;
602 651
603 down_read(&idr_rwsem); 652 down_read(&fw_device_rwsem);
604 device = idr_find(&fw_device_idr, MINOR(devt)); 653 device = idr_find(&fw_device_idr, MINOR(devt));
605 if (device) 654 if (device)
606 fw_device_get(device); 655 fw_device_get(device);
607 up_read(&idr_rwsem); 656 up_read(&fw_device_rwsem);
608 657
609 return device; 658 return device;
610} 659}
@@ -619,9 +668,9 @@ static void fw_device_shutdown(struct work_struct *work)
619 device_for_each_child(&device->device, NULL, shutdown_unit); 668 device_for_each_child(&device->device, NULL, shutdown_unit);
620 device_unregister(&device->device); 669 device_unregister(&device->device);
621 670
622 down_write(&idr_rwsem); 671 down_write(&fw_device_rwsem);
623 idr_remove(&fw_device_idr, minor); 672 idr_remove(&fw_device_idr, minor);
624 up_write(&idr_rwsem); 673 up_write(&fw_device_rwsem);
625 fw_device_put(device); 674 fw_device_put(device);
626} 675}
627 676
@@ -674,10 +723,10 @@ static void fw_device_init(struct work_struct *work)
674 err = -ENOMEM; 723 err = -ENOMEM;
675 724
676 fw_device_get(device); 725 fw_device_get(device);
677 down_write(&idr_rwsem); 726 down_write(&fw_device_rwsem);
678 if (idr_pre_get(&fw_device_idr, GFP_KERNEL)) 727 if (idr_pre_get(&fw_device_idr, GFP_KERNEL))
679 err = idr_get_new(&fw_device_idr, device, &minor); 728 err = idr_get_new(&fw_device_idr, device, &minor);
680 up_write(&idr_rwsem); 729 up_write(&fw_device_rwsem);
681 730
682 if (err < 0) 731 if (err < 0)
683 goto error; 732 goto error;
@@ -711,7 +760,7 @@ static void fw_device_init(struct work_struct *work)
711 if (atomic_cmpxchg(&device->state, 760 if (atomic_cmpxchg(&device->state,
712 FW_DEVICE_INITIALIZING, 761 FW_DEVICE_INITIALIZING,
713 FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) { 762 FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) {
714 fw_device_shutdown(&device->work.work); 763 fw_device_shutdown(work);
715 } else { 764 } else {
716 if (device->config_rom_retries) 765 if (device->config_rom_retries)
717 fw_notify("created device %s: GUID %08x%08x, S%d00, " 766 fw_notify("created device %s: GUID %08x%08x, S%d00, "
@@ -725,6 +774,7 @@ static void fw_device_init(struct work_struct *work)
725 device->device.bus_id, 774 device->device.bus_id,
726 device->config_rom[3], device->config_rom[4], 775 device->config_rom[3], device->config_rom[4],
727 1 << device->max_speed); 776 1 << device->max_speed);
777 device->config_rom_retries = 0;
728 } 778 }
729 779
730 /* 780 /*
@@ -739,9 +789,9 @@ static void fw_device_init(struct work_struct *work)
739 return; 789 return;
740 790
741 error_with_cdev: 791 error_with_cdev:
742 down_write(&idr_rwsem); 792 down_write(&fw_device_rwsem);
743 idr_remove(&fw_device_idr, minor); 793 idr_remove(&fw_device_idr, minor);
744 up_write(&idr_rwsem); 794 up_write(&fw_device_rwsem);
745 error: 795 error:
746 fw_device_put(device); /* fw_device_idr's reference */ 796 fw_device_put(device); /* fw_device_idr's reference */
747 797
@@ -771,6 +821,106 @@ static void fw_device_update(struct work_struct *work)
771 device_for_each_child(&device->device, NULL, update_unit); 821 device_for_each_child(&device->device, NULL, update_unit);
772} 822}
773 823
824enum {
825 REREAD_BIB_ERROR,
826 REREAD_BIB_GONE,
827 REREAD_BIB_UNCHANGED,
828 REREAD_BIB_CHANGED,
829};
830
831/* Reread and compare bus info block and header of root directory */
832static int reread_bus_info_block(struct fw_device *device, int generation)
833{
834 u32 q;
835 int i;
836
837 for (i = 0; i < 6; i++) {
838 if (read_rom(device, generation, i, &q) != RCODE_COMPLETE)
839 return REREAD_BIB_ERROR;
840
841 if (i == 0 && q == 0)
842 return REREAD_BIB_GONE;
843
844 if (i > device->config_rom_length || q != device->config_rom[i])
845 return REREAD_BIB_CHANGED;
846 }
847
848 return REREAD_BIB_UNCHANGED;
849}
850
851static void fw_device_refresh(struct work_struct *work)
852{
853 struct fw_device *device =
854 container_of(work, struct fw_device, work.work);
855 struct fw_card *card = device->card;
856 int node_id = device->node_id;
857
858 switch (reread_bus_info_block(device, device->generation)) {
859 case REREAD_BIB_ERROR:
860 if (device->config_rom_retries < MAX_RETRIES / 2 &&
861 atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
862 device->config_rom_retries++;
863 schedule_delayed_work(&device->work, RETRY_DELAY / 2);
864
865 return;
866 }
867 goto give_up;
868
869 case REREAD_BIB_GONE:
870 goto gone;
871
872 case REREAD_BIB_UNCHANGED:
873 if (atomic_cmpxchg(&device->state,
874 FW_DEVICE_INITIALIZING,
875 FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN)
876 goto gone;
877
878 fw_device_update(work);
879 device->config_rom_retries = 0;
880 goto out;
881
882 case REREAD_BIB_CHANGED:
883 break;
884 }
885
886 /*
887 * Something changed. We keep things simple and don't investigate
888 * further. We just destroy all previous units and create new ones.
889 */
890 device_for_each_child(&device->device, NULL, shutdown_unit);
891
892 if (read_bus_info_block(device, device->generation) < 0) {
893 if (device->config_rom_retries < MAX_RETRIES &&
894 atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
895 device->config_rom_retries++;
896 schedule_delayed_work(&device->work, RETRY_DELAY);
897
898 return;
899 }
900 goto give_up;
901 }
902
903 create_units(device);
904
905 if (atomic_cmpxchg(&device->state,
906 FW_DEVICE_INITIALIZING,
907 FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN)
908 goto gone;
909
910 fw_notify("refreshed device %s\n", device->device.bus_id);
911 device->config_rom_retries = 0;
912 goto out;
913
914 give_up:
915 fw_notify("giving up on refresh of device %s\n", device->device.bus_id);
916 gone:
917 atomic_set(&device->state, FW_DEVICE_SHUTDOWN);
918 fw_device_shutdown(work);
919 out:
920 if (node_id == card->root_node->node_id)
921 schedule_delayed_work(&card->work, 0);
922}
923
774void fw_node_event(struct fw_card *card, struct fw_node *node, int event) 924void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
775{ 925{
776 struct fw_device *device; 926 struct fw_device *device;
@@ -780,7 +930,7 @@ void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
780 case FW_NODE_LINK_ON: 930 case FW_NODE_LINK_ON:
781 if (!node->link_on) 931 if (!node->link_on)
782 break; 932 break;
783 933 create:
784 device = kzalloc(sizeof(*device), GFP_ATOMIC); 934 device = kzalloc(sizeof(*device), GFP_ATOMIC);
785 if (device == NULL) 935 if (device == NULL)
786 break; 936 break;
@@ -819,6 +969,23 @@ void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
819 schedule_delayed_work(&device->work, INITIAL_DELAY); 969 schedule_delayed_work(&device->work, INITIAL_DELAY);
820 break; 970 break;
821 971
972 case FW_NODE_INITIATED_RESET:
973 device = node->data;
974 if (device == NULL)
975 goto create;
976
977 device->node_id = node->node_id;
978 smp_wmb(); /* update node_id before generation */
979 device->generation = card->generation;
980 if (atomic_cmpxchg(&device->state,
981 FW_DEVICE_RUNNING,
982 FW_DEVICE_INITIALIZING) == FW_DEVICE_RUNNING) {
983 PREPARE_DELAYED_WORK(&device->work, fw_device_refresh);
984 schedule_delayed_work(&device->work,
985 node == card->local_node ? 0 : INITIAL_DELAY);
986 }
987 break;
988
822 case FW_NODE_UPDATED: 989 case FW_NODE_UPDATED:
823 if (!node->link_on || node->data == NULL) 990 if (!node->link_on || node->data == NULL)
824 break; 991 break;
diff --git a/drivers/firewire/fw-device.h b/drivers/firewire/fw-device.h
index 78ecd3991b7f..5f131f5129da 100644
--- a/drivers/firewire/fw-device.h
+++ b/drivers/firewire/fw-device.h
@@ -21,6 +21,7 @@
21 21
22#include <linux/fs.h> 22#include <linux/fs.h>
23#include <linux/cdev.h> 23#include <linux/cdev.h>
24#include <linux/rwsem.h>
24#include <asm/atomic.h> 25#include <asm/atomic.h>
25 26
26enum fw_device_state { 27enum fw_device_state {
@@ -46,6 +47,11 @@ struct fw_attribute_group {
46 * fw_device.node_id is guaranteed to be current too. 47 * fw_device.node_id is guaranteed to be current too.
47 * 48 *
48 * The same applies to fw_device.card->node_id vs. fw_device.generation. 49 * The same applies to fw_device.card->node_id vs. fw_device.generation.
50 *
51 * fw_device.config_rom and fw_device.config_rom_length may be accessed during
52 * the lifetime of any fw_unit belonging to the fw_device, before device_del()
53 * was called on the last fw_unit. Alternatively, they may be accessed while
54 * holding fw_device_rwsem.
49 */ 55 */
50struct fw_device { 56struct fw_device {
51 atomic_t state; 57 atomic_t state;
@@ -53,6 +59,7 @@ struct fw_device {
53 int node_id; 59 int node_id;
54 int generation; 60 int generation;
55 unsigned max_speed; 61 unsigned max_speed;
62 bool cmc;
56 struct fw_card *card; 63 struct fw_card *card;
57 struct device device; 64 struct device device;
58 struct list_head link; 65 struct list_head link;
@@ -64,28 +71,24 @@ struct fw_device {
64 struct fw_attribute_group attribute_group; 71 struct fw_attribute_group attribute_group;
65}; 72};
66 73
67static inline struct fw_device * 74static inline struct fw_device *fw_device(struct device *dev)
68fw_device(struct device *dev)
69{ 75{
70 return container_of(dev, struct fw_device, device); 76 return container_of(dev, struct fw_device, device);
71} 77}
72 78
73static inline int 79static inline int fw_device_is_shutdown(struct fw_device *device)
74fw_device_is_shutdown(struct fw_device *device)
75{ 80{
76 return atomic_read(&device->state) == FW_DEVICE_SHUTDOWN; 81 return atomic_read(&device->state) == FW_DEVICE_SHUTDOWN;
77} 82}
78 83
79static inline struct fw_device * 84static inline struct fw_device *fw_device_get(struct fw_device *device)
80fw_device_get(struct fw_device *device)
81{ 85{
82 get_device(&device->device); 86 get_device(&device->device);
83 87
84 return device; 88 return device;
85} 89}
86 90
87static inline void 91static inline void fw_device_put(struct fw_device *device)
88fw_device_put(struct fw_device *device)
89{ 92{
90 put_device(&device->device); 93 put_device(&device->device);
91} 94}
@@ -96,20 +99,35 @@ int fw_device_enable_phys_dma(struct fw_device *device);
96void fw_device_cdev_update(struct fw_device *device); 99void fw_device_cdev_update(struct fw_device *device);
97void fw_device_cdev_remove(struct fw_device *device); 100void fw_device_cdev_remove(struct fw_device *device);
98 101
102extern struct rw_semaphore fw_device_rwsem;
99extern int fw_cdev_major; 103extern int fw_cdev_major;
100 104
105/*
106 * fw_unit.directory must not be accessed after device_del(&fw_unit.device).
107 */
101struct fw_unit { 108struct fw_unit {
102 struct device device; 109 struct device device;
103 u32 *directory; 110 u32 *directory;
104 struct fw_attribute_group attribute_group; 111 struct fw_attribute_group attribute_group;
105}; 112};
106 113
107static inline struct fw_unit * 114static inline struct fw_unit *fw_unit(struct device *dev)
108fw_unit(struct device *dev)
109{ 115{
110 return container_of(dev, struct fw_unit, device); 116 return container_of(dev, struct fw_unit, device);
111} 117}
112 118
119static inline struct fw_unit *fw_unit_get(struct fw_unit *unit)
120{
121 get_device(&unit->device);
122
123 return unit;
124}
125
126static inline void fw_unit_put(struct fw_unit *unit)
127{
128 put_device(&unit->device);
129}
130
113#define CSR_OFFSET 0x40 131#define CSR_OFFSET 0x40
114#define CSR_LEAF 0x80 132#define CSR_LEAF 0x80
115#define CSR_DIRECTORY 0xc0 133#define CSR_DIRECTORY 0xc0
diff --git a/drivers/firewire/fw-iso.c b/drivers/firewire/fw-iso.c
index 2b640e9be6de..bcbe794a3ea5 100644
--- a/drivers/firewire/fw-iso.c
+++ b/drivers/firewire/fw-iso.c
@@ -126,7 +126,6 @@ fw_iso_context_create(struct fw_card *card, int type,
126 126
127 return ctx; 127 return ctx;
128} 128}
129EXPORT_SYMBOL(fw_iso_context_create);
130 129
131void fw_iso_context_destroy(struct fw_iso_context *ctx) 130void fw_iso_context_destroy(struct fw_iso_context *ctx)
132{ 131{
@@ -134,14 +133,12 @@ void fw_iso_context_destroy(struct fw_iso_context *ctx)
134 133
135 card->driver->free_iso_context(ctx); 134 card->driver->free_iso_context(ctx);
136} 135}
137EXPORT_SYMBOL(fw_iso_context_destroy);
138 136
139int 137int
140fw_iso_context_start(struct fw_iso_context *ctx, int cycle, int sync, int tags) 138fw_iso_context_start(struct fw_iso_context *ctx, int cycle, int sync, int tags)
141{ 139{
142 return ctx->card->driver->start_iso(ctx, cycle, sync, tags); 140 return ctx->card->driver->start_iso(ctx, cycle, sync, tags);
143} 141}
144EXPORT_SYMBOL(fw_iso_context_start);
145 142
146int 143int
147fw_iso_context_queue(struct fw_iso_context *ctx, 144fw_iso_context_queue(struct fw_iso_context *ctx,
@@ -153,11 +150,9 @@ fw_iso_context_queue(struct fw_iso_context *ctx,
153 150
154 return card->driver->queue_iso(ctx, packet, buffer, payload); 151 return card->driver->queue_iso(ctx, packet, buffer, payload);
155} 152}
156EXPORT_SYMBOL(fw_iso_context_queue);
157 153
158int 154int
159fw_iso_context_stop(struct fw_iso_context *ctx) 155fw_iso_context_stop(struct fw_iso_context *ctx)
160{ 156{
161 return ctx->card->driver->stop_iso(ctx); 157 return ctx->card->driver->stop_iso(ctx);
162} 158}
163EXPORT_SYMBOL(fw_iso_context_stop);
diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c
index ca6d51efd8bb..4f02c55f13e1 100644
--- a/drivers/firewire/fw-ohci.c
+++ b/drivers/firewire/fw-ohci.c
@@ -27,6 +27,7 @@
27#include <linux/kernel.h> 27#include <linux/kernel.h>
28#include <linux/mm.h> 28#include <linux/mm.h>
29#include <linux/module.h> 29#include <linux/module.h>
30#include <linux/moduleparam.h>
30#include <linux/pci.h> 31#include <linux/pci.h>
31#include <linux/spinlock.h> 32#include <linux/spinlock.h>
32 33
@@ -177,9 +178,10 @@ struct fw_ohci {
177 struct tasklet_struct bus_reset_tasklet; 178 struct tasklet_struct bus_reset_tasklet;
178 int node_id; 179 int node_id;
179 int generation; 180 int generation;
180 int request_generation; 181 int request_generation; /* for timestamping incoming requests */
181 u32 bus_seconds; 182 u32 bus_seconds;
182 bool old_uninorth; 183 bool old_uninorth;
184 bool bus_reset_packet_quirk;
183 185
184 /* 186 /*
185 * Spinlock for accessing fw_ohci data. Never call out of 187 * Spinlock for accessing fw_ohci data. Never call out of
@@ -237,6 +239,196 @@ static inline struct fw_ohci *fw_ohci(struct fw_card *card)
237 239
238static char ohci_driver_name[] = KBUILD_MODNAME; 240static char ohci_driver_name[] = KBUILD_MODNAME;
239 241
242#ifdef CONFIG_FIREWIRE_OHCI_DEBUG
243
244#define OHCI_PARAM_DEBUG_AT_AR 1
245#define OHCI_PARAM_DEBUG_SELFIDS 2
246#define OHCI_PARAM_DEBUG_IRQS 4
247#define OHCI_PARAM_DEBUG_BUSRESETS 8 /* only effective before chip init */
248
249static int param_debug;
250module_param_named(debug, param_debug, int, 0644);
251MODULE_PARM_DESC(debug, "Verbose logging (default = 0"
252 ", AT/AR events = " __stringify(OHCI_PARAM_DEBUG_AT_AR)
253 ", self-IDs = " __stringify(OHCI_PARAM_DEBUG_SELFIDS)
254 ", IRQs = " __stringify(OHCI_PARAM_DEBUG_IRQS)
255 ", busReset events = " __stringify(OHCI_PARAM_DEBUG_BUSRESETS)
256 ", or a combination, or all = -1)");
257
258static void log_irqs(u32 evt)
259{
260 if (likely(!(param_debug &
261 (OHCI_PARAM_DEBUG_IRQS | OHCI_PARAM_DEBUG_BUSRESETS))))
262 return;
263
264 if (!(param_debug & OHCI_PARAM_DEBUG_IRQS) &&
265 !(evt & OHCI1394_busReset))
266 return;
267
268 printk(KERN_DEBUG KBUILD_MODNAME ": IRQ "
269 "%08x%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
270 evt,
271 evt & OHCI1394_selfIDComplete ? " selfID" : "",
272 evt & OHCI1394_RQPkt ? " AR_req" : "",
273 evt & OHCI1394_RSPkt ? " AR_resp" : "",
274 evt & OHCI1394_reqTxComplete ? " AT_req" : "",
275 evt & OHCI1394_respTxComplete ? " AT_resp" : "",
276 evt & OHCI1394_isochRx ? " IR" : "",
277 evt & OHCI1394_isochTx ? " IT" : "",
278 evt & OHCI1394_postedWriteErr ? " postedWriteErr" : "",
279 evt & OHCI1394_cycleTooLong ? " cycleTooLong" : "",
280 evt & OHCI1394_cycle64Seconds ? " cycle64Seconds" : "",
281 evt & OHCI1394_regAccessFail ? " regAccessFail" : "",
282 evt & OHCI1394_busReset ? " busReset" : "",
283 evt & ~(OHCI1394_selfIDComplete | OHCI1394_RQPkt |
284 OHCI1394_RSPkt | OHCI1394_reqTxComplete |
285 OHCI1394_respTxComplete | OHCI1394_isochRx |
286 OHCI1394_isochTx | OHCI1394_postedWriteErr |
287 OHCI1394_cycleTooLong | OHCI1394_cycle64Seconds |
288 OHCI1394_regAccessFail | OHCI1394_busReset)
289 ? " ?" : "");
290}
291
292static const char *speed[] = {
293 [0] = "S100", [1] = "S200", [2] = "S400", [3] = "beta",
294};
295static const char *power[] = {
296 [0] = "+0W", [1] = "+15W", [2] = "+30W", [3] = "+45W",
297 [4] = "-3W", [5] = " ?W", [6] = "-3..-6W", [7] = "-3..-10W",
298};
299static const char port[] = { '.', '-', 'p', 'c', };
300
301static char _p(u32 *s, int shift)
302{
303 return port[*s >> shift & 3];
304}
305
306static void log_selfids(int node_id, int generation, int self_id_count, u32 *s)
307{
308 if (likely(!(param_debug & OHCI_PARAM_DEBUG_SELFIDS)))
309 return;
310
311 printk(KERN_DEBUG KBUILD_MODNAME ": %d selfIDs, generation %d, "
312 "local node ID %04x\n", self_id_count, generation, node_id);
313
314 for (; self_id_count--; ++s)
315 if ((*s & 1 << 23) == 0)
316 printk(KERN_DEBUG "selfID 0: %08x, phy %d [%c%c%c] "
317 "%s gc=%d %s %s%s%s\n",
318 *s, *s >> 24 & 63, _p(s, 6), _p(s, 4), _p(s, 2),
319 speed[*s >> 14 & 3], *s >> 16 & 63,
320 power[*s >> 8 & 7], *s >> 22 & 1 ? "L" : "",
321 *s >> 11 & 1 ? "c" : "", *s & 2 ? "i" : "");
322 else
323 printk(KERN_DEBUG "selfID n: %08x, phy %d "
324 "[%c%c%c%c%c%c%c%c]\n",
325 *s, *s >> 24 & 63,
326 _p(s, 16), _p(s, 14), _p(s, 12), _p(s, 10),
327 _p(s, 8), _p(s, 6), _p(s, 4), _p(s, 2));
328}
329
330static const char *evts[] = {
331 [0x00] = "evt_no_status", [0x01] = "-reserved-",
332 [0x02] = "evt_long_packet", [0x03] = "evt_missing_ack",
333 [0x04] = "evt_underrun", [0x05] = "evt_overrun",
334 [0x06] = "evt_descriptor_read", [0x07] = "evt_data_read",
335 [0x08] = "evt_data_write", [0x09] = "evt_bus_reset",
336 [0x0a] = "evt_timeout", [0x0b] = "evt_tcode_err",
337 [0x0c] = "-reserved-", [0x0d] = "-reserved-",
338 [0x0e] = "evt_unknown", [0x0f] = "evt_flushed",
339 [0x10] = "-reserved-", [0x11] = "ack_complete",
340 [0x12] = "ack_pending ", [0x13] = "-reserved-",
341 [0x14] = "ack_busy_X", [0x15] = "ack_busy_A",
342 [0x16] = "ack_busy_B", [0x17] = "-reserved-",
343 [0x18] = "-reserved-", [0x19] = "-reserved-",
344 [0x1a] = "-reserved-", [0x1b] = "ack_tardy",
345 [0x1c] = "-reserved-", [0x1d] = "ack_data_error",
346 [0x1e] = "ack_type_error", [0x1f] = "-reserved-",
347 [0x20] = "pending/cancelled",
348};
349static const char *tcodes[] = {
350 [0x0] = "QW req", [0x1] = "BW req",
351 [0x2] = "W resp", [0x3] = "-reserved-",
352 [0x4] = "QR req", [0x5] = "BR req",
353 [0x6] = "QR resp", [0x7] = "BR resp",
354 [0x8] = "cycle start", [0x9] = "Lk req",
355 [0xa] = "async stream packet", [0xb] = "Lk resp",
356 [0xc] = "-reserved-", [0xd] = "-reserved-",
357 [0xe] = "link internal", [0xf] = "-reserved-",
358};
359static const char *phys[] = {
360 [0x0] = "phy config packet", [0x1] = "link-on packet",
361 [0x2] = "self-id packet", [0x3] = "-reserved-",
362};
363
364static void log_ar_at_event(char dir, int speed, u32 *header, int evt)
365{
366 int tcode = header[0] >> 4 & 0xf;
367 char specific[12];
368
369 if (likely(!(param_debug & OHCI_PARAM_DEBUG_AT_AR)))
370 return;
371
372 if (unlikely(evt >= ARRAY_SIZE(evts)))
373 evt = 0x1f;
374
375 if (evt == OHCI1394_evt_bus_reset) {
376 printk(KERN_DEBUG "A%c evt_bus_reset, generation %d\n",
377 dir, (header[2] >> 16) & 0xff);
378 return;
379 }
380
381 if (header[0] == ~header[1]) {
382 printk(KERN_DEBUG "A%c %s, %s, %08x\n",
383 dir, evts[evt], phys[header[0] >> 30 & 0x3],
384 header[0]);
385 return;
386 }
387
388 switch (tcode) {
389 case 0x0: case 0x6: case 0x8:
390 snprintf(specific, sizeof(specific), " = %08x",
391 be32_to_cpu((__force __be32)header[3]));
392 break;
393 case 0x1: case 0x5: case 0x7: case 0x9: case 0xb:
394 snprintf(specific, sizeof(specific), " %x,%x",
395 header[3] >> 16, header[3] & 0xffff);
396 break;
397 default:
398 specific[0] = '\0';
399 }
400
401 switch (tcode) {
402 case 0xe: case 0xa:
403 printk(KERN_DEBUG "A%c %s, %s\n",
404 dir, evts[evt], tcodes[tcode]);
405 break;
406 case 0x0: case 0x1: case 0x4: case 0x5: case 0x9:
407 printk(KERN_DEBUG "A%c spd %x tl %02x, "
408 "%04x -> %04x, %s, "
409 "%s, %04x%08x%s\n",
410 dir, speed, header[0] >> 10 & 0x3f,
411 header[1] >> 16, header[0] >> 16, evts[evt],
412 tcodes[tcode], header[1] & 0xffff, header[2], specific);
413 break;
414 default:
415 printk(KERN_DEBUG "A%c spd %x tl %02x, "
416 "%04x -> %04x, %s, "
417 "%s%s\n",
418 dir, speed, header[0] >> 10 & 0x3f,
419 header[1] >> 16, header[0] >> 16, evts[evt],
420 tcodes[tcode], specific);
421 }
422}
423
424#else
425
426#define log_irqs(evt)
427#define log_selfids(node_id, generation, self_id_count, sid)
428#define log_ar_at_event(dir, speed, header, evt)
429
430#endif /* CONFIG_FIREWIRE_OHCI_DEBUG */
431
240static inline void reg_write(const struct fw_ohci *ohci, int offset, u32 data) 432static inline void reg_write(const struct fw_ohci *ohci, int offset, u32 data)
241{ 433{
242 writel(data, ohci->registers + offset); 434 writel(data, ohci->registers + offset);
@@ -320,6 +512,7 @@ static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer)
320 struct fw_ohci *ohci = ctx->ohci; 512 struct fw_ohci *ohci = ctx->ohci;
321 struct fw_packet p; 513 struct fw_packet p;
322 u32 status, length, tcode; 514 u32 status, length, tcode;
515 int evt;
323 516
324 p.header[0] = cond_le32_to_cpu(buffer[0]); 517 p.header[0] = cond_le32_to_cpu(buffer[0]);
325 p.header[1] = cond_le32_to_cpu(buffer[1]); 518 p.header[1] = cond_le32_to_cpu(buffer[1]);
@@ -362,12 +555,15 @@ static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer)
362 /* FIXME: What to do about evt_* errors? */ 555 /* FIXME: What to do about evt_* errors? */
363 length = (p.header_length + p.payload_length + 3) / 4; 556 length = (p.header_length + p.payload_length + 3) / 4;
364 status = cond_le32_to_cpu(buffer[length]); 557 status = cond_le32_to_cpu(buffer[length]);
558 evt = (status >> 16) & 0x1f;
365 559
366 p.ack = ((status >> 16) & 0x1f) - 16; 560 p.ack = evt - 16;
367 p.speed = (status >> 21) & 0x7; 561 p.speed = (status >> 21) & 0x7;
368 p.timestamp = status & 0xffff; 562 p.timestamp = status & 0xffff;
369 p.generation = ohci->request_generation; 563 p.generation = ohci->request_generation;
370 564
565 log_ar_at_event('R', p.speed, p.header, evt);
566
371 /* 567 /*
372 * The OHCI bus reset handler synthesizes a phy packet with 568 * The OHCI bus reset handler synthesizes a phy packet with
373 * the new generation number when a bus reset happens (see 569 * the new generation number when a bus reset happens (see
@@ -376,14 +572,19 @@ static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer)
376 * generation. We only need this for requests; for responses 572 * generation. We only need this for requests; for responses
377 * we use the unique tlabel for finding the matching 573 * we use the unique tlabel for finding the matching
378 * request. 574 * request.
575 *
576 * Alas some chips sometimes emit bus reset packets with a
577 * wrong generation. We set the correct generation for these
578 * at a slightly incorrect time (in bus_reset_tasklet).
379 */ 579 */
380 580 if (evt == OHCI1394_evt_bus_reset) {
381 if (p.ack + 16 == 0x09) 581 if (!ohci->bus_reset_packet_quirk)
382 ohci->request_generation = (p.header[2] >> 16) & 0xff; 582 ohci->request_generation = (p.header[2] >> 16) & 0xff;
383 else if (ctx == &ohci->ar_request_ctx) 583 } else if (ctx == &ohci->ar_request_ctx) {
384 fw_core_handle_request(&ohci->card, &p); 584 fw_core_handle_request(&ohci->card, &p);
385 else 585 } else {
386 fw_core_handle_response(&ohci->card, &p); 586 fw_core_handle_response(&ohci->card, &p);
587 }
387 588
388 return buffer + length + 1; 589 return buffer + length + 1;
389} 590}
@@ -770,8 +971,19 @@ at_context_queue_packet(struct context *ctx, struct fw_packet *packet)
770 DESCRIPTOR_IRQ_ALWAYS | 971 DESCRIPTOR_IRQ_ALWAYS |
771 DESCRIPTOR_BRANCH_ALWAYS); 972 DESCRIPTOR_BRANCH_ALWAYS);
772 973
773 /* FIXME: Document how the locking works. */ 974 /*
774 if (ohci->generation != packet->generation) { 975 * If the controller and packet generations don't match, we need to
976 * bail out and try again. If IntEvent.busReset is set, the AT context
977 * is halted, so appending to the context and trying to run it is
978 * futile. Most controllers do the right thing and just flush the AT
979 * queue (per section 7.2.3.2 of the OHCI 1.1 specification), but
980 * some controllers (like a JMicron JMB381 PCI-e) misbehave and wind
981 * up stalling out. So we just bail out in software and try again
982 * later, and everyone is happy.
983 * FIXME: Document how the locking works.
984 */
985 if (ohci->generation != packet->generation ||
986 reg_read(ohci, OHCI1394_IntEventSet) & OHCI1394_busReset) {
775 if (packet->payload_length > 0) 987 if (packet->payload_length > 0)
776 dma_unmap_single(ohci->card.device, payload_bus, 988 dma_unmap_single(ohci->card.device, payload_bus,
777 packet->payload_length, DMA_TO_DEVICE); 989 packet->payload_length, DMA_TO_DEVICE);
@@ -817,6 +1029,8 @@ static int handle_at_packet(struct context *context,
817 evt = le16_to_cpu(last->transfer_status) & 0x1f; 1029 evt = le16_to_cpu(last->transfer_status) & 0x1f;
818 packet->timestamp = le16_to_cpu(last->res_count); 1030 packet->timestamp = le16_to_cpu(last->res_count);
819 1031
1032 log_ar_at_event('T', packet->speed, packet->header, evt);
1033
820 switch (evt) { 1034 switch (evt) {
821 case OHCI1394_evt_timeout: 1035 case OHCI1394_evt_timeout:
822 /* Async response transmit timed out. */ 1036 /* Async response transmit timed out. */
@@ -1019,20 +1233,30 @@ static void bus_reset_tasklet(unsigned long data)
1019 ohci->node_id = reg & (OHCI1394_NodeID_busNumber | 1233 ohci->node_id = reg & (OHCI1394_NodeID_busNumber |
1020 OHCI1394_NodeID_nodeNumber); 1234 OHCI1394_NodeID_nodeNumber);
1021 1235
1236 reg = reg_read(ohci, OHCI1394_SelfIDCount);
1237 if (reg & OHCI1394_SelfIDCount_selfIDError) {
1238 fw_notify("inconsistent self IDs\n");
1239 return;
1240 }
1022 /* 1241 /*
1023 * The count in the SelfIDCount register is the number of 1242 * The count in the SelfIDCount register is the number of
1024 * bytes in the self ID receive buffer. Since we also receive 1243 * bytes in the self ID receive buffer. Since we also receive
1025 * the inverted quadlets and a header quadlet, we shift one 1244 * the inverted quadlets and a header quadlet, we shift one
1026 * bit extra to get the actual number of self IDs. 1245 * bit extra to get the actual number of self IDs.
1027 */ 1246 */
1028 1247 self_id_count = (reg >> 3) & 0x3ff;
1029 self_id_count = (reg_read(ohci, OHCI1394_SelfIDCount) >> 3) & 0x3ff; 1248 if (self_id_count == 0) {
1249 fw_notify("inconsistent self IDs\n");
1250 return;
1251 }
1030 generation = (cond_le32_to_cpu(ohci->self_id_cpu[0]) >> 16) & 0xff; 1252 generation = (cond_le32_to_cpu(ohci->self_id_cpu[0]) >> 16) & 0xff;
1031 rmb(); 1253 rmb();
1032 1254
1033 for (i = 1, j = 0; j < self_id_count; i += 2, j++) { 1255 for (i = 1, j = 0; j < self_id_count; i += 2, j++) {
1034 if (ohci->self_id_cpu[i] != ~ohci->self_id_cpu[i + 1]) 1256 if (ohci->self_id_cpu[i] != ~ohci->self_id_cpu[i + 1]) {
1035 fw_error("inconsistent self IDs\n"); 1257 fw_notify("inconsistent self IDs\n");
1258 return;
1259 }
1036 ohci->self_id_buffer[j] = 1260 ohci->self_id_buffer[j] =
1037 cond_le32_to_cpu(ohci->self_id_cpu[i]); 1261 cond_le32_to_cpu(ohci->self_id_cpu[i]);
1038 } 1262 }
@@ -1067,6 +1291,9 @@ static void bus_reset_tasklet(unsigned long data)
1067 context_stop(&ohci->at_response_ctx); 1291 context_stop(&ohci->at_response_ctx);
1068 reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset); 1292 reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset);
1069 1293
1294 if (ohci->bus_reset_packet_quirk)
1295 ohci->request_generation = generation;
1296
1070 /* 1297 /*
1071 * This next bit is unrelated to the AT context stuff but we 1298 * This next bit is unrelated to the AT context stuff but we
1072 * have to do it under the spinlock also. If a new config rom 1299 * have to do it under the spinlock also. If a new config rom
@@ -1097,12 +1324,20 @@ static void bus_reset_tasklet(unsigned long data)
1097 reg_write(ohci, OHCI1394_ConfigROMhdr, ohci->next_header); 1324 reg_write(ohci, OHCI1394_ConfigROMhdr, ohci->next_header);
1098 } 1325 }
1099 1326
1327#ifdef CONFIG_FIREWIRE_OHCI_REMOTE_DMA
1328 reg_write(ohci, OHCI1394_PhyReqFilterHiSet, ~0);
1329 reg_write(ohci, OHCI1394_PhyReqFilterLoSet, ~0);
1330#endif
1331
1100 spin_unlock_irqrestore(&ohci->lock, flags); 1332 spin_unlock_irqrestore(&ohci->lock, flags);
1101 1333
1102 if (free_rom) 1334 if (free_rom)
1103 dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE, 1335 dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE,
1104 free_rom, free_rom_bus); 1336 free_rom, free_rom_bus);
1105 1337
1338 log_selfids(ohci->node_id, generation,
1339 self_id_count, ohci->self_id_buffer);
1340
1106 fw_core_handle_bus_reset(&ohci->card, ohci->node_id, generation, 1341 fw_core_handle_bus_reset(&ohci->card, ohci->node_id, generation,
1107 self_id_count, ohci->self_id_buffer); 1342 self_id_count, ohci->self_id_buffer);
1108} 1343}
@@ -1118,7 +1353,9 @@ static irqreturn_t irq_handler(int irq, void *data)
1118 if (!event || !~event) 1353 if (!event || !~event)
1119 return IRQ_NONE; 1354 return IRQ_NONE;
1120 1355
1121 reg_write(ohci, OHCI1394_IntEventClear, event); 1356 /* busReset must not be cleared yet, see OHCI 1.1 clause 7.2.3.2 */
1357 reg_write(ohci, OHCI1394_IntEventClear, event & ~OHCI1394_busReset);
1358 log_irqs(event);
1122 1359
1123 if (event & OHCI1394_selfIDComplete) 1360 if (event & OHCI1394_selfIDComplete)
1124 tasklet_schedule(&ohci->bus_reset_tasklet); 1361 tasklet_schedule(&ohci->bus_reset_tasklet);
@@ -1153,6 +1390,10 @@ static irqreturn_t irq_handler(int irq, void *data)
1153 iso_event &= ~(1 << i); 1390 iso_event &= ~(1 << i);
1154 } 1391 }
1155 1392
1393 if (unlikely(event & OHCI1394_regAccessFail))
1394 fw_error("Register access failure - "
1395 "please notify linux1394-devel@lists.sf.net\n");
1396
1156 if (unlikely(event & OHCI1394_postedWriteErr)) 1397 if (unlikely(event & OHCI1394_postedWriteErr))
1157 fw_error("PCI posted write error\n"); 1398 fw_error("PCI posted write error\n");
1158 1399
@@ -1192,6 +1433,8 @@ static int ohci_enable(struct fw_card *card, u32 *config_rom, size_t length)
1192{ 1433{
1193 struct fw_ohci *ohci = fw_ohci(card); 1434 struct fw_ohci *ohci = fw_ohci(card);
1194 struct pci_dev *dev = to_pci_dev(card->device); 1435 struct pci_dev *dev = to_pci_dev(card->device);
1436 u32 lps;
1437 int i;
1195 1438
1196 if (software_reset(ohci)) { 1439 if (software_reset(ohci)) {
1197 fw_error("Failed to reset ohci card.\n"); 1440 fw_error("Failed to reset ohci card.\n");
@@ -1203,13 +1446,24 @@ static int ohci_enable(struct fw_card *card, u32 *config_rom, size_t length)
1203 * most of the registers. In fact, on some cards (ALI M5251), 1446 * most of the registers. In fact, on some cards (ALI M5251),
1204 * accessing registers in the SClk domain without LPS enabled 1447 * accessing registers in the SClk domain without LPS enabled
1205 * will lock up the machine. Wait 50msec to make sure we have 1448 * will lock up the machine. Wait 50msec to make sure we have
1206 * full link enabled. 1449 * full link enabled. However, with some cards (well, at least
1450 * a JMicron PCIe card), we have to try again sometimes.
1207 */ 1451 */
1208 reg_write(ohci, OHCI1394_HCControlSet, 1452 reg_write(ohci, OHCI1394_HCControlSet,
1209 OHCI1394_HCControl_LPS | 1453 OHCI1394_HCControl_LPS |
1210 OHCI1394_HCControl_postedWriteEnable); 1454 OHCI1394_HCControl_postedWriteEnable);
1211 flush_writes(ohci); 1455 flush_writes(ohci);
1212 msleep(50); 1456
1457 for (lps = 0, i = 0; !lps && i < 3; i++) {
1458 msleep(50);
1459 lps = reg_read(ohci, OHCI1394_HCControlSet) &
1460 OHCI1394_HCControl_LPS;
1461 }
1462
1463 if (!lps) {
1464 fw_error("Failed to set Link Power Status\n");
1465 return -EIO;
1466 }
1213 1467
1214 reg_write(ohci, OHCI1394_HCControlClear, 1468 reg_write(ohci, OHCI1394_HCControlClear,
1215 OHCI1394_HCControl_noByteSwapData); 1469 OHCI1394_HCControl_noByteSwapData);
@@ -1237,7 +1491,10 @@ static int ohci_enable(struct fw_card *card, u32 *config_rom, size_t length)
1237 OHCI1394_reqTxComplete | OHCI1394_respTxComplete | 1491 OHCI1394_reqTxComplete | OHCI1394_respTxComplete |
1238 OHCI1394_isochRx | OHCI1394_isochTx | 1492 OHCI1394_isochRx | OHCI1394_isochTx |
1239 OHCI1394_postedWriteErr | OHCI1394_cycleTooLong | 1493 OHCI1394_postedWriteErr | OHCI1394_cycleTooLong |
1240 OHCI1394_cycle64Seconds | OHCI1394_masterIntEnable); 1494 OHCI1394_cycle64Seconds | OHCI1394_regAccessFail |
1495 OHCI1394_masterIntEnable);
1496 if (param_debug & OHCI_PARAM_DEBUG_BUSRESETS)
1497 reg_write(ohci, OHCI1394_IntMaskSet, OHCI1394_busReset);
1241 1498
1242 /* Activate link_on bit and contender bit in our self ID packets.*/ 1499 /* Activate link_on bit and contender bit in our self ID packets.*/
1243 if (ohci_update_phy_reg(card, 4, 0, 1500 if (ohci_update_phy_reg(card, 4, 0,
@@ -1421,6 +1678,7 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet)
1421 if (packet->ack != 0) 1678 if (packet->ack != 0)
1422 goto out; 1679 goto out;
1423 1680
1681 log_ar_at_event('T', packet->speed, packet->header, 0x20);
1424 driver_data->packet = NULL; 1682 driver_data->packet = NULL;
1425 packet->ack = RCODE_CANCELLED; 1683 packet->ack = RCODE_CANCELLED;
1426 packet->callback(packet, &ohci->card, packet->ack); 1684 packet->callback(packet, &ohci->card, packet->ack);
@@ -1435,6 +1693,9 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet)
1435static int 1693static int
1436ohci_enable_phys_dma(struct fw_card *card, int node_id, int generation) 1694ohci_enable_phys_dma(struct fw_card *card, int node_id, int generation)
1437{ 1695{
1696#ifdef CONFIG_FIREWIRE_OHCI_REMOTE_DMA
1697 return 0;
1698#else
1438 struct fw_ohci *ohci = fw_ohci(card); 1699 struct fw_ohci *ohci = fw_ohci(card);
1439 unsigned long flags; 1700 unsigned long flags;
1440 int n, retval = 0; 1701 int n, retval = 0;
@@ -1466,6 +1727,7 @@ ohci_enable_phys_dma(struct fw_card *card, int node_id, int generation)
1466 out: 1727 out:
1467 spin_unlock_irqrestore(&ohci->lock, flags); 1728 spin_unlock_irqrestore(&ohci->lock, flags);
1468 return retval; 1729 return retval;
1730#endif /* CONFIG_FIREWIRE_OHCI_REMOTE_DMA */
1469} 1731}
1470 1732
1471static u64 1733static u64
@@ -2045,17 +2307,9 @@ static const struct fw_card_driver ohci_driver = {
2045 .stop_iso = ohci_stop_iso, 2307 .stop_iso = ohci_stop_iso,
2046}; 2308};
2047 2309
2048static int __devinit
2049pci_probe(struct pci_dev *dev, const struct pci_device_id *ent)
2050{
2051 struct fw_ohci *ohci;
2052 u32 bus_options, max_receive, link_speed;
2053 u64 guid;
2054 int err;
2055 size_t size;
2056
2057#ifdef CONFIG_PPC_PMAC 2310#ifdef CONFIG_PPC_PMAC
2058 /* Necessary on some machines if fw-ohci was loaded/ unloaded before */ 2311static void ohci_pmac_on(struct pci_dev *dev)
2312{
2059 if (machine_is(powermac)) { 2313 if (machine_is(powermac)) {
2060 struct device_node *ofn = pci_device_to_OF_node(dev); 2314 struct device_node *ofn = pci_device_to_OF_node(dev);
2061 2315
@@ -2064,8 +2318,33 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent)
2064 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 1); 2318 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 1);
2065 } 2319 }
2066 } 2320 }
2321}
2322
2323static void ohci_pmac_off(struct pci_dev *dev)
2324{
2325 if (machine_is(powermac)) {
2326 struct device_node *ofn = pci_device_to_OF_node(dev);
2327
2328 if (ofn) {
2329 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 0);
2330 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, ofn, 0, 0);
2331 }
2332 }
2333}
2334#else
2335#define ohci_pmac_on(dev)
2336#define ohci_pmac_off(dev)
2067#endif /* CONFIG_PPC_PMAC */ 2337#endif /* CONFIG_PPC_PMAC */
2068 2338
2339static int __devinit
2340pci_probe(struct pci_dev *dev, const struct pci_device_id *ent)
2341{
2342 struct fw_ohci *ohci;
2343 u32 bus_options, max_receive, link_speed;
2344 u64 guid;
2345 int err;
2346 size_t size;
2347
2069 ohci = kzalloc(sizeof(*ohci), GFP_KERNEL); 2348 ohci = kzalloc(sizeof(*ohci), GFP_KERNEL);
2070 if (ohci == NULL) { 2349 if (ohci == NULL) {
2071 fw_error("Could not malloc fw_ohci data.\n"); 2350 fw_error("Could not malloc fw_ohci data.\n");
@@ -2074,10 +2353,12 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent)
2074 2353
2075 fw_card_initialize(&ohci->card, &ohci_driver, &dev->dev); 2354 fw_card_initialize(&ohci->card, &ohci_driver, &dev->dev);
2076 2355
2356 ohci_pmac_on(dev);
2357
2077 err = pci_enable_device(dev); 2358 err = pci_enable_device(dev);
2078 if (err) { 2359 if (err) {
2079 fw_error("Failed to enable OHCI hardware.\n"); 2360 fw_error("Failed to enable OHCI hardware.\n");
2080 goto fail_put_card; 2361 goto fail_free;
2081 } 2362 }
2082 2363
2083 pci_set_master(dev); 2364 pci_set_master(dev);
@@ -2088,6 +2369,8 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent)
2088 ohci->old_uninorth = dev->vendor == PCI_VENDOR_ID_APPLE && 2369 ohci->old_uninorth = dev->vendor == PCI_VENDOR_ID_APPLE &&
2089 dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW; 2370 dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW;
2090#endif 2371#endif
2372 ohci->bus_reset_packet_quirk = dev->vendor == PCI_VENDOR_ID_TI;
2373
2091 spin_lock_init(&ohci->lock); 2374 spin_lock_init(&ohci->lock);
2092 2375
2093 tasklet_init(&ohci->bus_reset_tasklet, 2376 tasklet_init(&ohci->bus_reset_tasklet,
@@ -2173,8 +2456,9 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent)
2173 pci_release_region(dev, 0); 2456 pci_release_region(dev, 0);
2174 fail_disable: 2457 fail_disable:
2175 pci_disable_device(dev); 2458 pci_disable_device(dev);
2176 fail_put_card: 2459 fail_free:
2177 fw_card_put(&ohci->card); 2460 kfree(&ohci->card);
2461 ohci_pmac_off(dev);
2178 2462
2179 return err; 2463 return err;
2180} 2464}
@@ -2202,72 +2486,42 @@ static void pci_remove(struct pci_dev *dev)
2202 pci_iounmap(dev, ohci->registers); 2486 pci_iounmap(dev, ohci->registers);
2203 pci_release_region(dev, 0); 2487 pci_release_region(dev, 0);
2204 pci_disable_device(dev); 2488 pci_disable_device(dev);
2205 fw_card_put(&ohci->card); 2489 kfree(&ohci->card);
2206 2490 ohci_pmac_off(dev);
2207#ifdef CONFIG_PPC_PMAC
2208 /* On UniNorth, power down the cable and turn off the chip clock
2209 * to save power on laptops */
2210 if (machine_is(powermac)) {
2211 struct device_node *ofn = pci_device_to_OF_node(dev);
2212
2213 if (ofn) {
2214 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 0);
2215 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, ofn, 0, 0);
2216 }
2217 }
2218#endif /* CONFIG_PPC_PMAC */
2219 2491
2220 fw_notify("Removed fw-ohci device.\n"); 2492 fw_notify("Removed fw-ohci device.\n");
2221} 2493}
2222 2494
2223#ifdef CONFIG_PM 2495#ifdef CONFIG_PM
2224static int pci_suspend(struct pci_dev *pdev, pm_message_t state) 2496static int pci_suspend(struct pci_dev *dev, pm_message_t state)
2225{ 2497{
2226 struct fw_ohci *ohci = pci_get_drvdata(pdev); 2498 struct fw_ohci *ohci = pci_get_drvdata(dev);
2227 int err; 2499 int err;
2228 2500
2229 software_reset(ohci); 2501 software_reset(ohci);
2230 free_irq(pdev->irq, ohci); 2502 free_irq(dev->irq, ohci);
2231 err = pci_save_state(pdev); 2503 err = pci_save_state(dev);
2232 if (err) { 2504 if (err) {
2233 fw_error("pci_save_state failed\n"); 2505 fw_error("pci_save_state failed\n");
2234 return err; 2506 return err;
2235 } 2507 }
2236 err = pci_set_power_state(pdev, pci_choose_state(pdev, state)); 2508 err = pci_set_power_state(dev, pci_choose_state(dev, state));
2237 if (err) 2509 if (err)
2238 fw_error("pci_set_power_state failed with %d\n", err); 2510 fw_error("pci_set_power_state failed with %d\n", err);
2239 2511 ohci_pmac_off(dev);
2240/* PowerMac suspend code comes last */
2241#ifdef CONFIG_PPC_PMAC
2242 if (machine_is(powermac)) {
2243 struct device_node *ofn = pci_device_to_OF_node(pdev);
2244
2245 if (ofn)
2246 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 0);
2247 }
2248#endif /* CONFIG_PPC_PMAC */
2249 2512
2250 return 0; 2513 return 0;
2251} 2514}
2252 2515
2253static int pci_resume(struct pci_dev *pdev) 2516static int pci_resume(struct pci_dev *dev)
2254{ 2517{
2255 struct fw_ohci *ohci = pci_get_drvdata(pdev); 2518 struct fw_ohci *ohci = pci_get_drvdata(dev);
2256 int err; 2519 int err;
2257 2520
2258/* PowerMac resume code comes first */ 2521 ohci_pmac_on(dev);
2259#ifdef CONFIG_PPC_PMAC 2522 pci_set_power_state(dev, PCI_D0);
2260 if (machine_is(powermac)) { 2523 pci_restore_state(dev);
2261 struct device_node *ofn = pci_device_to_OF_node(pdev); 2524 err = pci_enable_device(dev);
2262
2263 if (ofn)
2264 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 1);
2265 }
2266#endif /* CONFIG_PPC_PMAC */
2267
2268 pci_set_power_state(pdev, PCI_D0);
2269 pci_restore_state(pdev);
2270 err = pci_enable_device(pdev);
2271 if (err) { 2525 if (err) {
2272 fw_error("pci_enable_device failed\n"); 2526 fw_error("pci_enable_device failed\n");
2273 return err; 2527 return err;
diff --git a/drivers/firewire/fw-ohci.h b/drivers/firewire/fw-ohci.h
index dec4f04e6b24..a2fbb6240ca7 100644
--- a/drivers/firewire/fw-ohci.h
+++ b/drivers/firewire/fw-ohci.h
@@ -30,6 +30,7 @@
30#define OHCI1394_HCControl_softReset 0x00010000 30#define OHCI1394_HCControl_softReset 0x00010000
31#define OHCI1394_SelfIDBuffer 0x064 31#define OHCI1394_SelfIDBuffer 0x064
32#define OHCI1394_SelfIDCount 0x068 32#define OHCI1394_SelfIDCount 0x068
33#define OHCI1394_SelfIDCount_selfIDError 0x80000000
33#define OHCI1394_IRMultiChanMaskHiSet 0x070 34#define OHCI1394_IRMultiChanMaskHiSet 0x070
34#define OHCI1394_IRMultiChanMaskHiClear 0x074 35#define OHCI1394_IRMultiChanMaskHiClear 0x074
35#define OHCI1394_IRMultiChanMaskLoSet 0x078 36#define OHCI1394_IRMultiChanMaskLoSet 0x078
@@ -124,6 +125,7 @@
124#define OHCI1394_lockRespErr 0x00000200 125#define OHCI1394_lockRespErr 0x00000200
125#define OHCI1394_selfIDComplete 0x00010000 126#define OHCI1394_selfIDComplete 0x00010000
126#define OHCI1394_busReset 0x00020000 127#define OHCI1394_busReset 0x00020000
128#define OHCI1394_regAccessFail 0x00040000
127#define OHCI1394_phy 0x00080000 129#define OHCI1394_phy 0x00080000
128#define OHCI1394_cycleSynch 0x00100000 130#define OHCI1394_cycleSynch 0x00100000
129#define OHCI1394_cycle64Seconds 0x00200000 131#define OHCI1394_cycle64Seconds 0x00200000
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
index 62b4e47d0cc0..2a999373863e 100644
--- a/drivers/firewire/fw-sbp2.c
+++ b/drivers/firewire/fw-sbp2.c
@@ -153,6 +153,7 @@ struct sbp2_target {
153 struct list_head lu_list; 153 struct list_head lu_list;
154 154
155 u64 management_agent_address; 155 u64 management_agent_address;
156 u64 guid;
156 int directory_id; 157 int directory_id;
157 int node_id; 158 int node_id;
158 int address_high; 159 int address_high;
@@ -173,10 +174,8 @@ struct sbp2_target {
173#define SBP2_ORB_TIMEOUT 2000U /* Timeout in ms */ 174#define SBP2_ORB_TIMEOUT 2000U /* Timeout in ms */
174#define SBP2_ORB_NULL 0x80000000 175#define SBP2_ORB_NULL 0x80000000
175#define SBP2_MAX_SG_ELEMENT_LENGTH 0xf000 176#define SBP2_MAX_SG_ELEMENT_LENGTH 0xf000
176#define SBP2_RETRY_LIMIT 0xf /* 15 retries */ 177#define SBP2_RETRY_LIMIT 0xf /* 15 retries */
177 178#define SBP2_CYCLE_LIMIT (0xc8 << 12) /* 200 125us cycles */
178#define SBP2_DIRECTION_TO_MEDIA 0x0
179#define SBP2_DIRECTION_FROM_MEDIA 0x1
180 179
181/* Unit directory keys */ 180/* Unit directory keys */
182#define SBP2_CSR_UNIT_CHARACTERISTICS 0x3a 181#define SBP2_CSR_UNIT_CHARACTERISTICS 0x3a
@@ -224,8 +223,8 @@ struct sbp2_status {
224}; 223};
225 224
226struct sbp2_pointer { 225struct sbp2_pointer {
227 u32 high; 226 __be32 high;
228 u32 low; 227 __be32 low;
229}; 228};
230 229
231struct sbp2_orb { 230struct sbp2_orb {
@@ -253,8 +252,8 @@ struct sbp2_management_orb {
253 struct { 252 struct {
254 struct sbp2_pointer password; 253 struct sbp2_pointer password;
255 struct sbp2_pointer response; 254 struct sbp2_pointer response;
256 u32 misc; 255 __be32 misc;
257 u32 length; 256 __be32 length;
258 struct sbp2_pointer status_fifo; 257 struct sbp2_pointer status_fifo;
259 } request; 258 } request;
260 __be32 response[4]; 259 __be32 response[4];
@@ -263,20 +262,17 @@ struct sbp2_management_orb {
263 struct sbp2_status status; 262 struct sbp2_status status;
264}; 263};
265 264
266#define LOGIN_RESPONSE_GET_LOGIN_ID(v) ((v).misc & 0xffff)
267#define LOGIN_RESPONSE_GET_LENGTH(v) (((v).misc >> 16) & 0xffff)
268
269struct sbp2_login_response { 265struct sbp2_login_response {
270 u32 misc; 266 __be32 misc;
271 struct sbp2_pointer command_block_agent; 267 struct sbp2_pointer command_block_agent;
272 u32 reconnect_hold; 268 __be32 reconnect_hold;
273}; 269};
274#define COMMAND_ORB_DATA_SIZE(v) ((v)) 270#define COMMAND_ORB_DATA_SIZE(v) ((v))
275#define COMMAND_ORB_PAGE_SIZE(v) ((v) << 16) 271#define COMMAND_ORB_PAGE_SIZE(v) ((v) << 16)
276#define COMMAND_ORB_PAGE_TABLE_PRESENT ((1) << 19) 272#define COMMAND_ORB_PAGE_TABLE_PRESENT ((1) << 19)
277#define COMMAND_ORB_MAX_PAYLOAD(v) ((v) << 20) 273#define COMMAND_ORB_MAX_PAYLOAD(v) ((v) << 20)
278#define COMMAND_ORB_SPEED(v) ((v) << 24) 274#define COMMAND_ORB_SPEED(v) ((v) << 24)
279#define COMMAND_ORB_DIRECTION(v) ((v) << 27) 275#define COMMAND_ORB_DIRECTION ((1) << 27)
280#define COMMAND_ORB_REQUEST_FORMAT(v) ((v) << 29) 276#define COMMAND_ORB_REQUEST_FORMAT(v) ((v) << 29)
281#define COMMAND_ORB_NOTIFY ((1) << 31) 277#define COMMAND_ORB_NOTIFY ((1) << 31)
282 278
@@ -285,7 +281,7 @@ struct sbp2_command_orb {
285 struct { 281 struct {
286 struct sbp2_pointer next; 282 struct sbp2_pointer next;
287 struct sbp2_pointer data_descriptor; 283 struct sbp2_pointer data_descriptor;
288 u32 misc; 284 __be32 misc;
289 u8 command_block[12]; 285 u8 command_block[12];
290 } request; 286 } request;
291 struct scsi_cmnd *cmd; 287 struct scsi_cmnd *cmd;
@@ -459,8 +455,7 @@ sbp2_send_orb(struct sbp2_orb *orb, struct sbp2_logical_unit *lu,
459 unsigned long flags; 455 unsigned long flags;
460 456
461 orb->pointer.high = 0; 457 orb->pointer.high = 0;
462 orb->pointer.low = orb->request_bus; 458 orb->pointer.low = cpu_to_be32(orb->request_bus);
463 fw_memcpy_to_be32(&orb->pointer, &orb->pointer, sizeof(orb->pointer));
464 459
465 spin_lock_irqsave(&device->card->lock, flags); 460 spin_lock_irqsave(&device->card->lock, flags);
466 list_add_tail(&orb->link, &lu->orb_list); 461 list_add_tail(&orb->link, &lu->orb_list);
@@ -536,31 +531,31 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int node_id,
536 if (dma_mapping_error(orb->response_bus)) 531 if (dma_mapping_error(orb->response_bus))
537 goto fail_mapping_response; 532 goto fail_mapping_response;
538 533
539 orb->request.response.high = 0; 534 orb->request.response.high = 0;
540 orb->request.response.low = orb->response_bus; 535 orb->request.response.low = cpu_to_be32(orb->response_bus);
541 536
542 orb->request.misc = 537 orb->request.misc = cpu_to_be32(
543 MANAGEMENT_ORB_NOTIFY | 538 MANAGEMENT_ORB_NOTIFY |
544 MANAGEMENT_ORB_FUNCTION(function) | 539 MANAGEMENT_ORB_FUNCTION(function) |
545 MANAGEMENT_ORB_LUN(lun_or_login_id); 540 MANAGEMENT_ORB_LUN(lun_or_login_id));
546 orb->request.length = 541 orb->request.length = cpu_to_be32(
547 MANAGEMENT_ORB_RESPONSE_LENGTH(sizeof(orb->response)); 542 MANAGEMENT_ORB_RESPONSE_LENGTH(sizeof(orb->response)));
548 543
549 orb->request.status_fifo.high = lu->address_handler.offset >> 32; 544 orb->request.status_fifo.high =
550 orb->request.status_fifo.low = lu->address_handler.offset; 545 cpu_to_be32(lu->address_handler.offset >> 32);
546 orb->request.status_fifo.low =
547 cpu_to_be32(lu->address_handler.offset);
551 548
552 if (function == SBP2_LOGIN_REQUEST) { 549 if (function == SBP2_LOGIN_REQUEST) {
553 /* Ask for 2^2 == 4 seconds reconnect grace period */ 550 /* Ask for 2^2 == 4 seconds reconnect grace period */
554 orb->request.misc |= 551 orb->request.misc |= cpu_to_be32(
555 MANAGEMENT_ORB_RECONNECT(2) | 552 MANAGEMENT_ORB_RECONNECT(2) |
556 MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login); 553 MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login));
557 timeout = lu->tgt->mgt_orb_timeout; 554 timeout = lu->tgt->mgt_orb_timeout;
558 } else { 555 } else {
559 timeout = SBP2_ORB_TIMEOUT; 556 timeout = SBP2_ORB_TIMEOUT;
560 } 557 }
561 558
562 fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
563
564 init_completion(&orb->done); 559 init_completion(&orb->done);
565 orb->base.callback = complete_management_orb; 560 orb->base.callback = complete_management_orb;
566 561
@@ -605,8 +600,7 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int node_id,
605 sizeof(orb->response), DMA_FROM_DEVICE); 600 sizeof(orb->response), DMA_FROM_DEVICE);
606 fail_mapping_response: 601 fail_mapping_response:
607 if (response) 602 if (response)
608 fw_memcpy_from_be32(response, 603 memcpy(response, orb->response, sizeof(orb->response));
609 orb->response, sizeof(orb->response));
610 kref_put(&orb->base.kref, free_orb); 604 kref_put(&orb->base.kref, free_orb);
611 605
612 return retval; 606 return retval;
@@ -701,10 +695,8 @@ static void sbp2_conditionally_block(struct sbp2_logical_unit *lu)
701 if (!tgt->dont_block && !lu->blocked && 695 if (!tgt->dont_block && !lu->blocked &&
702 lu->generation != card->generation) { 696 lu->generation != card->generation) {
703 lu->blocked = true; 697 lu->blocked = true;
704 if (++tgt->blocked == 1) { 698 if (++tgt->blocked == 1)
705 scsi_block_requests(shost); 699 scsi_block_requests(shost);
706 fw_notify("blocked %s\n", lu->tgt->bus_id);
707 }
708 } 700 }
709 spin_unlock_irqrestore(&card->lock, flags); 701 spin_unlock_irqrestore(&card->lock, flags);
710} 702}
@@ -731,10 +723,8 @@ static void sbp2_conditionally_unblock(struct sbp2_logical_unit *lu)
731 } 723 }
732 spin_unlock_irqrestore(&card->lock, flags); 724 spin_unlock_irqrestore(&card->lock, flags);
733 725
734 if (unblock) { 726 if (unblock)
735 scsi_unblock_requests(shost); 727 scsi_unblock_requests(shost);
736 fw_notify("unblocked %s\n", lu->tgt->bus_id);
737 }
738} 728}
739 729
740/* 730/*
@@ -796,7 +786,7 @@ static void sbp2_release_target(struct kref *kref)
796 scsi_remove_host(shost); 786 scsi_remove_host(shost);
797 fw_notify("released %s\n", tgt->bus_id); 787 fw_notify("released %s\n", tgt->bus_id);
798 788
799 put_device(&tgt->unit->device); 789 fw_unit_put(tgt->unit);
800 scsi_host_put(shost); 790 scsi_host_put(shost);
801 fw_device_put(device); 791 fw_device_put(device);
802} 792}
@@ -825,6 +815,22 @@ complete_set_busy_timeout(struct fw_card *card, int rcode,
825 complete(done); 815 complete(done);
826} 816}
827 817
818/*
819 * Write retransmit retry values into the BUSY_TIMEOUT register.
820 * - The single-phase retry protocol is supported by all SBP-2 devices, but the
821 * default retry_limit value is 0 (i.e. never retry transmission). We write a
822 * saner value after logging into the device.
823 * - The dual-phase retry protocol is optional to implement, and if not
824 * supported, writes to the dual-phase portion of the register will be
825 * ignored. We try to write the original 1394-1995 default here.
826 * - In the case of devices that are also SBP-3-compliant, all writes are
827 * ignored, as the register is read-only, but contains single-phase retry of
828 * 15, which is what we're trying to set for all SBP-2 device anyway, so this
829 * write attempt is safe and yields more consistent behavior for all devices.
830 *
831 * See section 8.3.2.3.5 of the 1394-1995 spec, section 6.2 of the SBP-2 spec,
832 * and section 6.4 of the SBP-3 spec for further details.
833 */
828static void sbp2_set_busy_timeout(struct sbp2_logical_unit *lu) 834static void sbp2_set_busy_timeout(struct sbp2_logical_unit *lu)
829{ 835{
830 struct fw_device *device = fw_device(lu->tgt->unit->device.parent); 836 struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
@@ -832,8 +838,7 @@ static void sbp2_set_busy_timeout(struct sbp2_logical_unit *lu)
832 struct fw_transaction t; 838 struct fw_transaction t;
833 static __be32 busy_timeout; 839 static __be32 busy_timeout;
834 840
835 /* FIXME: we should try to set dual-phase cycle_limit too */ 841 busy_timeout = cpu_to_be32(SBP2_CYCLE_LIMIT | SBP2_RETRY_LIMIT);
836 busy_timeout = cpu_to_be32(SBP2_RETRY_LIMIT);
837 842
838 fw_send_request(device->card, &t, TCODE_WRITE_QUADLET_REQUEST, 843 fw_send_request(device->card, &t, TCODE_WRITE_QUADLET_REQUEST,
839 lu->tgt->node_id, lu->generation, device->max_speed, 844 lu->tgt->node_id, lu->generation, device->max_speed,
@@ -885,11 +890,10 @@ static void sbp2_login(struct work_struct *work)
885 tgt->address_high = local_node_id << 16; 890 tgt->address_high = local_node_id << 16;
886 sbp2_set_generation(lu, generation); 891 sbp2_set_generation(lu, generation);
887 892
888 /* Get command block agent offset and login id. */
889 lu->command_block_agent_address = 893 lu->command_block_agent_address =
890 ((u64) (response.command_block_agent.high & 0xffff) << 32) | 894 ((u64)(be32_to_cpu(response.command_block_agent.high) & 0xffff)
891 response.command_block_agent.low; 895 << 32) | be32_to_cpu(response.command_block_agent.low);
892 lu->login_id = LOGIN_RESPONSE_GET_LOGIN_ID(response); 896 lu->login_id = be32_to_cpu(response.misc) & 0xffff;
893 897
894 fw_notify("%s: logged in to LUN %04x (%d retries)\n", 898 fw_notify("%s: logged in to LUN %04x (%d retries)\n",
895 tgt->bus_id, lu->lun, lu->retries); 899 tgt->bus_id, lu->lun, lu->retries);
@@ -1111,6 +1115,7 @@ static int sbp2_probe(struct device *dev)
1111 kref_init(&tgt->kref); 1115 kref_init(&tgt->kref);
1112 INIT_LIST_HEAD(&tgt->lu_list); 1116 INIT_LIST_HEAD(&tgt->lu_list);
1113 tgt->bus_id = unit->device.bus_id; 1117 tgt->bus_id = unit->device.bus_id;
1118 tgt->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4];
1114 1119
1115 if (fw_device_enable_phys_dma(device) < 0) 1120 if (fw_device_enable_phys_dma(device) < 0)
1116 goto fail_shost_put; 1121 goto fail_shost_put;
@@ -1119,6 +1124,7 @@ static int sbp2_probe(struct device *dev)
1119 goto fail_shost_put; 1124 goto fail_shost_put;
1120 1125
1121 fw_device_get(device); 1126 fw_device_get(device);
1127 fw_unit_get(unit);
1122 1128
1123 /* Initialize to values that won't match anything in our table. */ 1129 /* Initialize to values that won't match anything in our table. */
1124 firmware_revision = 0xff000000; 1130 firmware_revision = 0xff000000;
@@ -1134,8 +1140,6 @@ static int sbp2_probe(struct device *dev)
1134 1140
1135 sbp2_init_workarounds(tgt, model, firmware_revision); 1141 sbp2_init_workarounds(tgt, model, firmware_revision);
1136 1142
1137 get_device(&unit->device);
1138
1139 /* Do the login in a workqueue so we can easily reschedule retries. */ 1143 /* Do the login in a workqueue so we can easily reschedule retries. */
1140 list_for_each_entry(lu, &tgt->lu_list, link) 1144 list_for_each_entry(lu, &tgt->lu_list, link)
1141 sbp2_queue_work(lu, 0); 1145 sbp2_queue_work(lu, 0);
@@ -1367,9 +1371,12 @@ sbp2_map_scatterlist(struct sbp2_command_orb *orb, struct fw_device *device,
1367 * tables. 1371 * tables.
1368 */ 1372 */
1369 if (count == 1 && sg_dma_len(sg) < SBP2_MAX_SG_ELEMENT_LENGTH) { 1373 if (count == 1 && sg_dma_len(sg) < SBP2_MAX_SG_ELEMENT_LENGTH) {
1370 orb->request.data_descriptor.high = lu->tgt->address_high; 1374 orb->request.data_descriptor.high =
1371 orb->request.data_descriptor.low = sg_dma_address(sg); 1375 cpu_to_be32(lu->tgt->address_high);
1372 orb->request.misc |= COMMAND_ORB_DATA_SIZE(sg_dma_len(sg)); 1376 orb->request.data_descriptor.low =
1377 cpu_to_be32(sg_dma_address(sg));
1378 orb->request.misc |=
1379 cpu_to_be32(COMMAND_ORB_DATA_SIZE(sg_dma_len(sg)));
1373 return 0; 1380 return 0;
1374 } 1381 }
1375 1382
@@ -1390,16 +1397,14 @@ sbp2_map_scatterlist(struct sbp2_command_orb *orb, struct fw_device *device,
1390 goto fail_page_table; 1397 goto fail_page_table;
1391 } 1398 }
1392 l = min(sg_len, SBP2_MAX_SG_ELEMENT_LENGTH); 1399 l = min(sg_len, SBP2_MAX_SG_ELEMENT_LENGTH);
1393 orb->page_table[j].low = sg_addr; 1400 orb->page_table[j].low = cpu_to_be32(sg_addr);
1394 orb->page_table[j].high = (l << 16); 1401 orb->page_table[j].high = cpu_to_be32(l << 16);
1395 sg_addr += l; 1402 sg_addr += l;
1396 sg_len -= l; 1403 sg_len -= l;
1397 j++; 1404 j++;
1398 } 1405 }
1399 } 1406 }
1400 1407
1401 fw_memcpy_to_be32(orb->page_table, orb->page_table,
1402 sizeof(orb->page_table[0]) * j);
1403 orb->page_table_bus = 1408 orb->page_table_bus =
1404 dma_map_single(device->card->device, orb->page_table, 1409 dma_map_single(device->card->device, orb->page_table,
1405 sizeof(orb->page_table), DMA_TO_DEVICE); 1410 sizeof(orb->page_table), DMA_TO_DEVICE);
@@ -1413,11 +1418,10 @@ sbp2_map_scatterlist(struct sbp2_command_orb *orb, struct fw_device *device,
1413 * initiator (i.e. us), but data_descriptor can refer to data 1418 * initiator (i.e. us), but data_descriptor can refer to data
1414 * on other nodes so we need to put our ID in descriptor.high. 1419 * on other nodes so we need to put our ID in descriptor.high.
1415 */ 1420 */
1416 orb->request.data_descriptor.high = lu->tgt->address_high; 1421 orb->request.data_descriptor.high = cpu_to_be32(lu->tgt->address_high);
1417 orb->request.data_descriptor.low = orb->page_table_bus; 1422 orb->request.data_descriptor.low = cpu_to_be32(orb->page_table_bus);
1418 orb->request.misc |= 1423 orb->request.misc |= cpu_to_be32(COMMAND_ORB_PAGE_TABLE_PRESENT |
1419 COMMAND_ORB_PAGE_TABLE_PRESENT | 1424 COMMAND_ORB_DATA_SIZE(j));
1420 COMMAND_ORB_DATA_SIZE(j);
1421 1425
1422 return 0; 1426 return 0;
1423 1427
@@ -1463,8 +1467,7 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
1463 orb->done = done; 1467 orb->done = done;
1464 orb->cmd = cmd; 1468 orb->cmd = cmd;
1465 1469
1466 orb->request.next.high = SBP2_ORB_NULL; 1470 orb->request.next.high = cpu_to_be32(SBP2_ORB_NULL);
1467 orb->request.next.low = 0x0;
1468 /* 1471 /*
1469 * At speed 100 we can do 512 bytes per packet, at speed 200, 1472 * At speed 100 we can do 512 bytes per packet, at speed 200,
1470 * 1024 bytes per packet etc. The SBP-2 max_payload field 1473 * 1024 bytes per packet etc. The SBP-2 max_payload field
@@ -1473,25 +1476,17 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
1473 */ 1476 */
1474 max_payload = min(device->max_speed + 7, 1477 max_payload = min(device->max_speed + 7,
1475 device->card->max_receive - 1); 1478 device->card->max_receive - 1);
1476 orb->request.misc = 1479 orb->request.misc = cpu_to_be32(
1477 COMMAND_ORB_MAX_PAYLOAD(max_payload) | 1480 COMMAND_ORB_MAX_PAYLOAD(max_payload) |
1478 COMMAND_ORB_SPEED(device->max_speed) | 1481 COMMAND_ORB_SPEED(device->max_speed) |
1479 COMMAND_ORB_NOTIFY; 1482 COMMAND_ORB_NOTIFY);
1480 1483
1481 if (cmd->sc_data_direction == DMA_FROM_DEVICE) 1484 if (cmd->sc_data_direction == DMA_FROM_DEVICE)
1482 orb->request.misc |= 1485 orb->request.misc |= cpu_to_be32(COMMAND_ORB_DIRECTION);
1483 COMMAND_ORB_DIRECTION(SBP2_DIRECTION_FROM_MEDIA);
1484 else if (cmd->sc_data_direction == DMA_TO_DEVICE)
1485 orb->request.misc |=
1486 COMMAND_ORB_DIRECTION(SBP2_DIRECTION_TO_MEDIA);
1487 1486
1488 if (scsi_sg_count(cmd) && sbp2_map_scatterlist(orb, device, lu) < 0) 1487 if (scsi_sg_count(cmd) && sbp2_map_scatterlist(orb, device, lu) < 0)
1489 goto out; 1488 goto out;
1490 1489
1491 fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
1492
1493 memset(orb->request.command_block,
1494 0, sizeof(orb->request.command_block));
1495 memcpy(orb->request.command_block, cmd->cmnd, COMMAND_SIZE(*cmd->cmnd)); 1490 memcpy(orb->request.command_block, cmd->cmnd, COMMAND_SIZE(*cmd->cmnd));
1496 1491
1497 orb->base.callback = complete_command_orb; 1492 orb->base.callback = complete_command_orb;
@@ -1519,11 +1514,8 @@ static int sbp2_scsi_slave_alloc(struct scsi_device *sdev)
1519 1514
1520 sdev->allow_restart = 1; 1515 sdev->allow_restart = 1;
1521 1516
1522 /* 1517 /* SBP-2 requires quadlet alignment of the data buffers. */
1523 * Update the dma alignment (minimum alignment requirements for 1518 blk_queue_update_dma_alignment(sdev->request_queue, 4 - 1);
1524 * start and end of DMA transfers) to be a sector
1525 */
1526 blk_queue_update_dma_alignment(sdev->request_queue, 511);
1527 1519
1528 if (lu->tgt->workarounds & SBP2_WORKAROUND_INQUIRY_36) 1520 if (lu->tgt->workarounds & SBP2_WORKAROUND_INQUIRY_36)
1529 sdev->inquiry_len = 36; 1521 sdev->inquiry_len = 36;
@@ -1581,16 +1573,14 @@ sbp2_sysfs_ieee1394_id_show(struct device *dev, struct device_attribute *attr,
1581{ 1573{
1582 struct scsi_device *sdev = to_scsi_device(dev); 1574 struct scsi_device *sdev = to_scsi_device(dev);
1583 struct sbp2_logical_unit *lu; 1575 struct sbp2_logical_unit *lu;
1584 struct fw_device *device;
1585 1576
1586 if (!sdev) 1577 if (!sdev)
1587 return 0; 1578 return 0;
1588 1579
1589 lu = sdev->hostdata; 1580 lu = sdev->hostdata;
1590 device = fw_device(lu->tgt->unit->device.parent);
1591 1581
1592 return sprintf(buf, "%08x%08x:%06x:%04x\n", 1582 return sprintf(buf, "%016llx:%06x:%04x\n",
1593 device->config_rom[3], device->config_rom[4], 1583 (unsigned long long)lu->tgt->guid,
1594 lu->tgt->directory_id, lu->lun); 1584 lu->tgt->directory_id, lu->lun);
1595} 1585}
1596 1586
diff --git a/drivers/firewire/fw-topology.c b/drivers/firewire/fw-topology.c
index d2c7a3d7e1cb..213b0ff8f3d6 100644
--- a/drivers/firewire/fw-topology.c
+++ b/drivers/firewire/fw-topology.c
@@ -108,6 +108,7 @@ static struct fw_node *fw_node_create(u32 sid, int port_count, int color)
108 node->node_id = LOCAL_BUS | SELF_ID_PHY_ID(sid); 108 node->node_id = LOCAL_BUS | SELF_ID_PHY_ID(sid);
109 node->link_on = SELF_ID_LINK_ON(sid); 109 node->link_on = SELF_ID_LINK_ON(sid);
110 node->phy_speed = SELF_ID_PHY_SPEED(sid); 110 node->phy_speed = SELF_ID_PHY_SPEED(sid);
111 node->initiated_reset = SELF_ID_PHY_INITIATOR(sid);
111 node->port_count = port_count; 112 node->port_count = port_count;
112 113
113 atomic_set(&node->ref_count, 1); 114 atomic_set(&node->ref_count, 1);
@@ -289,12 +290,11 @@ static struct fw_node *build_tree(struct fw_card *card,
289 beta_repeaters_present = true; 290 beta_repeaters_present = true;
290 291
291 /* 292 /*
292 * If all PHYs does not report the same gap count 293 * If PHYs report different gap counts, set an invalid count
293 * setting, we fall back to 63 which will force a gap 294 * which will force a gap count reconfiguration and a reset.
294 * count reconfiguration and a reset.
295 */ 295 */
296 if (SELF_ID_GAP_COUNT(q) != gap_count) 296 if (SELF_ID_GAP_COUNT(q) != gap_count)
297 gap_count = 63; 297 gap_count = 0;
298 298
299 update_hop_count(node); 299 update_hop_count(node);
300 300
@@ -431,6 +431,8 @@ update_tree(struct fw_card *card, struct fw_node *root)
431 event = FW_NODE_LINK_OFF; 431 event = FW_NODE_LINK_OFF;
432 else if (!node0->link_on && node1->link_on) 432 else if (!node0->link_on && node1->link_on)
433 event = FW_NODE_LINK_ON; 433 event = FW_NODE_LINK_ON;
434 else if (node1->initiated_reset && node1->link_on)
435 event = FW_NODE_INITIATED_RESET;
434 else 436 else
435 event = FW_NODE_UPDATED; 437 event = FW_NODE_UPDATED;
436 438
diff --git a/drivers/firewire/fw-topology.h b/drivers/firewire/fw-topology.h
index cedc1ec906e9..addb9f8ea776 100644
--- a/drivers/firewire/fw-topology.h
+++ b/drivers/firewire/fw-topology.h
@@ -20,11 +20,12 @@
20#define __fw_topology_h 20#define __fw_topology_h
21 21
22enum { 22enum {
23 FW_NODE_CREATED = 0x00, 23 FW_NODE_CREATED,
24 FW_NODE_UPDATED = 0x01, 24 FW_NODE_UPDATED,
25 FW_NODE_DESTROYED = 0x02, 25 FW_NODE_DESTROYED,
26 FW_NODE_LINK_ON = 0x03, 26 FW_NODE_LINK_ON,
27 FW_NODE_LINK_OFF = 0x04, 27 FW_NODE_LINK_OFF,
28 FW_NODE_INITIATED_RESET,
28}; 29};
29 30
30struct fw_node { 31struct fw_node {
diff --git a/drivers/firewire/fw-transaction.c b/drivers/firewire/fw-transaction.c
index e6f1bda38940..3a59e9b783b0 100644
--- a/drivers/firewire/fw-transaction.c
+++ b/drivers/firewire/fw-transaction.c
@@ -18,6 +18,7 @@
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */ 19 */
20 20
21#include <linux/completion.h>
21#include <linux/kernel.h> 22#include <linux/kernel.h>
22#include <linux/module.h> 23#include <linux/module.h>
23#include <linux/init.h> 24#include <linux/init.h>
@@ -294,42 +295,40 @@ fw_send_request(struct fw_card *card, struct fw_transaction *t,
294} 295}
295EXPORT_SYMBOL(fw_send_request); 296EXPORT_SYMBOL(fw_send_request);
296 297
298struct fw_phy_packet {
299 struct fw_packet packet;
300 struct completion done;
301};
302
297static void 303static void
298transmit_phy_packet_callback(struct fw_packet *packet, 304transmit_phy_packet_callback(struct fw_packet *packet,
299 struct fw_card *card, int status) 305 struct fw_card *card, int status)
300{ 306{
301 kfree(packet); 307 struct fw_phy_packet *p =
302} 308 container_of(packet, struct fw_phy_packet, packet);
303
304static void send_phy_packet(struct fw_card *card, u32 data, int generation)
305{
306 struct fw_packet *packet;
307
308 packet = kzalloc(sizeof(*packet), GFP_ATOMIC);
309 if (packet == NULL)
310 return;
311
312 packet->header[0] = data;
313 packet->header[1] = ~data;
314 packet->header_length = 8;
315 packet->payload_length = 0;
316 packet->speed = SCODE_100;
317 packet->generation = generation;
318 packet->callback = transmit_phy_packet_callback;
319 309
320 card->driver->send_request(card, packet); 310 complete(&p->done);
321} 311}
322 312
323void fw_send_phy_config(struct fw_card *card, 313void fw_send_phy_config(struct fw_card *card,
324 int node_id, int generation, int gap_count) 314 int node_id, int generation, int gap_count)
325{ 315{
326 u32 q; 316 struct fw_phy_packet p;
327 317 u32 data = PHY_IDENTIFIER(PHY_PACKET_CONFIG) |
328 q = PHY_IDENTIFIER(PHY_PACKET_CONFIG) | 318 PHY_CONFIG_ROOT_ID(node_id) |
329 PHY_CONFIG_ROOT_ID(node_id) | 319 PHY_CONFIG_GAP_COUNT(gap_count);
330 PHY_CONFIG_GAP_COUNT(gap_count); 320
331 321 p.packet.header[0] = data;
332 send_phy_packet(card, q, generation); 322 p.packet.header[1] = ~data;
323 p.packet.header_length = 8;
324 p.packet.payload_length = 0;
325 p.packet.speed = SCODE_100;
326 p.packet.generation = generation;
327 p.packet.callback = transmit_phy_packet_callback;
328 init_completion(&p.done);
329
330 card->driver->send_request(card, &p.packet);
331 wait_for_completion(&p.done);
333} 332}
334 333
335void fw_flush_transactions(struct fw_card *card) 334void fw_flush_transactions(struct fw_card *card)
@@ -389,21 +388,21 @@ lookup_enclosing_address_handler(struct list_head *list,
389static DEFINE_SPINLOCK(address_handler_lock); 388static DEFINE_SPINLOCK(address_handler_lock);
390static LIST_HEAD(address_handler_list); 389static LIST_HEAD(address_handler_list);
391 390
392const struct fw_address_region fw_low_memory_region =
393 { .start = 0x000000000000ULL, .end = 0x000100000000ULL, };
394const struct fw_address_region fw_high_memory_region = 391const struct fw_address_region fw_high_memory_region =
395 { .start = 0x000100000000ULL, .end = 0xffffe0000000ULL, }; 392 { .start = 0x000100000000ULL, .end = 0xffffe0000000ULL, };
393EXPORT_SYMBOL(fw_high_memory_region);
394
395#if 0
396const struct fw_address_region fw_low_memory_region =
397 { .start = 0x000000000000ULL, .end = 0x000100000000ULL, };
396const struct fw_address_region fw_private_region = 398const struct fw_address_region fw_private_region =
397 { .start = 0xffffe0000000ULL, .end = 0xfffff0000000ULL, }; 399 { .start = 0xffffe0000000ULL, .end = 0xfffff0000000ULL, };
398const struct fw_address_region fw_csr_region = 400const struct fw_address_region fw_csr_region =
399 { .start = 0xfffff0000000ULL, .end = 0xfffff0000800ULL, }; 401 { .start = CSR_REGISTER_BASE,
402 .end = CSR_REGISTER_BASE | CSR_CONFIG_ROM_END, };
400const struct fw_address_region fw_unit_space_region = 403const struct fw_address_region fw_unit_space_region =
401 { .start = 0xfffff0000900ULL, .end = 0x1000000000000ULL, }; 404 { .start = 0xfffff0000900ULL, .end = 0x1000000000000ULL, };
402EXPORT_SYMBOL(fw_low_memory_region); 405#endif /* 0 */
403EXPORT_SYMBOL(fw_high_memory_region);
404EXPORT_SYMBOL(fw_private_region);
405EXPORT_SYMBOL(fw_csr_region);
406EXPORT_SYMBOL(fw_unit_space_region);
407 406
408/** 407/**
409 * Allocate a range of addresses in the node space of the OHCI 408 * Allocate a range of addresses in the node space of the OHCI
@@ -747,7 +746,8 @@ fw_core_handle_response(struct fw_card *card, struct fw_packet *p)
747EXPORT_SYMBOL(fw_core_handle_response); 746EXPORT_SYMBOL(fw_core_handle_response);
748 747
749static const struct fw_address_region topology_map_region = 748static const struct fw_address_region topology_map_region =
750 { .start = 0xfffff0001000ull, .end = 0xfffff0001400ull, }; 749 { .start = CSR_REGISTER_BASE | CSR_TOPOLOGY_MAP,
750 .end = CSR_REGISTER_BASE | CSR_TOPOLOGY_MAP_END, };
751 751
752static void 752static void
753handle_topology_map(struct fw_card *card, struct fw_request *request, 753handle_topology_map(struct fw_card *card, struct fw_request *request,
@@ -785,7 +785,8 @@ static struct fw_address_handler topology_map = {
785}; 785};
786 786
787static const struct fw_address_region registers_region = 787static const struct fw_address_region registers_region =
788 { .start = 0xfffff0000000ull, .end = 0xfffff0000400ull, }; 788 { .start = CSR_REGISTER_BASE,
789 .end = CSR_REGISTER_BASE | CSR_CONFIG_ROM, };
789 790
790static void 791static void
791handle_registers(struct fw_card *card, struct fw_request *request, 792handle_registers(struct fw_card *card, struct fw_request *request,
@@ -794,7 +795,7 @@ handle_registers(struct fw_card *card, struct fw_request *request,
794 unsigned long long offset, 795 unsigned long long offset,
795 void *payload, size_t length, void *callback_data) 796 void *payload, size_t length, void *callback_data)
796{ 797{
797 int reg = offset - CSR_REGISTER_BASE; 798 int reg = offset & ~CSR_REGISTER_BASE;
798 unsigned long long bus_time; 799 unsigned long long bus_time;
799 __be32 *data = payload; 800 __be32 *data = payload;
800 801
diff --git a/drivers/firewire/fw-transaction.h b/drivers/firewire/fw-transaction.h
index a43bb22912f9..04d3854f6560 100644
--- a/drivers/firewire/fw-transaction.h
+++ b/drivers/firewire/fw-transaction.h
@@ -201,11 +201,7 @@ struct fw_address_region {
201 u64 end; 201 u64 end;
202}; 202};
203 203
204extern const struct fw_address_region fw_low_memory_region;
205extern const struct fw_address_region fw_high_memory_region; 204extern const struct fw_address_region fw_high_memory_region;
206extern const struct fw_address_region fw_private_region;
207extern const struct fw_address_region fw_csr_region;
208extern const struct fw_address_region fw_unit_space_region;
209 205
210int fw_core_add_address_handler(struct fw_address_handler *handler, 206int fw_core_add_address_handler(struct fw_address_handler *handler,
211 const struct fw_address_region *region); 207 const struct fw_address_region *region);
@@ -221,12 +217,9 @@ struct fw_card {
221 const struct fw_card_driver *driver; 217 const struct fw_card_driver *driver;
222 struct device *device; 218 struct device *device;
223 atomic_t device_count; 219 atomic_t device_count;
224 struct kref kref;
225 220
226 int node_id; 221 int node_id;
227 int generation; 222 int generation;
228 /* This is the generation used for timestamping incoming requests. */
229 int request_generation;
230 int current_tlabel, tlabel_mask; 223 int current_tlabel, tlabel_mask;
231 struct list_head transaction_list; 224 struct list_head transaction_list;
232 struct timer_list flush_timer; 225 struct timer_list flush_timer;
@@ -263,9 +256,6 @@ struct fw_card {
263 int bm_generation; 256 int bm_generation;
264}; 257};
265 258
266struct fw_card *fw_card_get(struct fw_card *card);
267void fw_card_put(struct fw_card *card);
268
269/* 259/*
270 * The iso packet format allows for an immediate header/payload part 260 * The iso packet format allows for an immediate header/payload part
271 * stored in 'header' immediately after the packet info plus an 261 * stored in 'header' immediately after the packet info plus an