staging: vt6655: replace memcpy() by ether_addr_copy() using coccinelle and pack...
authorAya Mahfouz <mahfouz.saif.elyazal@gmail.com>
Sat, 11 Oct 2014 00:42:45 +0000 (02:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Oct 2014 02:30:15 +0000 (10:30 +0800)
This patch focuses on fixing the following warning generated
by checkpatch.pl for the file rxtx.c :

Prefer ether_addr_copy() over memcpy() if the Ethernet addresses
are __aligned(2)

The changes were applied using the following coccinelle rule:

@@ expression e1, e2; @@

- memcpy(e1, e2, ETH_ALEN);
+ ether_addr_copy(e1, e2);

After applying the rule, some referencing operations were
adjusted manually to avoid a gcc compilation warning.

According to ether_addr_copy() description and functionality,
all Ethernet addresses should align to the u16 datatype.
A check was made on the following datastructures:

        - vnt_mic_hdr
        - tagS802_11Header
        - tagSEthernetHeader
        - vnt_rts_g
        - ieee80211_rts
        - vnt_private

To maintain that the array abyCurrentNetAddr in vnt_private is aligned,
it was placed before the boolean bLinkPass in the struct definition.
The definition can be found in device.h. A couple of variables were
packed in holes detected by pahole.

Output of pahole when running it on rxtx.o after the changes:

truct tagSEthernetHeader {
        unsigned char          abyDstAddr[6];        /* 0     6 */
        unsigned char          abySrcAddr[6];        /* 6     6 */
        short unsigned int     wType;                /* 12    2 */

        /* size: 14, cachelines: 1, members: 3 */
        /* last cacheline: 14 bytes */
};
struct tagS802_11Header {
        short unsigned int     wFrameCtl;            /* 0     2 */
        short unsigned int     wDurationID;          /* 2     2 */
        unsigned char          abyAddr1[6];          /* 4     6 */
        unsigned char          abyAddr2[6];          /* 10    6 */
        unsigned char          abyAddr3[6];          /* 16    6 */
        short unsigned int     wSeqCtl;              /* 22    2 */
        unsigned char          abyAddr4[6];          /* 24    6 */

        /* size: 30, cachelines: 1, members: 7 */
        /* last cacheline: 30 bytes */
};
struct ieee80211_rts {
        __le16                 frame_control;        /* 0     2 */
        __le16                 duration;             /* 2     2 */
        u8                     ra[6];                /* 4     6 */
        u8                     ta[6];                /* 10    6 */

        /* size: 16, cachelines: 1, members: 4 */
        /* last cacheline: 16 bytes */
};
struct vnt_private {
        struct pci_dev *       pcid;                 /* 0     4 */
        struct net_device *    dev;                  /* 4     4 */
        dma_addr_t             pool_dma;             /* 8     4 */
        dma_addr_t             rd0_pool_dma;         /* 12    4 */
        dma_addr_t             rd1_pool_dma;         /* 16    4 */
        dma_addr_t             td0_pool_dma;         /* 20    4 */
        dma_addr_t             td1_pool_dma;         /* 24    4 */
        dma_addr_t             tx_bufs_dma0;         /* 28    4 */
        dma_addr_t             tx_bufs_dma1;         /* 32    4 */
        dma_addr_t             tx_beacon_dma;        /* 36    4 */
        unsigned char *        tx0_bufs;             /* 40    4 */
        unsigned char *        tx1_bufs;             /* 44    4 */
        unsigned char *        tx_beacon_bufs;       /* 48    4 */
        CHIP_TYPE              chip_id;              /* 52    4 */
        void *                 PortOffset;           /* 56    4 */
        long unsigned int      dwIsr;                /* 60    4 */
        /*--- cacheline 1 boundary (64 bytes) ---*/
        u32                    memaddr;              /* 64    4 */
        u32                    ioaddr;               /* 68    4 */
        u32                    io_size;              /* 72    4 */
        unsigned char          byRevId;              /* 76    1 */
        unsigned char          byRxMode;             /* 77    1 */
        short unsigned int     SubSystemID;          /* 78    2 */
        short unsigned int     SubVendorID;          /* 80    2 */
        spinlock_t             lock;                 /* 82    2 */
        int                    nTxQueues;            /* 84    4 */
        volatile int           iTDUsed;              /* 88    8 */
        volatile PSTxDesc      apCurrTD;             /* 96    8 */
        volatile PSTxDesc      apTailTD;             /* 104   8 */
        volatile PSTxDesc      apTD0Rings;           /* 112   4 */
        volatile PSTxDesc      apTD1Rings;           /* 116   4 */
        volatile PSRxDesc      aRD0Ring;             /* 120   4 */
        volatile PSRxDesc      aRD1Ring;             /* 124   4 */
        /*--- cacheline 2 boundary (128 bytes) ---*/
        volatile PSRxDesc      pCurrRD;              /* 128   8 */
        SCache                 sDupRxCache;          /* 136  44 */
        SDeFragControlBlock    sRxDFCB[64];          /* 180  2048 */
        /*--- cacheline 34 boundary (2176 bytes) was 52 bytes ago ---*/
        unsigned int           cbDFCB;               /* 2228  4 */
        unsigned int           cbFreeDFCB;           /* 2232  4 */
        unsigned int           uCurrentDFCBIdx;      /* 2236  4 */
        /*--- cacheline 35 boundary (2240 bytes) ---*/
        OPTIONS                sOpts;                /* 2240 52 */
        u32                    flags;                /* 2292  4 */
        u32                    rx_buf_sz;            /* 2296  4 */
        int                    multicast_limit;      /* 2300  4 */
        /*--- cacheline 36 boundary (2304 bytes) ---*/
        pid_t                  MLMEThr_pid;          /* 2304  4 */
        struct completion      notify;               /* 2308 16 */
        struct semaphore       mlme_semaphore;       /* 2324 16 */
        u32                    rx_bytes;             /* 2340  4 */
        unsigned char          byLocalID;            /* 2344  1 */
        unsigned char          byRFType;             /* 2345  1 */
        unsigned char          byMaxPwrLevel;        /* 2346  1 */
        unsigned char          byZoneType;           /* 2347  1 */
        bool                   bZoneRegExist;        /* 2348  1 */
        unsigned char          byOriginalZonetype;   /* 2349  1 */
        unsigned char          abyMacContext[384];   /* 2350  384 */
        /*--- cacheline 42 boundary (2688 bytes) was 46 bytes ago ---*/
        unsigned char          abyCurrentNetAddr[6]; /* 2734  6 */
        bool                   bLinkPass;            /* 2740  1 */

        /* XXX 3 bytes hole, try to pack */

        SStatCounter           scStatistic;          /* 2744  776 */
        /*--- cacheline 55 boundary (3520 bytes) ---*/
        SDot11Counters         s802_11Counter;       /* 3520  172 */
        /*--- cacheline 57 boundary (3648 bytes) was 44 bytes ago ---*/
        PSMgmtObject           pMgmt;                /* 3692  4 */
        SMgmtObject            sMgmtObj;             /* 3696 95840 */
        /*--- cacheline 1555 boundary (99520 bytes) was 16 bytes ago ---*/

        /* Bitfield combined with previous fields */

        unsigned int           uCurrRSSI;            /* 0    4 */
        unsigned char          byCurrSQ;             /* 0    1 */
        long unsigned int      dwTxAntennaSel;       /* 0    4 */
        long unsigned int      dwRxAntennaSel;       /* 0    4 */
        unsigned char          byAntennaCount;       /* 0    1 */
        unsigned char          byRxAntennaMode;      /* 0    1 */
        unsigned char          byTxAntennaMode;      /* 0    1 */
        bool                   bTxRxAntInv;          /* 0    1 */
        unsigned char *        pbyTmpBuff;           /* 0    4 */
        unsigned int           uSIFS;                /* 0    4 */
        unsigned int           uDIFS;                /* 0    4 */
        unsigned int           uEIFS;                /* 0    4 */
        unsigned int           uSlot;                /* 0    4 */
        unsigned int           uCwMin;               /* 0    4 */
        unsigned int           uCwMax;               /* 0    4 */
        unsigned char          bySIFS;               /* 0    1 */
        unsigned char          byDIFS;               /* 0    1 */
        unsigned char          byEIFS;               /* 0    1 */
        unsigned char          bySlot;               /* 0    1 */
        unsigned char          byCWMaxMin;           /* 0    1 */
        CARD_PHY_TYPE          eCurrentPHYType;      /* 0    4 */
        VIA_BB_TYPE            byBBType;             /* 0    4 */
        VIA_PKT_TYPE           byPacketType;         /* 0    4 */
        short unsigned int     wBasicRate;           /* 0    2 */
        unsigned char          byACKRate;            /* 0    1 */
        unsigned char          byTopOFDMBasicRate;   /* 0    1 */
        unsigned char          byTopCCKBasicRate;    /* 0    1 */
        unsigned char          byMinChannel;         /* 0    1 */
        unsigned char          byMaxChannel;         /* 0    1 */
        unsigned int           uConnectionRate;      /* 0    4 */
        unsigned char          byPreambleType;       /* 0    1 */
        unsigned char          byShortPreamble;      /* 0    1 */
        short unsigned int     wCurrentRate;         /* 0    2 */
        short unsigned int     wRTSThreshold;        /* 0    2 */
        short unsigned int     wFragmentationThreshold; /* 0    2 */
        unsigned char          byShortRetryLimit;    /* 0    1 */
        unsigned char          byLongRetryLimit;     /* 0    1 */
        enum nl80211_iftype    op_mode;              /* 0    4 */
        unsigned char          byOpMode;             /* 0    1 */
        bool                   bBSSIDFilter;         /* 0    1 */
        short unsigned int     wMaxTransmitMSDULifetime; /* 0     2 */
        unsigned char          abyBSSID[6];          /* 0    6 */
        unsigned char          abyDesireBSSID[6];    /* 0    6 */
        short unsigned int     wACKDuration;         /* 0    2 */
        short unsigned int     wRTSTransmitLen;      /* 0    2 */
        unsigned char          byRTSServiceField;    /* 0    1 */
        unsigned char          byRTSSignalField;     /* 0    1 */
        long unsigned int      dwMaxReceiveLifetime; /* 0    4 */
        bool                   bEncryptionEnable;    /* 0    1 */
        bool                   bLongHeader;          /* 0    1 */
        bool                   bShortSlotTime;       /* 0    1 */
        bool                   bProtectMode;         /* 0    1 */
        bool                   bNonERPPresent;       /* 0    1 */
        bool                   bBarkerPreambleMd;    /* 0    1 */
        unsigned char          byERPFlag;            /* 0    1 */
        short unsigned int     wUseProtectCntDown;   /* 0    2 */
        bool                   bRadioControlOff;     /* 0    1 */
        bool                   bRadioOff;            /* 0    1 */
        bool                   bEnablePSMode;        /* 0    1 */
        short unsigned int     wListenInterval;      /* 0    2 */
        bool                   bPWBitOn;             /* 0    1 */
        WMAC_POWER_MODE        ePSMode;              /* 0    4 */
        unsigned char          byRadioCtl;           /* 0    1 */
        unsigned char          byGPIO;               /* 0    1 */
        bool                   bHWRadioOff;          /* 0    1 */
        bool                   bPrvActive4RadioOFF;  /* 0    1 */
        bool                   bGPIOBlockRead;       /* 0    1 */
        short unsigned int     wSeqCounter;          /* 0    2 */
        short unsigned int     wBCNBufLen;           /* 0    2 */
        bool                   bBeaconBufReady;      /* 0    1 */
        bool                   bBeaconSent;          /* 0    1 */
        bool                   bIsBeaconBufReadySet; /* 0    1 */
        unsigned int           cbBeaconBufReadySetCnt; /* 0     4 */
        bool                   bFixRate;             /* 0    1 */
        unsigned char          byCurrentCh;          /* 0    1 */
        unsigned int           uScanTime;            /* 0    4 */
        CMD_STATE              eCommandState;        /* 0    4 */
        CMD_CODE               eCommand;             /* 0    4 */
        bool                   bBeaconTx;            /* 0    1 */
        bool                   bStopBeacon;          /* 0    1 */
        bool                   bStopDataPkt;         /* 0    1 */
        bool                   bStopTx0Pkt;          /* 0    1 */
        unsigned int           uAutoReConnectTime;   /* 0    4 */
        CMD_ITEM               eCmdQueue[32];        /* 0  1408 */
        unsigned int           uCmdDequeueIdx;       /* 0    4 */
        unsigned int           uCmdEnqueueIdx;       /* 0    4 */
        unsigned int           cbFreeCmdQueue;       /* 0    4 */
        bool                   bCmdRunning;          /* 0    1 */
        bool                   bCmdClear;            /* 0    1 */
        bool                   bRoaming;             /* 0    1 */
        unsigned char          abyIPAddr[4];         /* 0    4 */
        long unsigned int      ulTxPower;            /* 0    4 */
        NDIS_802_11_WEP_STATUS eEncryptionStatus;    /* 0    4 */
        bool                   bTransmitKey;         /* 0    1 */
        NDIS_802_11_WEP_STATUS eOldEncryptionStatus; /* 0    4 */
        SKeyManagement         sKey;                 /* 0  3784 */
        long unsigned int      dwIVCounter;          /* 0    4 */
        u64                    qwPacketNumber;       /* 0    8 */
        unsigned int           uCurrentWEPMode;      /* 0    4 */
        RC4Ext                 SBox;                 /* 0  264 */
        unsigned char          abyPRNG[35];          /* 0   35 */
        unsigned char          byKeyIndex;           /* 0    1 */
        unsigned int           uKeyLength;           /* 0    4 */
        unsigned char          abyKey[29];           /* 0   29 */
        bool                   bAES;                 /* 0    1 */
        unsigned char          byCntMeasure;         /* 0    1 */
        unsigned int           uAssocCount;          /* 0    4 */
        bool                   bMoreData;            /* 0    1 */
        bool                   bGrpAckPolicy;        /* 0    1 */
        bool                   bAssocInfoSet;        /* 0    1 */
        unsigned char          byAutoFBCtrl;         /* 0    1 */
        bool                   bTxMICFail;           /* 0    1 */
        bool                   bRxMICFail;           /* 0    1 */
        unsigned int           uRATEIdx;             /* 0    4 */
        bool                   bUpdateBBVGA;         /* 0    1 */
        unsigned int           uBBVGADiffCount;      /* 0    4 */
        unsigned char          byBBVGANew;           /* 0    1 */
        unsigned char          byBBVGACurrent;       /* 0    1 */
        unsigned char          abyBBVGA[4];          /* 0    4 */
        long int               ldBmThreshold[4];     /* 0   16 */
        unsigned char          byBBPreEDRSSI;        /* 0    1 */
        unsigned char          byBBPreEDIndex;       /* 0    1 */
        bool                   bRadioCmd;            /* 0    1 */
        long unsigned int      dwDiagRefCount;       /* 0    4 */
        unsigned char          byFOETuning;          /* 0    1 */
        unsigned char          byAutoPwrTunning;     /* 0    1 */
        short int              sPSetPointCCK;        /* 0    2 */
        short int              sPSetPointOFDMG;      /* 0    2 */
        short int              sPSetPointOFDMA;      /* 0    2 */
        long int               lPFormulaOffset;      /* 0    4 */
        short int              sPThreshold;          /* 0    2 */
        char                   cAdjustStep;          /* 0    1 */
        char                   cMinTxAGC;            /* 0    1 */
        unsigned char          byCCKPwr;             /* 0    1 */
        unsigned char          byOFDMPwrG;           /* 0    1 */
        unsigned char          byCurPwr;             /* 0    1 */
        char                   byCurPwrdBm;          /* 0    1 */
        unsigned char          abyCCKPwrTbl[15];     /* 0   15 */
        unsigned char          abyOFDMPwrTbl[57];    /* 0   57 */
        char                   abyCCKDefaultPwr[15]; /* 0   15 */
        char                   abyOFDMDefaultPwr[57]; /* 0  57 */
        char                   abyRegPwr[57];        /* 0   57 */
        char                   abyLocalPwr[57];      /* 0   57 */
        unsigned char          byBBCR4d;             /* 0    1 */
        unsigned char          byBBCRc9;             /* 0    1 */
        unsigned char          byBBCR88;             /* 0    1 */
        unsigned char          byBBCR09;             /* 0    1 */
        struct timer_list      sTimerCommand;        /* 0   52 */
        struct timer_list      sTimerTxData;         /* 0   52 */
        long unsigned int      nTxDataTimeCout;      /* 0    4 */
        bool                   fTxDataInSleep;       /* 0    1 */
        bool                   IsTxDataTrigger;      /* 0    1 */
        bool                   fWPA_Authened;        /* 0    1 */
        unsigned char          byReAssocCount;       /* 0    1 */
        unsigned char          byLinkWaitCount;      /* 0    1 */
        unsigned char          abyNodeName[17];      /* 0   17 */
        bool                   bDiversityRegCtlON;   /* 0    1 */
        bool                   bDiversityEnable;     /* 0    1 */
        long unsigned int      ulDiversityNValue;    /* 0    4 */
        long unsigned int      ulDiversityMValue;    /* 0    4 */
        unsigned char          byTMax;               /* 0    1 */
        unsigned char          byTMax2;              /* 0    1 */
        unsigned char          byTMax3;              /* 0    1 */
        long unsigned int      ulSQ3TH;              /* 0    4 */
        long unsigned int      uDiversityCnt;        /* 0    4 */
        unsigned char          byAntennaState;       /* 0    1 */
        long unsigned int      ulRatio_State0;       /* 0    4 */
        long unsigned int      ulRatio_State1;       /* 0    4 */
        struct timer_list      TimerSQ3Tmax1;        /* 0   52 */
        struct timer_list      TimerSQ3Tmax2;        /* 0   52 */
        struct timer_list      TimerSQ3Tmax3;        /* 0   52 */
        long unsigned int      uNumSQ3[12];          /* 0   48 */
        short unsigned int     wAntDiversityMaxRate; /* 0    2 */
        SEthernetHeader        sTxEthHeader;         /* 0   14 */
        SEthernetHeader        sRxEthHeader;         /* 0   14 */
        unsigned char          abyBroadcastAddr[6];  /* 0    6 */
        unsigned char          abySNAP_RFC1042[6];   /* 0    6 */
        unsigned char          abySNAP_Bridgetunnel[6]; /* 0     6 */
        unsigned char          abyEEPROM[256];       /* 0   256 */
        SPMKID                 gsPMKID;              /* 0   360 */
        SPMKIDCandidateEvent   gsPMKIDCandidate;     /* 0    72 */
        bool                   b11hEnable;           /* 0     1 */
        unsigned char          abyCountryCode[3];    /* 0     3 */
        unsigned int           uNumOfMeasureEIDs;    /* 0     4 */
        PWLAN_IE_MEASURE_REQ   pCurrMeasureEID;      /* 0     4 */
        bool                   bMeasureInProgress;   /* 0     1 */
        unsigned char          byOrgChannel;         /* 0     1 */
        unsigned char          byOrgRCR;             /* 0     1 */
        long unsigned int      dwOrgMAR0;            /* 0     4 */
        long unsigned int      dwOrgMAR4;            /* 0     4 */
        unsigned char          byBasicMap;           /* 0     1 */
        unsigned char          byCCAFraction;        /* 0     1 */
        unsigned char          abyRPIs[8];           /* 0     8 */
        long unsigned int      dwRPIs[8];            /* 0    32 */
        bool                   bChannelSwitch;       /* 0     1 */
        unsigned char          byNewChannel;         /* 0     1 */
        unsigned char          byChannelSwitchCount; /* 0     1 */
        bool                   bQuietEnable;         /* 0     1 */
        bool                   bEnableFirstQuiet;    /* 0     1 */
        unsigned char          byQuietStartCount;    /* 0     1 */
        unsigned int           uQuietEnqueue;        /* 0     4 */
        long unsigned int      dwCurrentQuietEndTime; /* 0     4 */
        SQuietControl          sQuiet[8];            /* 0    96 */
        bool                   bCountryInfo5G;       /* 0     1 */
        bool                   bCountryInfo24G;      /* 0     1 */
        short unsigned int     wBeaconInterval;      /* 0     2 */
        struct net_device *    wpadev;               /* 0     4 */
        bool                   bWPADEVUp;            /* 0     1 */
        struct sk_buff *       skb;                  /* 0     4 */
        unsigned int           bwextcount;           /* 0     4 */
        bool                   bWPASuppWextEnabled;  /* 0     1 */
        bool                   bEnableHostapd;       /* 0     1 */
        bool                   bEnable8021x;         /* 0     1 */
        bool                   bEnableHostWEP;       /* 0     1 */
        struct net_device *    apdev;                /* 0     4 */
        int                    (*tx_80211)(struct sk_buff *,
                                 struct net_device *); /* 0     4 */
        unsigned int           uChannel;             /* 0     4 */
        bool                   bMACSuspend;          /* 0     1 */
        struct iw_statistics   wstats;               /* 0    32 */
        bool                   bCommit;              /* 0     1 */
        /*--- cacheline 1672 boundary (107008 bytes) ---*/

        /* size: 107008, cachelines: 1672, members: 279 */
        /* sum members: 107005, holes: 1, sum holes: 3 */
        /* padding: 41471 */

        /* BRAIN FART ALERT! 107008 != 107005 + 3(holes), diff = 0 */

};
struct vnt_mic_hdr {
        u8                     id;                   /* 0     1 */
        u8                     tx_priority;          /* 1     1 */
        u8                     mic_addr2[6];         /* 2     6 */
        u8                     ccmp_pn[6];           /* 8     6 */
        __be16                 payload_len;          /* 14    2 */
        __be16                 hlen;                 /* 16    2 */
        __le16                 frame_control;        /* 18    2 */
        u8                     addr1[6];             /* 20    6 */
        u8                     addr2[6];             /* 26    6 */
        u8                     addr3[6];             /* 32    6 */
        __le16                 seq_ctrl;             /* 38    2 */
        u8                     addr4[6];             /* 40    6 */
        u16                    packing;              /* 46    2 */

        /* size: 48, cachelines: 1, members: 13 */
        /* last cacheline: 48 bytes */
};
struct vnt_rts_g {
        struct vnt_phy_field   b;                    /*  0    4 */
        struct vnt_phy_field   a;                    /*  4    4 */
        __le16                 duration_ba;          /*  8    2 */
        __le16                 duration_aa;          /* 10    2 */
        __le16                 duration_bb;          /* 12    2 */
        u16                    reserved;             /* 14    2 */
        struct ieee80211_rts   data;                 /* 16   16 */

        /* size: 32, cachelines: 1, members: 7 */
        /* last cacheline: 32 bytes */
};

Signed-off-by: Aya Mahfouz <mahfouz.saif.elyazal@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vt6655/device.h
drivers/staging/vt6655/rxtx.c

index ddd356aa7eaf292c14f05e7096a998190769d4a5..ab6be41d4964646c91a106edb76d87a26676e1c8 100644 (file)
@@ -356,9 +356,12 @@ struct vnt_private {
        u32                         io_size;
 
        unsigned char byRevId;
+       unsigned char byRxMode;
        unsigned short SubSystemID;
        unsigned short SubVendorID;
 
+       spinlock_t                  lock;
+
        int                         nTxQueues;
        volatile int                iTDUsed[TYPE_MAXTD];
 
@@ -384,9 +387,6 @@ struct vnt_private {
 
        u32                         rx_buf_sz;
        int                         multicast_limit;
-       unsigned char byRxMode;
-
-       spinlock_t                  lock;
 
        pid_t                   MLMEThr_pid;
        struct completion       notify;
@@ -403,8 +403,8 @@ struct vnt_private {
        bool bZoneRegExist;
        unsigned char byOriginalZonetype;
        unsigned char abyMacContext[MAC_MAX_CONTEXT_REG];
-       bool bLinkPass;          // link status: OK or fail
        unsigned char abyCurrentNetAddr[ETH_ALEN];
+       bool bLinkPass;          // link status: OK or fail
 
        // Adapter statistics
        SStatCounter                scStatistic;
index 7a183f55e7eb2f12a79b3a55cdd63571b832b77f..da7c0a8674b6f441d2c4bca9d9d0ee05a21cf801 100644 (file)
@@ -264,7 +264,7 @@ s_vFillTxKey(
                /* MICHDR0 */
                mic_hdr->id = 0x59;
                mic_hdr->tx_priority = 0;
-               memcpy(mic_hdr->mic_addr2, pMACHeader->abyAddr2, ETH_ALEN);
+               ether_addr_copy(mic_hdr->mic_addr2, pMACHeader->abyAddr2);
 
                /* ccmp pn big endian order */
                mic_hdr->ccmp_pn[0] = (u8)(pTransmitKey->dwTSC47_16 >> 24);
@@ -282,17 +282,17 @@ s_vFillTxKey(
                else
                        mic_hdr->hlen = cpu_to_be16(22);
 
-               memcpy(mic_hdr->addr1, pMACHeader->abyAddr1, ETH_ALEN);
-               memcpy(mic_hdr->addr2, pMACHeader->abyAddr2, ETH_ALEN);
+               ether_addr_copy(mic_hdr->addr1, pMACHeader->abyAddr1);
+               ether_addr_copy(mic_hdr->addr2, pMACHeader->abyAddr2);
 
                /* MICHDR2 */
-               memcpy(mic_hdr->addr3, pMACHeader->abyAddr3, ETH_ALEN);
+               ether_addr_copy(mic_hdr->addr3, pMACHeader->abyAddr3);
                mic_hdr->frame_control =
                                cpu_to_le16(pMACHeader->wFrameCtl & 0xc78f);
                mic_hdr->seq_ctrl = cpu_to_le16(pMACHeader->wSeqCtl & 0xf);
 
                if (pDevice->bLongHeader)
-                       memcpy(mic_hdr->addr4, pMACHeader->abyAddr4, ETH_ALEN);
+                       ether_addr_copy(mic_hdr->addr4, pMACHeader->abyAddr4);
        }
 }
 
@@ -853,14 +853,18 @@ s_vFillRTSHead(
 
                        if ((pDevice->op_mode == NL80211_IFTYPE_ADHOC) ||
                            (pDevice->op_mode == NL80211_IFTYPE_AP)) {
-                               memcpy(&buf->data.ra, psEthHeader->abyDstAddr, ETH_ALEN);
+                               ether_addr_copy(buf->data.ra,
+                                               psEthHeader->abyDstAddr);
                        } else {
-                               memcpy(&buf->data.ra, pDevice->abyBSSID, ETH_ALEN);
+                               ether_addr_copy(buf->data.ra,
+                                               pDevice->abyBSSID);
                        }
                        if (pDevice->op_mode == NL80211_IFTYPE_AP)
-                               memcpy(&buf->data.ta, pDevice->abyBSSID, ETH_ALEN);
+                               ether_addr_copy(buf->data.ta,
+                                               pDevice->abyBSSID);
                        else
-                               memcpy(&buf->data.ta, psEthHeader->abySrcAddr, ETH_ALEN);
+                               ether_addr_copy(buf->data.ta,
+                                               psEthHeader->abySrcAddr);
 
                } else {
                        struct vnt_rts_g_fb *buf = pvRTS;
@@ -917,15 +921,19 @@ s_vFillRTSHead(
 
                        if ((pDevice->op_mode == NL80211_IFTYPE_ADHOC) ||
                            (pDevice->op_mode == NL80211_IFTYPE_AP)) {
-                               memcpy(&buf->data.ra, psEthHeader->abyDstAddr, ETH_ALEN);
+                               ether_addr_copy(buf->data.ra,
+                                               psEthHeader->abyDstAddr);
                        } else {
-                               memcpy(&buf->data.ra, pDevice->abyBSSID, ETH_ALEN);
+                               ether_addr_copy(buf->data.ra,
+                                               pDevice->abyBSSID);
                        }
 
                        if (pDevice->op_mode == NL80211_IFTYPE_AP)
-                               memcpy(&buf->data.ta, pDevice->abyBSSID, ETH_ALEN);
+                               ether_addr_copy(buf->data.ta,
+                                               pDevice->abyBSSID);
                        else
-                               memcpy(&buf->data.ta, psEthHeader->abySrcAddr, ETH_ALEN);
+                               ether_addr_copy(buf->data.ta,
+                                               psEthHeader->abySrcAddr);
 
                } // if (byFBOption == AUTO_FB_NONE)
        } else if (byPktType == PK_TYPE_11A) {
@@ -950,15 +958,19 @@ s_vFillRTSHead(
 
                        if ((pDevice->op_mode == NL80211_IFTYPE_ADHOC) ||
                            (pDevice->op_mode == NL80211_IFTYPE_AP)) {
-                               memcpy(&buf->data.ra, psEthHeader->abyDstAddr, ETH_ALEN);
+                               ether_addr_copy(buf->data.ra,
+                                               psEthHeader->abyDstAddr);
                        } else {
-                               memcpy(&buf->data.ra, pDevice->abyBSSID, ETH_ALEN);
+                               ether_addr_copy(buf->data.ra,
+                                               pDevice->abyBSSID);
                        }
 
                        if (pDevice->op_mode == NL80211_IFTYPE_AP)
-                               memcpy(&buf->data.ta, pDevice->abyBSSID, ETH_ALEN);
+                               ether_addr_copy(buf->data.ta,
+                                               pDevice->abyBSSID);
                        else
-                               memcpy(&buf->data.ta, psEthHeader->abySrcAddr, ETH_ALEN);
+                               ether_addr_copy(buf->data.ta,
+                                               psEthHeader->abySrcAddr);
 
                } else {
                        struct vnt_rts_a_fb *buf = pvRTS;
@@ -990,14 +1002,18 @@ s_vFillRTSHead(
 
                        if ((pDevice->op_mode == NL80211_IFTYPE_ADHOC) ||
                            (pDevice->op_mode == NL80211_IFTYPE_AP)) {
-                               memcpy(&buf->data.ra, psEthHeader->abyDstAddr, ETH_ALEN);
+                               ether_addr_copy(buf->data.ra,
+                                               psEthHeader->abyDstAddr);
                        } else {
-                               memcpy(&buf->data.ra, pDevice->abyBSSID, ETH_ALEN);
+                               ether_addr_copy(buf->data.ra,
+                                               pDevice->abyBSSID);
                        }
                        if (pDevice->op_mode == NL80211_IFTYPE_AP)
-                               memcpy(&buf->data.ta, pDevice->abyBSSID, ETH_ALEN);
+                               ether_addr_copy(buf->data.ta,
+                                               pDevice->abyBSSID);
                        else
-                               memcpy(&buf->data.ta, psEthHeader->abySrcAddr, ETH_ALEN);
+                               ether_addr_copy(buf->data.ta,
+                                               psEthHeader->abySrcAddr);
                }
        } else if (byPktType == PK_TYPE_11B) {
                struct vnt_rts_ab *buf = pvRTS;
@@ -1018,15 +1034,17 @@ s_vFillRTSHead(
 
                if ((pDevice->op_mode == NL80211_IFTYPE_ADHOC) ||
                    (pDevice->op_mode == NL80211_IFTYPE_AP)) {
-                       memcpy(&buf->data.ra, psEthHeader->abyDstAddr, ETH_ALEN);
+                       ether_addr_copy(buf->data.ra,
+                                       psEthHeader->abyDstAddr);
                } else {
-                       memcpy(&buf->data.ra, pDevice->abyBSSID, ETH_ALEN);
+                       ether_addr_copy(buf->data.ra, pDevice->abyBSSID);
                }
 
                if (pDevice->op_mode == NL80211_IFTYPE_AP)
-                       memcpy(&buf->data.ta, pDevice->abyBSSID, ETH_ALEN);
+                       ether_addr_copy(buf->data.ta, pDevice->abyBSSID);
                else
-                       memcpy(&buf->data.ta, psEthHeader->abySrcAddr, ETH_ALEN);
+                       ether_addr_copy(buf->data.ta,
+                                       psEthHeader->abySrcAddr);
        }
 }
 
@@ -1093,7 +1111,8 @@ s_vFillCTSHead(
 
                        buf->reserved2 = 0x0;
 
-                       memcpy(&buf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN);
+                       ether_addr_copy(buf->data.ra,
+                                       pDevice->abyCurrentNetAddr);
                } else { //if (byFBOption != AUTO_FB_NONE && uDMAIdx != TYPE_ATIMDMA && uDMAIdx != TYPE_BEACONDMA)
                        struct vnt_cts *buf = pvCTS;
                        /* Get SignalField, ServiceField & Length */
@@ -1116,7 +1135,8 @@ s_vFillCTSHead(
                                            IEEE80211_STYPE_CTS);
 
                        buf->reserved2 = 0x0;
-                       memcpy(&buf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN);
+                       ether_addr_copy(buf->data.ra,
+                                       pDevice->abyCurrentNetAddr);
                }
        }
 }
@@ -2105,19 +2125,28 @@ vGenerateMACHeader(
                pMACHeader->wFrameCtl = TYPE_802_11_DATA;
 
        if (pDevice->op_mode == NL80211_IFTYPE_AP) {
-               memcpy(&(pMACHeader->abyAddr1[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN);
-               memcpy(&(pMACHeader->abyAddr2[0]), &(pDevice->abyBSSID[0]), ETH_ALEN);
-               memcpy(&(pMACHeader->abyAddr3[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN);
+               ether_addr_copy(&(pMACHeader->abyAddr1[0]),
+                               &(psEthHeader->abyDstAddr[0]));
+               ether_addr_copy(&(pMACHeader->abyAddr2[0]),
+                               &(pDevice->abyBSSID[0]));
+               ether_addr_copy(&(pMACHeader->abyAddr3[0]),
+                               &(psEthHeader->abySrcAddr[0]));
                pMACHeader->wFrameCtl |= FC_FROMDS;
        } else {
                if (pDevice->op_mode == NL80211_IFTYPE_ADHOC) {
-                       memcpy(&(pMACHeader->abyAddr1[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN);
-                       memcpy(&(pMACHeader->abyAddr2[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN);
-                       memcpy(&(pMACHeader->abyAddr3[0]), &(pDevice->abyBSSID[0]), ETH_ALEN);
+                       ether_addr_copy(&(pMACHeader->abyAddr1[0]),
+                                       &(psEthHeader->abyDstAddr[0]));
+                       ether_addr_copy(&(pMACHeader->abyAddr2[0]),
+                                       &(psEthHeader->abySrcAddr[0]));
+                       ether_addr_copy(&(pMACHeader->abyAddr3[0]),
+                                       &(pDevice->abyBSSID[0]));
                } else {
-                       memcpy(&(pMACHeader->abyAddr3[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN);
-                       memcpy(&(pMACHeader->abyAddr2[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN);
-                       memcpy(&(pMACHeader->abyAddr1[0]), &(pDevice->abyBSSID[0]), ETH_ALEN);
+                       ether_addr_copy(&(pMACHeader->abyAddr3[0]),
+                                       &(psEthHeader->abyDstAddr[0]));
+                       ether_addr_copy(&(pMACHeader->abyAddr2[0]),
+                                       &(psEthHeader->abySrcAddr[0]));
+                       ether_addr_copy(&(pMACHeader->abyAddr1[0]),
+                                       &(pDevice->abyBSSID[0]));
                        pMACHeader->wFrameCtl |= FC_TODS;
                }
        }
@@ -2311,8 +2340,10 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, PSTxMgmtPacket pPacket)
 
        memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize));
 
-       memcpy(&(sEthHeader.abyDstAddr[0]), &(pPacket->p80211Header->sA3.abyAddr1[0]), ETH_ALEN);
-       memcpy(&(sEthHeader.abySrcAddr[0]), &(pPacket->p80211Header->sA3.abyAddr2[0]), ETH_ALEN);
+       ether_addr_copy(&(sEthHeader.abyDstAddr[0]),
+                       &(pPacket->p80211Header->sA3.abyAddr1[0]));
+       ether_addr_copy(&(sEthHeader.abySrcAddr[0]),
+                       &(pPacket->p80211Header->sA3.abyAddr2[0]));
        //=========================
        //    No Fragmentation
        //=========================
@@ -2804,8 +2835,10 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb,
        }
 
        memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize));
-       memcpy(&(sEthHeader.abyDstAddr[0]), &(p80211Header->sA3.abyAddr1[0]), ETH_ALEN);
-       memcpy(&(sEthHeader.abySrcAddr[0]), &(p80211Header->sA3.abyAddr2[0]), ETH_ALEN);
+       ether_addr_copy(&(sEthHeader.abyDstAddr[0]),
+                       &(p80211Header->sA3.abyAddr1[0]));
+       ether_addr_copy(&(sEthHeader.abySrcAddr[0]),
+                       &(p80211Header->sA3.abyAddr2[0]));
        //=========================
        //    No Fragmentation
        //=========================