mac802154: cfg: add suspend and resume callbacks
This patch introduces suspend and resume callbacks to mac802154. When doing suspend we calling the stop driver callback which should stop the receiving of frames. A transceiver should go into low-power mode then. Calling resume will call the start driver callback, which starts receiving again and allow to transmit frames. This was tested only with the fakelb driver and a qemu vm by doing the following commands: echo "devices" > /sys/power/pm_test echo "freeze" > /sys/power/state while doing some high traffic between two fakelb phys. Signed-off-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:

committed by
Marcel Holtmann

parent
a6cb869b3b
commit
3cf24cf8c3
@@ -253,6 +253,9 @@ void ieee802154_rx(struct ieee802154_hw *hw, struct sk_buff *skb)
|
||||
|
||||
WARN_ON_ONCE(softirq_count() == 0);
|
||||
|
||||
if (local->suspended)
|
||||
goto drop;
|
||||
|
||||
/* TODO: When a transceiver omits the checksum here, we
|
||||
* add an own calculated one. This is currently an ugly
|
||||
* solution because the monitor needs a crc here.
|
||||
@@ -273,8 +276,7 @@ void ieee802154_rx(struct ieee802154_hw *hw, struct sk_buff *skb)
|
||||
crc = crc_ccitt(0, skb->data, skb->len);
|
||||
if (crc) {
|
||||
rcu_read_unlock();
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
goto drop;
|
||||
}
|
||||
}
|
||||
/* remove crc */
|
||||
@@ -283,6 +285,10 @@ void ieee802154_rx(struct ieee802154_hw *hw, struct sk_buff *skb)
|
||||
__ieee802154_rx_handle_packet(local, skb);
|
||||
|
||||
rcu_read_unlock();
|
||||
|
||||
return;
|
||||
drop:
|
||||
kfree_skb(skb);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee802154_rx);
|
||||
|
||||
|
Reference in New Issue
Block a user