2011-06-06 09:18:03 +04:00
/*
* Renesas USB driver
*
* Copyright ( C ) 2011 Renesas Solutions Corp .
* Kuninori Morimoto < kuninori . morimoto . gx @ renesas . com >
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA
*
*/
# ifndef RENESAS_USB_FIFO_H
# define RENESAS_USB_FIFO_H
2011-06-06 09:18:07 +04:00
# include "pipe.h"
2011-06-06 09:18:28 +04:00
struct usbhs_pkt_handle ;
2011-06-06 09:18:07 +04:00
struct usbhs_pkt {
2011-06-06 09:18:16 +04:00
struct list_head node ;
2011-06-06 09:18:07 +04:00
struct usbhs_pipe * pipe ;
2011-06-06 09:18:28 +04:00
struct usbhs_pkt_handle * handler ;
2011-06-06 09:18:07 +04:00
void * buf ;
int length ;
int actual ;
2011-06-06 09:18:23 +04:00
int zero ;
2011-06-06 09:18:07 +04:00
} ;
2011-06-06 09:18:03 +04:00
2011-06-06 09:18:28 +04:00
struct usbhs_pkt_handle {
2011-06-06 09:18:38 +04:00
int ( * prepare ) ( struct usbhs_pkt * pkt , int * is_done ) ;
int ( * try_run ) ( struct usbhs_pkt * pkt , int * is_done ) ;
2011-06-06 09:18:28 +04:00
} ;
2011-06-06 09:18:03 +04:00
/*
* fifo
*/
2011-06-06 09:18:28 +04:00
void usbhs_fifo_init ( struct usbhs_priv * priv ) ;
void usbhs_fifo_quit ( struct usbhs_priv * priv ) ;
2011-06-06 09:18:03 +04:00
2011-06-06 09:18:07 +04:00
/*
* packet info
*/
2011-06-06 09:18:38 +04:00
enum {
USBHSF_PKT_PREPARE ,
USBHSF_PKT_TRY_RUN ,
} ;
2011-06-06 09:18:28 +04:00
extern struct usbhs_pkt_handle usbhs_fifo_push_handler ;
extern struct usbhs_pkt_handle usbhs_fifo_pop_handler ;
extern struct usbhs_pkt_handle usbhs_ctrl_stage_end_handler ;
2011-06-06 09:18:16 +04:00
void usbhs_pkt_init ( struct usbhs_pkt * pkt ) ;
2011-06-06 09:18:23 +04:00
void usbhs_pkt_push ( struct usbhs_pipe * pipe , struct usbhs_pkt * pkt ,
2011-06-06 09:18:28 +04:00
struct usbhs_pkt_handle * handler ,
2011-06-06 09:18:23 +04:00
void * buf , int len , int zero ) ;
2011-06-06 09:18:38 +04:00
struct usbhs_pkt * usbhs_pkt_pop ( struct usbhs_pipe * pipe , struct usbhs_pkt * pkt ) ;
int __usbhs_pkt_handler ( struct usbhs_pipe * pipe , int type ) ;
2011-06-06 09:18:07 +04:00
2011-06-06 09:18:38 +04:00
# define usbhs_pkt_start(p) __usbhs_pkt_handler(p, USBHSF_PKT_PREPARE)
# define usbhs_pkt_run(p) __usbhs_pkt_handler(p, USBHSF_PKT_TRY_RUN)
2011-06-06 09:18:28 +04:00
2011-06-06 09:18:03 +04:00
# endif /* RENESAS_USB_FIFO_H */