diff options
| author | Pierre Ossman <drzeus@drzeus.cx> | 2007-01-31 12:20:48 -0500 |
|---|---|---|
| committer | Pierre Ossman <drzeus@drzeus.cx> | 2007-02-04 14:54:11 -0500 |
| commit | 4a0ddbd25ad4e03a0a1657f5cb2259c9a35fe9e6 (patch) | |
| tree | b57497b24a1c5879605dcd15548fa8c395958666 | |
| parent | df1c4b7bf7f3b3a48d78c6e5c2fc5b9a1c01b821 (diff) | |
mmc: wbsd: replace kmap with page_address
Since we actively avoid highmem, calling kmap_atomic() instead
of page_address() is effectively only obfuscation.
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
| -rw-r--r-- | drivers/mmc/wbsd.c | 40 | ||||
| -rw-r--r-- | drivers/mmc/wbsd.h | 1 |
2 files changed, 10 insertions, 31 deletions
diff --git a/drivers/mmc/wbsd.c b/drivers/mmc/wbsd.c index c1dd6ad8dab3..a44d8777ab9f 100644 --- a/drivers/mmc/wbsd.c +++ b/drivers/mmc/wbsd.c | |||
| @@ -272,16 +272,9 @@ static inline int wbsd_next_sg(struct wbsd_host *host) | |||
| 272 | return host->num_sg; | 272 | return host->num_sg; |
| 273 | } | 273 | } |
| 274 | 274 | ||
| 275 | static inline char *wbsd_kmap_sg(struct wbsd_host *host) | 275 | static inline char *wbsd_sg_to_buffer(struct wbsd_host *host) |
| 276 | { | 276 | { |
| 277 | host->mapped_sg = kmap_atomic(host->cur_sg->page, KM_BIO_SRC_IRQ) + | 277 | return page_address(host->cur_sg->page) + host->cur_sg->offset; |
| 278 | host->cur_sg->offset; | ||
| 279 | return host->mapped_sg; | ||
| 280 | } | ||
| 281 | |||
| 282 | static inline void wbsd_kunmap_sg(struct wbsd_host *host) | ||
| 283 | { | ||
| 284 | kunmap_atomic(host->mapped_sg, KM_BIO_SRC_IRQ); | ||
| 285 | } | 278 | } |
| 286 | 279 | ||
| 287 | static inline void wbsd_sg_to_dma(struct wbsd_host *host, struct mmc_data *data) | 280 | static inline void wbsd_sg_to_dma(struct wbsd_host *host, struct mmc_data *data) |
| @@ -302,12 +295,11 @@ static inline void wbsd_sg_to_dma(struct wbsd_host *host, struct mmc_data *data) | |||
| 302 | * we do not transfer too much. | 295 | * we do not transfer too much. |
| 303 | */ | 296 | */ |
| 304 | for (i = 0; i < len; i++) { | 297 | for (i = 0; i < len; i++) { |
| 305 | sgbuf = kmap_atomic(sg[i].page, KM_BIO_SRC_IRQ) + sg[i].offset; | 298 | sgbuf = page_address(sg[i].page) + sg[i].offset; |
| 306 | if (size < sg[i].length) | 299 | if (size < sg[i].length) |
| 307 | memcpy(dmabuf, sgbuf, size); | 300 | memcpy(dmabuf, sgbuf, size); |
| 308 | else | 301 | else |
| 309 | memcpy(dmabuf, sgbuf, sg[i].length); | 302 | memcpy(dmabuf, sgbuf, sg[i].length); |
| 310 | kunmap_atomic(sgbuf, KM_BIO_SRC_IRQ); | ||
| 311 | dmabuf += sg[i].length; | 303 | dmabuf += sg[i].length; |
| 312 | 304 | ||
| 313 | if (size < sg[i].length) | 305 | if (size < sg[i].length) |
| @@ -347,7 +339,7 @@ static inline void wbsd_dma_to_sg(struct wbsd_host *host, struct mmc_data *data) | |||
| 347 | * we do not transfer too much. | 339 | * we do not transfer too much. |
| 348 | */ | 340 | */ |
| 349 | for (i = 0; i < len; i++) { | 341 | for (i = 0; i < len; i++) { |
| 350 | sgbuf = kmap_atomic(sg[i].page, KM_BIO_SRC_IRQ) + sg[i].offset; | 342 | sgbuf = page_address(sg[i].page) + sg[i].offset; |
| 351 | if (size < sg[i].length) | 343 | if (size < sg[i].length) |
| 352 | memcpy(sgbuf, dmabuf, size); | 344 | memcpy(sgbuf, dmabuf, size); |
| 353 | else | 345 | else |
| @@ -497,7 +489,7 @@ static void wbsd_empty_fifo(struct wbsd_host *host) | |||
| 497 | if (data->bytes_xfered == host->size) | 489 | if (data->bytes_xfered == host->size) |
| 498 | return; | 490 | return; |
| 499 | 491 | ||
| 500 | buffer = wbsd_kmap_sg(host) + host->offset; | 492 | buffer = wbsd_sg_to_buffer(host) + host->offset; |
| 501 | 493 | ||
| 502 | /* | 494 | /* |
| 503 | * Drain the fifo. This has a tendency to loop longer | 495 | * Drain the fifo. This has a tendency to loop longer |
| @@ -526,17 +518,13 @@ static void wbsd_empty_fifo(struct wbsd_host *host) | |||
| 526 | /* | 518 | /* |
| 527 | * Transfer done? | 519 | * Transfer done? |
| 528 | */ | 520 | */ |
| 529 | if (data->bytes_xfered == host->size) { | 521 | if (data->bytes_xfered == host->size) |
| 530 | wbsd_kunmap_sg(host); | ||
| 531 | return; | 522 | return; |
| 532 | } | ||
| 533 | 523 | ||
| 534 | /* | 524 | /* |
| 535 | * End of scatter list entry? | 525 | * End of scatter list entry? |
| 536 | */ | 526 | */ |
| 537 | if (host->remain == 0) { | 527 | if (host->remain == 0) { |
| 538 | wbsd_kunmap_sg(host); | ||
| 539 | |||
| 540 | /* | 528 | /* |
| 541 | * Get next entry. Check if last. | 529 | * Get next entry. Check if last. |
| 542 | */ | 530 | */ |
| @@ -554,13 +542,11 @@ static void wbsd_empty_fifo(struct wbsd_host *host) | |||
| 554 | return; | 542 | return; |
| 555 | } | 543 | } |
| 556 | 544 | ||
| 557 | buffer = wbsd_kmap_sg(host); | 545 | buffer = wbsd_sg_to_buffer(host); |
| 558 | } | 546 | } |
| 559 | } | 547 | } |
| 560 | } | 548 | } |
| 561 | 549 | ||
| 562 | wbsd_kunmap_sg(host); | ||
| 563 | |||
| 564 | /* | 550 | /* |
| 565 | * This is a very dirty hack to solve a | 551 | * This is a very dirty hack to solve a |
| 566 | * hardware problem. The chip doesn't trigger | 552 | * hardware problem. The chip doesn't trigger |
| @@ -583,7 +569,7 @@ static void wbsd_fill_fifo(struct wbsd_host *host) | |||
| 583 | if (data->bytes_xfered == host->size) | 569 | if (data->bytes_xfered == host->size) |
| 584 | return; | 570 | return; |
| 585 | 571 | ||
| 586 | buffer = wbsd_kmap_sg(host) + host->offset; | 572 | buffer = wbsd_sg_to_buffer(host) + host->offset; |
| 587 | 573 | ||
| 588 | /* | 574 | /* |
| 589 | * Fill the fifo. This has a tendency to loop longer | 575 | * Fill the fifo. This has a tendency to loop longer |
| @@ -612,17 +598,13 @@ static void wbsd_fill_fifo(struct wbsd_host *host) | |||
| 612 | /* | 598 | /* |
| 613 | * Transfer done? | 599 | * Transfer done? |
| 614 | */ | 600 | */ |
| 615 | if (data->bytes_xfered == host->size) { | 601 | if (data->bytes_xfered == host->size) |
| 616 | wbsd_kunmap_sg(host); | ||
| 617 | return; | 602 | return; |
| 618 | } | ||
| 619 | 603 | ||
| 620 | /* | 604 | /* |
| 621 | * End of scatter list entry? | 605 | * End of scatter list entry? |
| 622 | */ | 606 | */ |
| 623 | if (host->remain == 0) { | 607 | if (host->remain == 0) { |
| 624 | wbsd_kunmap_sg(host); | ||
| 625 | |||
| 626 | /* | 608 | /* |
| 627 | * Get next entry. Check if last. | 609 | * Get next entry. Check if last. |
| 628 | */ | 610 | */ |
| @@ -640,13 +622,11 @@ static void wbsd_fill_fifo(struct wbsd_host *host) | |||
| 640 | return; | 622 | return; |
| 641 | } | 623 | } |
| 642 | 624 | ||
| 643 | buffer = wbsd_kmap_sg(host); | 625 | buffer = wbsd_sg_to_buffer(host); |
| 644 | } | 626 | } |
| 645 | } | 627 | } |
| 646 | } | 628 | } |
| 647 | 629 | ||
| 648 | wbsd_kunmap_sg(host); | ||
| 649 | |||
| 650 | /* | 630 | /* |
| 651 | * The controller stops sending interrupts for | 631 | * The controller stops sending interrupts for |
| 652 | * 'FIFO empty' under certain conditions. So we | 632 | * 'FIFO empty' under certain conditions. So we |
diff --git a/drivers/mmc/wbsd.h b/drivers/mmc/wbsd.h index 6072993f01e3..d06718b0e2ab 100644 --- a/drivers/mmc/wbsd.h +++ b/drivers/mmc/wbsd.h | |||
| @@ -154,7 +154,6 @@ struct wbsd_host | |||
| 154 | 154 | ||
| 155 | struct scatterlist* cur_sg; /* Current SG entry */ | 155 | struct scatterlist* cur_sg; /* Current SG entry */ |
| 156 | unsigned int num_sg; /* Number of entries left */ | 156 | unsigned int num_sg; /* Number of entries left */ |
| 157 | void* mapped_sg; /* vaddr of mapped sg */ | ||
| 158 | 157 | ||
| 159 | unsigned int offset; /* Offset into current entry */ | 158 | unsigned int offset; /* Offset into current entry */ |
| 160 | unsigned int remain; /* Data left in curren entry */ | 159 | unsigned int remain; /* Data left in curren entry */ |
