diff options
author | David Vrabel <david.vrabel@csr.com> | 2008-10-27 17:48:09 +0100 |
---|---|---|
committer | David Vrabel <david.vrabel@csr.com> | 2008-10-28 13:09:17 +0100 |
commit | 1cde7f68ced8d10a20dd2370e9d1d22ab3c1ea5c (patch) | |
tree | 2fb65bbb93eae73e02fa1e9608212536259f8802 /drivers/uwb/beacon.c | |
parent | wusb: do a proper channel stop (diff) | |
download | linux-1cde7f68ced8d10a20dd2370e9d1d22ab3c1ea5c.tar.xz linux-1cde7f68ced8d10a20dd2370e9d1d22ab3c1ea5c.zip |
uwb: order IEs by element ID
ECMA-368 requires that IEs in a beacon must be sorted by element ID. Most
hardware uses the ordering in the Set IE URC command so get the ordering
right on the host.
Also refactor the IE management code:
- use uwb_ie_next() instead of uwb_ie_for_each().
- remove unnecessary functions.
- API is now only uwb_rc_ie_add() and uwb_rc_ie_rm().
Signed-off-by: David Vrabel <david.vrabel@csr.com>
Diffstat (limited to 'drivers/uwb/beacon.c')
-rw-r--r-- | drivers/uwb/beacon.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/uwb/beacon.c b/drivers/uwb/beacon.c index 46b18eec5026..ad823987cede 100644 --- a/drivers/uwb/beacon.c +++ b/drivers/uwb/beacon.c @@ -349,22 +349,22 @@ ssize_t uwb_bce_print_IEs(struct uwb_dev *uwb_dev, struct uwb_beca_e *bce, ssize_t result = 0; struct uwb_rc_evt_beacon *be; struct uwb_beacon_frame *bf; - struct uwb_buf_ctx ctx = { - .buf = buf, - .bytes = 0, - .size = size - }; + int ies_len; + struct uwb_ie_hdr *ies; mutex_lock(&bce->mutex); + be = bce->be; - if (be == NULL) - goto out; - bf = (void *) be->BeaconInfo; - uwb_ie_for_each(uwb_dev, uwb_ie_dump_hex, &ctx, - bf->IEData, be->wBeaconInfoLength - sizeof(*bf)); - result = ctx.bytes; -out: + if (be) { + bf = (struct uwb_beacon_frame *)bce->be->BeaconInfo; + ies_len = be->wBeaconInfoLength - sizeof(struct uwb_beacon_frame); + ies = (struct uwb_ie_hdr *)bf->IEData; + + result = uwb_ie_dump_hex(ies, ies_len, buf, size); + } + mutex_unlock(&bce->mutex); + return result; } |