2009-08-14 16:13:12 +04:00
/*
* Copyright ( C ) 2007 , 2008 , 2009 Siemens AG
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* Written by :
* Dmitry Eremin - Solenikov < dbaryshkov @ gmail . com >
*/
2014-10-25 11:41:02 +04:00
# ifndef __NET_CFG802154_H
# define __NET_CFG802154_H
2009-08-14 16:13:12 +04:00
# include <linux/netdevice.h>
# include <linux/mutex.h>
2011-11-24 05:12:59 +04:00
# include <linux/bug.h>
2009-08-14 16:13:12 +04:00
2012-05-16 00:50:29 +04:00
/* According to the IEEE 802.15.4 stadard the upper most significant bits of
* the 32 - bit channel bitmaps shall be used as an integer value to specify 32
* possible channel pages . The lower 27 bits of the channel bit map shall be
* used as a bit mask to specify channel numbers within a channel page .
*/
# define WPAN_NUM_CHANNELS 27
# define WPAN_NUM_PAGES 32
2014-11-02 06:18:35 +03:00
struct wpan_phy ;
struct cfg802154_ops {
} ;
2009-08-14 16:13:12 +04:00
struct wpan_phy {
struct mutex pib_lock ;
/*
2014-02-17 14:34:08 +04:00
* This is a PIB according to 802.15 .4 - 2011.
2009-08-14 16:13:12 +04:00
* We do not provide timing - related variables , as they
* aren ' t used outside of driver
*/
u8 current_channel ;
u8 current_page ;
2009-09-22 15:26:48 +04:00
u32 channels_supported [ 32 ] ;
2014-02-17 14:34:08 +04:00
s8 transmit_power ;
2009-08-14 16:13:12 +04:00
u8 cca_mode ;
2014-02-17 14:34:14 +04:00
u8 min_be ;
u8 max_be ;
u8 csma_retries ;
s8 frame_retries ;
2009-08-14 16:13:12 +04:00
2014-02-17 14:34:10 +04:00
bool lbt ;
2014-02-17 14:34:12 +04:00
s32 cca_ed_level ;
2014-02-17 14:34:10 +04:00
2009-08-14 16:13:12 +04:00
struct device dev ;
int idx ;
2009-11-05 16:56:23 +03:00
struct net_device * ( * add_iface ) ( struct wpan_phy * phy ,
2012-05-16 00:50:27 +04:00
const char * name , int type ) ;
2009-11-05 16:56:23 +03:00
void ( * del_iface ) ( struct wpan_phy * phy , struct net_device * dev ) ;
2014-10-25 07:25:10 +04:00
char priv [ 0 ] __aligned ( NETDEV_ALIGN ) ;
2009-08-14 16:13:12 +04:00
} ;
2009-11-04 17:53:23 +03:00
# define to_phy(_dev) container_of(_dev, struct wpan_phy, dev)
2014-11-02 06:18:35 +03:00
struct wpan_phy *
wpan_phy_alloc ( const struct cfg802154_ops * ops , size_t priv_size ) ;
2009-09-28 19:01:20 +04:00
static inline void wpan_phy_set_dev ( struct wpan_phy * phy , struct device * dev )
{
phy - > dev . parent = dev ;
}
2014-10-25 07:25:11 +04:00
2009-09-28 19:01:20 +04:00
int wpan_phy_register ( struct wpan_phy * phy ) ;
2009-08-14 16:13:12 +04:00
void wpan_phy_unregister ( struct wpan_phy * phy ) ;
void wpan_phy_free ( struct wpan_phy * phy ) ;
2009-09-15 16:57:04 +04:00
/* Same semantics as for class_for_each_device */
int wpan_phy_for_each ( int ( * fn ) ( struct wpan_phy * phy , void * data ) , void * data ) ;
2009-08-14 16:13:12 +04:00
static inline void * wpan_phy_priv ( struct wpan_phy * phy )
{
BUG_ON ( ! phy ) ;
return & phy - > priv ;
}
struct wpan_phy * wpan_phy_find ( const char * str ) ;
2009-09-14 18:11:03 +04:00
static inline void wpan_phy_put ( struct wpan_phy * phy )
{
put_device ( & phy - > dev ) ;
}
2009-08-14 16:13:12 +04:00
static inline const char * wpan_phy_name ( struct wpan_phy * phy )
{
return dev_name ( & phy - > dev ) ;
}
2014-10-25 11:41:02 +04:00
# endif /* __NET_CFG802154_H */