mbim.h revision 1.1.4.2 1 1.1.4.2 pgoyette /* $OpenBSD: mbim.h,v 1.4 2017/04/18 13:27:55 gerhard Exp $ */
2 1.1.4.2 pgoyette
3 1.1.4.2 pgoyette /*
4 1.1.4.2 pgoyette * Copyright (c) 2016 genua mbH
5 1.1.4.2 pgoyette * All rights reserved.
6 1.1.4.2 pgoyette *
7 1.1.4.2 pgoyette * Permission to use, copy, modify, and distribute this software for any
8 1.1.4.2 pgoyette * purpose with or without fee is hereby granted, provided that the above
9 1.1.4.2 pgoyette * copyright notice and this permission notice appear in all copies.
10 1.1.4.2 pgoyette *
11 1.1.4.2 pgoyette * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 1.1.4.2 pgoyette * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 1.1.4.2 pgoyette * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 1.1.4.2 pgoyette * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 1.1.4.2 pgoyette * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 1.1.4.2 pgoyette * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 1.1.4.2 pgoyette * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 1.1.4.2 pgoyette */
19 1.1.4.2 pgoyette
20 1.1.4.2 pgoyette /*
21 1.1.4.2 pgoyette * Mobile Broadband Interface Model
22 1.1.4.2 pgoyette * http://www.usb.org/developers/docs/devclass_docs/MBIM-Compliance-1.0.pdf
23 1.1.4.2 pgoyette */
24 1.1.4.2 pgoyette #ifndef _MBIM_H_
25 1.1.4.2 pgoyette #define _MBIM_H_
26 1.1.4.2 pgoyette
27 1.1.4.2 pgoyette #define UDESCSUB_MBIM 27
28 1.1.4.2 pgoyette #define MBIM_INTERFACE_ALTSETTING 1
29 1.1.4.2 pgoyette
30 1.1.4.2 pgoyette #define MBIM_RESET_FUNCTION 0x05
31 1.1.4.2 pgoyette
32 1.1.4.2 pgoyette /*
33 1.1.4.2 pgoyette * Registration state (MBIM_REGISTER_STATE)
34 1.1.4.2 pgoyette */
35 1.1.4.2 pgoyette #define MBIM_REGSTATE_UNKNOWN 0
36 1.1.4.2 pgoyette #define MBIM_REGSTATE_DEREGISTERED 1
37 1.1.4.2 pgoyette #define MBIM_REGSTATE_SEARCHING 2
38 1.1.4.2 pgoyette #define MBIM_REGSTATE_HOME 3
39 1.1.4.2 pgoyette #define MBIM_REGSTATE_ROAMING 4
40 1.1.4.2 pgoyette #define MBIM_REGSTATE_PARTNER 5
41 1.1.4.2 pgoyette #define MBIM_REGSTATE_DENIED 6
42 1.1.4.2 pgoyette
43 1.1.4.2 pgoyette /*
44 1.1.4.2 pgoyette * Data classes mask (MBIM_DATA_CLASS)
45 1.1.4.2 pgoyette */
46 1.1.4.2 pgoyette #define MBIM_DATACLASS_NONE 0x00000000
47 1.1.4.2 pgoyette #define MBIM_DATACLASS_GPRS 0x00000001
48 1.1.4.2 pgoyette #define MBIM_DATACLASS_EDGE 0x00000002
49 1.1.4.2 pgoyette #define MBIM_DATACLASS_UMTS 0x00000004
50 1.1.4.2 pgoyette #define MBIM_DATACLASS_HSDPA 0x00000008
51 1.1.4.2 pgoyette #define MBIM_DATACLASS_HSUPA 0x00000010
52 1.1.4.2 pgoyette #define MBIM_DATACLASS_LTE 0x00000020
53 1.1.4.2 pgoyette #define MBIM_DATACLASS_1XRTT 0x00010000
54 1.1.4.2 pgoyette #define MBIM_DATACLASS_1XEVDO 0x00020000
55 1.1.4.2 pgoyette #define MBIM_DATACLASS_1XEVDO_REV_A 0x00040000
56 1.1.4.2 pgoyette #define MBIM_DATACLASS_1XEVDV 0x00080000
57 1.1.4.2 pgoyette #define MBIM_DATACLASS_3XRTT 0x00100000
58 1.1.4.2 pgoyette #define MBIM_DATACLASS_1XEVDO_REV_B 0x00200000
59 1.1.4.2 pgoyette #define MBIM_DATACLASS_UMB 0x00400000
60 1.1.4.2 pgoyette #define MBIM_DATACLASS_CUSTOM 0x80000000
61 1.1.4.2 pgoyette
62 1.1.4.2 pgoyette /*
63 1.1.4.2 pgoyette * Cell classes mask (MBIM_CELLULAR_CLASS)
64 1.1.4.2 pgoyette */
65 1.1.4.2 pgoyette #define MBIM_CELLCLASS_GSM 0x00000001
66 1.1.4.2 pgoyette #define MBIM_CELLCLASS_CDMA 0x00000002
67 1.1.4.2 pgoyette
68 1.1.4.2 pgoyette /*
69 1.1.4.2 pgoyette * UUIDs
70 1.1.4.2 pgoyette */
71 1.1.4.2 pgoyette #define MBIM_UUID_LEN 16
72 1.1.4.2 pgoyette
73 1.1.4.2 pgoyette #define MBIM_UUID_BASIC_CONNECT { \
74 1.1.4.2 pgoyette 0xa2, 0x89, 0xcc, 0x33, 0xbc, 0xbb, 0x8b, 0x4f, \
75 1.1.4.2 pgoyette 0xb6, 0xb0, 0x13, 0x3e, 0xc2, 0xaa, 0xe6, 0xdf \
76 1.1.4.2 pgoyette }
77 1.1.4.2 pgoyette
78 1.1.4.2 pgoyette #define MBIM_UUID_CONTEXT_INTERNET { \
79 1.1.4.2 pgoyette 0x7e, 0x5e, 0x2a, 0x7e, 0x4e, 0x6f, 0x72, 0x72, \
80 1.1.4.2 pgoyette 0x73, 0x6b, 0x65, 0x6e, 0x7e, 0x5e, 0x2a, 0x7e \
81 1.1.4.2 pgoyette }
82 1.1.4.2 pgoyette
83 1.1.4.2 pgoyette #define MBIM_UUID_CONTEXT_VPN { \
84 1.1.4.2 pgoyette 0x9b, 0x9f, 0x7b, 0xbe, 0x89, 0x52, 0x44, 0xb7, \
85 1.1.4.2 pgoyette 0x83, 0xac, 0xca, 0x41, 0x31, 0x8d, 0xf7, 0xa0 \
86 1.1.4.2 pgoyette }
87 1.1.4.2 pgoyette
88 1.1.4.2 pgoyette #define MBIM_UUID_QMI_MBIM { \
89 1.1.4.2 pgoyette 0xd1, 0xa3, 0x0b, 0xc2, 0xf9, 0x7a, 0x6e, 0x43, \
90 1.1.4.2 pgoyette 0xbf, 0x65, 0xc7, 0xe2, 0x4f, 0xb0, 0xf0, 0xd3 \
91 1.1.4.2 pgoyette }
92 1.1.4.2 pgoyette
93 1.1.4.2 pgoyette #define MBIM_CTRLMSG_MINLEN 64
94 1.1.4.2 pgoyette #define MBIM_CTRLMSG_MAXLEN (4 * 1204)
95 1.1.4.2 pgoyette
96 1.1.4.2 pgoyette #define MBIM_MAXSEGSZ_MINVAL (2 * 1024)
97 1.1.4.2 pgoyette
98 1.1.4.2 pgoyette /*
99 1.1.4.2 pgoyette * Control messages (host to function)
100 1.1.4.2 pgoyette */
101 1.1.4.2 pgoyette #define MBIM_OPEN_MSG 1U
102 1.1.4.2 pgoyette #define MBIM_CLOSE_MSG 2U
103 1.1.4.2 pgoyette #define MBIM_COMMAND_MSG 3U
104 1.1.4.2 pgoyette #define MBIM_HOST_ERROR_MSG 4U
105 1.1.4.2 pgoyette
106 1.1.4.2 pgoyette /*
107 1.1.4.2 pgoyette * Control messages (function to host)
108 1.1.4.2 pgoyette */
109 1.1.4.2 pgoyette #define MBIM_OPEN_DONE 0x80000001U
110 1.1.4.2 pgoyette #define MBIM_CLOSE_DONE 0x80000002U
111 1.1.4.2 pgoyette #define MBIM_COMMAND_DONE 0x80000003U
112 1.1.4.2 pgoyette #define MBIM_FUNCTION_ERROR_MSG 0x80000004U
113 1.1.4.2 pgoyette #define MBIM_INDICATE_STATUS_MSG 0x80000007U
114 1.1.4.2 pgoyette
115 1.1.4.2 pgoyette /*
116 1.1.4.2 pgoyette * Generic status codes
117 1.1.4.2 pgoyette */
118 1.1.4.2 pgoyette #define MBIM_STATUS_SUCCESS 0
119 1.1.4.2 pgoyette #define MBIM_STATUS_BUSY 1
120 1.1.4.2 pgoyette #define MBIM_STATUS_FAILURE 2
121 1.1.4.2 pgoyette #define MBIM_STATUS_SIM_NOT_INSERTED 3
122 1.1.4.2 pgoyette #define MBIM_STATUS_BAD_SIM 4
123 1.1.4.2 pgoyette #define MBIM_STATUS_PIN_REQUIRED 5
124 1.1.4.2 pgoyette #define MBIM_STATUS_PIN_DISABLED 6
125 1.1.4.2 pgoyette #define MBIM_STATUS_NOT_REGISTERED 7
126 1.1.4.2 pgoyette #define MBIM_STATUS_PROVIDERS_NOT_FOUND 8
127 1.1.4.2 pgoyette #define MBIM_STATUS_NO_DEVICE_SUPPORT 9
128 1.1.4.2 pgoyette #define MBIM_STATUS_PROVIDER_NOT_VISIBLE 10
129 1.1.4.2 pgoyette #define MBIM_STATUS_DATA_CLASS_NOT_AVAILABLE 11
130 1.1.4.2 pgoyette #define MBIM_STATUS_PACKET_SERVICE_DETACHED 12
131 1.1.4.2 pgoyette #define MBIM_STATUS_MAX_ACTIVATED_CONTEXTS 13
132 1.1.4.2 pgoyette #define MBIM_STATUS_NOT_INITIALIZED 14
133 1.1.4.2 pgoyette #define MBIM_STATUS_VOICE_CALL_IN_PROGRESS 15
134 1.1.4.2 pgoyette #define MBIM_STATUS_CONTEXT_NOT_ACTIVATED 16
135 1.1.4.2 pgoyette #define MBIM_STATUS_SERVICE_NOT_ACTIVATED 17
136 1.1.4.2 pgoyette #define MBIM_STATUS_INVALID_ACCESS_STRING 18
137 1.1.4.2 pgoyette #define MBIM_STATUS_INVALID_USER_NAME_PWD 19
138 1.1.4.2 pgoyette #define MBIM_STATUS_RADIO_POWER_OFF 20
139 1.1.4.2 pgoyette #define MBIM_STATUS_INVALID_PARAMETERS 21
140 1.1.4.2 pgoyette #define MBIM_STATUS_READ_FAILURE 22
141 1.1.4.2 pgoyette #define MBIM_STATUS_WRITE_FAILURE 23
142 1.1.4.2 pgoyette #define MBIM_STATUS_NO_PHONEBOOK 25
143 1.1.4.2 pgoyette #define MBIM_STATUS_PARAMETER_TOO_LONG 26
144 1.1.4.2 pgoyette #define MBIM_STATUS_STK_BUSY 27
145 1.1.4.2 pgoyette #define MBIM_STATUS_OPERATION_NOT_ALLOWED 28
146 1.1.4.2 pgoyette #define MBIM_STATUS_MEMORY_FAILURE 29
147 1.1.4.2 pgoyette #define MBIM_STATUS_INVALID_MEMORY_INDEX 30
148 1.1.4.2 pgoyette #define MBIM_STATUS_MEMORY_FULL 31
149 1.1.4.2 pgoyette #define MBIM_STATUS_FILTER_NOT_SUPPORTED 32
150 1.1.4.2 pgoyette #define MBIM_STATUS_DSS_INSTANCE_LIMIT 33
151 1.1.4.2 pgoyette #define MBIM_STATUS_INVALID_DEVICE_SERVICE_OPERATION 34
152 1.1.4.2 pgoyette #define MBIM_STATUS_AUTH_INCORRECT_AUTN 35
153 1.1.4.2 pgoyette #define MBIM_STATUS_AUTH_SYNC_FAILURE 36
154 1.1.4.2 pgoyette #define MBIM_STATUS_AUTH_AMF_NOT_SET 37
155 1.1.4.2 pgoyette #define MBIM_STATUS_CONTEXT_NOT_SUPPORTED 38
156 1.1.4.2 pgoyette #define MBIM_STATUS_SMS_UNKNOWN_SMSC_ADDRESS 100
157 1.1.4.2 pgoyette #define MBIM_STATUS_SMS_NETWORK_TIMEOUT 101
158 1.1.4.2 pgoyette #define MBIM_STATUS_SMS_LANG_NOT_SUPPORTED 102
159 1.1.4.2 pgoyette #define MBIM_STATUS_SMS_ENCODING_NOT_SUPPORTED 103
160 1.1.4.2 pgoyette #define MBIM_STATUS_SMS_FORMAT_NOT_SUPPORTED 104
161 1.1.4.2 pgoyette
162 1.1.4.2 pgoyette /*
163 1.1.4.2 pgoyette * Message formats
164 1.1.4.2 pgoyette */
165 1.1.4.2 pgoyette struct mbim_msghdr {
166 1.1.4.2 pgoyette /* Msg header */
167 1.1.4.2 pgoyette uint32_t type; /* message type */
168 1.1.4.2 pgoyette uint32_t len; /* message length */
169 1.1.4.2 pgoyette uint32_t tid; /* transaction id */
170 1.1.4.2 pgoyette } __packed;
171 1.1.4.2 pgoyette
172 1.1.4.2 pgoyette struct mbim_fraghdr {
173 1.1.4.2 pgoyette uint32_t nfrag; /* total # of fragments */
174 1.1.4.2 pgoyette uint32_t currfrag; /* current fragment */
175 1.1.4.2 pgoyette } __packed;
176 1.1.4.2 pgoyette
177 1.1.4.2 pgoyette struct mbim_fragmented_msg_hdr {
178 1.1.4.2 pgoyette struct mbim_msghdr hdr;
179 1.1.4.2 pgoyette struct mbim_fraghdr frag;
180 1.1.4.2 pgoyette } __packed;
181 1.1.4.2 pgoyette
182 1.1.4.2 pgoyette struct mbim_h2f_openmsg {
183 1.1.4.2 pgoyette struct mbim_msghdr hdr;
184 1.1.4.2 pgoyette uint32_t maxlen;
185 1.1.4.2 pgoyette } __packed;
186 1.1.4.2 pgoyette
187 1.1.4.2 pgoyette struct mbim_h2f_closemsg {
188 1.1.4.2 pgoyette struct mbim_msghdr hdr;
189 1.1.4.2 pgoyette } __packed;
190 1.1.4.2 pgoyette
191 1.1.4.2 pgoyette struct mbim_h2f_cmd {
192 1.1.4.2 pgoyette struct mbim_msghdr hdr;
193 1.1.4.2 pgoyette struct mbim_fraghdr frag;
194 1.1.4.2 pgoyette uint8_t devid[MBIM_UUID_LEN];
195 1.1.4.2 pgoyette uint32_t cid; /* command id */
196 1.1.4.2 pgoyette #define MBIM_CMDOP_QRY 0
197 1.1.4.2 pgoyette #define MBIM_CMDOP_SET 1
198 1.1.4.2 pgoyette uint32_t op;
199 1.1.4.2 pgoyette uint32_t infolen;
200 1.1.4.2 pgoyette uint8_t info[];
201 1.1.4.2 pgoyette } __packed;
202 1.1.4.2 pgoyette
203 1.1.4.2 pgoyette struct mbim_f2h_indicate_status {
204 1.1.4.2 pgoyette struct mbim_msghdr hdr;
205 1.1.4.2 pgoyette struct mbim_fraghdr frag;
206 1.1.4.2 pgoyette uint8_t devid[MBIM_UUID_LEN];
207 1.1.4.2 pgoyette uint32_t cid; /* command id */
208 1.1.4.2 pgoyette uint32_t infolen;
209 1.1.4.2 pgoyette uint8_t info[];
210 1.1.4.2 pgoyette } __packed;
211 1.1.4.2 pgoyette
212 1.1.4.2 pgoyette struct mbim_f2h_hosterr {
213 1.1.4.2 pgoyette struct mbim_msghdr hdr;
214 1.1.4.2 pgoyette
215 1.1.4.2 pgoyette #define MBIM_ERROR_TIMEOUT_FRAGMENT 1
216 1.1.4.2 pgoyette #define MBIM_ERROR_FRAGMENT_OUT_OF_SEQUENCE 2
217 1.1.4.2 pgoyette #define MBIM_ERROR_LENGTH_MISMATCH 3
218 1.1.4.2 pgoyette #define MBIM_ERROR_DUPLICATED_TID 4
219 1.1.4.2 pgoyette #define MBIM_ERROR_NOT_OPENED 5
220 1.1.4.2 pgoyette #define MBIM_ERROR_UNKNOWN 6
221 1.1.4.2 pgoyette #define MBIM_ERROR_CANCEL 7
222 1.1.4.2 pgoyette #define MBIM_ERROR_MAX_TRANSFER 8
223 1.1.4.2 pgoyette uint32_t err;
224 1.1.4.2 pgoyette } __packed;
225 1.1.4.2 pgoyette
226 1.1.4.2 pgoyette struct mbim_f2h_openclosedone {
227 1.1.4.2 pgoyette struct mbim_msghdr hdr;
228 1.1.4.2 pgoyette int32_t status;
229 1.1.4.2 pgoyette } __packed;
230 1.1.4.2 pgoyette
231 1.1.4.2 pgoyette struct mbim_f2h_cmddone {
232 1.1.4.2 pgoyette struct mbim_msghdr hdr;
233 1.1.4.2 pgoyette struct mbim_fraghdr frag;
234 1.1.4.2 pgoyette uint8_t devid[MBIM_UUID_LEN];
235 1.1.4.2 pgoyette uint32_t cid; /* command id */
236 1.1.4.2 pgoyette int32_t status;
237 1.1.4.2 pgoyette uint32_t infolen;
238 1.1.4.2 pgoyette uint8_t info[];
239 1.1.4.2 pgoyette } __packed;
240 1.1.4.2 pgoyette
241 1.1.4.2 pgoyette /*
242 1.1.4.2 pgoyette * Messages and commands for MBIM_UUID_BASIC_CONNECT
243 1.1.4.2 pgoyette */
244 1.1.4.2 pgoyette #define MBIM_CID_DEVICE_CAPS 1
245 1.1.4.2 pgoyette #define MBIM_CID_SUBSCRIBER_READY_STATUS 2
246 1.1.4.2 pgoyette #define MBIM_CID_RADIO_STATE 3
247 1.1.4.2 pgoyette #define MBIM_CID_PIN 4
248 1.1.4.2 pgoyette #define MBIM_CID_PIN_LIST 5
249 1.1.4.2 pgoyette #define MBIM_CID_HOME_PROVIDER 6
250 1.1.4.2 pgoyette #define MBIM_CID_PREFERRED_PROVIDERS 7
251 1.1.4.2 pgoyette #define MBIM_CID_VISIBLE_PROVIDERS 8
252 1.1.4.2 pgoyette #define MBIM_CID_REGISTER_STATE 9
253 1.1.4.2 pgoyette #define MBIM_CID_PACKET_SERVICE 10
254 1.1.4.2 pgoyette #define MBIM_CID_SIGNAL_STATE 11
255 1.1.4.2 pgoyette #define MBIM_CID_CONNECT 12
256 1.1.4.2 pgoyette #define MBIM_CID_PROVISIONED_CONTEXTS 13
257 1.1.4.2 pgoyette #define MBIM_CID_SERVICE_ACTIVATION 14
258 1.1.4.2 pgoyette #define MBIM_CID_IP_CONFIGURATION 15
259 1.1.4.2 pgoyette #define MBIM_CID_DEVICE_SERVICES 16
260 1.1.4.2 pgoyette #define MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST 19
261 1.1.4.2 pgoyette #define MBIM_CID_PACKET_STATISTICS 20
262 1.1.4.2 pgoyette #define MBIM_CID_NETWORK_IDLE_HINT 21
263 1.1.4.2 pgoyette #define MBIM_CID_EMERGENCY_MODE 22
264 1.1.4.2 pgoyette #define MBIM_CID_IP_PACKET_FILTERS 23
265 1.1.4.2 pgoyette #define MBIM_CID_MULTICARRIER_PROVIDERS 24
266 1.1.4.2 pgoyette
267 1.1.4.2 pgoyette struct mbim_cid_subscriber_ready_info {
268 1.1.4.2 pgoyette #define MBIM_SIMSTATE_NOTINITIALIZED 0
269 1.1.4.2 pgoyette #define MBIM_SIMSTATE_INITIALIZED 1
270 1.1.4.2 pgoyette #define MBIM_SIMSTATE_NOTINSERTED 2
271 1.1.4.2 pgoyette #define MBIM_SIMSTATE_BADSIM 3
272 1.1.4.2 pgoyette #define MBIM_SIMSTATE_FAILURE 4
273 1.1.4.2 pgoyette #define MBIM_SIMSTATE_NOTACTIVATED 5
274 1.1.4.2 pgoyette #define MBIM_SIMSTATE_LOCKED 6
275 1.1.4.2 pgoyette uint32_t ready;
276 1.1.4.2 pgoyette
277 1.1.4.2 pgoyette uint32_t sid_offs;
278 1.1.4.2 pgoyette uint32_t sid_size;
279 1.1.4.2 pgoyette
280 1.1.4.2 pgoyette uint32_t icc_offs;
281 1.1.4.2 pgoyette uint32_t icc_size;
282 1.1.4.2 pgoyette
283 1.1.4.2 pgoyette #define MBIM_SIMUNIQEID_NONE 0
284 1.1.4.2 pgoyette #define MBIM_SIMUNIQEID_PROTECT 1
285 1.1.4.2 pgoyette uint32_t info;
286 1.1.4.2 pgoyette
287 1.1.4.2 pgoyette uint32_t no_pn;
288 1.1.4.2 pgoyette struct {
289 1.1.4.2 pgoyette uint32_t offs;
290 1.1.4.2 pgoyette uint32_t size;
291 1.1.4.2 pgoyette }
292 1.1.4.2 pgoyette pn[];
293 1.1.4.2 pgoyette } __packed;
294 1.1.4.2 pgoyette
295 1.1.4.2 pgoyette struct mbim_cid_radio_state {
296 1.1.4.2 pgoyette #define MBIM_RADIO_STATE_OFF 0
297 1.1.4.2 pgoyette #define MBIM_RADIO_STATE_ON 1
298 1.1.4.2 pgoyette uint32_t state;
299 1.1.4.2 pgoyette } __packed;
300 1.1.4.2 pgoyette
301 1.1.4.2 pgoyette struct mbim_cid_radio_state_info {
302 1.1.4.2 pgoyette uint32_t hw_state;
303 1.1.4.2 pgoyette uint32_t sw_state;
304 1.1.4.2 pgoyette } __packed;
305 1.1.4.2 pgoyette
306 1.1.4.2 pgoyette struct mbim_cid_pin {
307 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_NONE 0
308 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_CUSTOM 1
309 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_PIN1 2
310 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_PIN2 3
311 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_DEV_SIM_PIN 4
312 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PIN 5
313 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_NETWORK_PIN 6
314 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_NETWORK_SUBSET_PIN 7
315 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PIN 8
316 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_CORPORATE_PIN 9
317 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_SUBSIDY_LOCK 10
318 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_PUK1 11
319 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_PUK2 12
320 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PUK 13
321 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_NETWORK_PUK 14
322 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_NETWORK_SUBSET_PUK 15
323 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PUK 16
324 1.1.4.2 pgoyette #define MBIM_PIN_TYPE_CORPORATE_PUK 17
325 1.1.4.2 pgoyette uint32_t type;
326 1.1.4.2 pgoyette
327 1.1.4.2 pgoyette #define MBIM_PIN_OP_ENTER 0
328 1.1.4.2 pgoyette #define MBIM_PIN_OP_ENABLE 1
329 1.1.4.2 pgoyette #define MBIM_PIN_OP_DISABLE 2
330 1.1.4.2 pgoyette #define MBIM_PIN_OP_CHANGE 3
331 1.1.4.2 pgoyette uint32_t op;
332 1.1.4.2 pgoyette uint32_t pin_offs;
333 1.1.4.2 pgoyette uint32_t pin_size;
334 1.1.4.2 pgoyette uint32_t newpin_offs;
335 1.1.4.2 pgoyette uint32_t newpin_size;
336 1.1.4.2 pgoyette #define MBIM_PIN_MAXLEN 32
337 1.1.4.2 pgoyette uint8_t data[2 * MBIM_PIN_MAXLEN];
338 1.1.4.2 pgoyette } __packed;
339 1.1.4.2 pgoyette
340 1.1.4.2 pgoyette struct mbim_cid_pin_info {
341 1.1.4.2 pgoyette uint32_t type;
342 1.1.4.2 pgoyette
343 1.1.4.2 pgoyette #define MBIM_PIN_STATE_UNLOCKED 0
344 1.1.4.2 pgoyette #define MBIM_PIN_STATE_LOCKED 1
345 1.1.4.2 pgoyette uint32_t state;
346 1.1.4.2 pgoyette uint32_t remaining_attempts;
347 1.1.4.2 pgoyette } __packed;
348 1.1.4.2 pgoyette
349 1.1.4.2 pgoyette struct mbim_cid_pin_list_info {
350 1.1.4.2 pgoyette struct mbim_pin_desc {
351 1.1.4.2 pgoyette
352 1.1.4.2 pgoyette #define MBIM_PINMODE_NOTSUPPORTED 0
353 1.1.4.2 pgoyette #define MBIM_PINMODE_ENABLED 1
354 1.1.4.2 pgoyette #define MBIM_PINMODE_DISABLED 2
355 1.1.4.2 pgoyette uint32_t mode;
356 1.1.4.2 pgoyette
357 1.1.4.2 pgoyette #define MBIM_PINFORMAT_UNKNOWN 0
358 1.1.4.2 pgoyette #define MBIM_PINFORMAT_NUMERIC 1
359 1.1.4.2 pgoyette #define MBIM_PINFORMAT_ALPHANUMERIC 2
360 1.1.4.2 pgoyette uint32_t format;
361 1.1.4.2 pgoyette
362 1.1.4.2 pgoyette uint32_t minlen;
363 1.1.4.2 pgoyette uint32_t maxlen;
364 1.1.4.2 pgoyette }
365 1.1.4.2 pgoyette pin1,
366 1.1.4.2 pgoyette pin2,
367 1.1.4.2 pgoyette dev_sim_pin,
368 1.1.4.2 pgoyette first_dev_sim_pin,
369 1.1.4.2 pgoyette net_pin,
370 1.1.4.2 pgoyette net_sub_pin,
371 1.1.4.2 pgoyette svp_pin,
372 1.1.4.2 pgoyette corp_pin,
373 1.1.4.2 pgoyette subsidy_lock,
374 1.1.4.2 pgoyette custom;
375 1.1.4.2 pgoyette } __packed;
376 1.1.4.2 pgoyette
377 1.1.4.2 pgoyette struct mbim_cid_device_caps {
378 1.1.4.2 pgoyette #define MBIM_DEVTYPE_UNKNOWN 0
379 1.1.4.2 pgoyette #define MBIM_DEVTYPE_EMBEDDED 1
380 1.1.4.2 pgoyette #define MBIM_DEVTYPE_REMOVABLE 2
381 1.1.4.2 pgoyette #define MBIM_DEVTYPE_REMOTE 3
382 1.1.4.2 pgoyette uint32_t devtype;
383 1.1.4.2 pgoyette
384 1.1.4.2 pgoyette uint32_t cellclass; /* values: MBIM_CELLULAR_CLASS */
385 1.1.4.2 pgoyette uint32_t voiceclass;
386 1.1.4.2 pgoyette uint32_t simclass;
387 1.1.4.2 pgoyette uint32_t dataclass; /* values: MBIM_DATA_CLASS */
388 1.1.4.2 pgoyette uint32_t smscaps;
389 1.1.4.2 pgoyette uint32_t cntrlcaps;
390 1.1.4.2 pgoyette uint32_t max_sessions;
391 1.1.4.2 pgoyette
392 1.1.4.2 pgoyette uint32_t custdataclass_offs;
393 1.1.4.2 pgoyette uint32_t custdataclass_size;
394 1.1.4.2 pgoyette
395 1.1.4.2 pgoyette uint32_t devid_offs;
396 1.1.4.2 pgoyette uint32_t devid_size;
397 1.1.4.2 pgoyette
398 1.1.4.2 pgoyette uint32_t fwinfo_offs;
399 1.1.4.2 pgoyette uint32_t fwinfo_size;
400 1.1.4.2 pgoyette
401 1.1.4.2 pgoyette uint32_t hwinfo_offs;
402 1.1.4.2 pgoyette uint32_t hwinfo_size;
403 1.1.4.2 pgoyette
404 1.1.4.2 pgoyette uint32_t data[];
405 1.1.4.2 pgoyette } __packed;
406 1.1.4.2 pgoyette
407 1.1.4.2 pgoyette struct mbim_cid_registration_state {
408 1.1.4.2 pgoyette uint32_t provid_offs;
409 1.1.4.2 pgoyette uint32_t provid_size;
410 1.1.4.2 pgoyette
411 1.1.4.2 pgoyette #define MBIM_REGACTION_AUTOMATIC 0
412 1.1.4.2 pgoyette #define MBIM_REGACTION_MANUAL 1
413 1.1.4.2 pgoyette uint32_t regaction;
414 1.1.4.2 pgoyette uint32_t data_class;
415 1.1.4.2 pgoyette
416 1.1.4.2 pgoyette uint32_t data[];
417 1.1.4.2 pgoyette } __packed;
418 1.1.4.2 pgoyette
419 1.1.4.2 pgoyette struct mbim_cid_registration_state_info {
420 1.1.4.2 pgoyette uint32_t nwerror;
421 1.1.4.2 pgoyette
422 1.1.4.2 pgoyette uint32_t regstate; /* values: MBIM_REGISTER_STATE */
423 1.1.4.2 pgoyette
424 1.1.4.2 pgoyette #define MBIM_REGMODE_UNKNOWN 0
425 1.1.4.2 pgoyette #define MBIM_REGMODE_AUTOMATIC 1
426 1.1.4.2 pgoyette #define MBIM_REGMODE_MANUAL 2
427 1.1.4.2 pgoyette uint32_t regmode;
428 1.1.4.2 pgoyette
429 1.1.4.2 pgoyette uint32_t availclasses; /* values: MBIM_DATA_CLASS */
430 1.1.4.2 pgoyette uint32_t curcellclass; /* values: MBIM_CELLULAR_CLASS */
431 1.1.4.2 pgoyette
432 1.1.4.2 pgoyette uint32_t provid_offs;
433 1.1.4.2 pgoyette uint32_t provid_size;
434 1.1.4.2 pgoyette
435 1.1.4.2 pgoyette uint32_t provname_offs;
436 1.1.4.2 pgoyette uint32_t provname_size;
437 1.1.4.2 pgoyette
438 1.1.4.2 pgoyette uint32_t roamingtxt_offs;
439 1.1.4.2 pgoyette uint32_t roamingtxt_size;
440 1.1.4.2 pgoyette
441 1.1.4.2 pgoyette #define MBIM_REGFLAGS_NONE 0
442 1.1.4.2 pgoyette #define MBIM_REGFLAGS_MANUAL_NOT_AVAILABLE 1
443 1.1.4.2 pgoyette #define MBIM_REGFLAGS_PACKETSERVICE_AUTOATTACH 2
444 1.1.4.2 pgoyette uint32_t regflag;
445 1.1.4.2 pgoyette
446 1.1.4.2 pgoyette uint32_t data[];
447 1.1.4.2 pgoyette } __packed;
448 1.1.4.2 pgoyette
449 1.1.4.2 pgoyette struct mbim_cid_packet_service {
450 1.1.4.2 pgoyette #define MBIM_PKTSERVICE_ACTION_ATTACH 0
451 1.1.4.2 pgoyette #define MBIM_PKTSERVICE_ACTION_DETACH 1
452 1.1.4.2 pgoyette uint32_t action;
453 1.1.4.2 pgoyette } __packed;
454 1.1.4.2 pgoyette
455 1.1.4.2 pgoyette struct mbim_cid_packet_service_info {
456 1.1.4.2 pgoyette uint32_t nwerror;
457 1.1.4.2 pgoyette
458 1.1.4.2 pgoyette #define MBIM_PKTSERVICE_STATE_UNKNOWN 0
459 1.1.4.2 pgoyette #define MBIM_PKTSERVICE_STATE_ATTACHING 1
460 1.1.4.2 pgoyette #define MBIM_PKTSERVICE_STATE_ATTACHED 2
461 1.1.4.2 pgoyette #define MBIM_PKTSERVICE_STATE_DETACHING 3
462 1.1.4.2 pgoyette #define MBIM_PKTSERVICE_STATE_DETACHED 4
463 1.1.4.2 pgoyette uint32_t state;
464 1.1.4.2 pgoyette
465 1.1.4.2 pgoyette uint32_t highest_dataclass;
466 1.1.4.2 pgoyette uint64_t uplink_speed;
467 1.1.4.2 pgoyette uint64_t downlink_speed;
468 1.1.4.2 pgoyette } __packed;
469 1.1.4.2 pgoyette
470 1.1.4.2 pgoyette struct mbim_cid_signal_state {
471 1.1.4.2 pgoyette uint32_t rssi;
472 1.1.4.2 pgoyette uint32_t err_rate;
473 1.1.4.2 pgoyette uint32_t ss_intvl;
474 1.1.4.2 pgoyette uint32_t rssi_thr;
475 1.1.4.2 pgoyette uint32_t err_thr;
476 1.1.4.2 pgoyette } __packed;
477 1.1.4.2 pgoyette
478 1.1.4.2 pgoyette struct mbim_cid_connect {
479 1.1.4.2 pgoyette uint32_t sessionid;
480 1.1.4.2 pgoyette
481 1.1.4.2 pgoyette #define MBIM_CONNECT_DEACTIVATE 0
482 1.1.4.2 pgoyette #define MBIM_CONNECT_ACTIVATE 1
483 1.1.4.2 pgoyette uint32_t command;
484 1.1.4.2 pgoyette
485 1.1.4.2 pgoyette #define MBIM_ACCESS_MAXLEN 200
486 1.1.4.2 pgoyette uint32_t access_offs;
487 1.1.4.2 pgoyette uint32_t access_size;
488 1.1.4.2 pgoyette
489 1.1.4.2 pgoyette #define MBIM_USER_MAXLEN 510
490 1.1.4.2 pgoyette uint32_t user_offs;
491 1.1.4.2 pgoyette uint32_t user_size;
492 1.1.4.2 pgoyette
493 1.1.4.2 pgoyette #define MBIM_PASSWD_MAXLEN 510
494 1.1.4.2 pgoyette uint32_t passwd_offs;
495 1.1.4.2 pgoyette uint32_t passwd_size;
496 1.1.4.2 pgoyette
497 1.1.4.2 pgoyette #define MBIM_COMPRESSION_NONE 0
498 1.1.4.2 pgoyette #define MBIM_COMPRESSION_ENABLE 1
499 1.1.4.2 pgoyette uint32_t compression;
500 1.1.4.2 pgoyette
501 1.1.4.2 pgoyette #define MBIM_AUTHPROT_NONE 0
502 1.1.4.2 pgoyette #define MBIM_AUTHPROT_PAP 1
503 1.1.4.2 pgoyette #define MBIM_AUTHPROT_CHAP 2
504 1.1.4.2 pgoyette #define MBIM_AUTHPROT_MSCHAP 3
505 1.1.4.2 pgoyette uint32_t authprot;
506 1.1.4.2 pgoyette
507 1.1.4.2 pgoyette #define MBIM_CONTEXT_IPTYPE_DEFAULT 0
508 1.1.4.2 pgoyette #define MBIM_CONTEXT_IPTYPE_IPV4 1
509 1.1.4.2 pgoyette #define MBIM_CONTEXT_IPTYPE_IPV6 2
510 1.1.4.2 pgoyette #define MBIM_CONTEXT_IPTYPE_IPV4V6 3
511 1.1.4.2 pgoyette #define MBIM_CONTEXT_IPTYPE_IPV4ANDV6 4
512 1.1.4.2 pgoyette uint32_t iptype;
513 1.1.4.2 pgoyette
514 1.1.4.2 pgoyette uint8_t context[MBIM_UUID_LEN];
515 1.1.4.2 pgoyette
516 1.1.4.2 pgoyette uint8_t data[MBIM_ACCESS_MAXLEN + MBIM_USER_MAXLEN +
517 1.1.4.2 pgoyette MBIM_PASSWD_MAXLEN];
518 1.1.4.2 pgoyette
519 1.1.4.2 pgoyette } __packed;
520 1.1.4.2 pgoyette
521 1.1.4.2 pgoyette struct mbim_cid_connect_info {
522 1.1.4.2 pgoyette uint32_t sessionid;
523 1.1.4.2 pgoyette
524 1.1.4.2 pgoyette #define MBIM_ACTIVATION_STATE_UNKNOWN 0
525 1.1.4.2 pgoyette #define MBIM_ACTIVATION_STATE_ACTIVATED 1
526 1.1.4.2 pgoyette #define MBIM_ACTIVATION_STATE_ACTIVATING 2
527 1.1.4.2 pgoyette #define MBIM_ACTIVATION_STATE_DEACTIVATED 3
528 1.1.4.2 pgoyette #define MBIM_ACTIVATION_STATE_DEACTIVATING 4
529 1.1.4.2 pgoyette uint32_t activation;
530 1.1.4.2 pgoyette
531 1.1.4.2 pgoyette uint32_t voice;
532 1.1.4.2 pgoyette uint32_t iptype;
533 1.1.4.2 pgoyette uint8_t context[MBIM_UUID_LEN];
534 1.1.4.2 pgoyette uint32_t nwerror;
535 1.1.4.2 pgoyette } __packed;
536 1.1.4.2 pgoyette
537 1.1.4.2 pgoyette struct mbim_cid_ipv4_element {
538 1.1.4.2 pgoyette uint32_t prefixlen;
539 1.1.4.2 pgoyette uint32_t addr;
540 1.1.4.2 pgoyette } __packed;
541 1.1.4.2 pgoyette
542 1.1.4.2 pgoyette struct mbim_cid_ipv6_element {
543 1.1.4.2 pgoyette uint32_t prefixlen;
544 1.1.4.2 pgoyette uint8_t addr[16];
545 1.1.4.2 pgoyette } __packed;
546 1.1.4.2 pgoyette
547 1.1.4.2 pgoyette struct mbim_cid_ip_configuration_info {
548 1.1.4.2 pgoyette uint32_t sessionid;
549 1.1.4.2 pgoyette
550 1.1.4.2 pgoyette #define MBIM_IPCONF_HAS_ADDRINFO 0x0001
551 1.1.4.2 pgoyette #define MBIM_IPCONF_HAS_GWINFO 0x0002
552 1.1.4.2 pgoyette #define MBIM_IPCONF_HAS_DNSINFO 0x0004
553 1.1.4.2 pgoyette #define MBIM_IPCONF_HAS_MTUINFO 0x0008
554 1.1.4.2 pgoyette uint32_t ipv4_available;
555 1.1.4.2 pgoyette uint32_t ipv6_available;
556 1.1.4.2 pgoyette
557 1.1.4.2 pgoyette uint32_t ipv4_naddr;
558 1.1.4.2 pgoyette uint32_t ipv4_addroffs;
559 1.1.4.2 pgoyette uint32_t ipv6_naddr;
560 1.1.4.2 pgoyette uint32_t ipv6_addroffs;
561 1.1.4.2 pgoyette
562 1.1.4.2 pgoyette uint32_t ipv4_gwoffs;
563 1.1.4.2 pgoyette uint32_t ipv6_gwoffs;
564 1.1.4.2 pgoyette
565 1.1.4.2 pgoyette uint32_t ipv4_ndnssrv;
566 1.1.4.2 pgoyette uint32_t ipv4_dnssrvoffs;
567 1.1.4.2 pgoyette uint32_t ipv6_ndnssrv;
568 1.1.4.2 pgoyette uint32_t ipv6_dnssrvoffs;
569 1.1.4.2 pgoyette
570 1.1.4.2 pgoyette uint32_t ipv4_mtu;
571 1.1.4.2 pgoyette uint32_t ipv6_mtu;
572 1.1.4.2 pgoyette
573 1.1.4.2 pgoyette uint32_t data[];
574 1.1.4.2 pgoyette } __packed;
575 1.1.4.2 pgoyette
576 1.1.4.2 pgoyette struct mbim_cid_packet_statistics_info {
577 1.1.4.2 pgoyette uint32_t in_discards;
578 1.1.4.2 pgoyette uint32_t in_errors;
579 1.1.4.2 pgoyette uint64_t in_octets;
580 1.1.4.2 pgoyette uint64_t in_packets;
581 1.1.4.2 pgoyette uint64_t out_octets;
582 1.1.4.2 pgoyette uint64_t out_packets;
583 1.1.4.2 pgoyette uint32_t out_errors;
584 1.1.4.2 pgoyette uint32_t out_discards;
585 1.1.4.2 pgoyette } __packed;
586 1.1.4.2 pgoyette
587 1.1.4.2 pgoyette
588 1.1.4.2 pgoyette #ifdef _KERNEL
589 1.1.4.2 pgoyette
590 1.1.4.2 pgoyette struct mbim_descriptor {
591 1.1.4.2 pgoyette uByte bLength;
592 1.1.4.2 pgoyette uByte bDescriptorType;
593 1.1.4.2 pgoyette uByte bDescriptorSubtype;
594 1.1.4.2 pgoyette #define MBIM_VER_MAJOR(v) (((v) >> 8) & 0x0f)
595 1.1.4.2 pgoyette #define MBIM_VER_MINOR(v) ((v) & 0x0f)
596 1.1.4.2 pgoyette uWord bcdMBIMVersion;
597 1.1.4.2 pgoyette uWord wMaxControlMessage;
598 1.1.4.2 pgoyette uByte bNumberFilters;
599 1.1.4.2 pgoyette uByte bMaxFilterSize;
600 1.1.4.2 pgoyette uWord wMaxSegmentSize;
601 1.1.4.2 pgoyette uByte bmNetworkCapabilities;
602 1.1.4.2 pgoyette } __packed;
603 1.1.4.2 pgoyette
604 1.1.4.2 pgoyette /*
605 1.1.4.2 pgoyette * NCM Parameters
606 1.1.4.2 pgoyette */
607 1.1.4.2 pgoyette #define NCM_GET_NTB_PARAMETERS 0x80
608 1.1.4.2 pgoyette
609 1.1.4.2 pgoyette struct ncm_ntb_parameters {
610 1.1.4.2 pgoyette uWord wLength;
611 1.1.4.2 pgoyette uWord bmNtbFormatsSupported;
612 1.1.4.2 pgoyette #define NCM_FORMAT_NTB16 0x0001
613 1.1.4.2 pgoyette #define NCM_FORMAT_NTB32 0x0002
614 1.1.4.2 pgoyette uDWord dwNtbInMaxSize;
615 1.1.4.2 pgoyette uWord wNtbInDivisor;
616 1.1.4.2 pgoyette uWord wNtbInPayloadRemainder;
617 1.1.4.2 pgoyette uWord wNtbInAlignment;
618 1.1.4.2 pgoyette uWord wReserved1;
619 1.1.4.2 pgoyette uDWord dwNtbOutMaxSize;
620 1.1.4.2 pgoyette uWord wNtbOutDivisor;
621 1.1.4.2 pgoyette uWord wNtbOutPayloadRemainder;
622 1.1.4.2 pgoyette uWord wNtbOutAlignment;
623 1.1.4.2 pgoyette uWord wNtbOutMaxDatagrams;
624 1.1.4.2 pgoyette } __packed;
625 1.1.4.2 pgoyette
626 1.1.4.2 pgoyette /*
627 1.1.4.2 pgoyette * NCM Encoding
628 1.1.4.2 pgoyette */
629 1.1.4.2 pgoyette #define MBIM_HDR16_LEN \
630 1.1.4.2 pgoyette (sizeof(struct ncm_header16) + sizeof(struct ncm_pointer16))
631 1.1.4.2 pgoyette #define MBIM_HDR32_LEN \
632 1.1.4.2 pgoyette (sizeof(struct ncm_header32) + sizeof(struct ncm_pointer32))
633 1.1.4.2 pgoyette
634 1.1.4.2 pgoyette struct ncm_header16 {
635 1.1.4.2 pgoyette #define NCM_HDR16_SIG 0x484d434e
636 1.1.4.2 pgoyette uDWord dwSignature;
637 1.1.4.2 pgoyette uWord wHeaderLength;
638 1.1.4.2 pgoyette uWord wSequence;
639 1.1.4.2 pgoyette uWord wBlockLength;
640 1.1.4.2 pgoyette uWord wNdpIndex;
641 1.1.4.2 pgoyette } __packed;
642 1.1.4.2 pgoyette
643 1.1.4.2 pgoyette struct ncm_header32 {
644 1.1.4.2 pgoyette #define NCM_HDR32_SIG 0x686d636e
645 1.1.4.2 pgoyette uDWord dwSignature;
646 1.1.4.2 pgoyette uWord wHeaderLength;
647 1.1.4.2 pgoyette uWord wSequence;
648 1.1.4.2 pgoyette uDWord dwBlockLength;
649 1.1.4.2 pgoyette uDWord dwNdpIndex;
650 1.1.4.2 pgoyette } __packed;
651 1.1.4.2 pgoyette
652 1.1.4.2 pgoyette
653 1.1.4.2 pgoyette #define MBIM_NCM_NTH_SIDSHIFT 24
654 1.1.4.2 pgoyette #define MBIM_NCM_NTH_GETSID(s) (((s) > MBIM_NCM_NTH_SIDSHIFT) & 0xff)
655 1.1.4.2 pgoyette
656 1.1.4.2 pgoyette struct ncm_pointer16_dgram {
657 1.1.4.2 pgoyette uWord wDatagramIndex;
658 1.1.4.2 pgoyette uWord wDatagramLen;
659 1.1.4.2 pgoyette } __packed;
660 1.1.4.2 pgoyette
661 1.1.4.2 pgoyette struct ncm_pointer16 {
662 1.1.4.2 pgoyette #define MBIM_NCM_NTH16_IPS 0x00535049
663 1.1.4.2 pgoyette #define MBIM_NCM_NTH16_ISISG(s) (((s) & 0x00ffffff) == MBIM_NCM_NTH16_IPS)
664 1.1.4.2 pgoyette #define MBIM_NCM_NTH16_SIG(s) \
665 1.1.4.2 pgoyette ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH16_IPS)
666 1.1.4.2 pgoyette uDWord dwSignature;
667 1.1.4.2 pgoyette uWord wLength;
668 1.1.4.2 pgoyette uWord wNextNdpIndex;
669 1.1.4.2 pgoyette
670 1.1.4.2 pgoyette /* Minimum is two datagrams, but can be more */
671 1.1.4.2 pgoyette struct ncm_pointer16_dgram dgram[2];
672 1.1.4.2 pgoyette } __packed;
673 1.1.4.2 pgoyette
674 1.1.4.2 pgoyette struct ncm_pointer32_dgram {
675 1.1.4.2 pgoyette uDWord dwDatagramIndex;
676 1.1.4.2 pgoyette uDWord dwDatagramLen;
677 1.1.4.2 pgoyette } __packed;
678 1.1.4.2 pgoyette
679 1.1.4.2 pgoyette struct ncm_pointer32 {
680 1.1.4.2 pgoyette #define MBIM_NCM_NTH32_IPS 0x00737069
681 1.1.4.2 pgoyette #define MBIM_NCM_NTH32_ISISG(s) \
682 1.1.4.2 pgoyette (((s) & 0x00ffffff) == MBIM_NCM_NTH32_IPS)
683 1.1.4.2 pgoyette #define MBIM_NCM_NTH32_SIG(s) \
684 1.1.4.2 pgoyette ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH32_IPS)
685 1.1.4.2 pgoyette uDWord dwSignature;
686 1.1.4.2 pgoyette uWord wLength;
687 1.1.4.2 pgoyette uWord wReserved6;
688 1.1.4.2 pgoyette uDWord dwNextNdpIndex;
689 1.1.4.2 pgoyette uDWord dwReserved12;
690 1.1.4.2 pgoyette
691 1.1.4.2 pgoyette /* Minimum is two datagrams, but can be more */
692 1.1.4.2 pgoyette struct ncm_pointer32_dgram dgram[2];
693 1.1.4.2 pgoyette } __packed;
694 1.1.4.2 pgoyette
695 1.1.4.2 pgoyette #endif /* _KERNEL */
696 1.1.4.2 pgoyette
697 1.1.4.2 pgoyette #endif /* _MBIM_H_ */
698