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