backports: add ether_addr_copy()
authorHauke Mehrtens <hauke@hauke-m.de>
Sat, 7 Jun 2014 17:49:45 +0000 (19:49 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 7 Jun 2014 18:35:01 +0000 (20:35 +0200)
This is needed by the rsi driver.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
backport/backport-include/linux/etherdevice.h

index 8d09e1f2637956ddcf8b555c4da0a05425850920..cc2ee0a613b097d79d1c194680bb38cfb2d4c6d5 100644 (file)
@@ -148,6 +148,29 @@ static inline bool ether_addr_equal_unaligned(const u8 *addr1, const u8 *addr2)
        return memcmp(addr1, addr2, ETH_ALEN) == 0;
 #endif
 }
+
+/**
+ * ether_addr_copy - Copy an Ethernet address
+ * @dst: Pointer to a six-byte array Ethernet address destination
+ * @src: Pointer to a six-byte array Ethernet address source
+ *
+ * Please note: dst & src must both be aligned to u16.
+ */
+#define ether_addr_copy LINUX_BACKPORT(ether_addr_copy)
+static inline void ether_addr_copy(u8 *dst, const u8 *src)
+{
+#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
+       *(u32 *)dst = *(const u32 *)src;
+       *(u16 *)(dst + 4) = *(const u16 *)(src + 4);
+#else
+       u16 *a = (u16 *)dst;
+       const u16 *b = (const u16 *)src;
+
+       a[0] = b[0];
+       a[1] = b[1];
+       a[2] = b[2];
+#endif
+}
 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0) */
 
 #endif /* _BACKPORT_LINUX_ETHERDEVICE_H */