xref: /freebsd/sys/dev/usb/usb_process.h (revision 751aaf5a932650ed031496a5cc6b1d651da4aa19)
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 
30d2b99310SHans Petter Selasky #ifndef USB_GLOBAL_INCLUDE_FILE
316a9736a8SJohn Baldwin #include <sys/interrupt.h>
3202ac6454SAndrew Thompson #include <sys/priority.h>
336a9736a8SJohn Baldwin #include <sys/runq.h>
34d2b99310SHans Petter Selasky #endif
3502ac6454SAndrew Thompson 
3602ac6454SAndrew Thompson /* defines */
376a9736a8SJohn Baldwin #define	USB_PRI_HIGH	PI_SWI(SWI_NET)
386a9736a8SJohn Baldwin #define	USB_PRI_MED	PI_SWI(SWI_CAMBIO)
3902ac6454SAndrew Thompson 
4002ac6454SAndrew Thompson #define	USB_PROC_WAIT_TIMEOUT 2
4102ac6454SAndrew Thompson #define	USB_PROC_WAIT_DRAIN   1
4202ac6454SAndrew Thompson #define	USB_PROC_WAIT_NORMAL  0
4302ac6454SAndrew Thompson 
4402ac6454SAndrew Thompson /* structure prototypes */
4502ac6454SAndrew Thompson 
46760bc48eSAndrew Thompson struct usb_proc_msg;
47*751aaf5aSHans Petter Selasky struct usb_device;
4802ac6454SAndrew Thompson 
4902ac6454SAndrew Thompson /*
5002ac6454SAndrew Thompson  * The following structure defines the USB process.
5102ac6454SAndrew Thompson  */
52760bc48eSAndrew Thompson struct usb_process {
53760bc48eSAndrew Thompson 	TAILQ_HEAD(, usb_proc_msg) up_qhead;
5402ac6454SAndrew Thompson 	struct cv up_cv;
5502ac6454SAndrew Thompson 	struct cv up_drain;
5602ac6454SAndrew Thompson 
57532b1952SAndrew Thompson #if (__FreeBSD_version >= 800000)
58532b1952SAndrew Thompson 	struct thread *up_ptr;
59532b1952SAndrew Thompson #else
6002ac6454SAndrew Thompson 	struct proc *up_ptr;
61532b1952SAndrew Thompson #endif
6202ac6454SAndrew Thompson 	struct thread *up_curtd;
6302ac6454SAndrew Thompson 	struct mtx *up_mtx;
6402ac6454SAndrew Thompson 
65f9cb546cSAndrew Thompson 	usb_size_t up_msg_num;
6602ac6454SAndrew Thompson 
6702ac6454SAndrew Thompson 	uint8_t	up_prio;
6802ac6454SAndrew Thompson 	uint8_t	up_gone;
6902ac6454SAndrew Thompson 	uint8_t	up_msleep;
7002ac6454SAndrew Thompson 	uint8_t	up_csleep;
7102ac6454SAndrew Thompson 	uint8_t	up_dsleep;
7202ac6454SAndrew Thompson };
7302ac6454SAndrew Thompson 
7402ac6454SAndrew Thompson /* prototypes */
7502ac6454SAndrew Thompson 
76a593f6b8SAndrew Thompson uint8_t	usb_proc_is_gone(struct usb_process *up);
77a593f6b8SAndrew Thompson int	usb_proc_create(struct usb_process *up, struct mtx *p_mtx,
7802ac6454SAndrew Thompson 	    const char *pmesg, uint8_t prio);
79a593f6b8SAndrew Thompson void	usb_proc_drain(struct usb_process *up);
80a593f6b8SAndrew Thompson void	usb_proc_mwait(struct usb_process *up, void *pm0, void *pm1);
81a593f6b8SAndrew Thompson void	usb_proc_free(struct usb_process *up);
82a593f6b8SAndrew Thompson void   *usb_proc_msignal(struct usb_process *up, void *pm0, void *pm1);
83cb18f7d1SAlfred Perlstein void	usb_proc_rewakeup(struct usb_process *up);
8402ac6454SAndrew Thompson 
85*751aaf5aSHans Petter Selasky void	usb_proc_explore_mwait(struct usb_device *, void *, void *);
86*751aaf5aSHans Petter Selasky void   *usb_proc_explore_msignal(struct usb_device *, void *, void *);
87*751aaf5aSHans Petter Selasky void	usb_proc_explore_lock(struct usb_device *);
88*751aaf5aSHans Petter Selasky void	usb_proc_explore_unlock(struct usb_device *);
89*751aaf5aSHans Petter Selasky 
9075973647SAndrew Thompson #endif					/* _USB_PROCESS_H_ */
91