diff options
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/bluetooth/hci.h | 604 | ||||
-rw-r--r-- | include/net/bluetooth/hci_core.h | 13 | ||||
-rw-r--r-- | include/net/bluetooth/l2cap.h | 37 |
3 files changed, 390 insertions, 264 deletions
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index ebfb96b41106..a8a9eb6af966 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h | |||
@@ -200,119 +200,18 @@ enum { | |||
200 | #define HCI_LM_SECURE 0x0020 | 200 | #define HCI_LM_SECURE 0x0020 |
201 | 201 | ||
202 | /* ----- HCI Commands ---- */ | 202 | /* ----- HCI Commands ---- */ |
203 | /* OGF & OCF values */ | 203 | #define HCI_OP_INQUIRY 0x0401 |
204 | 204 | struct hci_cp_inquiry { | |
205 | /* Informational Parameters */ | 205 | __u8 lap[3]; |
206 | #define OGF_INFO_PARAM 0x04 | 206 | __u8 length; |
207 | 207 | __u8 num_rsp; | |
208 | #define OCF_READ_LOCAL_VERSION 0x0001 | ||
209 | struct hci_rp_read_loc_version { | ||
210 | __u8 status; | ||
211 | __u8 hci_ver; | ||
212 | __le16 hci_rev; | ||
213 | __u8 lmp_ver; | ||
214 | __le16 manufacturer; | ||
215 | __le16 lmp_subver; | ||
216 | } __attribute__ ((packed)); | ||
217 | |||
218 | #define OCF_READ_LOCAL_FEATURES 0x0003 | ||
219 | struct hci_rp_read_local_features { | ||
220 | __u8 status; | ||
221 | __u8 features[8]; | ||
222 | } __attribute__ ((packed)); | ||
223 | |||
224 | #define OCF_READ_BUFFER_SIZE 0x0005 | ||
225 | struct hci_rp_read_buffer_size { | ||
226 | __u8 status; | ||
227 | __le16 acl_mtu; | ||
228 | __u8 sco_mtu; | ||
229 | __le16 acl_max_pkt; | ||
230 | __le16 sco_max_pkt; | ||
231 | } __attribute__ ((packed)); | ||
232 | |||
233 | #define OCF_READ_BD_ADDR 0x0009 | ||
234 | struct hci_rp_read_bd_addr { | ||
235 | __u8 status; | ||
236 | bdaddr_t bdaddr; | ||
237 | } __attribute__ ((packed)); | ||
238 | |||
239 | /* Host Controller and Baseband */ | ||
240 | #define OGF_HOST_CTL 0x03 | ||
241 | #define OCF_RESET 0x0003 | ||
242 | #define OCF_READ_AUTH_ENABLE 0x001F | ||
243 | #define OCF_WRITE_AUTH_ENABLE 0x0020 | ||
244 | #define AUTH_DISABLED 0x00 | ||
245 | #define AUTH_ENABLED 0x01 | ||
246 | |||
247 | #define OCF_READ_ENCRYPT_MODE 0x0021 | ||
248 | #define OCF_WRITE_ENCRYPT_MODE 0x0022 | ||
249 | #define ENCRYPT_DISABLED 0x00 | ||
250 | #define ENCRYPT_P2P 0x01 | ||
251 | #define ENCRYPT_BOTH 0x02 | ||
252 | |||
253 | #define OCF_WRITE_CA_TIMEOUT 0x0016 | ||
254 | #define OCF_WRITE_PG_TIMEOUT 0x0018 | ||
255 | |||
256 | #define OCF_WRITE_SCAN_ENABLE 0x001A | ||
257 | #define SCAN_DISABLED 0x00 | ||
258 | #define SCAN_INQUIRY 0x01 | ||
259 | #define SCAN_PAGE 0x02 | ||
260 | |||
261 | #define OCF_SET_EVENT_FLT 0x0005 | ||
262 | struct hci_cp_set_event_flt { | ||
263 | __u8 flt_type; | ||
264 | __u8 cond_type; | ||
265 | __u8 condition[0]; | ||
266 | } __attribute__ ((packed)); | ||
267 | |||
268 | /* Filter types */ | ||
269 | #define HCI_FLT_CLEAR_ALL 0x00 | ||
270 | #define HCI_FLT_INQ_RESULT 0x01 | ||
271 | #define HCI_FLT_CONN_SETUP 0x02 | ||
272 | |||
273 | /* CONN_SETUP Condition types */ | ||
274 | #define HCI_CONN_SETUP_ALLOW_ALL 0x00 | ||
275 | #define HCI_CONN_SETUP_ALLOW_CLASS 0x01 | ||
276 | #define HCI_CONN_SETUP_ALLOW_BDADDR 0x02 | ||
277 | |||
278 | /* CONN_SETUP Conditions */ | ||
279 | #define HCI_CONN_SETUP_AUTO_OFF 0x01 | ||
280 | #define HCI_CONN_SETUP_AUTO_ON 0x02 | ||
281 | |||
282 | #define OCF_READ_CLASS_OF_DEV 0x0023 | ||
283 | struct hci_rp_read_dev_class { | ||
284 | __u8 status; | ||
285 | __u8 dev_class[3]; | ||
286 | } __attribute__ ((packed)); | ||
287 | |||
288 | #define OCF_WRITE_CLASS_OF_DEV 0x0024 | ||
289 | struct hci_cp_write_dev_class { | ||
290 | __u8 dev_class[3]; | ||
291 | } __attribute__ ((packed)); | ||
292 | |||
293 | #define OCF_READ_VOICE_SETTING 0x0025 | ||
294 | struct hci_rp_read_voice_setting { | ||
295 | __u8 status; | ||
296 | __le16 voice_setting; | ||
297 | } __attribute__ ((packed)); | 208 | } __attribute__ ((packed)); |
298 | 209 | ||
299 | #define OCF_WRITE_VOICE_SETTING 0x0026 | 210 | #define HCI_OP_INQUIRY_CANCEL 0x0402 |
300 | struct hci_cp_write_voice_setting { | ||
301 | __le16 voice_setting; | ||
302 | } __attribute__ ((packed)); | ||
303 | 211 | ||
304 | #define OCF_HOST_BUFFER_SIZE 0x0033 | 212 | #define HCI_OP_EXIT_PERIODIC_INQ 0x0404 |
305 | struct hci_cp_host_buffer_size { | ||
306 | __le16 acl_mtu; | ||
307 | __u8 sco_mtu; | ||
308 | __le16 acl_max_pkt; | ||
309 | __le16 sco_max_pkt; | ||
310 | } __attribute__ ((packed)); | ||
311 | |||
312 | /* Link Control */ | ||
313 | #define OGF_LINK_CTL 0x01 | ||
314 | 213 | ||
315 | #define OCF_CREATE_CONN 0x0005 | 214 | #define HCI_OP_CREATE_CONN 0x0405 |
316 | struct hci_cp_create_conn { | 215 | struct hci_cp_create_conn { |
317 | bdaddr_t bdaddr; | 216 | bdaddr_t bdaddr; |
318 | __le16 pkt_type; | 217 | __le16 pkt_type; |
@@ -322,105 +221,138 @@ struct hci_cp_create_conn { | |||
322 | __u8 role_switch; | 221 | __u8 role_switch; |
323 | } __attribute__ ((packed)); | 222 | } __attribute__ ((packed)); |
324 | 223 | ||
325 | #define OCF_CREATE_CONN_CANCEL 0x0008 | 224 | #define HCI_OP_DISCONNECT 0x0406 |
326 | struct hci_cp_create_conn_cancel { | ||
327 | bdaddr_t bdaddr; | ||
328 | } __attribute__ ((packed)); | ||
329 | |||
330 | #define OCF_ACCEPT_CONN_REQ 0x0009 | ||
331 | struct hci_cp_accept_conn_req { | ||
332 | bdaddr_t bdaddr; | ||
333 | __u8 role; | ||
334 | } __attribute__ ((packed)); | ||
335 | |||
336 | #define OCF_REJECT_CONN_REQ 0x000a | ||
337 | struct hci_cp_reject_conn_req { | ||
338 | bdaddr_t bdaddr; | ||
339 | __u8 reason; | ||
340 | } __attribute__ ((packed)); | ||
341 | |||
342 | #define OCF_DISCONNECT 0x0006 | ||
343 | struct hci_cp_disconnect { | 225 | struct hci_cp_disconnect { |
344 | __le16 handle; | 226 | __le16 handle; |
345 | __u8 reason; | 227 | __u8 reason; |
346 | } __attribute__ ((packed)); | 228 | } __attribute__ ((packed)); |
347 | 229 | ||
348 | #define OCF_ADD_SCO 0x0007 | 230 | #define HCI_OP_ADD_SCO 0x0407 |
349 | struct hci_cp_add_sco { | 231 | struct hci_cp_add_sco { |
350 | __le16 handle; | 232 | __le16 handle; |
351 | __le16 pkt_type; | 233 | __le16 pkt_type; |
352 | } __attribute__ ((packed)); | 234 | } __attribute__ ((packed)); |
353 | 235 | ||
354 | #define OCF_INQUIRY 0x0001 | 236 | #define HCI_OP_CREATE_CONN_CANCEL 0x0408 |
355 | struct hci_cp_inquiry { | 237 | struct hci_cp_create_conn_cancel { |
356 | __u8 lap[3]; | 238 | bdaddr_t bdaddr; |
357 | __u8 length; | ||
358 | __u8 num_rsp; | ||
359 | } __attribute__ ((packed)); | 239 | } __attribute__ ((packed)); |
360 | 240 | ||
361 | #define OCF_INQUIRY_CANCEL 0x0002 | 241 | #define HCI_OP_ACCEPT_CONN_REQ 0x0409 |
242 | struct hci_cp_accept_conn_req { | ||
243 | bdaddr_t bdaddr; | ||
244 | __u8 role; | ||
245 | } __attribute__ ((packed)); | ||
362 | 246 | ||
363 | #define OCF_EXIT_PERIODIC_INQ 0x0004 | 247 | #define HCI_OP_REJECT_CONN_REQ 0x040a |
248 | struct hci_cp_reject_conn_req { | ||
249 | bdaddr_t bdaddr; | ||
250 | __u8 reason; | ||
251 | } __attribute__ ((packed)); | ||
364 | 252 | ||
365 | #define OCF_LINK_KEY_REPLY 0x000B | 253 | #define HCI_OP_LINK_KEY_REPLY 0x040b |
366 | struct hci_cp_link_key_reply { | 254 | struct hci_cp_link_key_reply { |
367 | bdaddr_t bdaddr; | 255 | bdaddr_t bdaddr; |
368 | __u8 link_key[16]; | 256 | __u8 link_key[16]; |
369 | } __attribute__ ((packed)); | 257 | } __attribute__ ((packed)); |
370 | 258 | ||
371 | #define OCF_LINK_KEY_NEG_REPLY 0x000C | 259 | #define HCI_OP_LINK_KEY_NEG_REPLY 0x040c |
372 | struct hci_cp_link_key_neg_reply { | 260 | struct hci_cp_link_key_neg_reply { |
373 | bdaddr_t bdaddr; | 261 | bdaddr_t bdaddr; |
374 | } __attribute__ ((packed)); | 262 | } __attribute__ ((packed)); |
375 | 263 | ||
376 | #define OCF_PIN_CODE_REPLY 0x000D | 264 | #define HCI_OP_PIN_CODE_REPLY 0x040d |
377 | struct hci_cp_pin_code_reply { | 265 | struct hci_cp_pin_code_reply { |
378 | bdaddr_t bdaddr; | 266 | bdaddr_t bdaddr; |
379 | __u8 pin_len; | 267 | __u8 pin_len; |
380 | __u8 pin_code[16]; | 268 | __u8 pin_code[16]; |
381 | } __attribute__ ((packed)); | 269 | } __attribute__ ((packed)); |
382 | 270 | ||
383 | #define OCF_PIN_CODE_NEG_REPLY 0x000E | 271 | #define HCI_OP_PIN_CODE_NEG_REPLY 0x040e |
384 | struct hci_cp_pin_code_neg_reply { | 272 | struct hci_cp_pin_code_neg_reply { |
385 | bdaddr_t bdaddr; | 273 | bdaddr_t bdaddr; |
386 | } __attribute__ ((packed)); | 274 | } __attribute__ ((packed)); |
387 | 275 | ||
388 | #define OCF_CHANGE_CONN_PTYPE 0x000F | 276 | #define HCI_OP_CHANGE_CONN_PTYPE 0x040f |
389 | struct hci_cp_change_conn_ptype { | 277 | struct hci_cp_change_conn_ptype { |
390 | __le16 handle; | 278 | __le16 handle; |
391 | __le16 pkt_type; | 279 | __le16 pkt_type; |
392 | } __attribute__ ((packed)); | 280 | } __attribute__ ((packed)); |
393 | 281 | ||
394 | #define OCF_AUTH_REQUESTED 0x0011 | 282 | #define HCI_OP_AUTH_REQUESTED 0x0411 |
395 | struct hci_cp_auth_requested { | 283 | struct hci_cp_auth_requested { |
396 | __le16 handle; | 284 | __le16 handle; |
397 | } __attribute__ ((packed)); | 285 | } __attribute__ ((packed)); |
398 | 286 | ||
399 | #define OCF_SET_CONN_ENCRYPT 0x0013 | 287 | #define HCI_OP_SET_CONN_ENCRYPT 0x0413 |
400 | struct hci_cp_set_conn_encrypt { | 288 | struct hci_cp_set_conn_encrypt { |
401 | __le16 handle; | 289 | __le16 handle; |
402 | __u8 encrypt; | 290 | __u8 encrypt; |
403 | } __attribute__ ((packed)); | 291 | } __attribute__ ((packed)); |
404 | 292 | ||
405 | #define OCF_CHANGE_CONN_LINK_KEY 0x0015 | 293 | #define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415 |
406 | struct hci_cp_change_conn_link_key { | 294 | struct hci_cp_change_conn_link_key { |
407 | __le16 handle; | 295 | __le16 handle; |
408 | } __attribute__ ((packed)); | 296 | } __attribute__ ((packed)); |
409 | 297 | ||
410 | #define OCF_READ_REMOTE_FEATURES 0x001B | 298 | #define HCI_OP_REMOTE_NAME_REQ 0x0419 |
299 | struct hci_cp_remote_name_req { | ||
300 | bdaddr_t bdaddr; | ||
301 | __u8 pscan_rep_mode; | ||
302 | __u8 pscan_mode; | ||
303 | __le16 clock_offset; | ||
304 | } __attribute__ ((packed)); | ||
305 | |||
306 | #define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a | ||
307 | struct hci_cp_remote_name_req_cancel { | ||
308 | bdaddr_t bdaddr; | ||
309 | } __attribute__ ((packed)); | ||
310 | |||
311 | #define HCI_OP_READ_REMOTE_FEATURES 0x041b | ||
411 | struct hci_cp_read_remote_features { | 312 | struct hci_cp_read_remote_features { |
412 | __le16 handle; | 313 | __le16 handle; |
413 | } __attribute__ ((packed)); | 314 | } __attribute__ ((packed)); |
414 | 315 | ||
415 | #define OCF_READ_REMOTE_VERSION 0x001D | 316 | #define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c |
317 | struct hci_cp_read_remote_ext_features { | ||
318 | __le16 handle; | ||
319 | __u8 page; | ||
320 | } __attribute__ ((packed)); | ||
321 | |||
322 | #define HCI_OP_READ_REMOTE_VERSION 0x041d | ||
416 | struct hci_cp_read_remote_version { | 323 | struct hci_cp_read_remote_version { |
417 | __le16 handle; | 324 | __le16 handle; |
418 | } __attribute__ ((packed)); | 325 | } __attribute__ ((packed)); |
419 | 326 | ||
420 | /* Link Policy */ | 327 | #define HCI_OP_SETUP_SYNC_CONN 0x0428 |
421 | #define OGF_LINK_POLICY 0x02 | 328 | struct hci_cp_setup_sync_conn { |
329 | __le16 handle; | ||
330 | __le32 tx_bandwidth; | ||
331 | __le32 rx_bandwidth; | ||
332 | __le16 max_latency; | ||
333 | __le16 voice_setting; | ||
334 | __u8 retrans_effort; | ||
335 | __le16 pkt_type; | ||
336 | } __attribute__ ((packed)); | ||
422 | 337 | ||
423 | #define OCF_SNIFF_MODE 0x0003 | 338 | #define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429 |
339 | struct hci_cp_accept_sync_conn_req { | ||
340 | bdaddr_t bdaddr; | ||
341 | __le32 tx_bandwidth; | ||
342 | __le32 rx_bandwidth; | ||
343 | __le16 max_latency; | ||
344 | __le16 content_format; | ||
345 | __u8 retrans_effort; | ||
346 | __le16 pkt_type; | ||
347 | } __attribute__ ((packed)); | ||
348 | |||
349 | #define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a | ||
350 | struct hci_cp_reject_sync_conn_req { | ||
351 | bdaddr_t bdaddr; | ||
352 | __u8 reason; | ||
353 | } __attribute__ ((packed)); | ||
354 | |||
355 | #define HCI_OP_SNIFF_MODE 0x0803 | ||
424 | struct hci_cp_sniff_mode { | 356 | struct hci_cp_sniff_mode { |
425 | __le16 handle; | 357 | __le16 handle; |
426 | __le16 max_interval; | 358 | __le16 max_interval; |
@@ -429,12 +361,12 @@ struct hci_cp_sniff_mode { | |||
429 | __le16 timeout; | 361 | __le16 timeout; |
430 | } __attribute__ ((packed)); | 362 | } __attribute__ ((packed)); |
431 | 363 | ||
432 | #define OCF_EXIT_SNIFF_MODE 0x0004 | 364 | #define HCI_OP_EXIT_SNIFF_MODE 0x0804 |
433 | struct hci_cp_exit_sniff_mode { | 365 | struct hci_cp_exit_sniff_mode { |
434 | __le16 handle; | 366 | __le16 handle; |
435 | } __attribute__ ((packed)); | 367 | } __attribute__ ((packed)); |
436 | 368 | ||
437 | #define OCF_ROLE_DISCOVERY 0x0009 | 369 | #define HCI_OP_ROLE_DISCOVERY 0x0809 |
438 | struct hci_cp_role_discovery { | 370 | struct hci_cp_role_discovery { |
439 | __le16 handle; | 371 | __le16 handle; |
440 | } __attribute__ ((packed)); | 372 | } __attribute__ ((packed)); |
@@ -444,7 +376,13 @@ struct hci_rp_role_discovery { | |||
444 | __u8 role; | 376 | __u8 role; |
445 | } __attribute__ ((packed)); | 377 | } __attribute__ ((packed)); |
446 | 378 | ||
447 | #define OCF_READ_LINK_POLICY 0x000C | 379 | #define HCI_OP_SWITCH_ROLE 0x080b |
380 | struct hci_cp_switch_role { | ||
381 | bdaddr_t bdaddr; | ||
382 | __u8 role; | ||
383 | } __attribute__ ((packed)); | ||
384 | |||
385 | #define HCI_OP_READ_LINK_POLICY 0x080c | ||
448 | struct hci_cp_read_link_policy { | 386 | struct hci_cp_read_link_policy { |
449 | __le16 handle; | 387 | __le16 handle; |
450 | } __attribute__ ((packed)); | 388 | } __attribute__ ((packed)); |
@@ -454,13 +392,7 @@ struct hci_rp_read_link_policy { | |||
454 | __le16 policy; | 392 | __le16 policy; |
455 | } __attribute__ ((packed)); | 393 | } __attribute__ ((packed)); |
456 | 394 | ||
457 | #define OCF_SWITCH_ROLE 0x000B | 395 | #define HCI_OP_WRITE_LINK_POLICY 0x080d |
458 | struct hci_cp_switch_role { | ||
459 | bdaddr_t bdaddr; | ||
460 | __u8 role; | ||
461 | } __attribute__ ((packed)); | ||
462 | |||
463 | #define OCF_WRITE_LINK_POLICY 0x000D | ||
464 | struct hci_cp_write_link_policy { | 396 | struct hci_cp_write_link_policy { |
465 | __le16 handle; | 397 | __le16 handle; |
466 | __le16 policy; | 398 | __le16 policy; |
@@ -470,7 +402,7 @@ struct hci_rp_write_link_policy { | |||
470 | __le16 handle; | 402 | __le16 handle; |
471 | } __attribute__ ((packed)); | 403 | } __attribute__ ((packed)); |
472 | 404 | ||
473 | #define OCF_SNIFF_SUBRATE 0x0011 | 405 | #define HCI_OP_SNIFF_SUBRATE 0x0811 |
474 | struct hci_cp_sniff_subrate { | 406 | struct hci_cp_sniff_subrate { |
475 | __le16 handle; | 407 | __le16 handle; |
476 | __le16 max_latency; | 408 | __le16 max_latency; |
@@ -478,59 +410,156 @@ struct hci_cp_sniff_subrate { | |||
478 | __le16 min_local_timeout; | 410 | __le16 min_local_timeout; |
479 | } __attribute__ ((packed)); | 411 | } __attribute__ ((packed)); |
480 | 412 | ||
481 | /* Status params */ | 413 | #define HCI_OP_SET_EVENT_MASK 0x0c01 |
482 | #define OGF_STATUS_PARAM 0x05 | 414 | struct hci_cp_set_event_mask { |
415 | __u8 mask[8]; | ||
416 | } __attribute__ ((packed)); | ||
483 | 417 | ||
484 | /* Testing commands */ | 418 | #define HCI_OP_RESET 0x0c03 |
485 | #define OGF_TESTING_CMD 0x3E | ||
486 | 419 | ||
487 | /* Vendor specific commands */ | 420 | #define HCI_OP_SET_EVENT_FLT 0x0c05 |
488 | #define OGF_VENDOR_CMD 0x3F | 421 | struct hci_cp_set_event_flt { |
422 | __u8 flt_type; | ||
423 | __u8 cond_type; | ||
424 | __u8 condition[0]; | ||
425 | } __attribute__ ((packed)); | ||
489 | 426 | ||
490 | /* ---- HCI Events ---- */ | 427 | /* Filter types */ |
491 | #define HCI_EV_INQUIRY_COMPLETE 0x01 | 428 | #define HCI_FLT_CLEAR_ALL 0x00 |
429 | #define HCI_FLT_INQ_RESULT 0x01 | ||
430 | #define HCI_FLT_CONN_SETUP 0x02 | ||
492 | 431 | ||
493 | #define HCI_EV_INQUIRY_RESULT 0x02 | 432 | /* CONN_SETUP Condition types */ |
494 | struct inquiry_info { | 433 | #define HCI_CONN_SETUP_ALLOW_ALL 0x00 |
495 | bdaddr_t bdaddr; | 434 | #define HCI_CONN_SETUP_ALLOW_CLASS 0x01 |
496 | __u8 pscan_rep_mode; | 435 | #define HCI_CONN_SETUP_ALLOW_BDADDR 0x02 |
497 | __u8 pscan_period_mode; | 436 | |
498 | __u8 pscan_mode; | 437 | /* CONN_SETUP Conditions */ |
438 | #define HCI_CONN_SETUP_AUTO_OFF 0x01 | ||
439 | #define HCI_CONN_SETUP_AUTO_ON 0x02 | ||
440 | |||
441 | #define HCI_OP_WRITE_LOCAL_NAME 0x0c13 | ||
442 | struct hci_cp_write_local_name { | ||
443 | __u8 name[248]; | ||
444 | } __attribute__ ((packed)); | ||
445 | |||
446 | #define HCI_OP_READ_LOCAL_NAME 0x0c14 | ||
447 | struct hci_rp_read_local_name { | ||
448 | __u8 status; | ||
449 | __u8 name[248]; | ||
450 | } __attribute__ ((packed)); | ||
451 | |||
452 | #define HCI_OP_WRITE_CA_TIMEOUT 0x0c16 | ||
453 | |||
454 | #define HCI_OP_WRITE_PG_TIMEOUT 0x0c18 | ||
455 | |||
456 | #define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a | ||
457 | #define SCAN_DISABLED 0x00 | ||
458 | #define SCAN_INQUIRY 0x01 | ||
459 | #define SCAN_PAGE 0x02 | ||
460 | |||
461 | #define HCI_OP_READ_AUTH_ENABLE 0x0c1f | ||
462 | |||
463 | #define HCI_OP_WRITE_AUTH_ENABLE 0x0c20 | ||
464 | #define AUTH_DISABLED 0x00 | ||
465 | #define AUTH_ENABLED 0x01 | ||
466 | |||
467 | #define HCI_OP_READ_ENCRYPT_MODE 0x0c21 | ||
468 | |||
469 | #define HCI_OP_WRITE_ENCRYPT_MODE 0x0c22 | ||
470 | #define ENCRYPT_DISABLED 0x00 | ||
471 | #define ENCRYPT_P2P 0x01 | ||
472 | #define ENCRYPT_BOTH 0x02 | ||
473 | |||
474 | #define HCI_OP_READ_CLASS_OF_DEV 0x0c23 | ||
475 | struct hci_rp_read_class_of_dev { | ||
476 | __u8 status; | ||
499 | __u8 dev_class[3]; | 477 | __u8 dev_class[3]; |
500 | __le16 clock_offset; | ||
501 | } __attribute__ ((packed)); | 478 | } __attribute__ ((packed)); |
502 | 479 | ||
503 | #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 | 480 | #define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24 |
504 | struct inquiry_info_with_rssi { | 481 | struct hci_cp_write_class_of_dev { |
505 | bdaddr_t bdaddr; | ||
506 | __u8 pscan_rep_mode; | ||
507 | __u8 pscan_period_mode; | ||
508 | __u8 dev_class[3]; | 482 | __u8 dev_class[3]; |
509 | __le16 clock_offset; | ||
510 | __s8 rssi; | ||
511 | } __attribute__ ((packed)); | 483 | } __attribute__ ((packed)); |
512 | struct inquiry_info_with_rssi_and_pscan_mode { | 484 | |
485 | #define HCI_OP_READ_VOICE_SETTING 0x0c25 | ||
486 | struct hci_rp_read_voice_setting { | ||
487 | __u8 status; | ||
488 | __le16 voice_setting; | ||
489 | } __attribute__ ((packed)); | ||
490 | |||
491 | #define HCI_OP_WRITE_VOICE_SETTING 0x0c26 | ||
492 | struct hci_cp_write_voice_setting { | ||
493 | __le16 voice_setting; | ||
494 | } __attribute__ ((packed)); | ||
495 | |||
496 | #define HCI_OP_HOST_BUFFER_SIZE 0x0c33 | ||
497 | struct hci_cp_host_buffer_size { | ||
498 | __le16 acl_mtu; | ||
499 | __u8 sco_mtu; | ||
500 | __le16 acl_max_pkt; | ||
501 | __le16 sco_max_pkt; | ||
502 | } __attribute__ ((packed)); | ||
503 | |||
504 | #define HCI_OP_READ_LOCAL_VERSION 0x1001 | ||
505 | struct hci_rp_read_local_version { | ||
506 | __u8 status; | ||
507 | __u8 hci_ver; | ||
508 | __le16 hci_rev; | ||
509 | __u8 lmp_ver; | ||
510 | __le16 manufacturer; | ||
511 | __le16 lmp_subver; | ||
512 | } __attribute__ ((packed)); | ||
513 | |||
514 | #define HCI_OP_READ_LOCAL_COMMANDS 0x1002 | ||
515 | struct hci_rp_read_local_commands { | ||
516 | __u8 status; | ||
517 | __u8 commands[64]; | ||
518 | } __attribute__ ((packed)); | ||
519 | |||
520 | #define HCI_OP_READ_LOCAL_FEATURES 0x1003 | ||
521 | struct hci_rp_read_local_features { | ||
522 | __u8 status; | ||
523 | __u8 features[8]; | ||
524 | } __attribute__ ((packed)); | ||
525 | |||
526 | #define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004 | ||
527 | struct hci_rp_read_local_ext_features { | ||
528 | __u8 status; | ||
529 | __u8 page; | ||
530 | __u8 max_page; | ||
531 | __u8 features[8]; | ||
532 | } __attribute__ ((packed)); | ||
533 | |||
534 | #define HCI_OP_READ_BUFFER_SIZE 0x1005 | ||
535 | struct hci_rp_read_buffer_size { | ||
536 | __u8 status; | ||
537 | __le16 acl_mtu; | ||
538 | __u8 sco_mtu; | ||
539 | __le16 acl_max_pkt; | ||
540 | __le16 sco_max_pkt; | ||
541 | } __attribute__ ((packed)); | ||
542 | |||
543 | #define HCI_OP_READ_BD_ADDR 0x1009 | ||
544 | struct hci_rp_read_bd_addr { | ||
545 | __u8 status; | ||
513 | bdaddr_t bdaddr; | 546 | bdaddr_t bdaddr; |
514 | __u8 pscan_rep_mode; | ||
515 | __u8 pscan_period_mode; | ||
516 | __u8 pscan_mode; | ||
517 | __u8 dev_class[3]; | ||
518 | __le16 clock_offset; | ||
519 | __s8 rssi; | ||
520 | } __attribute__ ((packed)); | 547 | } __attribute__ ((packed)); |
521 | 548 | ||
522 | #define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2F | 549 | /* ---- HCI Events ---- */ |
523 | struct extended_inquiry_info { | 550 | #define HCI_EV_INQUIRY_COMPLETE 0x01 |
551 | |||
552 | #define HCI_EV_INQUIRY_RESULT 0x02 | ||
553 | struct inquiry_info { | ||
524 | bdaddr_t bdaddr; | 554 | bdaddr_t bdaddr; |
525 | __u8 pscan_rep_mode; | 555 | __u8 pscan_rep_mode; |
526 | __u8 pscan_period_mode; | 556 | __u8 pscan_period_mode; |
557 | __u8 pscan_mode; | ||
527 | __u8 dev_class[3]; | 558 | __u8 dev_class[3]; |
528 | __le16 clock_offset; | 559 | __le16 clock_offset; |
529 | __s8 rssi; | ||
530 | __u8 data[240]; | ||
531 | } __attribute__ ((packed)); | 560 | } __attribute__ ((packed)); |
532 | 561 | ||
533 | #define HCI_EV_CONN_COMPLETE 0x03 | 562 | #define HCI_EV_CONN_COMPLETE 0x03 |
534 | struct hci_ev_conn_complete { | 563 | struct hci_ev_conn_complete { |
535 | __u8 status; | 564 | __u8 status; |
536 | __le16 handle; | 565 | __le16 handle; |
@@ -539,40 +568,63 @@ struct hci_ev_conn_complete { | |||
539 | __u8 encr_mode; | 568 | __u8 encr_mode; |
540 | } __attribute__ ((packed)); | 569 | } __attribute__ ((packed)); |
541 | 570 | ||
542 | #define HCI_EV_CONN_REQUEST 0x04 | 571 | #define HCI_EV_CONN_REQUEST 0x04 |
543 | struct hci_ev_conn_request { | 572 | struct hci_ev_conn_request { |
544 | bdaddr_t bdaddr; | 573 | bdaddr_t bdaddr; |
545 | __u8 dev_class[3]; | 574 | __u8 dev_class[3]; |
546 | __u8 link_type; | 575 | __u8 link_type; |
547 | } __attribute__ ((packed)); | 576 | } __attribute__ ((packed)); |
548 | 577 | ||
549 | #define HCI_EV_DISCONN_COMPLETE 0x05 | 578 | #define HCI_EV_DISCONN_COMPLETE 0x05 |
550 | struct hci_ev_disconn_complete { | 579 | struct hci_ev_disconn_complete { |
551 | __u8 status; | 580 | __u8 status; |
552 | __le16 handle; | 581 | __le16 handle; |
553 | __u8 reason; | 582 | __u8 reason; |
554 | } __attribute__ ((packed)); | 583 | } __attribute__ ((packed)); |
555 | 584 | ||
556 | #define HCI_EV_AUTH_COMPLETE 0x06 | 585 | #define HCI_EV_AUTH_COMPLETE 0x06 |
557 | struct hci_ev_auth_complete { | 586 | struct hci_ev_auth_complete { |
558 | __u8 status; | 587 | __u8 status; |
559 | __le16 handle; | 588 | __le16 handle; |
560 | } __attribute__ ((packed)); | 589 | } __attribute__ ((packed)); |
561 | 590 | ||
562 | #define HCI_EV_ENCRYPT_CHANGE 0x08 | 591 | #define HCI_EV_REMOTE_NAME 0x07 |
592 | struct hci_ev_remote_name { | ||
593 | __u8 status; | ||
594 | bdaddr_t bdaddr; | ||
595 | __u8 name[248]; | ||
596 | } __attribute__ ((packed)); | ||
597 | |||
598 | #define HCI_EV_ENCRYPT_CHANGE 0x08 | ||
563 | struct hci_ev_encrypt_change { | 599 | struct hci_ev_encrypt_change { |
564 | __u8 status; | 600 | __u8 status; |
565 | __le16 handle; | 601 | __le16 handle; |
566 | __u8 encrypt; | 602 | __u8 encrypt; |
567 | } __attribute__ ((packed)); | 603 | } __attribute__ ((packed)); |
568 | 604 | ||
569 | #define HCI_EV_CHANGE_CONN_LINK_KEY_COMPLETE 0x09 | 605 | #define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09 |
570 | struct hci_ev_change_conn_link_key_complete { | 606 | struct hci_ev_change_link_key_complete { |
607 | __u8 status; | ||
608 | __le16 handle; | ||
609 | } __attribute__ ((packed)); | ||
610 | |||
611 | #define HCI_EV_REMOTE_FEATURES 0x0b | ||
612 | struct hci_ev_remote_features { | ||
613 | __u8 status; | ||
614 | __le16 handle; | ||
615 | __u8 features[8]; | ||
616 | } __attribute__ ((packed)); | ||
617 | |||
618 | #define HCI_EV_REMOTE_VERSION 0x0c | ||
619 | struct hci_ev_remote_version { | ||
571 | __u8 status; | 620 | __u8 status; |
572 | __le16 handle; | 621 | __le16 handle; |
622 | __u8 lmp_ver; | ||
623 | __le16 manufacturer; | ||
624 | __le16 lmp_subver; | ||
573 | } __attribute__ ((packed)); | 625 | } __attribute__ ((packed)); |
574 | 626 | ||
575 | #define HCI_EV_QOS_SETUP_COMPLETE 0x0D | 627 | #define HCI_EV_QOS_SETUP_COMPLETE 0x0d |
576 | struct hci_qos { | 628 | struct hci_qos { |
577 | __u8 service_type; | 629 | __u8 service_type; |
578 | __u32 token_rate; | 630 | __u32 token_rate; |
@@ -586,33 +638,33 @@ struct hci_ev_qos_setup_complete { | |||
586 | struct hci_qos qos; | 638 | struct hci_qos qos; |
587 | } __attribute__ ((packed)); | 639 | } __attribute__ ((packed)); |
588 | 640 | ||
589 | #define HCI_EV_CMD_COMPLETE 0x0E | 641 | #define HCI_EV_CMD_COMPLETE 0x0e |
590 | struct hci_ev_cmd_complete { | 642 | struct hci_ev_cmd_complete { |
591 | __u8 ncmd; | 643 | __u8 ncmd; |
592 | __le16 opcode; | 644 | __le16 opcode; |
593 | } __attribute__ ((packed)); | 645 | } __attribute__ ((packed)); |
594 | 646 | ||
595 | #define HCI_EV_CMD_STATUS 0x0F | 647 | #define HCI_EV_CMD_STATUS 0x0f |
596 | struct hci_ev_cmd_status { | 648 | struct hci_ev_cmd_status { |
597 | __u8 status; | 649 | __u8 status; |
598 | __u8 ncmd; | 650 | __u8 ncmd; |
599 | __le16 opcode; | 651 | __le16 opcode; |
600 | } __attribute__ ((packed)); | 652 | } __attribute__ ((packed)); |
601 | 653 | ||
602 | #define HCI_EV_NUM_COMP_PKTS 0x13 | 654 | #define HCI_EV_ROLE_CHANGE 0x12 |
603 | struct hci_ev_num_comp_pkts { | ||
604 | __u8 num_hndl; | ||
605 | /* variable length part */ | ||
606 | } __attribute__ ((packed)); | ||
607 | |||
608 | #define HCI_EV_ROLE_CHANGE 0x12 | ||
609 | struct hci_ev_role_change { | 655 | struct hci_ev_role_change { |
610 | __u8 status; | 656 | __u8 status; |
611 | bdaddr_t bdaddr; | 657 | bdaddr_t bdaddr; |
612 | __u8 role; | 658 | __u8 role; |
613 | } __attribute__ ((packed)); | 659 | } __attribute__ ((packed)); |
614 | 660 | ||
615 | #define HCI_EV_MODE_CHANGE 0x14 | 661 | #define HCI_EV_NUM_COMP_PKTS 0x13 |
662 | struct hci_ev_num_comp_pkts { | ||
663 | __u8 num_hndl; | ||
664 | /* variable length part */ | ||
665 | } __attribute__ ((packed)); | ||
666 | |||
667 | #define HCI_EV_MODE_CHANGE 0x14 | ||
616 | struct hci_ev_mode_change { | 668 | struct hci_ev_mode_change { |
617 | __u8 status; | 669 | __u8 status; |
618 | __le16 handle; | 670 | __le16 handle; |
@@ -620,53 +672,88 @@ struct hci_ev_mode_change { | |||
620 | __le16 interval; | 672 | __le16 interval; |
621 | } __attribute__ ((packed)); | 673 | } __attribute__ ((packed)); |
622 | 674 | ||
623 | #define HCI_EV_PIN_CODE_REQ 0x16 | 675 | #define HCI_EV_PIN_CODE_REQ 0x16 |
624 | struct hci_ev_pin_code_req { | 676 | struct hci_ev_pin_code_req { |
625 | bdaddr_t bdaddr; | 677 | bdaddr_t bdaddr; |
626 | } __attribute__ ((packed)); | 678 | } __attribute__ ((packed)); |
627 | 679 | ||
628 | #define HCI_EV_LINK_KEY_REQ 0x17 | 680 | #define HCI_EV_LINK_KEY_REQ 0x17 |
629 | struct hci_ev_link_key_req { | 681 | struct hci_ev_link_key_req { |
630 | bdaddr_t bdaddr; | 682 | bdaddr_t bdaddr; |
631 | } __attribute__ ((packed)); | 683 | } __attribute__ ((packed)); |
632 | 684 | ||
633 | #define HCI_EV_LINK_KEY_NOTIFY 0x18 | 685 | #define HCI_EV_LINK_KEY_NOTIFY 0x18 |
634 | struct hci_ev_link_key_notify { | 686 | struct hci_ev_link_key_notify { |
635 | bdaddr_t bdaddr; | 687 | bdaddr_t bdaddr; |
636 | __u8 link_key[16]; | 688 | __u8 link_key[16]; |
637 | __u8 key_type; | 689 | __u8 key_type; |
638 | } __attribute__ ((packed)); | 690 | } __attribute__ ((packed)); |
639 | 691 | ||
640 | #define HCI_EV_REMOTE_FEATURES 0x0B | 692 | #define HCI_EV_CLOCK_OFFSET 0x1c |
641 | struct hci_ev_remote_features { | 693 | struct hci_ev_clock_offset { |
642 | __u8 status; | 694 | __u8 status; |
643 | __le16 handle; | 695 | __le16 handle; |
644 | __u8 features[8]; | 696 | __le16 clock_offset; |
645 | } __attribute__ ((packed)); | 697 | } __attribute__ ((packed)); |
646 | 698 | ||
647 | #define HCI_EV_REMOTE_VERSION 0x0C | 699 | #define HCI_EV_PSCAN_REP_MODE 0x20 |
648 | struct hci_ev_remote_version { | 700 | struct hci_ev_pscan_rep_mode { |
701 | bdaddr_t bdaddr; | ||
702 | __u8 pscan_rep_mode; | ||
703 | } __attribute__ ((packed)); | ||
704 | |||
705 | #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 | ||
706 | struct inquiry_info_with_rssi { | ||
707 | bdaddr_t bdaddr; | ||
708 | __u8 pscan_rep_mode; | ||
709 | __u8 pscan_period_mode; | ||
710 | __u8 dev_class[3]; | ||
711 | __le16 clock_offset; | ||
712 | __s8 rssi; | ||
713 | } __attribute__ ((packed)); | ||
714 | struct inquiry_info_with_rssi_and_pscan_mode { | ||
715 | bdaddr_t bdaddr; | ||
716 | __u8 pscan_rep_mode; | ||
717 | __u8 pscan_period_mode; | ||
718 | __u8 pscan_mode; | ||
719 | __u8 dev_class[3]; | ||
720 | __le16 clock_offset; | ||
721 | __s8 rssi; | ||
722 | } __attribute__ ((packed)); | ||
723 | |||
724 | #define HCI_EV_REMOTE_EXT_FEATURES 0x23 | ||
725 | struct hci_ev_remote_ext_features { | ||
649 | __u8 status; | 726 | __u8 status; |
650 | __le16 handle; | 727 | __le16 handle; |
651 | __u8 lmp_ver; | 728 | __u8 page; |
652 | __le16 manufacturer; | 729 | __u8 max_page; |
653 | __le16 lmp_subver; | 730 | __u8 features[8]; |
654 | } __attribute__ ((packed)); | 731 | } __attribute__ ((packed)); |
655 | 732 | ||
656 | #define HCI_EV_CLOCK_OFFSET 0x01C | 733 | #define HCI_EV_SYNC_CONN_COMPLETE 0x2c |
657 | struct hci_ev_clock_offset { | 734 | struct hci_ev_sync_conn_complete { |
658 | __u8 status; | 735 | __u8 status; |
659 | __le16 handle; | 736 | __le16 handle; |
660 | __le16 clock_offset; | 737 | bdaddr_t bdaddr; |
738 | __u8 link_type; | ||
739 | __u8 tx_interval; | ||
740 | __u8 retrans_window; | ||
741 | __le16 rx_pkt_len; | ||
742 | __le16 tx_pkt_len; | ||
743 | __u8 air_mode; | ||
661 | } __attribute__ ((packed)); | 744 | } __attribute__ ((packed)); |
662 | 745 | ||
663 | #define HCI_EV_PSCAN_REP_MODE 0x20 | 746 | #define HCI_EV_SYNC_CONN_CHANGED 0x2d |
664 | struct hci_ev_pscan_rep_mode { | 747 | struct hci_ev_sync_conn_changed { |
665 | bdaddr_t bdaddr; | 748 | __u8 status; |
666 | __u8 pscan_rep_mode; | 749 | __le16 handle; |
750 | __u8 tx_interval; | ||
751 | __u8 retrans_window; | ||
752 | __le16 rx_pkt_len; | ||
753 | __le16 tx_pkt_len; | ||
667 | } __attribute__ ((packed)); | 754 | } __attribute__ ((packed)); |
668 | 755 | ||
669 | #define HCI_EV_SNIFF_SUBRATE 0x2E | 756 | #define HCI_EV_SNIFF_SUBRATE 0x2e |
670 | struct hci_ev_sniff_subrate { | 757 | struct hci_ev_sniff_subrate { |
671 | __u8 status; | 758 | __u8 status; |
672 | __le16 handle; | 759 | __le16 handle; |
@@ -676,14 +763,25 @@ struct hci_ev_sniff_subrate { | |||
676 | __le16 max_local_timeout; | 763 | __le16 max_local_timeout; |
677 | } __attribute__ ((packed)); | 764 | } __attribute__ ((packed)); |
678 | 765 | ||
766 | #define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f | ||
767 | struct extended_inquiry_info { | ||
768 | bdaddr_t bdaddr; | ||
769 | __u8 pscan_rep_mode; | ||
770 | __u8 pscan_period_mode; | ||
771 | __u8 dev_class[3]; | ||
772 | __le16 clock_offset; | ||
773 | __s8 rssi; | ||
774 | __u8 data[240]; | ||
775 | } __attribute__ ((packed)); | ||
776 | |||
679 | /* Internal events generated by Bluetooth stack */ | 777 | /* Internal events generated by Bluetooth stack */ |
680 | #define HCI_EV_STACK_INTERNAL 0xFD | 778 | #define HCI_EV_STACK_INTERNAL 0xfd |
681 | struct hci_ev_stack_internal { | 779 | struct hci_ev_stack_internal { |
682 | __u16 type; | 780 | __u16 type; |
683 | __u8 data[0]; | 781 | __u8 data[0]; |
684 | } __attribute__ ((packed)); | 782 | } __attribute__ ((packed)); |
685 | 783 | ||
686 | #define HCI_EV_SI_DEVICE 0x01 | 784 | #define HCI_EV_SI_DEVICE 0x01 |
687 | struct hci_ev_si_device { | 785 | struct hci_ev_si_device { |
688 | __u16 event; | 786 | __u16 event; |
689 | __u16 dev_id; | 787 | __u16 dev_id; |
@@ -704,40 +802,40 @@ struct hci_ev_si_security { | |||
704 | #define HCI_SCO_HDR_SIZE 3 | 802 | #define HCI_SCO_HDR_SIZE 3 |
705 | 803 | ||
706 | struct hci_command_hdr { | 804 | struct hci_command_hdr { |
707 | __le16 opcode; /* OCF & OGF */ | 805 | __le16 opcode; /* OCF & OGF */ |
708 | __u8 plen; | 806 | __u8 plen; |
709 | } __attribute__ ((packed)); | 807 | } __attribute__ ((packed)); |
710 | 808 | ||
711 | struct hci_event_hdr { | 809 | struct hci_event_hdr { |
712 | __u8 evt; | 810 | __u8 evt; |
713 | __u8 plen; | 811 | __u8 plen; |
714 | } __attribute__ ((packed)); | 812 | } __attribute__ ((packed)); |
715 | 813 | ||
716 | struct hci_acl_hdr { | 814 | struct hci_acl_hdr { |
717 | __le16 handle; /* Handle & Flags(PB, BC) */ | 815 | __le16 handle; /* Handle & Flags(PB, BC) */ |
718 | __le16 dlen; | 816 | __le16 dlen; |
719 | } __attribute__ ((packed)); | 817 | } __attribute__ ((packed)); |
720 | 818 | ||
721 | struct hci_sco_hdr { | 819 | struct hci_sco_hdr { |
722 | __le16 handle; | 820 | __le16 handle; |
723 | __u8 dlen; | 821 | __u8 dlen; |
724 | } __attribute__ ((packed)); | 822 | } __attribute__ ((packed)); |
725 | 823 | ||
726 | #ifdef __KERNEL__ | 824 | #ifdef __KERNEL__ |
727 | #include <linux/skbuff.h> | 825 | #include <linux/skbuff.h> |
728 | static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb) | 826 | static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb) |
729 | { | 827 | { |
730 | return (struct hci_event_hdr *)skb->data; | 828 | return (struct hci_event_hdr *) skb->data; |
731 | } | 829 | } |
732 | 830 | ||
733 | static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb) | 831 | static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb) |
734 | { | 832 | { |
735 | return (struct hci_acl_hdr *)skb->data; | 833 | return (struct hci_acl_hdr *) skb->data; |
736 | } | 834 | } |
737 | 835 | ||
738 | static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb) | 836 | static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb) |
739 | { | 837 | { |
740 | return (struct hci_sco_hdr *)skb->data; | 838 | return (struct hci_sco_hdr *) skb->data; |
741 | } | 839 | } |
742 | #endif | 840 | #endif |
743 | 841 | ||
@@ -771,13 +869,13 @@ struct sockaddr_hci { | |||
771 | struct hci_filter { | 869 | struct hci_filter { |
772 | unsigned long type_mask; | 870 | unsigned long type_mask; |
773 | unsigned long event_mask[2]; | 871 | unsigned long event_mask[2]; |
774 | __le16 opcode; | 872 | __le16 opcode; |
775 | }; | 873 | }; |
776 | 874 | ||
777 | struct hci_ufilter { | 875 | struct hci_ufilter { |
778 | __u32 type_mask; | 876 | __u32 type_mask; |
779 | __u32 event_mask[2]; | 877 | __u32 event_mask[2]; |
780 | __le16 opcode; | 878 | __le16 opcode; |
781 | }; | 879 | }; |
782 | 880 | ||
783 | #define HCI_FLT_TYPE_BITS 31 | 881 | #define HCI_FLT_TYPE_BITS 31 |
@@ -825,15 +923,15 @@ struct hci_dev_info { | |||
825 | struct hci_conn_info { | 923 | struct hci_conn_info { |
826 | __u16 handle; | 924 | __u16 handle; |
827 | bdaddr_t bdaddr; | 925 | bdaddr_t bdaddr; |
828 | __u8 type; | 926 | __u8 type; |
829 | __u8 out; | 927 | __u8 out; |
830 | __u16 state; | 928 | __u16 state; |
831 | __u32 link_mode; | 929 | __u32 link_mode; |
832 | }; | 930 | }; |
833 | 931 | ||
834 | struct hci_dev_req { | 932 | struct hci_dev_req { |
835 | __u16 dev_id; | 933 | __u16 dev_id; |
836 | __u32 dev_opt; | 934 | __u32 dev_opt; |
837 | }; | 935 | }; |
838 | 936 | ||
839 | struct hci_dev_list_req { | 937 | struct hci_dev_list_req { |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 8f67c8a7169b..ea13baa3851b 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -71,7 +71,10 @@ struct hci_dev { | |||
71 | __u16 id; | 71 | __u16 id; |
72 | __u8 type; | 72 | __u8 type; |
73 | bdaddr_t bdaddr; | 73 | bdaddr_t bdaddr; |
74 | __u8 dev_name[248]; | ||
75 | __u8 dev_class[3]; | ||
74 | __u8 features[8]; | 76 | __u8 features[8]; |
77 | __u8 commands[64]; | ||
75 | __u8 hci_ver; | 78 | __u8 hci_ver; |
76 | __u16 hci_rev; | 79 | __u16 hci_rev; |
77 | __u16 manufacturer; | 80 | __u16 manufacturer; |
@@ -310,10 +313,12 @@ static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev, | |||
310 | void hci_acl_connect(struct hci_conn *conn); | 313 | void hci_acl_connect(struct hci_conn *conn); |
311 | void hci_acl_disconn(struct hci_conn *conn, __u8 reason); | 314 | void hci_acl_disconn(struct hci_conn *conn, __u8 reason); |
312 | void hci_add_sco(struct hci_conn *conn, __u16 handle); | 315 | void hci_add_sco(struct hci_conn *conn, __u16 handle); |
316 | void hci_setup_sync(struct hci_conn *conn, __u16 handle); | ||
313 | 317 | ||
314 | struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst); | 318 | struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst); |
315 | int hci_conn_del(struct hci_conn *conn); | 319 | int hci_conn_del(struct hci_conn *conn); |
316 | void hci_conn_hash_flush(struct hci_dev *hdev); | 320 | void hci_conn_hash_flush(struct hci_dev *hdev); |
321 | void hci_conn_check_pending(struct hci_dev *hdev); | ||
317 | 322 | ||
318 | struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *src); | 323 | struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *src); |
319 | int hci_conn_auth(struct hci_conn *conn); | 324 | int hci_conn_auth(struct hci_conn *conn); |
@@ -617,11 +622,11 @@ int hci_unregister_cb(struct hci_cb *hcb); | |||
617 | int hci_register_notifier(struct notifier_block *nb); | 622 | int hci_register_notifier(struct notifier_block *nb); |
618 | int hci_unregister_notifier(struct notifier_block *nb); | 623 | int hci_unregister_notifier(struct notifier_block *nb); |
619 | 624 | ||
620 | int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param); | 625 | int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param); |
621 | int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags); | 626 | int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags); |
622 | int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb); | 627 | int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb); |
623 | 628 | ||
624 | void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf); | 629 | void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode); |
625 | 630 | ||
626 | void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data); | 631 | void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data); |
627 | 632 | ||
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index 70e70f5d3dd6..73e115bc12dd 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -29,7 +29,8 @@ | |||
29 | #define L2CAP_DEFAULT_MTU 672 | 29 | #define L2CAP_DEFAULT_MTU 672 |
30 | #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF | 30 | #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF |
31 | 31 | ||
32 | #define L2CAP_CONN_TIMEOUT (HZ * 40) | 32 | #define L2CAP_CONN_TIMEOUT (40000) /* 40 seconds */ |
33 | #define L2CAP_INFO_TIMEOUT (4000) /* 4 seconds */ | ||
33 | 34 | ||
34 | /* L2CAP socket address */ | 35 | /* L2CAP socket address */ |
35 | struct sockaddr_l2 { | 36 | struct sockaddr_l2 { |
@@ -148,6 +149,19 @@ struct l2cap_conf_opt { | |||
148 | 149 | ||
149 | #define L2CAP_CONF_MAX_SIZE 22 | 150 | #define L2CAP_CONF_MAX_SIZE 22 |
150 | 151 | ||
152 | struct l2cap_conf_rfc { | ||
153 | __u8 mode; | ||
154 | __u8 txwin_size; | ||
155 | __u8 max_transmit; | ||
156 | __le16 retrans_timeout; | ||
157 | __le16 monitor_timeout; | ||
158 | __le16 max_pdu_size; | ||
159 | } __attribute__ ((packed)); | ||
160 | |||
161 | #define L2CAP_MODE_BASIC 0x00 | ||
162 | #define L2CAP_MODE_RETRANS 0x01 | ||
163 | #define L2CAP_MODE_FLOWCTL 0x02 | ||
164 | |||
151 | struct l2cap_disconn_req { | 165 | struct l2cap_disconn_req { |
152 | __le16 dcid; | 166 | __le16 dcid; |
153 | __le16 scid; | 167 | __le16 scid; |
@@ -160,7 +174,6 @@ struct l2cap_disconn_rsp { | |||
160 | 174 | ||
161 | struct l2cap_info_req { | 175 | struct l2cap_info_req { |
162 | __le16 type; | 176 | __le16 type; |
163 | __u8 data[0]; | ||
164 | } __attribute__ ((packed)); | 177 | } __attribute__ ((packed)); |
165 | 178 | ||
166 | struct l2cap_info_rsp { | 179 | struct l2cap_info_rsp { |
@@ -192,6 +205,13 @@ struct l2cap_conn { | |||
192 | 205 | ||
193 | unsigned int mtu; | 206 | unsigned int mtu; |
194 | 207 | ||
208 | __u32 feat_mask; | ||
209 | |||
210 | __u8 info_state; | ||
211 | __u8 info_ident; | ||
212 | |||
213 | struct timer_list info_timer; | ||
214 | |||
195 | spinlock_t lock; | 215 | spinlock_t lock; |
196 | 216 | ||
197 | struct sk_buff *rx_skb; | 217 | struct sk_buff *rx_skb; |
@@ -202,6 +222,9 @@ struct l2cap_conn { | |||
202 | struct l2cap_chan_list chan_list; | 222 | struct l2cap_chan_list chan_list; |
203 | }; | 223 | }; |
204 | 224 | ||
225 | #define L2CAP_INFO_CL_MTU_REQ_SENT 0x01 | ||
226 | #define L2CAP_INFO_FEAT_MASK_REQ_SENT 0x02 | ||
227 | |||
205 | /* ----- L2CAP channel and socket info ----- */ | 228 | /* ----- L2CAP channel and socket info ----- */ |
206 | #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) | 229 | #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) |
207 | 230 | ||
@@ -221,7 +244,6 @@ struct l2cap_pinfo { | |||
221 | __u8 conf_len; | 244 | __u8 conf_len; |
222 | __u8 conf_state; | 245 | __u8 conf_state; |
223 | __u8 conf_retry; | 246 | __u8 conf_retry; |
224 | __u16 conf_mtu; | ||
225 | 247 | ||
226 | __u8 ident; | 248 | __u8 ident; |
227 | 249 | ||
@@ -232,10 +254,11 @@ struct l2cap_pinfo { | |||
232 | struct sock *prev_c; | 254 | struct sock *prev_c; |
233 | }; | 255 | }; |
234 | 256 | ||
235 | #define L2CAP_CONF_REQ_SENT 0x01 | 257 | #define L2CAP_CONF_REQ_SENT 0x01 |
236 | #define L2CAP_CONF_INPUT_DONE 0x02 | 258 | #define L2CAP_CONF_INPUT_DONE 0x02 |
237 | #define L2CAP_CONF_OUTPUT_DONE 0x04 | 259 | #define L2CAP_CONF_OUTPUT_DONE 0x04 |
238 | #define L2CAP_CONF_MAX_RETRIES 2 | 260 | |
261 | #define L2CAP_CONF_MAX_RETRIES 2 | ||
239 | 262 | ||
240 | void l2cap_load(void); | 263 | void l2cap_load(void); |
241 | 264 | ||