Various sysfs related fixes
[mirror/scst/.git] / iscsi-scst / include / iscsi_scst.h
1 /*
2  *  Copyright (C) 2007 - 2009 Vladislav Bolkhovitin
3  *  Copyright (C) 2007 - 2009 ID7 Ltd.
4  *
5  *  This program is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU General Public License
7  *  as published by the Free Software Foundation, version 2
8  *  of the License.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  */
15
16 #ifndef _ISCSI_SCST_U_H
17 #define _ISCSI_SCST_U_H
18
19 #ifndef __KERNEL__
20 #include <sys/uio.h>
21 #endif
22
23 #include "iscsi_scst_ver.h"
24 #include "iscsi_scst_itf_ver.h"
25
26 /* The maximum length of 223 bytes in the RFC. */
27 #define ISCSI_NAME_LEN          256
28
29 #define ISCSI_LISTEN_PORT       3260
30
31 #define SCSI_ID_LEN             24
32
33 #ifndef aligned_u64
34 #define aligned_u64 uint64_t __attribute__((aligned(8)))
35 #endif
36
37 struct iscsi_kern_target_info {
38         u32 tid;
39         char name[ISCSI_NAME_LEN];
40 };
41
42 struct iscsi_kern_session_info {
43         u32 tid;
44
45         aligned_u64 sid;
46         char initiator_name[ISCSI_NAME_LEN];
47         char user_name[ISCSI_NAME_LEN];
48         u32 exp_cmd_sn;
49 };
50
51 #define DIGEST_ALL              (DIGEST_NONE | DIGEST_CRC32C)
52 #define DIGEST_NONE             (1 << 0)
53 #define DIGEST_CRC32C           (1 << 1)
54
55 struct iscsi_kern_conn_info {
56         u32 tid;
57         aligned_u64 sid;
58
59         u32 cid;
60         u32 stat_sn;
61         u32 exp_stat_sn;
62         int fd;
63 };
64
65 enum {
66         key_initial_r2t,
67         key_immediate_data,
68         key_max_connections,
69         key_max_recv_data_length,
70         key_max_xmit_data_length,
71         key_max_burst_length,
72         key_first_burst_length,
73         key_default_wait_time,
74         key_default_retain_time,
75         key_max_outstanding_r2t,
76         key_data_pdu_inorder,
77         key_data_sequence_inorder,
78         key_error_recovery_level,
79         key_header_digest,
80         key_data_digest,
81         key_ofmarker,
82         key_ifmarker,
83         key_ofmarkint,
84         key_ifmarkint,
85         session_key_last,
86 };
87
88 enum {
89         key_queued_cmnds,
90         target_key_last,
91 };
92
93 enum {
94         key_session,
95         key_target,
96 };
97
98 struct iscsi_kern_param_info {
99         u32 tid;
100         aligned_u64 sid;
101
102         u32 param_type;
103         u32 partial;
104
105         s32 session_param[session_key_last];
106         s32 target_param[target_key_last];
107 };
108
109 enum iscsi_kern_event_state {
110         E_CONN_CLOSE,
111 };
112
113 struct iscsi_kern_event {
114         u32 tid;
115         aligned_u64 sid;
116         u32 cid;
117         u32 state;
118 };
119
120 struct iscsi_kern_register_info {
121         aligned_u64 version;
122 };
123
124 #define DEFAULT_NR_QUEUED_CMNDS 32
125 #define MIN_NR_QUEUED_CMNDS     1
126 #define MAX_NR_QUEUED_CMNDS     256
127
128 #define NETLINK_ISCSI_SCST      25
129
130 /* On success returns MAX_DATA_SEG_LEN */
131 #define REGISTER_USERD          _IOW('s', 0, struct iscsi_kern_register_info)
132
133 #define ADD_TARGET              _IOW('s', 1, struct iscsi_kern_target_info)
134 #define DEL_TARGET              _IOW('s', 2, struct iscsi_kern_target_info)
135 #define ADD_SESSION             _IOW('s', 3, struct iscsi_kern_session_info)
136 #define DEL_SESSION             _IOW('s', 4, struct iscsi_kern_session_info)
137 #define ADD_CONN                _IOW('s', 5, struct iscsi_kern_conn_info)
138 #define DEL_CONN                _IOW('s', 6, struct iscsi_kern_conn_info)
139 #define ISCSI_PARAM_SET         _IOW('s', 7, struct iscsi_kern_param_info)
140 #define ISCSI_PARAM_GET         _IOWR('s', 8, struct iscsi_kern_param_info)
141
142 static inline int iscsi_is_key_internal(int key)
143 {
144         switch (key) {
145         case key_max_xmit_data_length:
146                 return 1;
147         default:
148                 return 0;
149         }
150 }
151
152 #endif