 5568296573
			
		
	
	
	5568296573
	
	
	
		
			
			Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Wireless configuration interface internals.
 | |
|  *
 | |
|  * Copyright 2006, 2007 Johannes Berg <johannes@sipsolutions.net>
 | |
|  */
 | |
| #ifndef __NET_WIRELESS_CORE_H
 | |
| #define __NET_WIRELESS_CORE_H
 | |
| #include <linux/mutex.h>
 | |
| #include <linux/list.h>
 | |
| #include <linux/netdevice.h>
 | |
| #include <net/genetlink.h>
 | |
| #include <net/wireless.h>
 | |
| #include <net/cfg80211.h>
 | |
| 
 | |
| struct cfg80211_registered_device {
 | |
| 	struct cfg80211_ops *ops;
 | |
| 	struct list_head list;
 | |
| 	/* we hold this mutex during any call so that
 | |
| 	 * we cannot do multiple calls at once, and also
 | |
| 	 * to avoid the deregister call to proceed while
 | |
| 	 * any call is in progress */
 | |
| 	struct mutex mtx;
 | |
| 
 | |
| 	/* wiphy index, internal only */
 | |
| 	int idx;
 | |
| 
 | |
| 	/* associate netdev list */
 | |
| 	struct mutex devlist_mtx;
 | |
| 	struct list_head netdev_list;
 | |
| 
 | |
| 	/* must be last because of the way we do wiphy_priv(),
 | |
| 	 * and it should at least be aligned to NETDEV_ALIGN */
 | |
| 	struct wiphy wiphy __attribute__((__aligned__(NETDEV_ALIGN)));
 | |
| };
 | |
| 
 | |
| static inline
 | |
| struct cfg80211_registered_device *wiphy_to_dev(struct wiphy *wiphy)
 | |
| {
 | |
| 	BUG_ON(!wiphy);
 | |
| 	return container_of(wiphy, struct cfg80211_registered_device, wiphy);
 | |
| }
 | |
| 
 | |
| extern struct mutex cfg80211_drv_mutex;
 | |
| extern struct list_head cfg80211_drv_list;
 | |
| 
 | |
| /*
 | |
|  * This function returns a pointer to the driver
 | |
|  * that the genl_info item that is passed refers to.
 | |
|  * If successful, it returns non-NULL and also locks
 | |
|  * the driver's mutex!
 | |
|  *
 | |
|  * This means that you need to call cfg80211_put_dev()
 | |
|  * before being allowed to acquire &cfg80211_drv_mutex!
 | |
|  *
 | |
|  * This is necessary because we need to lock the global
 | |
|  * mutex to get an item off the list safely, and then
 | |
|  * we lock the drv mutex so it doesn't go away under us.
 | |
|  *
 | |
|  * We don't want to keep cfg80211_drv_mutex locked
 | |
|  * for all the time in order to allow requests on
 | |
|  * other interfaces to go through at the same time.
 | |
|  *
 | |
|  * The result of this can be a PTR_ERR and hence must
 | |
|  * be checked with IS_ERR() for errors.
 | |
|  */
 | |
| extern struct cfg80211_registered_device *
 | |
| cfg80211_get_dev_from_info(struct genl_info *info);
 | |
| 
 | |
| /* identical to cfg80211_get_dev_from_info but only operate on ifindex */
 | |
| extern struct cfg80211_registered_device *
 | |
| cfg80211_get_dev_from_ifindex(int ifindex);
 | |
| 
 | |
| extern void cfg80211_put_dev(struct cfg80211_registered_device *drv);
 | |
| 
 | |
| /* free object */
 | |
| extern void cfg80211_dev_free(struct cfg80211_registered_device *drv);
 | |
| 
 | |
| extern int cfg80211_dev_rename(struct cfg80211_registered_device *drv,
 | |
| 			       char *newname);
 | |
| 
 | |
| #endif /* __NET_WIRELESS_CORE_H */
 |