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