diff options
author | Arend van Spriel <arend@broadcom.com> | 2011-11-22 20:21:40 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-11-28 14:43:29 -0500 |
commit | 4c6e869d2ee7ca489b7049c17c9afe7b68bebecc (patch) | |
tree | d09530f8460d42d8f15e86e9fce048f460bbda8c /drivers | |
parent | 5e8e13b94c7ace2ed8b2aed253211290b329eb5c (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.c | 31 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 37 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h | 2 |
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 | ||
375 | int brcmf_sdcard_rwdata(struct brcmf_sdio_dev *sdiodev, uint rw, u32 addr, | 375 | int 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 | ||
386 | int brcmf_sdcard_abort(struct brcmf_sdio_dev *sdiodev, uint fn) | 407 | int 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 | */ |
334 | int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev, | 334 | int 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, | |||
248 | extern int | 248 | extern int |
249 | brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev, | 249 | brcmf_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); |
252 | extern int | 252 | extern int |
253 | brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc, | 253 | brcmf_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, |