1 #ifndef _ISP1760_HCD_H_ 2 #define _ISP1760_HCD_H_ 3 4 #include <linux/spinlock.h> 5 6 struct isp1760_qh; 7 struct isp1760_qtd; 8 struct resource; 9 struct usb_hcd; 10 11 /* 12 * 60kb divided in: 13 * - 32 blocks @ 256 bytes 14 * - 20 blocks @ 1024 bytes 15 * - 4 blocks @ 8192 bytes 16 */ 17 18 #define BLOCK_1_NUM 32 19 #define BLOCK_2_NUM 20 20 #define BLOCK_3_NUM 4 21 22 #define BLOCK_1_SIZE 256 23 #define BLOCK_2_SIZE 1024 24 #define BLOCK_3_SIZE 8192 25 #define BLOCKS (BLOCK_1_NUM + BLOCK_2_NUM + BLOCK_3_NUM) 26 #define MAX_PAYLOAD_SIZE BLOCK_3_SIZE 27 #define PAYLOAD_AREA_SIZE 0xf000 28 29 struct isp1760_slotinfo { 30 struct isp1760_qh *qh; 31 struct isp1760_qtd *qtd; 32 unsigned long timestamp; 33 }; 34 35 /* chip memory management */ 36 struct isp1760_memory_chunk { 37 unsigned int start; 38 unsigned int size; 39 unsigned int free; 40 }; 41 42 enum isp1760_queue_head_types { 43 QH_CONTROL, 44 QH_BULK, 45 QH_INTERRUPT, 46 QH_END 47 }; 48 49 struct isp1760_hcd { 50 #ifdef CONFIG_USB_ISP1760_HCD 51 struct usb_hcd *hcd; 52 53 u32 hcs_params; 54 spinlock_t lock; 55 struct isp1760_slotinfo atl_slots[32]; 56 int atl_done_map; 57 struct isp1760_slotinfo int_slots[32]; 58 int int_done_map; 59 struct isp1760_memory_chunk memory_pool[BLOCKS]; 60 struct list_head qh_list[QH_END]; 61 62 /* periodic schedule support */ 63 #define DEFAULT_I_TDPS 1024 64 unsigned periodic_size; 65 unsigned i_thresh; 66 unsigned long reset_done; 67 unsigned long next_statechange; 68 #endif 69 }; 70 71 #ifdef CONFIG_USB_ISP1760_HCD 72 int isp1760_hcd_register(struct isp1760_hcd *priv, void __iomem *regs, 73 struct resource *mem, int irq, unsigned long irqflags, 74 struct device *dev); 75 void isp1760_hcd_unregister(struct isp1760_hcd *priv); 76 77 int isp1760_init_kmem_once(void); 78 void isp1760_deinit_kmem_cache(void); 79 #else 80 static inline int isp1760_hcd_register(struct isp1760_hcd *priv, 81 void __iomem *regs, struct resource *mem, 82 int irq, unsigned long irqflags, 83 struct device *dev) 84 { 85 return 0; 86 } 87 88 static inline void isp1760_hcd_unregister(struct isp1760_hcd *priv) 89 { 90 } 91 92 static inline int isp1760_init_kmem_once(void) 93 { 94 return 0; 95 } 96 97 static inline void isp1760_deinit_kmem_cache(void) 98 { 99 } 100 #endif 101 102 #endif /* _ISP1760_HCD_H_ */ 103