1#ifndef _ISP1760_HCD_H_ 2#define _ISP1760_HCD_H_ 3 4#include <linux/spinlock.h> 5 6struct isp1760_qh; 7struct isp1760_qtd; 8struct resource; 9struct 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 29struct isp1760_slotinfo { 30 struct isp1760_qh *qh; 31 struct isp1760_qtd *qtd; 32 unsigned long timestamp; 33}; 34 35/* chip memory management */ 36struct isp1760_memory_chunk { 37 unsigned int start; 38 unsigned int size; 39 unsigned int free; 40}; 41 42enum isp1760_queue_head_types { 43 QH_CONTROL, 44 QH_BULK, 45 QH_INTERRUPT, 46 QH_END 47}; 48 49struct 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 72int isp1760_hcd_register(struct isp1760_hcd *priv, void __iomem *regs, 73 struct resource *mem, int irq, unsigned long irqflags, 74 struct device *dev); 75void isp1760_hcd_unregister(struct isp1760_hcd *priv); 76 77int isp1760_init_kmem_once(void); 78void isp1760_deinit_kmem_cache(void); 79#else 80static 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 88static inline void isp1760_hcd_unregister(struct isp1760_hcd *priv) 89{ 90} 91 92static inline int isp1760_init_kmem_once(void) 93{ 94 return 0; 95} 96 97static inline void isp1760_deinit_kmem_cache(void) 98{ 99} 100#endif 101 102#endif /* _ISP1760_HCD_H_ */ 103