Linux Kernel
3.7.1
|
#include <uwb.h>
Public Types | |
enum | { UWB_EST_16 = 0, UWB_EST_8 = 1 } |
Data Fields | |
size_t | size |
unsigned | offset |
enum uwb_est_entry:: { ... } | type |
UWB radio controller Event Size Entry (for creating entry tables)
WUSB and WHCI define events and notifications, and they might have fixed or variable size.
Each event/notification has a size which is not necessarily known in advance based on the event code. As well, vendor specific events/notifications will have a size impossible to determine unless we know about the device's specific details.
It was way too smart of the spec writers not to think that it would be impossible for a generic driver to skip over vendor specific events/notifications if there are no LENGTH fields in the HEADER of each message...the transaction size cannot be counted on as the spec does not forbid to pack more than one event in a single transaction.
Thus, we guess sizes with tables (or for events, when you know the size ahead of time you can use uwb_rc_neh_extra_size*()). We register tables with the known events and their sizes, and then we traverse those tables. For those with variable length, we provide a way to lookup the size inside the event/notification's payload. This allows device-specific event size tables to be registered.
: Size of the payload
: if != 0, at offset -1 starts a field with a length that has to be added to . The format of the field is given by .
: Type and length of the offset field. Most common is LE 16 bits (that's why that is zero); others are there mostly to cover for bugs and weirdos.
enum { ... } type |