Lines Matching refs:ngep

43 uint8_t nge_reg_get8(nge_t *ngep, nge_regno_t regno);
47 nge_reg_get8(nge_t *ngep, nge_regno_t regno) in nge_reg_get8() argument
49 NGE_TRACE(("nge_reg_get8($%p, 0x%lx)", (void *)ngep, regno)); in nge_reg_get8()
51 return (ddi_get8(ngep->io_handle, PIO_ADDR(ngep, regno))); in nge_reg_get8()
54 void nge_reg_put8(nge_t *ngep, nge_regno_t regno, uint8_t data);
58 nge_reg_put8(nge_t *ngep, nge_regno_t regno, uint8_t data) in nge_reg_put8() argument
61 (void *)ngep, regno, data)); in nge_reg_put8()
62 ddi_put8(ngep->io_handle, PIO_ADDR(ngep, regno), data); in nge_reg_put8()
66 uint16_t nge_reg_get16(nge_t *ngep, nge_regno_t regno);
70 nge_reg_get16(nge_t *ngep, nge_regno_t regno) in nge_reg_get16() argument
72 NGE_TRACE(("nge_reg_get16($%p, 0x%lx)", (void *)ngep, regno)); in nge_reg_get16()
73 return (ddi_get16(ngep->io_handle, PIO_ADDR(ngep, regno))); in nge_reg_get16()
76 void nge_reg_put16(nge_t *ngep, nge_regno_t regno, uint16_t data);
80 nge_reg_put16(nge_t *ngep, nge_regno_t regno, uint16_t data) in nge_reg_put16() argument
83 (void *)ngep, regno, data)); in nge_reg_put16()
84 ddi_put16(ngep->io_handle, PIO_ADDR(ngep, regno), data); in nge_reg_put16()
88 uint32_t nge_reg_get32(nge_t *ngep, nge_regno_t regno);
92 nge_reg_get32(nge_t *ngep, nge_regno_t regno) in nge_reg_get32() argument
94 NGE_TRACE(("nge_reg_get32($%p, 0x%lx)", (void *)ngep, regno)); in nge_reg_get32()
95 return (ddi_get32(ngep->io_handle, PIO_ADDR(ngep, regno))); in nge_reg_get32()
98 void nge_reg_put32(nge_t *ngep, nge_regno_t regno, uint32_t data);
102 nge_reg_put32(nge_t *ngep, nge_regno_t regno, uint32_t data) in nge_reg_put32() argument
105 (void *)ngep, regno, data)); in nge_reg_put32()
106 ddi_put32(ngep->io_handle, PIO_ADDR(ngep, regno), data); in nge_reg_put32()
111 static int nge_chip_peek_cfg(nge_t *ngep, nge_peekpoke_t *ppd);
115 nge_chip_peek_cfg(nge_t *ngep, nge_peekpoke_t *ppd) in nge_chip_peek_cfg() argument
122 (void *)ngep, (void *)ppd)); in nge_chip_peek_cfg()
129 regval = pci_config_get8(ngep->cfg_handle, regno); in nge_chip_peek_cfg()
133 regval = pci_config_get16(ngep->cfg_handle, regno); in nge_chip_peek_cfg()
137 regval = pci_config_get32(ngep->cfg_handle, regno); in nge_chip_peek_cfg()
141 regval = pci_config_get64(ngep->cfg_handle, regno); in nge_chip_peek_cfg()
148 static int nge_chip_poke_cfg(nge_t *ngep, nge_peekpoke_t *ppd);
151 nge_chip_poke_cfg(nge_t *ngep, nge_peekpoke_t *ppd) in nge_chip_poke_cfg() argument
158 (void *)ngep, (void *)ppd)); in nge_chip_poke_cfg()
166 pci_config_put8(ngep->cfg_handle, regno, regval); in nge_chip_poke_cfg()
170 pci_config_put16(ngep->cfg_handle, regno, regval); in nge_chip_poke_cfg()
174 pci_config_put32(ngep->cfg_handle, regno, regval); in nge_chip_poke_cfg()
178 pci_config_put64(ngep->cfg_handle, regno, regval); in nge_chip_poke_cfg()
186 static int nge_chip_peek_reg(nge_t *ngep, nge_peekpoke_t *ppd);
189 nge_chip_peek_reg(nge_t *ngep, nge_peekpoke_t *ppd) in nge_chip_peek_reg() argument
196 (void *)ngep, (void *)ppd)); in nge_chip_peek_reg()
199 regaddr = PIO_ADDR(ngep, ppd->pp_acc_offset); in nge_chip_peek_reg()
203 regval = ddi_get8(ngep->io_handle, regaddr); in nge_chip_peek_reg()
207 regval = ddi_get16(ngep->io_handle, regaddr); in nge_chip_peek_reg()
211 regval = ddi_get32(ngep->io_handle, regaddr); in nge_chip_peek_reg()
215 regval = ddi_get64(ngep->io_handle, regaddr); in nge_chip_peek_reg()
226 static int nge_chip_poke_reg(nge_t *ngep, nge_peekpoke_t *ppd);
229 nge_chip_poke_reg(nge_t *ngep, nge_peekpoke_t *ppd) in nge_chip_poke_reg() argument
236 (void *)ngep, (void *)ppd)); in nge_chip_poke_reg()
239 regaddr = PIO_ADDR(ngep, ppd->pp_acc_offset); in nge_chip_poke_reg()
244 ddi_put8(ngep->io_handle, regaddr, regval); in nge_chip_poke_reg()
248 ddi_put16(ngep->io_handle, regaddr, regval); in nge_chip_poke_reg()
252 ddi_put32(ngep->io_handle, regaddr, regval); in nge_chip_poke_reg()
256 ddi_put64(ngep->io_handle, regaddr, regval); in nge_chip_poke_reg()
262 static int nge_chip_peek_mii(nge_t *ngep, nge_peekpoke_t *ppd);
266 nge_chip_peek_mii(nge_t *ngep, nge_peekpoke_t *ppd) in nge_chip_peek_mii() argument
271 ppd->pp_acc_data = nge_mii_get16(ngep, ppd->pp_acc_offset/2); in nge_chip_peek_mii()
275 static int nge_chip_poke_mii(nge_t *ngep, nge_peekpoke_t *ppd);
279 nge_chip_poke_mii(nge_t *ngep, nge_peekpoke_t *ppd) in nge_chip_poke_mii() argument
283 nge_mii_put16(ngep, ppd->pp_acc_offset/2, ppd->pp_acc_data); in nge_chip_poke_mii()
307 nge_seeprom_access(nge_t *ngep, uint32_t cmd, nge_regno_t addr, uint16_t *dp) in nge_seeprom_access() argument
314 (void *)ngep, cmd, addr, (void *)dp)); in nge_seeprom_access()
316 ASSERT(mutex_owned(ngep->genlock)); in nge_seeprom_access()
329 cmd_reg.cmd_val = nge_reg_get32(ngep, NGE_EP_CMD); in nge_seeprom_access()
334 cmd_reg.cmd_val = nge_reg_get32(ngep, NGE_EP_CMD); in nge_seeprom_access()
343 nge_reg_put32(ngep, NGE_EP_CMD, cmd_reg.cmd_val); in nge_seeprom_access()
348 cmd_reg.cmd_val = nge_reg_get32(ngep, NGE_EP_CMD); in nge_seeprom_access()
353 cmd_reg.cmd_val = nge_reg_get32(ngep, NGE_EP_CMD); in nge_seeprom_access()
364 nge_reg_put32(ngep, NGE_EP_CMD, cmd_reg.cmd_val); in nge_seeprom_access()
370 cmd_reg.cmd_val = nge_reg_get32(ngep, NGE_EP_CMD); in nge_seeprom_access()
375 cmd_reg.cmd_val = nge_reg_get32(ngep, NGE_EP_CMD); in nge_seeprom_access()
379 nge_report(ngep, NGE_HW_ROM); in nge_seeprom_access()
391 data_reg.data_val = nge_reg_get32(ngep, NGE_EP_DATA); in nge_seeprom_access()
396 data_reg.data_val = nge_reg_get32(ngep, NGE_EP_DATA); in nge_seeprom_access()
398 nge_reg_put32(ngep, NGE_EP_DATA, data_reg.data_val); in nge_seeprom_access()
407 nge_chip_peek_seeprom(nge_t *ngep, nge_peekpoke_t *ppd) in nge_chip_peek_seeprom() argument
412 err = nge_seeprom_access(ngep, SEEPROM_CMD_READ, in nge_chip_peek_seeprom()
419 nge_chip_poke_seeprom(nge_t *ngep, nge_peekpoke_t *ppd) in nge_chip_poke_seeprom() argument
425 err = nge_seeprom_access(ngep, SEEPROM_CMD_WRITE, in nge_chip_poke_seeprom()
432 nge_init_dev_spec_param(nge_t *ngep) in nge_init_dev_spec_param() argument
437 dev_param_p = &ngep->dev_spec_param; in nge_init_dev_spec_param()
438 infop = (chip_info_t *)&ngep->chipinfo; in nge_init_dev_spec_param()
583 void nge_chip_cfg_init(nge_t *ngep, chip_info_t *infop, boolean_t reset);
587 nge_chip_cfg_init(nge_t *ngep, chip_info_t *infop, boolean_t reset) in nge_chip_cfg_init() argument
596 (void *)ngep, (void *)infop, reset)); in nge_chip_cfg_init()
605 handle = ngep->cfg_handle; in nge_chip_cfg_init()
678 nge_chip_stop(nge_t *ngep, boolean_t fault) in nge_chip_stop() argument
694 NGE_TRACE(("nge_chip_stop($%p, %d)", (void *)ngep, fault)); in nge_chip_stop()
699 mintr_src.src_val = nge_reg_get8(ngep, NGE_MINTR_SRC); in nge_chip_stop()
700 nge_reg_put8(ngep, NGE_MINTR_SRC, mintr_src.src_val); in nge_chip_stop()
703 reg_val = nge_reg_get32(ngep, NGE_INTR_MASK); in nge_chip_stop()
705 nge_reg_put32(ngep, NGE_INTR_MASK, reg_val); in nge_chip_stop()
708 mii_cs.cs_val = nge_reg_get32(ngep, NGE_MII_CS); in nge_chip_stop()
710 nge_reg_put32(ngep, NGE_MII_CS, mii_cs.cs_val); in nge_chip_stop()
713 mode.mode_val = nge_reg_get32(ngep, NGE_MODE_CNTL); in nge_chip_stop()
715 mode.mode_bits.desc_type = ngep->desc_mode; in nge_chip_stop()
716 nge_reg_put32(ngep, NGE_MODE_CNTL, mode.mode_val); in nge_chip_stop()
720 mode.mode_val = nge_reg_get32(ngep, NGE_MODE_CNTL); in nge_chip_stop()
725 ngep->nge_chip_state = NGE_CHIP_ERROR; in nge_chip_stop()
730 rx_en.val = nge_reg_get8(ngep, NGE_RX_EN); in nge_chip_stop()
732 nge_reg_put8(ngep, NGE_RX_EN, rx_en.val); in nge_chip_stop()
735 tx_en.val = nge_reg_get8(ngep, NGE_TX_EN); in nge_chip_stop()
737 nge_reg_put8(ngep, NGE_TX_EN, tx_en.val); in nge_chip_stop()
743 tx_sta.sta_val = nge_reg_get32(ngep, NGE_TX_STA); in nge_chip_stop()
748 tx_sta.sta_val = nge_reg_get32(ngep, NGE_TX_STA); in nge_chip_stop()
751 ngep->nge_chip_state = NGE_CHIP_ERROR; in nge_chip_stop()
754 nge_reg_put32(ngep, NGE_TX_STA, tx_sta.sta_val); in nge_chip_stop()
760 rx_sta.sta_val = nge_reg_get32(ngep, NGE_RX_STA); in nge_chip_stop()
765 rx_sta.sta_val = nge_reg_get32(ngep, NGE_RX_STA); in nge_chip_stop()
768 ngep->nge_chip_state = NGE_CHIP_ERROR; in nge_chip_stop()
771 nge_reg_put32(ngep, NGE_RX_STA, rx_sta.sta_val); in nge_chip_stop()
774 rx_poll.poll_val = nge_reg_get32(ngep, NGE_RX_POLL); in nge_chip_stop()
777 nge_reg_put32(ngep, NGE_RX_POLL, rx_poll.poll_val); in nge_chip_stop()
780 tx_poll.poll_val = nge_reg_get32(ngep, NGE_TX_POLL); in nge_chip_stop()
783 nge_reg_put32(ngep, NGE_TX_POLL, tx_poll.poll_val); in nge_chip_stop()
786 mode.mode_val = nge_reg_get32(ngep, NGE_MODE_CNTL); in nge_chip_stop()
789 nge_reg_put32(ngep, NGE_MODE_CNTL, mode.mode_val); in nge_chip_stop()
791 if (ngep->dev_spec_param.advanced_pm) { in nge_chip_stop()
793 nge_reg_put32(ngep, NGE_PMU_CIDLE_LIMIT, 0); in nge_chip_stop()
794 nge_reg_put32(ngep, NGE_PMU_DIDLE_LIMIT, 0); in nge_chip_stop()
796 pmu_cntl2.cntl2_val = nge_reg_get32(ngep, NGE_PMU_CNTL2); in nge_chip_stop()
799 nge_reg_put32(ngep, NGE_PMU_CNTL2, pmu_cntl2.cntl2_val); in nge_chip_stop()
802 ngep->nge_chip_state = NGE_CHIP_FAULT; in nge_chip_stop()
804 ngep->nge_chip_state = NGE_CHIP_STOPPED; in nge_chip_stop()
810 nge_rx_setup(nge_t *ngep) in nge_rx_setup() argument
819 desc_addr = ngep->recv->desc.cookie.dmac_laddress; in nge_rx_setup()
820 nge_reg_put32(ngep, NGE_RX_DADR, desc_addr); in nge_rx_setup()
821 nge_reg_put32(ngep, NGE_RX_DADR_HI, desc_addr >> 32); in nge_rx_setup()
822 dlen.dlen_val = nge_reg_get32(ngep, NGE_RXTX_DLEN); in nge_rx_setup()
823 dlen.dlen_bits.rdlen = ngep->recv->desc.nslots - 1; in nge_rx_setup()
824 nge_reg_put32(ngep, NGE_RXTX_DLEN, dlen.dlen_val); in nge_rx_setup()
826 rx_poll.poll_val = nge_reg_get32(ngep, NGE_RX_POLL); in nge_rx_setup()
829 nge_reg_put32(ngep, NGE_RX_POLL, rx_poll.poll_val); in nge_rx_setup()
833 nge_tx_setup(nge_t *ngep) in nge_tx_setup() argument
841 desc_addr = ngep->send->desc.cookie.dmac_laddress; in nge_tx_setup()
842 nge_reg_put32(ngep, NGE_TX_DADR, desc_addr); in nge_tx_setup()
843 nge_reg_put32(ngep, NGE_TX_DADR_HI, desc_addr >> 32); in nge_tx_setup()
844 dlen.dlen_val = nge_reg_get32(ngep, NGE_RXTX_DLEN); in nge_tx_setup()
845 dlen.dlen_bits.tdlen = ngep->send->desc.nslots - 1; in nge_tx_setup()
846 nge_reg_put32(ngep, NGE_RXTX_DLEN, dlen.dlen_val); in nge_tx_setup()
850 nge_buff_setup(nge_t *ngep) in nge_buff_setup() argument
855 dev_param_p = &ngep->dev_spec_param; in nge_buff_setup()
860 nge_rx_setup(ngep); in nge_buff_setup()
861 nge_tx_setup(ngep); in nge_buff_setup()
866 mode_cntl.mode_val = nge_reg_get32(ngep, NGE_MODE_CNTL); in nge_buff_setup()
881 mode_cntl.mode_bits.desc_type = ngep->desc_mode; in nge_buff_setup()
942 nge_reg_put32(ngep, NGE_MODE_CNTL, mode_cntl.mode_val); in nge_buff_setup()
947 mode_cntl.mode_val = nge_reg_get32(ngep, NGE_MODE_CNTL); in nge_buff_setup()
950 nge_reg_put32(ngep, NGE_MODE_CNTL, mode_cntl.mode_val); in nge_buff_setup()
965 nge_restore_mac_addr(nge_t *ngep) in nge_restore_mac_addr() argument
969 mac_addr = (uint32_t)ngep->chipinfo.hw_mac_addr; in nge_restore_mac_addr()
970 nge_reg_put32(ngep, NGE_UNI_ADDR0, mac_addr); in nge_restore_mac_addr()
971 mac_addr = (uint32_t)(ngep->chipinfo.hw_mac_addr >> 32); in nge_restore_mac_addr()
972 nge_reg_put32(ngep, NGE_UNI_ADDR1, mac_addr); in nge_restore_mac_addr()
976 nge_chip_reset(nge_t *ngep) in nge_chip_reset() argument
990 NGE_TRACE(("nge_chip_reset($%p)", (void *)ngep)); in nge_chip_reset()
997 (void) nge_reg_get32(ngep, regno); in nge_chip_reset()
1003 ee_cntl.cntl_val = nge_reg_get32(ngep, NGE_EP_CNTL); in nge_chip_reset()
1008 nge_reg_put32(ngep, NGE_EP_CNTL, ee_cntl.cntl_val); in nge_chip_reset()
1013 if (ngep->nge_chip_state == NGE_CHIP_INITIAL) { in nge_chip_reset()
1014 uaddr1.addr_val = nge_reg_get32(ngep, NGE_UNI_ADDR1); in nge_chip_reset()
1017 mac |= nge_reg_get32(ngep, NGE_UNI_ADDR0); in nge_chip_reset()
1018 ngep->chipinfo.hw_mac_addr = mac; in nge_chip_reset()
1019 if (ngep->dev_spec_param.mac_addr_order) { in nge_chip_reset()
1021 ngep->chipinfo.vendor_addr.addr[i] = in nge_chip_reset()
1023 ngep->cur_uni_addr.addr[i] = in nge_chip_reset()
1029 ngep->chipinfo.vendor_addr.addr[i] = in nge_chip_reset()
1031 ngep->cur_uni_addr.addr[i] = in nge_chip_reset()
1036 ngep->chipinfo.vendor_addr.set = 1; in nge_chip_reset()
1038 pci_config_put8(ngep->cfg_handle, PCI_CONF_CACHE_LINESZ, in nge_chip_reset()
1039 ngep->chipinfo.clsize); in nge_chip_reset()
1040 pci_config_put8(ngep->cfg_handle, PCI_CONF_LATENCY_TIMER, in nge_chip_reset()
1041 ngep->chipinfo.latency); in nge_chip_reset()
1044 if (ngep->dev_spec_param.advanced_pm) { in nge_chip_reset()
1047 soft_misc.misc_val = nge_reg_get32(ngep, NGE_SOFT_MISC); in nge_chip_reset()
1056 nge_reg_put32(ngep, NGE_SOFT_MISC, soft_misc.misc_val); in nge_chip_reset()
1061 soft_misc.misc_val = nge_reg_get32(ngep, NGE_SOFT_MISC); in nge_chip_reset()
1070 nge_reg_put32(ngep, NGE_SOFT_MISC, soft_misc.misc_val); in nge_chip_reset()
1073 pmu_cntl0.cntl0_val = nge_reg_get32(ngep, NGE_PMU_CNTL0); in nge_chip_reset()
1088 nge_reg_put32(ngep, NGE_PMU_CNTL0, pmu_cntl0.cntl0_val); in nge_chip_reset()
1091 nge_reg_put32(ngep, NGE_PMU_CIDLE_LIMIT, in nge_chip_reset()
1095 nge_reg_put32(ngep, NGE_PMU_DIDLE_LIMIT, in nge_chip_reset()
1099 pmu_cntl2.cntl2_val = nge_reg_get32(ngep, NGE_PMU_CNTL2); in nge_chip_reset()
1104 nge_reg_put32(ngep, NGE_PMU_CNTL2, pmu_cntl2.cntl2_val); in nge_chip_reset()
1109 err = nge_chip_stop(ngep, B_FALSE); in nge_chip_reset()
1116 if (ngep->chipinfo.device == DEVICE_ID_MCP51_268 || in nge_chip_reset()
1117 ngep->chipinfo.device == DEVICE_ID_MCP51_269 || in nge_chip_reset()
1118 ngep->chipinfo.device == DEVICE_ID_MCP55_372 || in nge_chip_reset()
1119 ngep->chipinfo.device == DEVICE_ID_MCP55_373 || in nge_chip_reset()
1120 ngep->chipinfo.device == DEVICE_ID_MCP61_3EE || in nge_chip_reset()
1121 ngep->chipinfo.device == DEVICE_ID_MCP61_3EF || in nge_chip_reset()
1122 ngep->chipinfo.device == DEVICE_ID_MCP77_760 || in nge_chip_reset()
1123 ngep->chipinfo.device == DEVICE_ID_MCP79_AB0) { in nge_chip_reset()
1125 pm_cntl2.cntl_val = nge_reg_get32(ngep, NGE_PM_CNTL2); in nge_chip_reset()
1132 nge_reg_put32(ngep, NGE_PM_CNTL2, pm_cntl2.cntl_val); in nge_chip_reset()
1135 ngep->nge_chip_state = NGE_CHIP_RESET; in nge_chip_reset()
1140 nge_chip_start(nge_t *ngep) in nge_chip_start() argument
1156 NGE_TRACE(("nge_chip_start($%p)", (void *)ngep)); in nge_chip_start()
1161 err = nge_buff_setup(ngep); in nge_chip_start()
1165 dev_param_p = &ngep->dev_spec_param; in nge_chip_start()
1170 mii_cs.cs_val = nge_reg_get32(ngep, NGE_MII_CS); in nge_chip_start()
1171 mii_cs.cs_bits.ap_paddr = ngep->phy_xmii_addr; in nge_chip_start()
1174 nge_reg_put32(ngep, NGE_MII_CS, mii_cs.cs_val); in nge_chip_start()
1179 (*ngep->physops->phys_update)(ngep); in nge_chip_start()
1184 tx_cntl.cntl_val = nge_reg_get32(ngep, NGE_TX_CNTL); in nge_chip_start()
1204 nge_reg_put32(ngep, NGE_TX_CNTL, tx_cntl.cntl_val); in nge_chip_start()
1228 rx_cntl0.cntl_val = nge_reg_get32(ngep, NGE_RX_CNTL0); in nge_chip_start()
1248 nge_reg_put32(ngep, NGE_RX_CNTL0, rx_cntl0.cntl_val); in nge_chip_start()
1253 rx_fifo.wm_val = nge_reg_get32(ngep, NGE_RX_FIFO_WM); in nge_chip_start()
1254 rx_fifo.wm_bits.data_hwm = ngep->rx_datahwm; in nge_chip_start()
1255 rx_fifo.wm_bits.prd_lwm = ngep->rx_prdlwm; in nge_chip_start()
1256 rx_fifo.wm_bits.prd_hwm = ngep->rx_prdhwm; in nge_chip_start()
1257 nge_reg_put32(ngep, NGE_RX_FIFO_WM, rx_fifo.wm_val); in nge_chip_start()
1262 nge_reg_put8(ngep, NGE_RX_DEf, ngep->rx_def); in nge_chip_start()
1267 rx_cntl1.cntl_val = nge_reg_get32(ngep, NGE_RX_CNTL1); in nge_chip_start()
1268 rx_cntl1.cntl_bits.length = ngep->max_sdu; in nge_chip_start()
1269 nge_reg_put32(ngep, NGE_RX_CNTL1, rx_cntl1.cntl_val); in nge_chip_start()
1273 tx_en.val = nge_reg_get8(ngep, NGE_TX_EN); in nge_chip_start()
1275 nge_reg_put8(ngep, NGE_TX_EN, tx_en.val); in nge_chip_start()
1280 rx_en.val = nge_reg_get8(ngep, NGE_RX_EN); in nge_chip_start()
1282 nge_reg_put8(ngep, NGE_RX_EN, rx_en.val); in nge_chip_start()
1284 itc.itc_val = nge_reg_get32(ngep, NGE_SWTR_ITC); in nge_chip_start()
1285 itc.itc_bits.sw_intv = ngep->sw_intr_intv; in nge_chip_start()
1286 nge_reg_put32(ngep, NGE_SWTR_ITC, itc.itc_val); in nge_chip_start()
1288 swtr_cntl.ctrl_val = nge_reg_get8(ngep, NGE_SWTR_CNTL); in nge_chip_start()
1291 nge_reg_put32(ngep, NGE_SWTR_CNTL, swtr_cntl.ctrl_val); in nge_chip_start()
1296 mintr_mask.mask_val = nge_reg_get8(ngep, NGE_MINTR_MASK); in nge_chip_start()
1302 nge_reg_put8(ngep, NGE_MINTR_MASK, mintr_mask.mask_val); in nge_chip_start()
1307 intr_mask.mask_val = nge_reg_get32(ngep, NGE_INTR_MASK); in nge_chip_start()
1323 ngep->intr_masks = intr_mask.mask_val; in nge_chip_start()
1324 nge_reg_put32(ngep, NGE_INTR_MASK, intr_mask.mask_val); in nge_chip_start()
1325 ngep->nge_chip_state = NGE_CHIP_RUNNING; in nge_chip_start()
1334 nge_chip_sync(nge_t *ngep) in nge_chip_sync() argument
1343 NGE_TRACE(("nge_chip_sync($%p)", (void *)ngep)); in nge_chip_sync()
1348 rx_cntl.cntl_val = nge_reg_get32(ngep, NGE_RX_CNTL0); in nge_chip_sync()
1350 if (ngep->promisc) { in nge_chip_sync()
1363 macaddr |= ngep->cur_uni_addr.addr[i-1]; in nge_chip_sync()
1367 nge_reg_put32(ngep, NGE_UNI_ADDR0, (uint32_t)macaddr); in nge_chip_sync()
1369 uni_adr1.addr_val = nge_reg_get32(ngep, NGE_UNI_ADDR1); in nge_chip_sync()
1372 nge_reg_put32(ngep, NGE_UNI_ADDR1, uni_adr1.addr_val); in nge_chip_sync()
1378 mul_addr |= ngep->cur_mul_addr.addr[i-1]; in nge_chip_sync()
1380 mul_mask |= ngep->cur_mul_mask.addr[i-1]; in nge_chip_sync()
1383 nge_reg_put32(ngep, NGE_MUL_ADDR0, (uint32_t)mul_addr); in nge_chip_sync()
1385 nge_reg_put32(ngep, NGE_MUL_ADDR1, mul_addr); in nge_chip_sync()
1386 nge_reg_put32(ngep, NGE_MUL_MASK, (uint32_t)mul_mask); in nge_chip_sync()
1388 nge_reg_put32(ngep, NGE_MUL_MASK1, mul_mask); in nge_chip_sync()
1392 nge_reg_put32(ngep, NGE_RX_CNTL0, rx_cntl.cntl_val); in nge_chip_sync()
1397 if (ngep->param_loop_mode == NGE_LOOP_INTERNAL_PHY) in nge_chip_sync()
1398 nge_sync_mac_modes(ngep); in nge_chip_sync()
1402 nge_chip_err(nge_t *ngep) in nge_chip_err() argument
1408 NGE_TRACE(("nge_chip_err($%p)", (void *)ngep)); in nge_chip_err()
1410 psw_stat = (nge_sw_statistics_t *)&ngep->statistics.sw_statistics; in nge_chip_err()
1411 reg010_ins.reg010_val = nge_reg_get32(ngep, NGE_REG010); in nge_chip_err()
1451 intr_mask.mask_val = nge_reg_get32(ngep, NGE_INTR_MASK); in nge_chip_err()
1453 nge_reg_put32(ngep, NGE_INTR_MASK, intr_mask.mask_val); in nge_chip_err()
1454 ngep->intr_masks = intr_mask.mask_val; in nge_chip_err()
1460 nge_sync_mac_modes(nge_t *ngep) in nge_sync_mac_modes() argument
1470 dev_param_p = &ngep->dev_spec_param; in nge_sync_mac_modes()
1472 tx_def.def_val = nge_reg_get32(ngep, NGE_TX_DEF); in nge_sync_mac_modes()
1473 m2p.m2p_val = nge_reg_get32(ngep, NGE_MAC2PHY); in nge_sync_mac_modes()
1474 tx_fifo.wm_val = nge_reg_get32(ngep, NGE_TX_FIFO_WM); in nge_sync_mac_modes()
1475 bk_cntl.cntl_val = nge_reg_get32(ngep, NGE_BKOFF_CNTL); in nge_sync_mac_modes()
1477 switch (ngep->param_link_speed) { in nge_sync_mac_modes()
1481 if (ngep->phy_mode == RGMII_IN) { in nge_sync_mac_modes()
1495 if (ngep->phy_mode == RGMII_IN) { in nge_sync_mac_modes()
1509 if (ngep->param_link_duplex == LINK_DUPLEX_FULL) { in nge_sync_mac_modes()
1522 if (ngep->chipinfo.device == DEVICE_ID_MCP55_373 || in nge_sync_mac_modes()
1523 ngep->chipinfo.device == DEVICE_ID_MCP55_372) { in nge_sync_mac_modes()
1527 if (ngep->param_link_duplex == LINK_DUPLEX_HALF) { in nge_sync_mac_modes()
1532 nge_reg_put32(ngep, NGE_MAC2PHY, m2p.m2p_val); in nge_sync_mac_modes()
1533 nge_reg_put32(ngep, NGE_TX_DEF, tx_def.def_val); in nge_sync_mac_modes()
1539 nge_reg_put32(ngep, NGE_TX_FIFO_WM, tx_fifo.wm_val); in nge_sync_mac_modes()
1541 nge_reg_put32(ngep, NGE_BKOFF_CNTL, bk_cntl.cntl_val); in nge_sync_mac_modes()
1543 rx_cntl0.cntl_val = nge_reg_get32(ngep, NGE_RX_CNTL0); in nge_sync_mac_modes()
1544 if (ngep->param_link_rx_pause && dev_param_p->rx_pause_frame) { in nge_sync_mac_modes()
1547 nge_reg_put32(ngep, NGE_RX_CNTL0, rx_cntl0.cntl_val); in nge_sync_mac_modes()
1552 nge_reg_put32(ngep, NGE_RX_CNTL0, rx_cntl0.cntl_val); in nge_sync_mac_modes()
1556 tx_cntl.cntl_val = nge_reg_get32(ngep, NGE_TX_CNTL); in nge_sync_mac_modes()
1557 if (ngep->param_link_tx_pause && dev_param_p->tx_pause_frame) { in nge_sync_mac_modes()
1560 nge_reg_put32(ngep, NGE_TX_CNTL, tx_cntl.cntl_val); in nge_sync_mac_modes()
1565 nge_reg_put32(ngep, NGE_TX_CNTL, tx_cntl.cntl_val); in nge_sync_mac_modes()
1579 nge_factotum_link_handler(nge_t *ngep) in nge_factotum_link_handler() argument
1584 if (ngep->param_link_up) in nge_factotum_link_handler()
1585 ngep->link_state = LINK_STATE_UP; in nge_factotum_link_handler()
1587 ngep->link_state = LINK_STATE_DOWN; in nge_factotum_link_handler()
1592 nge_sync_mac_modes(ngep); in nge_factotum_link_handler()
1596 nge_factotum_link_check(nge_t *ngep) in nge_factotum_link_check() argument
1601 ASSERT(mutex_owned(ngep->genlock)); in nge_factotum_link_check()
1603 (*ngep->physops->phys_check)(ngep); in nge_factotum_link_check()
1604 switch (ngep->link_state) { in nge_factotum_link_check()
1606 lchg = (ngep->param_link_up == B_FALSE); in nge_factotum_link_check()
1607 check = (ngep->param_link_up == B_FALSE); in nge_factotum_link_check()
1611 lchg = (ngep->param_link_up == B_TRUE); in nge_factotum_link_check()
1612 check = (ngep->param_link_up == B_TRUE); in nge_factotum_link_check()
1630 nge_factotum_link_handler(ngep); in nge_factotum_link_check()
1638 static boolean_t nge_factotum_stall_check(nge_t *ngep);
1641 nge_factotum_stall_check(nge_t *ngep) in nge_factotum_stall_check() argument
1645 srp = ngep->send; in nge_factotum_stall_check()
1660 if (ngep->watchdog == 0 && in nge_factotum_stall_check()
1662 ngep->watchdog = 1; in nge_factotum_stall_check()
1663 dogval = nge_atomic_shl32(&ngep->watchdog, 1); in nge_factotum_stall_check()
1665 nge_tx_recycle(ngep, B_FALSE); in nge_factotum_stall_check()
1669 ngep->statistics.sw_statistics.tx_stall++; in nge_factotum_stall_check()
1687 nge_t *ngep; in nge_chip_factotum() local
1691 ngep = (nge_t *)args1; in nge_chip_factotum()
1693 NGE_TRACE(("nge_chip_factotum($%p)", (void *)ngep)); in nge_chip_factotum()
1695 mutex_enter(ngep->softlock); in nge_chip_factotum()
1696 if (ngep->factotum_flag == 0) { in nge_chip_factotum()
1697 mutex_exit(ngep->softlock); in nge_chip_factotum()
1700 ngep->factotum_flag = 0; in nge_chip_factotum()
1701 mutex_exit(ngep->softlock); in nge_chip_factotum()
1706 mutex_enter(ngep->genlock); in nge_chip_factotum()
1707 switch (ngep->nge_chip_state) { in nge_chip_factotum()
1712 linkchg = nge_factotum_link_check(ngep); in nge_chip_factotum()
1713 err = nge_factotum_stall_check(ngep); in nge_chip_factotum()
1717 (void) nge_restart(ngep); in nge_chip_factotum()
1718 NGE_REPORT((ngep, "automatic recovery activated")); in nge_chip_factotum()
1723 (void) nge_chip_stop(ngep, B_TRUE); in nge_chip_factotum()
1724 mutex_exit(ngep->genlock); in nge_chip_factotum()
1732 mac_link_update(ngep->mh, ngep->link_state); in nge_chip_factotum()
1739 nge_intr_handle(nge_t *ngep, nge_intr_src *pintr_src) in nge_intr_handle() argument
1747 ngep->statistics.sw_statistics.intr_count++; in nge_intr_handle()
1748 ngep->statistics.sw_statistics.intr_lval = pintr_src->intr_val; in nge_intr_handle()
1753 ngep->statistics.sw_statistics.rx_err++; in nge_intr_handle()
1755 ngep->statistics.sw_statistics.rx_nobuffer++; in nge_intr_handle()
1760 nge_tx_recycle(ngep, B_TRUE); in nge_intr_handle()
1762 nge_receive(ngep); in nge_intr_handle()
1764 ngep->statistics.sw_statistics.tx_stop_err++; in nge_intr_handle()
1765 if (ngep->intr_moderation && brx) { in nge_intr_handle()
1766 if (ngep->poll) { in nge_intr_handle()
1767 if (ngep->recv_count < ngep->param_rx_intr_hwater) { in nge_intr_handle()
1768 ngep->quiet_time++; in nge_intr_handle()
1769 if (ngep->quiet_time == in nge_intr_handle()
1770 ngep->param_poll_quiet_time) { in nge_intr_handle()
1771 ngep->poll = B_FALSE; in nge_intr_handle()
1772 ngep->quiet_time = 0; in nge_intr_handle()
1775 ngep->quiet_time = 0; in nge_intr_handle()
1777 if (ngep->recv_count > ngep->param_rx_intr_lwater) { in nge_intr_handle()
1778 ngep->busy_time++; in nge_intr_handle()
1779 if (ngep->busy_time == in nge_intr_handle()
1780 ngep->param_poll_busy_time) { in nge_intr_handle()
1781 ngep->poll = B_TRUE; in nge_intr_handle()
1782 ngep->busy_time = 0; in nge_intr_handle()
1785 ngep->busy_time = 0; in nge_intr_handle()
1788 ngep->recv_count = 0; in nge_intr_handle()
1790 nge_chip_err(ngep); in nge_intr_handle()
1793 mintr_src.src_val = nge_reg_get32(ngep, NGE_MINTR_SRC); in nge_intr_handle()
1794 nge_reg_put32(ngep, NGE_MINTR_SRC, mintr_src.src_val); in nge_intr_handle()
1795 nge_wake_factotum(ngep); in nge_intr_handle()
1806 nge_t *ngep = (nge_t *)arg1; in nge_chip_intr() local
1810 mutex_enter(ngep->genlock); in nge_chip_intr()
1812 if (ngep->suspended) { in nge_chip_intr()
1813 mutex_exit(ngep->genlock); in nge_chip_intr()
1821 intr_src.intr_val = nge_reg_get32(ngep, NGE_INTR_SRC); in nge_chip_intr()
1823 mutex_exit(ngep->genlock); in nge_chip_intr()
1829 nge_reg_put32(ngep, NGE_INTR_SRC, intr_src.intr_val); in nge_chip_intr()
1831 if (ngep->nge_chip_state != NGE_CHIP_RUNNING) { in nge_chip_intr()
1832 mutex_exit(ngep->genlock); in nge_chip_intr()
1835 nge_intr_handle(ngep, &intr_src); in nge_chip_intr()
1836 if (ngep->poll && !ngep->ch_intr_mode) { in nge_chip_intr()
1837 intr_mask.mask_val = nge_reg_get32(ngep, NGE_INTR_MASK); in nge_chip_intr()
1840 nge_reg_put32(ngep, NGE_INTR_MASK, intr_mask.mask_val); in nge_chip_intr()
1841 ngep->ch_intr_mode = B_TRUE; in nge_chip_intr()
1842 } else if ((ngep->ch_intr_mode) && (!ngep->poll)) { in nge_chip_intr()
1843 nge_reg_put32(ngep, NGE_INTR_MASK, ngep->intr_masks); in nge_chip_intr()
1844 ngep->ch_intr_mode = B_FALSE; in nge_chip_intr()
1846 mutex_exit(ngep->genlock); in nge_chip_intr()
1852 nge_pp_ioctl(nge_t *ngep, int cmd, mblk_t *mp, struct iocblk *iocp) in nge_pp_ioctl() argument
1860 int (*ppfn)(nge_t *ngep, nge_peekpoke_t *ppd); in nge_pp_ioctl()
1953 err = (*ppfn)(ngep, ppd); in nge_pp_ioctl()
1959 static enum ioc_reply nge_diag_ioctl(nge_t *ngep, int cmd, mblk_t *mp,
1964 nge_diag_ioctl(nge_t *ngep, int cmd, mblk_t *mp, struct iocblk *iocp) in nge_diag_ioctl() argument
1966 ASSERT(mutex_owned(ngep->genlock)); in nge_diag_ioctl()
1970 nge_error(ngep, "nge_diag_ioctl: invalid cmd 0x%x", cmd); in nge_diag_ioctl()
1978 return (nge_pp_ioctl(ngep, cmd, mp, iocp)); in nge_diag_ioctl()
1993 nge_chip_ioctl(nge_t *ngep, mblk_t *mp, struct iocblk *iocp) in nge_chip_ioctl() argument
1997 ASSERT(mutex_owned(ngep->genlock)); in nge_chip_ioctl()
2012 return (nge_diag_ioctl(ngep, cmd, mp, iocp)); in nge_chip_ioctl()