|
@@ -26,51 +26,6 @@
|
|
#include "ieee802154_i.h"
|
|
#include "ieee802154_i.h"
|
|
#include "driver-ops.h"
|
|
#include "driver-ops.h"
|
|
|
|
|
|
-struct hw_addr_filt_notify_work {
|
|
|
|
- struct work_struct work;
|
|
|
|
- struct net_device *dev;
|
|
|
|
- unsigned long changed;
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static struct ieee802154_local *mac802154_slave_get_priv(struct net_device *dev)
|
|
|
|
-{
|
|
|
|
- struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
|
|
|
|
-
|
|
|
|
- BUG_ON(dev->type != ARPHRD_IEEE802154);
|
|
|
|
-
|
|
|
|
- return sdata->local;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static void hw_addr_notify(struct work_struct *work)
|
|
|
|
-{
|
|
|
|
- struct hw_addr_filt_notify_work *nw = container_of(work,
|
|
|
|
- struct hw_addr_filt_notify_work, work);
|
|
|
|
- struct ieee802154_local *local = mac802154_slave_get_priv(nw->dev);
|
|
|
|
- int res;
|
|
|
|
-
|
|
|
|
- res = local->ops->set_hw_addr_filt(&local->hw, &local->hw.hw_filt,
|
|
|
|
- nw->changed);
|
|
|
|
- if (res)
|
|
|
|
- pr_debug("failed changed mask %lx\n", nw->changed);
|
|
|
|
-
|
|
|
|
- kfree(nw);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static void set_hw_addr_filt(struct net_device *dev, unsigned long changed)
|
|
|
|
-{
|
|
|
|
- struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
|
|
|
|
- struct hw_addr_filt_notify_work *work;
|
|
|
|
-
|
|
|
|
- work = kzalloc(sizeof(*work), GFP_ATOMIC);
|
|
|
|
- if (!work)
|
|
|
|
- return;
|
|
|
|
-
|
|
|
|
- INIT_WORK(&work->work, hw_addr_notify);
|
|
|
|
- work->dev = dev;
|
|
|
|
- work->changed = changed;
|
|
|
|
- queue_work(sdata->local->workqueue, &work->work);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
void mac802154_dev_set_short_addr(struct net_device *dev, __le16 val)
|
|
void mac802154_dev_set_short_addr(struct net_device *dev, __le16 val)
|
|
{
|
|
{
|
|
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
|
|
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
|
|
@@ -119,12 +74,6 @@ void mac802154_dev_set_pan_id(struct net_device *dev, __le16 val)
|
|
spin_lock_bh(&sdata->mib_lock);
|
|
spin_lock_bh(&sdata->mib_lock);
|
|
sdata->pan_id = val;
|
|
sdata->pan_id = val;
|
|
spin_unlock_bh(&sdata->mib_lock);
|
|
spin_unlock_bh(&sdata->mib_lock);
|
|
-
|
|
|
|
- if ((sdata->local->ops->set_hw_addr_filt) &&
|
|
|
|
- (sdata->local->hw.hw_filt.pan_id != sdata->pan_id)) {
|
|
|
|
- sdata->local->hw.hw_filt.pan_id = sdata->pan_id;
|
|
|
|
- set_hw_addr_filt(dev, IEEE802154_AFILT_PANID_CHANGED);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
u8 mac802154_dev_get_dsn(const struct net_device *dev)
|
|
u8 mac802154_dev_get_dsn(const struct net_device *dev)
|