1#ifndef TARGET_CORE_BASE_H
2#define TARGET_CORE_BASE_H
3
4#include <linux/in.h>
5#include <linux/configfs.h>
6#include <linux/dma-mapping.h>
7#include <linux/blkdev.h>
8#include <scsi/scsi_cmnd.h>
9#include <net/sock.h>
10#include <net/tcp.h>
11
12#define TARGET_CORE_MOD_VERSION "v4.1.0-rc1-ml"
13
14
15
16#define TRANSPORT_MAX_LUNS_PER_TPG 256
17
18
19
20
21
22
23
24
25
26
27
28
29#define TCM_MAX_COMMAND_SIZE 32
30
31
32
33
34#define TRANSPORT_SENSE_BUFFER SCSI_SENSE_BUFFERSIZE
35
36#define SPC_SENSE_KEY_OFFSET 2
37#define SPC_ADD_SENSE_LEN_OFFSET 7
38#define SPC_ASC_KEY_OFFSET 12
39#define SPC_ASCQ_KEY_OFFSET 13
40#define TRANSPORT_IQN_LEN 224
41
42#define LU_GROUP_NAME_BUF 256
43
44#define TG_PT_GROUP_NAME_BUF 256
45
46#define VPD_TMP_BUF_SIZE 128
47
48#define READ_BLOCK_LEN 6
49#define READ_CAP_LEN 8
50#define READ_POSITION_LEN 20
51#define INQUIRY_LEN 36
52
53#define INQUIRY_VPD_SERIAL_LEN 254
54
55#define INQUIRY_VPD_DEVICE_IDENTIFIER_LEN 254
56
57
58enum hba_flags_table {
59 HBA_FLAGS_INTERNAL_USE = 0x01,
60 HBA_FLAGS_PSCSI_MODE = 0x02,
61};
62
63
64enum transport_lun_status_table {
65 TRANSPORT_LUN_STATUS_FREE = 0,
66 TRANSPORT_LUN_STATUS_ACTIVE = 1,
67};
68
69
70enum transport_tpg_type_table {
71 TRANSPORT_TPG_TYPE_NORMAL = 0,
72 TRANSPORT_TPG_TYPE_DISCOVERY = 1,
73};
74
75
76enum se_task_flags {
77 TF_ACTIVE = (1 << 0),
78 TF_SENT = (1 << 1),
79 TF_REQUEST_STOP = (1 << 2),
80};
81
82
83enum transport_state_table {
84 TRANSPORT_NO_STATE = 0,
85 TRANSPORT_NEW_CMD = 1,
86 TRANSPORT_WRITE_PENDING = 3,
87 TRANSPORT_PROCESS_WRITE = 4,
88 TRANSPORT_PROCESSING = 5,
89 TRANSPORT_COMPLETE = 6,
90 TRANSPORT_PROCESS_TMR = 9,
91 TRANSPORT_ISTATE_PROCESSING = 11,
92 TRANSPORT_NEW_CMD_MAP = 16,
93 TRANSPORT_COMPLETE_QF_WP = 18,
94 TRANSPORT_COMPLETE_QF_OK = 19,
95};
96
97
98enum se_cmd_flags_table {
99 SCF_SUPPORTED_SAM_OPCODE = 0x00000001,
100 SCF_TRANSPORT_TASK_SENSE = 0x00000002,
101 SCF_EMULATED_TASK_SENSE = 0x00000004,
102 SCF_SCSI_DATA_SG_IO_CDB = 0x00000008,
103 SCF_SCSI_CONTROL_SG_IO_CDB = 0x00000010,
104 SCF_SCSI_NON_DATA_CDB = 0x00000040,
105 SCF_SCSI_CDB_EXCEPTION = 0x00000080,
106 SCF_SCSI_RESERVATION_CONFLICT = 0x00000100,
107 SCF_FUA = 0x00000200,
108 SCF_SE_LUN_CMD = 0x00000800,
109 SCF_SE_ALLOW_EOO = 0x00001000,
110 SCF_BIDI = 0x00002000,
111 SCF_SENT_CHECK_CONDITION = 0x00004000,
112 SCF_OVERFLOW_BIT = 0x00008000,
113 SCF_UNDERFLOW_BIT = 0x00010000,
114 SCF_SENT_DELAYED_TAS = 0x00020000,
115 SCF_ALUA_NON_OPTIMIZED = 0x00040000,
116 SCF_DELAYED_CMD_FROM_SAM_ATTR = 0x00080000,
117 SCF_UNUSED = 0x00100000,
118 SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00400000,
119};
120
121
122enum transport_lunflags_table {
123 TRANSPORT_LUNFLAGS_NO_ACCESS = 0x00,
124 TRANSPORT_LUNFLAGS_INITIATOR_ACCESS = 0x01,
125 TRANSPORT_LUNFLAGS_READ_ONLY = 0x02,
126 TRANSPORT_LUNFLAGS_READ_WRITE = 0x04,
127};
128
129
130enum transport_device_status_table {
131 TRANSPORT_DEVICE_ACTIVATED = 0x01,
132 TRANSPORT_DEVICE_DEACTIVATED = 0x02,
133 TRANSPORT_DEVICE_QUEUE_FULL = 0x04,
134 TRANSPORT_DEVICE_SHUTDOWN = 0x08,
135 TRANSPORT_DEVICE_OFFLINE_ACTIVATED = 0x10,
136 TRANSPORT_DEVICE_OFFLINE_DEACTIVATED = 0x20,
137};
138
139
140
141
142
143enum tcm_sense_reason_table {
144 TCM_NON_EXISTENT_LUN = 0x01,
145 TCM_UNSUPPORTED_SCSI_OPCODE = 0x02,
146 TCM_INCORRECT_AMOUNT_OF_DATA = 0x03,
147 TCM_UNEXPECTED_UNSOLICITED_DATA = 0x04,
148 TCM_SERVICE_CRC_ERROR = 0x05,
149 TCM_SNACK_REJECTED = 0x06,
150 TCM_SECTOR_COUNT_TOO_MANY = 0x07,
151 TCM_INVALID_CDB_FIELD = 0x08,
152 TCM_INVALID_PARAMETER_LIST = 0x09,
153 TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE = 0x0a,
154 TCM_UNKNOWN_MODE_PAGE = 0x0b,
155 TCM_WRITE_PROTECTED = 0x0c,
156 TCM_CHECK_CONDITION_ABORT_CMD = 0x0d,
157 TCM_CHECK_CONDITION_UNIT_ATTENTION = 0x0e,
158 TCM_CHECK_CONDITION_NOT_READY = 0x0f,
159 TCM_RESERVATION_CONFLICT = 0x10,
160};
161
162struct se_obj {
163 atomic_t obj_access_count;
164} ____cacheline_aligned;
165
166
167
168
169
170typedef enum {
171 SPC_ALUA_PASSTHROUGH,
172 SPC2_ALUA_DISABLED,
173 SPC3_ALUA_EMULATED
174} t10_alua_index_t;
175
176
177
178
179
180typedef enum {
181 SAM_TASK_ATTR_PASSTHROUGH,
182 SAM_TASK_ATTR_UNTAGGED,
183 SAM_TASK_ATTR_EMULATED
184} t10_task_attr_index_t;
185
186
187
188
189typedef enum {
190 SCSI_INST_INDEX,
191 SCSI_DEVICE_INDEX,
192 SCSI_AUTH_INTR_INDEX,
193 SCSI_INDEX_TYPE_MAX
194} scsi_index_t;
195
196struct se_cmd;
197
198struct t10_alua {
199 t10_alua_index_t alua_type;
200
201 u16 alua_tg_pt_gps_counter;
202 u32 alua_tg_pt_gps_count;
203 spinlock_t tg_pt_gps_lock;
204 struct se_subsystem_dev *t10_sub_dev;
205
206 struct t10_alua_tg_pt_gp *default_tg_pt_gp;
207
208 struct config_group alua_tg_pt_gps_group;
209 int (*alua_state_check)(struct se_cmd *, unsigned char *, u8 *);
210 struct list_head tg_pt_gps_list;
211} ____cacheline_aligned;
212
213struct t10_alua_lu_gp {
214 u16 lu_gp_id;
215 int lu_gp_valid_id;
216 u32 lu_gp_members;
217 atomic_t lu_gp_ref_cnt;
218 spinlock_t lu_gp_lock;
219 struct config_group lu_gp_group;
220 struct list_head lu_gp_node;
221 struct list_head lu_gp_mem_list;
222} ____cacheline_aligned;
223
224struct t10_alua_lu_gp_member {
225 bool lu_gp_assoc;
226 atomic_t lu_gp_mem_ref_cnt;
227 spinlock_t lu_gp_mem_lock;
228 struct t10_alua_lu_gp *lu_gp;
229 struct se_device *lu_gp_mem_dev;
230 struct list_head lu_gp_mem_list;
231} ____cacheline_aligned;
232
233struct t10_alua_tg_pt_gp {
234 u16 tg_pt_gp_id;
235 int tg_pt_gp_valid_id;
236 int tg_pt_gp_alua_access_status;
237 int tg_pt_gp_alua_access_type;
238 int tg_pt_gp_nonop_delay_msecs;
239 int tg_pt_gp_trans_delay_msecs;
240 int tg_pt_gp_pref;
241 int tg_pt_gp_write_metadata;
242
243#define ALUA_MD_BUF_LEN 1024
244 u32 tg_pt_gp_md_buf_len;
245 u32 tg_pt_gp_members;
246 atomic_t tg_pt_gp_alua_access_state;
247 atomic_t tg_pt_gp_ref_cnt;
248 spinlock_t tg_pt_gp_lock;
249 struct mutex tg_pt_gp_md_mutex;
250 struct se_subsystem_dev *tg_pt_gp_su_dev;
251 struct config_group tg_pt_gp_group;
252 struct list_head tg_pt_gp_list;
253 struct list_head tg_pt_gp_mem_list;
254} ____cacheline_aligned;
255
256struct t10_alua_tg_pt_gp_member {
257 bool tg_pt_gp_assoc;
258 atomic_t tg_pt_gp_mem_ref_cnt;
259 spinlock_t tg_pt_gp_mem_lock;
260 struct t10_alua_tg_pt_gp *tg_pt_gp;
261 struct se_port *tg_pt;
262 struct list_head tg_pt_gp_mem_list;
263} ____cacheline_aligned;
264
265struct t10_vpd {
266 unsigned char device_identifier[INQUIRY_VPD_DEVICE_IDENTIFIER_LEN];
267 int protocol_identifier_set;
268 u32 protocol_identifier;
269 u32 device_identifier_code_set;
270 u32 association;
271 u32 device_identifier_type;
272 struct list_head vpd_list;
273} ____cacheline_aligned;
274
275struct t10_wwn {
276 char vendor[8];
277 char model[16];
278 char revision[4];
279 char unit_serial[INQUIRY_VPD_SERIAL_LEN];
280 spinlock_t t10_vpd_lock;
281 struct se_subsystem_dev *t10_sub_dev;
282 struct config_group t10_wwn_group;
283 struct list_head t10_vpd_list;
284} ____cacheline_aligned;
285
286
287
288
289
290
291
292typedef enum {
293 SPC_PASSTHROUGH,
294 SPC2_RESERVATIONS,
295 SPC3_PERSISTENT_RESERVATIONS
296} t10_reservations_index_t;
297
298struct t10_pr_registration {
299
300#define PR_REG_ISID_LEN 16
301
302#define PR_REG_ISID_ID_LEN (PR_REG_ISID_LEN + 5)
303 char pr_reg_isid[PR_REG_ISID_LEN];
304
305#define PR_APTPL_MAX_IPORT_LEN 256
306 unsigned char pr_iport[PR_APTPL_MAX_IPORT_LEN];
307
308#define PR_APTPL_MAX_TPORT_LEN 256
309 unsigned char pr_tport[PR_APTPL_MAX_TPORT_LEN];
310
311 unsigned char *pr_aptpl_buf;
312 u16 pr_aptpl_rpti;
313 u16 pr_reg_tpgt;
314
315 int pr_reg_all_tg_pt;
316
317 int pr_reg_aptpl;
318 int pr_res_holder;
319 int pr_res_type;
320 int pr_res_scope;
321
322 bool isid_present_at_reg;
323 u32 pr_res_mapped_lun;
324 u32 pr_aptpl_target_lun;
325 u32 pr_res_generation;
326 u64 pr_reg_bin_isid;
327 u64 pr_res_key;
328 atomic_t pr_res_holders;
329 struct se_node_acl *pr_reg_nacl;
330 struct se_dev_entry *pr_reg_deve;
331 struct se_lun *pr_reg_tg_pt_lun;
332 struct list_head pr_reg_list;
333 struct list_head pr_reg_abort_list;
334 struct list_head pr_reg_aptpl_list;
335 struct list_head pr_reg_atp_list;
336 struct list_head pr_reg_atp_mem_list;
337} ____cacheline_aligned;
338
339
340
341
342
343
344struct t10_reservation_ops {
345 int (*t10_reservation_check)(struct se_cmd *, u32 *);
346 int (*t10_seq_non_holder)(struct se_cmd *, unsigned char *, u32);
347 int (*t10_pr_register)(struct se_cmd *);
348 int (*t10_pr_clear)(struct se_cmd *);
349};
350
351struct t10_reservation {
352
353 int pr_all_tg_pt;
354
355
356 int pr_aptpl_active;
357
358#define PR_APTPL_BUF_LEN 8192
359 u32 pr_aptpl_buf_len;
360 u32 pr_generation;
361 t10_reservations_index_t res_type;
362 spinlock_t registration_lock;
363 spinlock_t aptpl_reg_lock;
364
365
366
367
368
369
370
371
372
373
374 struct se_node_acl *pr_res_holder;
375 struct list_head registration_list;
376 struct list_head aptpl_reg_list;
377 struct t10_reservation_ops pr_ops;
378} ____cacheline_aligned;
379
380struct se_queue_req {
381 int state;
382 struct se_cmd *cmd;
383 struct list_head qr_list;
384} ____cacheline_aligned;
385
386struct se_queue_obj {
387 atomic_t queue_cnt;
388 spinlock_t cmd_queue_lock;
389 struct list_head qobj_list;
390 wait_queue_head_t thread_wq;
391} ____cacheline_aligned;
392
393struct se_task {
394 unsigned long long task_lba;
395 u32 task_sectors;
396 u32 task_size;
397 struct se_cmd *task_se_cmd;
398 struct scatterlist *task_sg;
399 u32 task_sg_nents;
400 u16 task_flags;
401 u8 task_sense;
402 u8 task_scsi_status;
403 int task_error_status;
404 enum dma_data_direction task_data_direction;
405 atomic_t task_state_active;
406 struct list_head t_list;
407 struct list_head t_execute_list;
408 struct list_head t_state_list;
409 struct completion task_stop_comp;
410} ____cacheline_aligned;
411
412struct se_cmd {
413
414 u8 scsi_status;
415 u8 scsi_asc;
416 u8 scsi_ascq;
417 u8 scsi_sense_reason;
418 u16 scsi_sense_length;
419
420 int alua_nonop_delay;
421
422 enum dma_data_direction data_direction;
423
424 int sam_task_attr;
425
426 enum transport_state_table t_state;
427
428 unsigned check_release:1;
429 unsigned cmd_wait_set:1;
430
431 u32 se_cmd_flags;
432 u32 se_ordered_id;
433
434 u32 data_length;
435
436 u32 cmd_spdtl;
437 u32 residual_count;
438 u32 orig_fe_lun;
439
440 u64 pr_res_key;
441
442 void *sense_buffer;
443 struct list_head se_delayed_node;
444 struct list_head se_lun_node;
445 struct list_head se_qf_node;
446 struct se_device *se_dev;
447 struct se_dev_entry *se_deve;
448 struct se_lun *se_lun;
449
450 struct se_session *se_sess;
451 struct se_tmr_req *se_tmr_req;
452 struct list_head se_queue_node;
453 struct list_head se_cmd_list;
454 struct completion cmd_wait_comp;
455 struct target_core_fabric_ops *se_tfo;
456 int (*execute_task)(struct se_task *);
457 void (*transport_complete_callback)(struct se_cmd *);
458
459 unsigned char *t_task_cdb;
460 unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE];
461 unsigned long long t_task_lba;
462 int t_tasks_failed;
463 u32 t_tasks_sg_chained_no;
464 atomic_t t_fe_count;
465 atomic_t t_se_count;
466 atomic_t t_task_cdbs_left;
467 atomic_t t_task_cdbs_ex_left;
468 atomic_t t_task_cdbs_sent;
469 atomic_t t_transport_aborted;
470 atomic_t t_transport_active;
471 atomic_t t_transport_complete;
472 atomic_t t_transport_queue_active;
473 atomic_t t_transport_sent;
474 atomic_t t_transport_stop;
475 atomic_t transport_dev_active;
476 atomic_t transport_lun_active;
477 atomic_t transport_lun_fe_stop;
478 atomic_t transport_lun_stop;
479 spinlock_t t_state_lock;
480 struct completion t_transport_stop_comp;
481 struct completion transport_lun_fe_stop_comp;
482 struct completion transport_lun_stop_comp;
483 struct scatterlist *t_tasks_sg_chained;
484
485 struct work_struct work;
486
487 struct scatterlist *t_data_sg;
488 unsigned int t_data_nents;
489 void *t_data_vmap;
490 struct scatterlist *t_bidi_data_sg;
491 unsigned int t_bidi_data_nents;
492
493
494 struct list_head t_task_list;
495 u32 t_task_list_num;
496
497} ____cacheline_aligned;
498
499struct se_tmr_req {
500
501 u8 function;
502
503 u8 response;
504 int call_transport;
505
506 u32 ref_task_tag;
507
508 u64 ref_task_lun;
509 void *fabric_tmr_ptr;
510 struct se_cmd *task_cmd;
511 struct se_cmd *ref_cmd;
512 struct se_device *tmr_dev;
513 struct se_lun *tmr_lun;
514 struct list_head tmr_list;
515} ____cacheline_aligned;
516
517struct se_ua {
518 u8 ua_asc;
519 u8 ua_ascq;
520 struct se_node_acl *ua_nacl;
521 struct list_head ua_dev_list;
522 struct list_head ua_nacl_list;
523} ____cacheline_aligned;
524
525struct se_node_acl {
526 char initiatorname[TRANSPORT_IQN_LEN];
527
528 bool dynamic_node_acl;
529 u32 queue_depth;
530 u32 acl_index;
531 u64 num_cmds;
532 u64 read_bytes;
533 u64 write_bytes;
534 spinlock_t stats_lock;
535
536 atomic_t acl_pr_ref_count;
537 struct se_dev_entry *device_list;
538 struct se_session *nacl_sess;
539 struct se_portal_group *se_tpg;
540 spinlock_t device_list_lock;
541 spinlock_t nacl_sess_lock;
542 struct config_group acl_group;
543 struct config_group acl_attrib_group;
544 struct config_group acl_auth_group;
545 struct config_group acl_param_group;
546 struct config_group acl_fabric_stat_group;
547 struct config_group *acl_default_groups[5];
548 struct list_head acl_list;
549 struct list_head acl_sess_list;
550} ____cacheline_aligned;
551
552struct se_session {
553 unsigned sess_tearing_down:1;
554 u64 sess_bin_isid;
555 struct se_node_acl *se_node_acl;
556 struct se_portal_group *se_tpg;
557 void *fabric_sess_ptr;
558 struct list_head sess_list;
559 struct list_head sess_acl_list;
560 struct list_head sess_cmd_list;
561 struct list_head sess_wait_list;
562 spinlock_t sess_cmd_lock;
563} ____cacheline_aligned;
564
565struct se_device;
566struct se_transform_info;
567struct scatterlist;
568
569struct se_ml_stat_grps {
570 struct config_group stat_group;
571 struct config_group scsi_auth_intr_group;
572 struct config_group scsi_att_intr_port_group;
573};
574
575struct se_lun_acl {
576 char initiatorname[TRANSPORT_IQN_LEN];
577 u32 mapped_lun;
578 struct se_node_acl *se_lun_nacl;
579 struct se_lun *se_lun;
580 struct list_head lacl_list;
581 struct config_group se_lun_group;
582 struct se_ml_stat_grps ml_stat_grps;
583} ____cacheline_aligned;
584
585struct se_dev_entry {
586 bool def_pr_registered;
587
588 u32 lun_flags;
589 u32 deve_cmds;
590 u32 mapped_lun;
591 u32 average_bytes;
592 u32 last_byte_count;
593 u32 total_cmds;
594 u32 total_bytes;
595 u64 pr_res_key;
596 u64 creation_time;
597 u32 attach_count;
598 u64 read_bytes;
599 u64 write_bytes;
600 atomic_t ua_count;
601
602 atomic_t pr_ref_count;
603 struct se_lun_acl *se_lun_acl;
604 spinlock_t ua_lock;
605 struct se_lun *se_lun;
606 struct list_head alua_port_list;
607 struct list_head ua_list;
608} ____cacheline_aligned;
609
610struct se_dev_limits {
611
612 u32 hw_queue_depth;
613
614 u32 queue_depth;
615
616 struct queue_limits limits;
617} ____cacheline_aligned;
618
619struct se_dev_attrib {
620 int emulate_dpo;
621 int emulate_fua_write;
622 int emulate_fua_read;
623 int emulate_write_cache;
624 int emulate_ua_intlck_ctrl;
625 int emulate_tas;
626 int emulate_tpu;
627 int emulate_tpws;
628 int emulate_reservations;
629 int emulate_alua;
630 int enforce_pr_isids;
631 int is_nonrot;
632 int emulate_rest_reord;
633 u32 hw_block_size;
634 u32 block_size;
635 u32 hw_max_sectors;
636 u32 max_sectors;
637 u32 optimal_sectors;
638 u32 hw_queue_depth;
639 u32 queue_depth;
640 u32 max_unmap_lba_count;
641 u32 max_unmap_block_desc_count;
642 u32 unmap_granularity;
643 u32 unmap_granularity_alignment;
644 struct se_subsystem_dev *da_sub_dev;
645 struct config_group da_group;
646} ____cacheline_aligned;
647
648struct se_dev_stat_grps {
649 struct config_group stat_group;
650 struct config_group scsi_dev_group;
651 struct config_group scsi_tgt_dev_group;
652 struct config_group scsi_lu_group;
653};
654
655struct se_subsystem_dev {
656
657#define SE_DEV_ALIAS_LEN 512
658 unsigned char se_dev_alias[SE_DEV_ALIAS_LEN];
659
660#define SE_UDEV_PATH_LEN 512
661 unsigned char se_dev_udev_path[SE_UDEV_PATH_LEN];
662 u32 su_dev_flags;
663 struct se_hba *se_dev_hba;
664 struct se_device *se_dev_ptr;
665 struct se_dev_attrib se_dev_attrib;
666
667 struct t10_alua t10_alua;
668
669 struct t10_wwn t10_wwn;
670
671 struct t10_reservation t10_pr;
672 spinlock_t se_dev_lock;
673 void *se_dev_su_ptr;
674 struct config_group se_dev_group;
675
676 struct config_group se_dev_pr_group;
677
678 struct se_dev_stat_grps dev_stat_grps;
679} ____cacheline_aligned;
680
681struct se_device {
682
683 u16 dev_rpti_counter;
684
685 u32 dev_cur_ordered_id;
686 u32 dev_flags;
687 u32 dev_port_count;
688
689 u32 dev_status;
690 u32 dev_tcq_window_closed;
691
692 u32 queue_depth;
693
694 u64 dev_res_bin_isid;
695 t10_task_attr_index_t dev_task_attr_type;
696
697 void *dev_ptr;
698 u32 dev_index;
699 u64 creation_time;
700 u32 num_resets;
701 u64 num_cmds;
702 u64 read_bytes;
703 u64 write_bytes;
704 spinlock_t stats_lock;
705
706 atomic_t simple_cmds;
707 atomic_t depth_left;
708 atomic_t dev_ordered_id;
709 atomic_t execute_tasks;
710 atomic_t dev_ordered_sync;
711 atomic_t dev_qf_count;
712 struct se_obj dev_obj;
713 struct se_obj dev_access_obj;
714 struct se_obj dev_export_obj;
715 struct se_queue_obj dev_queue_obj;
716 spinlock_t delayed_cmd_lock;
717 spinlock_t execute_task_lock;
718 spinlock_t dev_reservation_lock;
719 spinlock_t dev_status_lock;
720 spinlock_t se_port_lock;
721 spinlock_t se_tmr_lock;
722 spinlock_t qf_cmd_lock;
723
724 struct se_node_acl *dev_reserved_node_acl;
725
726 struct t10_alua_lu_gp_member *dev_alua_lu_gp_mem;
727
728 struct t10_pr_registration *dev_pr_res_holder;
729 struct list_head dev_sep_list;
730 struct list_head dev_tmr_list;
731
732 struct task_struct *process_thread;
733 struct work_struct qf_work_queue;
734 struct list_head delayed_cmd_list;
735 struct list_head execute_task_list;
736 struct list_head state_task_list;
737 struct list_head qf_cmd_list;
738
739 struct se_hba *se_hba;
740 struct se_subsystem_dev *se_sub_dev;
741
742 struct se_subsystem_api *transport;
743
744 struct list_head dev_list;
745} ____cacheline_aligned;
746
747struct se_hba {
748 u16 hba_tpgt;
749 u32 hba_id;
750
751 u32 hba_flags;
752
753 u32 dev_count;
754 u32 hba_index;
755
756 void *hba_ptr;
757
758 struct list_head hba_dev_list;
759 struct list_head hba_node;
760 spinlock_t device_lock;
761 struct config_group hba_group;
762 struct mutex hba_access_mutex;
763 struct se_subsystem_api *transport;
764} ____cacheline_aligned;
765
766struct se_port_stat_grps {
767 struct config_group stat_group;
768 struct config_group scsi_port_group;
769 struct config_group scsi_tgt_port_group;
770 struct config_group scsi_transport_group;
771};
772
773struct se_lun {
774
775 enum transport_lun_status_table lun_status;
776 u32 lun_access;
777 u32 lun_flags;
778 u32 unpacked_lun;
779 atomic_t lun_acl_count;
780 spinlock_t lun_acl_lock;
781 spinlock_t lun_cmd_lock;
782 spinlock_t lun_sep_lock;
783 struct completion lun_shutdown_comp;
784 struct list_head lun_cmd_list;
785 struct list_head lun_acl_list;
786 struct se_device *lun_se_dev;
787 struct se_port *lun_sep;
788 struct config_group lun_group;
789 struct se_port_stat_grps port_stat_grps;
790} ____cacheline_aligned;
791
792struct scsi_port_stats {
793 u64 cmd_pdus;
794 u64 tx_data_octets;
795 u64 rx_data_octets;
796} ____cacheline_aligned;
797
798struct se_port {
799
800 u16 sep_rtpi;
801 int sep_tg_pt_secondary_stat;
802 int sep_tg_pt_secondary_write_md;
803 u32 sep_index;
804 struct scsi_port_stats sep_stats;
805
806 atomic_t sep_tg_pt_secondary_offline;
807
808 atomic_t sep_tg_pt_ref_cnt;
809 spinlock_t sep_alua_lock;
810 struct mutex sep_tg_pt_md_mutex;
811 struct t10_alua_tg_pt_gp_member *sep_alua_tg_pt_gp_mem;
812 struct se_lun *sep_lun;
813 struct se_portal_group *sep_tpg;
814 struct list_head sep_alua_list;
815 struct list_head sep_list;
816} ____cacheline_aligned;
817
818struct se_tpg_np {
819 struct se_portal_group *tpg_np_parent;
820 struct config_group tpg_np_group;
821} ____cacheline_aligned;
822
823struct se_portal_group {
824
825 enum transport_tpg_type_table se_tpg_type;
826
827 u32 num_node_acls;
828
829 atomic_t tpg_pr_ref_count;
830
831 spinlock_t acl_node_lock;
832
833 spinlock_t session_lock;
834 spinlock_t tpg_lun_lock;
835
836 void *se_tpg_fabric_ptr;
837 struct list_head se_tpg_node;
838
839 struct list_head acl_node_list;
840 struct se_lun *tpg_lun_list;
841 struct se_lun tpg_virt_lun0;
842
843 struct list_head tpg_sess_list;
844
845 struct target_core_fabric_ops *se_tpg_tfo;
846 struct se_wwn *se_tpg_wwn;
847 struct config_group tpg_group;
848 struct config_group *tpg_default_groups[6];
849 struct config_group tpg_lun_group;
850 struct config_group tpg_np_group;
851 struct config_group tpg_acl_group;
852 struct config_group tpg_attrib_group;
853 struct config_group tpg_param_group;
854} ____cacheline_aligned;
855
856struct se_wwn {
857 struct target_fabric_configfs *wwn_tf;
858 struct config_group wwn_group;
859 struct config_group *wwn_default_groups[2];
860 struct config_group fabric_stat_group;
861} ____cacheline_aligned;
862
863#endif
864