ieee1394: support for speeds greater than S800

The hard-wired configuration of the top speed (until now S800) was
unnecessary, remove it.

If the local link layer controller supports S1600 or S3200, we now
assume this speed for all present 1394b PHYs (except if they are
behind 1394a repeaters) until nodemgr figured out the actual speed
while fetching the config ROM.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>

+9 -11
+1 -3
drivers/ieee1394/ieee1394.h
··· 54 54 #define IEEE1394_SPEED_800 0x03 55 55 #define IEEE1394_SPEED_1600 0x04 56 56 #define IEEE1394_SPEED_3200 0x05 57 - 58 - /* The current highest tested speed supported by the subsystem */ 59 - #define IEEE1394_SPEED_MAX IEEE1394_SPEED_800 57 + #define IEEE1394_SPEED_MAX IEEE1394_SPEED_3200 60 58 61 59 /* Maps speed values above to a string representation */ 62 60 extern const char *hpsb_speedto_str[];
+8 -8
drivers/ieee1394/ieee1394_core.c
··· 338 338 u8 cldcnt[nodecount]; 339 339 u8 *map = host->speed_map; 340 340 u8 *speedcap = host->speed; 341 + u8 local_link_speed = host->csr.lnk_spd; 341 342 struct selfid *sid; 342 343 struct ext_selfid *esid; 343 344 int i, j, n; ··· 374 373 if (sid->port2 == SELFID_PORT_CHILD) cldcnt[n]++; 375 374 376 375 speedcap[n] = sid->speed; 377 - if (speedcap[n] > host->csr.lnk_spd) 378 - speedcap[n] = host->csr.lnk_spd; 376 + if (speedcap[n] > local_link_speed) 377 + speedcap[n] = local_link_speed; 379 378 n--; 380 379 } 381 380 } ··· 408 407 } 409 408 } 410 409 411 - #if SELFID_SPEED_UNKNOWN != IEEE1394_SPEED_MAX 412 - /* assume maximum speed for 1394b PHYs, nodemgr will correct it */ 413 - for (n = 0; n < nodecount; n++) 414 - if (speedcap[n] == SELFID_SPEED_UNKNOWN) 415 - speedcap[n] = IEEE1394_SPEED_MAX; 416 - #endif 410 + /* assume a maximum speed for 1394b PHYs, nodemgr will correct it */ 411 + if (local_link_speed > SELFID_SPEED_UNKNOWN) 412 + for (i = 0; i < nodecount; i++) 413 + if (speedcap[i] == SELFID_SPEED_UNKNOWN) 414 + speedcap[i] = local_link_speed; 417 415 } 418 416 419 417