All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulisses Furquim <ulisses@profusion.mobi>
To: Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [RFCv7 02/23] Bluetooth: A2MP: AMP Manager basic functions
Date: Fri, 20 Apr 2012 11:51:53 -0300	[thread overview]
Message-ID: <CAA37ikZqM3Lm_U-5mwCwiDBw-6z+3k517YtbEvbOBnyNBrmT3w@mail.gmail.com> (raw)
In-Reply-To: <1334920191-29308-3-git-send-email-Andrei.Emeltchenko.news@gmail.com>

Hi Andrei,

On Fri, Apr 20, 2012 at 8:09 AM, Andrei Emeltchenko
<Andrei.Emeltchenko.news@gmail.com> wrote:
> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>
> Define AMP Manager and some basic functions.
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
>  include/net/bluetooth/a2mp.h     |   30 +++++++++++++++++++++
>  include/net/bluetooth/hci_core.h |    1 +
>  net/bluetooth/a2mp.c             |   54 ++++++++++++++++++++++++++++++++++++++
>  net/bluetooth/hci_conn.c         |   15 +++++++++++
>  4 files changed, 100 insertions(+)
>  create mode 100644 include/net/bluetooth/a2mp.h
>
> diff --git a/include/net/bluetooth/a2mp.h b/include/net/bluetooth/a2mp.h
> new file mode 100644
> index 0000000..0fe8ddd
> --- /dev/null
> +++ b/include/net/bluetooth/a2mp.h
> @@ -0,0 +1,30 @@
> +/*
> +   Copyright (c) 2010,2011 Code Aurora Forum.  All rights reserved.
> +   Copyright (c) 2011,2012 Intel Corp.
> +
> +   This program is free software; you can redistribute it and/or modify
> +   it under the terms of the GNU General Public License version 2 and
> +   only version 2 as published by the Free Software Foundation.
> +
> +   This program is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU General Public License for more details.
> +*/
> +
> +#ifndef __A2MP_H
> +#define __A2MP_H
> +
> +struct amp_mgr {
> +       struct list_head        list;
> +       struct l2cap_conn       *l2cap_conn;
> +       struct l2cap_chan       *a2mp_chan;
> +       struct kref             kref;
> +       __u8                    ident;
> +       unsigned long           flags;
> +};
> +
> +void amp_mgr_get(struct amp_mgr *mgr);
> +int amp_mgr_put(struct amp_mgr *mgr);
> +
> +#endif /* __A2MP_H */
> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
> index ef6e654..16ab35d 100644
> --- a/include/net/bluetooth/hci_core.h
> +++ b/include/net/bluetooth/hci_core.h
> @@ -324,6 +324,7 @@ struct hci_conn {
>
>        struct sk_buff_head data_q;
>        struct list_head chan_list;
> +       struct list_head mgr_list;
>
>        struct delayed_work disc_work;
>        struct timer_list idle_timer;
> diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c
> index 1f733b5..85cd29a 100644
> --- a/net/bluetooth/a2mp.c
> +++ b/net/bluetooth/a2mp.c
> @@ -15,6 +15,7 @@
>  #include <net/bluetooth/bluetooth.h>
>  #include <net/bluetooth/hci_core.h>
>  #include <net/bluetooth/l2cap.h>
> +#include <net/bluetooth/a2mp.h>
>
>  static struct l2cap_ops a2mp_chan_ops = {
>        .name = "L2CAP A2MP channel",
> @@ -57,3 +58,56 @@ static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn)
>
>        return chan;
>  }
> +
> +/* AMP Manager functions */
> +void amp_mgr_get(struct amp_mgr *mgr)

I'm probably late to say this but maybe amp_mgr_hold() instead of
_get() like we already have in the stack would be better?

Regards,

-- Ulisses

> +{
> +       BT_DBG("mgr %p", mgr);
> +
> +       kref_get(&mgr->kref);
> +}
> +
> +static void amp_mgr_destroy(struct kref *kref)
> +{
> +       struct amp_mgr *mgr = container_of(kref, struct amp_mgr, kref);
> +
> +       BT_DBG("mgr %p", mgr);
> +
> +       kfree(mgr);
> +}
> +
> +int amp_mgr_put(struct amp_mgr *mgr)
> +{
> +       BT_DBG("mgr %p", mgr);
> +
> +       return kref_put(&mgr->kref, &amp_mgr_destroy);
> +}
> +
> +static struct amp_mgr *amp_mgr_create(struct l2cap_conn *conn)
> +{
> +       struct amp_mgr *mgr;
> +       struct l2cap_chan *chan;
> +
> +       mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
> +       if (!mgr)
> +               return NULL;
> +
> +       BT_DBG("conn %p mgr %p", conn, mgr);
> +
> +       mgr->l2cap_conn = conn;
> +
> +       chan = a2mp_chan_open(conn);
> +       if (!chan) {
> +               kfree(mgr);
> +               return NULL;
> +       }
> +
> +       mgr->a2mp_chan = chan;
> +       chan->data = mgr;
> +
> +       list_add(&mgr->list, &conn->hcon->mgr_list);
> +
> +       kref_init(&mgr->kref);
> +
> +       return mgr;
> +}
> diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
> index 947172b..2de2773 100644
> --- a/net/bluetooth/hci_conn.c
> +++ b/net/bluetooth/hci_conn.c
> @@ -43,6 +43,7 @@
>
>  #include <net/bluetooth/bluetooth.h>
>  #include <net/bluetooth/hci_core.h>
> +#include <net/bluetooth/a2mp.h>
>
>  static void hci_le_connect(struct hci_conn *conn)
>  {
> @@ -404,6 +405,8 @@ struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
>
>        INIT_LIST_HEAD(&conn->chan_list);
>
> +       INIT_LIST_HEAD(&conn->mgr_list);
> +
>        INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
>        setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
>        setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
> @@ -424,6 +427,16 @@ struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
>        return conn;
>  }
>
> +static void hci_amp_mgr_list_flush(struct hci_conn *conn)
> +{
> +       struct amp_mgr *mgr, *n;
> +
> +       BT_DBG("conn %p", conn);
> +
> +       list_for_each_entry_safe(mgr, n, &conn->mgr_list, list)
> +               amp_mgr_put(mgr);
> +}
> +
>  int hci_conn_del(struct hci_conn *conn)
>  {
>        struct hci_dev *hdev = conn->hdev;
> @@ -459,6 +472,8 @@ int hci_conn_del(struct hci_conn *conn)
>
>        hci_chan_list_flush(conn);
>
> +       hci_amp_mgr_list_flush(conn);
> +
>        hci_conn_hash_del(hdev, conn);
>        if (hdev->notify)
>                hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
> --
> 1.7.9.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Ulisses Furquim
ProFUSION embedded systems
http://profusion.mobi
Mobile: +55 19 9250 0942
Skype: ulissesffs

  reply	other threads:[~2012-04-20 14:51 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-23 16:13 [RFCv5 00/26] RFC Bluetooth A2MP implementation Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 01/26] Bluetooth: Add set_err to state_change callback Andrei Emeltchenko
2012-03-25 16:48   ` Gustavo Padovan
2012-03-23 16:13 ` [RFCv5 02/26] Bluetooth: Lock sk only if exist in state_change Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 03/26] Bluetooth: A2MP: Create A2MP channel Andrei Emeltchenko
2012-03-25 17:12   ` Gustavo Padovan
2012-03-26  9:27     ` Andrei Emeltchenko
2012-03-27 15:54       ` Gustavo Padovan
2012-03-23 16:13 ` [RFCv5 04/26] Bluetooth: A2MP: AMP Manager basic functions Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 05/26] Bluetooth: A2MP: Build and Send msg helpers Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 06/26] Bluetooth: A2MP: Add chan callbacks Andrei Emeltchenko
2012-03-25 17:16   ` Gustavo Padovan
2012-03-26 11:59     ` Andrei Emeltchenko
2012-03-27 16:06       ` Gustavo Padovan
2012-03-23 16:13 ` [RFCv5 07/26] Bluetooth: A2MP: Definitions for A2MP commands Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 08/26] Bluetooth: A2MP: Define A2MP status codes Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 09/26] Bluetooth: A2MP: Process A2MP messages Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 10/26] Bluetooth: A2MP: Process A2MP Command Reject Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 11/26] Bluetooth: A2MP: Helper functions to count HCI devs Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 12/26] Bluetooth: A2MP: Process A2MP Discover Request Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 13/26] Bluetooth: A2MP: Process A2MP Change Notify Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 14/26] Bluetooth: A2MP: Process A2MP Get Info Request Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 15/26] Bluetooth: A2MP: Process A2MP Get AMP Assoc Request Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 16/26] Bluetooth: A2MP: Process A2MP Create Physlink Request Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 17/26] Bluetooth: A2MP: Process A2MP Disc " Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 18/26] Bluetooth: A2MP: Process A2MP Command Responses Andrei Emeltchenko
2012-03-23 16:13 ` [RFCv5 19/26] Bluetooth: A2MP: Handling fixed channels Andrei Emeltchenko
2012-03-23 16:14 ` [RFCv5 20/26] Bluetooth: A2MP: Manage incoming connections Andrei Emeltchenko
2012-03-23 16:14 ` [RFCv5 21/26] Bluetooth: physical link HCI interface to AMP Andrei Emeltchenko
2012-03-23 16:14 ` [RFCv5 22/26] Bluetooth: Define AMP controller statuses Andrei Emeltchenko
2012-03-23 16:14 ` [RFCv5 23/26] Bluetooth: General HCI callback implementation Andrei Emeltchenko
2012-03-23 16:14 ` [RFCv5 24/26] Bluetooth: Process HCI callbacks in a workqueue Andrei Emeltchenko
2012-03-23 16:14 ` [RFCv5 25/26] Bluetooth: AMP: Use HCI callback for Read AMP Info Andrei Emeltchenko
2012-03-23 16:14 ` [RFCv5 26/26] Bluetooth: AMP: Read Local Assoc support Andrei Emeltchenko
2012-03-28 13:31   ` [RFCv6 00/26] RFC Bluetooth A2MP implementation Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 01/26] Bluetooth: Add Read Local AMP Info to init Andrei Emeltchenko
2012-04-06 22:38       ` Gustavo Padovan
2012-03-28 13:31     ` [RFCv6 02/26] Bluetooth: Adds set_default function in L2CAP setup Andrei Emeltchenko
2012-04-06 22:39       ` Gustavo Padovan
2012-03-28 13:31     ` [RFCv6 03/26] Bluetooth: A2MP: Create A2MP channel Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 04/26] Bluetooth: A2MP: AMP Manager basic functions Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 05/26] Bluetooth: A2MP: Build and Send msg helpers Andrei Emeltchenko
2012-04-06 22:44       ` Gustavo Padovan
2012-04-11 13:33         ` Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 06/26] Bluetooth: A2MP: Add chan callbacks Andrei Emeltchenko
2012-04-06 23:20       ` Gustavo Padovan
2012-04-12  8:00         ` Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 07/26] Bluetooth: A2MP: Definitions for A2MP commands Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 08/26] Bluetooth: A2MP: Define A2MP status codes Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 09/26] Bluetooth: A2MP: Process A2MP messages Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 10/26] Bluetooth: A2MP: Process A2MP Command Reject Andrei Emeltchenko
2012-04-06 23:23       ` Gustavo Padovan
2012-04-12  8:06         ` Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 11/26] Bluetooth: A2MP: Helper functions to count HCI devs Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 12/26] Bluetooth: A2MP: Process A2MP Discover Request Andrei Emeltchenko
2012-04-06 23:55       ` Gustavo Padovan
2012-03-28 13:31     ` [RFCv6 13/26] Bluetooth: A2MP: Process A2MP Change Notify Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 14/26] Bluetooth: A2MP: Process A2MP Get Info Request Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 15/26] Bluetooth: A2MP: Process A2MP Get AMP Assoc Request Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 16/26] Bluetooth: A2MP: Process A2MP Create Physlink Request Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 17/26] Bluetooth: A2MP: Process A2MP Disc " Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 18/26] Bluetooth: A2MP: Process A2MP Command Responses Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 19/26] Bluetooth: A2MP: Handling fixed channels Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 20/26] Bluetooth: A2MP: Manage incoming connections Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 21/26] Bluetooth: physical link HCI interface to AMP Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 22/26] Bluetooth: Define AMP controller statuses Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 23/26] Bluetooth: General HCI callback implementation Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 24/26] Bluetooth: Process HCI callbacks in a workqueue Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 25/26] Bluetooth: AMP: Use HCI callback for Read AMP Info Andrei Emeltchenko
2012-03-28 13:31     ` [RFCv6 26/26] Bluetooth: AMP: Read Local Assoc support Andrei Emeltchenko
2012-04-20 11:09   ` [RFCv7 00/23] RFC Bluetooth A2MP implementation Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 01/23] Bluetooth: A2MP: Create A2MP channel Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 02/23] Bluetooth: A2MP: AMP Manager basic functions Andrei Emeltchenko
2012-04-20 14:51       ` Ulisses Furquim [this message]
2012-04-23  7:22         ` Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 03/23] Bluetooth: A2MP: Build and Send msg helpers Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 04/23] Bluetooth: A2MP: Add chan callbacks Andrei Emeltchenko
2012-04-20 14:09       ` Ulisses Furquim
2012-04-23  7:26         ` Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 05/23] Bluetooth: A2MP: Definitions for A2MP commands Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 06/23] Bluetooth: A2MP: Define A2MP status codes Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 07/23] Bluetooth: A2MP: Process A2MP messages Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 08/23] Bluetooth: A2MP: Process A2MP Command Reject Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 09/23] Bluetooth: A2MP: Process A2MP Discover Request Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 10/23] Bluetooth: A2MP: Process A2MP Change Notify Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 11/23] Bluetooth: A2MP: Process A2MP Get Info Request Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 12/23] Bluetooth: A2MP: Process A2MP Get AMP Assoc Request Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 13/23] Bluetooth: A2MP: Process A2MP Create Physlink Request Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 14/23] Bluetooth: A2MP: Process A2MP Disc " Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 15/23] Bluetooth: A2MP: Process A2MP Command Responses Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 16/23] Bluetooth: A2MP: Handling fixed channels Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 17/23] Bluetooth: A2MP: Manage incoming connections Andrei Emeltchenko
2012-04-25 19:58       ` Gustavo Padovan
2012-04-26  8:29         ` Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 18/23] Bluetooth: physical link HCI interface to AMP Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 19/23] Bluetooth: Define AMP controller statuses Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 20/23] Bluetooth: General HCI callback implementation Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 21/23] Bluetooth: Process HCI callbacks in a workqueue Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 22/23] Bluetooth: AMP: Use HCI callback for Read AMP Info Andrei Emeltchenko
2012-04-20 11:09     ` [RFCv7 23/23] Bluetooth: AMP: Read Local Assoc support Andrei Emeltchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAA37ikZqM3Lm_U-5mwCwiDBw-6z+3k517YtbEvbOBnyNBrmT3w@mail.gmail.com \
    --to=ulisses@profusion.mobi \
    --cc=Andrei.Emeltchenko.news@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.