1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ISP1760_HCD_H_
3 #define _ISP1760_HCD_H_
5 #include <linux/spinlock.h>
6 #include <linux/regmap.h>
8 #include "isp1760-regs.h"
15 struct isp1760_slotinfo {
16 struct isp1760_qh *qh;
17 struct isp1760_qtd *qtd;
18 unsigned long timestamp;
21 /* chip memory management */
22 #define ISP176x_BLOCK_MAX (32 + 20 + 4)
23 #define ISP176x_BLOCK_NUM 3
25 struct isp1760_memory_layout {
26 unsigned int blocks[ISP176x_BLOCK_NUM];
27 unsigned int blocks_size[ISP176x_BLOCK_NUM];
29 unsigned int slot_num;
30 unsigned int payload_blocks;
31 unsigned int payload_area_size;
34 struct isp1760_memory_chunk {
40 enum isp1760_queue_head_types {
53 struct regmap_field *fields[HC_FIELD_MAX];
56 const struct isp1760_memory_layout *memory_layout;
59 struct isp1760_slotinfo *atl_slots;
61 struct isp1760_slotinfo *int_slots;
63 struct isp1760_memory_chunk memory_pool[ISP176x_BLOCK_MAX];
64 struct list_head qh_list[QH_END];
66 /* periodic schedule support */
67 #define DEFAULT_I_TDPS 1024
68 unsigned periodic_size;
70 unsigned long reset_done;
71 unsigned long next_statechange;
74 #ifdef CONFIG_USB_ISP1760_HCD
75 int isp1760_hcd_register(struct isp1760_hcd *priv, struct resource *mem,
76 int irq, unsigned long irqflags, struct device *dev);
77 void isp1760_hcd_unregister(struct isp1760_hcd *priv);
79 int isp1760_init_kmem_once(void);
80 void isp1760_deinit_kmem_cache(void);
82 static inline int isp1760_hcd_register(struct isp1760_hcd *priv,
84 int irq, unsigned long irqflags,
90 static inline void isp1760_hcd_unregister(struct isp1760_hcd *priv)
94 static inline int isp1760_init_kmem_once(void)
99 static inline void isp1760_deinit_kmem_cache(void)
104 #endif /* _ISP1760_HCD_H_ */