diff options
author | Sudha Bheemanna <b.sudha@samsung.com> | 2016-09-07 15:22:08 +0530 |
---|---|---|
committer | Amit Purwar <amit.purwar@samsung.com> | 2019-06-28 09:43:31 +0530 |
commit | 23d3ec64494e1253885a652085d8120d4bc5f79a (patch) | |
tree | 1c93ff30da9329c0d4351b9e309bd76ea567673e | |
parent | 90a711ccd1c201ce83171c7761d05568c79ed104 (diff) | |
download | linux-rpi3-23d3ec64494e1253885a652085d8120d4bc5f79a.tar.gz linux-rpi3-23d3ec64494e1253885a652085d8120d4bc5f79a.tar.bz2 linux-rpi3-23d3ec64494e1253885a652085d8120d4bc5f79a.zip |
Bluetooth: Get Advertising TX power
This patch adds MGMT command to read the advertising TX power.
Change-Id: Ide9e5d332f034928d2eae2cbd68a025a0d42be1b
Signed-off-by: Sudha Bheemanna <b.sudha@samsung.com>
Signed-off-by: Amit Purwar <amit.purwar@samsung.com>
-rw-r--r-- | include/net/bluetooth/mgmt_tizen.h | 6 | ||||
-rw-r--r-- | net/bluetooth/mgmt.c | 32 |
2 files changed, 38 insertions, 0 deletions
diff --git a/include/net/bluetooth/mgmt_tizen.h b/include/net/bluetooth/mgmt_tizen.h index 4eaa867bb126..982c00d35c9b 100644 --- a/include/net/bluetooth/mgmt_tizen.h +++ b/include/net/bluetooth/mgmt_tizen.h @@ -161,6 +161,12 @@ struct mgmt_cp_set_voice_setting { } __packed; #define MGMT_SET_VOICE_SETTING_SIZE 9 +#define MGMT_OP_GET_ADV_TX_POWER (TIZEN_OP_CODE_BASE + 0x11) +#define MGMT_GET_ADV_TX_POWER_SIZE 0 +struct mgmt_rp_get_adv_tx_power { + __s8 adv_tx_power; +} __packed; + /* EVENTS */ /* For device name update changes */ diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 794fb46e2a26..dd3e7dfafb9a 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -6800,6 +6800,37 @@ unlock: return err; } +static int get_adv_tx_power(struct sock *sk, struct hci_dev *hdev, + void *data, u16 len) +{ + struct mgmt_rp_get_adv_tx_power *rp; + size_t rp_len; + int err; + + BT_DBG("%s", hdev->name); + + hci_dev_lock(hdev); + + rp_len = sizeof(*rp); + rp = kmalloc(rp_len, GFP_KERNEL); + if (!rp) { + err = -ENOMEM; + goto unlock; + } + + rp->adv_tx_power = hdev->adv_tx_power; + + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_ADV_TX_POWER, 0, rp, + rp_len); + + kfree(rp); + +unlock: + hci_dev_unlock(hdev); + + return err; +} + void mgmt_hardware_error(struct hci_dev *hdev, u8 err_code) { struct mgmt_ev_hardware_error ev; @@ -8800,6 +8831,7 @@ static const struct hci_mgmt_handler tizen_mgmt_handlers[] = { { set_manufacturer_data, MGMT_SET_MANUFACTURER_DATA_SIZE }, { le_set_scan_params, MGMT_LE_SET_SCAN_PARAMS_SIZE }, { set_voice_setting, MGMT_SET_VOICE_SETTING_SIZE }, + { get_adv_tx_power, MGMT_GET_ADV_TX_POWER_SIZE }, }; #endif |