Commit 17a2911f authored by John W. Linville's avatar John W. Linville

Merge branch 'master' of...

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
parents 94dace10 a8a48e60
...@@ -29,20 +29,6 @@ ...@@ -29,20 +29,6 @@
struct btmrvl_debugfs_data { struct btmrvl_debugfs_data {
struct dentry *config_dir; struct dentry *config_dir;
struct dentry *status_dir; struct dentry *status_dir;
/* config */
struct dentry *psmode;
struct dentry *pscmd;
struct dentry *hsmode;
struct dentry *hscmd;
struct dentry *gpiogap;
struct dentry *hscfgcmd;
/* status */
struct dentry *curpsmode;
struct dentry *hsstate;
struct dentry *psstate;
struct dentry *txdnldready;
}; };
static ssize_t btmrvl_hscfgcmd_write(struct file *file, static ssize_t btmrvl_hscfgcmd_write(struct file *file,
...@@ -91,47 +77,6 @@ static const struct file_operations btmrvl_hscfgcmd_fops = { ...@@ -91,47 +77,6 @@ static const struct file_operations btmrvl_hscfgcmd_fops = {
.llseek = default_llseek, .llseek = default_llseek,
}; };
static ssize_t btmrvl_psmode_write(struct file *file, const char __user *ubuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
long result, ret;
memset(buf, 0, sizeof(buf));
if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
return -EFAULT;
ret = strict_strtol(buf, 10, &result);
if (ret)
return ret;
priv->btmrvl_dev.psmode = result;
return count;
}
static ssize_t btmrvl_psmode_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
int ret;
ret = snprintf(buf, sizeof(buf) - 1, "%d\n",
priv->btmrvl_dev.psmode);
return simple_read_from_buffer(userbuf, count, ppos, buf, ret);
}
static const struct file_operations btmrvl_psmode_fops = {
.read = btmrvl_psmode_read,
.write = btmrvl_psmode_write,
.open = simple_open,
.llseek = default_llseek,
};
static ssize_t btmrvl_pscmd_write(struct file *file, const char __user *ubuf, static ssize_t btmrvl_pscmd_write(struct file *file, const char __user *ubuf,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
...@@ -178,47 +123,6 @@ static const struct file_operations btmrvl_pscmd_fops = { ...@@ -178,47 +123,6 @@ static const struct file_operations btmrvl_pscmd_fops = {
.llseek = default_llseek, .llseek = default_llseek,
}; };
static ssize_t btmrvl_gpiogap_write(struct file *file, const char __user *ubuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
long result, ret;
memset(buf, 0, sizeof(buf));
if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
return -EFAULT;
ret = strict_strtol(buf, 16, &result);
if (ret)
return ret;
priv->btmrvl_dev.gpio_gap = result;
return count;
}
static ssize_t btmrvl_gpiogap_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
int ret;
ret = snprintf(buf, sizeof(buf) - 1, "0x%x\n",
priv->btmrvl_dev.gpio_gap);
return simple_read_from_buffer(userbuf, count, ppos, buf, ret);
}
static const struct file_operations btmrvl_gpiogap_fops = {
.read = btmrvl_gpiogap_read,
.write = btmrvl_gpiogap_write,
.open = simple_open,
.llseek = default_llseek,
};
static ssize_t btmrvl_hscmd_write(struct file *file, const char __user *ubuf, static ssize_t btmrvl_hscmd_write(struct file *file, const char __user *ubuf,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
...@@ -263,119 +167,6 @@ static const struct file_operations btmrvl_hscmd_fops = { ...@@ -263,119 +167,6 @@ static const struct file_operations btmrvl_hscmd_fops = {
.llseek = default_llseek, .llseek = default_llseek,
}; };
static ssize_t btmrvl_hsmode_write(struct file *file, const char __user *ubuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
long result, ret;
memset(buf, 0, sizeof(buf));
if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
return -EFAULT;
ret = strict_strtol(buf, 10, &result);
if (ret)
return ret;
priv->btmrvl_dev.hsmode = result;
return count;
}
static ssize_t btmrvl_hsmode_read(struct file *file, char __user * userbuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
int ret;
ret = snprintf(buf, sizeof(buf) - 1, "%d\n", priv->btmrvl_dev.hsmode);
return simple_read_from_buffer(userbuf, count, ppos, buf, ret);
}
static const struct file_operations btmrvl_hsmode_fops = {
.read = btmrvl_hsmode_read,
.write = btmrvl_hsmode_write,
.open = simple_open,
.llseek = default_llseek,
};
static ssize_t btmrvl_curpsmode_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
int ret;
ret = snprintf(buf, sizeof(buf) - 1, "%d\n", priv->adapter->psmode);
return simple_read_from_buffer(userbuf, count, ppos, buf, ret);
}
static const struct file_operations btmrvl_curpsmode_fops = {
.read = btmrvl_curpsmode_read,
.open = simple_open,
.llseek = default_llseek,
};
static ssize_t btmrvl_psstate_read(struct file *file, char __user * userbuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
int ret;
ret = snprintf(buf, sizeof(buf) - 1, "%d\n", priv->adapter->ps_state);
return simple_read_from_buffer(userbuf, count, ppos, buf, ret);
}
static const struct file_operations btmrvl_psstate_fops = {
.read = btmrvl_psstate_read,
.open = simple_open,
.llseek = default_llseek,
};
static ssize_t btmrvl_hsstate_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
int ret;
ret = snprintf(buf, sizeof(buf) - 1, "%d\n", priv->adapter->hs_state);
return simple_read_from_buffer(userbuf, count, ppos, buf, ret);
}
static const struct file_operations btmrvl_hsstate_fops = {
.read = btmrvl_hsstate_read,
.open = simple_open,
.llseek = default_llseek,
};
static ssize_t btmrvl_txdnldready_read(struct file *file, char __user *userbuf,
size_t count, loff_t *ppos)
{
struct btmrvl_private *priv = file->private_data;
char buf[16];
int ret;
ret = snprintf(buf, sizeof(buf) - 1, "%d\n",
priv->btmrvl_dev.tx_dnld_rdy);
return simple_read_from_buffer(userbuf, count, ppos, buf, ret);
}
static const struct file_operations btmrvl_txdnldready_fops = {
.read = btmrvl_txdnldready_read,
.open = simple_open,
.llseek = default_llseek,
};
void btmrvl_debugfs_init(struct hci_dev *hdev) void btmrvl_debugfs_init(struct hci_dev *hdev)
{ {
struct btmrvl_private *priv = hci_get_drvdata(hdev); struct btmrvl_private *priv = hci_get_drvdata(hdev);
...@@ -394,30 +185,28 @@ void btmrvl_debugfs_init(struct hci_dev *hdev) ...@@ -394,30 +185,28 @@ void btmrvl_debugfs_init(struct hci_dev *hdev)
dbg->config_dir = debugfs_create_dir("config", hdev->debugfs); dbg->config_dir = debugfs_create_dir("config", hdev->debugfs);
dbg->psmode = debugfs_create_file("psmode", 0644, dbg->config_dir, debugfs_create_u8("psmode", 0644, dbg->config_dir,
priv, &btmrvl_psmode_fops); &priv->btmrvl_dev.psmode);
dbg->pscmd = debugfs_create_file("pscmd", 0644, dbg->config_dir, debugfs_create_file("pscmd", 0644, dbg->config_dir,
priv, &btmrvl_pscmd_fops); priv, &btmrvl_pscmd_fops);
dbg->gpiogap = debugfs_create_file("gpiogap", 0644, dbg->config_dir, debugfs_create_x16("gpiogap", 0644, dbg->config_dir,
priv, &btmrvl_gpiogap_fops); &priv->btmrvl_dev.gpio_gap);
dbg->hsmode = debugfs_create_file("hsmode", 0644, dbg->config_dir, debugfs_create_u8("hsmode", 0644, dbg->config_dir,
priv, &btmrvl_hsmode_fops); &priv->btmrvl_dev.hsmode);
dbg->hscmd = debugfs_create_file("hscmd", 0644, dbg->config_dir, debugfs_create_file("hscmd", 0644, dbg->config_dir,
priv, &btmrvl_hscmd_fops); priv, &btmrvl_hscmd_fops);
dbg->hscfgcmd = debugfs_create_file("hscfgcmd", 0644, dbg->config_dir, debugfs_create_file("hscfgcmd", 0644, dbg->config_dir,
priv, &btmrvl_hscfgcmd_fops); priv, &btmrvl_hscfgcmd_fops);
dbg->status_dir = debugfs_create_dir("status", hdev->debugfs); dbg->status_dir = debugfs_create_dir("status", hdev->debugfs);
dbg->curpsmode = debugfs_create_file("curpsmode", 0444, debugfs_create_u8("curpsmode", 0444, dbg->status_dir,
dbg->status_dir, priv, &priv->adapter->psmode);
&btmrvl_curpsmode_fops); debugfs_create_u8("psstate", 0444, dbg->status_dir,
dbg->psstate = debugfs_create_file("psstate", 0444, dbg->status_dir, &priv->adapter->ps_state);
priv, &btmrvl_psstate_fops); debugfs_create_u8("hsstate", 0444, dbg->status_dir,
dbg->hsstate = debugfs_create_file("hsstate", 0444, dbg->status_dir, &priv->adapter->hs_state);
priv, &btmrvl_hsstate_fops); debugfs_create_u8("txdnldready", 0444, dbg->status_dir,
dbg->txdnldready = debugfs_create_file("txdnldready", 0444, &priv->btmrvl_dev.tx_dnld_rdy);
dbg->status_dir, priv,
&btmrvl_txdnldready_fops);
} }
void btmrvl_debugfs_remove(struct hci_dev *hdev) void btmrvl_debugfs_remove(struct hci_dev *hdev)
...@@ -428,19 +217,8 @@ void btmrvl_debugfs_remove(struct hci_dev *hdev) ...@@ -428,19 +217,8 @@ void btmrvl_debugfs_remove(struct hci_dev *hdev)
if (!dbg) if (!dbg)
return; return;
debugfs_remove(dbg->psmode); debugfs_remove_recursive(dbg->config_dir);
debugfs_remove(dbg->pscmd); debugfs_remove_recursive(dbg->status_dir);
debugfs_remove(dbg->gpiogap);
debugfs_remove(dbg->hsmode);
debugfs_remove(dbg->hscmd);
debugfs_remove(dbg->hscfgcmd);
debugfs_remove(dbg->config_dir);
debugfs_remove(dbg->curpsmode);
debugfs_remove(dbg->psstate);
debugfs_remove(dbg->hsstate);
debugfs_remove(dbg->txdnldready);
debugfs_remove(dbg->status_dir);
kfree(dbg); kfree(dbg);
} }
...@@ -228,24 +228,24 @@ static int btmrvl_sdio_poll_card_status(struct btmrvl_sdio_card *card, u8 bits) ...@@ -228,24 +228,24 @@ static int btmrvl_sdio_poll_card_status(struct btmrvl_sdio_card *card, u8 bits)
static int btmrvl_sdio_verify_fw_download(struct btmrvl_sdio_card *card, static int btmrvl_sdio_verify_fw_download(struct btmrvl_sdio_card *card,
int pollnum) int pollnum)
{ {
int ret = -ETIMEDOUT;
u16 firmwarestat; u16 firmwarestat;
unsigned int tries; int tries, ret;
/* Wait for firmware to become ready */ /* Wait for firmware to become ready */
for (tries = 0; tries < pollnum; tries++) { for (tries = 0; tries < pollnum; tries++) {
if (btmrvl_sdio_read_fw_status(card, &firmwarestat) < 0) sdio_claim_host(card->func);
ret = btmrvl_sdio_read_fw_status(card, &firmwarestat);
sdio_release_host(card->func);
if (ret < 0)
continue; continue;
if (firmwarestat == FIRMWARE_READY) { if (firmwarestat == FIRMWARE_READY)
ret = 0; return 0;
break;
} else { msleep(10);
msleep(10);
}
} }
return ret; return -ETIMEDOUT;
} }
static int btmrvl_sdio_download_helper(struct btmrvl_sdio_card *card) static int btmrvl_sdio_download_helper(struct btmrvl_sdio_card *card)
...@@ -874,7 +874,7 @@ static int btmrvl_sdio_host_to_card(struct btmrvl_private *priv, ...@@ -874,7 +874,7 @@ static int btmrvl_sdio_host_to_card(struct btmrvl_private *priv,
static int btmrvl_sdio_download_fw(struct btmrvl_sdio_card *card) static int btmrvl_sdio_download_fw(struct btmrvl_sdio_card *card)
{ {
int ret = 0; int ret;
u8 fws0; u8 fws0;
int pollnum = MAX_POLL_TRIES; int pollnum = MAX_POLL_TRIES;
...@@ -882,13 +882,14 @@ static int btmrvl_sdio_download_fw(struct btmrvl_sdio_card *card) ...@@ -882,13 +882,14 @@ static int btmrvl_sdio_download_fw(struct btmrvl_sdio_card *card)
BT_ERR("card or function is NULL!"); BT_ERR("card or function is NULL!");
return -EINVAL; return -EINVAL;
} }
sdio_claim_host(card->func);
if (!btmrvl_sdio_verify_fw_download(card, 1)) { if (!btmrvl_sdio_verify_fw_download(card, 1)) {
BT_DBG("Firmware already downloaded!"); BT_DBG("Firmware already downloaded!");
goto done; return 0;
} }
sdio_claim_host(card->func);
/* Check if other function driver is downloading the firmware */ /* Check if other function driver is downloading the firmware */
fws0 = sdio_readb(card->func, card->reg->card_fw_status0, &ret); fws0 = sdio_readb(card->func, card->reg->card_fw_status0, &ret);
if (ret) { if (ret) {
...@@ -918,15 +919,21 @@ static int btmrvl_sdio_download_fw(struct btmrvl_sdio_card *card) ...@@ -918,15 +919,21 @@ static int btmrvl_sdio_download_fw(struct btmrvl_sdio_card *card)
} }
} }
sdio_release_host(card->func);
/*
* winner or not, with this test the FW synchronizes when the
* module can continue its initialization
*/
if (btmrvl_sdio_verify_fw_download(card, pollnum)) { if (btmrvl_sdio_verify_fw_download(card, pollnum)) {
BT_ERR("FW failed to be active in time!"); BT_ERR("FW failed to be active in time!");
ret = -ETIMEDOUT; return -ETIMEDOUT;
goto done;
} }
return 0;
done: done:
sdio_release_host(card->func); sdio_release_host(card->func);
return ret; return ret;
} }
...@@ -989,8 +996,6 @@ static int btmrvl_sdio_probe(struct sdio_func *func, ...@@ -989,8 +996,6 @@ static int btmrvl_sdio_probe(struct sdio_func *func,
goto unreg_dev; goto unreg_dev;
} }
msleep(100);
btmrvl_sdio_enable_host_int(card); btmrvl_sdio_enable_host_int(card);
priv = btmrvl_add_card(card); priv = btmrvl_add_card(card);
......
This diff is collapsed.
...@@ -336,6 +336,7 @@ static void brcms_remove(struct bcma_device *pdev) ...@@ -336,6 +336,7 @@ static void brcms_remove(struct bcma_device *pdev)
struct brcms_info *wl = hw->priv; struct brcms_info *wl = hw->priv;
if (wl->wlc) { if (wl->wlc) {
brcms_led_unregister(wl);
wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, false); wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, false);
wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy); wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy);
ieee80211_unregister_hw(hw); ieee80211_unregister_hw(hw);
......
...@@ -172,7 +172,7 @@ int iwl_calib_set(struct iwl_priv *priv, ...@@ -172,7 +172,7 @@ int iwl_calib_set(struct iwl_priv *priv,
const struct iwl_calib_hdr *cmd, int len); const struct iwl_calib_hdr *cmd, int len);
void iwl_calib_free_results(struct iwl_priv *priv); void iwl_calib_free_results(struct iwl_priv *priv);
int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log, int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log,
char **buf, bool display); char **buf);
int iwlagn_hw_valid_rtc_data_addr(u32 addr); int iwlagn_hw_valid_rtc_data_addr(u32 addr);
/* lib */ /* lib */
......
...@@ -2237,15 +2237,13 @@ static ssize_t iwl_dbgfs_log_event_read(struct file *file, ...@@ -2237,15 +2237,13 @@ static ssize_t iwl_dbgfs_log_event_read(struct file *file,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
struct iwl_priv *priv = file->private_data; struct iwl_priv *priv = file->private_data;
char *buf; char *buf = NULL;
int pos = 0; ssize_t ret;
ssize_t ret = -ENOMEM;
ret = pos = iwl_dump_nic_event_log(priv, true, &buf, true); ret = iwl_dump_nic_event_log(priv, true, &buf);
if (buf) { if (ret > 0)
ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos); ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
kfree(buf); kfree(buf);
}
return ret; return ret;
} }
...@@ -2269,7 +2267,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file, ...@@ -2269,7 +2267,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file,
if (sscanf(buf, "%d", &event_log_flag) != 1) if (sscanf(buf, "%d", &event_log_flag) != 1)
return -EFAULT; return -EFAULT;
if (event_log_flag == 1) if (event_log_flag == 1)
iwl_dump_nic_event_log(priv, true, NULL, false); iwl_dump_nic_event_log(priv, true, NULL);
return count; return count;
} }
......
...@@ -1795,7 +1795,7 @@ static int iwl_print_last_event_logs(struct iwl_priv *priv, u32 capacity, ...@@ -1795,7 +1795,7 @@ static int iwl_print_last_event_logs(struct iwl_priv *priv, u32 capacity,
#define DEFAULT_DUMP_EVENT_LOG_ENTRIES (20) #define DEFAULT_DUMP_EVENT_LOG_ENTRIES (20)
int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log, int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log,
char **buf, bool display) char **buf)
{ {
u32 base; /* SRAM byte address of event log header */ u32 base; /* SRAM byte address of event log header */
u32 capacity; /* event log capacity in # entries */ u32 capacity; /* event log capacity in # entries */
...@@ -1866,7 +1866,7 @@ int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log, ...@@ -1866,7 +1866,7 @@ int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log,
size); size);
#ifdef CONFIG_IWLWIFI_DEBUG #ifdef CONFIG_IWLWIFI_DEBUG
if (display) { if (buf) {
if (full_log) if (full_log)
bufsz = capacity * 48; bufsz = capacity * 48;
else else
...@@ -1962,7 +1962,7 @@ static void iwl_nic_error(struct iwl_op_mode *op_mode) ...@@ -1962,7 +1962,7 @@ static void iwl_nic_error(struct iwl_op_mode *op_mode)
priv->fw->fw_version); priv->fw->fw_version);
iwl_dump_nic_error_log(priv); iwl_dump_nic_error_log(priv);
iwl_dump_nic_event_log(priv, false, NULL, false); iwl_dump_nic_event_log(priv, false, NULL);
iwlagn_fw_error(priv, false); iwlagn_fw_error(priv, false);
} }
......
...@@ -695,6 +695,7 @@ void iwl_clear_ucode_stations(struct iwl_priv *priv, ...@@ -695,6 +695,7 @@ void iwl_clear_ucode_stations(struct iwl_priv *priv,
void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx) void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
{ {
struct iwl_addsta_cmd sta_cmd; struct iwl_addsta_cmd sta_cmd;
static const struct iwl_link_quality_cmd zero_lq = {};
struct iwl_link_quality_cmd lq; struct iwl_link_quality_cmd lq;
int i; int i;
bool found = false; bool found = false;
...@@ -733,7 +734,9 @@ void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx) ...@@ -733,7 +734,9 @@ void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
else else
memcpy(&lq, priv->stations[i].lq, memcpy(&lq, priv->stations[i].lq,
sizeof(struct iwl_link_quality_cmd)); sizeof(struct iwl_link_quality_cmd));
send_lq = true;
if (!memcmp(&lq, &zero_lq, sizeof(lq)))
send_lq = true;
} }
spin_unlock_bh(&priv->sta_lock); spin_unlock_bh(&priv->sta_lock);
ret = iwl_send_add_sta(priv, &sta_cmd, CMD_SYNC); ret = iwl_send_add_sta(priv, &sta_cmd, CMD_SYNC);
......
...@@ -207,7 +207,7 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) ...@@ -207,7 +207,7 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
hw->wiphy->hw_version = mvm->trans->hw_id; hw->wiphy->hw_version = mvm->trans->hw_id;
if (iwlwifi_mod_params.power_save) if (iwlmvm_mod_params.power_scheme != IWL_POWER_SCHEME_CAM)
hw->wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT; hw->wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
else else
hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
......
...@@ -153,11 +153,6 @@ static void iwl_mvm_phy_ctxt_cmd_data(struct iwl_mvm *mvm, ...@@ -153,11 +153,6 @@ static void iwl_mvm_phy_ctxt_cmd_data(struct iwl_mvm *mvm,
cmd->ci.ctrl_pos = iwl_mvm_get_ctrl_pos(chandef); cmd->ci.ctrl_pos = iwl_mvm_get_ctrl_pos(chandef);
/* Set rx the chains */ /* Set rx the chains */
/* TODO:
* Need to add on chain noise calibration limitations, and
* BT coex considerations.
*/
idle_cnt = chains_static; idle_cnt = chains_static;
active_cnt = chains_dynamic; active_cnt = chains_dynamic;
......
...@@ -111,8 +111,7 @@ void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, struct ieee80211_vif *vif, ...@@ -111,8 +111,7 @@ void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
*/ */
cmd->keep_alive_seconds = POWER_KEEP_ALIVE_PERIOD_SEC; cmd->keep_alive_seconds = POWER_KEEP_ALIVE_PERIOD_SEC;
if ((iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_CAM) || if (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_CAM)
!iwlwifi_mod_params.power_save)
return; return;
cmd->flags |= cpu_to_le16(POWER_FLAGS_POWER_SAVE_ENA_MSK); cmd->flags |= cpu_to_le16(POWER_FLAGS_POWER_SAVE_ENA_MSK);
...@@ -146,14 +145,8 @@ void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, struct ieee80211_vif *vif, ...@@ -146,14 +145,8 @@ void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
keep_alive = DIV_ROUND_UP(keep_alive, MSEC_PER_SEC); keep_alive = DIV_ROUND_UP(keep_alive, MSEC_PER_SEC);
cmd->keep_alive_seconds = keep_alive; cmd->keep_alive_seconds = keep_alive;
if (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_LP) { cmd->rx_data_timeout = cpu_to_le32(100 * USEC_PER_MSEC);
/* TODO: Also for D3 (device sleep / WoWLAN) */ cmd->tx_data_timeout = cpu_to_le32(100 * USEC_PER_MSEC);
cmd->rx_data_timeout = cpu_to_le32(10 * USEC_PER_MSEC);
cmd->tx_data_timeout = cpu_to_le32(10 * USEC_PER_MSEC);
} else {
cmd->rx_data_timeout = cpu_to_le32(100 * USEC_PER_MSEC);
cmd->tx_data_timeout = cpu_to_le32(100 * USEC_PER_MSEC);
}
} }
int iwl_mvm_power_update_mode(struct iwl_mvm *mvm, struct ieee80211_vif *vif) int iwl_mvm_power_update_mode(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
...@@ -177,8 +170,7 @@ int iwl_mvm_power_disable(struct iwl_mvm *mvm, struct ieee80211_vif *vif) ...@@ -177,8 +170,7 @@ int iwl_mvm_power_disable(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
if (vif->type != NL80211_IFTYPE_STATION || vif->p2p) if (vif->type != NL80211_IFTYPE_STATION || vif->p2p)
return 0; return 0;
if ((iwlmvm_mod_params.power_scheme != IWL_POWER_SCHEME_CAM) && if (iwlmvm_mod_params.power_scheme != IWL_POWER_SCHEME_CAM)
iwlwifi_mod_params.power_save)
cmd.flags |= cpu_to_le16(POWER_FLAGS_POWER_SAVE_ENA_MSK); cmd.flags |= cpu_to_le16(POWER_FLAGS_POWER_SAVE_ENA_MSK);
iwl_mvm_power_log(mvm, &cmd); iwl_mvm_power_log(mvm, &cmd);
......
...@@ -253,8 +253,9 @@ int iwl_mvm_rx_fw_error(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb, ...@@ -253,8 +253,9 @@ int iwl_mvm_rx_fw_error(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
u8 first_antenna(u8 mask) u8 first_antenna(u8 mask)
{ {
BUILD_BUG_ON(ANT_A != BIT(0)); /* using ffs is wrong if not */ BUILD_BUG_ON(ANT_A != BIT(0)); /* using ffs is wrong if not */
WARN_ON_ONCE(!mask); /* ffs will return 0 if mask is zeroed */ if (WARN_ON_ONCE(!mask)) /* ffs will return 0 if mask is zeroed */
return (u8)(BIT(ffs(mask))); return BIT(0);
return BIT(ffs(mask) - 1);
} }
/* /*
......
...@@ -256,6 +256,7 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = { ...@@ -256,6 +256,7 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
/* 7000 Series */ /* 7000 Series */
{IWL_PCI_DEVICE(0x08B1, 0x4070, iwl7260_2ac_cfg)}, {IWL_PCI_DEVICE(0x08B1, 0x4070, iwl7260_2ac_cfg)},
{IWL_PCI_DEVICE(0x08B1, 0x4062, iwl7260_2ac_cfg)},
{IWL_PCI_DEVICE(0x08B1, 0xC070, iwl7260_2ac_cfg)}, {IWL_PCI_DEVICE(0x08B1, 0xC070, iwl7260_2ac_cfg)},
{IWL_PCI_DEVICE(0x08B3, 0x0070, iwl3160_ac_cfg)}, {IWL_PCI_DEVICE(0x08B3, 0x0070, iwl3160_ac_cfg)},
{IWL_PCI_DEVICE(0x08B3, 0x8070, iwl3160_ac_cfg)}, {IWL_PCI_DEVICE(0x08B3, 0x8070, iwl3160_ac_cfg)},
......
...@@ -861,9 +861,8 @@ static int mwifiex_pcie_delete_cmdrsp_buf(struct mwifiex_adapter *adapter) ...@@ -861,9 +861,8 @@ static int mwifiex_pcie_delete_cmdrsp_buf(struct mwifiex_adapter *adapter)
if (card && card->cmd_buf) { if (card && card->cmd_buf) {
MWIFIEX_SKB_PACB(card->cmd_buf, &buf_pa); MWIFIEX_SKB_PACB(card->cmd_buf, &buf_pa);
pci_unmap_single(card->dev, buf_pa, MWIFIEX_SIZE_OF_CMD_BUFFER, pci_unmap_single(card->dev, buf_pa, card->cmd_buf->len,
PCI_DMA_TODEVICE); PCI_DMA_TODEVICE);
dev_kfree_skb_any(card->cmd_buf);
} }
return 0; return 0;
} }
...@@ -1573,7 +1572,7 @@ static int mwifiex_pcie_cmdrsp_complete(struct mwifiex_adapter *adapter, ...@@ -1573,7 +1572,7 @@ static int mwifiex_pcie_cmdrsp_complete(struct mwifiex_adapter *adapter,
skb_tmp = card->cmd_buf; skb_tmp = card->cmd_buf;
if (skb_tmp) { if (skb_tmp) {
MWIFIEX_SKB_PACB(skb_tmp, &buf_pa); MWIFIEX_SKB_PACB(skb_tmp, &buf_pa);
pci_unmap_single(card->dev, buf_pa, MWIFIEX_UPLD_SIZE, pci_unmap_single(card->dev, buf_pa, skb_tmp->len,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
card->cmd_buf = NULL; card->cmd_buf = NULL;
} }
...@@ -2294,9 +2293,9 @@ static void mwifiex_pcie_cleanup(struct mwifiex_adapter *adapter) ...@@ -2294,9 +2293,9 @@ static void mwifiex_pcie_cleanup(struct mwifiex_adapter *adapter)
if (pdev) { if (pdev) {
pci_iounmap(pdev, card->pci_mmap); pci_iounmap(pdev, card->pci_mmap);
pci_iounmap(pdev, card->pci_mmap1); pci_iounmap(pdev, card->pci_mmap1);
pci_release_regions(pdev);
pci_disable_device(pdev); pci_disable_device(pdev);
pci_release_region(pdev, 2);
pci_release_region(pdev, 0);
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
} }
} }
......
...@@ -521,6 +521,9 @@ static void _rtl_usb_rx_process_noagg(struct ieee80211_hw *hw, ...@@ -521,6 +521,9 @@ static void _rtl_usb_rx_process_noagg(struct ieee80211_hw *hw,
rtlpriv->link_info.num_rx_inperiod++; rtlpriv->link_info.num_rx_inperiod++;
} }
/* static bcn for roaming */
rtl_beacon_statistic(hw, skb);
if (likely(rtl_action_proc(hw, skb, false))) if (likely(rtl_action_proc(hw, skb, false)))
ieee80211_rx(hw, skb); ieee80211_rx(hw, skb);
else else
......
...@@ -687,8 +687,23 @@ void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid) ...@@ -687,8 +687,23 @@ void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid)
pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD;
break; break;
case 43222: case 43222:
/* TODO: BCM43222 requires updating PLLs too */ if (spuravoid == 1) {
return; ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11500008);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x0C000C06);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x0F600a08);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL3, 0x00000000);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL4, 0x2001E920);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888815);
} else {
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11100008);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x0c000c06);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x03000a08);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL3, 0x00000000);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL4, 0x200005c0);
ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888855);
}
pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD;
break;
default: default:
ssb_printk(KERN_ERR PFX ssb_printk(KERN_ERR PFX
"Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n",
......
...@@ -1081,17 +1081,19 @@ struct hci_request { ...@@ -1081,17 +1081,19 @@ struct hci_request {
void hci_req_init(struct hci_request *req, struct hci_dev *hdev); void hci_req_init(struct hci_request *req, struct hci_dev *hdev);
int hci_req_run(struct hci_request *req, hci_req_complete_t complete); int hci_req_run(struct hci_request *req, hci_req_complete_t complete);
void hci_req_add(struct hci_request *req, u16 opcode, u32 plen, void *param); void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen, void *param, const void *param);
u8 event); void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
const void *param, u8 event);
void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status); void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status);
struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen, struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
void *param, u32 timeout); const void *param, u32 timeout);
struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen, struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
void *param, u8 event, u32 timeout); const void *param, u8 event, u32 timeout);
int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param); int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
const void *param);
void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags); void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb); void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
......
...@@ -79,7 +79,8 @@ static void hci_req_cancel(struct hci_dev *hdev, int err) ...@@ -79,7 +79,8 @@ static void hci_req_cancel(struct hci_dev *hdev, int err)
} }
} }
struct sk_buff *hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 event) static struct sk_buff *hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
u8 event)
{ {
struct hci_ev_cmd_complete *ev; struct hci_ev_cmd_complete *ev;
struct hci_event_hdr *hdr; struct hci_event_hdr *hdr;
...@@ -134,7 +135,7 @@ struct sk_buff *hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 event) ...@@ -134,7 +135,7 @@ struct sk_buff *hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 event)
} }
struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen, struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
void *param, u8 event, u32 timeout) const void *param, u8 event, u32 timeout)
{ {
DECLARE_WAITQUEUE(wait, current); DECLARE_WAITQUEUE(wait, current);
struct hci_request req; struct hci_request req;
...@@ -188,7 +189,7 @@ struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen, ...@@ -188,7 +189,7 @@ struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
EXPORT_SYMBOL(__hci_cmd_sync_ev); EXPORT_SYMBOL(__hci_cmd_sync_ev);
struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen, struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
void *param, u32 timeout) const void *param, u32 timeout)
{ {
return __hci_cmd_sync_ev(hdev, opcode, plen, param, 0, timeout); return __hci_cmd_sync_ev(hdev, opcode, plen, param, 0, timeout);
} }
...@@ -377,6 +378,8 @@ static void bredr_setup(struct hci_request *req) ...@@ -377,6 +378,8 @@ static void bredr_setup(struct hci_request *req)
static void le_setup(struct hci_request *req) static void le_setup(struct hci_request *req)
{ {
struct hci_dev *hdev = req->hdev;
/* Read LE Buffer Size */ /* Read LE Buffer Size */
hci_req_add(req, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL); hci_req_add(req, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
...@@ -391,6 +394,10 @@ static void le_setup(struct hci_request *req) ...@@ -391,6 +394,10 @@ static void le_setup(struct hci_request *req)
/* Read LE Supported States */ /* Read LE Supported States */
hci_req_add(req, HCI_OP_LE_READ_SUPPORTED_STATES, 0, NULL); hci_req_add(req, HCI_OP_LE_READ_SUPPORTED_STATES, 0, NULL);
/* LE-only controllers have LE implicitly enabled */
if (!lmp_bredr_capable(hdev))
set_bit(HCI_LE_ENABLED, &hdev->dev_flags);
} }
static u8 hci_get_inquiry_mode(struct hci_dev *hdev) static u8 hci_get_inquiry_mode(struct hci_dev *hdev)
...@@ -574,6 +581,10 @@ static void hci_set_le_support(struct hci_request *req) ...@@ -574,6 +581,10 @@ static void hci_set_le_support(struct hci_request *req)
struct hci_dev *hdev = req->hdev; struct hci_dev *hdev = req->hdev;
struct hci_cp_write_le_host_supported cp; struct hci_cp_write_le_host_supported cp;
/* LE-only devices do not support explicit enablement */
if (!lmp_bredr_capable(hdev))
return;
memset(&cp, 0, sizeof(cp)); memset(&cp, 0, sizeof(cp));
if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
...@@ -2602,7 +2613,7 @@ int hci_req_run(struct hci_request *req, hci_req_complete_t complete) ...@@ -2602,7 +2613,7 @@ int hci_req_run(struct hci_request *req, hci_req_complete_t complete)
} }
static struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode, static struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode,
u32 plen, void *param) u32 plen, const void *param)
{ {
int len = HCI_COMMAND_HDR_SIZE + plen; int len = HCI_COMMAND_HDR_SIZE + plen;
struct hci_command_hdr *hdr; struct hci_command_hdr *hdr;
...@@ -2628,7 +2639,8 @@ static struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode, ...@@ -2628,7 +2639,8 @@ static struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode,
} }
/* Send HCI command */ /* Send HCI command */
int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param) int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
const void *param)
{ {
struct sk_buff *skb; struct sk_buff *skb;
...@@ -2652,8 +2664,8 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param) ...@@ -2652,8 +2664,8 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param)
} }
/* Queue a command to an asynchronous HCI request */ /* Queue a command to an asynchronous HCI request */
void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen, void *param, void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
u8 event) const void *param, u8 event)
{ {
struct hci_dev *hdev = req->hdev; struct hci_dev *hdev = req->hdev;
struct sk_buff *skb; struct sk_buff *skb;
...@@ -2682,7 +2694,8 @@ void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen, void *param, ...@@ -2682,7 +2694,8 @@ void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen, void *param,
skb_queue_tail(&req->cmd_q, skb); skb_queue_tail(&req->cmd_q, skb);
} }
void hci_req_add(struct hci_request *req, u16 opcode, u32 plen, void *param) void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
const void *param)
{ {
hci_req_add_ev(req, opcode, plen, param, 0); hci_req_add_ev(req, opcode, plen, param, 0);
} }
......
...@@ -6314,12 +6314,13 @@ static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, ...@@ -6314,12 +6314,13 @@ static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
kfree_skb(skb); kfree_skb(skb);
} }
static void l2cap_att_channel(struct l2cap_conn *conn, u16 cid, static void l2cap_att_channel(struct l2cap_conn *conn,
struct sk_buff *skb) struct sk_buff *skb)
{ {
struct l2cap_chan *chan; struct l2cap_chan *chan;
chan = l2cap_global_chan_by_scid(0, cid, conn->src, conn->dst); chan = l2cap_global_chan_by_scid(0, L2CAP_CID_LE_DATA,
conn->src, conn->dst);
if (!chan) if (!chan)
goto drop; goto drop;
...@@ -6368,7 +6369,7 @@ static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb) ...@@ -6368,7 +6369,7 @@ static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
break; break;
case L2CAP_CID_LE_DATA: case L2CAP_CID_LE_DATA:
l2cap_att_channel(conn, cid, skb); l2cap_att_channel(conn, skb);
break; break;
case L2CAP_CID_SMP: case L2CAP_CID_SMP:
......
...@@ -1351,6 +1351,11 @@ static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) ...@@ -1351,6 +1351,11 @@ static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
return cmd_status(sk, hdev->id, MGMT_OP_SET_LE, return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
MGMT_STATUS_INVALID_PARAMS); MGMT_STATUS_INVALID_PARAMS);
/* LE-only devices do not allow toggling LE on/off */
if (!lmp_bredr_capable(hdev))
return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
MGMT_STATUS_REJECTED);
hci_dev_lock(hdev); hci_dev_lock(hdev);
val = !!cp->val; val = !!cp->val;
...@@ -3347,7 +3352,8 @@ static int powered_update_hci(struct hci_dev *hdev) ...@@ -3347,7 +3352,8 @@ static int powered_update_hci(struct hci_dev *hdev)
hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, 1, &ssp); hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, 1, &ssp);
} }
if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
lmp_bredr_capable(hdev)) {
struct hci_cp_write_le_host_supported cp; struct hci_cp_write_le_host_supported cp;
cp.le = 1; cp.le = 1;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
menuconfig NFC menuconfig NFC
depends on NET depends on NET
depends on RFKILL || !RFKILL
tristate "NFC subsystem support" tristate "NFC subsystem support"
default n default n
help help
...@@ -15,6 +16,5 @@ menuconfig NFC ...@@ -15,6 +16,5 @@ menuconfig NFC
source "net/nfc/nci/Kconfig" source "net/nfc/nci/Kconfig"
source "net/nfc/hci/Kconfig" source "net/nfc/hci/Kconfig"
source "net/nfc/llcp/Kconfig"
source "drivers/nfc/Kconfig" source "drivers/nfc/Kconfig"
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
obj-$(CONFIG_NFC) += nfc.o obj-$(CONFIG_NFC) += nfc.o
obj-$(CONFIG_NFC_NCI) += nci/ obj-$(CONFIG_NFC_NCI) += nci/
obj-$(CONFIG_NFC_HCI) += hci/ obj-$(CONFIG_NFC_HCI) += hci/
#obj-$(CONFIG_NFC_LLCP) += llcp/
nfc-objs := core.o netlink.o af_nfc.o rawsock.o llcp_core.o llcp_commands.o \
llcp_sock.o
nfc-objs := core.o netlink.o af_nfc.o rawsock.o
nfc-$(CONFIG_NFC_LLCP) += llcp/llcp.o llcp/commands.o llcp/sock.o
config NFC_LLCP
depends on NFC
bool "NFC LLCP support"
default n
help
Say Y here if you want to build support for a kernel NFC LLCP
implementation.
\ No newline at end of file
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include <net/nfc/nfc.h> #include <net/nfc/nfc.h>
#include "../nfc.h" #include "nfc.h"
#include "llcp.h" #include "llcp.h"
static u8 llcp_tlv_length[LLCP_TLV_MAX] = { static u8 llcp_tlv_length[LLCP_TLV_MAX] = {
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/nfc.h> #include <linux/nfc.h>
#include "../nfc.h" #include "nfc.h"
#include "llcp.h" #include "llcp.h"
static u8 llcp_magic[3] = {0x46, 0x66, 0x6d}; static u8 llcp_magic[3] = {0x46, 0x66, 0x6d};
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/nfc.h> #include <linux/nfc.h>
#include "../nfc.h" #include "nfc.h"
#include "llcp.h" #include "llcp.h"
static int sock_wait_state(struct sock *sk, int state, unsigned long timeo) static int sock_wait_state(struct sock *sk, int state, unsigned long timeo)
......
...@@ -28,8 +28,7 @@ ...@@ -28,8 +28,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include "nfc.h" #include "nfc.h"
#include "llcp.h"
#include "llcp/llcp.h"
static struct genl_multicast_group nfc_genl_event_mcgrp = { static struct genl_multicast_group nfc_genl_event_mcgrp = {
.name = NFC_GENL_MCAST_EVENT_NAME, .name = NFC_GENL_MCAST_EVENT_NAME,
......
...@@ -48,8 +48,6 @@ struct nfc_rawsock { ...@@ -48,8 +48,6 @@ struct nfc_rawsock {
struct nfc_llcp_sdp_tlv; struct nfc_llcp_sdp_tlv;
#ifdef CONFIG_NFC_LLCP
void nfc_llcp_mac_is_down(struct nfc_dev *dev); void nfc_llcp_mac_is_down(struct nfc_dev *dev);
void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx, void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx,
u8 comm_mode, u8 rf_mode); u8 comm_mode, u8 rf_mode);
...@@ -64,68 +62,6 @@ void nfc_llcp_exit(void); ...@@ -64,68 +62,6 @@ void nfc_llcp_exit(void);
void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp); void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp);
void nfc_llcp_free_sdp_tlv_list(struct hlist_head *head); void nfc_llcp_free_sdp_tlv_list(struct hlist_head *head);
#else
static inline void nfc_llcp_mac_is_down(struct nfc_dev *dev)
{
}
static inline void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx,
u8 comm_mode, u8 rf_mode)
{
}
static inline int nfc_llcp_register_device(struct nfc_dev *dev)
{
return 0;
}
static inline void nfc_llcp_unregister_device(struct nfc_dev *dev)
{
}
static inline int nfc_llcp_set_remote_gb(struct nfc_dev *dev,
u8 *gb, u8 gb_len)
{
return 0;
}
static inline u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *gb_len)
{
*gb_len = 0;
return NULL;
}
static inline int nfc_llcp_data_received(struct nfc_dev *dev,
struct sk_buff *skb)
{
return 0;
}
static inline struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev)
{
return NULL;
}
static inline int nfc_llcp_init(void)
{
return 0;
}
static inline void nfc_llcp_exit(void)
{
}
static inline void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp)
{
}
static inline void nfc_llcp_free_sdp_tlv_list(struct hlist_head *sdp_head)
{
}
#endif
int __init rawsock_init(void); int __init rawsock_init(void);
void rawsock_exit(void); void rawsock_exit(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment