#ifndef __LINUX_ETRAX_USB_H #define __LINUX_ETRAX_USB_H #include #include typedef struct USB_IN_Desc { __u16 sw_len; __u16 command; unsigned long next; unsigned long buf; __u16 hw_len; __u16 status; } USB_IN_Desc_t; typedef struct USB_SB_Desc { __u16 sw_len; __u16 command; unsigned long next; unsigned long buf; __u32 dummy; } USB_SB_Desc_t; typedef struct USB_EP_Desc { __u16 hw_len; __u16 command; unsigned long sub; unsigned long nep; __u32 dummy; } USB_EP_Desc_t; struct virt_root_hub { int devnum; void *urb; void *int_addr; int send; int interval; int numports; struct timer_list rh_int_timer; __u16 wPortChange_1; __u16 wPortChange_2; __u16 prev_wPortStatus_1; __u16 prev_wPortStatus_2; }; struct etrax_usb_intr_traffic { int sleeping; int error; struct wait_queue *wq; }; typedef struct etrax_usb_hc { struct usb_bus *bus; struct virt_root_hub rh; struct etrax_usb_intr_traffic intr; } etrax_hc_t; typedef enum {idle, eot, nodata} etrax_usb_rx_state_t; typedef struct etrax_usb_urb_priv { USB_SB_Desc_t *first_sb; __u32 rx_offset; etrax_usb_rx_state_t rx_state; __u8 eot; struct list_head ep_in_list; } etrax_urb_priv_t; struct usb_reg_context { etrax_hc_t *hc; __u32 r_usb_epid_attn; __u8 r_usb_status; __u32 r_usb_rh_port_status_1; __u32 r_usb_rh_port_status_2; __u32 r_usb_irq_mask_read; struct tq_struct usb_bh; #if 0 __u32 r_usb_ept_data[32]; #endif }; struct in_chunk { void *data; int length; char epid; struct list_head list; }; /* --------------------------------------------------------------------------- Virtual Root HUB ------------------------------------------------------------------------- */ /* destination of request */ #define RH_INTERFACE 0x01 #define RH_ENDPOINT 0x02 #define RH_OTHER 0x03 #define RH_CLASS 0x20 #define RH_VENDOR 0x40 /* Requests: bRequest << 8 | bmRequestType */ #define RH_GET_STATUS 0x0080 #define RH_CLEAR_FEATURE 0x0100 #define RH_SET_FEATURE 0x0300 #define RH_SET_ADDRESS 0x0500 #define RH_GET_DESCRIPTOR 0x0680 #define RH_SET_DESCRIPTOR 0x0700 #define RH_GET_CONFIGURATION 0x0880 #define RH_SET_CONFIGURATION 0x0900 #define RH_GET_STATE 0x0280 #define RH_GET_INTERFACE 0x0A80 #define RH_SET_INTERFACE 0x0B00 #define RH_SYNC_FRAME 0x0C80 /* Our Vendor Specific Request */ #define RH_SET_EP 0x2000 /* Hub port features */ #define RH_PORT_CONNECTION 0x00 #define RH_PORT_ENABLE 0x01 #define RH_PORT_SUSPEND 0x02 #define RH_PORT_OVER_CURRENT 0x03 #define RH_PORT_RESET 0x04 #define RH_PORT_POWER 0x08 #define RH_PORT_LOW_SPEED 0x09 #define RH_C_PORT_CONNECTION 0x10 #define RH_C_PORT_ENABLE 0x11 #define RH_C_PORT_SUSPEND 0x12 #define RH_C_PORT_OVER_CURRENT 0x13 #define RH_C_PORT_RESET 0x14 /* Hub features */ #define RH_C_HUB_LOCAL_POWER 0x00 #define RH_C_HUB_OVER_CURRENT 0x01 #define RH_DEVICE_REMOTE_WAKEUP 0x00 #define RH_ENDPOINT_STALL 0x01 /* Our Vendor Specific feature */ #define RH_REMOVE_EP 0x00 #define RH_ACK 0x01 #define RH_REQ_ERR -1 #define RH_NACK 0x00 /* Field definitions for */ #define USB_IN_command__eol__BITNR 0 /* command macros */ #define USB_IN_command__eol__WIDTH 1 #define USB_IN_command__eol__no 0 #define USB_IN_command__eol__yes 1 #define USB_IN_command__intr__BITNR 3 #define USB_IN_command__intr__WIDTH 1 #define USB_IN_command__intr__no 0 #define USB_IN_command__intr__yes 1 #define USB_IN_status__eop__BITNR 1 /* status macros. */ #define USB_IN_status__eop__WIDTH 1 #define USB_IN_status__eop__no 0 #define USB_IN_status__eop__yes 1 #define USB_IN_status__eot__BITNR 5 #define USB_IN_status__eot__WIDTH 1 #define USB_IN_status__eot__no 0 #define USB_IN_status__eot__yes 1 #define USB_IN_status__error__BITNR 6 #define USB_IN_status__error__WIDTH 1 #define USB_IN_status__error__no 0 #define USB_IN_status__error__yes 1 #define USB_IN_status__nodata__BITNR 7 #define USB_IN_status__nodata__WIDTH 1 #define USB_IN_status__nodata__no 0 #define USB_IN_status__nodata__yes 1 #define USB_IN_status__epid__BITNR 8 #define USB_IN_status__epid__WIDTH 5 #define USB_EP_command__eol__BITNR 0 #define USB_EP_command__eol__WIDTH 1 #define USB_EP_command__eol__no 0 #define USB_EP_command__eol__yes 1 #define USB_EP_command__eof__BITNR 1 #define USB_EP_command__eof__WIDTH 1 #define USB_EP_command__eof__no 0 #define USB_EP_command__eof__yes 1 #define USB_EP_command__intr__BITNR 3 #define USB_EP_command__intr__WIDTH 1 #define USB_EP_command__intr__no 0 #define USB_EP_command__intr__yes 1 #define USB_EP_command__enable__BITNR 4 #define USB_EP_command__enable__WIDTH 1 #define USB_EP_command__enable__no 0 #define USB_EP_command__enable__yes 1 #define USB_EP_command__hw_valid__BITNR 5 #define USB_EP_command__hw_valid__WIDTH 1 #define USB_EP_command__hw_valid__no 0 #define USB_EP_command__hw_valid__yes 1 #define USB_EP_command__epid__BITNR 8 #define USB_EP_command__epid__WIDTH 5 #define USB_SB_command__eol__BITNR 0 /* command macros. */ #define USB_SB_command__eol__WIDTH 1 #define USB_SB_command__eol__no 0 #define USB_SB_command__eol__yes 1 #define USB_SB_command__eot__BITNR 1 #define USB_SB_command__eot__WIDTH 1 #define USB_SB_command__eot__no 0 #define USB_SB_command__eot__yes 1 #define USB_SB_command__intr__BITNR 3 #define USB_SB_command__intr__WIDTH 1 #define USB_SB_command__intr__no 0 #define USB_SB_command__intr__yes 1 #define USB_SB_command__tt__BITNR 4 #define USB_SB_command__tt__WIDTH 2 #define USB_SB_command__tt__zout 0 #define USB_SB_command__tt__in 1 #define USB_SB_command__tt__out 2 #define USB_SB_command__tt__setup 3 #define USB_SB_command__rem__BITNR 8 #define USB_SB_command__rem__WIDTH 6 #define USB_SB_command__full__BITNR 6 #define USB_SB_command__full__WIDTH 1 #define USB_SB_command__full__no 0 #define USB_SB_command__full__yes 1 #endif