From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: MIME-Version: 1.0 In-Reply-To: <1334920191-29308-5-git-send-email-Andrei.Emeltchenko.news@gmail.com> References: <1332519246-16656-27-git-send-email-Andrei.Emeltchenko.news@gmail.com> <1334920191-29308-1-git-send-email-Andrei.Emeltchenko.news@gmail.com> <1334920191-29308-5-git-send-email-Andrei.Emeltchenko.news@gmail.com> Date: Fri, 20 Apr 2012 11:09:29 -0300 Message-ID: Subject: Re: [RFCv7 04/23] Bluetooth: A2MP: Add chan callbacks From: Ulisses Furquim To: Andrei Emeltchenko Cc: linux-bluetooth@vger.kernel.org Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hi Andrei, On Fri, Apr 20, 2012 at 8:09 AM, Andrei Emeltchenko wrote: > From: Andrei Emeltchenko > > Add state change, close and skb allocation callbacks. > > Signed-off-by: Andrei Emeltchenko > --- >  net/bluetooth/a2mp.c |   40 ++++++++++++++++++++++++++++++++++++++++ >  1 file changed, 40 insertions(+) > > diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c > index cb3bf74..67a7ad4 100644 > --- a/net/bluetooth/a2mp.c > +++ b/net/bluetooth/a2mp.c > @@ -63,8 +63,46 @@ static void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, >        kfree(cmd); >  } > > +static void a2mp_chan_state_change_cb(void *data, int state) > +{ > +       struct amp_mgr *mgr = data; > +       struct l2cap_chan *chan; > + > +       if (!mgr) > +               return; > + > +       chan = mgr->a2mp_chan; > + > +       BT_DBG("chan %p state %s", chan, state_to_string(state)); > + > +       chan->state = state; Do we have to l2cap_chan_lock() here? Or is that taken care somewhere else? > +       switch (state) { > +       case BT_CLOSED: > +               if (mgr) > +                       amp_mgr_put(mgr); > +               break; > +       } > +} > + > +static void a2mp_chan_close_cb(void *data) > +{ > +       struct amp_mgr *mgr = data; > + > +       l2cap_chan_destroy(mgr->a2mp_chan); > +} > + > +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_ops a2mp_chan_ops = { >        .name = "L2CAP A2MP channel", > +       .state_change = a2mp_chan_state_change_cb, > +       .close = a2mp_chan_close_cb, > +       .alloc_skb = a2mp_chan_alloc_skb_cb, >  }; > >  static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn) > @@ -102,6 +140,8 @@ static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn) >        chan->remote_mps = chan->omtu; >        chan->mps = chan->omtu; > > +       chan->state = BT_CONNECTED; > + >        return chan; >  } > > -- > 1.7.9.5 Regards, -- Ulisses Furquim ProFUSION embedded systems http://profusion.mobi Mobile: +55 19 9250 0942 Skype: ulissesffs