Changeset 911f517 in rtems-libbsd
- Timestamp:
- 11/25/14 11:54:35 (9 years ago)
- Branches:
- 4.11, 5, 5-freebsd-12, 6-freebsd-12, freebsd-9.3, master
- Children:
- dec6b67
- Parents:
- cd179c4
- git-author:
- Sebastian Huber <sebastian.huber@…> (11/25/14 11:54:35)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (01/21/15 14:00:20)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
freebsd/sys/dev/cadence/if_cgem.c
rcd179c4 r911f517 127 127 bus_addr_t rxring_physaddr; 128 128 struct mbuf *rxring_m[CGEM_NUM_RX_DESCS]; 129 #ifndef __rtems__ 129 130 bus_dmamap_t rxring_m_dmamap[CGEM_NUM_RX_DESCS]; 131 #endif /* __rtems__ */ 130 132 int rxring_hd_ptr; /* where to put rcv bufs */ 131 133 int rxring_tl_ptr; /* where to get receives */ … … 143 145 bus_addr_t txring_physaddr; 144 146 struct mbuf *txring_m[CGEM_NUM_TX_DESCS]; 147 #ifndef __rtems__ 145 148 bus_dmamap_t txring_m_dmamap[CGEM_NUM_TX_DESCS]; 149 #endif /* __rtems__ */ 146 150 int txring_hd_ptr; /* where to put next xmits */ 147 151 int txring_tl_ptr; /* next xmit mbuf to free */ … … 426 430 sc->rxring[i].ctl = 0; 427 431 sc->rxring_m[i] = NULL; 432 #ifndef __rtems__ 428 433 err = bus_dmamap_create(sc->mbuf_dma_tag, 0, 429 434 &sc->rxring_m_dmamap[i]); 430 435 if (err) 431 436 return (err); 437 #endif /* __rtems__ */ 432 438 } 433 439 sc->rxring[CGEM_NUM_RX_DESCS - 1].addr |= CGEM_RXDESC_WRAP; … … 459 465 sc->txring[i].ctl = CGEM_TXDESC_USED; 460 466 sc->txring_m[i] = NULL; 467 #ifndef __rtems__ 461 468 err = bus_dmamap_create(sc->mbuf_dma_tag, 0, 462 469 &sc->txring_m_dmamap[i]); 463 470 if (err) 464 471 return (err); 472 #endif /* __rtems__ */ 465 473 } 466 474 sc->txring[CGEM_NUM_TX_DESCS - 1].ctl |= CGEM_TXDESC_WRAP; … … 478 486 { 479 487 struct mbuf *m = NULL; 488 #ifndef __rtems__ 480 489 bus_dma_segment_t segs[TX_MAX_DMA_SEGS]; 481 490 int nsegs; 491 #else /* __rtems__ */ 492 bus_dma_segment_t segs[1]; 493 #endif /* __rtems__ */ 482 494 483 495 CGEM_ASSERT_LOCKED(sc); … … 493 505 m->m_pkthdr.rcvif = sc->ifp; 494 506 507 #ifndef __rtems__ 495 508 /* Load map and plug in physical address. */ 496 509 if (bus_dmamap_load_mbuf_sg(sc->mbuf_dma_tag, … … 501 514 break; 502 515 } 516 #endif /* __rtems__ */ 503 517 sc->rxring_m[sc->rxring_hd_ptr] = m; 504 518 519 #ifndef __rtems__ 505 520 /* Sync cache with receive buffer. */ 506 521 bus_dmamap_sync(sc->mbuf_dma_tag, 507 522 sc->rxring_m_dmamap[sc->rxring_hd_ptr], 508 523 BUS_DMASYNC_PREREAD); 524 #else /* __rtems__ */ 525 rtems_cache_invalidate_multiple_data_lines(m->m_data, m->m_len); 526 segs[0].ds_addr = mtod(m, bus_addr_t); 527 #endif /* __rtems__ */ 509 528 510 529 /* Write rx descriptor and increment head pointer. */ … … 543 562 sc->rxring_m[sc->rxring_tl_ptr] = NULL; 544 563 564 #ifndef __rtems__ 545 565 /* Sync cache with receive buffer. */ 546 566 bus_dmamap_sync(sc->mbuf_dma_tag, … … 551 571 bus_dmamap_unload(sc->mbuf_dma_tag, 552 572 sc->rxring_m_dmamap[sc->rxring_tl_ptr]); 573 #else /* __rtems__ */ 574 rtems_cache_invalidate_multiple_data_lines(m->m_data, m->m_len); 575 #endif /* __rtems__ */ 553 576 554 577 /* Increment tail pointer. */ … … 640 663 CGEM_TXDESC_USED) != 0) { 641 664 665 #ifndef __rtems__ 642 666 /* Sync cache. nop? */ 643 667 bus_dmamap_sync(sc->mbuf_dma_tag, … … 648 672 bus_dmamap_unload(sc->mbuf_dma_tag, 649 673 sc->txring_m_dmamap[sc->txring_tl_ptr]); 674 #endif /* __rtems__ */ 650 675 651 676 /* Free up the mbuf. */ … … 702 727 } 703 728 729 #ifdef __rtems__ 730 static int 731 cgem_get_segs_for_tx(struct mbuf *m, bus_dma_segment_t segs[TX_MAX_DMA_SEGS], 732 int *nsegs) 733 { 734 int i = 0; 735 736 do { 737 if (m->m_len > 0) { 738 segs[i].ds_addr = mtod(m, bus_addr_t); 739 segs[i].ds_len = m->m_len; 740 rtems_cache_flush_multiple_data_lines(m->m_data, m->m_len); 741 ++i; 742 } 743 744 m = m->m_next; 745 746 if (m == NULL) { 747 *nsegs = i; 748 749 return (0); 750 } 751 } while (i < TX_MAX_DMA_SEGS); 752 753 return (EFBIG); 754 } 755 #endif /* __rtems__ */ 704 756 /* Start transmits. */ 705 757 static void … … 739 791 break; 740 792 793 #ifndef __rtems__ 741 794 /* Load DMA map. */ 742 795 err = bus_dmamap_load_mbuf_sg(sc->mbuf_dma_tag, 743 796 sc->txring_m_dmamap[sc->txring_hd_ptr], 744 797 m, segs, &nsegs, BUS_DMA_NOWAIT); 798 #else /* __rtems__ */ 799 err = cgem_get_segs_for_tx(m, segs, &nsegs); 800 #endif /* __rtems__ */ 745 801 if (err == EFBIG) { 746 802 /* Too many segments! defrag and try again. */ … … 753 809 } 754 810 m = m2; 811 #ifndef __rtems__ 755 812 err = bus_dmamap_load_mbuf_sg(sc->mbuf_dma_tag, 756 813 sc->txring_m_dmamap[sc->txring_hd_ptr], 757 814 m, segs, &nsegs, BUS_DMA_NOWAIT); 815 #else /* __rtems__ */ 816 err = cgem_get_segs_for_tx(m, segs, &nsegs); 817 #endif /* __rtems__ */ 758 818 sc->txdefrags++; 759 819 } … … 766 826 sc->txring_m[sc->txring_hd_ptr] = m; 767 827 828 #ifndef __rtems__ 768 829 /* Sync tx buffer with cache. */ 769 830 bus_dmamap_sync(sc->mbuf_dma_tag, 770 831 sc->txring_m_dmamap[sc->txring_hd_ptr], 771 832 BUS_DMASYNC_PREWRITE); 833 #endif /* __rtems__ */ 772 834 773 835 /* Set wrap flag if next packet might run off end of ring. */ … … 1128 1190 sc->txring[i].addr = 0; 1129 1191 if (sc->txring_m[i]) { 1192 #ifndef __rtems__ 1130 1193 bus_dmamap_unload(sc->mbuf_dma_tag, 1131 1194 sc->txring_m_dmamap[i]); 1195 #endif /* __rtems__ */ 1132 1196 m_freem(sc->txring_m[i]); 1133 1197 sc->txring_m[i] = NULL; … … 1145 1209 sc->rxring[i].ctl = 0; 1146 1210 if (sc->rxring_m[i]) { 1211 #ifndef __rtems__ 1147 1212 /* Unload dmamap. */ 1148 1213 bus_dmamap_unload(sc->mbuf_dma_tag, 1149 1214 sc->rxring_m_dmamap[sc->rxring_tl_ptr]); 1215 #endif /* __rtems__ */ 1150 1216 1151 1217 m_freem(sc->rxring_m[i]); … … 1766 1832 { 1767 1833 struct cgem_softc *sc = device_get_softc(dev); 1834 #ifndef __rtems__ 1768 1835 int i; 1836 #endif /* __rtems__ */ 1769 1837 1770 1838 if (sc == NULL) … … 1808 1876 sc->rxring_dma_map); 1809 1877 sc->rxring = NULL; 1878 #ifndef __rtems__ 1810 1879 for (i = 0; i < CGEM_NUM_RX_DESCS; i++) 1811 1880 if (sc->rxring_m_dmamap[i] != NULL) { … … 1814 1883 sc->rxring_m_dmamap[i] = NULL; 1815 1884 } 1885 #endif /* __rtems__ */ 1816 1886 } 1817 1887 if (sc->txring != NULL) { … … 1823 1893 sc->txring_dma_map); 1824 1894 sc->txring = NULL; 1895 #ifndef __rtems__ 1825 1896 for (i = 0; i < CGEM_NUM_TX_DESCS; i++) 1826 1897 if (sc->txring_m_dmamap[i] != NULL) { … … 1829 1900 sc->txring_m_dmamap[i] = NULL; 1830 1901 } 1902 #endif /* __rtems__ */ 1831 1903 } 1832 1904 if (sc->desc_dma_tag != NULL) {
Note: See TracChangeset
for help on using the changeset viewer.