]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/bluetooth/hidp/hidp.h
Merge branch 'misc' into for-linus
[karo-tx-linux.git] / net / bluetooth / hidp / hidp.h
index c844420617932ae0df5e47b542a7c1fe6a537dbc..6162ce8606acc8206dbc3ce437425518aee8a8c2 100644 (file)
@@ -24,7 +24,9 @@
 #define __HIDP_H
 
 #include <linux/types.h>
+#include <linux/kref.h>
 #include <net/bluetooth/bluetooth.h>
+#include <net/bluetooth/l2cap.h>
 
 /* HIDP header masks */
 #define HIDP_HEADER_TRANS_MASK                 0xf0
@@ -119,42 +121,52 @@ struct hidp_connlist_req {
        struct hidp_conninfo __user *ci;
 };
 
-int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock);
-int hidp_del_connection(struct hidp_conndel_req *req);
+int hidp_connection_add(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock);
+int hidp_connection_del(struct hidp_conndel_req *req);
 int hidp_get_connlist(struct hidp_connlist_req *req);
 int hidp_get_conninfo(struct hidp_conninfo *ci);
 
+enum hidp_session_state {
+       HIDP_SESSION_IDLING,
+       HIDP_SESSION_RUNNING,
+};
+
 /* HIDP session defines */
 struct hidp_session {
        struct list_head list;
+       struct kref ref;
 
-       struct hci_conn *conn;
+       /* runtime management */
+       atomic_t state;
+       wait_queue_head_t state_queue;
+       atomic_t terminate;
+       struct task_struct *task;
+       unsigned long flags;
 
+       /* connection management */
+       bdaddr_t bdaddr;
+       struct l2cap_conn *conn;
+       struct l2cap_user user;
        struct socket *ctrl_sock;
        struct socket *intr_sock;
-
-       bdaddr_t bdaddr;
-
-       unsigned long flags;
-       unsigned long idle_to;
-
+       struct sk_buff_head ctrl_transmit;
+       struct sk_buff_head intr_transmit;
        uint ctrl_mtu;
        uint intr_mtu;
+       unsigned long idle_to;
 
-       atomic_t terminate;
-       struct task_struct *task;
-
-       unsigned char keys[8];
-       unsigned char leds;
-
+       /* device management */
        struct input_dev *input;
-
        struct hid_device *hid;
-
        struct timer_list timer;
 
-       struct sk_buff_head ctrl_transmit;
-       struct sk_buff_head intr_transmit;
+       /* Report descriptor */
+       __u8 *rd_data;
+       uint rd_size;
+
+       /* session data */
+       unsigned char keys[8];
+       unsigned char leds;
 
        /* Used in hidp_get_raw_report() */
        int waiting_report_type; /* HIDP_DATA_RTYPE_* */
@@ -165,13 +177,6 @@ struct hidp_session {
 
        /* Used in hidp_output_raw_report() */
        int output_report_success; /* boolean */
-
-       /* Report descriptor */
-       __u8 *rd_data;
-       uint rd_size;
-
-       wait_queue_head_t startup_queue;
-       int waiting_for_startup;
 };
 
 /* HIDP init defines */