Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
This commit is contained in:
@@ -243,6 +243,39 @@ static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
|
||||
input_sync(dev);
|
||||
}
|
||||
|
||||
static int __hidp_send_ctrl_message(struct hidp_session *session,
|
||||
unsigned char hdr, unsigned char *data, int size)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
BT_DBG("session %p data %p size %d", session, data, size);
|
||||
|
||||
if (!(skb = alloc_skb(size + 1, GFP_ATOMIC))) {
|
||||
BT_ERR("Can't allocate memory for new frame");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
*skb_put(skb, 1) = hdr;
|
||||
if (data && size > 0)
|
||||
memcpy(skb_put(skb, size), data, size);
|
||||
|
||||
skb_queue_tail(&session->ctrl_transmit, skb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int hidp_send_ctrl_message(struct hidp_session *session,
|
||||
unsigned char hdr, unsigned char *data, int size)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = __hidp_send_ctrl_message(session, hdr, data, size);
|
||||
|
||||
hidp_schedule(session);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int hidp_queue_report(struct hidp_session *session,
|
||||
unsigned char *data, int size)
|
||||
{
|
||||
@@ -282,7 +315,9 @@ static int hidp_send_report(struct hidp_session *session, struct hid_report *rep
|
||||
|
||||
static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data, size_t count)
|
||||
{
|
||||
if (hidp_queue_report(hid->driver_data, data, count))
|
||||
if (hidp_send_ctrl_message(hid->driver_data,
|
||||
HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE,
|
||||
data, count))
|
||||
return -ENOMEM;
|
||||
return count;
|
||||
}
|
||||
@@ -307,39 +342,6 @@ static inline void hidp_del_timer(struct hidp_session *session)
|
||||
del_timer(&session->timer);
|
||||
}
|
||||
|
||||
static int __hidp_send_ctrl_message(struct hidp_session *session,
|
||||
unsigned char hdr, unsigned char *data, int size)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
BT_DBG("session %p data %p size %d", session, data, size);
|
||||
|
||||
if (!(skb = alloc_skb(size + 1, GFP_ATOMIC))) {
|
||||
BT_ERR("Can't allocate memory for new frame");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
*skb_put(skb, 1) = hdr;
|
||||
if (data && size > 0)
|
||||
memcpy(skb_put(skb, size), data, size);
|
||||
|
||||
skb_queue_tail(&session->ctrl_transmit, skb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int hidp_send_ctrl_message(struct hidp_session *session,
|
||||
unsigned char hdr, unsigned char *data, int size)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = __hidp_send_ctrl_message(session, hdr, data, size);
|
||||
|
||||
hidp_schedule(session);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void hidp_process_handshake(struct hidp_session *session,
|
||||
unsigned char param)
|
||||
{
|
||||
|
@@ -1368,7 +1368,6 @@ static int l2cap_ertm_send(struct sock *sk)
|
||||
|
||||
while ((skb = sk->sk_send_head) && (!l2cap_tx_window_full(sk)) &&
|
||||
!(pi->conn_state & L2CAP_CONN_REMOTE_BUSY)) {
|
||||
tx_skb = skb_clone(skb, GFP_ATOMIC);
|
||||
|
||||
if (pi->remote_max_tx &&
|
||||
bt_cb(skb)->retries == pi->remote_max_tx) {
|
||||
@@ -1376,6 +1375,8 @@ static int l2cap_ertm_send(struct sock *sk)
|
||||
break;
|
||||
}
|
||||
|
||||
tx_skb = skb_clone(skb, GFP_ATOMIC);
|
||||
|
||||
bt_cb(skb)->retries++;
|
||||
|
||||
control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
|
||||
@@ -3518,7 +3519,6 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
|
||||
struct l2cap_pinfo *pi;
|
||||
u16 control, len;
|
||||
u8 tx_seq;
|
||||
int err;
|
||||
|
||||
sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
|
||||
if (!sk) {
|
||||
@@ -3570,13 +3570,11 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
|
||||
goto drop;
|
||||
|
||||
if (__is_iframe(control))
|
||||
err = l2cap_data_channel_iframe(sk, control, skb);
|
||||
l2cap_data_channel_iframe(sk, control, skb);
|
||||
else
|
||||
err = l2cap_data_channel_sframe(sk, control, skb);
|
||||
l2cap_data_channel_sframe(sk, control, skb);
|
||||
|
||||
if (!err)
|
||||
goto done;
|
||||
break;
|
||||
goto done;
|
||||
|
||||
case L2CAP_MODE_STREAMING:
|
||||
control = get_unaligned_le16(skb->data);
|
||||
@@ -3602,7 +3600,7 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
|
||||
else
|
||||
pi->expected_tx_seq = tx_seq + 1;
|
||||
|
||||
err = l2cap_sar_reassembly_sdu(sk, skb, control);
|
||||
l2cap_sar_reassembly_sdu(sk, skb, control);
|
||||
|
||||
goto done;
|
||||
|
||||
|
Reference in New Issue
Block a user