2014-11-02 06:18:35 +03:00
# ifndef __IEEE802154_CORE_H
# define __IEEE802154_CORE_H
# include <net/cfg802154.h>
struct cfg802154_registered_device {
const struct cfg802154_ops * ops ;
2014-11-09 10:36:48 +03:00
struct list_head list ;
2014-11-02 06:18:35 +03:00
2014-11-05 22:51:12 +03:00
/* wpan_phy index, internal only */
int wpan_phy_idx ;
2014-11-09 10:36:50 +03:00
/* also protected by devlist_mtx */
int opencount ;
wait_queue_head_t dev_wait ;
/* protected by RTNL only */
int num_running_ifaces ;
/* associated wpan interfaces, protected by rtnl or RCU */
struct list_head wpan_dev_list ;
int devlist_generation , wpan_dev_id ;
2014-11-02 06:18:35 +03:00
/* must be last because of the way we do wpan_phy_priv(),
* and it should at least be aligned to NETDEV_ALIGN
*/
struct wpan_phy wpan_phy __aligned ( NETDEV_ALIGN ) ;
} ;
2014-11-02 06:18:37 +03:00
static inline struct cfg802154_registered_device *
wpan_phy_to_rdev ( struct wpan_phy * wpan_phy )
{
BUG_ON ( ! wpan_phy ) ;
return container_of ( wpan_phy , struct cfg802154_registered_device ,
wpan_phy ) ;
}
2014-11-09 10:36:53 +03:00
extern struct list_head cfg802154_rdev_list ;
2014-11-09 10:36:54 +03:00
extern int cfg802154_rdev_list_generation ;
2014-11-09 10:36:53 +03:00
2014-11-02 06:18:35 +03:00
/* free object */
void cfg802154_dev_free ( struct cfg802154_registered_device * rdev ) ;
2014-11-09 10:36:53 +03:00
struct cfg802154_registered_device *
cfg802154_rdev_by_wpan_phy_idx ( int wpan_phy_idx ) ;
2015-09-28 10:00:25 +03:00
struct wpan_phy * wpan_phy_idx_to_wpan_phy ( int wpan_phy_idx ) ;
2014-11-02 06:18:35 +03:00
# endif /* __IEEE802154_CORE_H */