patch-2.4.21 linux-2.4.21/drivers/bluetooth/hci_usb.h
Next file: linux-2.4.21/drivers/cdrom/cdu31a.c
Previous file: linux-2.4.21/drivers/bluetooth/hci_usb.c
Back to the patch index
Back to the overall index
- Lines: 130
- Date:
2003-06-13 07:51:32.000000000 -0700
- Orig file:
linux-2.4.20/drivers/bluetooth/hci_usb.h
- Orig date:
2002-11-28 15:53:12.000000000 -0800
diff -urN linux-2.4.20/drivers/bluetooth/hci_usb.h linux-2.4.21/drivers/bluetooth/hci_usb.h
@@ -1,9 +1,10 @@
/*
- BlueZ - Bluetooth protocol stack for Linux
+ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
Copyright (C) 2000-2001 Qualcomm Incorporated
-
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation;
@@ -40,40 +41,96 @@
#define HCI_MAX_BULK_TX 4
#define HCI_MAX_BULK_RX 1
+#define HCI_MAX_ISOC_FRAMES 10
+
+struct _urb_queue {
+ struct list_head head;
+ spinlock_t lock;
+};
+
+struct _urb {
+ struct list_head list;
+ struct _urb_queue *queue;
+ int type;
+ void *priv;
+ struct urb urb;
+};
+
+struct _urb *_urb_alloc(int isoc, int gfp);
+
+static inline void _urb_free(struct _urb *_urb)
+{
+ kfree(_urb);
+}
+
+static inline void _urb_queue_init(struct _urb_queue *q)
+{
+ INIT_LIST_HEAD(&q->head);
+ spin_lock_init(&q->lock);
+}
+
+static inline void _urb_queue_head(struct _urb_queue *q, struct _urb *_urb)
+{
+ unsigned long flags;
+ spin_lock_irqsave(&q->lock, flags);
+ list_add(&_urb->list, &q->head); _urb->queue = q;
+ spin_unlock_irqrestore(&q->lock, flags);
+}
+
+static inline void _urb_queue_tail(struct _urb_queue *q, struct _urb *_urb)
+{
+ unsigned long flags;
+ spin_lock_irqsave(&q->lock, flags);
+ list_add_tail(&_urb->list, &q->head); _urb->queue = q;
+ spin_unlock_irqrestore(&q->lock, flags);
+}
+
+static inline void _urb_unlink(struct _urb *_urb)
+{
+ struct _urb_queue *q = _urb->queue;
+ unsigned long flags;
+ if (q) {
+ spin_lock_irqsave(&q->lock, flags);
+ list_del(&_urb->list); _urb->queue = NULL;
+ spin_unlock_irqrestore(&q->lock, flags);
+ }
+}
+
+struct _urb *_urb_dequeue(struct _urb_queue *q);
+
+#ifndef container_of
+#define container_of(ptr, type, member) ({ \
+ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ (type *)( (char *)__mptr - offsetof(type,member) );})
+#endif
+
struct hci_usb {
struct hci_dev hdev;
unsigned long state;
struct usb_device *udev;
- struct usb_interface *isoc_iface;
- __u8 bulk_out_ep;
- __u8 bulk_in_ep;
- __u8 isoc_out_ep;
- __u8 isoc_in_ep;
-
- __u8 intr_ep;
- __u8 intr_interval;
- struct urb *intr_urb;
- struct sk_buff * intr_skb;
+ struct usb_endpoint_descriptor *bulk_in_ep;
+ struct usb_endpoint_descriptor *bulk_out_ep;
+ struct usb_endpoint_descriptor *intr_in_ep;
+
+ struct usb_interface *isoc_iface;
+ struct usb_endpoint_descriptor *isoc_out_ep;
+ struct usb_endpoint_descriptor *isoc_in_ep;
+
+ struct sk_buff_head transmit_q[4];
+ struct sk_buff *reassembly[4]; // Reassembly buffers
rwlock_t completion_lock;
-
- struct sk_buff_head cmd_q; // TX Commands
- struct sk_buff_head acl_q; // TX ACLs
- struct sk_buff_head pending_q; // Pending requests
- struct sk_buff_head completed_q; // Completed requests
-};
-struct hci_usb_scb {
- struct urb *urb;
- int intr_len;
+ atomic_t pending_tx[4]; // Number of pending requests
+ struct _urb_queue pending_q[4]; // Pending requests
+ struct _urb_queue completed_q[4]; // Completed requests
};
/* States */
#define HCI_USB_TX_PROCESS 1
#define HCI_USB_TX_WAKEUP 2
-#define HCI_USB_CTRL_TX 3
#endif /* __KERNEL__ */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)