263e42b68e8d00eb35f62e94e2fdfb085aa07c86
[pandora-kernel.git] / include / net / bluetooth / hci_core.h
1 /* 
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 #ifndef __HCI_CORE_H
26 #define __HCI_CORE_H
27
28 #include <net/bluetooth/hci.h>
29
30 /* HCI upper protocols */
31 #define HCI_PROTO_L2CAP 0
32 #define HCI_PROTO_SCO   1
33
34 /* HCI Core structures */
35 struct inquiry_data {
36         bdaddr_t        bdaddr;
37         __u8            pscan_rep_mode;
38         __u8            pscan_period_mode;
39         __u8            pscan_mode;
40         __u8            dev_class[3];
41         __le16          clock_offset;
42         __s8            rssi;
43 };
44
45 struct inquiry_entry {
46         struct inquiry_entry    *next;
47         __u32                   timestamp;
48         struct inquiry_data     data;
49 };
50
51 struct inquiry_cache {
52         spinlock_t              lock;
53         __u32                   timestamp;
54         struct inquiry_entry    *list;
55 };
56
57 struct hci_conn_hash {
58         struct list_head list;
59         spinlock_t       lock;
60         unsigned int     acl_num;
61         unsigned int     sco_num;
62 };
63
64 struct hci_dev {
65         struct list_head list;
66         spinlock_t      lock;
67         atomic_t        refcnt;
68
69         char            name[8];
70         unsigned long   flags;
71         __u16           id;
72         __u8            type;
73         bdaddr_t        bdaddr;
74         __u8            features[8];
75         __u16           voice_setting;
76
77         __u16           pkt_type;
78         __u16           link_policy;
79         __u16           link_mode;
80
81         __u32           idle_timeout;
82         __u16           sniff_min_interval;
83         __u16           sniff_max_interval;
84
85         unsigned long   quirks;
86
87         atomic_t        cmd_cnt;
88         unsigned int    acl_cnt;
89         unsigned int    sco_cnt;
90
91         unsigned int    acl_mtu;
92         unsigned int    sco_mtu;
93         unsigned int    acl_pkts;
94         unsigned int    sco_pkts;
95
96         unsigned long   cmd_last_tx;
97         unsigned long   acl_last_tx;
98         unsigned long   sco_last_tx;
99
100         struct tasklet_struct   cmd_task;
101         struct tasklet_struct   rx_task;
102         struct tasklet_struct   tx_task;
103
104         struct sk_buff_head     rx_q;
105         struct sk_buff_head     raw_q;
106         struct sk_buff_head     cmd_q;
107
108         struct sk_buff          *sent_cmd;
109
110         struct semaphore        req_lock;
111         wait_queue_head_t       req_wait_q;
112         __u32                   req_status;
113         __u32                   req_result;
114
115         struct inquiry_cache    inq_cache;
116         struct hci_conn_hash    conn_hash;
117
118         struct hci_dev_stats    stat;
119
120         struct sk_buff_head     driver_init;
121
122         void                    *driver_data;
123         void                    *core_data;
124
125         atomic_t                promisc;
126
127         struct device           *parent;
128         struct device           dev;
129
130         struct module           *owner;
131
132         int (*open)(struct hci_dev *hdev);
133         int (*close)(struct hci_dev *hdev);
134         int (*flush)(struct hci_dev *hdev);
135         int (*send)(struct sk_buff *skb);
136         void (*destruct)(struct hci_dev *hdev);
137         void (*notify)(struct hci_dev *hdev, unsigned int evt);
138         int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
139 };
140
141 struct hci_conn {
142         struct list_head list;
143
144         atomic_t         refcnt;
145         spinlock_t       lock;
146
147         bdaddr_t         dst;
148         __u16            handle;
149         __u16            state;
150         __u8             mode;
151         __u8             type;
152         __u8             out;
153         __u8             dev_class[3];
154         __u8             features[8];
155         __u16            interval;
156         __u16            link_policy;
157         __u32            link_mode;
158         __u8             power_save;
159         unsigned long    pend;
160
161         unsigned int     sent;
162
163         struct sk_buff_head data_q;
164
165         struct timer_list disc_timer;
166         struct timer_list idle_timer;
167
168         struct work_struct work;
169
170         struct device   dev;
171
172         struct hci_dev  *hdev;
173         void            *l2cap_data;
174         void            *sco_data;
175         void            *priv;
176
177         struct hci_conn *link;
178 };
179
180 extern struct hci_proto *hci_proto[];
181 extern struct list_head hci_dev_list;
182 extern struct list_head hci_cb_list;
183 extern rwlock_t hci_dev_list_lock;
184 extern rwlock_t hci_cb_list_lock;
185
186 /* ----- Inquiry cache ----- */
187 #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   // 30 seconds
188 #define INQUIRY_ENTRY_AGE_MAX   (HZ*60)   // 60 seconds
189
190 #define inquiry_cache_lock(c)           spin_lock(&c->lock)
191 #define inquiry_cache_unlock(c)         spin_unlock(&c->lock)
192 #define inquiry_cache_lock_bh(c)        spin_lock_bh(&c->lock)
193 #define inquiry_cache_unlock_bh(c)      spin_unlock_bh(&c->lock)
194
195 static inline void inquiry_cache_init(struct hci_dev *hdev)
196 {
197         struct inquiry_cache *c = &hdev->inq_cache;
198         spin_lock_init(&c->lock);
199         c->list = NULL;
200 }
201
202 static inline int inquiry_cache_empty(struct hci_dev *hdev)
203 {
204         struct inquiry_cache *c = &hdev->inq_cache;
205         return (c->list == NULL);
206 }
207
208 static inline long inquiry_cache_age(struct hci_dev *hdev)
209 {
210         struct inquiry_cache *c = &hdev->inq_cache;
211         return jiffies - c->timestamp;
212 }
213
214 static inline long inquiry_entry_age(struct inquiry_entry *e)
215 {
216         return jiffies - e->timestamp;
217 }
218
219 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr);
220 void hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data);
221
222 /* ----- HCI Connections ----- */
223 enum {
224         HCI_CONN_AUTH_PEND,
225         HCI_CONN_ENCRYPT_PEND,
226         HCI_CONN_RSWITCH_PEND,
227         HCI_CONN_MODE_CHANGE_PEND,
228 };
229
230 static inline void hci_conn_hash_init(struct hci_dev *hdev)
231 {
232         struct hci_conn_hash *h = &hdev->conn_hash;
233         INIT_LIST_HEAD(&h->list);
234         spin_lock_init(&h->lock);
235         h->acl_num = 0;
236         h->sco_num = 0;
237 }
238
239 static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
240 {
241         struct hci_conn_hash *h = &hdev->conn_hash;
242         list_add(&c->list, &h->list);
243         if (c->type == ACL_LINK)
244                 h->acl_num++;
245         else
246                 h->sco_num++;
247 }
248
249 static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
250 {
251         struct hci_conn_hash *h = &hdev->conn_hash;
252         list_del(&c->list);
253         if (c->type == ACL_LINK)
254                 h->acl_num--;
255         else
256                 h->sco_num--;
257 }
258
259 static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
260                                         __u16 handle)
261 {
262         struct hci_conn_hash *h = &hdev->conn_hash;
263         struct list_head *p;
264         struct hci_conn  *c;
265
266         list_for_each(p, &h->list) {
267                 c = list_entry(p, struct hci_conn, list);
268                 if (c->handle == handle)
269                         return c;
270         }
271         return NULL;
272 }
273
274 static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
275                                         __u8 type, bdaddr_t *ba)
276 {
277         struct hci_conn_hash *h = &hdev->conn_hash;
278         struct list_head *p;
279         struct hci_conn  *c;
280
281         list_for_each(p, &h->list) {
282                 c = list_entry(p, struct hci_conn, list);
283                 if (c->type == type && !bacmp(&c->dst, ba))
284                         return c;
285         }
286         return NULL;
287 }
288
289 void hci_acl_disconn(struct hci_conn *conn, __u8 reason);
290 void hci_add_sco(struct hci_conn *conn, __u16 handle);
291
292 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
293 int    hci_conn_del(struct hci_conn *conn);
294 void   hci_conn_hash_flush(struct hci_dev *hdev);
295
296 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *src);
297 int hci_conn_auth(struct hci_conn *conn);
298 int hci_conn_encrypt(struct hci_conn *conn);
299 int hci_conn_change_link_key(struct hci_conn *conn);
300 int hci_conn_switch_role(struct hci_conn *conn, uint8_t role);
301
302 void hci_conn_enter_active_mode(struct hci_conn *conn);
303 void hci_conn_enter_sniff_mode(struct hci_conn *conn);
304
305 static inline void hci_conn_hold(struct hci_conn *conn)
306 {
307         atomic_inc(&conn->refcnt);
308         del_timer(&conn->disc_timer);
309 }
310
311 static inline void hci_conn_put(struct hci_conn *conn)
312 {
313         if (atomic_dec_and_test(&conn->refcnt)) {
314                 unsigned long timeo;
315                 if (conn->type == ACL_LINK) {
316                         timeo = msecs_to_jiffies(HCI_DISCONN_TIMEOUT);
317                         if (!conn->out)
318                                 timeo *= 2;
319                         del_timer(&conn->idle_timer);
320                 } else
321                         timeo = msecs_to_jiffies(10);
322                 mod_timer(&conn->disc_timer, jiffies + timeo);
323         }
324 }
325
326 /* ----- HCI tasks ----- */
327 static inline void hci_sched_cmd(struct hci_dev *hdev)
328 {
329         tasklet_schedule(&hdev->cmd_task);
330 }
331
332 static inline void hci_sched_rx(struct hci_dev *hdev)
333 {
334         tasklet_schedule(&hdev->rx_task);
335 }
336
337 static inline void hci_sched_tx(struct hci_dev *hdev)
338 {
339         tasklet_schedule(&hdev->tx_task);
340 }
341
342 /* ----- HCI Devices ----- */
343 static inline void __hci_dev_put(struct hci_dev *d)
344 {
345         if (atomic_dec_and_test(&d->refcnt))
346                 d->destruct(d);
347 }
348
349 static inline void hci_dev_put(struct hci_dev *d)
350
351         __hci_dev_put(d);
352         module_put(d->owner);
353 }
354
355 static inline struct hci_dev *__hci_dev_hold(struct hci_dev *d)
356 {
357         atomic_inc(&d->refcnt);
358         return d;
359 }
360
361 static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
362 {
363         if (try_module_get(d->owner))
364                 return __hci_dev_hold(d);
365         return NULL;
366 }
367
368 #define hci_dev_lock(d)         spin_lock(&d->lock)
369 #define hci_dev_unlock(d)       spin_unlock(&d->lock)
370 #define hci_dev_lock_bh(d)      spin_lock_bh(&d->lock)
371 #define hci_dev_unlock_bh(d)    spin_unlock_bh(&d->lock)
372
373 struct hci_dev *hci_dev_get(int index);
374 struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst);
375
376 struct hci_dev *hci_alloc_dev(void);
377 void hci_free_dev(struct hci_dev *hdev);
378 int hci_register_dev(struct hci_dev *hdev);
379 int hci_unregister_dev(struct hci_dev *hdev);
380 int hci_suspend_dev(struct hci_dev *hdev);
381 int hci_resume_dev(struct hci_dev *hdev);
382 int hci_dev_open(__u16 dev);
383 int hci_dev_close(__u16 dev);
384 int hci_dev_reset(__u16 dev);
385 int hci_dev_reset_stat(__u16 dev);
386 int hci_dev_cmd(unsigned int cmd, void __user *arg);
387 int hci_get_dev_list(void __user *arg);
388 int hci_get_dev_info(void __user *arg);
389 int hci_get_conn_list(void __user *arg);
390 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
391 int hci_inquiry(void __user *arg);
392
393 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
394
395 /* Receive frame from HCI drivers */
396 static inline int hci_recv_frame(struct sk_buff *skb)
397 {
398         struct hci_dev *hdev = (struct hci_dev *) skb->dev;
399         if (!hdev || (!test_bit(HCI_UP, &hdev->flags) 
400                         && !test_bit(HCI_INIT, &hdev->flags))) {
401                 kfree_skb(skb);
402                 return -ENXIO;
403         }
404
405         /* Incomming skb */
406         bt_cb(skb)->incoming = 1;
407
408         /* Time stamp */
409         __net_timestamp(skb);
410
411         /* Queue frame for rx task */
412         skb_queue_tail(&hdev->rx_q, skb);
413         hci_sched_rx(hdev);
414         return 0;
415 }
416
417 int hci_register_sysfs(struct hci_dev *hdev);
418 void hci_unregister_sysfs(struct hci_dev *hdev);
419 void hci_conn_add_sysfs(struct hci_conn *conn);
420 void hci_conn_del_sysfs(struct hci_conn *conn);
421
422 #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->parent = (pdev))
423
424 /* ----- LMP capabilities ----- */
425 #define lmp_rswitch_capable(dev)   ((dev)->features[0] & LMP_RSWITCH)
426 #define lmp_encrypt_capable(dev)   ((dev)->features[0] & LMP_ENCRYPT)
427 #define lmp_sniff_capable(dev)     ((dev)->features[0] & LMP_SNIFF)
428 #define lmp_sniffsubr_capable(dev) ((dev)->features[5] & LMP_SNIFF_SUBR)
429
430 /* ----- HCI protocols ----- */
431 struct hci_proto {
432         char            *name;
433         unsigned int    id;
434         unsigned long   flags;
435
436         void            *priv;
437
438         int (*connect_ind)      (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type);
439         int (*connect_cfm)      (struct hci_conn *conn, __u8 status);
440         int (*disconn_ind)      (struct hci_conn *conn, __u8 reason);
441         int (*recv_acldata)     (struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
442         int (*recv_scodata)     (struct hci_conn *conn, struct sk_buff *skb);
443         int (*auth_cfm)         (struct hci_conn *conn, __u8 status);
444         int (*encrypt_cfm)      (struct hci_conn *conn, __u8 status);
445 };
446
447 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
448 {
449         register struct hci_proto *hp;
450         int mask = 0;
451         
452         hp = hci_proto[HCI_PROTO_L2CAP];
453         if (hp && hp->connect_ind)
454                 mask |= hp->connect_ind(hdev, bdaddr, type);
455
456         hp = hci_proto[HCI_PROTO_SCO];
457         if (hp && hp->connect_ind)
458                 mask |= hp->connect_ind(hdev, bdaddr, type);
459
460         return mask;
461 }
462
463 static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
464 {
465         register struct hci_proto *hp;
466
467         hp = hci_proto[HCI_PROTO_L2CAP];
468         if (hp && hp->connect_cfm)
469                 hp->connect_cfm(conn, status);
470
471         hp = hci_proto[HCI_PROTO_SCO];
472         if (hp && hp->connect_cfm)
473                 hp->connect_cfm(conn, status);
474 }
475
476 static inline void hci_proto_disconn_ind(struct hci_conn *conn, __u8 reason)
477 {
478         register struct hci_proto *hp;
479
480         hp = hci_proto[HCI_PROTO_L2CAP];
481         if (hp && hp->disconn_ind)
482                 hp->disconn_ind(conn, reason);
483
484         hp = hci_proto[HCI_PROTO_SCO];
485         if (hp && hp->disconn_ind)
486                 hp->disconn_ind(conn, reason);
487 }
488
489 static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
490 {
491         register struct hci_proto *hp;
492
493         hp = hci_proto[HCI_PROTO_L2CAP];
494         if (hp && hp->auth_cfm)
495                 hp->auth_cfm(conn, status);
496
497         hp = hci_proto[HCI_PROTO_SCO];
498         if (hp && hp->auth_cfm)
499                 hp->auth_cfm(conn, status);
500 }
501
502 static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status)
503 {
504         register struct hci_proto *hp;
505
506         hp = hci_proto[HCI_PROTO_L2CAP];
507         if (hp && hp->encrypt_cfm)
508                 hp->encrypt_cfm(conn, status);
509
510         hp = hci_proto[HCI_PROTO_SCO];
511         if (hp && hp->encrypt_cfm)
512                 hp->encrypt_cfm(conn, status);
513 }
514
515 int hci_register_proto(struct hci_proto *hproto);
516 int hci_unregister_proto(struct hci_proto *hproto);
517
518 /* ----- HCI callbacks ----- */
519 struct hci_cb {
520         struct list_head list;
521
522         char *name;
523
524         void (*auth_cfm)        (struct hci_conn *conn, __u8 status);
525         void (*encrypt_cfm)     (struct hci_conn *conn, __u8 status, __u8 encrypt);
526         void (*key_change_cfm)  (struct hci_conn *conn, __u8 status);
527         void (*role_switch_cfm) (struct hci_conn *conn, __u8 status, __u8 role);
528 };
529
530 static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
531 {
532         struct list_head *p;
533
534         hci_proto_auth_cfm(conn, status);
535
536         read_lock_bh(&hci_cb_list_lock);
537         list_for_each(p, &hci_cb_list) {
538                 struct hci_cb *cb = list_entry(p, struct hci_cb, list);
539                 if (cb->auth_cfm)
540                         cb->auth_cfm(conn, status);
541         }
542         read_unlock_bh(&hci_cb_list_lock);
543 }
544
545 static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encrypt)
546 {
547         struct list_head *p;
548
549         hci_proto_encrypt_cfm(conn, status);
550
551         read_lock_bh(&hci_cb_list_lock);
552         list_for_each(p, &hci_cb_list) {
553                 struct hci_cb *cb = list_entry(p, struct hci_cb, list);
554                 if (cb->encrypt_cfm)
555                         cb->encrypt_cfm(conn, status, encrypt);
556         }
557         read_unlock_bh(&hci_cb_list_lock);
558 }
559
560 static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
561 {
562         struct list_head *p;
563
564         read_lock_bh(&hci_cb_list_lock);
565         list_for_each(p, &hci_cb_list) {
566                 struct hci_cb *cb = list_entry(p, struct hci_cb, list);
567                 if (cb->key_change_cfm)
568                         cb->key_change_cfm(conn, status);
569         }
570         read_unlock_bh(&hci_cb_list_lock);
571 }
572
573 static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status, __u8 role)
574 {
575         struct list_head *p;
576
577         read_lock_bh(&hci_cb_list_lock);
578         list_for_each(p, &hci_cb_list) {
579                 struct hci_cb *cb = list_entry(p, struct hci_cb, list);
580                 if (cb->role_switch_cfm)
581                         cb->role_switch_cfm(conn, status, role);
582         }
583         read_unlock_bh(&hci_cb_list_lock);
584 }
585
586 int hci_register_cb(struct hci_cb *hcb);
587 int hci_unregister_cb(struct hci_cb *hcb);
588
589 int hci_register_notifier(struct notifier_block *nb);
590 int hci_unregister_notifier(struct notifier_block *nb);
591
592 int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param);
593 int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
594 int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
595
596 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf);
597
598 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data);
599
600 /* ----- HCI Sockets ----- */
601 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
602
603 /* HCI info for socket */
604 #define hci_pi(sk) ((struct hci_pinfo *) sk)
605
606 struct hci_pinfo {
607         struct bt_sock    bt;
608         struct hci_dev    *hdev;
609         struct hci_filter filter;
610         __u32             cmsg_mask;
611 };
612
613 /* HCI security filter */
614 #define HCI_SFLT_MAX_OGF  5
615
616 struct hci_sec_filter {
617         __u32 type_mask;
618         __u32 event_mask[2];
619         __u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
620 };
621
622 /* ----- HCI requests ----- */
623 #define HCI_REQ_DONE      0
624 #define HCI_REQ_PEND      1
625 #define HCI_REQ_CANCELED  2
626
627 #define hci_req_lock(d)         down(&d->req_lock)
628 #define hci_req_unlock(d)       up(&d->req_lock)
629
630 void hci_req_complete(struct hci_dev *hdev, int result);
631
632 #endif /* __HCI_CORE_H */