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

Commit 964c1d41 authored by John W. Linville's avatar John W. Linville
Browse files

rndis_wlan: convert get/set mode to cfg80211



Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
[edit: made rndis_change_virtual_intf static]
Signed-off-by: default avatarJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 5c8fa4f7
Loading
Loading
Loading
Loading
+43 −52
Original line number Diff line number Diff line
@@ -406,8 +406,17 @@ struct rndis_wext_private {
	u8 command_buffer[COMMAND_BUFFER_SIZE];
};

/*
 * cfg80211 ops
 */
static int rndis_change_virtual_intf(struct wiphy *wiphy, int ifindex,
					enum nl80211_iftype type, u32 *flags,
					struct vif_params *params);

struct cfg80211_ops rndis_config_ops = {
	.change_virtual_intf = rndis_change_virtual_intf,
};

struct cfg80211_ops rndis_config_ops = { };
void *rndis_wiphy_privid = &rndis_wiphy_privid;

static const int bcm4320_power_output[4] = { 25, 50, 75, 100 };
@@ -1124,6 +1133,37 @@ static void set_multicast_list(struct usbnet *usbdev)
}


/*
 * cfg80211 ops
 */
static int rndis_change_virtual_intf(struct wiphy *wiphy, int ifindex,
					enum nl80211_iftype type, u32 *flags,
					struct vif_params *params)
{
	struct net_device *dev;
	struct usbnet *usbdev;
	int mode;

	/* we're under RTNL */
	dev = __dev_get_by_index(&init_net, ifindex);
	if (!dev)
		return -ENODEV;
	usbdev = netdev_priv(dev);

	switch (type) {
	case NL80211_IFTYPE_ADHOC:
		mode = ndis_80211_infra_adhoc;
		break;
	case NL80211_IFTYPE_STATION:
		mode = ndis_80211_infra_infra;
		break;
	default:
		return -EINVAL;
	}

	return set_infra_mode(usbdev, mode);
}

/*
 * wireless extension handlers
 */
@@ -1450,55 +1490,6 @@ static int rndis_iw_get_auth(struct net_device *dev,
}


static int rndis_iw_get_mode(struct net_device *dev,
				struct iw_request_info *info,
				union iwreq_data *wrqu, char *extra)
{
	struct usbnet *usbdev = netdev_priv(dev);
	struct rndis_wext_private *priv = get_rndis_wext_priv(usbdev);

	switch (priv->infra_mode) {
	case ndis_80211_infra_adhoc:
		wrqu->mode = IW_MODE_ADHOC;
		break;
	case ndis_80211_infra_infra:
		wrqu->mode = IW_MODE_INFRA;
		break;
	/*case ndis_80211_infra_auto_unknown:*/
	default:
		wrqu->mode = IW_MODE_AUTO;
		break;
	}
	devdbg(usbdev, "SIOCGIWMODE: %08x", wrqu->mode);
	return 0;
}


static int rndis_iw_set_mode(struct net_device *dev,
    struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
{
	struct usbnet *usbdev = netdev_priv(dev);
	int mode;

	devdbg(usbdev, "SIOCSIWMODE: %08x", wrqu->mode);

	switch (wrqu->mode) {
	case IW_MODE_ADHOC:
		mode = ndis_80211_infra_adhoc;
		break;
	case IW_MODE_INFRA:
		mode = ndis_80211_infra_infra;
		break;
	/*case IW_MODE_AUTO:*/
	default:
		mode = ndis_80211_infra_auto_unknown;
		break;
	}

	return set_infra_mode(usbdev, mode);
}


static int rndis_iw_set_encode(struct net_device *dev,
    struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
{
@@ -2196,8 +2187,8 @@ static const iw_handler rndis_iw_handler[] =
	IW_IOCTL(SIOCGIWNAME)      = (iw_handler) cfg80211_wext_giwname,
	IW_IOCTL(SIOCSIWFREQ)      = rndis_iw_set_freq,
	IW_IOCTL(SIOCGIWFREQ)      = rndis_iw_get_freq,
	IW_IOCTL(SIOCSIWMODE)      = rndis_iw_set_mode,
	IW_IOCTL(SIOCGIWMODE)      = rndis_iw_get_mode,
	IW_IOCTL(SIOCSIWMODE)      = (iw_handler) cfg80211_wext_siwmode,
	IW_IOCTL(SIOCGIWMODE)      = (iw_handler) cfg80211_wext_giwmode,
	IW_IOCTL(SIOCGIWRANGE)     = rndis_iw_get_range,
	IW_IOCTL(SIOCSIWAP)        = rndis_iw_set_bssid,
	IW_IOCTL(SIOCGIWAP)        = rndis_iw_get_bssid,