diff options
author | Jay Fenlason <fenlason@redhat.com> | 2009-02-23 15:59:34 -0500 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2009-03-24 15:56:49 -0400 |
commit | 6104ee92d62ea3638b67494fcf061cb4b9b9d518 (patch) | |
tree | 899549d281a47f6aaae7a1645b5cb7d882f8e194 /drivers/firewire/fw-transaction.h | |
parent | f8c2287c65f8f72000102fc058232669e4540bc4 (diff) |
firewire: broadcast channel support
This patch adds the ISO broadcast channel support that is required of a
1394a IRM. In specific, if the local device the IRM, it allocates ISO
channel 31 and sets the broadcast channel register of all devices on the
local bus to BROADCAST_CHANNEL_INITIAL | BROADCAST_CHANNEL_VALID to indicate
that channel 31 can be use for broadcast messages.
One minor complication is that on startup the local device may become IRM
before all the devices on the bus have been enumerated by the stack. Therefore
we have to keep a "the local device is IRM" flag and possibly set the
broadcast channel register of new devices at enumeration time.
Signed-off-by: Jay Fenlason <fenlason@redhat.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire/fw-transaction.h')
-rw-r--r-- | drivers/firewire/fw-transaction.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/firewire/fw-transaction.h b/drivers/firewire/fw-transaction.h index eed2e295eb3c..f90f09c05833 100644 --- a/drivers/firewire/fw-transaction.h +++ b/drivers/firewire/fw-transaction.h | |||
@@ -230,6 +230,11 @@ struct fw_card { | |||
230 | u8 color; /* must be u8 to match the definition in struct fw_node */ | 230 | u8 color; /* must be u8 to match the definition in struct fw_node */ |
231 | int gap_count; | 231 | int gap_count; |
232 | bool beta_repeaters_present; | 232 | bool beta_repeaters_present; |
233 | /* | ||
234 | * Set if the local device is the IRM and the broadcast channel | ||
235 | * was allocated. | ||
236 | */ | ||
237 | bool is_irm; | ||
233 | 238 | ||
234 | int index; | 239 | int index; |
235 | 240 | ||
@@ -438,4 +443,7 @@ void fw_core_handle_bus_reset(struct fw_card *card, int node_id, | |||
438 | void fw_core_handle_request(struct fw_card *card, struct fw_packet *request); | 443 | void fw_core_handle_request(struct fw_card *card, struct fw_packet *request); |
439 | void fw_core_handle_response(struct fw_card *card, struct fw_packet *packet); | 444 | void fw_core_handle_response(struct fw_card *card, struct fw_packet *packet); |
440 | 445 | ||
446 | extern int fw_irm_set_broadcast_channel_register(struct device *dev, | ||
447 | void *data); | ||
448 | |||
441 | #endif /* __fw_transaction_h */ | 449 | #endif /* __fw_transaction_h */ |