]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'bluetooth/master'
authorThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2013 12:35:44 +0000 (14:35 +0200)
committerThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2013 12:35:44 +0000 (14:35 +0200)
1  2 
include/net/bluetooth/bluetooth.h
include/net/bluetooth/hci_core.h

index 2cc9517fb0d5006f4b5b4f9570cf7a748d3e3518,a707a0209df44fcf502d74a08b2895daaac39b01..2a628b28249ffd00f8b4bd36d4e024583599ad67
@@@ -282,6 -282,7 +282,7 @@@ struct bt_skb_cb 
        __u8 incoming;
        __u16 expect;
        __u8 force_active;
+       struct l2cap_chan *chan;
        struct l2cap_ctrl control;
        struct hci_req_ctrl req;
        bdaddr_t bdaddr;
@@@ -333,16 -334,16 +334,16 @@@ out
  
  int bt_to_errno(__u16 code);
  
 -extern int hci_sock_init(void);
 -extern void hci_sock_cleanup(void);
 +int hci_sock_init(void);
 +void hci_sock_cleanup(void);
  
 -extern int bt_sysfs_init(void);
 -extern void bt_sysfs_cleanup(void);
 +int bt_sysfs_init(void);
 +void bt_sysfs_cleanup(void);
  
 -extern int  bt_procfs_init(struct net *net, const char *name,
 -                         struct bt_sock_list* sk_list,
 -                         int (* seq_show)(struct seq_file *, void *));
 -extern void bt_procfs_cleanup(struct net *net, const char *name);
 +int bt_procfs_init(struct net *net, const char *name,
 +                 struct bt_sock_list *sk_list,
 +                 int (*seq_show)(struct seq_file *, void *));
 +void bt_procfs_cleanup(struct net *net, const char *name);
  
  extern struct dentry *bt_debugfs;
  
index 2dc467939be7e9a189bef661ae96762a8eb31fe8,8c0ab3d86f957fdb9ff51b304b5d4511cd439ffa..f8555ad7b10485925b07393019579c1ee706b2b0
@@@ -81,6 -81,7 +81,7 @@@ struct hci_conn_hash 
  struct bdaddr_list {
        struct list_head list;
        bdaddr_t bdaddr;
+       u8 bdaddr_type;
  };
  
  struct bt_uuid {
@@@ -141,6 -142,7 +142,7 @@@ struct hci_dev 
        __u8            dev_type;
        bdaddr_t        bdaddr;
        bdaddr_t        static_addr;
+       __u8            own_addr_type;
        __u8            dev_name[HCI_MAX_NAME_LENGTH];
        __u8            short_name[HCI_MAX_SHORT_NAME_LENGTH];
        __u8            eir[HCI_MAX_EIR_LENGTH];
        __u8            page_scan_type;
        __u16           le_scan_interval;
        __u16           le_scan_window;
+       __u16           le_conn_min_interval;
+       __u16           le_conn_max_interval;
+       __u8            ssp_debug_mode;
  
        __u16           devid_source;
        __u16           devid_vendor;
        __s8                    adv_tx_power;
        __u8                    adv_data[HCI_MAX_AD_LENGTH];
        __u8                    adv_data_len;
+       __u8                    scan_rsp_data[HCI_MAX_AD_LENGTH];
+       __u8                    scan_rsp_data_len;
  
        int (*open)(struct hci_dev *hdev);
        int (*close)(struct hci_dev *hdev);
@@@ -311,7 -318,6 +318,6 @@@ struct hci_conn 
        __u8            attempt;
        __u8            dev_class[3];
        __u8            features[HCI_MAX_PAGES][8];
-       __u16           interval;
        __u16           pkt_type;
        __u16           link_policy;
        __u32           link_mode;
        struct list_head chan_list;
  
        struct delayed_work disc_work;
-       struct timer_list idle_timer;
-       struct timer_list auto_accept_timer;
+       struct delayed_work auto_accept_work;
+       struct delayed_work idle_work;
  
        struct device   dev;
  
@@@ -372,17 -378,18 +378,17 @@@ extern rwlock_t hci_dev_list_lock
  extern rwlock_t hci_cb_list_lock;
  
  /* ----- HCI interface to upper protocols ----- */
 -extern int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
 -extern void l2cap_connect_cfm(struct hci_conn *hcon, u8 status);
 -extern int l2cap_disconn_ind(struct hci_conn *hcon);
 -extern void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason);
 -extern int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt);
 -extern int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb,
 -                            u16 flags);
 -
 -extern int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
 -extern void sco_connect_cfm(struct hci_conn *hcon, __u8 status);
 -extern void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason);
 -extern int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
 +int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
 +void l2cap_connect_cfm(struct hci_conn *hcon, u8 status);
 +int l2cap_disconn_ind(struct hci_conn *hcon);
 +void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason);
 +int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt);
 +int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
 +
 +int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
 +void sco_connect_cfm(struct hci_conn *hcon, __u8 status);
 +void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason);
 +int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
  
  /* ----- Inquiry cache ----- */
  #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   /* 30 seconds */
@@@ -648,7 -655,7 +654,7 @@@ static inline void hci_conn_drop(struc
                switch (conn->type) {
                case ACL_LINK:
                case LE_LINK:
-                       del_timer(&conn->idle_timer);
+                       cancel_delayed_work(&conn->idle_work);
                        if (conn->state == BT_CONNECTED) {
                                timeo = conn->disc_timeout;
                                if (!conn->out)
@@@ -729,7 -736,7 +735,7 @@@ int hci_get_auth_info(struct hci_dev *h
  int hci_inquiry(void __user *arg);
  
  struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev,
-                                        bdaddr_t *bdaddr);
+                                        bdaddr_t *bdaddr, u8 type);
  int hci_blacklist_clear(struct hci_dev *hdev);
  int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
  int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
@@@ -764,8 -771,6 +770,6 @@@ int hci_recv_fragment(struct hci_dev *h
  int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count);
  
  void hci_init_sysfs(struct hci_dev *hdev);
- int hci_add_sysfs(struct hci_dev *hdev);
- void hci_del_sysfs(struct hci_dev *hdev);
  void hci_conn_init_sysfs(struct hci_conn *conn);
  void hci_conn_add_sysfs(struct hci_conn *conn);
  void hci_conn_del_sysfs(struct hci_conn *conn);
@@@ -1008,34 -1013,6 +1012,6 @@@ static inline bool eir_has_data_type(u
        return false;
  }
  
- static inline size_t eir_get_length(u8 *eir, size_t eir_len)
- {
-       size_t parsed = 0;
-       while (parsed < eir_len) {
-               u8 field_len = eir[0];
-               if (field_len == 0)
-                       return parsed;
-               parsed += field_len + 1;
-               eir += field_len + 1;
-       }
-       return eir_len;
- }
- static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data,
-                                 u8 data_len)
- {
-       eir[eir_len++] = sizeof(type) + data_len;
-       eir[eir_len++] = type;
-       memcpy(&eir[eir_len], data, data_len);
-       eir_len += data_len;
-       return eir_len;
- }
  int hci_register_cb(struct hci_cb *hcb);
  int hci_unregister_cb(struct hci_cb *hcb);
  
@@@ -1099,11 -1076,12 +1075,12 @@@ void mgmt_index_added(struct hci_dev *h
  void mgmt_index_removed(struct hci_dev *hdev);
  void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
  int mgmt_powered(struct hci_dev *hdev, u8 powered);
- int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable);
- int mgmt_connectable(struct hci_dev *hdev, u8 connectable);
- int mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status);
- int mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
-                     bool persistent);
+ void mgmt_discoverable_timeout(struct hci_dev *hdev);
+ void mgmt_discoverable(struct hci_dev *hdev, u8 discoverable);
+ void mgmt_connectable(struct hci_dev *hdev, u8 connectable);
+ void mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status);
+ void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
+                      bool persistent);
  void mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
                           u8 addr_type, u32 flags, u8 *name, u8 name_len,
                           u8 *dev_class);
@@@ -1113,11 -1091,11 +1090,11 @@@ void mgmt_disconnect_failed(struct hci_
                            u8 link_type, u8 addr_type, u8 status);
  void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
                         u8 addr_type, u8 status);
int mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
int mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
-                                u8 status);
int mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
-                                    u8 status);
void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
+                                 u8 status);
void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
+                                     u8 status);
  int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
                              u8 link_type, u8 addr_type, __le32 value,
                              u8 confirm_hint);
@@@ -1134,15 -1112,15 +1111,15 @@@ int mgmt_user_passkey_neg_reply_complet
  int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
                             u8 link_type, u8 addr_type, u32 passkey,
                             u8 entered);
int mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
-                    u8 addr_type, u8 status);
int mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
int mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
int mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
-                                  u8 status);
int mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
int mgmt_read_local_oob_data_reply_complete(struct hci_dev *hdev, u8 *hash,
-                                           u8 *randomizer, u8 status);
void mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
+                     u8 addr_type, u8 status);
void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
+                                   u8 status);
void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
void mgmt_read_local_oob_data_reply_complete(struct hci_dev *hdev, u8 *hash,
+                                            u8 *randomizer, u8 status);
  void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
                       u8 addr_type, u8 *dev_class, s8 rssi, u8 cfm_name,
                       u8 ssp, u8 *eir, u16 eir_len);
@@@ -1151,7 -1129,7 +1128,7 @@@ void mgmt_remote_name(struct hci_dev *h
  void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
  int mgmt_device_blocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
  int mgmt_device_unblocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent);
void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent);
  void mgmt_reenable_advertising(struct hci_dev *hdev);
  
  /* HCI info for socket */
@@@ -1182,8 -1160,6 +1159,6 @@@ struct hci_sec_filter 
  #define hci_req_lock(d)               mutex_lock(&d->req_lock)
  #define hci_req_unlock(d)     mutex_unlock(&d->req_lock)
  
- void hci_update_ad(struct hci_request *req);
  void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
                                        u16 latency, u16 to_multiplier);
  void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],