Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10be7eb3 authored by David S. Miller's avatar David S. Miller
Browse files
parents 90c30335 5ffaf8a3
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -1000,7 +1000,6 @@ CONFIG_TIGON3=y
CONFIG_SPIDER_NET=m
CONFIG_GELIC_NET=m
CONFIG_GELIC_WIRELESS=y
# CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE is not set
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
# CONFIG_ATL1E is not set
+0 −1
Original line number Diff line number Diff line
@@ -593,7 +593,6 @@ CONFIG_MII=m
CONFIG_NETDEV_1000=y
CONFIG_GELIC_NET=y
CONFIG_GELIC_WIRELESS=y
# CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE is not set
# CONFIG_NETDEV_10000 is not set

#
+0 −14
Original line number Diff line number Diff line
@@ -2368,20 +2368,6 @@ config GELIC_WIRELESS
	  the driver automatically distinguishes the models, you can
	  safely enable this option even if you have a wireless-less model.

config GELIC_WIRELESS_OLD_PSK_INTERFACE
       bool "PS3 Wireless private PSK interface (OBSOLETE)"
       depends on GELIC_WIRELESS
       select WEXT_PRIV
       help
          This option retains the obsolete private interface to pass
          the PSK from user space programs to the driver.  The PSK
          stands for 'Pre Shared Key' and is used for WPA[2]-PSK
          (WPA-Personal) environment.
          If WPA[2]-PSK is used and you need to use old programs that
          support only this old interface, say Y.  Otherwise N.

          If unsure, say N.

config FSL_PQ_MDIO
	tristate "Freescale PQ MDIO"
	depends on FSL_SOC
+7 −142
Original line number Diff line number Diff line
@@ -1389,113 +1389,6 @@ static int gelic_wl_get_mode(struct net_device *netdev,
	return 0;
}

#ifdef CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE
/* SIOCIWFIRSTPRIV */
static int hex2bin(u8 *str, u8 *bin, unsigned int len)
{
	unsigned int i;
	static unsigned char *hex = "0123456789ABCDEF";
	unsigned char *p, *q;
	u8 tmp;

	if (len != WPA_PSK_LEN * 2)
		return -EINVAL;

	for (i = 0; i < WPA_PSK_LEN * 2; i += 2) {
		p = strchr(hex, toupper(str[i]));
		q = strchr(hex, toupper(str[i + 1]));
		if (!p || !q) {
			pr_info("%s: unconvertible PSK digit=%d\n",
				__func__, i);
			return -EINVAL;
		}
		tmp = ((p - hex) << 4) + (q - hex);
		*bin++ = tmp;
	}
	return 0;
};

static int gelic_wl_priv_set_psk(struct net_device *net_dev,
				 struct iw_request_info *info,
				 union iwreq_data *data, char *extra)
{
	struct gelic_wl_info *wl = port_wl(netdev_priv(net_dev));
	unsigned int len;
	unsigned long irqflag;
	int ret = 0;

	pr_debug("%s:<- len=%d\n", __func__, data->data.length);
	len = data->data.length - 1;
	if (len <= 2)
		return -EINVAL;

	spin_lock_irqsave(&wl->lock, irqflag);
	if (extra[0] == '"' && extra[len - 1] == '"') {
		pr_debug("%s: passphrase mode\n", __func__);
		/* pass phrase */
		if (GELIC_WL_EURUS_PSK_MAX_LEN < (len - 2)) {
			pr_info("%s: passphrase too long\n", __func__);
			ret = -E2BIG;
			goto out;
		}
		memset(wl->psk, 0, sizeof(wl->psk));
		wl->psk_len = len - 2;
		memcpy(wl->psk, &(extra[1]), wl->psk_len);
		wl->psk_type = GELIC_EURUS_WPA_PSK_PASSPHRASE;
	} else {
		ret = hex2bin(extra, wl->psk, len);
		if (ret)
			goto out;
		wl->psk_len = WPA_PSK_LEN;
		wl->psk_type = GELIC_EURUS_WPA_PSK_BIN;
	}
	set_bit(GELIC_WL_STAT_WPA_PSK_SET, &wl->stat);
out:
	spin_unlock_irqrestore(&wl->lock, irqflag);
	pr_debug("%s:->\n", __func__);
	return ret;
}

static int gelic_wl_priv_get_psk(struct net_device *net_dev,
				 struct iw_request_info *info,
				 union iwreq_data *data, char *extra)
{
	struct gelic_wl_info *wl = port_wl(netdev_priv(net_dev));
	char *p;
	unsigned long irqflag;
	unsigned int i;

	pr_debug("%s:<-\n", __func__);
	if (!capable(CAP_NET_ADMIN))
		return -EPERM;

	spin_lock_irqsave(&wl->lock, irqflag);
	p = extra;
	if (test_bit(GELIC_WL_STAT_WPA_PSK_SET, &wl->stat)) {
		if (wl->psk_type == GELIC_EURUS_WPA_PSK_BIN) {
			for (i = 0; i < wl->psk_len; i++) {
				sprintf(p, "%02xu", wl->psk[i]);
				p += 2;
			}
			*p = '\0';
			data->data.length = wl->psk_len * 2;
		} else {
			*p++ = '"';
			memcpy(p, wl->psk, wl->psk_len);
			p += wl->psk_len;
			*p++ = '"';
			*p = '\0';
			data->data.length = wl->psk_len + 2;
		}
	} else
		/* no psk set */
		data->data.length = 0;
	spin_unlock_irqrestore(&wl->lock, irqflag);
	pr_debug("%s:-> %d\n", __func__, data->data.length);
	return 0;
}
#endif

/* SIOCGIWNICKN */
static int gelic_wl_get_nick(struct net_device *net_dev,
				  struct iw_request_info *info,
@@ -1571,8 +1464,10 @@ static int gelic_wl_start_scan(struct gelic_wl_info *wl, int always_scan,
	init_completion(&wl->scan_done);
	/*
	 * If we have already a bss list, don't try to get new
	 * unless we are doing an ESSID scan
	 */
	if (!always_scan && wl->scan_stat == GELIC_WL_SCAN_STAT_GOT_LIST) {
	if ((!essid_len && !always_scan)
	    && wl->scan_stat == GELIC_WL_SCAN_STAT_GOT_LIST) {
		pr_debug("%s: already has the list\n", __func__);
		complete(&wl->scan_done);
		goto out;
@@ -1673,7 +1568,7 @@ static void gelic_wl_scan_complete_event(struct gelic_wl_info *wl)
		}
	}

	/* put them in the newtork_list */
	/* put them in the network_list */
	for (i = 0, scan_info_size = 0, scan_info = buf;
	     scan_info_size < data_len;
	     i++, scan_info_size += be16_to_cpu(scan_info->size),
@@ -2009,7 +1904,7 @@ static int gelic_wl_do_wpa_setup(struct gelic_wl_info *wl)
	/* PSK type */
	wpa->psk_type = cpu_to_be16(wl->psk_type);
#ifdef DEBUG
	pr_debug("%s: sec=%s psktype=%s\nn", __func__,
	pr_debug("%s: sec=%s psktype=%s\n", __func__,
		 wpasecstr(wpa->security),
		 (wpa->psk_type == GELIC_EURUS_WPA_PSK_BIN) ?
		 "BIN" : "passphrase");
@@ -2019,9 +1914,9 @@ static int gelic_wl_do_wpa_setup(struct gelic_wl_info *wl)
	 * the debug log because this dumps your precious
	 * passphrase/key.
	 */
	pr_debug("%s: psk=%s\n",
	pr_debug("%s: psk=%s\n", __func__,
		 (wpa->psk_type == GELIC_EURUS_WPA_PSK_BIN) ?
		 (char *)"N/A" : (char *)wpa->psk);
		 "N/A" : wpa->psk);
#endif
#endif
	/* issue wpa setup */
@@ -2406,40 +2301,10 @@ static const iw_handler gelic_wl_wext_handler[] =
	IW_IOCTL(SIOCGIWNICKN)		= gelic_wl_get_nick,
};

#ifdef CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE
static struct iw_priv_args gelic_wl_private_args[] =
{
	{
		.cmd = GELIC_WL_PRIV_SET_PSK,
		.set_args = IW_PRIV_TYPE_CHAR |
		(GELIC_WL_EURUS_PSK_MAX_LEN + 2),
		.name = "set_psk"
	},
	{
		.cmd = GELIC_WL_PRIV_GET_PSK,
		.get_args = IW_PRIV_TYPE_CHAR |
		(GELIC_WL_EURUS_PSK_MAX_LEN + 2),
		.name = "get_psk"
	}
};

static const iw_handler gelic_wl_private_handler[] =
{
	gelic_wl_priv_set_psk,
	gelic_wl_priv_get_psk,
};
#endif

static const struct iw_handler_def gelic_wl_wext_handler_def = {
	.num_standard		= ARRAY_SIZE(gelic_wl_wext_handler),
	.standard		= gelic_wl_wext_handler,
	.get_wireless_stats	= gelic_wl_get_wireless_stats,
#ifdef CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE
	.num_private		= ARRAY_SIZE(gelic_wl_private_handler),
	.num_private_args	= ARRAY_SIZE(gelic_wl_private_args),
	.private		= gelic_wl_private_handler,
	.private_args		= gelic_wl_private_args,
#endif
};

static struct net_device * __devinit gelic_wl_alloc(struct gelic_card *card)
+18 −16
Original line number Diff line number Diff line
@@ -5254,11 +5254,7 @@ static int set_wep_key(struct airo_info *ai, u16 index, const char *key,
	WepKeyRid wkr;
	int rc;

	if (keylen == 0) {
		airo_print_err(ai->dev->name, "%s: key length to set was zero",
			       __func__);
		return -1;
	}
	WARN_ON(keylen == 0);

	memset(&wkr, 0, sizeof(wkr));
	wkr.len = cpu_to_le16(sizeof(wkr));
@@ -6405,11 +6401,7 @@ static int airo_set_encode(struct net_device *dev,
		if (dwrq->length > MIN_KEY_SIZE)
			key.len = MAX_KEY_SIZE;
		else
			if (dwrq->length > 0)
			key.len = MIN_KEY_SIZE;
			else
				/* Disable the key */
				key.len = 0;
		/* Check if the key is not marked as invalid */
		if(!(dwrq->flags & IW_ENCODE_NOKEY)) {
			/* Cleanup */
@@ -6590,14 +6582,24 @@ static int airo_set_encodeext(struct net_device *dev,
		default:
			return -EINVAL;
		}
		/* Send the key to the card */
		if (key.len == 0) {
			rc = set_wep_tx_idx(local, idx, perm, 1);
			if (rc < 0) {
				airo_print_err(local->dev->name,
					       "failed to set WEP transmit index to %d: %d.",
					       idx, rc);
				return rc;
			}
		} else {
			rc = set_wep_key(local, idx, key.key, key.len, perm, 1);
			if (rc < 0) {
			airo_print_err(local->dev->name, "failed to set WEP key"
			               " at index %d: %d.", idx, rc);
				airo_print_err(local->dev->name,
					       "failed to set WEP key at index %d: %d.",
					       idx, rc);
				return rc;
			}
		}
	}

	/* Read the flags */
	if(encoding->flags & IW_ENCODE_DISABLED)
Loading