aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/dev_usbmon.txt
diff options
context:
space:
mode:
authorVeronicaRadu <veronicaa.radu@gmail.com>2019-07-26 09:07:19 +0200
committerDmitry Vyukov <dvyukov@google.com>2019-07-26 09:07:19 +0200
commit091bb0070faa61066041adf59b088a7a873a480d (patch)
treefde7ceaf25c6103292d77d0617c953fd0e1f359d /sys/linux/dev_usbmon.txt
parent732bc5a0a4cc7468b8abfdf8ba14f349f6d8acfa (diff)
sys/linux: add usbmon add vfio descriptions
Diffstat (limited to 'sys/linux/dev_usbmon.txt')
-rw-r--r--sys/linux/dev_usbmon.txt90
1 files changed, 90 insertions, 0 deletions
diff --git a/sys/linux/dev_usbmon.txt b/sys/linux/dev_usbmon.txt
new file mode 100644
index 000000000..0ffc90b9e
--- /dev/null
+++ b/sys/linux/dev_usbmon.txt
@@ -0,0 +1,90 @@
+# Copyright 2019 syzkaller project authors. All rights reserved.
+# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+# https://elixir.bootlin.com/linux/latest/source/Documentation/usb/usbmon.txt
+# https://elixir.bootlin.com/linux/latest/source/drivers/usb/mon/mon_bin.c
+
+include <linux/fcntl.h>
+include <linux/ioctl.h>
+
+# The following macros were defined here because they are not visible from a separate header file
+
+define MON_IOC_MAGIC 0x92
+
+define SETUP_LEN 8
+define PAGE_SIZE 4096
+define CHUNK_SIZE PAGE_SIZE
+
+define BUFF_MAX (((1200*1024)+CHUNK_SIZE-1) & ~(CHUNK_SIZE-1))
+define BUFF_MIN (((8*1024)+CHUNK_SIZE-1) & ~(CHUNK_SIZE-1))
+
+define MON_IOCQ_URB_LEN _IO(MON_IOC_MAGIC, 1)
+define MON_IOCG_STATS _IOR(MON_IOC_MAGIC, 3, struct {u32 queued; u32 dropped;})
+define MON_IOCT_RING_SIZE _IO(MON_IOC_MAGIC, 4)
+define MON_IOCQ_RING_SIZE _IO(MON_IOC_MAGIC, 5)
+define MON_IOCX_GET _IOW(MON_IOC_MAGIC, 6, struct {void *hdr; void *data; size_t alloc;})
+define MON_IOCX_MFETCH _IOWR(MON_IOC_MAGIC, 7, struct {u32 *offvec; u32 nfetch; u32 nflush;})
+define MON_IOCH_MFLUSH _IO(MON_IOC_MAGIC, 8)
+define MON_IOCX_GETX _IOW(MON_IOC_MAGIC, 10, struct {void *hdr; void *data; size_t alloc;})
+
+resource fd_usbmon[fd]
+
+openat$usbmon(fd const[AT_FDCWD], file ptr[in, string["/dev/usbmon0"]], flags flags[open_flags], mode const[0]) fd_usbmon
+
+ioctl$MON_IOCQ_URB_LEN(fd fd_usbmon, cmd const[MON_IOCQ_URB_LEN])
+ioctl$MON_IOCQ_RING_SIZE(fd fd_usbmon, cmd const[MON_IOCQ_RING_SIZE])
+ioctl$MON_IOCT_RING_SIZE(fd fd_usbmon, cmd const[MON_IOCT_RING_SIZE], arg int32[BUFF_MIN:BUFF_MAX])
+ioctl$MON_IOCH_MFLUSH(fd fd_usbmon, cmd const[MON_IOCH_MFLUSH], arg int32)
+ioctl$MON_IOCX_GET(fd fd_usbmon, cmd const[MON_IOCX_GET], arg ptr[in, mon_bin_get])
+ioctl$MON_IOCX_GETX(fd fd_usbmon, cmd const[MON_IOCX_GETX], arg ptr[in, mon_bin_get])
+
+ioctl$MON_IOCX_MFETCH(fd fd_usbmon, cmd const[MON_IOCX_MFETCH], arg ptr[inout, mon_bin_mfetch])
+ioctl$MON_IOCG_STATS(fd fd_usbmon, cmd const[MON_IOCG_STATS], arg ptr[out, mon_bin_stats])
+
+iso_rec {
+ error_count int32
+ numdesc int32
+}
+
+mon_bin_union [
+ setup array[int8, SETUP_LEN]
+ iso iso_rec
+]
+
+mon_bin_hdr {
+ id int64
+ type int8
+ xfer_type int8
+ epnum int8
+ devnum int8
+ busnum int16
+ flag_setup int8
+ flag_data int8
+ ts_sec int64
+ ts_usec int32
+ status int32
+ len_urb int32
+ len_cap int32
+ s mon_bin_union
+ interval int32
+ start_frame int32
+ xfer_flags int32
+ ndesc int32
+}
+
+mon_bin_get {
+ hdr ptr[out, mon_bin_hdr]
+ data ptr[out, array[int8]]
+ alloc bytesize[data, intptr]
+}
+
+mon_bin_mfetch {
+ offvec ptr[out, array[int32]]
+ nfetch len[offvec, int32]
+ nflush int32
+}
+
+mon_bin_stats {
+ queued int32
+ dropped int32
+}