Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tcm_usb_gadget.h
Go to the documentation of this file.
1 #ifndef __TARGET_USB_GADGET_H__
2 #define __TARGET_USB_GADGET_H__
3 
4 #include <linux/kref.h>
5 /* #include <linux/usb/uas.h> */
6 #include <linux/usb/composite.h>
7 #include <linux/usb/uas.h>
8 #include <linux/usb/storage.h>
9 #include <scsi/scsi.h>
12 
13 #define USBG_NAMELEN 32
14 
15 #define fuas_to_gadget(f) (f->function.config->cdev->gadget)
16 #define UASP_SS_EP_COMP_LOG_STREAMS 4
17 #define UASP_SS_EP_COMP_NUM_STREAMS (1 << UASP_SS_EP_COMP_LOG_STREAMS)
18 
19 enum {
23 };
24 
25 #define USB_G_ALT_INT_BBB 0
26 #define USB_G_ALT_INT_UAS 1
27 
28 struct usbg_nacl {
29  /* Binary World Wide unique Port Name for SAS Initiator port */
31  /* ASCII formatted WWPN for Sas Initiator port */
33  /* Returned by usbg_make_nodeacl() */
35 };
36 
39 };
40 
41 struct usbg_tpg {
42  struct mutex tpg_mutex;
43  /* SAS port target portal group tag for TCM */
45  /* Pointer back to usbg_tport */
46  struct usbg_tport *tport;
48  /* Returned by usbg_make_tpg() */
53 };
54 
55 struct usbg_tport {
56  /* SCSI protocol the tport is providing */
58  /* Binary World Wide unique Port Name for SAS Target port */
60  /* ASCII formatted WWPN for SAS Target port */
62  /* Returned by usbg_make_tport() */
63  struct se_wwn tport_wwn;
64 };
65 
66 enum uas_state {
71 };
72 
73 #define USBG_MAX_CMD 64
74 struct usbg_cmd {
75  /* common */
78  struct work_struct work;
80  struct se_cmd se_cmd;
81  void *data_buf; /* used if no sg support available */
82  struct f_uas *fu;
84  struct kref ref;
85 
86  /* UAS only */
91  struct uas_stream *stream;
92 
93  /* BOT only */
95  unsigned int csw_code;
96  unsigned is_read:1;
97 
98 };
99 
100 struct uas_stream {
104 };
105 
106 struct usbg_cdb {
107  struct usb_request *req;
108  void *buf;
109 };
110 
111 struct bot_status {
112  struct usb_request *req;
114 };
115 
116 struct f_uas {
117  struct usbg_tpg *tpg;
120 
122 #define USBG_ENABLED (1 << 0)
123 #define USBG_IS_UAS (1 << 1)
124 #define USBG_USE_STREAMS (1 << 2)
125 #define USBG_IS_BOT (1 << 3)
126 #define USBG_BOT_CMD_PEND (1 << 4)
127 
128  struct usbg_cdb cmd;
129  struct usb_ep *ep_in;
130  struct usb_ep *ep_out;
131 
132  /* UAS */
133  struct usb_ep *ep_status;
134  struct usb_ep *ep_cmd;
136 
137  /* BOT */
141 };
142 
144 
145 #endif