mac802154: separate omit tx/rx flags
authorAlexander Aring <alex.aring@gmail.com>
Wed, 29 Oct 2014 20:34:34 +0000 (21:34 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 29 Oct 2014 22:07:45 +0000 (23:07 +0100)
This patch splits the IEEE802154_HW_OMIT_CKSUM hardware flag into
IEEE802154_HW_TX_OMIT_CKSUM and IEEE802154_HW_RX_OMIT_CKSUM. This is
useful to deliver the received crc from the driver layer to the monitor
interface. At the moment we can't do that without change the xmit
handling.

The received checksum should be visible in monitor mode only.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/mac802154.h
net/mac802154/rx.c
net/mac802154/tx.c

index 166ef6c52180497197761a65e4d5305ce6fe27a5..bc1d40c826e3641c821cbaf1d115d70304f25122 100644 (file)
@@ -73,8 +73,8 @@ struct ieee802154_hw {
  * however, so you are advised to review these flags carefully.
  */
 
-/* Indicates that receiver omits FCS and xmitter will add FCS on it's own. */
-#define IEEE802154_HW_OMIT_CKSUM       0x00000001
+/* Indicates that xmitter will add FCS on it's own. */
+#define IEEE802154_HW_TX_OMIT_CKSUM    0x00000001
 /* Indicates that receiver will autorespond with ACK frames. */
 #define IEEE802154_HW_AACK             0x00000002
 /* Indicates that transceiver will support transmit power setting. */
@@ -94,6 +94,12 @@ struct ieee802154_hw {
 #define IEEE802154_HW_AFILT            0x00000100
 /* Indicates that transceiver will support promiscuous mode setting. */
 #define IEEE802154_HW_PROMISCUOUS      0x00000200
+/* Indicates that receiver omits FCS. */
+#define IEEE802154_HW_RX_OMIT_CKSUM    0x00000400
+
+/* Indicates that receiver omits FCS and xmitter will add FCS on it's own. */
+#define IEEE802154_HW_OMIT_CKSUM       (IEEE802154_HW_TX_OMIT_CKSUM | \
+                                        IEEE802154_HW_RX_OMIT_CKSUM)
 
 /* This groups the most common CSMA support fields into one. */
 #define IEEE802154_HW_CSMA             (IEEE802154_HW_CCA_MODE | \
index 86394befbf883660893419de1917ab622a81b6ed..2aa80bdcbacfe111aa74aaeb7efef253aadf6ff0 100644 (file)
@@ -255,7 +255,7 @@ void ieee802154_rx(struct ieee802154_hw *hw, struct sk_buff *skb)
 
        WARN_ON_ONCE(softirq_count() == 0);
 
-       if (!(local->hw.flags & IEEE802154_HW_OMIT_CKSUM)) {
+       if (!(local->hw.flags & IEEE802154_HW_RX_OMIT_CKSUM)) {
                u16 crc;
 
                if (skb->len < 2) {
index 77973a84e9a2246e45b301eedcdd3226d4873643..cc37b77f26321ca9a5f4f960a0f72608d48c1013 100644 (file)
@@ -83,7 +83,7 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb)
        struct net_device *dev = skb->dev;
        int ret;
 
-       if (!(local->hw.flags & IEEE802154_HW_OMIT_CKSUM)) {
+       if (!(local->hw.flags & IEEE802154_HW_TX_OMIT_CKSUM)) {
                u16 crc = crc_ccitt(0, skb->data, skb->len);
 
                put_unaligned_le16(crc, skb_put(skb, 2));