Lines Matching refs:atgep

154 atge_l1c_alloc_dma(atge_t *atgep)  in atge_l1c_alloc_dma()  argument
161 atgep->atge_private_data = l1c; in atge_l1c_alloc_dma()
166 atgep->atge_tx_buf_len = atgep->atge_mtu + in atge_l1c_alloc_dma()
168 atgep->atge_tx_ring = kmem_alloc(sizeof (atge_ring_t), KM_SLEEP); in atge_l1c_alloc_dma()
169 atgep->atge_tx_ring->r_atge = atgep; in atge_l1c_alloc_dma()
170 atgep->atge_tx_ring->r_desc_ring = NULL; in atge_l1c_alloc_dma()
171 dma = atge_alloc_a_dma_blk(atgep, &atge_l1c_dma_attr_tx_desc, in atge_l1c_alloc_dma()
174 atge_error(atgep->atge_dip, "DMA allocation failed for TX" in atge_l1c_alloc_dma()
178 atgep->atge_tx_ring->r_desc_ring = dma; in atge_l1c_alloc_dma()
183 err = atge_alloc_buffers(atgep->atge_tx_ring, ATGE_TX_RING_CNT, in atge_l1c_alloc_dma()
184 atgep->atge_tx_buf_len, DDI_DMA_WRITE); in atge_l1c_alloc_dma()
186 atge_error(atgep->atge_dip, "DMA allocation failed for" in atge_l1c_alloc_dma()
194 atgep->atge_rx_buf_len = atgep->atge_mtu + in atge_l1c_alloc_dma()
197 l1c->atge_rx_ring->r_atge = atgep; in atge_l1c_alloc_dma()
199 dma = atge_alloc_a_dma_blk(atgep, &atge_l1c_dma_attr_rx_desc, in atge_l1c_alloc_dma()
202 atge_error(atgep->atge_dip, "DMA allocation failed" in atge_l1c_alloc_dma()
212 atgep->atge_rx_buf_len, DDI_DMA_READ); in atge_l1c_alloc_dma()
214 atge_error(atgep->atge_dip, "DMA allocation failed for" in atge_l1c_alloc_dma()
222 ATGE_DB(("%s: %s() L1C_CMB_BLOCK_SZ : 0x%x", atgep->atge_name, in atge_l1c_alloc_dma()
225 dma = atge_alloc_a_dma_blk(atgep, &atge_l1c_dma_attr_cmb, in atge_l1c_alloc_dma()
229 atge_error(atgep->atge_dip, "DMA allocation failed for CMB"); in atge_l1c_alloc_dma()
236 ATGE_DB(("%s: %s() L1C_RR_RING_SZ : 0x%x", atgep->atge_name, in atge_l1c_alloc_dma()
239 dma = atge_alloc_a_dma_blk(atgep, &atge_l1c_dma_attr_rr, in atge_l1c_alloc_dma()
243 atge_error(atgep->atge_dip, "DMA allocation failed" in atge_l1c_alloc_dma()
251 ATGE_DB(("%s: %s() L1C_SMB_BLOCK_SZ : 0x%x", atgep->atge_name, in atge_l1c_alloc_dma()
254 dma = atge_alloc_a_dma_blk(atgep, &atge_l1c_dma_attr_smb, in atge_l1c_alloc_dma()
258 atge_error(atgep->atge_dip, "DMA allocation failed for SMB"); in atge_l1c_alloc_dma()
262 atgep->atge_hw_stats = kmem_zalloc(sizeof (atge_l1c_smb_t), KM_SLEEP); in atge_l1c_alloc_dma()
268 atge_l1c_free_dma(atge_t *atgep) in atge_l1c_free_dma() argument
272 l1c = atgep->atge_private_data; in atge_l1c_free_dma()
277 if (atgep->atge_tx_ring != NULL) { in atge_l1c_free_dma()
278 atge_free_buffers(atgep->atge_tx_ring, ATGE_TX_RING_CNT); in atge_l1c_free_dma()
280 if (atgep->atge_tx_ring->r_desc_ring != NULL) { in atge_l1c_free_dma()
281 atge_free_a_dma_blk(atgep->atge_tx_ring->r_desc_ring); in atge_l1c_free_dma()
284 kmem_free(atgep->atge_tx_ring, sizeof (atge_ring_t)); in atge_l1c_free_dma()
285 atgep->atge_tx_ring = NULL; in atge_l1c_free_dma()
320 if (atgep->atge_hw_stats != NULL) { in atge_l1c_free_dma()
321 kmem_free(atgep->atge_hw_stats, sizeof (atge_l1c_smb_t)); in atge_l1c_free_dma()
322 atgep->atge_hw_stats = NULL; in atge_l1c_free_dma()
330 atgep->atge_private_data = NULL; in atge_l1c_free_dma()
335 atge_l1c_init_rx_ring(atge_t *atgep) in atge_l1c_init_rx_ring() argument
342 l1c = atgep->atge_private_data; in atge_l1c_init_rx_ring()
358 OUTL(atgep, ATGE_MBOX_RD0_PROD_IDX, l1c->atge_rx_ring->r_consumer); in atge_l1c_init_rx_ring()
362 atge_l1c_init_tx_ring(atge_t *atgep) in atge_l1c_init_tx_ring() argument
364 atgep->atge_tx_ring->r_producer = 0; in atge_l1c_init_tx_ring()
365 atgep->atge_tx_ring->r_consumer = 0; in atge_l1c_init_tx_ring()
366 atgep->atge_tx_ring->r_avail_desc = ATGE_TX_RING_CNT; in atge_l1c_init_tx_ring()
368 bzero(atgep->atge_tx_ring->r_desc_ring->addr, ATGE_TX_RING_SZ); in atge_l1c_init_tx_ring()
369 DMA_SYNC(atgep->atge_tx_ring->r_desc_ring, 0, 0, DDI_DMA_SYNC_FORDEV); in atge_l1c_init_tx_ring()
373 atge_l1c_init_rr_ring(atge_t *atgep) in atge_l1c_init_rr_ring() argument
378 l1c = atgep->atge_private_data; in atge_l1c_init_rr_ring()
387 atge_l1c_init_smb(atge_t *atgep) in atge_l1c_init_smb() argument
392 l1c = atgep->atge_private_data; in atge_l1c_init_smb()
399 atge_l1c_init_cmb(atge_t *atgep) in atge_l1c_init_cmb() argument
404 l1c = atgep->atge_private_data; in atge_l1c_init_cmb()
411 atge_l1c_program_dma(atge_t *atgep) in atge_l1c_program_dma() argument
417 l1c = atgep->atge_private_data; in atge_l1c_program_dma()
423 (void) INL(atgep, ATGE_WOL_CFG); in atge_l1c_program_dma()
424 OUTL(atgep, ATGE_WOL_CFG, 0); in atge_l1c_program_dma()
427 r = atgep->atge_tx_ring; in atge_l1c_program_dma()
428 OUTL(atgep, L1C_TX_BASE_ADDR_HI, in atge_l1c_program_dma()
430 OUTL(atgep, L1C_TDL_HEAD_ADDR_LO, in atge_l1c_program_dma()
433 OUTL(atgep, L1C_TDH_HEAD_ADDR_LO, 0); in atge_l1c_program_dma()
437 OUTL(atgep, L1C_RX_BASE_ADDR_HI, in atge_l1c_program_dma()
439 OUTL(atgep, L1C_RD0_HEAD_ADDR_LO, in atge_l1c_program_dma()
442 OUTL(atgep, L1C_RD1_HEAD_ADDR_LO, 0); in atge_l1c_program_dma()
443 OUTL(atgep, L1C_RD2_HEAD_ADDR_LO, 0); in atge_l1c_program_dma()
444 OUTL(atgep, L1C_RD3_HEAD_ADDR_LO, 0); in atge_l1c_program_dma()
457 OUTL(atgep, L1C_RX_BUF_SIZE, RX_BUF_SIZE_MAX); /* XXX */ in atge_l1c_program_dma()
460 OUTL(atgep, L1C_RRD0_HEAD_ADDR_LO, in atge_l1c_program_dma()
463 OUTL(atgep, L1C_RRD1_HEAD_ADDR_LO, 0); in atge_l1c_program_dma()
464 OUTL(atgep, L1C_RRD2_HEAD_ADDR_LO, 0); in atge_l1c_program_dma()
465 OUTL(atgep, L1C_RRD3_HEAD_ADDR_LO, 0); in atge_l1c_program_dma()
468 OUTL(atgep, L1C_CMB_BASE_ADDR_LO, in atge_l1c_program_dma()
472 OUTL(atgep, L1C_SMB_BASE_ADDR_HI, in atge_l1c_program_dma()
474 OUTL(atgep, L1C_SMB_BASE_ADDR_LO, in atge_l1c_program_dma()
481 OUTL(atgep, L1C_RD_RING_CNT, in atge_l1c_program_dma()
484 OUTL(atgep, L1C_RRD_RING_CNT, in atge_l1c_program_dma()
490 OUTL(atgep, L1C_TD_RING_CNT, in atge_l1c_program_dma()
493 switch (ATGE_DID(atgep)) { in atge_l1c_program_dma()
496 OUTL(atgep, L1C_SRAM_RX_FIFO_LEN, 0x000002A0); in atge_l1c_program_dma()
497 OUTL(atgep, L1C_SRAM_TX_FIFO_LEN, 0x00000100); in atge_l1c_program_dma()
498 OUTL(atgep, L1C_SRAM_RX_FIFO_ADDR, 0x029F0000); in atge_l1c_program_dma()
499 OUTL(atgep, L1C_SRAM_RD_ADDR, 0x02BF02A0); in atge_l1c_program_dma()
500 OUTL(atgep, L1C_SRAM_TX_FIFO_ADDR, 0x03BF02C0); in atge_l1c_program_dma()
501 OUTL(atgep, L1C_SRAM_TRD_ADDR, 0x03DF03C0); in atge_l1c_program_dma()
502 OUTL(atgep, L1C_TXF_WATER_MARK, 0x00000000); in atge_l1c_program_dma()
503 OUTL(atgep, L1C_RD_DMA_CFG, 0x00000000); in atge_l1c_program_dma()
510 OUTL(atgep, ATGE_DMA_BLOCK, DMA_BLOCK_LOAD); in atge_l1c_program_dma()
513 reg = ATGE_USECS(atgep->atge_int_rx_mod) << IM_TIMER_RX_SHIFT; in atge_l1c_program_dma()
514 reg |= ATGE_USECS(atgep->atge_int_tx_mod) << IM_TIMER_TX_SHIFT; in atge_l1c_program_dma()
515 OUTL(atgep, ATGE_IM_TIMER, reg); in atge_l1c_program_dma()
521 if (ATGE_USECS(atgep->atge_int_rx_mod) != 0) in atge_l1c_program_dma()
523 if (ATGE_USECS(atgep->atge_int_tx_mod) != 0) in atge_l1c_program_dma()
525 OUTL(atgep, ATGE_MASTER_CFG, reg); in atge_l1c_program_dma()
529 atge_l1c_clear_stats(atge_t *atgep) in atge_l1c_clear_stats() argument
541 (void) INL(atgep, ATGE_RX_MIB_BASE + i); in atge_l1c_clear_stats()
551 (void) INL(atgep, ATGE_TX_MIB_BASE + i); in atge_l1c_clear_stats()
557 atge_l1c_gather_stats(atge_t *atgep) in atge_l1c_gather_stats() argument
564 ASSERT(atgep != NULL); in atge_l1c_gather_stats()
566 l1c = atgep->atge_private_data; in atge_l1c_gather_stats()
569 stat = (atge_l1c_smb_t *)atgep->atge_hw_stats; in atge_l1c_gather_stats()
627 atgep->atge_brdcstrcv += smb->rx_bcast_frames; in atge_l1c_gather_stats()
628 atgep->atge_multircv += smb->rx_mcast_frames; in atge_l1c_gather_stats()
629 atgep->atge_multixmt += smb->tx_mcast_frames; in atge_l1c_gather_stats()
630 atgep->atge_brdcstxmt += smb->tx_bcast_frames; in atge_l1c_gather_stats()
632 atgep->atge_align_errors += smb->rx_alignerrs; in atge_l1c_gather_stats()
633 atgep->atge_fcs_errors += smb->rx_crcerrs; in atge_l1c_gather_stats()
634 atgep->atge_defer_xmts += smb->tx_deferred; in atge_l1c_gather_stats()
635 atgep->atge_first_collisions += smb->tx_single_colls; in atge_l1c_gather_stats()
636 atgep->atge_multi_collisions += smb->tx_multi_colls * 2; in atge_l1c_gather_stats()
637 atgep->atge_tx_late_collisions += smb->tx_late_colls; in atge_l1c_gather_stats()
638 atgep->atge_ex_collisions += smb->tx_excess_colls; in atge_l1c_gather_stats()
639 atgep->atge_toolong_errors += smb->rx_lenerrs; in atge_l1c_gather_stats()
640 atgep->atge_overflow += smb->rx_fifo_oflows; in atge_l1c_gather_stats()
641 atgep->atge_underflow += (smb->tx_underrun + smb->tx_desc_underrun); in atge_l1c_gather_stats()
642 atgep->atge_runt += smb->rx_runts; in atge_l1c_gather_stats()
645 atgep->atge_collisions += smb->tx_single_colls + in atge_l1c_gather_stats()
652 atgep->atge_macxmt_errors += smb->tx_late_colls + smb->tx_underrun; in atge_l1c_gather_stats()
654 atgep->atge_macrcv_errors += smb->rx_crcerrs + smb->rx_lenerrs + in atge_l1c_gather_stats()
663 atge_l1c_stop_tx_mac(atge_t *atgep) in atge_l1c_stop_tx_mac() argument
668 ATGE_DB(("%s: %s() called", atgep->atge_name, __func__)); in atge_l1c_stop_tx_mac()
670 reg = INL(atgep, ATGE_MAC_CFG); in atge_l1c_stop_tx_mac()
673 OUTL(atgep, ATGE_MAC_CFG, reg); in atge_l1c_stop_tx_mac()
677 reg = INL(atgep, ATGE_DMA_CFG); in atge_l1c_stop_tx_mac()
680 OUTL(atgep, ATGE_DMA_CFG, reg); in atge_l1c_stop_tx_mac()
684 if ((INL(atgep, ATGE_IDLE_STATUS) & in atge_l1c_stop_tx_mac()
693 atge_error(atgep->atge_dip, "stopping TX DMA Engine timeout"); in atge_l1c_stop_tx_mac()
698 atge_l1c_stop_rx_mac(atge_t *atgep) in atge_l1c_stop_rx_mac() argument
703 ATGE_DB(("%s: %s() called", atgep->atge_name, __func__)); in atge_l1c_stop_rx_mac()
705 reg = INL(atgep, ATGE_MAC_CFG); in atge_l1c_stop_rx_mac()
708 OUTL(atgep, ATGE_MAC_CFG, reg); in atge_l1c_stop_rx_mac()
712 reg = INL(atgep, ATGE_DMA_CFG); in atge_l1c_stop_rx_mac()
715 OUTL(atgep, ATGE_DMA_CFG, reg); in atge_l1c_stop_rx_mac()
719 if ((INL(atgep, ATGE_IDLE_STATUS) & in atge_l1c_stop_rx_mac()
727 atge_error(atgep->atge_dip, " stopping RX DMA Engine timeout"); in atge_l1c_stop_rx_mac()
735 atge_l1c_rx(atge_t *atgep) in atge_l1c_rx() argument
746 l1c = atgep->atge_private_data; in atge_l1c_rx()
763 " rx_cons : %d, nsegs : %d", atgep->atge_name, __func__, in atge_l1c_rx()
773 atge_error(atgep->atge_dip, "errored pkt"); in atge_l1c_rx()
789 atgep->atge_ipackets++; in atge_l1c_rx()
790 atgep->atge_rbytes += totlen; in atge_l1c_rx()
799 slotlen = atgep->atge_mtu; in atge_l1c_rx()
805 atgep->atge_name, __func__, totlen)); in atge_l1c_rx()
807 if (slotlen > atgep->atge_rx_buf_len) { in atge_l1c_rx()
808 atgep->atge_toolong_errors++; in atge_l1c_rx()
810 atgep->atge_norcvbuf++; in atge_l1c_rx()
820 slotlen = min(atgep->atge_max_frame_size, totlen); in atge_l1c_rx()
827 atgep->atge_name, __func__, slotlen, rx_cons, in atge_l1c_rx()
864 OUTL(atgep, ATGE_MBOX_RD0_PROD_IDX, in atge_l1c_rx()
869 atgep->atge_name, __func__, l1c->atge_rx_ring->r_consumer, in atge_l1c_rx()
884 atge_t *atgep = (void *)arg1; in atge_l1c_interrupt() local
889 ASSERT(atgep != NULL); in atge_l1c_interrupt()
891 mutex_enter(&atgep->atge_intr_lock); in atge_l1c_interrupt()
893 if (atgep->atge_chip_state & ATGE_CHIP_SUSPENDED) { in atge_l1c_interrupt()
894 mutex_exit(&atgep->atge_intr_lock); in atge_l1c_interrupt()
898 status = INL(atgep, ATGE_INTR_STATUS); in atge_l1c_interrupt()
899 if (status == 0 || (status & atgep->atge_intrs) == 0) { in atge_l1c_interrupt()
900 mutex_exit(&atgep->atge_intr_lock); in atge_l1c_interrupt()
902 if (atgep->atge_flags & ATGE_FIXED_TYPE) in atge_l1c_interrupt()
909 atgep->atge_name, __func__, status)); in atge_l1c_interrupt()
916 (void) atge_mii_read(atgep, in atge_l1c_interrupt()
917 atgep->atge_phyaddr, ATGE_ISR_ACK_GPHY); in atge_l1c_interrupt()
920 OUTL(atgep, ATGE_INTR_STATUS, status | L1C_INTR_DIS_INT); in atge_l1c_interrupt()
921 FLUSH(atgep, ATGE_INTR_STATUS); in atge_l1c_interrupt()
926 if (atgep->atge_chip_state & ATGE_CHIP_RUNNING) { in atge_l1c_interrupt()
929 l1c = atgep->atge_private_data; in atge_l1c_interrupt()
934 atgep->atge_name, __func__, l1c->atge_l1c_intr_status, in atge_l1c_interrupt()
939 atge_l1c_gather_stats(atgep); in atge_l1c_interrupt()
947 atge_error(atgep->atge_dip, in atge_l1c_interrupt()
952 atge_error(atgep->atge_dip, in atge_l1c_interrupt()
956 atge_error(atgep->atge_dip, in atge_l1c_interrupt()
960 atge_error(atgep->atge_dip, in atge_l1c_interrupt()
965 atge_device_stop(atgep); in atge_l1c_interrupt()
974 rx_head = atge_l1c_rx(atgep); in atge_l1c_interrupt()
978 mutex_enter(&atgep->atge_tx_lock); in atge_l1c_interrupt()
979 cons = INL(atgep, ATGE_MBOX_TD_CONS_IDX) >> 16; in atge_l1c_interrupt()
980 atge_tx_reclaim(atgep, cons); in atge_l1c_interrupt()
981 if (atgep->atge_tx_resched) { in atge_l1c_interrupt()
982 atgep->atge_tx_resched = 0; in atge_l1c_interrupt()
986 mutex_exit(&atgep->atge_tx_lock); in atge_l1c_interrupt()
991 OUTL(atgep, ATGE_INTR_STATUS, 0); in atge_l1c_interrupt()
994 mutex_exit(&atgep->atge_intr_lock); in atge_l1c_interrupt()
999 atgep->atge_name, __func__)); in atge_l1c_interrupt()
1000 mii_check(atgep->atge_mii); in atge_l1c_interrupt()
1007 mac_rx(atgep->atge_mh, 0, rx_head); in atge_l1c_interrupt()
1014 mac_tx_update(atgep->atge_mh); in atge_l1c_interrupt()
1022 atge_t *atgep; in atge_l1c_send_packet() local
1024 atgep = r->r_atge; in atge_l1c_send_packet()
1026 mutex_enter(&atgep->atge_mbox_lock); in atge_l1c_send_packet()
1028 DMA_SYNC(atgep->atge_tx_ring->r_desc_ring, 0, 0, DDI_DMA_SYNC_FORDEV); in atge_l1c_send_packet()
1030 OUTL(atgep, ATGE_MBOX_TD_PROD_IDX, in atge_l1c_send_packet()
1031 (atgep->atge_tx_ring->r_producer << MBOX_TD_PROD_LO_IDX_SHIFT) & in atge_l1c_send_packet()
1033 mutex_exit(&atgep->atge_mbox_lock); in atge_l1c_send_packet()