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