bumped up to -pre2.
locking rework of hfa384x.c is now in! Things should be MUCH better.origin
parent
d4e482e2d2
commit
dd17617d6c
3
CHANGES
3
CHANGES
|
@ -41,6 +41,9 @@
|
|||
* Intersil Corporation as part of PRISM(R) chipset product development.
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
-pre2
|
||||
- Restructured the driver locking. SMP should be MUCH better now.
|
||||
- Stripped out more dead code. (mainly FID_STACK)
|
||||
- Fix an skb access after we call netif_rx
|
||||
- Fixes for XScale CPUs.
|
||||
- Added added a MiniUSB ident info
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
WLAN_VERSION=0
|
||||
WLAN_PATCHLEVEL=1
|
||||
WLAN_SUBLEVEL=15
|
||||
WLAN_EXTRAVERSION=-pre1
|
||||
WLAN_EXTRAVERSION=-pre2
|
||||
LINUX_SRC=/usr/src/linux
|
||||
WLAN_TARGET_ARCH=
|
||||
PCMCIA_SRC=
|
||||
|
|
|
@ -1696,6 +1696,8 @@ int hfa384x_cmd_notify(hfa384x_t *hw, UINT16 reclaim, UINT16 fid,
|
|||
cmd.parm1 = 0;
|
||||
cmd.parm2 = 0;
|
||||
|
||||
spin_lock(&hw->cmdlock);
|
||||
|
||||
/* Copy the record to FID */
|
||||
result = hfa384x_copy_to_bap(hw, HFA384x_BAP_PROC, hw->infofid, 0, buf, len);
|
||||
if ( result ) {
|
||||
|
@ -1709,6 +1711,8 @@ int hfa384x_cmd_notify(hfa384x_t *hw, UINT16 reclaim, UINT16 fid,
|
|||
result = hfa384x_docmd_wait(hw, &cmd);
|
||||
|
||||
failed:
|
||||
spin_unlock(&hw->cmdlock);
|
||||
|
||||
DBFEXIT;
|
||||
return result;
|
||||
}
|
||||
|
@ -1791,6 +1795,8 @@ int hfa384x_cmd_access(hfa384x_t *hw, UINT16 write, UINT16 rid,
|
|||
|
||||
DBFENTER;
|
||||
|
||||
spin_lock(&hw->cmdlock);
|
||||
|
||||
if (write) {
|
||||
rec.rid = host2hfa384x_16(rid);
|
||||
rec.reclen = host2hfa384x_16((len/2) + 1); /* note conversion to words, +1 for rid field */
|
||||
|
@ -1838,6 +1844,7 @@ int hfa384x_cmd_access(hfa384x_t *hw, UINT16 write, UINT16 rid,
|
|||
}
|
||||
|
||||
fail:
|
||||
spin_unlock(&hw->cmdlock);
|
||||
DBFEXIT;
|
||||
return result;
|
||||
}
|
||||
|
@ -2301,6 +2308,10 @@ int hfa384x_copy_from_bap(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
if ( i > 0 ) udelay(2);
|
||||
i++;
|
||||
} while ( i < BAP_TIMEOUT && HFA384x_OFFSET_ISBUSY(reg));
|
||||
|
||||
/* Release lock */
|
||||
spin_unlock_irqrestore( &(hw->baplock), flags);
|
||||
|
||||
if ( HFA384x_OFFSET_ISBUSY(reg) ){
|
||||
/* If timeout, return -ETIMEDOUT */
|
||||
result = reg;
|
||||
|
@ -2319,8 +2330,6 @@ int hfa384x_copy_from_bap(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
d[len-1] = ((UINT8*)(®))[0];
|
||||
}
|
||||
}
|
||||
/* Release lock */
|
||||
spin_unlock_irqrestore( &(hw->baplock), flags);
|
||||
}
|
||||
if (result) {
|
||||
WLAN_LOG_DEBUG3(1,
|
||||
|
@ -2408,6 +2417,10 @@ int hfa384x_copy_to_bap4(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
if ( i > 0 ) udelay(2);
|
||||
i++;
|
||||
} while ( i < BAP_TIMEOUT && HFA384x_OFFSET_ISBUSY(reg));
|
||||
|
||||
/* Release lock */
|
||||
spin_unlock_irqrestore( &(hw->baplock), flags);
|
||||
|
||||
if ( HFA384x_OFFSET_ISBUSY(reg) ){
|
||||
/* If timeout, return reg */
|
||||
result = reg;
|
||||
|
@ -2490,8 +2503,7 @@ int hfa384x_copy_to_bap4(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
// printk(KERN_DEBUG "ctb2 %d id %04x o %d %d %d %d %d\n", bap, id, offset, len1, len2, len3, len4);
|
||||
|
||||
}
|
||||
/* Release lock */
|
||||
spin_unlock_irqrestore( &(hw->baplock), flags);
|
||||
|
||||
}
|
||||
|
||||
if (result)
|
||||
|
@ -2667,16 +2679,17 @@ hfa384x_copy_to_aux(
|
|||
int hfa384x_docmd_wait( hfa384x_t *hw, hfa384x_metacmd_t *cmd)
|
||||
{
|
||||
int result = -ETIMEDOUT;
|
||||
|
||||
wlan_flags_t flags;
|
||||
|
||||
int uselock = 0;
|
||||
UINT16 reg = 0;
|
||||
UINT16 counter;
|
||||
|
||||
DBFENTER;
|
||||
|
||||
/* acquire the lock */
|
||||
spin_lock_irqsave(&(hw->cmdlock), flags);
|
||||
/* acquire the lock iff we're not already locked. */
|
||||
if (!spin_is_locked(&hw->cmdlock)) {
|
||||
uselock = 1;
|
||||
spin_lock(&hw->cmdlock);
|
||||
}
|
||||
|
||||
hw->cmdflag = 0;
|
||||
hw->cmddata = cmd;
|
||||
|
@ -2748,7 +2761,10 @@ int hfa384x_docmd_wait( hfa384x_t *hw, hfa384x_metacmd_t *cmd)
|
|||
failed:
|
||||
hw->cmdflag = 0;
|
||||
hw->cmddata = NULL;
|
||||
spin_unlock_irqrestore( &(hw->cmdlock), flags);
|
||||
|
||||
/* unlock iff we locked when we entered */
|
||||
if (uselock)
|
||||
spin_unlock(&hw->cmdlock);
|
||||
|
||||
DBFEXIT;
|
||||
return result;
|
||||
|
@ -3248,6 +3264,9 @@ int hfa384x_drvr_txframe(hfa384x_t *hw, struct sk_buff *skb, p80211_hdr_t *p8021
|
|||
return 4;
|
||||
}
|
||||
|
||||
/* now let's get the cmdlock */
|
||||
spin_lock(&hw->cmdlock);
|
||||
|
||||
/* Copy descriptor+payload to FID */
|
||||
if (p80211_wep->enabled) {
|
||||
result = hfa384x_copy_to_bap4(hw, HFA384x_BAP_PROC, fid, 0,
|
||||
|
@ -3292,6 +3311,8 @@ int hfa384x_drvr_txframe(hfa384x_t *hw, struct sk_buff *skb, p80211_hdr_t *p8021
|
|||
/* indicate we haven't any buffers, int_alloc will clear */
|
||||
result = txfid_queue_empty(hw);
|
||||
failed:
|
||||
|
||||
spin_unlock(&hw->cmdlock);
|
||||
DBFEXIT;
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue