lkml.org 
[lkml]   [2020]   [Jul]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/3] Bluetooth: Add mgmt suspend and resume events
    Date
    Add the controller suspend and resume events, which will signal when
    Bluetooth has completed preparing for suspend and when it's ready for
    resume.

    Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
    Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
    Reviewed-by: Sonny Sasaka <sonnysasaka@chromium.org>
    ---

    include/net/bluetooth/hci_core.h | 3 +++
    include/net/bluetooth/mgmt.h | 11 +++++++++++
    net/bluetooth/mgmt.c | 24 ++++++++++++++++++++++++
    3 files changed, 38 insertions(+)

    diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
    index bee1b4778ccc96..1b336e6ebe66aa 100644
    --- a/include/net/bluetooth/hci_core.h
    +++ b/include/net/bluetooth/hci_core.h
    @@ -1747,6 +1747,9 @@ void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
    void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
    u8 addr_type, s8 rssi, u8 *name, u8 name_len);
    void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
    +void mgmt_suspending(struct hci_dev *hdev, u8 state);
    +void mgmt_resuming(struct hci_dev *hdev, u8 reason, bdaddr_t *bdaddr,
    + u8 addr_type);
    bool mgmt_powering_down(struct hci_dev *hdev);
    void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
    void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent);
    diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h
    index beae5c3980f03b..d9a88cab379555 100644
    --- a/include/net/bluetooth/mgmt.h
    +++ b/include/net/bluetooth/mgmt.h
    @@ -1028,3 +1028,14 @@ struct mgmt_ev_adv_monitor_added {
    struct mgmt_ev_adv_monitor_removed {
    __le16 monitor_handle;
    } __packed;
    +
    +#define MGMT_EV_CONTROLLER_SUSPEND 0x002d
    +struct mgmt_ev_controller_suspend {
    + __u8 suspend_state;
    +} __packed;
    +
    +#define MGMT_EV_CONTROLLER_RESUME 0x002e
    +struct mgmt_ev_controller_resume {
    + __u8 wake_reason;
    + struct mgmt_addr_info addr;
    +} __packed;
    diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
    index f45105d2de7722..1c89ae819207ac 100644
    --- a/net/bluetooth/mgmt.c
    +++ b/net/bluetooth/mgmt.c
    @@ -8730,6 +8730,30 @@ void mgmt_discovering(struct hci_dev *hdev, u8 discovering)
    mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
    }

    +void mgmt_suspending(struct hci_dev *hdev, u8 state)
    +{
    + struct mgmt_ev_controller_suspend ev;
    +
    + ev.suspend_state = state;
    + mgmt_event(MGMT_EV_CONTROLLER_SUSPEND, hdev, &ev, sizeof(ev), NULL);
    +}
    +
    +void mgmt_resuming(struct hci_dev *hdev, u8 reason, bdaddr_t *bdaddr,
    + u8 addr_type)
    +{
    + struct mgmt_ev_controller_resume ev;
    +
    + ev.wake_reason = reason;
    + if (bdaddr) {
    + bacpy(&ev.addr.bdaddr, bdaddr);
    + ev.addr.type = addr_type;
    + } else {
    + memset(&ev.addr, 0, sizeof(ev.addr));
    + }
    +
    + mgmt_event(MGMT_EV_CONTROLLER_RESUME, hdev, &ev, sizeof(ev), NULL);
    +}
    +
    static struct hci_mgmt_chan chan = {
    .channel = HCI_CHANNEL_CONTROL,
    .handler_count = ARRAY_SIZE(mgmt_handlers),
    --
    2.28.0.rc0.142.g3c755180ce-goog
    \
     
     \ /
      Last update: 2020-07-29 03:43    [W:3.217 / U:1.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site