- patches.fixes/patch-2.6.11-rc1: 2.6.11-rc1.
[linux-flexiantxendom0-3.2.10.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 <linux/proc_fs.h>
29 #include <net/bluetooth/hci.h>
30
31 /* HCI upper protocols */
32 #define HCI_PROTO_L2CAP 0
33 #define HCI_PROTO_SCO   1
34
35 #define HCI_INIT_TIMEOUT (HZ * 10)
36
37 extern struct proc_dir_entry *proc_bt_hci;
38
39 /* HCI Core structures */
40
41 struct inquiry_data {
42         bdaddr_t        bdaddr;
43         __u8            pscan_rep_mode;
44         __u8            pscan_period_mode;
45         __u8            pscan_mode;
46         __u8            dev_class[3];
47         __u16           clock_offset;
48         __s8            rssi;
49 };
50
51 struct inquiry_entry {
52         struct inquiry_entry    *next;
53         __u32                   timestamp;
54         struct inquiry_data     data;
55 };
56
57 struct inquiry_cache {
58         spinlock_t              lock;
59         __u32                   timestamp;
60         struct inquiry_entry    *list;
61 };
62
63 struct hci_conn_hash {
64         struct list_head list;
65         spinlock_t       lock;
66         unsigned int     acl_num;
67         unsigned int     sco_num;
68 };
69
70 struct hci_dev {
71         struct list_head list;
72         spinlock_t      lock;
73         atomic_t        refcnt;
74
75         char            name[8];
76         unsigned long   flags;
77         __u16           id;
78         __u8            type;
79         bdaddr_t        bdaddr;
80         __u8            features[8];
81         __u16           voice_setting;
82
83         __u16           pkt_type;
84         __u16           link_policy;
85         __u16           link_mode;
86
87         unsigned long   quirks;
88
89         atomic_t        cmd_cnt;
90         unsigned int    acl_cnt;
91         unsigned int    sco_cnt;
92
93         unsigned int    acl_mtu;
94         unsigned int    sco_mtu;
95         unsigned int    acl_pkts;
96         unsigned int    sco_pkts;
97
98         unsigned long   cmd_last_tx;
99         unsigned long   acl_last_tx;
100         unsigned long   sco_last_tx;
101
102         struct tasklet_struct   cmd_task;
103         struct tasklet_struct   rx_task;
104         struct tasklet_struct   tx_task;
105
106         struct sk_buff_head     rx_q;
107         struct sk_buff_head     raw_q;
108         struct sk_buff_head     cmd_q;
109
110         struct sk_buff          *sent_cmd;
111
112         struct semaphore        req_lock;
113         wait_queue_head_t       req_wait_q;
114         __u32                   req_status;
115         __u32                   req_result;
116
117         struct inquiry_cache    inq_cache;
118         struct hci_conn_hash    conn_hash;
119
120         struct hci_dev_stats    stat;
121
122         void                    *driver_data;
123         void                    *core_data;
124
125         atomic_t                promisc;
126
127 #ifdef CONFIG_PROC_FS
128         struct proc_dir_entry   *proc;
129 #endif
130
131         struct class_device     class_dev;
132
133         struct module           *owner;
134
135         int (*open)(struct hci_dev *hdev);
136         int (*close)(struct hci_dev *hdev);
137         int (*flush)(struct hci_dev *hdev);
138         int (*send)(struct sk_buff *skb);
139         void (*destruct)(struct hci_dev *hdev);
140         void (*notify)(struct hci_dev *hdev, unsigned int evt);
141         int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
142 };
143
144 struct hci_conn {
145         struct list_head list;
146
147         atomic_t         refcnt;
148         spinlock_t       lock;
149
150         bdaddr_t         dst;
151         __u16            handle;
152         __u16            state;
153         __u8             type;
154         __u8             out;
155         __u8             dev_class[3];
156         __u32            link_mode;
157         unsigned long    pend;
158         
159         unsigned int     sent;
160         
161         struct sk_buff_head data_q;
162
163         struct timer_list timer;
164         
165         struct hci_dev  *hdev;
166         void            *l2cap_data;
167         void            *sco_data;
168         void            *priv;
169
170         struct hci_conn *link;
171 };
172
173 extern struct hci_proto *hci_proto[];
174 extern struct list_head hci_dev_list;
175 extern struct list_head hci_cb_list;
176 extern rwlock_t hci_dev_list_lock;
177 extern rwlock_t hci_cb_list_lock;
178
179 /* ----- Inquiry cache ----- */
180 #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   // 30 seconds
181 #define INQUIRY_ENTRY_AGE_MAX   (HZ*60)   // 60 seconds
182
183 #define inquiry_cache_lock(c)           spin_lock(&c->lock)
184 #define inquiry_cache_unlock(c)         spin_unlock(&c->lock)
185 #define inquiry_cache_lock_bh(c)        spin_lock_bh(&c->lock)
186 #define inquiry_cache_unlock_bh(c)      spin_unlock_bh(&c->lock)
187
188 static inline void inquiry_cache_init(struct hci_dev *hdev)
189 {
190         struct inquiry_cache *c = &hdev->inq_cache;
191         spin_lock_init(&c->lock);
192         c->list = NULL;
193 }
194
195 static inline int inquiry_cache_empty(struct hci_dev *hdev)
196 {
197         struct inquiry_cache *c = &hdev->inq_cache;
198         return (c->list == NULL);
199 }
200
201 static inline long inquiry_cache_age(struct hci_dev *hdev)
202 {
203         struct inquiry_cache *c = &hdev->inq_cache;
204         return jiffies - c->timestamp;
205 }
206
207 static inline long inquiry_entry_age(struct inquiry_entry *e)
208 {
209         return jiffies - e->timestamp;
210 }
211
212 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr);
213 void hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data);
214
215 /* ----- HCI Connections ----- */
216 enum {
217         HCI_CONN_AUTH_PEND,
218         HCI_CONN_ENCRYPT_PEND
219 };
220
221 static inline void hci_conn_hash_init(struct hci_dev *hdev)
222 {
223         struct hci_conn_hash *h = &hdev->conn_hash;
224         INIT_LIST_HEAD(&h->list);
225         spin_lock_init(&h->lock);
226         h->acl_num = 0;
227         h->sco_num = 0;
228 }
229
230 static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
231 {
232         struct hci_conn_hash *h = &hdev->conn_hash;
233         list_add(&c->list, &h->list);
234         if (c->type == ACL_LINK)
235                 h->acl_num++;
236         else
237                 h->sco_num++;
238 }
239
240 static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
241 {
242         struct hci_conn_hash *h = &hdev->conn_hash;
243         list_del(&c->list);
244         if (c->type == ACL_LINK)
245                 h->acl_num--;
246         else
247                 h->sco_num--;
248 }
249
250 static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
251                                         __u16 handle)
252 {
253         struct hci_conn_hash *h = &hdev->conn_hash;
254         struct list_head *p;
255         struct hci_conn  *c;
256
257         list_for_each(p, &h->list) {
258                 c = list_entry(p, struct hci_conn, list);
259                 if (c->handle == handle)
260                         return c;
261         }
262         return NULL;
263 }
264
265 static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
266                                         __u8 type, bdaddr_t *ba)
267 {
268         struct hci_conn_hash *h = &hdev->conn_hash;
269         struct list_head *p;
270         struct hci_conn  *c;
271
272         list_for_each(p, &h->list) {
273                 c = list_entry(p, struct hci_conn, list);
274                 if (c->type == type && !bacmp(&c->dst, ba))
275                         return c;
276         }
277         return NULL;
278 }
279
280 void hci_acl_disconn(struct hci_conn *conn, __u8 reason);
281 void hci_add_sco(struct hci_conn *conn, __u16 handle);
282
283 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
284 int    hci_conn_del(struct hci_conn *conn);
285 void   hci_conn_hash_flush(struct hci_dev *hdev);
286
287 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *src);
288 int hci_conn_auth(struct hci_conn *conn);
289 int hci_conn_encrypt(struct hci_conn *conn);
290 int hci_conn_change_link_key(struct hci_conn *conn);
291
292 static inline void hci_conn_set_timer(struct hci_conn *conn, unsigned long timeout)
293 {
294         mod_timer(&conn->timer, jiffies + timeout);
295 }
296
297 static inline void hci_conn_del_timer(struct hci_conn *conn)
298 {
299         del_timer(&conn->timer);
300 }
301
302 static inline void hci_conn_hold(struct hci_conn *conn)
303 {
304         atomic_inc(&conn->refcnt);
305         hci_conn_del_timer(conn);
306 }
307
308 static inline void hci_conn_put(struct hci_conn *conn)
309 {
310         if (atomic_dec_and_test(&conn->refcnt)) {
311                 if (conn->type == ACL_LINK) {
312                         unsigned long timeo = (conn->out) ?
313                                 HCI_DISCONN_TIMEOUT : HCI_DISCONN_TIMEOUT * 2;
314                         hci_conn_set_timer(conn, timeo);
315                 } else
316                         hci_conn_set_timer(conn, HZ / 100);
317         }
318 }
319
320 /* ----- HCI tasks ----- */
321 static inline void hci_sched_cmd(struct hci_dev *hdev)
322 {
323         tasklet_schedule(&hdev->cmd_task);
324 }
325
326 static inline void hci_sched_rx(struct hci_dev *hdev)
327 {
328         tasklet_schedule(&hdev->rx_task);
329 }
330
331 static inline void hci_sched_tx(struct hci_dev *hdev)
332 {
333         tasklet_schedule(&hdev->tx_task);
334 }
335
336 /* ----- HCI Devices ----- */
337 static inline void __hci_dev_put(struct hci_dev *d)
338 {
339         if (atomic_dec_and_test(&d->refcnt))
340                 d->destruct(d);
341 }
342
343 static inline void hci_dev_put(struct hci_dev *d)
344
345         __hci_dev_put(d);
346         module_put(d->owner);
347 }
348
349 static inline struct hci_dev *__hci_dev_hold(struct hci_dev *d)
350 {
351         atomic_inc(&d->refcnt);
352         return d;
353 }
354
355 static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
356 {
357         if (try_module_get(d->owner))
358                 return __hci_dev_hold(d);
359         return NULL;
360 }
361
362 #define hci_dev_lock(d)         spin_lock(&d->lock)
363 #define hci_dev_unlock(d)       spin_unlock(&d->lock)
364 #define hci_dev_lock_bh(d)      spin_lock_bh(&d->lock)
365 #define hci_dev_unlock_bh(d)    spin_unlock_bh(&d->lock)
366
367 struct hci_dev *hci_dev_get(int index);
368 struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst);
369
370 struct hci_dev *hci_alloc_dev(void);
371 void hci_free_dev(struct hci_dev *hdev);
372 int hci_register_dev(struct hci_dev *hdev);
373 int hci_unregister_dev(struct hci_dev *hdev);
374 int hci_suspend_dev(struct hci_dev *hdev);
375 int hci_resume_dev(struct hci_dev *hdev);
376 int hci_dev_open(__u16 dev);
377 int hci_dev_close(__u16 dev);
378 int hci_dev_reset(__u16 dev);
379 int hci_dev_reset_stat(__u16 dev);
380 int hci_dev_cmd(unsigned int cmd, void __user *arg);
381 int hci_get_dev_list(void __user *arg);
382 int hci_get_dev_info(void __user *arg);
383 int hci_get_conn_list(void __user *arg);
384 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
385 int hci_inquiry(void __user *arg);
386
387 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
388
389 /* Receive frame from HCI drivers */
390 static inline int hci_recv_frame(struct sk_buff *skb)
391 {
392         struct hci_dev *hdev = (struct hci_dev *) skb->dev;
393         if (!hdev || (!test_bit(HCI_UP, &hdev->flags) 
394                         && !test_bit(HCI_INIT, &hdev->flags))) {
395                 kfree_skb(skb);
396                 return -ENXIO;
397         }
398
399         /* Incomming skb */
400         bt_cb(skb)->incoming = 1;
401
402         /* Time stamp */
403         do_gettimeofday(&skb->stamp);
404
405         /* Queue frame for rx task */
406         skb_queue_tail(&hdev->rx_q, skb);
407         hci_sched_rx(hdev);
408         return 0;
409 }
410
411 int hci_register_sysfs(struct hci_dev *hdev);
412 void hci_unregister_sysfs(struct hci_dev *hdev);
413
414 #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->class_dev.dev = (pdev))
415
416 /* ----- LMP capabilities ----- */
417 #define lmp_rswitch_capable(dev) (dev->features[0] & LMP_RSWITCH)
418 #define lmp_encrypt_capable(dev) (dev->features[0] & LMP_ENCRYPT)
419
420 /* ----- HCI protocols ----- */
421 struct hci_proto {
422         char            *name;
423         unsigned int    id;
424         unsigned long   flags;
425
426         void            *priv;
427
428         int (*connect_ind)      (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type);
429         int (*connect_cfm)      (struct hci_conn *conn, __u8 status);
430         int (*disconn_ind)      (struct hci_conn *conn, __u8 reason);
431         int (*recv_acldata)     (struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
432         int (*recv_scodata)     (struct hci_conn *conn, struct sk_buff *skb);
433         int (*auth_cfm)         (struct hci_conn *conn, __u8 status);
434         int (*encrypt_cfm)      (struct hci_conn *conn, __u8 status);
435 };
436
437 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
438 {
439         register struct hci_proto *hp;
440         int mask = 0;
441         
442         hp = hci_proto[HCI_PROTO_L2CAP];
443         if (hp && hp->connect_ind)
444                 mask |= hp->connect_ind(hdev, bdaddr, type);
445
446         hp = hci_proto[HCI_PROTO_SCO];
447         if (hp && hp->connect_ind)
448                 mask |= hp->connect_ind(hdev, bdaddr, type);
449
450         return mask;
451 }
452
453 static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
454 {
455         register struct hci_proto *hp;
456
457         hp = hci_proto[HCI_PROTO_L2CAP];
458         if (hp && hp->connect_cfm)
459                 hp->connect_cfm(conn, status);
460
461         hp = hci_proto[HCI_PROTO_SCO];
462         if (hp && hp->connect_cfm)
463                 hp->connect_cfm(conn, status);
464 }
465
466 static inline void hci_proto_disconn_ind(struct hci_conn *conn, __u8 reason)
467 {
468         register struct hci_proto *hp;
469
470         hp = hci_proto[HCI_PROTO_L2CAP];
471         if (hp && hp->disconn_ind)
472                 hp->disconn_ind(conn, reason);
473
474         hp = hci_proto[HCI_PROTO_SCO];
475         if (hp && hp->disconn_ind)
476                 hp->disconn_ind(conn, reason);
477 }
478
479 static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
480 {
481         register struct hci_proto *hp;
482
483         hp = hci_proto[HCI_PROTO_L2CAP];
484         if (hp && hp->auth_cfm)
485                 hp->auth_cfm(conn, status);
486
487         hp = hci_proto[HCI_PROTO_SCO];
488         if (hp && hp->auth_cfm)
489                 hp->auth_cfm(conn, status);
490 }
491
492 static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status)
493 {
494         register struct hci_proto *hp;
495
496         hp = hci_proto[HCI_PROTO_L2CAP];
497         if (hp && hp->encrypt_cfm)
498                 hp->encrypt_cfm(conn, status);
499
500         hp = hci_proto[HCI_PROTO_SCO];
501         if (hp && hp->encrypt_cfm)
502                 hp->encrypt_cfm(conn, status);
503 }
504
505 int hci_register_proto(struct hci_proto *hproto);
506 int hci_unregister_proto(struct hci_proto *hproto);
507
508 /* ----- HCI callbacks ----- */
509 struct hci_cb {
510         struct list_head list;
511
512         char *name;
513
514         void (*auth_cfm)        (struct hci_conn *conn, __u8 status);
515         void (*encrypt_cfm)     (struct hci_conn *conn, __u8 status, __u8 encrypt);
516 };
517
518 static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
519 {
520         struct list_head *p;
521
522         hci_proto_auth_cfm(conn, status);
523
524         read_lock_bh(&hci_cb_list_lock);
525         list_for_each(p, &hci_cb_list) {
526                 struct hci_cb *cb = list_entry(p, struct hci_cb, list);
527                 if (cb->auth_cfm)
528                         cb->auth_cfm(conn, status);
529         }
530         read_unlock_bh(&hci_cb_list_lock);
531 }
532
533 static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encrypt)
534 {
535         struct list_head *p;
536
537         hci_proto_encrypt_cfm(conn, status);
538
539         read_lock_bh(&hci_cb_list_lock);
540         list_for_each(p, &hci_cb_list) {
541                 struct hci_cb *cb = list_entry(p, struct hci_cb, list);
542                 if (cb->encrypt_cfm)
543                         cb->encrypt_cfm(conn, status, encrypt);
544         }
545         read_unlock_bh(&hci_cb_list_lock);
546 }
547
548 int hci_register_cb(struct hci_cb *hcb);
549 int hci_unregister_cb(struct hci_cb *hcb);
550
551 int hci_register_notifier(struct notifier_block *nb);
552 int hci_unregister_notifier(struct notifier_block *nb);
553
554 int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param);
555 int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
556 int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
557
558 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf);
559
560 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data);
561
562 /* ----- HCI Sockets ----- */
563 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
564
565 /* HCI info for socket */
566 #define hci_pi(sk)      ((struct hci_pinfo *)sk->sk_protinfo)
567 struct hci_pinfo {
568         struct hci_dev    *hdev;
569         struct hci_filter filter;
570         __u32             cmsg_mask;
571 };
572
573 /* HCI security filter */
574 #define HCI_SFLT_MAX_OGF  5
575
576 struct hci_sec_filter {
577         __u32 type_mask;
578         __u32 event_mask[2];
579         __u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
580 };
581
582 /* ----- HCI requests ----- */
583 #define HCI_REQ_DONE      0
584 #define HCI_REQ_PEND      1
585 #define HCI_REQ_CANCELED  2
586
587 #define hci_req_lock(d)         down(&d->req_lock)
588 #define hci_req_unlock(d)       up(&d->req_lock)
589
590 void hci_req_complete(struct hci_dev *hdev, int result);
591
592 #endif /* __HCI_CORE_H */