aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2011-11-22 20:21:40 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-11-28 14:43:29 -0500
commit4c6e869d2ee7ca489b7049c17c9afe7b68bebecc (patch)
treed09530f8460d42d8f15e86e9fce048f460bbda8c /drivers
parent5e8e13b94c7ace2ed8b2aed253211290b329eb5c (diff)
brcm80211: fmac: simplify the brcmf_sdioh_request_buffer() function
The function is only called with sk_buff parameter being non-zero so the prototype does not need to support passing a char buffer any longer. When the function is called with a NULL sk_buff parameter it returns -EINVAL now. Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com> 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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c31
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c37
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h2
3 files changed, 36 insertions, 34 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
index e8d1c9ebbf16..668eb36d9faa 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
@@ -288,7 +288,7 @@ brcmf_sdcard_recv_pkt(struct brcmf_sdio_dev *sdiodev, u32 addr, uint fn,
288 288
289 incr_fix = (flags & SDIO_REQ_FIXED) ? SDIOH_DATA_FIX : SDIOH_DATA_INC; 289 incr_fix = (flags & SDIO_REQ_FIXED) ? SDIOH_DATA_FIX : SDIOH_DATA_INC;
290 err = brcmf_sdioh_request_buffer(sdiodev, incr_fix, SDIOH_READ, 290 err = brcmf_sdioh_request_buffer(sdiodev, incr_fix, SDIOH_READ,
291 fn, addr, 0, NULL, pkt); 291 fn, addr, pkt);
292 292
293 return err; 293 return err;
294} 294}
@@ -369,18 +369,39 @@ brcmf_sdcard_send_pkt(struct brcmf_sdio_dev *sdiodev, u32 addr, uint fn,
369 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; 369 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
370 370
371 return brcmf_sdioh_request_buffer(sdiodev, incr_fix, SDIOH_WRITE, fn, 371 return brcmf_sdioh_request_buffer(sdiodev, incr_fix, SDIOH_WRITE, fn,
372 addr, 0, NULL, pkt); 372 addr, pkt);
373} 373}
374 374
375int brcmf_sdcard_rwdata(struct brcmf_sdio_dev *sdiodev, uint rw, u32 addr, 375int brcmf_sdcard_rwdata(struct brcmf_sdio_dev *sdiodev, uint rw, u32 addr,
376 u8 *buf, uint nbytes) 376 u8 *buf, uint nbytes)
377{ 377{
378 struct sk_buff *mypkt;
379 bool write = rw ? SDIOH_WRITE : SDIOH_READ;
380 int err;
381
378 addr &= SBSDIO_SB_OFT_ADDR_MASK; 382 addr &= SBSDIO_SB_OFT_ADDR_MASK;
379 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; 383 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
380 384
381 return brcmf_sdioh_request_buffer(sdiodev, SDIOH_DATA_INC, 385 mypkt = brcmu_pkt_buf_get_skb(nbytes);
382 (rw ? SDIOH_WRITE : SDIOH_READ), SDIO_FUNC_1, 386 if (!mypkt) {
383 addr, nbytes, buf, NULL); 387 brcmf_dbg(ERROR, "brcmu_pkt_buf_get_skb failed: len %d\n",
388 nbytes);
389 return -EIO;
390 }
391
392 /* For a write, copy the buffer data into the packet. */
393 if (write)
394 memcpy(mypkt->data, buf, nbytes);
395
396 err = brcmf_sdioh_request_buffer(sdiodev, SDIOH_DATA_INC, write,
397 SDIO_FUNC_1, addr, mypkt);
398
399 /* For a read, copy the packet data back to the buffer. */
400 if (!err && !write)
401 memcpy(buf, mypkt->data, nbytes);
402
403 brcmu_pkt_buf_free_skb(mypkt);
404 return err;
384} 405}
385 406
386int brcmf_sdcard_abort(struct brcmf_sdio_dev *sdiodev, uint fn) 407int brcmf_sdcard_abort(struct brcmf_sdio_dev *sdiodev, uint fn)
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c
index 271765cff4a6..2263d3cab2c3 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c
@@ -333,40 +333,21 @@ brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc,
333 */ 333 */
334int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev, 334int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev,
335 uint fix_inc, uint write, uint func, uint addr, 335 uint fix_inc, uint write, uint func, uint addr,
336 uint buflen_u, u8 *buffer, struct sk_buff *pkt) 336 struct sk_buff *pkt)
337{ 337{
338 int Status; 338 int status;
339 struct sk_buff *mypkt = NULL; 339 struct sk_buff *mypkt = NULL;
340 340
341 brcmf_dbg(TRACE, "Enter\n"); 341 brcmf_dbg(TRACE, "Enter\n");
342 342
343 if (pkt == NULL)
344 return -EINVAL;
345
343 brcmf_pm_resume_wait(sdiodev, &sdiodev->request_buffer_wait); 346 brcmf_pm_resume_wait(sdiodev, &sdiodev->request_buffer_wait);
344 if (brcmf_pm_resume_error(sdiodev)) 347 if (brcmf_pm_resume_error(sdiodev))
345 return -EIO; 348 return -EIO;
346 /* Case 1: we don't have a packet. */
347 if (pkt == NULL) {
348 brcmf_dbg(DATA, "Creating new %s Packet, len=%d\n",
349 write ? "TX" : "RX", buflen_u);
350 mypkt = brcmu_pkt_buf_get_skb(buflen_u);
351 if (!mypkt) {
352 brcmf_dbg(ERROR, "brcmu_pkt_buf_get_skb failed: len %d\n",
353 buflen_u);
354 return -EIO;
355 }
356 349
357 /* For a write, copy the buffer data into the packet. */ 350 if (((ulong) (pkt->data) & DMA_ALIGN_MASK) != 0) {
358 if (write)
359 memcpy(mypkt->data, buffer, buflen_u);
360
361 Status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write,
362 func, addr, mypkt);
363
364 /* For a read, copy the packet data back to the buffer. */
365 if (!write)
366 memcpy(buffer, mypkt->data, buflen_u);
367
368 brcmu_pkt_buf_free_skb(mypkt);
369 } else if (((ulong) (pkt->data) & DMA_ALIGN_MASK) != 0) {
370 /* 351 /*
371 * Case 2: We have a packet, but it is unaligned. 352 * Case 2: We have a packet, but it is unaligned.
372 * In this case, we cannot have a chain (pkt->next == NULL) 353 * In this case, we cannot have a chain (pkt->next == NULL)
@@ -384,7 +365,7 @@ int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev,
384 if (write) 365 if (write)
385 memcpy(mypkt->data, pkt->data, pkt->len); 366 memcpy(mypkt->data, pkt->data, pkt->len);
386 367
387 Status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write, 368 status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write,
388 func, addr, mypkt); 369 func, addr, mypkt);
389 370
390 /* For a read, copy the packet data back to the buffer. */ 371 /* For a read, copy the packet data back to the buffer. */
@@ -396,11 +377,11 @@ int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev,
396 it is aligned. */ 377 it is aligned. */
397 brcmf_dbg(DATA, "Aligned %s Packet, direct DMA\n", 378 brcmf_dbg(DATA, "Aligned %s Packet, direct DMA\n",
398 write ? "Tx" : "Rx"); 379 write ? "Tx" : "Rx");
399 Status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write, 380 status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write,
400 func, addr, pkt); 381 func, addr, pkt);
401 } 382 }
402 383
403 return Status; 384 return status;
404} 385}
405 386
406/* Read client card reg */ 387/* Read client card reg */
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h b/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h
index 74beffc889c1..1e4a0bb260b6 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h
@@ -248,7 +248,7 @@ brcmf_sdioh_request_word(struct brcmf_sdio_dev *sdiodev,
248extern int 248extern int
249brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev, 249brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev,
250 uint fix_inc, uint rw, uint fnc_num, u32 addr, 250 uint fix_inc, uint rw, uint fnc_num, u32 addr,
251 u32 buflen, u8 *buffer, struct sk_buff *pkt); 251 struct sk_buff *pkt);
252extern int 252extern int
253brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc, 253brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc,
254 uint write, uint func, uint addr, 254 uint write, uint func, uint addr,