mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-03-05 19:18:06 +00:00
staging: brcm80211: macro cleanup in softmac dma
Substituted macro's by functions. Renamed several struct members in dma.c to get rid of a set of macro's. Reported-by: Johannes Berg <johannes@sipsolutions.net> Reviewed-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Roland Vossen <rvossen@broadcom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
7d16c0ffff
commit
11de5b72ca
@ -155,9 +155,6 @@
|
||||
#define D64_RX_FRM_STS_DSCRCNT 0x0f000000 /* no. of descriptors used - 1 */
|
||||
#define D64_RX_FRM_STS_DATATYPE 0xf0000000 /* core-dependent data type */
|
||||
|
||||
#define DMA64_DD_PARITY(dd) \
|
||||
parity32((dd)->addrlow ^ (dd)->addrhigh ^ (dd)->ctrl1 ^ (dd)->ctrl2)
|
||||
|
||||
/*
|
||||
* packet headroom necessary to accommodate the largest header
|
||||
* in the system, (i.e TXOFF). By doing, we avoid the need to
|
||||
@ -192,27 +189,8 @@
|
||||
|
||||
#define DMA_NONE(args)
|
||||
|
||||
#define d64txregs dregs.d64_u.txregs_64
|
||||
#define d64rxregs dregs.d64_u.rxregs_64
|
||||
#define txd64 dregs.d64_u.txd_64
|
||||
#define rxd64 dregs.d64_u.rxd_64
|
||||
|
||||
#define MAXNAMEL 8 /* 8 char names */
|
||||
|
||||
/* descriptor bumping macros */
|
||||
/* faster than %, but n must be power of 2 */
|
||||
#define XXD(x, n) ((x) & ((n) - 1))
|
||||
|
||||
#define TXD(x) XXD((x), di->ntxd)
|
||||
#define RXD(x) XXD((x), di->nrxd)
|
||||
#define NEXTTXD(i) TXD((i) + 1)
|
||||
#define PREVTXD(i) TXD((i) - 1)
|
||||
#define NEXTRXD(i) RXD((i) + 1)
|
||||
#define PREVRXD(i) RXD((i) - 1)
|
||||
|
||||
#define NTXDACTIVE(h, t) TXD((t) - (h))
|
||||
#define NRXDACTIVE(h, t) RXD((t) - (h))
|
||||
|
||||
/* macros to convert between byte offsets and indexes */
|
||||
#define B2I(bytes, type) ((bytes) / sizeof(type))
|
||||
#define I2B(index, type) ((index) * sizeof(type))
|
||||
@ -245,18 +223,14 @@ struct dma_info {
|
||||
bool dma64; /* this dma engine is operating in 64-bit mode */
|
||||
bool addrext; /* this dma engine supports DmaExtendedAddrChanges */
|
||||
|
||||
union {
|
||||
struct {
|
||||
/* 64-bit dma tx engine registers */
|
||||
struct dma64regs *txregs_64;
|
||||
/* 64-bit dma rx engine registers */
|
||||
struct dma64regs *rxregs_64;
|
||||
/* pointer to dma64 tx descriptor ring */
|
||||
struct dma64desc *txd_64;
|
||||
/* pointer to dma64 rx descriptor ring */
|
||||
struct dma64desc *rxd_64;
|
||||
} d64_u;
|
||||
} dregs;
|
||||
/* 64-bit dma tx engine registers */
|
||||
struct dma64regs *d64txregs;
|
||||
/* 64-bit dma rx engine registers */
|
||||
struct dma64regs *d64rxregs;
|
||||
/* pointer to dma64 tx descriptor ring */
|
||||
struct dma64desc *txd64;
|
||||
/* pointer to dma64 rx descriptor ring */
|
||||
struct dma64desc *rxd64;
|
||||
|
||||
u16 dmadesc_align; /* alignment requirement for dma descriptors */
|
||||
|
||||
@ -320,6 +294,65 @@ struct dma_info {
|
||||
*/
|
||||
static uint dma_msg_level;
|
||||
|
||||
/* Check for odd number of 1's */
|
||||
static u32 parity32(u32 data)
|
||||
{
|
||||
data ^= data >> 16;
|
||||
data ^= data >> 8;
|
||||
data ^= data >> 4;
|
||||
data ^= data >> 2;
|
||||
data ^= data >> 1;
|
||||
|
||||
return data & 1;
|
||||
}
|
||||
|
||||
static bool dma64_dd_parity(struct dma64desc *dd)
|
||||
{
|
||||
return parity32(dd->addrlow ^ dd->addrhigh ^ dd->ctrl1 ^ dd->ctrl2);
|
||||
}
|
||||
|
||||
/* descriptor bumping functions */
|
||||
|
||||
static uint xxd(uint x, uint n)
|
||||
{
|
||||
return x & (n - 1); /* faster than %, but n must be power of 2 */
|
||||
}
|
||||
|
||||
static uint txd(struct dma_info *di, uint x)
|
||||
{
|
||||
return xxd(x, di->ntxd);
|
||||
}
|
||||
|
||||
static uint rxd(struct dma_info *di, uint x)
|
||||
{
|
||||
return xxd(x, di->nrxd);
|
||||
}
|
||||
|
||||
static uint nexttxd(struct dma_info *di, uint i)
|
||||
{
|
||||
return txd(di, i + 1);
|
||||
}
|
||||
|
||||
static uint prevtxd(struct dma_info *di, uint i)
|
||||
{
|
||||
return txd(di, i - 1);
|
||||
}
|
||||
|
||||
static uint nextrxd(struct dma_info *di, uint i)
|
||||
{
|
||||
return txd(di, i + 1);
|
||||
}
|
||||
|
||||
static uint ntxdactive(struct dma_info *di, uint h, uint t)
|
||||
{
|
||||
return txd(di, t-h);
|
||||
}
|
||||
|
||||
static uint nrxdactive(struct dma_info *di, uint h, uint t)
|
||||
{
|
||||
return rxd(di, t-h);
|
||||
}
|
||||
|
||||
static uint _dma_ctrlflags(struct dma_info *di, uint mask, uint flags)
|
||||
{
|
||||
uint dmactrlflags = di->dma.dmactrlflags;
|
||||
@ -675,18 +708,6 @@ struct dma_pub *dma_attach(char *name, struct si_pub *sih,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Check for odd number of 1's */
|
||||
static inline u32 parity32(u32 data)
|
||||
{
|
||||
data ^= data >> 16;
|
||||
data ^= data >> 8;
|
||||
data ^= data >> 4;
|
||||
data ^= data >> 2;
|
||||
data ^= data >> 1;
|
||||
|
||||
return data & 1;
|
||||
}
|
||||
|
||||
static inline void
|
||||
dma64_dd_upd(struct dma_info *di, struct dma64desc *ddring,
|
||||
dma_addr_t pa, uint outidx, u32 *flags, u32 bufcount)
|
||||
@ -713,7 +734,7 @@ dma64_dd_upd(struct dma_info *di, struct dma64desc *ddring,
|
||||
ddring[outidx].ctrl2 = cpu_to_le32(ctrl2);
|
||||
}
|
||||
if (di->dma.dmactrlflags & DMA_CTRL_PEN) {
|
||||
if (DMA64_DD_PARITY(&ddring[outidx]))
|
||||
if (dma64_dd_parity(&ddring[outidx]))
|
||||
ddring[outidx].ctrl2 =
|
||||
cpu_to_le32(ctrl2 | D64_CTRL2_PARITY);
|
||||
}
|
||||
@ -866,7 +887,7 @@ static struct sk_buff *dma64_getnextrxp(struct dma_info *di, bool forceall)
|
||||
di->rxd64[i].addrlow = 0xdeadbeef;
|
||||
di->rxd64[i].addrhigh = 0xdeadbeef;
|
||||
|
||||
di->rxin = NEXTRXD(i);
|
||||
di->rxin = nextrxd(di, i);
|
||||
|
||||
return rxp;
|
||||
}
|
||||
@ -988,7 +1009,7 @@ bool dma_rxfill(struct dma_pub *pub)
|
||||
rxin = di->rxin;
|
||||
rxout = di->rxout;
|
||||
|
||||
n = di->nrxpost - NRXDACTIVE(rxin, rxout);
|
||||
n = di->nrxpost - nrxdactive(di, rxin, rxout);
|
||||
|
||||
DMA_TRACE(("%s: dma_rxfill: post %d\n", di->name, n));
|
||||
|
||||
@ -1035,7 +1056,7 @@ bool dma_rxfill(struct dma_pub *pub)
|
||||
|
||||
dma64_dd_upd(di, di->rxd64, pa, rxout, &flags,
|
||||
di->rxbufsize);
|
||||
rxout = NEXTRXD(rxout);
|
||||
rxout = nextrxd(di, rxout);
|
||||
}
|
||||
|
||||
di->rxout = rxout;
|
||||
@ -1237,7 +1258,7 @@ int dma_txfast(struct dma_pub *pub, struct sk_buff *p0, bool commit)
|
||||
next = p->next;
|
||||
|
||||
/* return nonzero if out of tx descriptors */
|
||||
if (NEXTTXD(txout) == di->txin)
|
||||
if (nexttxd(di, txout) == di->txin)
|
||||
goto outoftxd;
|
||||
|
||||
if (len == 0)
|
||||
@ -1262,16 +1283,16 @@ int dma_txfast(struct dma_pub *pub, struct sk_buff *p0, bool commit)
|
||||
|
||||
dma64_dd_upd(di, di->txd64, pa, txout, &flags, len);
|
||||
|
||||
txout = NEXTTXD(txout);
|
||||
txout = nexttxd(di, txout);
|
||||
}
|
||||
|
||||
/* if last txd eof not set, fix it */
|
||||
if (!(flags & D64_CTRL1_EOF))
|
||||
di->txd64[PREVTXD(txout)].ctrl1 =
|
||||
di->txd64[prevtxd(di, txout)].ctrl1 =
|
||||
cpu_to_le32(flags | D64_CTRL1_IOC | D64_CTRL1_EOF);
|
||||
|
||||
/* save the packet */
|
||||
di->txp[PREVTXD(txout)] = p0;
|
||||
di->txp[prevtxd(di, txout)] = p0;
|
||||
|
||||
/* bump the tx descriptor index */
|
||||
di->txout = txout;
|
||||
@ -1282,7 +1303,7 @@ int dma_txfast(struct dma_pub *pub, struct sk_buff *p0, bool commit)
|
||||
di->xmtptrbase + I2B(txout, struct dma64desc));
|
||||
|
||||
/* tx flow control */
|
||||
di->dma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
|
||||
di->dma.txavail = di->ntxd - ntxdactive(di, di->txin, di->txout) - 1;
|
||||
|
||||
return 0;
|
||||
|
||||
@ -1341,14 +1362,14 @@ struct sk_buff *dma_getnexttxp(struct dma_pub *pub, enum txd_range range)
|
||||
(active_desc - di->xmtptrbase) & D64_XS0_CD_MASK;
|
||||
active_desc = B2I(active_desc, struct dma64desc);
|
||||
if (end != active_desc)
|
||||
end = PREVTXD(active_desc);
|
||||
end = prevtxd(di, active_desc);
|
||||
}
|
||||
}
|
||||
|
||||
if ((start == 0) && (end > di->txout))
|
||||
goto bogus;
|
||||
|
||||
for (i = start; i != end && !txp; i = NEXTTXD(i)) {
|
||||
for (i = start; i != end && !txp; i = nexttxd(di, i)) {
|
||||
dma_addr_t pa;
|
||||
uint size;
|
||||
|
||||
@ -1370,7 +1391,7 @@ struct sk_buff *dma_getnexttxp(struct dma_pub *pub, enum txd_range range)
|
||||
di->txin = i;
|
||||
|
||||
/* tx flow control */
|
||||
di->dma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
|
||||
di->dma.txavail = di->ntxd - ntxdactive(di, di->txin, di->txout) - 1;
|
||||
|
||||
return txp;
|
||||
|
||||
@ -1401,6 +1422,6 @@ void dma_walk_packets(struct dma_pub *dmah, void (*callback_fnc)
|
||||
tx_info = (struct ieee80211_tx_info *)skb->cb;
|
||||
(callback_fnc)(tx_info, arg_a);
|
||||
}
|
||||
i = NEXTTXD(i);
|
||||
i = nexttxd(di, i);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user