Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43legacy: remove 64-bit DMA support

Devices supported by b43legacy don't support 64-bit DMA.

Signed-off-by: Pavel Roskin <proski@gnu.org>
Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Pavel Roskin and committed by
John W. Linville
191d6a8c ae7f9a74

+70 -409
+70 -302
drivers/net/wireless/b43legacy/dma.c
··· 42 42 43 43 /* 32bit DMA ops. */ 44 44 static 45 - struct b43legacy_dmadesc_generic *op32_idx2desc( 46 - struct b43legacy_dmaring *ring, 47 - int slot, 48 - struct b43legacy_dmadesc_meta **meta) 45 + struct b43legacy_dmadesc32 *op32_idx2desc(struct b43legacy_dmaring *ring, 46 + int slot, 47 + struct b43legacy_dmadesc_meta **meta) 49 48 { 50 49 struct b43legacy_dmadesc32 *desc; 51 50 ··· 52 53 desc = ring->descbase; 53 54 desc = &(desc[slot]); 54 55 55 - return (struct b43legacy_dmadesc_generic *)desc; 56 + return (struct b43legacy_dmadesc32 *)desc; 56 57 } 57 58 58 59 static void op32_fill_descriptor(struct b43legacy_dmaring *ring, 59 - struct b43legacy_dmadesc_generic *desc, 60 + struct b43legacy_dmadesc32 *desc, 60 61 dma_addr_t dmaaddr, u16 bufsize, 61 62 int start, int end, int irq) 62 63 { ··· 66 67 u32 addr; 67 68 u32 addrext; 68 69 69 - slot = (int)(&(desc->dma32) - descbase); 70 + slot = (int)(desc - descbase); 70 71 B43legacy_WARN_ON(!(slot >= 0 && slot < ring->nr_slots)); 71 72 72 73 addr = (u32)(dmaaddr & ~SSB_DMA_TRANSLATION_MASK); ··· 86 87 ctl |= (addrext << B43legacy_DMA32_DCTL_ADDREXT_SHIFT) 87 88 & B43legacy_DMA32_DCTL_ADDREXT_MASK; 88 89 89 - desc->dma32.control = cpu_to_le32(ctl); 90 - desc->dma32.address = cpu_to_le32(addr); 90 + desc->control = cpu_to_le32(ctl); 91 + desc->address = cpu_to_le32(addr); 91 92 } 92 93 93 94 static void op32_poke_tx(struct b43legacy_dmaring *ring, int slot) ··· 126 127 b43legacy_dma_write(ring, B43legacy_DMA32_RXINDEX, 127 128 (u32)(slot * sizeof(struct b43legacy_dmadesc32))); 128 129 } 129 - 130 - static const struct b43legacy_dma_ops dma32_ops = { 131 - .idx2desc = op32_idx2desc, 132 - .fill_descriptor = op32_fill_descriptor, 133 - .poke_tx = op32_poke_tx, 134 - .tx_suspend = op32_tx_suspend, 135 - .tx_resume = op32_tx_resume, 136 - .get_current_rxslot = op32_get_current_rxslot, 137 - .set_current_rxslot = op32_set_current_rxslot, 138 - }; 139 - 140 - /* 64bit DMA ops. */ 141 - static 142 - struct b43legacy_dmadesc_generic *op64_idx2desc( 143 - struct b43legacy_dmaring *ring, 144 - int slot, 145 - struct b43legacy_dmadesc_meta 146 - **meta) 147 - { 148 - struct b43legacy_dmadesc64 *desc; 149 - 150 - *meta = &(ring->meta[slot]); 151 - desc = ring->descbase; 152 - desc = &(desc[slot]); 153 - 154 - return (struct b43legacy_dmadesc_generic *)desc; 155 - } 156 - 157 - static void op64_fill_descriptor(struct b43legacy_dmaring *ring, 158 - struct b43legacy_dmadesc_generic *desc, 159 - dma_addr_t dmaaddr, u16 bufsize, 160 - int start, int end, int irq) 161 - { 162 - struct b43legacy_dmadesc64 *descbase = ring->descbase; 163 - int slot; 164 - u32 ctl0 = 0; 165 - u32 ctl1 = 0; 166 - u32 addrlo; 167 - u32 addrhi; 168 - u32 addrext; 169 - 170 - slot = (int)(&(desc->dma64) - descbase); 171 - B43legacy_WARN_ON(!(slot >= 0 && slot < ring->nr_slots)); 172 - 173 - addrlo = (u32)(dmaaddr & 0xFFFFFFFF); 174 - addrhi = (((u64)dmaaddr >> 32) & ~SSB_DMA_TRANSLATION_MASK); 175 - addrext = (((u64)dmaaddr >> 32) & SSB_DMA_TRANSLATION_MASK) 176 - >> SSB_DMA_TRANSLATION_SHIFT; 177 - addrhi |= ring->dev->dma.translation; 178 - if (slot == ring->nr_slots - 1) 179 - ctl0 |= B43legacy_DMA64_DCTL0_DTABLEEND; 180 - if (start) 181 - ctl0 |= B43legacy_DMA64_DCTL0_FRAMESTART; 182 - if (end) 183 - ctl0 |= B43legacy_DMA64_DCTL0_FRAMEEND; 184 - if (irq) 185 - ctl0 |= B43legacy_DMA64_DCTL0_IRQ; 186 - ctl1 |= (bufsize - ring->frameoffset) 187 - & B43legacy_DMA64_DCTL1_BYTECNT; 188 - ctl1 |= (addrext << B43legacy_DMA64_DCTL1_ADDREXT_SHIFT) 189 - & B43legacy_DMA64_DCTL1_ADDREXT_MASK; 190 - 191 - desc->dma64.control0 = cpu_to_le32(ctl0); 192 - desc->dma64.control1 = cpu_to_le32(ctl1); 193 - desc->dma64.address_low = cpu_to_le32(addrlo); 194 - desc->dma64.address_high = cpu_to_le32(addrhi); 195 - } 196 - 197 - static void op64_poke_tx(struct b43legacy_dmaring *ring, int slot) 198 - { 199 - b43legacy_dma_write(ring, B43legacy_DMA64_TXINDEX, 200 - (u32)(slot * sizeof(struct b43legacy_dmadesc64))); 201 - } 202 - 203 - static void op64_tx_suspend(struct b43legacy_dmaring *ring) 204 - { 205 - b43legacy_dma_write(ring, B43legacy_DMA64_TXCTL, 206 - b43legacy_dma_read(ring, B43legacy_DMA64_TXCTL) 207 - | B43legacy_DMA64_TXSUSPEND); 208 - } 209 - 210 - static void op64_tx_resume(struct b43legacy_dmaring *ring) 211 - { 212 - b43legacy_dma_write(ring, B43legacy_DMA64_TXCTL, 213 - b43legacy_dma_read(ring, B43legacy_DMA64_TXCTL) 214 - & ~B43legacy_DMA64_TXSUSPEND); 215 - } 216 - 217 - static int op64_get_current_rxslot(struct b43legacy_dmaring *ring) 218 - { 219 - u32 val; 220 - 221 - val = b43legacy_dma_read(ring, B43legacy_DMA64_RXSTATUS); 222 - val &= B43legacy_DMA64_RXSTATDPTR; 223 - 224 - return (val / sizeof(struct b43legacy_dmadesc64)); 225 - } 226 - 227 - static void op64_set_current_rxslot(struct b43legacy_dmaring *ring, 228 - int slot) 229 - { 230 - b43legacy_dma_write(ring, B43legacy_DMA64_RXINDEX, 231 - (u32)(slot * sizeof(struct b43legacy_dmadesc64))); 232 - } 233 - 234 - static const struct b43legacy_dma_ops dma64_ops = { 235 - .idx2desc = op64_idx2desc, 236 - .fill_descriptor = op64_fill_descriptor, 237 - .poke_tx = op64_poke_tx, 238 - .tx_suspend = op64_tx_suspend, 239 - .tx_resume = op64_tx_resume, 240 - .get_current_rxslot = op64_get_current_rxslot, 241 - .set_current_rxslot = op64_set_current_rxslot, 242 - }; 243 - 244 130 245 131 static inline int free_slots(struct b43legacy_dmaring *ring) 246 132 { ··· 242 358 static u16 b43legacy_dmacontroller_base(enum b43legacy_dmatype type, 243 359 int controller_idx) 244 360 { 245 - static const u16 map64[] = { 246 - B43legacy_MMIO_DMA64_BASE0, 247 - B43legacy_MMIO_DMA64_BASE1, 248 - B43legacy_MMIO_DMA64_BASE2, 249 - B43legacy_MMIO_DMA64_BASE3, 250 - B43legacy_MMIO_DMA64_BASE4, 251 - B43legacy_MMIO_DMA64_BASE5, 252 - }; 253 361 static const u16 map32[] = { 254 362 B43legacy_MMIO_DMA32_BASE0, 255 363 B43legacy_MMIO_DMA32_BASE1, ··· 251 375 B43legacy_MMIO_DMA32_BASE5, 252 376 }; 253 377 254 - if (type == B43legacy_DMA_64BIT) { 255 - B43legacy_WARN_ON(!(controller_idx >= 0 && 256 - controller_idx < ARRAY_SIZE(map64))); 257 - return map64[controller_idx]; 258 - } 259 378 B43legacy_WARN_ON(!(controller_idx >= 0 && 260 379 controller_idx < ARRAY_SIZE(map32))); 261 380 return map32[controller_idx]; ··· 362 491 363 492 might_sleep(); 364 493 365 - offset = (type == B43legacy_DMA_64BIT) ? 366 - B43legacy_DMA64_RXCTL : B43legacy_DMA32_RXCTL; 494 + offset = B43legacy_DMA32_RXCTL; 367 495 b43legacy_write32(dev, mmio_base + offset, 0); 368 496 for (i = 0; i < 10; i++) { 369 - offset = (type == B43legacy_DMA_64BIT) ? 370 - B43legacy_DMA64_RXSTATUS : B43legacy_DMA32_RXSTATUS; 497 + offset = B43legacy_DMA32_RXSTATUS; 371 498 value = b43legacy_read32(dev, mmio_base + offset); 372 - if (type == B43legacy_DMA_64BIT) { 373 - value &= B43legacy_DMA64_RXSTAT; 374 - if (value == B43legacy_DMA64_RXSTAT_DISABLED) { 375 - i = -1; 376 - break; 377 - } 378 - } else { 379 - value &= B43legacy_DMA32_RXSTATE; 380 - if (value == B43legacy_DMA32_RXSTAT_DISABLED) { 381 - i = -1; 382 - break; 383 - } 499 + value &= B43legacy_DMA32_RXSTATE; 500 + if (value == B43legacy_DMA32_RXSTAT_DISABLED) { 501 + i = -1; 502 + break; 384 503 } 385 504 msleep(1); 386 505 } ··· 394 533 might_sleep(); 395 534 396 535 for (i = 0; i < 10; i++) { 397 - offset = (type == B43legacy_DMA_64BIT) ? 398 - B43legacy_DMA64_TXSTATUS : B43legacy_DMA32_TXSTATUS; 536 + offset = B43legacy_DMA32_TXSTATUS; 399 537 value = b43legacy_read32(dev, mmio_base + offset); 400 - if (type == B43legacy_DMA_64BIT) { 401 - value &= B43legacy_DMA64_TXSTAT; 402 - if (value == B43legacy_DMA64_TXSTAT_DISABLED || 403 - value == B43legacy_DMA64_TXSTAT_IDLEWAIT || 404 - value == B43legacy_DMA64_TXSTAT_STOPPED) 405 - break; 406 - } else { 407 - value &= B43legacy_DMA32_TXSTATE; 408 - if (value == B43legacy_DMA32_TXSTAT_DISABLED || 409 - value == B43legacy_DMA32_TXSTAT_IDLEWAIT || 410 - value == B43legacy_DMA32_TXSTAT_STOPPED) 411 - break; 412 - } 538 + value &= B43legacy_DMA32_TXSTATE; 539 + if (value == B43legacy_DMA32_TXSTAT_DISABLED || 540 + value == B43legacy_DMA32_TXSTAT_IDLEWAIT || 541 + value == B43legacy_DMA32_TXSTAT_STOPPED) 542 + break; 413 543 msleep(1); 414 544 } 415 - offset = (type == B43legacy_DMA_64BIT) ? B43legacy_DMA64_TXCTL : 416 - B43legacy_DMA32_TXCTL; 545 + offset = B43legacy_DMA32_TXCTL; 417 546 b43legacy_write32(dev, mmio_base + offset, 0); 418 547 for (i = 0; i < 10; i++) { 419 - offset = (type == B43legacy_DMA_64BIT) ? 420 - B43legacy_DMA64_TXSTATUS : B43legacy_DMA32_TXSTATUS; 548 + offset = B43legacy_DMA32_TXSTATUS; 421 549 value = b43legacy_read32(dev, mmio_base + offset); 422 - if (type == B43legacy_DMA_64BIT) { 423 - value &= B43legacy_DMA64_TXSTAT; 424 - if (value == B43legacy_DMA64_TXSTAT_DISABLED) { 425 - i = -1; 426 - break; 427 - } 428 - } else { 429 - value &= B43legacy_DMA32_TXSTATE; 430 - if (value == B43legacy_DMA32_TXSTAT_DISABLED) { 431 - i = -1; 432 - break; 433 - } 550 + value &= B43legacy_DMA32_TXSTATE; 551 + if (value == B43legacy_DMA32_TXSTAT_DISABLED) { 552 + i = -1; 553 + break; 434 554 } 435 555 msleep(1); 436 556 } ··· 443 601 if ((u64)addr + buffersize > (1ULL << 32)) 444 602 goto address_error; 445 603 break; 446 - case B43legacy_DMA_64BIT: 447 - /* Currently we can't have addresses beyond 64 bits in the kernel. */ 448 - break; 449 604 } 450 605 451 606 /* The address is OK. */ ··· 456 617 } 457 618 458 619 static int setup_rx_descbuffer(struct b43legacy_dmaring *ring, 459 - struct b43legacy_dmadesc_generic *desc, 620 + struct b43legacy_dmadesc32 *desc, 460 621 struct b43legacy_dmadesc_meta *meta, 461 622 gfp_t gfp_flags) 462 623 { ··· 492 653 493 654 meta->skb = skb; 494 655 meta->dmaaddr = dmaaddr; 495 - ring->ops->fill_descriptor(ring, desc, dmaaddr, 496 - ring->rx_buffersize, 0, 0, 0); 656 + op32_fill_descriptor(ring, desc, dmaaddr, ring->rx_buffersize, 0, 0, 0); 497 657 498 658 rxhdr = (struct b43legacy_rxhdr_fw3 *)(skb->data); 499 659 rxhdr->frame_len = 0; ··· 509 671 { 510 672 int i; 511 673 int err = -ENOMEM; 512 - struct b43legacy_dmadesc_generic *desc; 674 + struct b43legacy_dmadesc32 *desc; 513 675 struct b43legacy_dmadesc_meta *meta; 514 676 515 677 for (i = 0; i < ring->nr_slots; i++) { 516 - desc = ring->ops->idx2desc(ring, i, &meta); 678 + desc = op32_idx2desc(ring, i, &meta); 517 679 518 680 err = setup_rx_descbuffer(ring, desc, meta, GFP_KERNEL); 519 681 if (err) { ··· 530 692 531 693 err_unwind: 532 694 for (i--; i >= 0; i--) { 533 - desc = ring->ops->idx2desc(ring, i, &meta); 695 + desc = op32_idx2desc(ring, i, &meta); 534 696 535 697 unmap_descbuffer(ring, meta->dmaaddr, ring->rx_buffersize, 0); 536 698 dev_kfree_skb(meta->skb); ··· 548 710 u32 value; 549 711 u32 addrext; 550 712 u32 trans = ring->dev->dma.translation; 713 + u32 ringbase = (u32)(ring->dmabase); 551 714 552 715 if (ring->tx) { 553 - if (ring->type == B43legacy_DMA_64BIT) { 554 - u64 ringbase = (u64)(ring->dmabase); 555 - 556 - addrext = ((ringbase >> 32) & SSB_DMA_TRANSLATION_MASK) 557 - >> SSB_DMA_TRANSLATION_SHIFT; 558 - value = B43legacy_DMA64_TXENABLE; 559 - value |= (addrext << B43legacy_DMA64_TXADDREXT_SHIFT) 560 - & B43legacy_DMA64_TXADDREXT_MASK; 561 - b43legacy_dma_write(ring, B43legacy_DMA64_TXCTL, 562 - value); 563 - b43legacy_dma_write(ring, B43legacy_DMA64_TXRINGLO, 564 - (ringbase & 0xFFFFFFFF)); 565 - b43legacy_dma_write(ring, B43legacy_DMA64_TXRINGHI, 566 - ((ringbase >> 32) 567 - & ~SSB_DMA_TRANSLATION_MASK) 568 - | trans); 569 - } else { 570 - u32 ringbase = (u32)(ring->dmabase); 571 - 572 - addrext = (ringbase & SSB_DMA_TRANSLATION_MASK) 573 - >> SSB_DMA_TRANSLATION_SHIFT; 574 - value = B43legacy_DMA32_TXENABLE; 575 - value |= (addrext << B43legacy_DMA32_TXADDREXT_SHIFT) 576 - & B43legacy_DMA32_TXADDREXT_MASK; 577 - b43legacy_dma_write(ring, B43legacy_DMA32_TXCTL, 578 - value); 579 - b43legacy_dma_write(ring, B43legacy_DMA32_TXRING, 580 - (ringbase & 581 - ~SSB_DMA_TRANSLATION_MASK) 582 - | trans); 583 - } 716 + addrext = (ringbase & SSB_DMA_TRANSLATION_MASK) 717 + >> SSB_DMA_TRANSLATION_SHIFT; 718 + value = B43legacy_DMA32_TXENABLE; 719 + value |= (addrext << B43legacy_DMA32_TXADDREXT_SHIFT) 720 + & B43legacy_DMA32_TXADDREXT_MASK; 721 + b43legacy_dma_write(ring, B43legacy_DMA32_TXCTL, value); 722 + b43legacy_dma_write(ring, B43legacy_DMA32_TXRING, 723 + (ringbase & ~SSB_DMA_TRANSLATION_MASK) 724 + | trans); 584 725 } else { 585 726 err = alloc_initial_descbuffers(ring); 586 727 if (err) 587 728 goto out; 588 - if (ring->type == B43legacy_DMA_64BIT) { 589 - u64 ringbase = (u64)(ring->dmabase); 590 729 591 - addrext = ((ringbase >> 32) & SSB_DMA_TRANSLATION_MASK) 592 - >> SSB_DMA_TRANSLATION_SHIFT; 593 - value = (ring->frameoffset << 594 - B43legacy_DMA64_RXFROFF_SHIFT); 595 - value |= B43legacy_DMA64_RXENABLE; 596 - value |= (addrext << B43legacy_DMA64_RXADDREXT_SHIFT) 597 - & B43legacy_DMA64_RXADDREXT_MASK; 598 - b43legacy_dma_write(ring, B43legacy_DMA64_RXCTL, 599 - value); 600 - b43legacy_dma_write(ring, B43legacy_DMA64_RXRINGLO, 601 - (ringbase & 0xFFFFFFFF)); 602 - b43legacy_dma_write(ring, B43legacy_DMA64_RXRINGHI, 603 - ((ringbase >> 32) & 604 - ~SSB_DMA_TRANSLATION_MASK) | 605 - trans); 606 - b43legacy_dma_write(ring, B43legacy_DMA64_RXINDEX, 607 - 200); 608 - } else { 609 - u32 ringbase = (u32)(ring->dmabase); 610 - 611 - addrext = (ringbase & SSB_DMA_TRANSLATION_MASK) 612 - >> SSB_DMA_TRANSLATION_SHIFT; 613 - value = (ring->frameoffset << 614 - B43legacy_DMA32_RXFROFF_SHIFT); 615 - value |= B43legacy_DMA32_RXENABLE; 616 - value |= (addrext << 617 - B43legacy_DMA32_RXADDREXT_SHIFT) 618 - & B43legacy_DMA32_RXADDREXT_MASK; 619 - b43legacy_dma_write(ring, B43legacy_DMA32_RXCTL, 620 - value); 621 - b43legacy_dma_write(ring, B43legacy_DMA32_RXRING, 622 - (ringbase & 623 - ~SSB_DMA_TRANSLATION_MASK) 624 - | trans); 625 - b43legacy_dma_write(ring, B43legacy_DMA32_RXINDEX, 626 - 200); 627 - } 730 + addrext = (ringbase & SSB_DMA_TRANSLATION_MASK) 731 + >> SSB_DMA_TRANSLATION_SHIFT; 732 + value = (ring->frameoffset << 733 + B43legacy_DMA32_RXFROFF_SHIFT); 734 + value |= B43legacy_DMA32_RXENABLE; 735 + value |= (addrext << B43legacy_DMA32_RXADDREXT_SHIFT) 736 + & B43legacy_DMA32_RXADDREXT_MASK; 737 + b43legacy_dma_write(ring, B43legacy_DMA32_RXCTL, value); 738 + b43legacy_dma_write(ring, B43legacy_DMA32_RXRING, 739 + (ringbase & ~SSB_DMA_TRANSLATION_MASK) 740 + | trans); 741 + b43legacy_dma_write(ring, B43legacy_DMA32_RXINDEX, 200); 628 742 } 629 743 630 744 out: ··· 589 799 if (ring->tx) { 590 800 b43legacy_dmacontroller_tx_reset(ring->dev, ring->mmio_base, 591 801 ring->type); 592 - if (ring->type == B43legacy_DMA_64BIT) { 593 - b43legacy_dma_write(ring, B43legacy_DMA64_TXRINGLO, 0); 594 - b43legacy_dma_write(ring, B43legacy_DMA64_TXRINGHI, 0); 595 - } else 596 - b43legacy_dma_write(ring, B43legacy_DMA32_TXRING, 0); 802 + b43legacy_dma_write(ring, B43legacy_DMA32_TXRING, 0); 597 803 } else { 598 804 b43legacy_dmacontroller_rx_reset(ring->dev, ring->mmio_base, 599 805 ring->type); 600 - if (ring->type == B43legacy_DMA_64BIT) { 601 - b43legacy_dma_write(ring, B43legacy_DMA64_RXRINGLO, 0); 602 - b43legacy_dma_write(ring, B43legacy_DMA64_RXRINGHI, 0); 603 - } else 604 - b43legacy_dma_write(ring, B43legacy_DMA32_RXRING, 0); 806 + b43legacy_dma_write(ring, B43legacy_DMA32_RXRING, 0); 605 807 } 606 808 } 607 809 ··· 605 823 if (!ring->used_slots) 606 824 return; 607 825 for (i = 0; i < ring->nr_slots; i++) { 608 - ring->ops->idx2desc(ring, i, &meta); 826 + op32_idx2desc(ring, i, &meta); 609 827 610 828 if (!meta->skb) { 611 829 B43legacy_WARN_ON(!ring->tx); ··· 626 844 u32 tmp; 627 845 u16 mmio_base; 628 846 629 - tmp = b43legacy_read32(dev, SSB_TMSHIGH); 630 - if (tmp & SSB_TMSHIGH_DMA64) 631 - return DMA_BIT_MASK(64); 632 847 mmio_base = b43legacy_dmacontroller_base(0, 0); 633 848 b43legacy_write32(dev, 634 849 mmio_base + B43legacy_DMA32_TXCTL, ··· 644 865 return B43legacy_DMA_30BIT; 645 866 if (dmamask == DMA_BIT_MASK(32)) 646 867 return B43legacy_DMA_32BIT; 647 - if (dmamask == DMA_BIT_MASK(64)) 648 - return B43legacy_DMA_64BIT; 649 868 B43legacy_WARN_ON(1); 650 869 return B43legacy_DMA_30BIT; 651 870 } ··· 714 937 ring->nr_slots = nr_slots; 715 938 ring->mmio_base = b43legacy_dmacontroller_base(type, controller_index); 716 939 ring->index = controller_index; 717 - if (type == B43legacy_DMA_64BIT) 718 - ring->ops = &dma64_ops; 719 - else 720 - ring->ops = &dma32_ops; 721 940 if (for_tx) { 722 941 ring->tx = 1; 723 942 ring->current_slot = -1; ··· 1020 1247 struct sk_buff **in_skb) 1021 1248 { 1022 1249 struct sk_buff *skb = *in_skb; 1023 - const struct b43legacy_dma_ops *ops = ring->ops; 1024 1250 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 1025 1251 u8 *header; 1026 1252 int slot, old_top_slot, old_used_slots; 1027 1253 int err; 1028 - struct b43legacy_dmadesc_generic *desc; 1254 + struct b43legacy_dmadesc32 *desc; 1029 1255 struct b43legacy_dmadesc_meta *meta; 1030 1256 struct b43legacy_dmadesc_meta *meta_hdr; 1031 1257 struct sk_buff *bounce_skb; ··· 1037 1265 1038 1266 /* Get a slot for the header. */ 1039 1267 slot = request_slot(ring); 1040 - desc = ops->idx2desc(ring, slot, &meta_hdr); 1268 + desc = op32_idx2desc(ring, slot, &meta_hdr); 1041 1269 memset(meta_hdr, 0, sizeof(*meta_hdr)); 1042 1270 1043 1271 header = &(ring->txhdr_cache[slot * sizeof( ··· 1059 1287 ring->used_slots = old_used_slots; 1060 1288 return -EIO; 1061 1289 } 1062 - ops->fill_descriptor(ring, desc, meta_hdr->dmaaddr, 1290 + op32_fill_descriptor(ring, desc, meta_hdr->dmaaddr, 1063 1291 sizeof(struct b43legacy_txhdr_fw3), 1, 0, 0); 1064 1292 1065 1293 /* Get a slot for the payload. */ 1066 1294 slot = request_slot(ring); 1067 - desc = ops->idx2desc(ring, slot, &meta); 1295 + desc = op32_idx2desc(ring, slot, &meta); 1068 1296 memset(meta, 0, sizeof(*meta)); 1069 1297 1070 1298 meta->skb = skb; ··· 1100 1328 } 1101 1329 } 1102 1330 1103 - ops->fill_descriptor(ring, desc, meta->dmaaddr, 1331 + op32_fill_descriptor(ring, desc, meta->dmaaddr, 1104 1332 skb->len, 0, 1, 1); 1105 1333 1106 1334 wmb(); /* previous stuff MUST be done */ 1107 1335 /* Now transfer the whole frame. */ 1108 - ops->poke_tx(ring, next_slot(ring, slot)); 1336 + op32_poke_tx(ring, next_slot(ring, slot)); 1109 1337 return 0; 1110 1338 1111 1339 out_free_bounce: ··· 1201 1429 void b43legacy_dma_handle_txstatus(struct b43legacy_wldev *dev, 1202 1430 const struct b43legacy_txstatus *status) 1203 1431 { 1204 - const struct b43legacy_dma_ops *ops; 1205 1432 struct b43legacy_dmaring *ring; 1206 1433 struct b43legacy_dmadesc_meta *meta; 1207 1434 int retry_limit; ··· 1213 1442 spin_lock(&ring->lock); 1214 1443 1215 1444 B43legacy_WARN_ON(!ring->tx); 1216 - ops = ring->ops; 1217 1445 while (1) { 1218 1446 B43legacy_WARN_ON(!(slot >= 0 && slot < ring->nr_slots)); 1219 - ops->idx2desc(ring, slot, &meta); 1447 + op32_idx2desc(ring, slot, &meta); 1220 1448 1221 1449 if (meta->skb) 1222 1450 unmap_descbuffer(ring, meta->dmaaddr, ··· 1298 1528 static void dma_rx(struct b43legacy_dmaring *ring, 1299 1529 int *slot) 1300 1530 { 1301 - const struct b43legacy_dma_ops *ops = ring->ops; 1302 - struct b43legacy_dmadesc_generic *desc; 1531 + struct b43legacy_dmadesc32 *desc; 1303 1532 struct b43legacy_dmadesc_meta *meta; 1304 1533 struct b43legacy_rxhdr_fw3 *rxhdr; 1305 1534 struct sk_buff *skb; ··· 1306 1537 int err; 1307 1538 dma_addr_t dmaaddr; 1308 1539 1309 - desc = ops->idx2desc(ring, *slot, &meta); 1540 + desc = op32_idx2desc(ring, *slot, &meta); 1310 1541 1311 1542 sync_descbuffer_for_cpu(ring, meta->dmaaddr, ring->rx_buffersize); 1312 1543 skb = meta->skb; ··· 1358 1589 s32 tmp = len; 1359 1590 1360 1591 while (1) { 1361 - desc = ops->idx2desc(ring, *slot, &meta); 1592 + desc = op32_idx2desc(ring, *slot, &meta); 1362 1593 /* recycle the descriptor buffer. */ 1363 1594 sync_descbuffer_for_device(ring, meta->dmaaddr, 1364 1595 ring->rx_buffersize); ··· 1395 1626 1396 1627 void b43legacy_dma_rx(struct b43legacy_dmaring *ring) 1397 1628 { 1398 - const struct b43legacy_dma_ops *ops = ring->ops; 1399 1629 int slot; 1400 1630 int current_slot; 1401 1631 int used_slots = 0; 1402 1632 1403 1633 B43legacy_WARN_ON(ring->tx); 1404 - current_slot = ops->get_current_rxslot(ring); 1634 + current_slot = op32_get_current_rxslot(ring); 1405 1635 B43legacy_WARN_ON(!(current_slot >= 0 && current_slot < 1406 1636 ring->nr_slots)); 1407 1637 ··· 1409 1641 dma_rx(ring, &slot); 1410 1642 update_max_used_slots(ring, ++used_slots); 1411 1643 } 1412 - ops->set_current_rxslot(ring, slot); 1644 + op32_set_current_rxslot(ring, slot); 1413 1645 ring->current_slot = slot; 1414 1646 } 1415 1647 ··· 1419 1651 1420 1652 spin_lock_irqsave(&ring->lock, flags); 1421 1653 B43legacy_WARN_ON(!ring->tx); 1422 - ring->ops->tx_suspend(ring); 1654 + op32_tx_suspend(ring); 1423 1655 spin_unlock_irqrestore(&ring->lock, flags); 1424 1656 } 1425 1657 ··· 1429 1661 1430 1662 spin_lock_irqsave(&ring->lock, flags); 1431 1663 B43legacy_WARN_ON(!ring->tx); 1432 - ring->ops->tx_resume(ring); 1664 + op32_tx_resume(ring); 1433 1665 spin_unlock_irqrestore(&ring->lock, flags); 1434 1666 } 1435 1667
-107
drivers/net/wireless/b43legacy/dma.h
··· 82 82 #define B43legacy_DMA32_DCTL_FRAMESTART 0x80000000 83 83 84 84 85 - 86 - /*** 64-bit DMA Engine. ***/ 87 - 88 - /* 64-bit DMA controller registers. */ 89 - #define B43legacy_DMA64_TXCTL 0x00 90 - #define B43legacy_DMA64_TXENABLE 0x00000001 91 - #define B43legacy_DMA64_TXSUSPEND 0x00000002 92 - #define B43legacy_DMA64_TXLOOPBACK 0x00000004 93 - #define B43legacy_DMA64_TXFLUSH 0x00000010 94 - #define B43legacy_DMA64_TXADDREXT_MASK 0x00030000 95 - #define B43legacy_DMA64_TXADDREXT_SHIFT 16 96 - #define B43legacy_DMA64_TXINDEX 0x04 97 - #define B43legacy_DMA64_TXRINGLO 0x08 98 - #define B43legacy_DMA64_TXRINGHI 0x0C 99 - #define B43legacy_DMA64_TXSTATUS 0x10 100 - #define B43legacy_DMA64_TXSTATDPTR 0x00001FFF 101 - #define B43legacy_DMA64_TXSTAT 0xF0000000 102 - #define B43legacy_DMA64_TXSTAT_DISABLED 0x00000000 103 - #define B43legacy_DMA64_TXSTAT_ACTIVE 0x10000000 104 - #define B43legacy_DMA64_TXSTAT_IDLEWAIT 0x20000000 105 - #define B43legacy_DMA64_TXSTAT_STOPPED 0x30000000 106 - #define B43legacy_DMA64_TXSTAT_SUSP 0x40000000 107 - #define B43legacy_DMA64_TXERROR 0x14 108 - #define B43legacy_DMA64_TXERRDPTR 0x0001FFFF 109 - #define B43legacy_DMA64_TXERR 0xF0000000 110 - #define B43legacy_DMA64_TXERR_NOERR 0x00000000 111 - #define B43legacy_DMA64_TXERR_PROT 0x10000000 112 - #define B43legacy_DMA64_TXERR_UNDERRUN 0x20000000 113 - #define B43legacy_DMA64_TXERR_TRANSFER 0x30000000 114 - #define B43legacy_DMA64_TXERR_DESCREAD 0x40000000 115 - #define B43legacy_DMA64_TXERR_CORE 0x50000000 116 - #define B43legacy_DMA64_RXCTL 0x20 117 - #define B43legacy_DMA64_RXENABLE 0x00000001 118 - #define B43legacy_DMA64_RXFROFF_MASK 0x000000FE 119 - #define B43legacy_DMA64_RXFROFF_SHIFT 1 120 - #define B43legacy_DMA64_RXDIRECTFIFO 0x00000100 121 - #define B43legacy_DMA64_RXADDREXT_MASK 0x00030000 122 - #define B43legacy_DMA64_RXADDREXT_SHIFT 16 123 - #define B43legacy_DMA64_RXINDEX 0x24 124 - #define B43legacy_DMA64_RXRINGLO 0x28 125 - #define B43legacy_DMA64_RXRINGHI 0x2C 126 - #define B43legacy_DMA64_RXSTATUS 0x30 127 - #define B43legacy_DMA64_RXSTATDPTR 0x00001FFF 128 - #define B43legacy_DMA64_RXSTAT 0xF0000000 129 - #define B43legacy_DMA64_RXSTAT_DISABLED 0x00000000 130 - #define B43legacy_DMA64_RXSTAT_ACTIVE 0x10000000 131 - #define B43legacy_DMA64_RXSTAT_IDLEWAIT 0x20000000 132 - #define B43legacy_DMA64_RXSTAT_STOPPED 0x30000000 133 - #define B43legacy_DMA64_RXSTAT_SUSP 0x40000000 134 - #define B43legacy_DMA64_RXERROR 0x34 135 - #define B43legacy_DMA64_RXERRDPTR 0x0001FFFF 136 - #define B43legacy_DMA64_RXERR 0xF0000000 137 - #define B43legacy_DMA64_RXERR_NOERR 0x00000000 138 - #define B43legacy_DMA64_RXERR_PROT 0x10000000 139 - #define B43legacy_DMA64_RXERR_UNDERRUN 0x20000000 140 - #define B43legacy_DMA64_RXERR_TRANSFER 0x30000000 141 - #define B43legacy_DMA64_RXERR_DESCREAD 0x40000000 142 - #define B43legacy_DMA64_RXERR_CORE 0x50000000 143 - 144 - /* 64-bit DMA descriptor. */ 145 - struct b43legacy_dmadesc64 { 146 - __le32 control0; 147 - __le32 control1; 148 - __le32 address_low; 149 - __le32 address_high; 150 - } __packed; 151 - #define B43legacy_DMA64_DCTL0_DTABLEEND 0x10000000 152 - #define B43legacy_DMA64_DCTL0_IRQ 0x20000000 153 - #define B43legacy_DMA64_DCTL0_FRAMEEND 0x40000000 154 - #define B43legacy_DMA64_DCTL0_FRAMESTART 0x80000000 155 - #define B43legacy_DMA64_DCTL1_BYTECNT 0x00001FFF 156 - #define B43legacy_DMA64_DCTL1_ADDREXT_MASK 0x00030000 157 - #define B43legacy_DMA64_DCTL1_ADDREXT_SHIFT 16 158 - 159 - 160 - 161 - struct b43legacy_dmadesc_generic { 162 - union { 163 - struct b43legacy_dmadesc32 dma32; 164 - struct b43legacy_dmadesc64 dma64; 165 - } __packed; 166 - } __packed; 167 - 168 - 169 85 /* Misc DMA constants */ 170 86 #define B43legacy_DMA_RINGMEMSIZE PAGE_SIZE 171 87 #define B43legacy_DMA0_RX_FRAMEOFFSET 30 ··· 113 197 bool is_last_fragment; 114 198 }; 115 199 116 - struct b43legacy_dmaring; 117 - 118 - /* Lowlevel DMA operations that differ between 32bit and 64bit DMA. */ 119 - struct b43legacy_dma_ops { 120 - struct b43legacy_dmadesc_generic * (*idx2desc) 121 - (struct b43legacy_dmaring *ring, 122 - int slot, 123 - struct b43legacy_dmadesc_meta 124 - **meta); 125 - void (*fill_descriptor)(struct b43legacy_dmaring *ring, 126 - struct b43legacy_dmadesc_generic *desc, 127 - dma_addr_t dmaaddr, u16 bufsize, 128 - int start, int end, int irq); 129 - void (*poke_tx)(struct b43legacy_dmaring *ring, int slot); 130 - void (*tx_suspend)(struct b43legacy_dmaring *ring); 131 - void (*tx_resume)(struct b43legacy_dmaring *ring); 132 - int (*get_current_rxslot)(struct b43legacy_dmaring *ring); 133 - void (*set_current_rxslot)(struct b43legacy_dmaring *ring, int slot); 134 - }; 135 - 136 200 enum b43legacy_dmatype { 137 201 B43legacy_DMA_30BIT = 30, 138 202 B43legacy_DMA_32BIT = 32, 139 - B43legacy_DMA_64BIT = 64, 140 203 }; 141 204 142 205 struct b43legacy_dmaring { 143 - /* Lowlevel DMA ops. */ 144 - const struct b43legacy_dma_ops *ops; 145 206 /* Kernel virtual base address of the ring memory. */ 146 207 void *descbase; 147 208 /* Meta data about all descriptors. */