Lines Matching refs:atgep
107 atge_rx_desc_free(atge_t *atgep) in atge_rx_desc_free() argument
113 l1e = (atge_l1e_data_t *)atgep->atge_private_data; in atge_rx_desc_free()
135 atge_l1e_alloc_dma(atge_t *atgep) in atge_l1e_alloc_dma() argument
144 atgep->atge_private_data = l1e; in atge_l1e_alloc_dma()
149 atgep->atge_tx_buf_len = atgep->atge_mtu + in atge_l1e_alloc_dma()
151 atgep->atge_tx_ring = kmem_alloc(sizeof (atge_ring_t), KM_SLEEP); in atge_l1e_alloc_dma()
152 atgep->atge_tx_ring->r_atge = atgep; in atge_l1e_alloc_dma()
153 atgep->atge_tx_ring->r_desc_ring = NULL; in atge_l1e_alloc_dma()
154 dma = atge_alloc_a_dma_blk(atgep, &atge_l1e_dma_attr_tx_desc, in atge_l1e_alloc_dma()
158 atgep->atge_name, __func__)); in atge_l1e_alloc_dma()
161 atgep->atge_tx_ring->r_desc_ring = dma; in atge_l1e_alloc_dma()
166 err = atge_alloc_buffers(atgep->atge_tx_ring, ATGE_TX_RING_CNT, in atge_l1e_alloc_dma()
167 atgep->atge_tx_buf_len, DDI_DMA_WRITE); in atge_l1e_alloc_dma()
170 atgep->atge_name, __func__)); in atge_l1e_alloc_dma()
177 atgep->atge_rx_buf_len = atgep->atge_mtu + in atge_l1e_alloc_dma()
180 if (atgep->atge_flags & ATGE_FLAG_JUMBO) in atge_l1e_alloc_dma()
191 atgep->atge_name, __func__, l1e->atge_l1e_pagesize, in atge_l1e_alloc_dma()
196 dma = atge_alloc_a_dma_blk(atgep, &atge_l1e_dma_attr_rx_desc, in atge_l1e_alloc_dma()
209 atgep->atge_name, __func__)); in atge_l1e_alloc_dma()
216 ATGE_DB(("%s: %s() L1E_RX_CMB_SZ : %x", atgep->atge_name, in atge_l1e_alloc_dma()
220 dma = atge_alloc_a_dma_blk(atgep, &atge_l1e_dma_attr_cmb, in atge_l1e_alloc_dma()
224 atgep->atge_name, __func__)); in atge_l1e_alloc_dma()
231 atgep->atge_name, __func__)); in atge_l1e_alloc_dma()
235 atgep->atge_hw_stats = kmem_zalloc(sizeof (atge_l1e_smb_t), KM_SLEEP); in atge_l1e_alloc_dma()
241 atge_l1e_free_dma(atge_t *atgep) in atge_l1e_free_dma() argument
248 if (atgep->atge_tx_ring != NULL) { in atge_l1e_free_dma()
249 atge_free_buffers(atgep->atge_tx_ring, ATGE_TX_RING_CNT); in atge_l1e_free_dma()
251 if (atgep->atge_tx_ring->r_desc_ring != NULL) { in atge_l1e_free_dma()
252 atge_free_a_dma_blk(atgep->atge_tx_ring->r_desc_ring); in atge_l1e_free_dma()
255 kmem_free(atgep->atge_tx_ring, sizeof (atge_ring_t)); in atge_l1e_free_dma()
256 atgep->atge_tx_ring = NULL; in atge_l1e_free_dma()
259 l1e = atgep->atge_private_data; in atge_l1e_free_dma()
274 atge_rx_desc_free(atgep); in atge_l1e_free_dma()
279 if (atgep->atge_hw_stats != NULL) { in atge_l1e_free_dma()
280 kmem_free(atgep->atge_hw_stats, sizeof (atge_l1e_smb_t)); in atge_l1e_free_dma()
281 atgep->atge_hw_stats = NULL; in atge_l1e_free_dma()
286 atge_l1e_init_rx_pages(atge_t *atgep) in atge_l1e_init_rx_pages() argument
292 ASSERT(atgep != NULL); in atge_l1e_init_rx_pages()
293 l1e = atgep->atge_private_data; in atge_l1e_init_rx_pages()
319 atge_l1e_init_tx_ring(atge_t *atgep) in atge_l1e_init_tx_ring() argument
321 ASSERT(atgep != NULL); in atge_l1e_init_tx_ring()
322 ASSERT(atgep->atge_tx_ring != NULL); in atge_l1e_init_tx_ring()
323 ASSERT(atgep->atge_tx_ring->r_desc_ring != NULL); in atge_l1e_init_tx_ring()
325 atgep->atge_tx_ring->r_producer = 0; in atge_l1e_init_tx_ring()
326 atgep->atge_tx_ring->r_consumer = 0; in atge_l1e_init_tx_ring()
327 atgep->atge_tx_ring->r_avail_desc = ATGE_TX_RING_CNT; in atge_l1e_init_tx_ring()
329 bzero(atgep->atge_tx_ring->r_desc_ring->addr, ATGE_TX_RING_SZ); in atge_l1e_init_tx_ring()
331 DMA_SYNC(atgep->atge_tx_ring->r_desc_ring, 0, ATGE_TX_RING_SZ, in atge_l1e_init_tx_ring()
336 atge_l1e_program_dma(atge_t *atgep) in atge_l1e_program_dma() argument
342 l1e = (atge_l1e_data_t *)atgep->atge_private_data; in atge_l1e_program_dma()
348 (void) INL(atgep, ATGE_WOL_CFG); in atge_l1e_program_dma()
349 OUTL(atgep, ATGE_WOL_CFG, 0); in atge_l1e_program_dma()
355 paddr = atgep->atge_tx_ring->r_desc_ring->cookie.dmac_laddress; in atge_l1e_program_dma()
356 OUTL(atgep, ATGE_DESC_ADDR_HI, ATGE_ADDR_HI(paddr)); in atge_l1e_program_dma()
357 OUTL(atgep, ATGE_DESC_TPD_ADDR_LO, ATGE_ADDR_LO(paddr)); in atge_l1e_program_dma()
358 OUTL(atgep, ATGE_DESC_TPD_CNT, in atge_l1e_program_dma()
363 OUTL(atgep, L1E_RXF0_PAGE0_ADDR_LO, ATGE_ADDR_LO(paddr)); in atge_l1e_program_dma()
365 OUTL(atgep, L1E_RXF0_PAGE1_ADDR_LO, ATGE_ADDR_LO(paddr)); in atge_l1e_program_dma()
369 OUTL(atgep, L1E_RXF0_CMB0_ADDR_LO, ATGE_ADDR_LO(paddr)); in atge_l1e_program_dma()
371 OUTL(atgep, L1E_RXF0_CMB1_ADDR_LO, ATGE_ADDR_LO(paddr)); in atge_l1e_program_dma()
374 OUTB(atgep, L1E_RXF0_PAGE0, RXF_VALID); /* 0 */ in atge_l1e_program_dma()
375 OUTB(atgep, L1E_RXF0_PAGE1, RXF_VALID); /* 1 */ in atge_l1e_program_dma()
376 OUTB(atgep, L1E_RXF0_PAGE0 + 2, 0); in atge_l1e_program_dma()
377 OUTB(atgep, L1E_RXF0_PAGE0 + 3, 0); in atge_l1e_program_dma()
378 OUTB(atgep, L1E_RXF0_PAGE0 + 4, 0); in atge_l1e_program_dma()
379 OUTB(atgep, L1E_RXF0_PAGE0 + 5, 0); in atge_l1e_program_dma()
380 OUTB(atgep, L1E_RXF0_PAGE0 + 6, 0); in atge_l1e_program_dma()
381 OUTB(atgep, L1E_RXF0_PAGE0 + 6, 0); in atge_l1e_program_dma()
384 OUTL(atgep, L1E_RXF_PAGE_SIZE, L1E_RX_PAGE_SZ); in atge_l1e_program_dma()
387 OUTL(atgep, ATGE_DMA_BLOCK, DMA_BLOCK_LOAD); in atge_l1e_program_dma()
390 OUTL(atgep, L1E_INT_TRIG_THRESH, (1 << INT_TRIG_RX_THRESH_SHIFT) | in atge_l1e_program_dma()
397 OUTL(atgep, L1E_INT_TRIG_TIMER, in atge_l1e_program_dma()
403 OUTL(atgep, ATGE_IM_TIMER, reg); in atge_l1e_program_dma()
405 reg = INL(atgep, ATGE_MASTER_CFG); in atge_l1e_program_dma()
410 OUTL(atgep, ATGE_MASTER_CFG, reg); in atge_l1e_program_dma()
412 OUTW(atgep, RX_COALSC_PKT_1e, 0); in atge_l1e_program_dma()
413 OUTW(atgep, RX_COALSC_TO_1e, 0); in atge_l1e_program_dma()
414 OUTW(atgep, TX_COALSC_PKT_1e, 1); in atge_l1e_program_dma()
415 OUTW(atgep, TX_COALSC_TO_1e, 4000/2); /* 4mS */ in atge_l1e_program_dma()
419 atge_l1e_receive(atge_t *atgep) in atge_l1e_receive() argument
433 l1e = atgep->atge_private_data; in atge_l1e_receive()
435 ASSERT(MUTEX_HELD(&atgep->atge_intr_lock)); in atge_l1e_receive()
464 atgep->atge_name, __func__, in atge_l1e_receive()
494 atgep->atge_name, __func__, seqno, in atge_l1e_receive()
497 mutex_enter(&atgep->atge_tx_lock); in atge_l1e_receive()
498 atge_device_restart(atgep); in atge_l1e_receive()
499 mutex_exit(&atgep->atge_tx_lock); in atge_l1e_receive()
519 atgep->atge_name, __func__, flags)); in atge_l1e_receive()
520 atge_l1e_rx_next_pkt(atgep, len); in atge_l1e_receive()
521 atgep->atge_errrcv++; in atge_l1e_receive()
529 if (len == 0 || len > atgep->atge_rx_buf_len) { in atge_l1e_receive()
531 atgep->atge_name, __func__, len)); in atge_l1e_receive()
532 atge_l1e_rx_next_pkt(atgep, len); in atge_l1e_receive()
552 atgep->atge_ipackets++; in atge_l1e_receive()
553 atgep->atge_rbytes += len; in atge_l1e_receive()
556 atgep->atge_name, __func__, len)); in atge_l1e_receive()
558 if (len > atgep->atge_rx_buf_len) { in atge_l1e_receive()
559 atgep->atge_toolong_errors++; in atge_l1e_receive()
561 atgep->atge_norcvbuf++; in atge_l1e_receive()
565 atge_l1e_rx_next_pkt(atgep, len); in atge_l1e_receive()
570 atgep->atge_name, __func__, seqno, in atge_l1e_receive()
578 atgep->atge_name, __func__, gen, in atge_l1e_receive()
588 atge_l1e_rx_next_pkt(atge_t *atgep, uint32_t len) in atge_l1e_rx_next_pkt() argument
590 atge_l1e_data_t *l1e = atgep->atge_private_data; in atge_l1e_rx_next_pkt()
608 atgep->atge_name, __func__, l1e->atge_l1e_rx_page_cons, in atge_l1e_rx_next_pkt()
624 OUTB(atgep, L1E_RXF0_PAGE0 + curr, RXF_VALID); in atge_l1e_rx_next_pkt()
652 atgep->atge_name, __func__, curr, in atge_l1e_rx_next_pkt()
667 atge_l1e_clear_stats(atge_t *atgep) in atge_l1e_clear_stats() argument
679 (void) INL(atgep, L1E_RX_MIB_BASE + i); in atge_l1e_clear_stats()
689 (void) INL(atgep, L1E_TX_MIB_BASE + i); in atge_l1e_clear_stats()
695 atge_l1e_gather_stats(atge_t *atgep) in atge_l1e_gather_stats() argument
703 ASSERT(atgep != NULL); in atge_l1e_gather_stats()
705 stat = (atge_l1e_smb_t *)atgep->atge_hw_stats; in atge_l1e_gather_stats()
714 *reg = INL(atgep, L1E_RX_MIB_BASE + i); in atge_l1e_gather_stats()
722 *reg = INL(atgep, L1E_TX_MIB_BASE + i); in atge_l1e_gather_stats()
787 atgep->atge_brdcstrcv += smb->rx_bcast_frames; in atge_l1e_gather_stats()
788 atgep->atge_multircv += smb->rx_mcast_frames; in atge_l1e_gather_stats()
789 atgep->atge_multixmt += smb->tx_mcast_frames; in atge_l1e_gather_stats()
790 atgep->atge_brdcstxmt += smb->tx_bcast_frames; in atge_l1e_gather_stats()
792 atgep->atge_align_errors += smb->rx_alignerrs; in atge_l1e_gather_stats()
793 atgep->atge_fcs_errors += smb->rx_crcerrs; in atge_l1e_gather_stats()
794 atgep->atge_sqe_errors += smb->rx_rrs_errs; in atge_l1e_gather_stats()
795 atgep->atge_defer_xmts += smb->tx_deferred; in atge_l1e_gather_stats()
796 atgep->atge_first_collisions += smb->tx_single_colls; in atge_l1e_gather_stats()
797 atgep->atge_multi_collisions += smb->tx_multi_colls * 2; in atge_l1e_gather_stats()
798 atgep->atge_tx_late_collisions += smb->tx_late_colls; in atge_l1e_gather_stats()
799 atgep->atge_ex_collisions += smb->tx_excess_colls; in atge_l1e_gather_stats()
800 atgep->atge_macxmt_errors += smb->tx_abort; in atge_l1e_gather_stats()
801 atgep->atge_toolong_errors += smb->rx_lenerrs; in atge_l1e_gather_stats()
802 atgep->atge_overflow += smb->rx_fifo_oflows; in atge_l1e_gather_stats()
803 atgep->atge_underflow += (smb->tx_underrun + smb->tx_desc_underrun); in atge_l1e_gather_stats()
804 atgep->atge_runt += smb->rx_runts; in atge_l1e_gather_stats()
807 atgep->atge_collisions += smb->tx_single_colls + in atge_l1e_gather_stats()
815 atgep->atge_macxmt_errors += smb->tx_abort + smb->tx_late_colls + in atge_l1e_gather_stats()
818 atgep->atge_macrcv_errors += smb->rx_crcerrs + smb->rx_lenerrs + in atge_l1e_gather_stats()
825 atge_l1e_stop_mac(atge_t *atgep) in atge_l1e_stop_mac() argument
829 reg = INL(atgep, ATGE_MAC_CFG); in atge_l1e_stop_mac()
830 ATGE_DB(("%s: %s() reg : %x", atgep->atge_name, __func__, reg)); in atge_l1e_stop_mac()
834 OUTL(atgep, ATGE_MAC_CFG, reg); in atge_l1e_stop_mac()
835 ATGE_DB(("%s: %s() mac stopped", atgep->atge_name, __func__)); in atge_l1e_stop_mac()
846 atge_t *atgep = (void *)arg1; in atge_l1e_interrupt() local
851 ASSERT(atgep != NULL); in atge_l1e_interrupt()
853 mutex_enter(&atgep->atge_intr_lock); in atge_l1e_interrupt()
855 if (atgep->atge_chip_state & ATGE_CHIP_SUSPENDED) { in atge_l1e_interrupt()
856 mutex_exit(&atgep->atge_intr_lock); in atge_l1e_interrupt()
860 status = INL(atgep, ATGE_INTR_STATUS); in atge_l1e_interrupt()
861 if (status == 0 || (status & atgep->atge_intrs) == 0) { in atge_l1e_interrupt()
862 mutex_exit(&atgep->atge_intr_lock); in atge_l1e_interrupt()
864 if (atgep->atge_flags & ATGE_FIXED_TYPE) in atge_l1e_interrupt()
871 atgep->atge_name, __func__, status)); in atge_l1e_interrupt()
877 OUTL(atgep, ATGE_INTR_STATUS, status | INTR_DIS_INT); in atge_l1e_interrupt()
878 FLUSH(atgep, ATGE_INTR_STATUS); in atge_l1e_interrupt()
883 if (atgep->atge_chip_state & ATGE_CHIP_RUNNING) { in atge_l1e_interrupt()
885 atge_l1e_gather_stats(atgep); in atge_l1e_interrupt()
892 atge_error(atgep->atge_dip, in atge_l1e_interrupt()
898 atge_error(atgep->atge_dip, "DMA transfer err"); in atge_l1e_interrupt()
900 atge_device_stop(atgep); in atge_l1e_interrupt()
905 atge_error(atgep->atge_dip, "TX FIFO underrun"); in atge_l1e_interrupt()
909 rx_head = atge_l1e_receive(atgep); in atge_l1e_interrupt()
914 mutex_enter(&atgep->atge_tx_lock); in atge_l1e_interrupt()
915 cons = INW(atgep, L1E_TPD_CONS_IDX); in atge_l1e_interrupt()
916 atge_tx_reclaim(atgep, cons); in atge_l1e_interrupt()
917 if (atgep->atge_tx_resched) { in atge_l1e_interrupt()
918 atgep->atge_tx_resched = 0; in atge_l1e_interrupt()
922 mutex_exit(&atgep->atge_tx_lock); in atge_l1e_interrupt()
929 OUTL(atgep, ATGE_INTR_STATUS, 0); in atge_l1e_interrupt()
933 mutex_exit(&atgep->atge_intr_lock); in atge_l1e_interrupt()
939 (void) atge_mii_read(atgep, in atge_l1e_interrupt()
940 atgep->atge_phyaddr, ATGE_ISR_ACK_GPHY); in atge_l1e_interrupt()
942 mii_check(atgep->atge_mii); in atge_l1e_interrupt()
949 mac_rx(atgep->atge_mh, 0, rx_head); in atge_l1e_interrupt()
956 mac_tx_update(atgep->atge_mh); in atge_l1e_interrupt()