xref: /freebsd/sys/dev/usb/usb_process.h (revision 6a9736a8782cecd9124b72f7f889b04a73e5b1b9)
102ac6454SAndrew Thompson /* $FreeBSD$ */
202ac6454SAndrew Thompson /*-
302ac6454SAndrew Thompson  * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
402ac6454SAndrew Thompson  *
502ac6454SAndrew Thompson  * Redistribution and use in source and binary forms, with or without
602ac6454SAndrew Thompson  * modification, are permitted provided that the following conditions
702ac6454SAndrew Thompson  * are met:
802ac6454SAndrew Thompson  * 1. Redistributions of source code must retain the above copyright
902ac6454SAndrew Thompson  *    notice, this list of conditions and the following disclaimer.
1002ac6454SAndrew Thompson  * 2. Redistributions in binary form must reproduce the above copyright
1102ac6454SAndrew Thompson  *    notice, this list of conditions and the following disclaimer in the
1202ac6454SAndrew Thompson  *    documentation and/or other materials provided with the distribution.
1302ac6454SAndrew Thompson  *
1402ac6454SAndrew Thompson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1502ac6454SAndrew Thompson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1602ac6454SAndrew Thompson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1702ac6454SAndrew Thompson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1802ac6454SAndrew Thompson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1902ac6454SAndrew Thompson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2002ac6454SAndrew Thompson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2102ac6454SAndrew Thompson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2202ac6454SAndrew Thompson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2302ac6454SAndrew Thompson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2402ac6454SAndrew Thompson  * SUCH DAMAGE.
2502ac6454SAndrew Thompson  */
2602ac6454SAndrew Thompson 
2775973647SAndrew Thompson #ifndef _USB_PROCESS_H_
2875973647SAndrew Thompson #define	_USB_PROCESS_H_
2902ac6454SAndrew Thompson 
30*6a9736a8SJohn Baldwin #include <sys/interrupt.h>
3102ac6454SAndrew Thompson #include <sys/priority.h>
32*6a9736a8SJohn Baldwin #include <sys/runq.h>
3302ac6454SAndrew Thompson 
3402ac6454SAndrew Thompson /* defines */
35*6a9736a8SJohn Baldwin #define	USB_PRI_HIGH	PI_SWI(SWI_NET)
36*6a9736a8SJohn Baldwin #define	USB_PRI_MED	PI_SWI(SWI_CAMBIO)
3702ac6454SAndrew Thompson 
3802ac6454SAndrew Thompson #define	USB_PROC_WAIT_TIMEOUT 2
3902ac6454SAndrew Thompson #define	USB_PROC_WAIT_DRAIN   1
4002ac6454SAndrew Thompson #define	USB_PROC_WAIT_NORMAL  0
4102ac6454SAndrew Thompson 
4202ac6454SAndrew Thompson /* structure prototypes */
4302ac6454SAndrew Thompson 
44760bc48eSAndrew Thompson struct usb_proc_msg;
4502ac6454SAndrew Thompson 
4602ac6454SAndrew Thompson /*
4702ac6454SAndrew Thompson  * The following structure defines the USB process.
4802ac6454SAndrew Thompson  */
49760bc48eSAndrew Thompson struct usb_process {
50760bc48eSAndrew Thompson 	TAILQ_HEAD(, usb_proc_msg) up_qhead;
5102ac6454SAndrew Thompson 	struct cv up_cv;
5202ac6454SAndrew Thompson 	struct cv up_drain;
5302ac6454SAndrew Thompson 
54532b1952SAndrew Thompson #if (__FreeBSD_version >= 800000)
55532b1952SAndrew Thompson 	struct thread *up_ptr;
56532b1952SAndrew Thompson #else
5702ac6454SAndrew Thompson 	struct proc *up_ptr;
58532b1952SAndrew Thompson #endif
5902ac6454SAndrew Thompson 	struct thread *up_curtd;
6002ac6454SAndrew Thompson 	struct mtx *up_mtx;
6102ac6454SAndrew Thompson 
62f9cb546cSAndrew Thompson 	usb_size_t up_msg_num;
6302ac6454SAndrew Thompson 
6402ac6454SAndrew Thompson 	uint8_t	up_prio;
6502ac6454SAndrew Thompson 	uint8_t	up_gone;
6602ac6454SAndrew Thompson 	uint8_t	up_msleep;
6702ac6454SAndrew Thompson 	uint8_t	up_csleep;
6802ac6454SAndrew Thompson 	uint8_t	up_dsleep;
6902ac6454SAndrew Thompson };
7002ac6454SAndrew Thompson 
7102ac6454SAndrew Thompson /* prototypes */
7202ac6454SAndrew Thompson 
73a593f6b8SAndrew Thompson uint8_t	usb_proc_is_gone(struct usb_process *up);
74a593f6b8SAndrew Thompson int	usb_proc_create(struct usb_process *up, struct mtx *p_mtx,
7502ac6454SAndrew Thompson 	    const char *pmesg, uint8_t prio);
76a593f6b8SAndrew Thompson void	usb_proc_drain(struct usb_process *up);
77a593f6b8SAndrew Thompson void	usb_proc_mwait(struct usb_process *up, void *pm0, void *pm1);
78a593f6b8SAndrew Thompson void	usb_proc_free(struct usb_process *up);
79a593f6b8SAndrew Thompson void   *usb_proc_msignal(struct usb_process *up, void *pm0, void *pm1);
80cb18f7d1SAlfred Perlstein void	usb_proc_rewakeup(struct usb_process *up);
8102ac6454SAndrew Thompson 
8275973647SAndrew Thompson #endif					/* _USB_PROCESS_H_ */
83