Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=907293d78872ee492ce6a114258dd853ec5082ae
Commit:     907293d78872ee492ce6a114258dd853ec5082ae
Parent:     366f5f4fa31cd3f3d5901f5edfe255a48906505d
Author:     Stefan Richter <[EMAIL PROTECTED]>
AuthorDate: Tue Jan 23 21:11:43 2007 +0100
Committer:  Stefan Richter <[EMAIL PROTECTED]>
CommitDate: Fri Mar 9 22:02:43 2007 +0100

    firewire: consistent usage of node_id
    
    Definitions as per IEEE 1212 and IEEE 1394:
    
         Node ID: Concatenation of bus ID and local ID. 16 bits long.
          Bus ID: Identifies a particular bus within a group of buses
                  interconnected by bus bridges.
        Local ID: Identifies a particular node on a bus.
          PHY ID: Local ID of IEEE 1394 nodes. 6 bits long.
    
    Never ever use a variable called node_id for anything else than a node ID.
    
    Signed-off-by: Stefan Richter <[EMAIL PROTECTED]>
---
 drivers/firewire/fw-device-cdev.c |    2 +-
 drivers/firewire/fw-device.c      |    4 ++--
 drivers/firewire/fw-ohci.c        |   21 ++++++++++++---------
 drivers/firewire/fw-sbp2.c        |    8 ++++----
 drivers/firewire/fw-topology.c    |    2 +-
 drivers/firewire/fw-transaction.c |    6 +++---
 6 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/drivers/firewire/fw-device-cdev.c 
b/drivers/firewire/fw-device-cdev.c
index 5ffc58c..1b9e5f7 100644
--- a/drivers/firewire/fw-device-cdev.c
+++ b/drivers/firewire/fw-device-cdev.c
@@ -238,7 +238,7 @@ static ssize_t ioctl_send_request(struct client *client, 
void __user *arg)
 
        fw_send_request(device->card, &response->transaction,
                        request.tcode,
-                       device->node->node_id | LOCAL_BUS,
+                       device->node->node_id,
                        device->card->generation,
                        device->node->max_speed,
                        request.offset,
diff --git a/drivers/firewire/fw-device.c b/drivers/firewire/fw-device.c
index f1b0e75..4fb5587 100644
--- a/drivers/firewire/fw-device.c
+++ b/drivers/firewire/fw-device.c
@@ -257,7 +257,7 @@ static int read_rom(struct fw_device *device, int index, 
u32 * data)
 
        offset = 0xfffff0000400ULL + index * 4;
        fw_send_request(device->card, &t, TCODE_READ_QUADLET_REQUEST,
-                       device->node_id | LOCAL_BUS,
+                       device->node_id,
                        device->generation, SCODE_100,
                        offset, NULL, 4, complete_transaction, &callback_data);
 
@@ -447,7 +447,7 @@ static void fw_device_init(struct work_struct *work)
                        device->config_rom_retries++;
                        schedule_delayed_work(&device->work, RETRY_DELAY);
                } else {
-                       fw_notify("giving up on config rom for node id %d\n",
+                       fw_notify("giving up on config rom for node id %x\n",
                                  device->node_id);
                        fw_device_release(&device->device);
                }
diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c
index ba10203..d6f0644 100644
--- a/drivers/firewire/fw-ohci.c
+++ b/drivers/firewire/fw-ohci.c
@@ -828,10 +828,10 @@ ohci_enable_phys_dma(struct fw_card *card, int node_id, 
int generation)
 {
        struct fw_ohci *ohci = fw_ohci(card);
        unsigned long flags;
-       int retval = 0;
+       int n, retval = 0;
 
-       /* FIXME: make sure this bitmask is cleared when we clear the
-        * busReset interrupt bit. */
+       /* FIXME:  Make sure this bitmask is cleared when we clear the busReset
+        * interrupt bit.  Clear physReqResourceAllBuses on bus reset. */
 
        spin_lock_irqsave(&ohci->lock, flags);
 
@@ -840,12 +840,15 @@ ohci_enable_phys_dma(struct fw_card *card, int node_id, 
int generation)
                goto out;
        }
 
-       if (node_id < 32) {
-               reg_write(ohci, OHCI1394_PhyReqFilterLoSet, 1 << node_id);
-       } else {
-               reg_write(ohci, OHCI1394_PhyReqFilterHiSet,
-                         1 << (node_id - 32));
-       }
+       /* NOTE, if the node ID contains a non-local bus ID, physical DMA is
+        * enabled for _all_ nodes on remote buses. */
+
+       n = (node_id & 0xffc0) == LOCAL_BUS ? node_id & 0x3f : 63;
+       if (n < 32)
+               reg_write(ohci, OHCI1394_PhyReqFilterLoSet, 1 << n);
+       else
+               reg_write(ohci, OHCI1394_PhyReqFilterHiSet, 1 << (n - 32));
+
        flush_writes(ohci);
  out:
        spin_unlock_irqrestore(&ohci->lock, flags);
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
index f5c4682..4e42b73 100644
--- a/drivers/firewire/fw-sbp2.c
+++ b/drivers/firewire/fw-sbp2.c
@@ -328,7 +328,7 @@ sbp2_send_orb(struct sbp2_orb *orb, struct fw_unit *unit,
        spin_unlock_irqrestore(&device->card->lock, flags);
 
        fw_send_request(device->card, &orb->t, TCODE_WRITE_BLOCK_REQUEST,
-                       node_id | LOCAL_BUS, generation,
+                       node_id, generation,
                        device->node->max_speed, offset,
                        &orb->pointer, sizeof orb->pointer,
                        complete_transaction, orb);
@@ -485,7 +485,7 @@ static int sbp2_agent_reset(struct fw_unit *unit)
                return -ENOMEM;
 
        fw_send_request(device->card, t, TCODE_WRITE_QUADLET_REQUEST,
-                       sd->node_id | LOCAL_BUS, sd->generation, SCODE_400,
+                       sd->node_id, sd->generation, SCODE_400,
                        sd->command_block_agent_address + SBP2_AGENT_RESET,
                        &zero, sizeof zero, complete_agent_reset_write, t);
 
@@ -586,7 +586,7 @@ static int sbp2_probe(struct device *dev)
 
        sd->generation   = generation;
        sd->node_id      = node_id;
-       sd->address_high = (LOCAL_BUS | local_node_id) << 16;
+       sd->address_high = local_node_id << 16;
 
        /* Get command block agent offset and login id. */
        sd->command_block_agent_address =
@@ -663,7 +663,7 @@ static void sbp2_reconnect(struct work_struct *work)
 
        sd->generation   = generation;
        sd->node_id      = node_id;
-       sd->address_high = (LOCAL_BUS | local_node_id) << 16;
+       sd->address_high = local_node_id << 16;
 }
 
 static void sbp2_update(struct fw_unit *unit)
diff --git a/drivers/firewire/fw-topology.c b/drivers/firewire/fw-topology.c
index 1938f36..684d87d 100644
--- a/drivers/firewire/fw-topology.c
+++ b/drivers/firewire/fw-topology.c
@@ -102,7 +102,7 @@ static struct fw_node *fw_node_create(u32 sid, int 
port_count, int color)
                return NULL;
 
        node->color = color;
-       node->node_id = self_id_phy_id(sid);
+       node->node_id = LOCAL_BUS | self_id_phy_id(sid);
        node->link_on = self_id_link_on(sid);
        node->phy_speed = self_id_phy_speed(sid);
        node->port_count = port_count;
diff --git a/drivers/firewire/fw-transaction.c 
b/drivers/firewire/fw-transaction.c
index 4c1275f..439a3e3 100644
--- a/drivers/firewire/fw-transaction.c
+++ b/drivers/firewire/fw-transaction.c
@@ -56,7 +56,7 @@
 #define header_get_extended_tcode(q)   (((q) >> 0) & 0xffff)
 
 #define phy_config_gap_count(gap_count)        (((gap_count) << 16) | (1 << 
22))
-#define phy_config_root_id(node_id)    (((node_id) << 24) | (1 << 23))
+#define phy_config_root_id(node_id)    ((((node_id) & 0x3f) << 24) | (1 << 23))
 #define phy_identifier(id)             ((id) << 30)
 
 static void
@@ -123,7 +123,7 @@ fw_fill_packet(struct fw_packet *packet, int tcode, int 
tlabel,
                header_retry(RETRY_X) |
                header_tlabel(tlabel) |
                header_tcode(tcode) |
-               header_destination(node_id | LOCAL_BUS);
+               header_destination(node_id);
        packet->header[1] =
                header_offset_high(offset >> 32) | header_source(0);
        packet->header[2] =
@@ -190,7 +190,7 @@ fw_fill_packet(struct fw_packet *packet, int tcode, int 
tlabel,
  * @param tcode the tcode for this transaction.  Do not use
  *   TCODE_LOCK_REQUEST directly, insted use TCODE_LOCK_MASK_SWAP
  *   etc. to specify tcode and ext_tcode.
- * @param node_id the node_id of the destination node
+ * @param node_id the destination node ID (bus ID and PHY ID concatenated)
  * @param generation the generation for which node_id is valid
  * @param speed the speed to use for sending the request
  * @param offset the 48 bit offset on the destination node
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to