staging: vt6655: Replace macro VNSvInPortD with ioread32()
v4 cover staging: vt6655: Replace macro VNSvInPortD with ioread32()
Replace macro VNSvInPortD with ioread32.
Avoid cast of the return value as much as possible. The name of macro and the arguments use CamelCase which is not accepted by checkpatch.pl
Added missing big-endian support in CARDbGetCurrentTSF.
Tested with vt6655 on mini PCI Module Transferred this patch over wlan connection of vt6655
V1 -> V2: Removed patch "staging: vt6655: Replace VNSvInPortW with ioread16"
as it was already accepted.
Joint patch "Replace two VNSvInPortD with ioread64_lo_hi" with patch "Replace VNSvInPortD with ioread32" and changed ioread64 to two ioread32 as ioread64 does not work with 32 Bit computers. Shorted and simplified patch descriptions.
V2 -> V3: Added missing version in subject lines
Added change history in cover letter
Removed remark in cover letter "This patch series is new.." as it is obsolet.
V3 -> V4: Added patch: "Added missing BE support in CARDbGetCurrentTSF"
Removed testing example from cover letter and placed it to the patches.
Philipp Hortmann (2):
staging: vt6655: Replace VNSvInPortD with ioread32
staging: vt6655: Added missing BE support in CARDbGetCurrentTSF
drivers/staging/vt6655/card.c | 10 ++++++++-- drivers/staging/vt6655/device_main.c | 6 +++--- drivers/staging/vt6655/mac.h | 18 +++++++++--------- drivers/staging/vt6655/rf.c | 2 +- drivers/staging/vt6655/upc.h | 3 --- 5 files changed, 21 insertions(+), 18 deletions(-)
Signature · 1 line
2.25.1
PATCH v4 1/2 staging: vt6655: Replace VNSvInPortD with ioread32
Replace macro VNSvInPortD with ioread32 and as it was the only user, it can now be removed.
The name of macro and the arguments use CamelCase which is not accepted by checkpatch.pl
---
V1 -> V2: This patch was 5/7 and is now 4/6
V2 -> V3: Inserted patch that was before in a different way in
"Rename macros VNSvInPortB,W,D with CamelCase ..." This patch was part of 4/6 and is now 3/7
V3 -> V4: Removed casting of the output variable
V4 -> V5: Joint patch "Replace two VNSvInPortD with ioread64_lo_hi"
with this patch. Changed ioread64 to two ioread32 as ioread64 does not work with 32 Bit computers. Shorted and simplified patch description.
V5 -> V6: Added missing version in subject
V6 -> V7: Added below testing example
Code for testing:
u32 high, low; VNSvInPortD(iobase + MAC_REG_TSFCNTR, (u32 *)pqwCurrTSF); VNSvInPortD(iobase + MAC_REG_TSFCNTR + 4, (u32 *)pqwCurrTSF + 1); dev_info(&priv->pcid->dev, "CARDbGetCurrentTSF *pqwCurrTSF from VNSvInPortD: 0x%016llx", *pqwCurrTSF); low = ioread32(iobase + MAC_REG_TSFCNTR); high = ioread32(iobase + MAC_REG_TSFCNTR + 4); *pqwCurrTSF = low + ((u64)high << 32); dev_info(&priv->pcid->dev, "CARDbGetCurrentTSF *pqwCurrTSF from ioread32: 0x%016llx", *pqwCurrTSF);
Log from testing:
vt6655 0000:01:05.0: CARDbGetCurrentTSF *pqwCurrTSF from VNSvInPortD: 0x0000000d c025dd7c
vt6655 0000:01:05.0: CARDbGetCurrentTSF *pqwCurrTSF from ioread32: 0x0000000d c025dd7c
vt6655 0000:01:05.0: CARDbGetCurrentTSF *pqwCurrTSF from VNSvInPortD: 0x0000000d c025dd8a
vt6655 0000:01:05.0: CARDbGetCurrentTSF *pqwCurrTSF from ioread32: 0x0000000d c025dd8a
--- drivers/staging/vt6655/card.c | 6 ++++-- drivers/staging/vt6655/device_main.c | 6 +++--- drivers/staging/vt6655/mac.h | 18 +++++++++--------- drivers/staging/vt6655/rf.c | 2 +- drivers/staging/vt6655/upc.h | 3 --- 5 files changed, 17 insertions(+), 18 deletions(-)
drivers/staging/vt6655/card.c +4 -2
@@ -744,6 +744,7 @@ bool CARDbGetCurrentTSF(struct vnt_private *priv, u64 *pqwCurrTSF)void __iomem *iobase = priv->port_offset;unsigned short ww;unsigned char data; +u32 low, high;MACvRegBitsOn (iobase,MAC_REG_TFTCTL ,TFTCTL_TSFCNTRRD );for (ww =0 ; ww <W_MAX_TIMEOUT ; ww++) {
@@ -753,8 +754,9 @@ bool CARDbGetCurrentTSF(struct vnt_private *priv, u64 *pqwCurrTSF) }if (ww ==W_MAX_TIMEOUT )return false; -VNSvInPortD (iobase +MAC_REG_TSFCNTR , (u32 *)pqwCurrTSF); -VNSvInPortD (iobase +MAC_REG_TSFCNTR +4 , (u32 *)pqwCurrTSF +1 ); + low =ioread32 (iobase +MAC_REG_TSFCNTR ); + high =ioread32 (iobase +MAC_REG_TSFCNTR +4 ); + *pqwCurrTSF = low + ((u64 )high <<32 );return true; }
drivers/staging/vt6655/device_main.c +3 -3
@@ -1029,7 +1029,7 @@ static void vnt_interrupt_process(struct vnt_private *priv)u32 isr;unsigned long flags; -VNSvInPortD (priv->port_offset +MAC_REG_ISR , &isr); + isr =ioread32 (priv->port_offset +MAC_REG_ISR );if (isr ==0 )return ;
@@ -1042,7 +1042,7 @@ static void vnt_interrupt_process(struct vnt_private *priv)spin_lock_irqsave (&priv->lock, flags);/* Read low level stats */ -VNSvInPortD (priv->port_offset +MAC_REG_MIBCNTR , &mib_counter); + mib_counter =ioread32 (priv->port_offset +MAC_REG_MIBCNTR ); low_stats->dot11RTSSuccessCount += mib_counter &0xff ; low_stats->dot11RTSFailureCount += (mib_counter >>8 ) &0xff ;
@@ -1116,7 +1116,7 @@ static void vnt_interrupt_process(struct vnt_private *priv) ieee80211_queue_stopped(priv->hw, 0))ieee80211_wake_queues (priv->hw); -VNSvInPortD (priv->port_offset +MAC_REG_ISR , &isr); + isr =ioread32 (priv->port_offset +MAC_REG_ISR );MACvReceive0 (priv->port_offset);MACvReceive1 (priv->port_offset);
drivers/staging/vt6655/mac.h +9 -9
@@ -618,7 +618,7 @@ do { \#define MACvReceive0 (iobase) \ do { \ unsigned long dwData; \ - VNSvInPortD(iobase + MAC_REG_RXDMACTL0, &dwData); \ + dwData = ioread32(iobase + MAC_REG_RXDMACTL0); \ if (dwData & DMACTL_RUN) \ VNSvOutPortD(iobase + MAC_REG_RXDMACTL0, DMACTL_WAKE); \ else \
@@ -628,7 +628,7 @@ do { \#define MACvReceive1 (iobase) \ do { \ unsigned long dwData; \ - VNSvInPortD(iobase + MAC_REG_RXDMACTL1, &dwData); \ + dwData = ioread32(iobase + MAC_REG_RXDMACTL1); \ if (dwData & DMACTL_RUN) \ VNSvOutPortD(iobase + MAC_REG_RXDMACTL1, DMACTL_WAKE); \ else \
@@ -638,7 +638,7 @@ do { \#define MACvTransmit0 (iobase) \ do { \ unsigned long dwData; \ - VNSvInPortD(iobase + MAC_REG_TXDMACTL0, &dwData); \ + dwData = ioread32(iobase + MAC_REG_TXDMACTL0); \ if (dwData & DMACTL_RUN) \ VNSvOutPortD(iobase + MAC_REG_TXDMACTL0, DMACTL_WAKE); \ else \
@@ -648,7 +648,7 @@ do { \#define MACvTransmitAC0 (iobase) \ do { \ unsigned long dwData; \ - VNSvInPortD(iobase + MAC_REG_AC0DMACTL, &dwData); \ + dwData = ioread32(iobase + MAC_REG_AC0DMACTL); \ if (dwData & DMACTL_RUN) \ VNSvOutPortD(iobase + MAC_REG_AC0DMACTL, DMACTL_WAKE); \ else \
@@ -684,7 +684,7 @@ do { \#define MACvEnableProtectMD (iobase) \ do { \ unsigned long dwOrgValue; \ - VNSvInPortD(iobase + MAC_REG_ENCFG, &dwOrgValue); \ + dwOrgValue = ioread32(iobase + MAC_REG_ENCFG); \ dwOrgValue = dwOrgValue | ENCFG_PROTECTMD; \ VNSvOutPortD(iobase + MAC_REG_ENCFG, dwOrgValue); \ } while (0)
@@ -692,7 +692,7 @@ do { \#define MACvDisableProtectMD (iobase) \ do { \ unsigned long dwOrgValue; \ - VNSvInPortD(iobase + MAC_REG_ENCFG, &dwOrgValue); \ + dwOrgValue = ioread32(iobase + MAC_REG_ENCFG); \ dwOrgValue = dwOrgValue & ~ENCFG_PROTECTMD; \ VNSvOutPortD(iobase + MAC_REG_ENCFG, dwOrgValue); \ } while (0)
@@ -700,7 +700,7 @@ do { \#define MACvEnableBarkerPreambleMd (iobase) \ do { \ unsigned long dwOrgValue; \ - VNSvInPortD(iobase + MAC_REG_ENCFG, &dwOrgValue); \ + dwOrgValue = ioread32(iobase + MAC_REG_ENCFG); \ dwOrgValue = dwOrgValue | ENCFG_BARKERPREAM; \ VNSvOutPortD(iobase + MAC_REG_ENCFG, dwOrgValue); \ } while (0)
@@ -708,7 +708,7 @@ do { \#define MACvDisableBarkerPreambleMd (iobase) \ do { \ unsigned long dwOrgValue; \ - VNSvInPortD(iobase + MAC_REG_ENCFG, &dwOrgValue); \ + dwOrgValue = ioread32(iobase + MAC_REG_ENCFG); \ dwOrgValue = dwOrgValue & ~ENCFG_BARKERPREAM; \ VNSvOutPortD(iobase + MAC_REG_ENCFG, dwOrgValue); \ } while (0)
@@ -716,7 +716,7 @@ do { \#define MACvSetBBType (iobase, byTyp) \ do { \ unsigned long dwOrgValue; \ - VNSvInPortD(iobase + MAC_REG_ENCFG, &dwOrgValue); \ + dwOrgValue = ioread32(iobase + MAC_REG_ENCFG); \ dwOrgValue = dwOrgValue & ~ENCFG_BBTYPE_MASK; \ dwOrgValue = dwOrgValue | (unsigned long)byTyp; \ VNSvOutPortD(iobase + MAC_REG_ENCFG, dwOrgValue); \
drivers/staging/vt6655/rf.c +1 -1
@@ -175,7 +175,7 @@ bool IFRFbWriteEmbedded(struct vnt_private *priv, unsigned long dwData)/* W_MAX_TIMEOUT is the timeout period */ for (ww =0 ; ww <W_MAX_TIMEOUT ; ww++) { -VNSvInPortD (iobase +MAC_REG_IFREGCTL , &dwValue); + dwValue =ioread32 (iobase +MAC_REG_IFREGCTL );if (dwValue &IFREGCTL_DONE )break ; }
drivers/staging/vt6655/upc.h +0 -3
@@ -20,9 +20,6 @@/* For memory mapped IO */ -#define VNSvInPortD (dwIOAddress, pdwData) \ - (*(pdwData) = ioread32(dwIOAddress)) -#define VNSvOutPortB (dwIOAddress, byData) \ iowrite8((u8)(byData), dwIOAddress)
Signature · 1 line
2.25.1
PATCH v4 2/2 staging: vt6655: Added missing BE support in CARDbGetCurrentTSF
In reply to Philipp HortmannAdded missing big-endian support in CARDbGetCurrentTSF.
---
Using ioread32be to simulate output of the big endian computer.
Code for testing:
low = ioread32(iobase + MAC_REG_TSFCNTR); high = ioread32(iobase + MAC_REG_TSFCNTR + 4); *pqwCurrTSF = low + ((u64)high << 32); dev_info(&priv->pcid->dev, "CARDbGetCurrentTSF little endian: 0x%016llx", *pqwCurrTSF); low = ioread32be(iobase + MAC_REG_TSFCNTR); high = ioread32be(iobase + MAC_REG_TSFCNTR + 4); dev_info(&priv->pcid->dev, "CARDbGetCurrentTSF big-endian: 0x%016llx", high + ((u64)low << 32));
Log from testing:
vt6655 0000:01:05.0: CARDbGetCurrentTSF little endian: 0x00 00 00 0e 15 94 3d 7d
vt6655 0000:01:05.0: CARDbGetCurrentTSF big-endian: 0x7d 3d 94 15 0e 00 00 00
vt6655 0000:01:05.0: CARDbGetCurrentTSF little endian: 0x00 00 00 0e 15 94 3d 8b
vt6655 0000:01:05.0: CARDbGetCurrentTSF big-endian: 0x8b 3d 94 15 0e 00 00 00
Taking BE into account both methods generate the same output. 64 Bit numbers are supported.
Code for testing 2:
'#ifdef __BIG_ENDIAN
*pqwCurrTSF = high + ((u64)low << 32); '#else *pqwCurrTSF = low + ((u64)high << 32); '#endif dev_info(&priv->pcid->dev, "CARDbGetCurrentTSF *pqwCurrTSF from VNSvInPortD: 0x%016llx", *pqwCurrTSF);
Log from testing 2:
[ 3502.410835] vt6655 0000:01:05.0: CARDbGetCurrentTSF *pqwCurrTSF from VNSvInPortD: 0x00 00 00 0e 2a fb ed 86 --- drivers/staging/vt6655/card.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/staging/vt6655/card.c +4 -0
@@ -756,7 +756,11 @@ bool CARDbGetCurrentTSF(struct vnt_private *priv, u64 *pqwCurrTSF)return false; low =ioread32 (iobase +MAC_REG_TSFCNTR ); high =ioread32 (iobase +MAC_REG_TSFCNTR +4 ); +#ifdef __BIG_ENDIAN + *pqwCurrTSF = high + ((u64 )low <<32 ); +#else *pqwCurrTSF = low + ((u64 )high <<32 ); +#endif return true; }
Signature · 1 line
2.25.1