2014-11-02 10:18:35 +07: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 14:36:48 +07:00
|
|
|
struct list_head list;
|
2014-11-02 10:18:35 +07:00
|
|
|
|
2014-11-06 02:51:12 +07:00
|
|
|
/* wpan_phy index, internal only */
|
|
|
|
int wpan_phy_idx;
|
|
|
|
|
2014-11-09 14:36:50 +07: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 10:18:35 +07: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 10:18:37 +07: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 14:36:53 +07:00
|
|
|
extern struct list_head cfg802154_rdev_list;
|
2014-11-09 14:36:54 +07:00
|
|
|
extern int cfg802154_rdev_list_generation;
|
2014-11-09 14:36:53 +07:00
|
|
|
|
2014-11-02 10:18:35 +07:00
|
|
|
/* free object */
|
|
|
|
void cfg802154_dev_free(struct cfg802154_registered_device *rdev);
|
2014-11-09 14:36:53 +07:00
|
|
|
struct cfg802154_registered_device *
|
|
|
|
cfg802154_rdev_by_wpan_phy_idx(int wpan_phy_idx);
|
2015-09-28 14:00:25 +07:00
|
|
|
struct wpan_phy *wpan_phy_idx_to_wpan_phy(int wpan_phy_idx);
|
2014-11-02 10:18:35 +07:00
|
|
|
|
|
|
|
#endif /* __IEEE802154_CORE_H */
|