iwl_mei_cache
rcu_dereference_protected(iwl_mei_cache.netdev,
if (!rcu_access_pointer(iwl_mei_cache.netdev)) {
.supported_versions[0] = iwl_mei_cache.sap_version,
kfree(iwl_mei_cache.conn_info);
iwl_mei_cache.conn_info =
kfree(iwl_mei_cache.conn_info);
iwl_mei_cache.conn_info = NULL;
iwl_mei_cache.rf_kill = rfkill_state;
ether_addr_copy(iwl_mei_cache.mac_address, mac_address);
ether_addr_copy(iwl_mei_cache.nvm_address, nvm_address);
iwl_mei_cache.mcc = mcc;
kfree(iwl_mei_cache.power_limit);
iwl_mei_cache.power_limit = kmemdup(power_limit,
rcu_assign_pointer(iwl_mei_cache.netdev, netdev);
rcu_dereference_protected(iwl_mei_cache.netdev,
rcu_assign_pointer(iwl_mei_cache.netdev, netdev);
if (iwl_mei_cache.priv || iwl_mei_cache.ops) {
iwl_mei_cache.priv = priv;
iwl_mei_cache.ops = ops;
if (rcu_access_pointer(iwl_mei_cache.netdev))
kfree(iwl_mei_cache.conn_info);
iwl_mei_cache.conn_info = NULL;
kfree(iwl_mei_cache.power_limit);
iwl_mei_cache.power_limit = NULL;
iwl_mei_cache.ops = NULL;
iwl_mei_cache.priv = NULL;
if (mei_cldev_enabled(cldev) && iwl_mei_cache.ops) {
iwl_mei_cache.ops->nic_stolen(iwl_mei_cache.priv);
if (rcu_access_pointer(iwl_mei_cache.netdev)) {
dev = rcu_dereference_protected(iwl_mei_cache.netdev,
if (iwl_mei_cache.ops)
iwl_mei_cache.ops->rfkill(iwl_mei_cache.priv, false, false);
static struct iwl_mei_cache iwl_mei_cache = {
iwl_mei_cache.sap_version = version;
iwl_mei_cache.sap_version == IWL_MEI_SAP_VERSION_3 ?
netdev = rcu_dereference_protected(iwl_mei_cache.netdev,
if (rsp->supported_version != iwl_mei_cache.sap_version) {
if (!iwl_mei_cache.ops ||
iwl_mei_cache.ops->me_conn_status(iwl_mei_cache.priv, &conn_info);
iwl_mei_cache.ops->roaming_forbidden(iwl_mei_cache.priv,
iwl_mei_cache.ops->rfkill(iwl_mei_cache.priv,
.mcc = cpu_to_le16(iwl_mei_cache.mcc),
.val = cpu_to_le32(iwl_mei_cache.rf_kill),
if (iwl_mei_cache.ops) {
iwl_mei_cache.ops->sap_connected(iwl_mei_cache.priv);
if (iwl_mei_cache.conn_info) {
link_msg.conn_info = *iwl_mei_cache.conn_info;
if (iwl_mei_cache.power_limit) {
memcpy(sar_msg.sar_chain_info_table, iwl_mei_cache.power_limit,
if (is_valid_ether_addr(iwl_mei_cache.mac_address)) {
iwl_mei_cache.mac_address);
iwl_mei_cache.nvm_address);
else if (iwl_mei_cache.ops)
iwl_mei_cache.ops->rfkill(iwl_mei_cache.priv, false, false);
if (iwl_mei_cache.ops)
if (iwl_mei_cache.ops && !mei->device_down) {
iwl_mei_cache.ops->rfkill(iwl_mei_cache.priv, true, true);
if (iwl_mei_cache.ops)
iwl_mei_cache.ops->rfkill(iwl_mei_cache.priv, false, false);