| 
									
										
										
										
											2007-04-23 12:20:05 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * 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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 13:09:35 -04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * 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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-23 12:20:05 -07:00
										 |  |  | /* free object */ | 
					
						
							|  |  |  | extern void cfg80211_dev_free(struct cfg80211_registered_device *drv); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 13:09:35 -04:00
										 |  |  | extern int cfg80211_dev_rename(struct cfg80211_registered_device *drv, | 
					
						
							|  |  |  | 			       char *newname); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-23 12:20:05 -07:00
										 |  |  | #endif /* __NET_WIRELESS_CORE_H */
 |