2012-05-15 20:50:25 +00:00
/*
* MAC commands interface
*
* Copyright 2007 - 2012 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 :
* Sergey Lapin < slapin @ ossfans . org >
* Dmitry Eremin - Solenikov < dbaryshkov @ gmail . com >
* Alexander Smirnov < alex . bluesman . smirnov @ gmail . com >
*/
# include <linux/skbuff.h>
# include <linux/if_arp.h>
2012-06-25 23:24:52 +00:00
# include <net/ieee802154.h>
2012-05-15 20:50:25 +00:00
# include <net/ieee802154_netdev.h>
# include <net/wpan-phy.h>
# include <net/mac802154.h>
2012-06-25 23:24:52 +00:00
# include <net/nl802154.h>
2012-05-15 20:50:25 +00:00
# include "mac802154.h"
2012-06-25 23:24:52 +00:00
static int mac802154_mlme_start_req ( struct net_device * dev ,
2014-03-14 21:24:02 +01:00
struct ieee802154_addr * addr ,
2012-06-25 23:24:52 +00:00
u8 channel , u8 page ,
u8 bcn_ord , u8 sf_ord ,
u8 pan_coord , u8 blx ,
u8 coord_realign )
{
2014-03-14 21:24:02 +01:00
BUG_ON ( addr - > mode ! = IEEE802154_ADDR_SHORT ) ;
2012-06-25 23:24:52 +00:00
2014-03-14 21:24:02 +01:00
mac802154_dev_set_pan_id ( dev , addr - > pan_id ) ;
mac802154_dev_set_short_addr ( dev , addr - > short_addr ) ;
2012-06-25 23:24:52 +00:00
mac802154_dev_set_ieee_addr ( dev ) ;
mac802154_dev_set_page_channel ( dev , page , channel ) ;
/* FIXME: add validation for unused parameters to be sane
* for SoftMAC
*/
ieee802154_nl_start_confirm ( dev , IEEE802154_SUCCESS ) ;
return 0 ;
}
2012-07-10 21:22:46 +00:00
static struct wpan_phy * mac802154_get_phy ( const struct net_device * dev )
2012-05-15 20:50:25 +00:00
{
struct mac802154_sub_if_data * priv = netdev_priv ( dev ) ;
BUG_ON ( dev - > type ! = ARPHRD_IEEE802154 ) ;
return to_phy ( get_device ( & priv - > hw - > phy - > dev ) ) ;
}
struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced = {
. get_phy = mac802154_get_phy ,
} ;
2012-06-25 23:24:48 +00:00
struct ieee802154_mlme_ops mac802154_mlme_wpan = {
. get_phy = mac802154_get_phy ,
2012-06-25 23:24:52 +00:00
. start_req = mac802154_mlme_start_req ,
2012-07-10 21:22:44 +00:00
. get_pan_id = mac802154_dev_get_pan_id ,
. get_short_addr = mac802154_dev_get_short_addr ,
2013-03-25 17:59:29 +00:00
. get_dsn = mac802154_dev_get_dsn ,
2014-03-31 21:37:46 +02:00
. set_mac_params = mac802154_set_mac_params ,
. get_mac_params = mac802154_get_mac_params ,
2012-06-25 23:24:48 +00:00
} ;