l2cap.h (890ca861f868a10617029ffc87eae7d48ea6876c) | l2cap.h (abe84903a8efc6b83fa92161429e0e3a28bde15c) |
---|---|
1/* 2 BlueZ - Bluetooth protocol stack for Linux 3 Copyright (C) 2000-2001 Qualcomm Incorporated 4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org> 5 Copyright (C) 2010 Google Inc. 6 7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 8 --- 14 unchanged lines hidden (view full) --- 23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 24 SOFTWARE IS DISCLAIMED. 25*/ 26 27#ifndef __L2CAP_H 28#define __L2CAP_H 29 30#include <asm/unaligned.h> | 1/* 2 BlueZ - Bluetooth protocol stack for Linux 3 Copyright (C) 2000-2001 Qualcomm Incorporated 4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org> 5 Copyright (C) 2010 Google Inc. 6 7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 8 --- 14 unchanged lines hidden (view full) --- 23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 24 SOFTWARE IS DISCLAIMED. 25*/ 26 27#ifndef __L2CAP_H 28#define __L2CAP_H 29 30#include <asm/unaligned.h> |
31#include <linux/atomic.h> |
|
31 32/* L2CAP defaults */ 33#define L2CAP_DEFAULT_MTU 672 34#define L2CAP_DEFAULT_MIN_MTU 48 35#define L2CAP_DEFAULT_FLUSH_TO 0xFFFF 36#define L2CAP_EFS_DEFAULT_FLUSH_TO 0xFFFFFFFF 37#define L2CAP_DEFAULT_TX_WINDOW 63 38#define L2CAP_DEFAULT_EXT_WINDOW 0x3FFF --- 437 unchanged lines hidden (view full) --- 476#define L2CAP_SEQ_LIST_CLEAR 0xFFFF 477#define L2CAP_SEQ_LIST_TAIL 0x8000 478 479struct l2cap_chan { 480 struct l2cap_conn *conn; 481 struct hci_conn *hs_hcon; 482 struct hci_chan *hs_hchan; 483 struct kref kref; | 32 33/* L2CAP defaults */ 34#define L2CAP_DEFAULT_MTU 672 35#define L2CAP_DEFAULT_MIN_MTU 48 36#define L2CAP_DEFAULT_FLUSH_TO 0xFFFF 37#define L2CAP_EFS_DEFAULT_FLUSH_TO 0xFFFFFFFF 38#define L2CAP_DEFAULT_TX_WINDOW 63 39#define L2CAP_DEFAULT_EXT_WINDOW 0x3FFF --- 437 unchanged lines hidden (view full) --- 477#define L2CAP_SEQ_LIST_CLEAR 0xFFFF 478#define L2CAP_SEQ_LIST_TAIL 0x8000 479 480struct l2cap_chan { 481 struct l2cap_conn *conn; 482 struct hci_conn *hs_hcon; 483 struct hci_chan *hs_hchan; 484 struct kref kref; |
485 atomic_t nesting; |
|
484 485 __u8 state; 486 487 bdaddr_t dst; 488 __u8 dst_type; 489 bdaddr_t src; 490 __u8 src_type; 491 __le16 psm; --- 216 unchanged lines hidden (view full) --- 708 FLAG_EXT_CTRL, 709 FLAG_EFS_ENABLE, 710 FLAG_DEFER_SETUP, 711 FLAG_LE_CONN_REQ_SENT, 712 FLAG_PENDING_SECURITY, 713 FLAG_HOLD_HCI_CONN, 714}; 715 | 486 487 __u8 state; 488 489 bdaddr_t dst; 490 __u8 dst_type; 491 bdaddr_t src; 492 __u8 src_type; 493 __le16 psm; --- 216 unchanged lines hidden (view full) --- 710 FLAG_EXT_CTRL, 711 FLAG_EFS_ENABLE, 712 FLAG_DEFER_SETUP, 713 FLAG_LE_CONN_REQ_SENT, 714 FLAG_PENDING_SECURITY, 715 FLAG_HOLD_HCI_CONN, 716}; 717 |
718/* Lock nesting levels for L2CAP channels. We need these because lockdep 719 * otherwise considers all channels equal and will e.g. complain about a 720 * connection oriented channel triggering SMP procedures or a listening 721 * channel creating and locking a child channel. 722 */ |
|
716enum { | 723enum { |
724 L2CAP_NESTING_SMP, 725 L2CAP_NESTING_NORMAL, 726 L2CAP_NESTING_PARENT, 727}; 728 729enum { |
|
717 L2CAP_TX_STATE_XMIT, 718 L2CAP_TX_STATE_WAIT_F, 719}; 720 721enum { 722 L2CAP_RX_STATE_RECV, 723 L2CAP_RX_STATE_SREJ_SENT, 724 L2CAP_RX_STATE_MOVE, --- 48 unchanged lines hidden (view full) --- 773 L2CAP_MOVE_WAIT_PREPARE, 774}; 775 776void l2cap_chan_hold(struct l2cap_chan *c); 777void l2cap_chan_put(struct l2cap_chan *c); 778 779static inline void l2cap_chan_lock(struct l2cap_chan *chan) 780{ | 730 L2CAP_TX_STATE_XMIT, 731 L2CAP_TX_STATE_WAIT_F, 732}; 733 734enum { 735 L2CAP_RX_STATE_RECV, 736 L2CAP_RX_STATE_SREJ_SENT, 737 L2CAP_RX_STATE_MOVE, --- 48 unchanged lines hidden (view full) --- 786 L2CAP_MOVE_WAIT_PREPARE, 787}; 788 789void l2cap_chan_hold(struct l2cap_chan *c); 790void l2cap_chan_put(struct l2cap_chan *c); 791 792static inline void l2cap_chan_lock(struct l2cap_chan *chan) 793{ |
781 mutex_lock(&chan->lock); | 794 mutex_lock_nested(&chan->lock, atomic_read(&chan->nesting)); |
782} 783 784static inline void l2cap_chan_unlock(struct l2cap_chan *chan) 785{ 786 mutex_unlock(&chan->lock); 787} 788 789static inline void l2cap_set_timer(struct l2cap_chan *chan, --- 165 unchanged lines hidden --- | 795} 796 797static inline void l2cap_chan_unlock(struct l2cap_chan *chan) 798{ 799 mutex_unlock(&chan->lock); 800} 801 802static inline void l2cap_set_timer(struct l2cap_chan *chan, --- 165 unchanged lines hidden --- |