Lines Matching defs:atgep

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