xref: /dragonfly/sys/bus/u4b/usb_pf.h (revision c66c7e2f)
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