File Index
Files and directories
Sign in
FILE

tcm.h

File preview with syntax highlighting.

linux-6.19.14/drivers/usb/gadget/function/tcm.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef __TARGET_USB_GADGET_H__
  3#define __TARGET_USB_GADGET_H__
  4
  5#include <linux/kref.h>
  6/* #include <linux/usb/uas.h> */
  7#include <linux/hashtable.h>
  8#include <linux/usb/composite.h>
  9#include <linux/usb/uas.h>
 10#include <linux/usb/storage.h>
 11#include <target/target_core_base.h>
 12#include <target/target_core_fabric.h>
 13
 14#define USBG_NAMELEN 32
 15
 16#define fuas_to_gadget(f)	(f->function.config->cdev->gadget)
 17#define UASP_SS_EP_COMP_LOG_STREAMS 5
 18#define UASP_SS_EP_COMP_NUM_STREAMS (1 << UASP_SS_EP_COMP_LOG_STREAMS)
 19
 20#define USBG_NUM_CMDS		(UASP_SS_EP_COMP_NUM_STREAMS + 1)
 21
 22enum {
 23	USB_G_STR_INT_UAS = 0,
 24	USB_G_STR_INT_BBB,
 25};
 26
 27#define USB_G_ALT_INT_BBB       0
 28#define USB_G_ALT_INT_UAS       1
 29
 30#define USB_G_DEFAULT_SESSION_TAGS	USBG_NUM_CMDS
 31
 32struct tcm_usbg_nexus {
 33	struct se_session *tvn_se_sess;
 34};
 35
 36struct usbg_tpg {
 37	struct mutex tpg_mutex;
 38	/* SAS port target portal group tag for TCM */
 39	u16 tport_tpgt;
 40	/* Pointer back to usbg_tport */
 41	struct usbg_tport *tport;
 42	struct workqueue_struct *workqueue;
 43	/* Returned by usbg_make_tpg() */
 44	struct se_portal_group se_tpg;
 45	u32 gadget_connect;
 46	struct tcm_usbg_nexus *tpg_nexus;
 47	atomic_t tpg_port_count;
 48
 49	struct usb_function_instance *fi;
 50};
 51
 52struct usbg_tport {
 53	/* Binary World Wide unique Port Name for SAS Target port */
 54	u64 tport_wwpn;
 55	/* ASCII formatted WWPN for SAS Target port */
 56	char tport_name[USBG_NAMELEN];
 57	/* Returned by usbg_make_tport() */
 58	struct se_wwn tport_wwn;
 59};
 60
 61enum uas_state {
 62	UASP_SEND_DATA,
 63	UASP_RECEIVE_DATA,
 64	UASP_SEND_STATUS,
 65	UASP_QUEUE_COMMAND,
 66};
 67
 68#define USBG_MAX_CMD    64
 69struct usbg_cmd {
 70	/* common */
 71	u8 cmd_buf[USBG_MAX_CMD];
 72	u32 data_len;
 73	struct work_struct work;
 74	int unpacked_lun;
 75	struct se_cmd se_cmd;
 76	void *data_buf; /* used if no sg support available */
 77	struct f_uas *fu;
 78	struct kref ref;
 79
 80	struct usb_request *req;
 81
 82	u32 flags;
 83#define USBG_CMD_PENDING_DATA_WRITE	BIT(0)
 84
 85	/* UAS only */
 86	u16 tag;
 87	u16 prio_attr;
 88	struct sense_iu sense_iu;
 89	struct response_iu response_iu;
 90	enum uas_state state;
 91
 92	int tmr_func;
 93	int tmr_rsp;
 94#define	RC_RESPONSE_UNKNOWN	0xff
 95
 96	/* BOT only */
 97	__le32 bot_tag;
 98	unsigned int csw_code;
 99	unsigned is_read:1;
100
101};
102
103struct uas_stream {
104	struct usb_request	*req_in;
105	struct usb_request	*req_out;
106	struct usb_request	*req_status;
107
108	struct completion	cmd_completion;
109	struct hlist_node	node;
110};
111
112struct usbg_cdb {
113	struct usb_request	*req;
114	void			*buf;
115};
116
117struct bot_status {
118	struct usb_request	*req;
119	struct bulk_cs_wrap	csw;
120};
121
122struct f_uas {
123	struct usbg_tpg		*tpg;
124	struct usb_function	function;
125	u16			iface;
126
127	u32			flags;
128#define USBG_ENABLED		(1 << 0)
129#define USBG_IS_UAS		(1 << 1)
130#define USBG_USE_STREAMS	(1 << 2)
131#define USBG_IS_BOT		(1 << 3)
132#define USBG_BOT_CMD_PEND	(1 << 4)
133#define USBG_BOT_WEDGED		(1 << 5)
134
135	struct usbg_cdb		cmd[USBG_NUM_CMDS];
136	struct usb_ep		*ep_in;
137	struct usb_ep		*ep_out;
138
139	/* UAS */
140	struct usb_ep		*ep_status;
141	struct usb_ep		*ep_cmd;
142	struct uas_stream	stream[USBG_NUM_CMDS];
143	DECLARE_HASHTABLE(stream_hash, UASP_SS_EP_COMP_LOG_STREAMS);
144
145	/* BOT */
146	struct bot_status	bot_status;
147	struct usb_request	*bot_req_in;
148	struct usb_request	*bot_req_out;
149};
150
151#endif /* __TARGET_USB_GADGET_H__ */
~/ Read-only file preview.