Loading net/bluetooth/a2mp.c +55 −0 Original line number Diff line number Diff line Loading @@ -63,8 +63,63 @@ static void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, kfree(cmd); } static void a2mp_chan_close_cb(struct l2cap_chan *chan) { l2cap_chan_destroy(chan); } static void a2mp_chan_state_change_cb(struct l2cap_chan *chan, int state) { struct amp_mgr *mgr = chan->data; if (!mgr) return; BT_DBG("chan %p state %s", chan, state_to_string(state)); chan->state = state; switch (state) { case BT_CLOSED: if (mgr) amp_mgr_put(mgr); break; } } static struct sk_buff *a2mp_chan_alloc_skb_cb(struct l2cap_chan *chan, unsigned long len, int nb) { return bt_skb_alloc(len, GFP_KERNEL); } static struct l2cap_chan *a2mp_chan_no_new_conn_cb(struct l2cap_chan *chan) { BT_ERR("new_connection for chan %p not implemented", chan); return NULL; } static void a2mp_chan_no_teardown_cb(struct l2cap_chan *chan, int err) { BT_ERR("teardown for chan %p not implemented", chan); } static void a2mp_chan_no_ready(struct l2cap_chan *chan) { BT_ERR("ready for chan %p not implemented", chan); } static struct l2cap_ops a2mp_chan_ops = { .name = "L2CAP A2MP channel", .close = a2mp_chan_close_cb, .state_change = a2mp_chan_state_change_cb, .alloc_skb = a2mp_chan_alloc_skb_cb, /* Not implemented for A2MP */ .new_connection = a2mp_chan_no_new_conn_cb, .teardown = a2mp_chan_no_teardown_cb, .ready = a2mp_chan_no_ready, }; static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn) Loading Loading
net/bluetooth/a2mp.c +55 −0 Original line number Diff line number Diff line Loading @@ -63,8 +63,63 @@ static void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, kfree(cmd); } static void a2mp_chan_close_cb(struct l2cap_chan *chan) { l2cap_chan_destroy(chan); } static void a2mp_chan_state_change_cb(struct l2cap_chan *chan, int state) { struct amp_mgr *mgr = chan->data; if (!mgr) return; BT_DBG("chan %p state %s", chan, state_to_string(state)); chan->state = state; switch (state) { case BT_CLOSED: if (mgr) amp_mgr_put(mgr); break; } } static struct sk_buff *a2mp_chan_alloc_skb_cb(struct l2cap_chan *chan, unsigned long len, int nb) { return bt_skb_alloc(len, GFP_KERNEL); } static struct l2cap_chan *a2mp_chan_no_new_conn_cb(struct l2cap_chan *chan) { BT_ERR("new_connection for chan %p not implemented", chan); return NULL; } static void a2mp_chan_no_teardown_cb(struct l2cap_chan *chan, int err) { BT_ERR("teardown for chan %p not implemented", chan); } static void a2mp_chan_no_ready(struct l2cap_chan *chan) { BT_ERR("ready for chan %p not implemented", chan); } static struct l2cap_ops a2mp_chan_ops = { .name = "L2CAP A2MP channel", .close = a2mp_chan_close_cb, .state_change = a2mp_chan_state_change_cb, .alloc_skb = a2mp_chan_alloc_skb_cb, /* Not implemented for A2MP */ .new_connection = a2mp_chan_no_new_conn_cb, .teardown = a2mp_chan_no_teardown_cb, .ready = a2mp_chan_no_ready, }; static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn) Loading