Difference between bt_coex_active=N and bt_coex_active=1

What is the difference between bt_coex_active=N and bt_coex_active=1?


bt_coex_active

is an option for bluetooth and part of the wireless driver (iwlegacy; Intel PRO/Wireless 3945 and WiFi Link 4965 devices).

It is used to enable both wifi and bluetooth at the same time. Something that not always works.

  • 0 means not active (or false)
  • 1 means active (or true)

The valid options are listed in

/sys/module/[module name]/parameters/[optionname]

As an example using iwlwifi:

/sys/module/iwlwifi/parameters 

it shows bt_coex_active: Y.So N or 0 will be inactive and Y or 1 active.


In addition to Rinzwind's fine answer, I will add some additional details.

The difference between bt_coex_active=N and bt_coex_active=1 is that one of them may or may not be incorrect and therefore ineffective.

First, some background. The available and manipulable parameters to change the behavior of a kernel driver are found in modinfo . For example, here are the parameters found from modinfo iwlwifi, a common driver for Intel wireless devices:

parm:           swcrypto:using crypto in software (default 0 [hardware]) (int)
parm:           11n_disable:disable 11n functionality, bitmap: 1: full, 2: disable agg TX, 4: disable agg RX, 8 enable agg TX (uint)
parm:           amsdu_size:amsdu size 0: 12K for multi Rx queue devices, 4K for other devices 1:4K 2:8K 3:12K (default 0) (int)
parm:           fw_restart:restart firmware in case of error (default true) (bool)
parm:           antenna_coupling:specify antenna coupling in dB (default: 0 dB) (int)
parm:           nvm_file:NVM file name (charp)
parm:           d0i3_disable:disable d0i3 functionality (default: Y) (bool)
parm:           lar_disable:disable LAR functionality (default: N) (bool)
parm:           uapsd_disable:disable U-APSD functionality bitmap 1: BSS 2: P2P Client (default: 3) (uint)
parm:           bt_coex_active:enable wifi/bt co-exist (default: enable) (bool)
parm:           led_mode:0=system default, 1=On(RF On)/Off(RF Off), 2=blinking, 3=Off (default: 0) (int)
parm:           power_save:enable WiFi power management (default: disable) (bool)
parm:           power_level:default power save level (range from 1 - 5, default: 1) (int)
parm:           fw_monitor:firmware monitor - to debug FW (default: false - needs lots of memory) (bool)
parm:           d0i3_timeout:Timeout to D0i3 entry when idle (ms) (uint)
parm:           disable_11ac:Disable VHT capabilities (default: false) (bool)
parm:           remove_when_gone:Remove dev from PCIe bus if it is deemed inaccessible (default: false) (bool)

Therefore, we can change the behavior of the driver by invoking a parameter; in your case:

sudo modprobe -r iwlwifi
sudo modprobe iwlwifi bt_coex_active=N

We can make the parameter permanent by writing a conf file. The driver iwlwifi already has a required file, so we can merely add the parameter to it:

sudo -i
echo "options iwlwifi bt_coex_active=N" >> /etc/modprobe.d/iwlwifi.conf
exit

The > symbol means write to and overwrite if needed, the file. >> means append to the file. In the case of iwlwifi, we want 'append.'

But wait! How do we know that it is supposed to be Y or N or 1 or 0? The first clue is that the parameter is listed as being manipulable by a boolean expression (bool) and not as an integer (int), 0 or 1. Second, we can easily find out what the driver expects by loading the driver:

sudo modprobe iwlwifi

And then checking the parameter value:

cat /sys/module/iwlwifi/parameters/bt_coex_active

If the driver is loaded without any parameter, it will load the default for the driver; in this case, Y. We then know that, in this context, 'boolean' means Y or N.

Does the driver accept 1 or 0 as a replacement for Y and N? Again, we can easily check by simply trying it:

sudo modprobe -r iwlwifi
sudo modprobe iwlwifi bt_coex_active=0
cat /sys/module/iwlwifi/parameters/bt_coex_active

The result is N, so we know that the driver is written to accept either Y or N or 1 or 0.

CAUTION: The bt_coexist parameter is available in several other non-Intel drivers. Some may or may not interchangeably accept Y or N or 1 or 0. The only way to find out for sure is to verify as above.