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

Commit 7732ca45 authored by Dan Williams's avatar Dan Williams Committed by John W. Linville
Browse files

[PATCH] libertas: call SET_NETDEV_DEV from common code



Move usage of SET_NETDEV_DEV into common code since it has nothing
to do with bus-specific devices.  Also fixes a bug where the mesh
device was getting SET_NETDEV_DEV called after register_netdevice,
resulting in no 'device' link in /sys/class/net/mshX/.

Signed-off-by: default avatarDan Williams <dcbw@redhat.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0681f989
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -6,6 +6,8 @@
#ifndef _WLAN_DECL_H_
#ifndef _WLAN_DECL_H_
#define _WLAN_DECL_H_
#define _WLAN_DECL_H_


#include <linux/device.h>

#include "defs.h"
#include "defs.h"


/** Function Prototype Declaration */
/** Function Prototype Declaration */
@@ -79,10 +81,10 @@ int libertas_init_fw(wlan_private * priv, char *fw_name);
/* main.c */
/* main.c */
struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 band,
struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 band,
						             int *cfp_no);
						             int *cfp_no);
wlan_private *libertas_add_card(void *card);
wlan_private *libertas_add_card(void *card, struct device *dmdev);
int libertas_activate_card(wlan_private *priv, char *fw_name);
int libertas_activate_card(wlan_private *priv, char *fw_name);
int libertas_remove_card(wlan_private *priv);
int libertas_remove_card(wlan_private *priv);
int libertas_add_mesh(wlan_private *priv);
int libertas_add_mesh(wlan_private *priv, struct device *dev);
void libertas_remove_mesh(wlan_private *priv);
void libertas_remove_mesh(wlan_private *priv);




+2 −10
Original line number Original line Diff line number Diff line
@@ -207,15 +207,10 @@ static int if_usb_probe(struct usb_interface *intf,
		}
		}
	}
	}



	if (!(priv = libertas_add_card(cardp, &udev->dev)))
	/* At this point libertas_add_card() will be called.  Don't worry
	 * about keeping pwlanpriv around since it will be set on our
	 * usb device data in -> add() -> hw_register_dev() -> if_usb_register_dev.
	 */
	if (!(priv = libertas_add_card(cardp)))
		goto dealloc;
		goto dealloc;


	if (libertas_add_mesh(priv))
	if (libertas_add_mesh(priv, &udev->dev))
		goto err_add_mesh;
		goto err_add_mesh;


	priv->hw_register_dev = if_usb_register_dev;
	priv->hw_register_dev = if_usb_register_dev;
@@ -806,9 +801,6 @@ static int if_usb_register_dev(wlan_private * priv)
	cardp->eth_dev = priv->dev;
	cardp->eth_dev = priv->dev;
	priv->hotplug_device = &(cardp->udev->dev);
	priv->hotplug_device = &(cardp->udev->dev);


	SET_NETDEV_DEV(cardp->eth_dev, &(cardp->udev->dev));
	SET_NETDEV_DEV(priv->mesh_dev, &(cardp->udev->dev));

	lbs_deb_usbd(&cardp->udev->dev, "udev pointer is at %p\n",
	lbs_deb_usbd(&cardp->udev->dev, "udev pointer is at %p\n",
		    cardp->udev);
		    cardp->udev);


+6 −2
Original line number Original line Diff line number Diff line
@@ -763,7 +763,7 @@ static int wlan_service_main_thread(void *data)
 *  @param card    A pointer to card
 *  @param card    A pointer to card
 *  @return 	   A pointer to wlan_private structure
 *  @return 	   A pointer to wlan_private structure
 */
 */
wlan_private *libertas_add_card(void *card)
wlan_private *libertas_add_card(void *card, struct device *dmdev)
{
{
	struct net_device *dev = NULL;
	struct net_device *dev = NULL;
	wlan_private *priv = NULL;
	wlan_private *priv = NULL;
@@ -808,6 +808,8 @@ wlan_private *libertas_add_card(void *card)
	dev->flags |= IFF_BROADCAST | IFF_MULTICAST;
	dev->flags |= IFF_BROADCAST | IFF_MULTICAST;
	dev->set_multicast_list = wlan_set_multicast_list;
	dev->set_multicast_list = wlan_set_multicast_list;


	SET_NETDEV_DEV(dev, dmdev);

	INIT_LIST_HEAD(&priv->adapter->cmdfreeq);
	INIT_LIST_HEAD(&priv->adapter->cmdfreeq);
	INIT_LIST_HEAD(&priv->adapter->cmdpendingq);
	INIT_LIST_HEAD(&priv->adapter->cmdpendingq);


@@ -891,7 +893,7 @@ EXPORT_SYMBOL_GPL(libertas_activate_card);
 *  @param priv    A pointer to the wlan_private structure
 *  @param priv    A pointer to the wlan_private structure
 *  @return 	   0 if successful, -X otherwise
 *  @return 	   0 if successful, -X otherwise
 */
 */
int libertas_add_mesh(wlan_private *priv)
int libertas_add_mesh(wlan_private *priv, struct device *dev)
{
{
	struct net_device *mesh_dev = NULL;
	struct net_device *mesh_dev = NULL;
	int ret = 0;
	int ret = 0;
@@ -918,6 +920,8 @@ int libertas_add_mesh(wlan_private *priv)
	memcpy(mesh_dev->dev_addr, priv->dev->dev_addr,
	memcpy(mesh_dev->dev_addr, priv->dev->dev_addr,
			sizeof(priv->dev->dev_addr));
			sizeof(priv->dev->dev_addr));


	SET_NETDEV_DEV(priv->mesh_dev, dev);

#ifdef	WIRELESS_EXT
#ifdef	WIRELESS_EXT
	mesh_dev->wireless_handlers = (struct iw_handler_def *)&libertas_handler_def;
	mesh_dev->wireless_handlers = (struct iw_handler_def *)&libertas_handler_def;
#endif
#endif