diff options
author | hselasky <hselasky@FreeBSD.org> | 2011-04-03 20:03:45 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2011-04-03 20:03:45 +0000 |
commit | 13be006e1bb536e29069e6e03768185ab1003c1c (patch) | |
tree | d88f5b3979243ce915a1916907dffb3f7911eb11 /sys/dev/usb/usb_pf.h | |
parent | e95ea389566188409a5acd3a88207d354b098ec5 (diff) | |
download | FreeBSD-src-13be006e1bb536e29069e6e03768185ab1003c1c.zip FreeBSD-src-13be006e1bb536e29069e6e03768185ab1003c1c.tar.gz |
- Improvements to USB PF solution
- Add more fields for USB device and host mode
- Add more information to USB PF header so that decoding
can easily be done by software analyzer tools like
Wireshark.
- Optimise usbdump to display USB streams in text format
more efficiently.
- Software using USB PF must be recompiled after
this commit, due to structure changes.
MFC after: 7 days
Approved by: thompsa (mentor)
Diffstat (limited to 'sys/dev/usb/usb_pf.h')
-rw-r--r-- | sys/dev/usb/usb_pf.h | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/sys/dev/usb/usb_pf.h b/sys/dev/usb/usb_pf.h index b476c12..9d51e98 100644 --- a/sys/dev/usb/usb_pf.h +++ b/sys/dev/usb/usb_pf.h @@ -38,11 +38,14 @@ #define _DEV_USB_PF_H struct usbpf_pkthdr { + uint32_t up_totlen; /* Total length including all headers */ uint32_t up_busunit; /* Host controller unit number */ - uint8_t up_address; /* USB device address */ - uint8_t up_endpoint; /* USB endpoint */ + uint8_t up_address; /* USB device index */ + uint8_t up_mode; /* Mode of transfer */ +#define USBPF_MODE_HOST 0 +#define USBPF_MODE_DEVICE 1 uint8_t up_type; /* points SUBMIT / DONE */ - uint8_t up_xfertype; /* Transfer type */ + uint8_t up_xfertype; /* Transfer type, see USB2.0 spec. */ uint32_t up_flags; /* Transfer flags */ #define USBPF_FLAG_FORCE_SHORT_XFER (1 << 0) #define USBPF_FLAG_SHORT_XFER_OK (1 << 1) @@ -67,24 +70,43 @@ struct usbpf_pkthdr { #define USBPF_STATUS_CONTROL_STALL (1 << 10) #define USBPF_STATUS_SHORT_FRAMES_OK (1 << 11) #define USBPF_STATUS_SHORT_XFER_OK (1 << 12) -#if USB_HAVE_BUSDMA #define USBPF_STATUS_BDMA_ENABLE (1 << 13) #define USBPF_STATUS_BDMA_NO_POST_SYNC (1 << 14) #define USBPF_STATUS_BDMA_SETUP (1 << 15) -#endif #define USBPF_STATUS_ISOCHRONOUS_XFR (1 << 16) #define USBPF_STATUS_CURR_DMA_SET (1 << 17) #define USBPF_STATUS_CAN_CANCEL_IMMED (1 << 18) #define USBPF_STATUS_DOING_CALLBACK (1 << 19) - uint32_t up_length; /* Total data length (submit/actual) */ - uint32_t up_frames; /* USB frame number (submit/actual) */ - uint32_t up_error; /* usb_error_t */ - uint32_t up_interval; /* for interrupt and isoc */ + uint32_t up_error; /* USB error, see USB_ERR_XXX */ + uint32_t up_interval; /* For interrupt and isoc (ms) */ + uint32_t up_frames; /* Number of following frames */ + uint32_t up_packet_size; /* Packet size used */ + uint32_t up_packet_count; /* Packet count used */ + uint32_t up_endpoint; /* USB endpoint / stream ID */ + uint8_t up_speed; /* USB speed, see USB_SPEED_XXX */ /* sizeof(struct usbpf_pkthdr) == 128 bytes */ - uint8_t up_reserved[96]; + uint8_t up_reserved[83]; +}; + +struct usbpf_framehdr { + /* + * The frame length field excludes length of frame header and + * any alignment. + */ + uint32_t length; +#define USBPF_FRAME_ALIGN(x) (((x) + 3) & ~3) + uint32_t flags; +#define USBPF_FRAMEFLAG_READ (1 << 0) +#define USBPF_FRAMEFLAG_DATA_FOLLOWS (1 << 1) }; -#define USBPF_HDR_LEN 128 +#define USBPF_HDR_LEN 128 /* bytes */ +#define USBPF_FRAME_HDR_LEN 8 /* bytes */ + +extern uint8_t usbpf_pkthdr_size_ok[ + (sizeof(struct usbpf_pkthdr) == USBPF_HDR_LEN) ? 1 : -1]; +extern uint8_t usbpf_framehdr_size_ok[ + (sizeof(struct usbpf_framehdr) == USBPF_FRAME_HDR_LEN) ? 1 : -1]; #define USBPF_XFERTAP_SUBMIT 0 #define USBPF_XFERTAP_DONE 1 |