adapter: Refactor kernel feature globals
authorAbhishek Pandit-Subedi <abhishekpandit@chromium.org>
Fri, 11 Sep 2020 22:30:34 +0000 (15:30 -0700)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 11 Mar 2022 13:38:32 +0000 (19:08 +0530)
Move all the kernel specific feature globals into a single
kernel_features bitfield and replace all uses with the bitfield instead.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
src/adapter.c
src/adapter.h

index 93f0201..d56929d 100644 (file)
@@ -141,13 +141,7 @@ static const struct mgmt_blocked_key_info blocked_keys[] = {
 
 static DBusConnection *dbus_conn = NULL;
 
-static bool kernel_conn_control = false;
-
-static bool kernel_blocked_keys_supported = false;
-
-static bool kernel_set_system_config = false;
-
-static bool kernel_exp_features = false;
+static uint32_t kernel_features = 0;
 
 static GList *adapter_list = NULL;
 static unsigned int adapter_remaining = 0;
@@ -1118,7 +1112,7 @@ static bool set_discoverable(struct btd_adapter *adapter, uint8_t mode,
 
        DBG("sending set mode command for index %u", adapter->dev_id);
 
-       if (kernel_conn_control) {
+       if (has_kernel_features(KERNEL_CONN_CONTROL)) {
                if (mode)
                        set_mode(adapter, MGMT_OP_SET_CONNECTABLE, mode);
                else
@@ -1854,7 +1848,7 @@ static void trigger_passive_scanning(struct btd_adapter *adapter)
         * no need to start any discovery. The kernel will keep scanning
         * as long as devices are in its auto-connection list.
         */
-       if (kernel_conn_control)
+       if (has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        /*
@@ -1910,7 +1904,7 @@ static void stop_passive_scanning_complete(uint8_t status, uint16_t length,
         * no need to stop any discovery. The kernel will handle the
         * auto-connection by itself.
         */
-       if (kernel_conn_control)
+       if (has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        /*
@@ -6955,7 +6949,7 @@ static void property_set_mode_complete(uint8_t status, uint16_t length,
 
 static void clear_discoverable(struct btd_adapter *adapter)
 {
-       if (!kernel_conn_control)
+       if (!has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        if (!(adapter->current_settings & MGMT_SETTING_DISCOVERABLE))
@@ -7016,7 +7010,7 @@ static void property_set_mode(struct btd_adapter *adapter, uint32_t setting,
                break;
        case MGMT_SETTING_DISCOVERABLE:
 #ifndef TIZEN_FEATURE_BLUEZ_MODIFY
-               if (kernel_conn_control) {
+               if (has_kernel_features(KERNEL_CONN_CONTROL)) {
                        if (mode) {
                                set_mode(adapter, MGMT_OP_SET_CONNECTABLE,
                                                                        mode);
@@ -8982,7 +8976,8 @@ static void load_default_system_params(struct btd_adapter *adapter)
        size_t len = 0;
        unsigned int err;
 
-       if (!main_opts.default_params.num_entries || !kernel_set_system_config)
+       if (!main_opts.default_params.num_entries ||
+                       !has_kernel_features(KERNEL_SET_SYSTEM_CONFIG))
                return;
 
        params = malloc0(sizeof(*params) *
@@ -9748,7 +9743,7 @@ int adapter_connect_list_add(struct btd_adapter *adapter,
         * adapter_auto_connect_add() function is used to maintain what to
         * connect.
         */
-       if (kernel_conn_control)
+       if (has_kernel_features(KERNEL_CONN_CONTROL))
                return 0;
 
        if (g_slist_find(adapter->connect_list, device)) {
@@ -9788,7 +9783,7 @@ void adapter_connect_list_remove(struct btd_adapter *adapter,
        if (device == adapter->connect_le)
                adapter->connect_le = NULL;
 
-       if (kernel_conn_control)
+       if (has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        if (!g_slist_find(adapter->connect_list, device)) {
@@ -9850,7 +9845,7 @@ void adapter_whitelist_add(struct btd_adapter *adapter, struct btd_device *dev)
 {
        struct mgmt_cp_add_device cp;
 
-       if (!kernel_conn_control)
+       if (!has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        memset(&cp, 0, sizeof(cp));
@@ -9889,7 +9884,7 @@ void adapter_whitelist_remove(struct btd_adapter *adapter, struct btd_device *de
 {
        struct mgmt_cp_remove_device cp;
 
-       if (!kernel_conn_control)
+       if (!has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        memset(&cp, 0, sizeof(cp));
@@ -9945,7 +9940,7 @@ void adapter_auto_connect_add(struct btd_adapter *adapter,
        uint8_t bdaddr_type;
        unsigned int id;
 
-       if (!kernel_conn_control)
+       if (!has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        if (g_slist_find(adapter->connect_list, device)) {
@@ -10017,7 +10012,7 @@ void adapter_set_device_wakeable(struct btd_adapter *adapter,
        const bdaddr_t *bdaddr;
        uint8_t bdaddr_type;
 
-       if (!kernel_conn_control)
+       if (!has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        bdaddr = device_get_address(device);
@@ -10094,7 +10089,7 @@ void adapter_auto_connect_remove(struct btd_adapter *adapter,
        uint8_t bdaddr_type;
        unsigned int id;
 
-       if (!kernel_conn_control)
+       if (!has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        if (!g_slist_find(adapter->connect_list, device)) {
@@ -11990,7 +11985,7 @@ connect_le:
         * If kernel background scan is used then the kernel is
         * responsible for connecting.
         */
-       if (kernel_conn_control)
+       if (has_kernel_features(KERNEL_CONN_CONTROL))
                return;
 
        /*
@@ -14986,7 +14981,7 @@ static int clear_devices(struct btd_adapter *adapter)
 {
        struct mgmt_cp_remove_device cp;
 
-       if (!kernel_conn_control)
+       if (!has_kernel_features(KERNEL_CONN_CONTROL))
                return 0;
 
        memset(&cp, 0, sizeof(cp));
@@ -15605,7 +15600,7 @@ static void read_info_complete(uint8_t status, uint16_t length,
                adapter->central_rpa_res_support = 0x01;
 #endif
 
-       if (kernel_exp_features)
+       if (has_kernel_features(KERNEL_EXP_FEATURES))
                read_exp_features(adapter);
 
        err = adapter_register(adapter);
@@ -15795,7 +15790,8 @@ static void read_info_complete(uint8_t status, uint16_t length,
 
        set_name(adapter, btd_adapter_get_name(adapter));
 
-       if (kernel_blocked_keys_supported && !set_blocked_keys(adapter)) {
+       if (has_kernel_features(KERNEL_BLOCKED_KEYS_SUPPORTED) &&
+                       !set_blocked_keys(adapter)) {
                btd_error(adapter->dev_id,
                                "Failed to set blocked keys for index %u",
                                adapter->dev_id);
@@ -15806,7 +15802,7 @@ static void read_info_complete(uint8_t status, uint16_t length,
                        !(adapter->current_settings & MGMT_SETTING_BONDABLE))
                set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x01);
 
-       if (!kernel_conn_control)
+       if (!has_kernel_features(KERNEL_CONN_CONTROL))
                set_mode(adapter, MGMT_OP_SET_CONNECTABLE, 0x01);
        else if (adapter->current_settings & MGMT_SETTING_CONNECTABLE)
                set_mode(adapter, MGMT_OP_SET_CONNECTABLE, 0x00);
@@ -15994,19 +15990,19 @@ static void read_commands_complete(uint8_t status, uint16_t length,
                switch (op) {
                case MGMT_OP_ADD_DEVICE:
                        DBG("enabling kernel-side connection control");
-                       kernel_conn_control = true;
+                       kernel_features |= KERNEL_CONN_CONTROL;
                        break;
                case MGMT_OP_SET_BLOCKED_KEYS:
                        DBG("kernel supports the set_blocked_keys op");
-                       kernel_blocked_keys_supported = true;
+                       kernel_features |= KERNEL_BLOCKED_KEYS_SUPPORTED;
                        break;
                case MGMT_OP_SET_DEF_SYSTEM_CONFIG:
                        DBG("kernel supports set system confic");
-                       kernel_set_system_config = true;
+                       kernel_features |= KERNEL_SET_SYSTEM_CONFIG;
                        break;
                case MGMT_OP_READ_EXP_FEATURES_INFO:
                        DBG("kernel supports exp features");
-                       kernel_exp_features = true;
+                       kernel_features |= KERNEL_EXP_FEATURES;
                        break;
                default:
                        break;
@@ -16173,6 +16169,10 @@ bool btd_le_connect_before_pairing(void)
        return false;
 }
 
+bool has_kernel_features(uint32_t features)
+{
+       return !!(kernel_features & features);
+}
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
 int btd_adapter_set_streaming_mode(struct btd_adapter *adapter,
                                   const bdaddr_t *bdaddr, gboolean enable)
index a5e428a..bdb8bb0 100644 (file)
@@ -329,6 +329,15 @@ void btd_adapter_for_each_device(struct btd_adapter *adapter,
 
 bool btd_le_connect_before_pairing(void);
 
+enum kernel_features {
+       KERNEL_CONN_CONTROL             = 1 << 0,
+       KERNEL_BLOCKED_KEYS_SUPPORTED   = 1 << 1,
+       KERNEL_SET_SYSTEM_CONFIG        = 1 << 2,
+       KERNEL_EXP_FEATURES             = 1 << 3,
+};
+
+bool has_kernel_features(uint32_t feature);
+
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
 void adapter_send_event(const char *event);