summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/usb_pf.h
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2011-04-03 20:03:45 +0000
committerhselasky <hselasky@FreeBSD.org>2011-04-03 20:03:45 +0000
commit13be006e1bb536e29069e6e03768185ab1003c1c (patch)
treed88f5b3979243ce915a1916907dffb3f7911eb11 /sys/dev/usb/usb_pf.h
parente95ea389566188409a5acd3a88207d354b098ec5 (diff)
downloadFreeBSD-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.h44
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
OpenPOWER on IntegriCloud