提交 34302397 编写于 作者: F Felix Fietkau 提交者: John W. Linville

ath9k: remove the virtual wiphy debugfs interface

It does not make much sense to keep the current virtual wiphy implementation
any longer - it adds significant complexity, has very few users and is still
very experimental. At some point in time, it will be replaced by a proper
implementation in mac80211.

By making the code easier to read and maintain, removing virtual wiphy support
helps with fixing the remaining driver issues and adding further improvements.
Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 92460412
...@@ -381,41 +381,21 @@ static const struct file_operations fops_interrupt = { ...@@ -381,41 +381,21 @@ static const struct file_operations fops_interrupt = {
.llseek = default_llseek, .llseek = default_llseek,
}; };
static const char * ath_wiphy_state_str(enum ath_wiphy_state state)
{
switch (state) {
case ATH_WIPHY_INACTIVE:
return "INACTIVE";
case ATH_WIPHY_ACTIVE:
return "ACTIVE";
case ATH_WIPHY_PAUSING:
return "PAUSING";
case ATH_WIPHY_PAUSED:
return "PAUSED";
case ATH_WIPHY_SCAN:
return "SCAN";
}
return "?";
}
static ssize_t read_file_wiphy(struct file *file, char __user *user_buf, static ssize_t read_file_wiphy(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
struct ath_softc *sc = file->private_data; struct ath_softc *sc = file->private_data;
struct ath_wiphy *aphy = sc->pri_wiphy; struct ieee80211_channel *chan = sc->hw->conf.channel;
struct ieee80211_channel *chan = aphy->hw->conf.channel;
char buf[512]; char buf[512];
unsigned int len = 0; unsigned int len = 0;
int i;
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
u32 tmp; u32 tmp;
len += snprintf(buf + len, sizeof(buf) - len, len += snprintf(buf + len, sizeof(buf) - len,
"primary: %s (%s chan=%d ht=%d)\n", "%s (chan=%d ht=%d)\n",
wiphy_name(sc->pri_wiphy->hw->wiphy), wiphy_name(sc->hw->wiphy),
ath_wiphy_state_str(sc->pri_wiphy->state),
ieee80211_frequency_to_channel(chan->center_freq), ieee80211_frequency_to_channel(chan->center_freq),
aphy->chan_is_ht); conf_is_ht(&sc->hw->conf));
put_unaligned_le32(REG_READ_D(sc->sc_ah, AR_STA_ID0), addr); put_unaligned_le32(REG_READ_D(sc->sc_ah, AR_STA_ID0), addr);
put_unaligned_le16(REG_READ_D(sc->sc_ah, AR_STA_ID1) & 0xffff, addr + 4); put_unaligned_le16(REG_READ_D(sc->sc_ah, AR_STA_ID1) & 0xffff, addr + 4);
...@@ -457,123 +437,14 @@ static ssize_t read_file_wiphy(struct file *file, char __user *user_buf, ...@@ -457,123 +437,14 @@ static ssize_t read_file_wiphy(struct file *file, char __user *user_buf,
else else
len += snprintf(buf + len, sizeof(buf) - len, "\n"); len += snprintf(buf + len, sizeof(buf) - len, "\n");
/* Put variable-length stuff down here, and check for overflows. */
for (i = 0; i < sc->num_sec_wiphy; i++) {
struct ath_wiphy *aphy_tmp = sc->sec_wiphy[i];
if (aphy_tmp == NULL)
continue;
chan = aphy_tmp->hw->conf.channel;
len += snprintf(buf + len, sizeof(buf) - len,
"secondary: %s (%s chan=%d ht=%d)\n",
wiphy_name(aphy_tmp->hw->wiphy),
ath_wiphy_state_str(aphy_tmp->state),
ieee80211_frequency_to_channel(chan->center_freq),
aphy_tmp->chan_is_ht);
}
if (len > sizeof(buf)) if (len > sizeof(buf))
len = sizeof(buf); len = sizeof(buf);
return simple_read_from_buffer(user_buf, count, ppos, buf, len); return simple_read_from_buffer(user_buf, count, ppos, buf, len);
} }
static struct ath_wiphy * get_wiphy(struct ath_softc *sc, const char *name)
{
int i;
if (strcmp(name, wiphy_name(sc->pri_wiphy->hw->wiphy)) == 0)
return sc->pri_wiphy;
for (i = 0; i < sc->num_sec_wiphy; i++) {
struct ath_wiphy *aphy = sc->sec_wiphy[i];
if (aphy && strcmp(name, wiphy_name(aphy->hw->wiphy)) == 0)
return aphy;
}
return NULL;
}
static int del_wiphy(struct ath_softc *sc, const char *name)
{
struct ath_wiphy *aphy = get_wiphy(sc, name);
if (!aphy)
return -ENOENT;
return ath9k_wiphy_del(aphy);
}
static int pause_wiphy(struct ath_softc *sc, const char *name)
{
struct ath_wiphy *aphy = get_wiphy(sc, name);
if (!aphy)
return -ENOENT;
return ath9k_wiphy_pause(aphy);
}
static int unpause_wiphy(struct ath_softc *sc, const char *name)
{
struct ath_wiphy *aphy = get_wiphy(sc, name);
if (!aphy)
return -ENOENT;
return ath9k_wiphy_unpause(aphy);
}
static int select_wiphy(struct ath_softc *sc, const char *name)
{
struct ath_wiphy *aphy = get_wiphy(sc, name);
if (!aphy)
return -ENOENT;
return ath9k_wiphy_select(aphy);
}
static int schedule_wiphy(struct ath_softc *sc, const char *msec)
{
ath9k_wiphy_set_scheduler(sc, simple_strtoul(msec, NULL, 0));
return 0;
}
static ssize_t write_file_wiphy(struct file *file, const char __user *user_buf,
size_t count, loff_t *ppos)
{
struct ath_softc *sc = file->private_data;
char buf[50];
size_t len;
len = min(count, sizeof(buf) - 1);
if (copy_from_user(buf, user_buf, len))
return -EFAULT;
buf[len] = '\0';
if (len > 0 && buf[len - 1] == '\n')
buf[len - 1] = '\0';
if (strncmp(buf, "add", 3) == 0) {
int res = ath9k_wiphy_add(sc);
if (res < 0)
return res;
} else if (strncmp(buf, "del=", 4) == 0) {
int res = del_wiphy(sc, buf + 4);
if (res < 0)
return res;
} else if (strncmp(buf, "pause=", 6) == 0) {
int res = pause_wiphy(sc, buf + 6);
if (res < 0)
return res;
} else if (strncmp(buf, "unpause=", 8) == 0) {
int res = unpause_wiphy(sc, buf + 8);
if (res < 0)
return res;
} else if (strncmp(buf, "select=", 7) == 0) {
int res = select_wiphy(sc, buf + 7);
if (res < 0)
return res;
} else if (strncmp(buf, "schedule=", 9) == 0) {
int res = schedule_wiphy(sc, buf + 9);
if (res < 0)
return res;
} else
return -EOPNOTSUPP;
return count;
}
static const struct file_operations fops_wiphy = { static const struct file_operations fops_wiphy = {
.read = read_file_wiphy, .read = read_file_wiphy,
.write = write_file_wiphy,
.open = ath9k_debugfs_open, .open = ath9k_debugfs_open,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.llseek = default_llseek, .llseek = default_llseek,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册