staging: vt6655: replace memcpy() by ether_addr_copy() using coccinelle and pack variables

Author: Aya Mahfouz <mahfouz.saif.elyazal@gmail.com>

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 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/staging/vt6655/device.h |   8 +--
 drivers/staging/vt6655/rxtx.c   | 113 ++++++++++++++++++++++++++--------------
 2 files changed, 77 insertions(+), 44 deletions(-)
 
diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h
index ddd356a..ab6be41 100644
--- a/drivers/staging/vt6655/device.h
+++ b/drivers/staging/vt6655/device.h
@@ -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;
diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c
index 7a183f5..da7c0a8 100644
--- a/drivers/staging/vt6655/rxtx.c
+++ b/drivers/staging/vt6655/rxtx.c
@@ -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
 	//=========================
BtrLinux
Résumé de la politique de confidentialité

Ce site utilise des cookies afin que nous puissions vous fournir la meilleure expérience utilisateur possible. Les informations sur les cookies sont stockées dans votre navigateur et remplissent des fonctions telles que vous reconnaître lorsque vous revenez sur notre site Web et aider notre équipe à comprendre les sections du site que vous trouvez les plus intéressantes et utiles.