diff options
author | Arend van Spriel <arend@broadcom.com> | 2011-11-22 20:21:44 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-11-28 14:43:33 -0500 |
commit | 8054321b7cb8c685f21762268b20dc590dab2a8d (patch) | |
tree | 35ea29f27d613146d2ec86c1a537cc0bec40372e /drivers/net/wireless/brcm80211/brcmfmac | |
parent | be667669ec01d514b3820f8c74d9336115be6aa7 (diff) |
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>
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 100 |
1 files changed, 18 insertions, 82 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c index 2263d3cab2c3..ccb32c01d527 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | |||
@@ -229,44 +229,6 @@ brcmf_sdioh_request_data(struct brcmf_sdio_dev *sdiodev, uint write, bool fifo, | |||
229 | return err_ret; | 229 | return err_ret; |
230 | } | 230 | } |
231 | 231 | ||
232 | static int | ||
233 | brcmf_sdioh_request_packet(struct brcmf_sdio_dev *sdiodev, uint fix_inc, | ||
234 | uint write, uint func, uint addr, | ||
235 | struct sk_buff *pkt) | ||
236 | { | ||
237 | bool fifo = (fix_inc == SDIOH_DATA_FIX); | ||
238 | int err_ret = 0; | ||
239 | uint pkt_len = pkt->len; | ||
240 | |||
241 | brcmf_dbg(TRACE, "Enter\n"); | ||
242 | |||
243 | brcmf_pm_resume_wait(sdiodev, &sdiodev->request_packet_wait); | ||
244 | if (brcmf_pm_resume_error(sdiodev)) | ||
245 | return -EIO; | ||
246 | |||
247 | /* Claim host controller */ | ||
248 | sdio_claim_host(sdiodev->func[func]); | ||
249 | |||
250 | pkt_len += 3; | ||
251 | pkt_len &= 0xFFFFFFFC; | ||
252 | |||
253 | err_ret = brcmf_sdioh_request_data(sdiodev, write, fifo, func, | ||
254 | addr, pkt, pkt_len); | ||
255 | if (err_ret) { | ||
256 | brcmf_dbg(ERROR, "%s FAILED %p, addr=0x%05x, pkt_len=%d, ERR=0x%08x\n", | ||
257 | write ? "TX" : "RX", pkt, addr, pkt_len, err_ret); | ||
258 | } else { | ||
259 | brcmf_dbg(TRACE, "%s xfr'd %p, addr=0x%05x, len=%d\n", | ||
260 | write ? "TX" : "RX", pkt, addr, pkt_len); | ||
261 | } | ||
262 | |||
263 | /* Release host controller */ | ||
264 | sdio_release_host(sdiodev->func[func]); | ||
265 | |||
266 | brcmf_dbg(TRACE, "Exit\n"); | ||
267 | return err_ret; | ||
268 | } | ||
269 | |||
270 | int | 232 | int |
271 | brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc, | 233 | brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc, |
272 | uint write, uint func, uint addr, | 234 | uint write, uint func, uint addr, |
@@ -317,26 +279,15 @@ brcmf_sdioh_request_chain(struct brcmf_sdio_dev *sdiodev, uint fix_inc, | |||
317 | } | 279 | } |
318 | 280 | ||
319 | /* | 281 | /* |
320 | * This function takes a buffer or packet, and fixes everything up | 282 | * This function takes a single DMA-able packet. |
321 | * so that in the end, a DMA-able packet is created. | ||
322 | * | ||
323 | * A buffer does not have an associated packet pointer, | ||
324 | * and may or may not be aligned. | ||
325 | * A packet may consist of a single packet, or a packet chain. | ||
326 | * If it is a packet chain, then all the packets in the chain | ||
327 | * must be properly aligned. | ||
328 | * | ||
329 | * If the packet data is not aligned, then there may only be | ||
330 | * one packet, and in this case, it is copied to a new | ||
331 | * aligned packet. | ||
332 | * | ||
333 | */ | 283 | */ |
334 | int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev, | 284 | int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev, |
335 | uint fix_inc, uint write, uint func, uint addr, | 285 | uint fix_inc, uint write, uint func, uint addr, |
336 | struct sk_buff *pkt) | 286 | struct sk_buff *pkt) |
337 | { | 287 | { |
338 | int status; | 288 | int status; |
339 | struct sk_buff *mypkt = NULL; | 289 | uint pkt_len = pkt->len; |
290 | bool fifo = (fix_inc == SDIOH_DATA_FIX); | ||
340 | 291 | ||
341 | brcmf_dbg(TRACE, "Enter\n"); | 292 | brcmf_dbg(TRACE, "Enter\n"); |
342 | 293 | ||
@@ -347,40 +298,25 @@ int brcmf_sdioh_request_buffer(struct brcmf_sdio_dev *sdiodev, | |||
347 | if (brcmf_pm_resume_error(sdiodev)) | 298 | if (brcmf_pm_resume_error(sdiodev)) |
348 | return -EIO; | 299 | return -EIO; |
349 | 300 | ||
350 | if (((ulong) (pkt->data) & DMA_ALIGN_MASK) != 0) { | 301 | /* Claim host controller */ |
351 | /* | 302 | sdio_claim_host(sdiodev->func[func]); |
352 | * Case 2: We have a packet, but it is unaligned. | ||
353 | * In this case, we cannot have a chain (pkt->next == NULL) | ||
354 | */ | ||
355 | brcmf_dbg(DATA, "Creating aligned %s Packet, len=%d\n", | ||
356 | write ? "TX" : "RX", pkt->len); | ||
357 | mypkt = brcmu_pkt_buf_get_skb(pkt->len); | ||
358 | if (!mypkt) { | ||
359 | brcmf_dbg(ERROR, "brcmu_pkt_buf_get_skb failed: len %d\n", | ||
360 | pkt->len); | ||
361 | return -EIO; | ||
362 | } | ||
363 | |||
364 | /* For a write, copy the buffer data into the packet. */ | ||
365 | if (write) | ||
366 | memcpy(mypkt->data, pkt->data, pkt->len); | ||
367 | |||
368 | status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write, | ||
369 | func, addr, mypkt); | ||
370 | 303 | ||
371 | /* For a read, copy the packet data back to the buffer. */ | 304 | pkt_len += 3; |
372 | if (!write) | 305 | pkt_len &= (uint)~3; |
373 | memcpy(pkt->data, mypkt->data, mypkt->len); | ||
374 | 306 | ||
375 | brcmu_pkt_buf_free_skb(mypkt); | 307 | status = brcmf_sdioh_request_data(sdiodev, write, fifo, func, |
376 | } else { /* case 3: We have a packet and | 308 | addr, pkt, pkt_len); |
377 | it is aligned. */ | 309 | if (status) { |
378 | brcmf_dbg(DATA, "Aligned %s Packet, direct DMA\n", | 310 | brcmf_dbg(ERROR, "%s FAILED %p, addr=0x%05x, pkt_len=%d, ERR=0x%08x\n", |
379 | write ? "Tx" : "Rx"); | 311 | write ? "TX" : "RX", pkt, addr, pkt_len, status); |
380 | status = brcmf_sdioh_request_packet(sdiodev, fix_inc, write, | 312 | } else { |
381 | func, addr, pkt); | 313 | brcmf_dbg(TRACE, "%s xfr'd %p, addr=0x%05x, len=%d\n", |
314 | write ? "TX" : "RX", pkt, addr, pkt_len); | ||
382 | } | 315 | } |
383 | 316 | ||
317 | /* Release host controller */ | ||
318 | sdio_release_host(sdiodev->func[func]); | ||
319 | |||
384 | return status; | 320 | return status; |
385 | } | 321 | } |
386 | 322 | ||