Lines Matching refs:atgep
126 atge_l1_alloc_dma(atge_t *atgep) in atge_l1_alloc_dma() argument
133 atgep->atge_private_data = l1; in atge_l1_alloc_dma()
138 atgep->atge_tx_buf_len = atgep->atge_mtu + in atge_l1_alloc_dma()
140 atgep->atge_tx_ring = kmem_alloc(sizeof (atge_ring_t), KM_SLEEP); in atge_l1_alloc_dma()
141 atgep->atge_tx_ring->r_atge = atgep; in atge_l1_alloc_dma()
142 atgep->atge_tx_ring->r_desc_ring = NULL; in atge_l1_alloc_dma()
143 dma = atge_alloc_a_dma_blk(atgep, &atge_l1_dma_attr_tx_desc, in atge_l1_alloc_dma()
146 atge_error(atgep->atge_dip, "DMA allocation failed for TX" in atge_l1_alloc_dma()
150 atgep->atge_tx_ring->r_desc_ring = dma; in atge_l1_alloc_dma()
155 err = atge_alloc_buffers(atgep->atge_tx_ring, ATGE_TX_RING_CNT, in atge_l1_alloc_dma()
156 atgep->atge_tx_buf_len, DDI_DMA_WRITE); in atge_l1_alloc_dma()
158 atge_error(atgep->atge_dip, "DMA allocation failed for" in atge_l1_alloc_dma()
166 atgep->atge_rx_buf_len = atgep->atge_mtu + in atge_l1_alloc_dma()
169 l1->atge_rx_ring->r_atge = atgep; in atge_l1_alloc_dma()
171 dma = atge_alloc_a_dma_blk(atgep, &atge_l1_dma_attr_rx_desc, in atge_l1_alloc_dma()
174 atge_error(atgep->atge_dip, "DMA allocation failed" in atge_l1_alloc_dma()
184 atgep->atge_rx_buf_len, DDI_DMA_WRITE); in atge_l1_alloc_dma()
186 atge_error(atgep->atge_dip, "DMA allocation failed for" in atge_l1_alloc_dma()
194 ATGE_DB(("%s: %s() L1_CMB_BLOCK_SZ : %x", atgep->atge_name, in atge_l1_alloc_dma()
197 dma = atge_alloc_a_dma_blk(atgep, &atge_l1_dma_attr_cmb, in atge_l1_alloc_dma()
201 atge_error(atgep->atge_dip, "DMA allocation failed for CMB"); in atge_l1_alloc_dma()
208 ATGE_DB(("%s: %s() L1_RR_RING_SZ : %x", atgep->atge_name, in atge_l1_alloc_dma()
211 dma = atge_alloc_a_dma_blk(atgep, &atge_l1_dma_attr_rr, in atge_l1_alloc_dma()
215 atge_error(atgep->atge_dip, "DMA allocation failed" in atge_l1_alloc_dma()
223 ATGE_DB(("%s: %s() L1_SMB_BLOCK_SZ : %x", atgep->atge_name, in atge_l1_alloc_dma()
226 dma = atge_alloc_a_dma_blk(atgep, &atge_l1_dma_attr_smb, in atge_l1_alloc_dma()
230 atge_error(atgep->atge_dip, "DMA allocation failed for SMB"); in atge_l1_alloc_dma()
234 atgep->atge_hw_stats = kmem_zalloc(sizeof (atge_l1_smb_t), KM_SLEEP); in atge_l1_alloc_dma()
240 atge_l1_free_dma(atge_t *atgep) in atge_l1_free_dma() argument
244 l1 = atgep->atge_private_data; in atge_l1_free_dma()
249 if (atgep->atge_tx_ring != NULL) { in atge_l1_free_dma()
250 atge_free_buffers(atgep->atge_tx_ring, ATGE_TX_RING_CNT); in atge_l1_free_dma()
252 if (atgep->atge_tx_ring->r_desc_ring != NULL) { in atge_l1_free_dma()
253 atge_free_a_dma_blk(atgep->atge_tx_ring->r_desc_ring); in atge_l1_free_dma()
256 kmem_free(atgep->atge_tx_ring, sizeof (atge_ring_t)); in atge_l1_free_dma()
257 atgep->atge_tx_ring = NULL; in atge_l1_free_dma()
292 if (atgep->atge_hw_stats != NULL) { in atge_l1_free_dma()
293 kmem_free(atgep->atge_hw_stats, sizeof (atge_l1_smb_t)); in atge_l1_free_dma()
294 atgep->atge_hw_stats = NULL; in atge_l1_free_dma()
299 atge_l1_init_rx_ring(atge_t *atgep) in atge_l1_init_rx_ring() argument
306 l1 = atgep->atge_private_data; in atge_l1_init_rx_ring()
325 atge_l1_init_tx_ring(atge_t *atgep) in atge_l1_init_tx_ring() argument
327 atgep->atge_tx_ring->r_producer = 0; in atge_l1_init_tx_ring()
328 atgep->atge_tx_ring->r_consumer = 0; in atge_l1_init_tx_ring()
329 atgep->atge_tx_ring->r_avail_desc = ATGE_TX_RING_CNT; in atge_l1_init_tx_ring()
331 bzero(atgep->atge_tx_ring->r_desc_ring->addr, ATGE_TX_RING_SZ); in atge_l1_init_tx_ring()
332 DMA_SYNC(atgep->atge_tx_ring->r_desc_ring, 0, ATGE_TX_RING_SZ, in atge_l1_init_tx_ring()
337 atge_l1_init_rr_ring(atge_t *atgep) in atge_l1_init_rr_ring() argument
342 l1 = atgep->atge_private_data; in atge_l1_init_rr_ring()
351 atge_l1_init_smb(atge_t *atgep) in atge_l1_init_smb() argument
356 l1 = atgep->atge_private_data; in atge_l1_init_smb()
363 atge_l1_init_cmb(atge_t *atgep) in atge_l1_init_cmb() argument
368 l1 = atgep->atge_private_data; in atge_l1_init_cmb()
375 atge_l1_sync_mbox(atge_t *atgep) in atge_l1_sync_mbox() argument
379 l1 = atgep->atge_private_data; in atge_l1_sync_mbox()
381 mutex_enter(&atgep->atge_mbox_lock); in atge_l1_sync_mbox()
382 OUTL(atgep, ATGE_MBOX, in atge_l1_sync_mbox()
387 ((atgep->atge_tx_ring->r_producer << MBOX_TD_PROD_IDX_SHIFT) & in atge_l1_sync_mbox()
389 mutex_exit(&atgep->atge_mbox_lock); in atge_l1_sync_mbox()
393 atge_l1_program_dma(atge_t *atgep) in atge_l1_program_dma() argument
398 l1 = atgep->atge_private_data; in atge_l1_program_dma()
401 r = atgep->atge_tx_ring; in atge_l1_program_dma()
402 OUTL(atgep, ATGE_DESC_ADDR_HI, in atge_l1_program_dma()
404 OUTL(atgep, ATGE_DESC_TPD_ADDR_LO, in atge_l1_program_dma()
409 OUTL(atgep, ATGE_DESC_RD_ADDR_LO, in atge_l1_program_dma()
413 OUTL(atgep, ATGE_DESC_RRD_ADDR_LO, in atge_l1_program_dma()
417 OUTL(atgep, ATGE_DESC_CMB_ADDR_LO, in atge_l1_program_dma()
421 OUTL(atgep, ATGE_DESC_SMB_ADDR_LO, in atge_l1_program_dma()
427 OUTL(atgep, ATGE_DESC_RRD_RD_CNT, in atge_l1_program_dma()
435 OUTL(atgep, ATGE_DESC_TPD_CNT, in atge_l1_program_dma()
441 OUTL(atgep, ATGE_DMA_BLOCK, DMA_BLOCK_LOAD); in atge_l1_program_dma()
446 atge_l1_sync_mbox(atgep); in atge_l1_program_dma()
450 atge_l1_gather_stats(atge_t *atgep) in atge_l1_gather_stats() argument
457 ASSERT(atgep != NULL); in atge_l1_gather_stats()
459 l1 = atgep->atge_private_data; in atge_l1_gather_stats()
462 stat = (atge_l1_smb_t *)atgep->atge_hw_stats; in atge_l1_gather_stats()
520 atgep->atge_brdcstrcv += smb->rx_bcast_frames; in atge_l1_gather_stats()
521 atgep->atge_multircv += smb->rx_mcast_frames; in atge_l1_gather_stats()
522 atgep->atge_multixmt += smb->tx_mcast_frames; in atge_l1_gather_stats()
523 atgep->atge_brdcstxmt += smb->tx_bcast_frames; in atge_l1_gather_stats()
525 atgep->atge_align_errors += smb->rx_alignerrs; in atge_l1_gather_stats()
526 atgep->atge_fcs_errors += smb->rx_crcerrs; in atge_l1_gather_stats()
527 atgep->atge_defer_xmts += smb->tx_deferred; in atge_l1_gather_stats()
528 atgep->atge_first_collisions += smb->tx_single_colls; in atge_l1_gather_stats()
529 atgep->atge_multi_collisions += smb->tx_multi_colls * 2; in atge_l1_gather_stats()
530 atgep->atge_tx_late_collisions += smb->tx_late_colls; in atge_l1_gather_stats()
531 atgep->atge_ex_collisions += smb->tx_excess_colls; in atge_l1_gather_stats()
532 atgep->atge_toolong_errors += smb->rx_lenerrs; in atge_l1_gather_stats()
533 atgep->atge_overflow += smb->rx_fifo_oflows; in atge_l1_gather_stats()
534 atgep->atge_underflow += (smb->tx_underrun + smb->tx_desc_underrun); in atge_l1_gather_stats()
535 atgep->atge_runt += smb->rx_runts; in atge_l1_gather_stats()
538 atgep->atge_collisions += smb->tx_single_colls + in atge_l1_gather_stats()
545 atgep->atge_macxmt_errors += smb->tx_late_colls + smb->tx_underrun; in atge_l1_gather_stats()
547 atgep->atge_macrcv_errors += smb->rx_crcerrs + smb->rx_lenerrs + in atge_l1_gather_stats()
556 atge_l1_stop_tx_mac(atge_t *atgep) in atge_l1_stop_tx_mac() argument
561 ATGE_DB(("%s: %s() called", atgep->atge_name, __func__)); in atge_l1_stop_tx_mac()
563 reg = INL(atgep, ATGE_MAC_CFG); in atge_l1_stop_tx_mac()
566 OUTL(atgep, ATGE_MAC_CFG, reg); in atge_l1_stop_tx_mac()
570 reg = INL(atgep, ATGE_DMA_CFG); in atge_l1_stop_tx_mac()
573 OUTL(atgep, ATGE_DMA_CFG, reg); in atge_l1_stop_tx_mac()
577 if ((INL(atgep, ATGE_IDLE_STATUS) & in atge_l1_stop_tx_mac()
585 atge_error(atgep->atge_dip, "stopping TX DMA Engine timeout"); in atge_l1_stop_tx_mac()
590 atge_l1_stop_rx_mac(atge_t *atgep) in atge_l1_stop_rx_mac() argument
595 ATGE_DB(("%s: %s() called", atgep->atge_name, __func__)); in atge_l1_stop_rx_mac()
597 reg = INL(atgep, ATGE_MAC_CFG); in atge_l1_stop_rx_mac()
600 OUTL(atgep, ATGE_MAC_CFG, reg); in atge_l1_stop_rx_mac()
604 reg = INL(atgep, ATGE_DMA_CFG); in atge_l1_stop_rx_mac()
607 OUTL(atgep, ATGE_DMA_CFG, reg); in atge_l1_stop_rx_mac()
611 if ((INL(atgep, ATGE_IDLE_STATUS) & in atge_l1_stop_rx_mac()
618 atge_error(atgep->atge_dip, " stopping RX DMA Engine timeout"); in atge_l1_stop_rx_mac()
626 atge_l1_rx(atge_t *atgep) in atge_l1_rx() argument
638 l1 = atgep->atge_private_data; in atge_l1_rx()
655 " rx_cons : %d, nsegs : %d", atgep->atge_name, __func__, in atge_l1_rx()
664 atge_error(atgep->atge_dip, "errored pkt"); in atge_l1_rx()
680 atgep->atge_ipackets++; in atge_l1_rx()
681 atgep->atge_rbytes += totlen; in atge_l1_rx()
690 slotlen = atgep->atge_mtu; in atge_l1_rx()
696 atgep->atge_name, __func__, totlen)); in atge_l1_rx()
698 if (slotlen > atgep->atge_rx_buf_len) { in atge_l1_rx()
699 atgep->atge_toolong_errors++; in atge_l1_rx()
701 atgep->atge_norcvbuf++; in atge_l1_rx()
723 atgep->atge_name, __func__, slotlen, rx_cons, in atge_l1_rx()
757 atge_l1_sync_mbox(atgep); in atge_l1_rx()
761 atgep->atge_name, __func__, l1->atge_rx_ring->r_consumer, in atge_l1_rx()
776 atge_t *atgep = (void *)arg1; in atge_l1_interrupt() local
781 ASSERT(atgep != NULL); in atge_l1_interrupt()
783 mutex_enter(&atgep->atge_intr_lock); in atge_l1_interrupt()
785 if (atgep->atge_chip_state & ATGE_CHIP_SUSPENDED) { in atge_l1_interrupt()
786 mutex_exit(&atgep->atge_intr_lock); in atge_l1_interrupt()
790 status = INL(atgep, ATGE_INTR_STATUS); in atge_l1_interrupt()
791 if (status == 0 || (status & atgep->atge_intrs) == 0) { in atge_l1_interrupt()
792 mutex_exit(&atgep->atge_intr_lock); in atge_l1_interrupt()
794 if (atgep->atge_flags & ATGE_FIXED_TYPE) in atge_l1_interrupt()
801 atgep->atge_name, __func__, status)); in atge_l1_interrupt()
806 OUTL(atgep, ATGE_INTR_STATUS, status | INTR_DIS_INT); in atge_l1_interrupt()
807 FLUSH(atgep, ATGE_INTR_STATUS); in atge_l1_interrupt()
812 if (atgep->atge_chip_state & ATGE_CHIP_RUNNING) { in atge_l1_interrupt()
816 l1 = atgep->atge_private_data; in atge_l1_interrupt()
834 atgep->atge_name, __func__, l1->atge_l1_intr_status, in atge_l1_interrupt()
858 atgep->atge_name, __func__, in atge_l1_interrupt()
862 mutex_enter(&atgep->atge_tx_lock); in atge_l1_interrupt()
863 atge_device_restart(atgep); in atge_l1_interrupt()
864 mutex_exit(&atgep->atge_tx_lock); in atge_l1_interrupt()
868 rx_head = atge_l1_rx(atgep); in atge_l1_interrupt()
871 atge_l1_gather_stats(atgep); in atge_l1_interrupt()
874 mutex_enter(&atgep->atge_tx_lock); in atge_l1_interrupt()
875 atge_tx_reclaim(atgep, l1->atge_l1_tx_prod_cons); in atge_l1_interrupt()
876 if (atgep->atge_tx_resched) { in atge_l1_interrupt()
877 atgep->atge_tx_resched = 0; in atge_l1_interrupt()
881 mutex_exit(&atgep->atge_tx_lock); in atge_l1_interrupt()
885 atge_error(atgep->atge_dip, in atge_l1_interrupt()
889 atgep->atge_name, __func__)); in atge_l1_interrupt()
891 atge_device_stop(atgep); in atge_l1_interrupt()
898 OUTL(atgep, ATGE_INTR_STATUS, INTR_DIS_DMA | INTR_DIS_SM); in atge_l1_interrupt()
899 mutex_exit(&atgep->atge_intr_lock); in atge_l1_interrupt()
901 if (status & INTR_GPHY || atgep->atge_flags & ATGE_MII_CHECK) { in atge_l1_interrupt()
903 atgep->atge_name, __func__)); in atge_l1_interrupt()
906 (void) atge_mii_read(atgep, in atge_l1_interrupt()
907 atgep->atge_phyaddr, ATGE_ISR_ACK_GPHY); in atge_l1_interrupt()
910 atgep->atge_flags &= ~ATGE_MII_CHECK; in atge_l1_interrupt()
911 mii_reset(atgep->atge_mii); in atge_l1_interrupt()
918 mac_rx(atgep->atge_mh, 0, rx_head); in atge_l1_interrupt()
922 mac_rx(atgep->atge_mh, 0, rx_head1); in atge_l1_interrupt()
929 mac_tx_update(atgep->atge_mh); in atge_l1_interrupt()