112bd3c8bSSascha Wildner /*- 212bd3c8bSSascha Wildner * Copyright (c) 1990, 1991, 1993 312bd3c8bSSascha Wildner * The Regents of the University of California. All rights reserved. 412bd3c8bSSascha Wildner * 512bd3c8bSSascha Wildner * This code is derived from the Stanford/CMU enet packet filter, 612bd3c8bSSascha Wildner * (net/enet.c) distributed as part of 4.3BSD, and code contributed 712bd3c8bSSascha Wildner * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 812bd3c8bSSascha Wildner * Berkeley Laboratory. 912bd3c8bSSascha Wildner * 1012bd3c8bSSascha Wildner * Redistribution and use in source and binary forms, with or without 1112bd3c8bSSascha Wildner * modification, are permitted provided that the following conditions 1212bd3c8bSSascha Wildner * are met: 1312bd3c8bSSascha Wildner * 1. Redistributions of source code must retain the above copyright 1412bd3c8bSSascha Wildner * notice, this list of conditions and the following disclaimer. 1512bd3c8bSSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 1612bd3c8bSSascha Wildner * notice, this list of conditions and the following disclaimer in the 1712bd3c8bSSascha Wildner * documentation and/or other materials provided with the distribution. 18*c66c7e2fSzrj * 3. Neither the name of the University nor the names of its contributors 1912bd3c8bSSascha Wildner * may be used to endorse or promote products derived from this software 2012bd3c8bSSascha Wildner * without specific prior written permission. 2112bd3c8bSSascha Wildner * 2212bd3c8bSSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2312bd3c8bSSascha Wildner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2412bd3c8bSSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2512bd3c8bSSascha Wildner * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2612bd3c8bSSascha Wildner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2712bd3c8bSSascha Wildner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2812bd3c8bSSascha Wildner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2912bd3c8bSSascha Wildner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3012bd3c8bSSascha Wildner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3112bd3c8bSSascha Wildner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3212bd3c8bSSascha Wildner * SUCH DAMAGE. 3312bd3c8bSSascha Wildner * 347df2ba56SMarkus Pfeiffer * $FreeBSD: head/sys/dev/usb/usb_pf.h 220301 2011-04-03 20:03:45Z hselasky $ 3512bd3c8bSSascha Wildner */ 3612bd3c8bSSascha Wildner 3712bd3c8bSSascha Wildner #ifndef _DEV_USB_PF_H 3812bd3c8bSSascha Wildner #define _DEV_USB_PF_H 3912bd3c8bSSascha Wildner 4012bd3c8bSSascha Wildner struct usbpf_pkthdr { 4112bd3c8bSSascha Wildner uint32_t up_totlen; /* Total length including all headers */ 4212bd3c8bSSascha Wildner uint32_t up_busunit; /* Host controller unit number */ 4312bd3c8bSSascha Wildner uint8_t up_address; /* USB device index */ 4412bd3c8bSSascha Wildner uint8_t up_mode; /* Mode of transfer */ 4512bd3c8bSSascha Wildner #define USBPF_MODE_HOST 0 4612bd3c8bSSascha Wildner #define USBPF_MODE_DEVICE 1 4712bd3c8bSSascha Wildner uint8_t up_type; /* points SUBMIT / DONE */ 4812bd3c8bSSascha Wildner uint8_t up_xfertype; /* Transfer type, see USB2.0 spec. */ 4912bd3c8bSSascha Wildner uint32_t up_flags; /* Transfer flags */ 5012bd3c8bSSascha Wildner #define USBPF_FLAG_FORCE_SHORT_XFER (1 << 0) 5112bd3c8bSSascha Wildner #define USBPF_FLAG_SHORT_XFER_OK (1 << 1) 5212bd3c8bSSascha Wildner #define USBPF_FLAG_SHORT_FRAMES_OK (1 << 2) 5312bd3c8bSSascha Wildner #define USBPF_FLAG_PIPE_BOF (1 << 3) 5412bd3c8bSSascha Wildner #define USBPF_FLAG_PROXY_BUFFER (1 << 4) 5512bd3c8bSSascha Wildner #define USBPF_FLAG_EXT_BUFFER (1 << 5) 5612bd3c8bSSascha Wildner #define USBPF_FLAG_MANUAL_STATUS (1 << 6) 5712bd3c8bSSascha Wildner #define USBPF_FLAG_NO_PIPE_OK (1 << 7) 5812bd3c8bSSascha Wildner #define USBPF_FLAG_STALL_PIPE (1 << 8) 5912bd3c8bSSascha Wildner uint32_t up_status; /* Transfer status */ 6012bd3c8bSSascha Wildner #define USBPF_STATUS_OPEN (1 << 0) 6112bd3c8bSSascha Wildner #define USBPF_STATUS_TRANSFERRING (1 << 1) 6212bd3c8bSSascha Wildner #define USBPF_STATUS_DID_DMA_DELAY (1 << 2) 6312bd3c8bSSascha Wildner #define USBPF_STATUS_DID_CLOSE (1 << 3) 6412bd3c8bSSascha Wildner #define USBPF_STATUS_DRAINING (1 << 4) 6512bd3c8bSSascha Wildner #define USBPF_STATUS_STARTED (1 << 5) 6612bd3c8bSSascha Wildner #define USBPF_STATUS_BW_RECLAIMED (1 << 6) 6712bd3c8bSSascha Wildner #define USBPF_STATUS_CONTROL_XFR (1 << 7) 6812bd3c8bSSascha Wildner #define USBPF_STATUS_CONTROL_HDR (1 << 8) 6912bd3c8bSSascha Wildner #define USBPF_STATUS_CONTROL_ACT (1 << 9) 7012bd3c8bSSascha Wildner #define USBPF_STATUS_CONTROL_STALL (1 << 10) 7112bd3c8bSSascha Wildner #define USBPF_STATUS_SHORT_FRAMES_OK (1 << 11) 7212bd3c8bSSascha Wildner #define USBPF_STATUS_SHORT_XFER_OK (1 << 12) 7312bd3c8bSSascha Wildner #define USBPF_STATUS_BDMA_ENABLE (1 << 13) 7412bd3c8bSSascha Wildner #define USBPF_STATUS_BDMA_NO_POST_SYNC (1 << 14) 7512bd3c8bSSascha Wildner #define USBPF_STATUS_BDMA_SETUP (1 << 15) 7612bd3c8bSSascha Wildner #define USBPF_STATUS_ISOCHRONOUS_XFR (1 << 16) 7712bd3c8bSSascha Wildner #define USBPF_STATUS_CURR_DMA_SET (1 << 17) 7812bd3c8bSSascha Wildner #define USBPF_STATUS_CAN_CANCEL_IMMED (1 << 18) 7912bd3c8bSSascha Wildner #define USBPF_STATUS_DOING_CALLBACK (1 << 19) 8012bd3c8bSSascha Wildner uint32_t up_error; /* USB error, see USB_ERR_XXX */ 8112bd3c8bSSascha Wildner uint32_t up_interval; /* For interrupt and isoc (ms) */ 8212bd3c8bSSascha Wildner uint32_t up_frames; /* Number of following frames */ 8312bd3c8bSSascha Wildner uint32_t up_packet_size; /* Packet size used */ 8412bd3c8bSSascha Wildner uint32_t up_packet_count; /* Packet count used */ 8512bd3c8bSSascha Wildner uint32_t up_endpoint; /* USB endpoint / stream ID */ 8612bd3c8bSSascha Wildner uint8_t up_speed; /* USB speed, see USB_SPEED_XXX */ 8712bd3c8bSSascha Wildner /* sizeof(struct usbpf_pkthdr) == 128 bytes */ 8812bd3c8bSSascha Wildner uint8_t up_reserved[83]; 8912bd3c8bSSascha Wildner }; 9012bd3c8bSSascha Wildner 9112bd3c8bSSascha Wildner struct usbpf_framehdr { 9212bd3c8bSSascha Wildner /* 9312bd3c8bSSascha Wildner * The frame length field excludes length of frame header and 9412bd3c8bSSascha Wildner * any alignment. 9512bd3c8bSSascha Wildner */ 9612bd3c8bSSascha Wildner uint32_t length; 9712bd3c8bSSascha Wildner #define USBPF_FRAME_ALIGN(x) (((x) + 3) & ~3) 9812bd3c8bSSascha Wildner uint32_t flags; 9912bd3c8bSSascha Wildner #define USBPF_FRAMEFLAG_READ (1 << 0) 10012bd3c8bSSascha Wildner #define USBPF_FRAMEFLAG_DATA_FOLLOWS (1 << 1) 10112bd3c8bSSascha Wildner }; 10212bd3c8bSSascha Wildner 10312bd3c8bSSascha Wildner #define USBPF_HDR_LEN 128 /* bytes */ 10412bd3c8bSSascha Wildner #define USBPF_FRAME_HDR_LEN 8 /* bytes */ 10512bd3c8bSSascha Wildner 10612bd3c8bSSascha Wildner extern uint8_t usbpf_pkthdr_size_ok[ 10712bd3c8bSSascha Wildner (sizeof(struct usbpf_pkthdr) == USBPF_HDR_LEN) ? 1 : -1]; 10812bd3c8bSSascha Wildner extern uint8_t usbpf_framehdr_size_ok[ 10912bd3c8bSSascha Wildner (sizeof(struct usbpf_framehdr) == USBPF_FRAME_HDR_LEN) ? 1 : -1]; 11012bd3c8bSSascha Wildner 11112bd3c8bSSascha Wildner #define USBPF_XFERTAP_SUBMIT 0 11212bd3c8bSSascha Wildner #define USBPF_XFERTAP_DONE 1 11312bd3c8bSSascha Wildner 11412bd3c8bSSascha Wildner #ifdef _KERNEL 11512bd3c8bSSascha Wildner void usbpf_attach(struct usb_bus *); 11612bd3c8bSSascha Wildner void usbpf_detach(struct usb_bus *); 11712bd3c8bSSascha Wildner void usbpf_xfertap(struct usb_xfer *, int); 11812bd3c8bSSascha Wildner #endif 11912bd3c8bSSascha Wildner 12012bd3c8bSSascha Wildner #endif 121