brcm80211: fmac: remove alignment check from brcmf_sdioh_request_buffer()
The check for alignment is not valid anymore and can be removed. The function is collapsed with brcmf_sdioh_request_packet() as a consequence because it did not add much functionality any longer. Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Reviewed-by: Alwin Beukers <alwin@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Franky Lin <frankyl@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
be667669ec
commit
8054321b7c
1 changed files with 18 additions and 82 deletions
|
@ -229,44 +229,6 @@ brcmf_sdioh_request_data(struct brcmf_sdio_dev *sdiodev, uint write, bool fifo,
|
||||||
return err_ret;
|
return err_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
brcmf_sdioh_request_packet(struct brcmf_sdio_dev *sdiodev, uint fix_inc,
|
|
||||||
uint write, uint func, uint addr,
|
|
||||||
struct sk_buff *pkt)
|
|
||||||
{
|
|
||||||
bool fifo = (fix_inc == SDIOH_DATA_FIX);
|
|
||||||
int err_ret = 0;
|
|
||||||
uint pkt_len = pkt->len;
|
|
||||||
|
|
||||||
brcmf_dbg(TRACE, "Enter\n");
|
|
||||||
|
|
||||||
brcmf_pm_resume_wait(sdiodev, &sdiodev->request_packet_wait);
|
|
||||||
if (brcmf_pm_resume_error(sdiodev))
|
|
||||||
return -EIO;
|
|
||||||
|
|
||||||
/* Claim host controller */
|
|
||||||
sdio_claim_host(sdiodev->func[func]);
|
|
||||||
|
|
||||||
pkt_len += 3;
|
|
||||||
pkt_len &= 0xFFFFFFFC;
|
|
||||||
|
|
||||||
err_ret = brcmf_sdioh_request_data(sdiodev, write, fifo, func,
|
|
||||||
addr, pkt, pkt_len);
|
|
||||||
if (err_ret) {
|
|
||||||
brcmf_dbg(ERROR, "%s FAILED %p, addr=0x%05x, pkt_len=%d, ERR=0x%08x\n",
|
|
||||||
write ? "TX" : "RX", pkt, addr, pkt_len, err_ret);
|
|
||||||
} else {
|
|
||||||
brcmf_dbg(TRACE, "%s xfr'd %p, addr=0x%05x, len=%d\n",
|
|
||||||
write ? "TX" : "RX", pkt, addr, pkt_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Release host controller */
|
|
||||||
sdio_release_host(sdiodev->func[func]);
|
|
||||||
|
|
||||||
brcmf_dbg(TRACE, "Exit\n");
|
|
||||||
return err_ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc,
|
brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc,
|
||||||
uint write, uint func, uint addr,
|
uint write, uint func, uint addr,
|
||||||
|
@ -317,26 +279,15 @@ brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function takes a buffer or packet, and fixes everything up
|
* This function takes a single DMA-able packet.
|
||||||
* so that in the end, a DMA-able packet is created.
|
|
||||||
*
|
|
||||||
* A buffer does not have an associated packet pointer,
|
|
||||||
* and may or may not be aligned.
|
|
||||||
* A packet may consist of a single packet, or a packet chain.
|
|
||||||
* If it is a packet chain, then all the packets in the chain
|
|
||||||
* must be properly aligned.
|
|
||||||
*
|
|
||||||
* If the packet data is not aligned, then there may only be
|
|
||||||
* one packet, and in this case, it is copied to a new
|
|
||||||
* aligned packet.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev,
|
int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev,
|
||||||
uint fix_inc, uint write, uint func, uint addr,
|
uint fix_inc, uint write, uint func, uint addr,
|
||||||
struct sk_buff *pkt)
|
struct sk_buff *pkt)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
struct sk_buff *mypkt = NULL;
|
uint pkt_len = pkt->len;
|
||||||
|
bool fifo = (fix_inc == SDIOH_DATA_FIX);
|
||||||
|
|
||||||
brcmf_dbg(TRACE, "Enter\n");
|
brcmf_dbg(TRACE, "Enter\n");
|
||||||
|
|
||||||
|
@ -347,39 +298,24 @@ int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev,
|
||||||
if (brcmf_pm_resume_error(sdiodev))
|
if (brcmf_pm_resume_error(sdiodev))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
if (((ulong) (pkt->data) & DMA_ALIGN_MASK) != 0) {
|
/* Claim host controller */
|
||||||
/*
|
sdio_claim_host(sdiodev->func[func]);
|
||||||
* Case 2: We have a packet, but it is unaligned.
|
|
||||||
* In this case, we cannot have a chain (pkt->next == NULL)
|
pkt_len += 3;
|
||||||
*/
|
pkt_len &= (uint)~3;
|
||||||
brcmf_dbg(DATA, "Creating aligned %s Packet, len=%d\n",
|
|
||||||
write ? "TX" : "RX", pkt->len);
|
status = brcmf_sdioh_request_data(sdiodev, write, fifo, func,
|
||||||
mypkt = brcmu_pkt_buf_get_skb(pkt->len);
|
addr, pkt, pkt_len);
|
||||||
if (!mypkt) {
|
if (status) {
|
||||||
brcmf_dbg(ERROR, "brcmu_pkt_buf_get_skb failed: len %d\n",
|
brcmf_dbg(ERROR, "%s FAILED %p, addr=0x%05x, pkt_len=%d, ERR=0x%08x\n",
|
||||||
pkt->len);
|
write ? "TX" : "RX", pkt, addr, pkt_len, status);
|
||||||
return -EIO;
|
} else {
|
||||||
|
brcmf_dbg(TRACE, "%s xfr'd %p, addr=0x%05x, len=%d\n",
|
||||||
|
write ? "TX" : "RX", pkt, addr, pkt_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For a write, copy the buffer data into the packet. */
|
/* Release host controller */
|
||||||
if (write)
|
sdio_release_host(sdiodev->func[func]);
|
||||||
memcpy(mypkt->data, pkt->data, pkt->len);
|
|
||||||
|
|
||||||
status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write,
|
|
||||||
func, addr, mypkt);
|
|
||||||
|
|
||||||
/* For a read, copy the packet data back to the buffer. */
|
|
||||||
if (!write)
|
|
||||||
memcpy(pkt->data, mypkt->data, mypkt->len);
|
|
||||||
|
|
||||||
brcmu_pkt_buf_free_skb(mypkt);
|
|
||||||
} else { /* case 3: We have a packet and
|
|
||||||
it is aligned. */
|
|
||||||
brcmf_dbg(DATA, "Aligned %s Packet, direct DMA\n",
|
|
||||||
write ? "Tx" : "Rx");
|
|
||||||
status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write,
|
|
||||||
func, addr, pkt);
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue