~ubuntu-branches/ubuntu/trusty/linux-armadaxp/trusty

« back to all changes in this revision

Viewing changes to include/net/bluetooth/l2cap.h

  • Committer: Package Import Robot
  • Author(s): Michael Casadevall, Bryan Wu, Dann Frazier, Michael Casadeall
  • Date: 2012-03-10 15:00:54 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120310150054-flugb39zon8vvgwe
Tags: 3.2.0-1600.1
[ Bryan Wu ]
* UBUNTU: import debian/debian.env and debian.armadaxp

[ Dann Frazier ]
* ARM: Armada XP: remove trailing '/' in dirnames in mvRules.mk

[ Michael Casadeall ]
* tools: add some tools for Marvell Armada XP processor
* kernel: timer tick hacking from Marvell
* kernel: Sheeva Errata: add delay on Sheeva when powering down
* net: add Marvell NFP netfilter
* net: socket and skb modifications made by Marvell
* miscdevice: add minor IDs for some Marvell Armada drivers
* fs: introduce memory pool for splice()
* video: EDID detection updates from Marvell Armada XP patchset
* video: backlight: add Marvell Dove LCD backlight driver
* video: display: add THS8200 display driver
* video: framebuffer: add Marvell Dove and Armada XP processor onchip LCD controller driver
* usbtest: add Interrupt transfer testing by Marvell Armada XP code
* usb: ehci: add support for Marvell EHCI controler
* tty/serial: 8250: add support for Marvell Armada XP processor and DeviceTree work
* rtc: add support for Marvell Armada XP onchip RTC controller
* net: pppoe: add Marvell ethernet NFP hook in PPPoE networking driver
* mtd: nand: add support for Marvell Armada XP Nand Flash Controller
* mtd: maps: add Marvell Armada XP specific map driver
* mmc: add support for Marvell Armada XP MMC/SD host controller
* i2c: add support for Marvell Armada XP onchip i2c bus controller
* hwmon: add Kconfig option for Armada XP onchip thermal sensor driver
* dmaengine: add Net DMA support for splice and update Marvell XOR DMA engine driver
* ata: add support for Marvell Armada XP SATA controller and update some quirks
* ARM: add Marvell Armada XP machine to mach-types
* ARM: oprofile: add support for Marvell PJ4B core
* ARM: mm: more ARMv6 switches for Marvell Armada XP
* ARM: remove static declaration to allow compilation
* ARM: alignment access fault trick
* ARM: mm: skip some fault fixing when run on NONE SMP ARMv6 mode during early abort event
* ARM: mm: add Marvell Sheeva CPU Architecture for PJ4B
* ARM: introduce optimized copy operation for Marvell Armada XP
* ARM: SAUCE: hardware breakpoint trick for Marvell Armada XP
* ARM: big endian and little endian tricks for Marvell Armada XP
* ARM: SAUCE: Add Marvell Armada XP build rules to arch/arm/kernel/Makefile
* ARM: vfp: add special handling for Marvell Armada XP
* ARM: add support for Marvell U-Boot
* ARM: add mv_controller_num for ARM PCI drivers
* ARM: add support for local PMUs, general SMP tweaks and cache flushing
* ARM: add Marvell device identifies in glue-proc.h
* ARM: add IPC driver support for Marvell platforms
* ARM: add DMA mapping for Marvell platforms
* ARM: add Sheeva errata and PJ4B code for booting
* ARM: update Kconfig and Makefile to include Marvell Armada XP platforms
* ARM: Armada XP: import LSP from Marvell for Armada XP 3.2 kernel enablement

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
#define L2CAP_DEFAULT_MONITOR_TO        12000   /* 12 seconds */
38
38
#define L2CAP_DEFAULT_MAX_PDU_SIZE      1009    /* Sized for 3-DH5 packet */
39
39
#define L2CAP_DEFAULT_ACK_TO            200
40
 
#define L2CAP_LOCAL_BUSY_TRIES          12
41
40
#define L2CAP_LE_DEFAULT_MTU            23
42
41
 
43
 
#define L2CAP_CONN_TIMEOUT      (40000) /* 40 seconds */
44
 
#define L2CAP_INFO_TIMEOUT      (4000)  /*  4 seconds */
 
42
#define L2CAP_DISC_TIMEOUT             (100)
 
43
#define L2CAP_DISC_REJ_TIMEOUT         (5000)  /*  5 seconds */
 
44
#define L2CAP_ENC_TIMEOUT              (5000)  /*  5 seconds */
 
45
#define L2CAP_CONN_TIMEOUT             (40000) /* 40 seconds */
 
46
#define L2CAP_INFO_TIMEOUT             (4000)  /*  4 seconds */
45
47
 
46
48
/* L2CAP socket address */
47
49
struct sockaddr_l2 {
130
132
#define L2CAP_SDU_END               0x8000
131
133
#define L2CAP_SDU_CONTINUE          0xC000
132
134
 
 
135
/* L2CAP Command rej. reasons */
 
136
#define L2CAP_REJ_NOT_UNDERSTOOD      0x0000
 
137
#define L2CAP_REJ_MTU_EXCEEDED        0x0001
 
138
#define L2CAP_REJ_INVALID_CID         0x0002
 
139
 
 
140
 
133
141
/* L2CAP structures */
134
142
struct l2cap_hdr {
135
143
        __le16     len;
144
152
} __packed;
145
153
#define L2CAP_CMD_HDR_SIZE      4
146
154
 
147
 
struct l2cap_cmd_rej {
148
 
        __le16     reason;
 
155
struct l2cap_cmd_rej_unk {
 
156
        __le16     reason;
 
157
} __packed;
 
158
 
 
159
struct l2cap_cmd_rej_mtu {
 
160
        __le16     reason;
 
161
        __le16     max_mtu;
 
162
} __packed;
 
163
 
 
164
struct l2cap_cmd_rej_cid {
 
165
        __le16     reason;
 
166
        __le16     scid;
 
167
        __le16     dcid;
149
168
} __packed;
150
169
 
151
170
struct l2cap_conn_req {
287
306
 
288
307
        struct l2cap_conn       *conn;
289
308
 
 
309
        __u8            state;
 
310
 
 
311
        atomic_t        refcnt;
 
312
 
290
313
        __le16          psm;
291
314
        __u16           dcid;
292
315
        __u16           scid;
295
318
        __u16           omtu;
296
319
        __u16           flush_to;
297
320
        __u8            mode;
 
321
        __u8            chan_type;
298
322
 
299
323
        __le16          sport;
300
324
 
302
326
        __u8            role_switch;
303
327
        __u8            force_reliable;
304
328
        __u8            flushable;
 
329
        __u8            force_active;
305
330
 
306
331
        __u8            ident;
307
332
 
318
343
        __u16           monitor_timeout;
319
344
        __u16           mps;
320
345
 
321
 
        __u8            conf_state;
322
 
        __u16           conn_state;
 
346
        unsigned long   conf_state;
 
347
        unsigned long   conn_state;
323
348
 
324
349
        __u8            next_tx_seq;
325
350
        __u8            expected_ack_seq;
332
357
        __u8            retry_count;
333
358
        __u8            num_acked;
334
359
        __u16           sdu_len;
335
 
        __u16           partial_sdu_len;
336
360
        struct sk_buff  *sdu;
 
361
        struct sk_buff  *sdu_last_frag;
337
362
 
338
363
        __u8            remote_tx_win;
339
364
        __u8            remote_max_tx;
340
365
        __u16           remote_mps;
341
366
 
 
367
        struct timer_list       chan_timer;
342
368
        struct timer_list       retrans_timer;
343
369
        struct timer_list       monitor_timer;
344
370
        struct timer_list       ack_timer;
345
371
        struct sk_buff          *tx_send_head;
346
372
        struct sk_buff_head     tx_q;
347
373
        struct sk_buff_head     srej_q;
348
 
        struct sk_buff_head     busy_q;
349
 
        struct work_struct      busy_work;
350
374
        struct list_head        srej_l;
351
375
 
352
376
        struct list_head list;
353
377
        struct list_head global_l;
 
378
 
 
379
        void            *data;
 
380
        struct l2cap_ops *ops;
 
381
};
 
382
 
 
383
struct l2cap_ops {
 
384
        char            *name;
 
385
 
 
386
        struct l2cap_chan       *(*new_connection) (void *data);
 
387
        int                     (*recv) (void *data, struct sk_buff *skb);
 
388
        void                    (*close) (void *data);
 
389
        void                    (*state_change) (void *data, int state);
354
390
};
355
391
 
356
392
struct l2cap_conn {
376
412
 
377
413
        __u8            disc_reason;
378
414
 
 
415
        struct timer_list security_timer;
 
416
        struct smp_chan *smp_chan;
 
417
 
379
418
        struct list_head chan_l;
380
419
        rwlock_t        chan_lock;
381
420
};
384
423
#define L2CAP_INFO_FEAT_MASK_REQ_SENT   0x04
385
424
#define L2CAP_INFO_FEAT_MASK_REQ_DONE   0x08
386
425
 
 
426
#define L2CAP_CHAN_RAW                  1
 
427
#define L2CAP_CHAN_CONN_LESS            2
 
428
#define L2CAP_CHAN_CONN_ORIENTED        3
 
429
 
387
430
/* ----- L2CAP socket info ----- */
388
431
#define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
389
432
 
390
433
struct l2cap_pinfo {
391
434
        struct bt_sock  bt;
392
435
        struct l2cap_chan       *chan;
 
436
        struct sk_buff  *rx_busy_skb;
393
437
};
394
438
 
395
 
#define L2CAP_CONF_REQ_SENT       0x01
396
 
#define L2CAP_CONF_INPUT_DONE     0x02
397
 
#define L2CAP_CONF_OUTPUT_DONE    0x04
398
 
#define L2CAP_CONF_MTU_DONE       0x08
399
 
#define L2CAP_CONF_MODE_DONE      0x10
400
 
#define L2CAP_CONF_CONNECT_PEND   0x20
401
 
#define L2CAP_CONF_NO_FCS_RECV    0x40
402
 
#define L2CAP_CONF_STATE2_DEVICE  0x80
 
439
enum {
 
440
        CONF_REQ_SENT,
 
441
        CONF_INPUT_DONE,
 
442
        CONF_OUTPUT_DONE,
 
443
        CONF_MTU_DONE,
 
444
        CONF_MODE_DONE,
 
445
        CONF_CONNECT_PEND,
 
446
        CONF_NO_FCS_RECV,
 
447
        CONF_STATE2_DEVICE,
 
448
};
403
449
 
404
450
#define L2CAP_CONF_MAX_CONF_REQ 2
405
451
#define L2CAP_CONF_MAX_CONF_RSP 2
406
452
 
407
 
#define L2CAP_CONN_SAR_SDU         0x0001
408
 
#define L2CAP_CONN_SREJ_SENT       0x0002
409
 
#define L2CAP_CONN_WAIT_F          0x0004
410
 
#define L2CAP_CONN_SREJ_ACT        0x0008
411
 
#define L2CAP_CONN_SEND_PBIT       0x0010
412
 
#define L2CAP_CONN_REMOTE_BUSY     0x0020
413
 
#define L2CAP_CONN_LOCAL_BUSY      0x0040
414
 
#define L2CAP_CONN_REJ_ACT         0x0080
415
 
#define L2CAP_CONN_SEND_FBIT       0x0100
416
 
#define L2CAP_CONN_RNR_SENT        0x0200
417
 
#define L2CAP_CONN_SAR_RETRY       0x0400
 
453
enum {
 
454
        CONN_SREJ_SENT,
 
455
        CONN_WAIT_F,
 
456
        CONN_SREJ_ACT,
 
457
        CONN_SEND_PBIT,
 
458
        CONN_REMOTE_BUSY,
 
459
        CONN_LOCAL_BUSY,
 
460
        CONN_REJ_ACT,
 
461
        CONN_SEND_FBIT,
 
462
        CONN_RNR_SENT,
 
463
};
418
464
 
419
 
#define __mod_retrans_timer() mod_timer(&chan->retrans_timer, \
420
 
                jiffies +  msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO));
421
 
#define __mod_monitor_timer() mod_timer(&chan->monitor_timer, \
422
 
                jiffies + msecs_to_jiffies(L2CAP_DEFAULT_MONITOR_TO));
423
 
#define __mod_ack_timer() mod_timer(&chan->ack_timer, \
424
 
                jiffies + msecs_to_jiffies(L2CAP_DEFAULT_ACK_TO));
 
465
#define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
 
466
#define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
 
467
#define __set_retrans_timer(c) l2cap_set_timer(c, &c->retrans_timer, \
 
468
                L2CAP_DEFAULT_RETRANS_TO);
 
469
#define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
 
470
#define __set_monitor_timer(c) l2cap_set_timer(c, &c->monitor_timer, \
 
471
                L2CAP_DEFAULT_MONITOR_TO);
 
472
#define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
 
473
#define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
 
474
                L2CAP_DEFAULT_ACK_TO);
 
475
#define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer)
425
476
 
426
477
static inline int l2cap_tx_window_full(struct l2cap_chan *ch)
427
478
{
446
497
int l2cap_init_sockets(void);
447
498
void l2cap_cleanup_sockets(void);
448
499
 
449
 
void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data);
450
500
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
451
501
int __l2cap_wait_ack(struct sock *sk);
452
502
 
453
 
struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
454
 
struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
455
 
struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen);
456
 
int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
457
 
void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb);
458
 
void l2cap_streaming_send(struct l2cap_chan *chan);
459
 
int l2cap_ertm_send(struct l2cap_chan *chan);
460
 
 
461
503
int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
462
504
int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid);
463
505
 
464
 
void l2cap_sock_set_timer(struct sock *sk, long timeout);
465
 
void l2cap_sock_clear_timer(struct sock *sk);
466
 
void __l2cap_sock_close(struct sock *sk, int reason);
467
 
void l2cap_sock_kill(struct sock *sk);
468
 
void l2cap_sock_init(struct sock *sk, struct sock *parent);
469
 
struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
470
 
                                                        int proto, gfp_t prio);
471
 
void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err);
472
506
struct l2cap_chan *l2cap_chan_create(struct sock *sk);
473
 
void l2cap_chan_del(struct l2cap_chan *chan, int err);
 
507
void l2cap_chan_close(struct l2cap_chan *chan, int reason);
474
508
void l2cap_chan_destroy(struct l2cap_chan *chan);
475
509
int l2cap_chan_connect(struct l2cap_chan *chan);
 
510
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
 
511
void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
476
512
 
477
513
#endif /* __L2CAP_H */