Linux Audio

Check our new training course

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