Skip to content

Commit

Permalink
ieee1394: eth1394: send async streams at S100 on 1394b buses
Browse files Browse the repository at this point in the history
eth1394 did not work on buses consisting of S100B...S400B hardware
because it attempted to send GASP packets at S800.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
  • Loading branch information
Stefan Richter committed Apr 29, 2007
1 parent 809e905 commit 21b2c56
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions drivers/ieee1394/eth1394.c
Original file line number Diff line number Diff line change
Expand Up @@ -475,9 +475,18 @@ static void ether1394_reset_priv(struct net_device *dev, int set_mtu)
priv->bc_maxpayload = 512;

/* Determine speed limit */
for (i = 0; i < host->node_count; i++)
/* FIXME: This is broken for nodes with link speed < PHY speed,
* and it is suboptimal for S200B...S800B hardware.
* The result of nodemgr's speed probe should be used somehow. */
for (i = 0; i < host->node_count; i++) {
/* take care of S100B...S400B PHY ports */
if (host->speed[i] == SELFID_SPEED_UNKNOWN) {
max_speed = IEEE1394_SPEED_100;
break;
}
if (max_speed > host->speed[i])
max_speed = host->speed[i];
}
priv->bc_sspd = max_speed;

if (set_mtu) {
Expand Down Expand Up @@ -1420,11 +1429,10 @@ static void ether1394_prep_gasp_packet(struct hpsb_packet *p,
p->data[1] = cpu_to_be32(ETHER1394_GASP_SPECIFIER_ID_LO << 24 |
ETHER1394_GASP_VERSION);

/* Setting the node id to ALL_NODES (not LOCAL_BUS | ALL_NODES)
* prevents hpsb_send_packet() from setting the speed to an arbitrary
* value based on packet->node_id if packet->node_id is not set. */
p->node_id = ALL_NODES;
p->speed_code = priv->bc_sspd;

/* prevent hpsb_send_packet() from overriding our speed code */
p->node_id = LOCAL_BUS | ALL_NODES;
}

static void ether1394_free_packet(struct hpsb_packet *packet)
Expand Down

0 comments on commit 21b2c56

Please sign in to comment.