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 .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Written by :
* Dmitry Eremin - Solenikov < dbaryshkov @ gmail . com >
*/
# ifndef WPAN_PHY_H
# define WPAN_PHY_H
# include <linux/netdevice.h>
# include <linux/mutex.h>
struct wpan_phy {
struct mutex pib_lock ;
/*
* This is a PIB acording to 802.15 .4 - 2006.
* 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 ] ;
2009-08-14 16:13:12 +04:00
u8 transmit_power ;
u8 cca_mode ;
struct device dev ;
int idx ;
2009-11-05 16:56:23 +03:00
struct net_device * ( * add_iface ) ( struct wpan_phy * phy ,
const char * name ) ;
void ( * del_iface ) ( struct wpan_phy * phy , struct net_device * dev ) ;
2009-08-14 16:13:12 +04:00
char priv [ 0 ] __attribute__ ( ( __aligned__ ( NETDEV_ALIGN ) ) ) ;
} ;
2009-11-04 17:53:23 +03:00
# define to_phy(_dev) container_of(_dev, struct wpan_phy, dev)
2009-08-14 16:13:12 +04:00
struct wpan_phy * wpan_phy_alloc ( 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 ;
}
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 ) ;
}
# endif