Lines Matching refs:Adapter
162 static void e1000g_fm_init(struct e1000g *Adapter);
163 static void e1000g_fm_fini(struct e1000g *Adapter);
167 static void e1000g_restore_promisc(struct e1000g *Adapter);
406 struct e1000g *Adapter; in e1000g_attach() local
432 Adapter = in e1000g_attach()
433 (struct e1000g *)kmem_zalloc(sizeof (*Adapter), KM_SLEEP); in e1000g_attach()
435 Adapter->dip = devinfo; in e1000g_attach()
436 Adapter->instance = instance; in e1000g_attach()
437 Adapter->tx_ring->adapter = Adapter; in e1000g_attach()
438 Adapter->rx_ring->adapter = Adapter; in e1000g_attach()
440 hw = &Adapter->shared; in e1000g_attach()
441 osdep = &Adapter->osdep; in e1000g_attach()
443 osdep->adapter = Adapter; in e1000g_attach()
445 ddi_set_driver_private(devinfo, (caddr_t)Adapter); in e1000g_attach()
450 (void) e1000g_get_prop(Adapter, "fm-capable", in e1000g_attach()
454 &Adapter->fm_capabilities); in e1000g_attach()
455 e1000g_fm_init(Adapter); in e1000g_attach()
456 Adapter->attach_progress |= ATTACH_PROGRESS_FMINIT; in e1000g_attach()
462 e1000g_log(Adapter, CE_WARN, "PCI configuration failed"); in e1000g_attach()
465 Adapter->attach_progress |= ATTACH_PROGRESS_PCI_CONFIG; in e1000g_attach()
470 if (e1000g_identify_hardware(Adapter) != DDI_SUCCESS) { in e1000g_attach()
471 e1000g_log(Adapter, CE_WARN, "Identify hardware failed"); in e1000g_attach()
478 if (e1000g_regs_map(Adapter) != DDI_SUCCESS) { in e1000g_attach()
479 e1000g_log(Adapter, CE_WARN, "Mapping registers failed"); in e1000g_attach()
482 Adapter->attach_progress |= ATTACH_PROGRESS_REGS_MAP; in e1000g_attach()
487 if (e1000g_set_driver_params(Adapter) != DDI_SUCCESS) { in e1000g_attach()
490 Adapter->attach_progress |= ATTACH_PROGRESS_SETUP; in e1000g_attach()
492 if (e1000g_check_acc_handle(Adapter->osdep.cfg_handle) != DDI_FM_OK) { in e1000g_attach()
493 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_LOST); in e1000g_attach()
505 if (e1000g_add_intrs(Adapter) != DDI_SUCCESS) { in e1000g_attach()
506 e1000g_log(Adapter, CE_WARN, "Add interrupts failed"); in e1000g_attach()
509 Adapter->attach_progress |= ATTACH_PROGRESS_ADD_INTR; in e1000g_attach()
517 e1000g_init_locks(Adapter); in e1000g_attach()
518 Adapter->attach_progress |= ATTACH_PROGRESS_LOCKS; in e1000g_attach()
523 if (e1000g_init_stats(Adapter) != DDI_SUCCESS) { in e1000g_attach()
524 e1000g_log(Adapter, CE_WARN, "Init stats failed"); in e1000g_attach()
527 Adapter->attach_progress |= ATTACH_PROGRESS_KSTATS; in e1000g_attach()
532 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_attach()
533 if (e1000g_init(Adapter) != DDI_SUCCESS) { in e1000g_attach()
534 rw_exit(&Adapter->chip_lock); in e1000g_attach()
535 e1000g_log(Adapter, CE_WARN, "Adapter initialization failed"); in e1000g_attach()
538 rw_exit(&Adapter->chip_lock); in e1000g_attach()
539 Adapter->attach_progress |= ATTACH_PROGRESS_INIT; in e1000g_attach()
544 if (e1000g_register_mac(Adapter) != DDI_SUCCESS) { in e1000g_attach()
545 e1000g_log(Adapter, CE_WARN, "Register MAC failed"); in e1000g_attach()
548 Adapter->attach_progress |= ATTACH_PROGRESS_MAC; in e1000g_attach()
554 if (e1000g_enable_intrs(Adapter) != DDI_SUCCESS) { in e1000g_attach()
555 e1000g_log(Adapter, CE_WARN, "Enable DDI interrupts failed"); in e1000g_attach()
558 Adapter->attach_progress |= ATTACH_PROGRESS_ENABLE_INTR; in e1000g_attach()
568 Adapter->priv_dip = in e1000g_attach()
570 bcopy(DEVI(devinfo), DEVI(Adapter->priv_dip), in e1000g_attach()
577 devi_node->priv_dip = Adapter->priv_dip; in e1000g_attach()
581 Adapter->priv_devi_node = devi_node; in e1000g_attach()
596 Adapter->e1000g_state = E1000G_INITIALIZED; in e1000g_attach()
600 e1000g_unattach(devinfo, Adapter); in e1000g_attach()
605 e1000g_register_mac(struct e1000g *Adapter) in e1000g_register_mac() argument
607 struct e1000_hw *hw = &Adapter->shared; in e1000g_register_mac()
615 mac->m_driver = Adapter; in e1000g_register_mac()
616 mac->m_dip = Adapter->dip; in e1000g_register_mac()
620 mac->m_max_sdu = Adapter->default_mtu; in e1000g_register_mac()
625 err = mac_register(mac, &Adapter->mh); in e1000g_register_mac()
632 e1000g_identify_hardware(struct e1000g *Adapter) in e1000g_identify_hardware() argument
634 struct e1000_hw *hw = &Adapter->shared; in e1000g_identify_hardware()
635 struct e1000g_osdep *osdep = &Adapter->osdep; in e1000g_identify_hardware()
650 E1000G_DEBUGLOG_0(Adapter, E1000G_INFO_LEVEL, in e1000g_identify_hardware()
659 e1000g_regs_map(struct e1000g *Adapter) in e1000g_regs_map() argument
661 dev_info_t *devinfo = Adapter->dip; in e1000g_regs_map()
662 struct e1000_hw *hw = &Adapter->shared; in e1000g_regs_map()
663 struct e1000g_osdep *osdep = &Adapter->osdep; in e1000g_regs_map()
672 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_regs_map()
681 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_regs_map()
699 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_regs_map()
709 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_regs_map()
760 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_regs_map()
768 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_regs_map()
778 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_regs_map()
799 e1000g_set_driver_params(struct e1000g *Adapter) in e1000g_set_driver_params() argument
803 hw = &Adapter->shared; in e1000g_set_driver_params()
807 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_set_driver_params()
814 E1000G_DEBUGLOG_0(Adapter, CE_WARN, in e1000g_set_driver_params()
840 Adapter->strip_crc = B_TRUE; in e1000g_set_driver_params()
842 Adapter->strip_crc = B_FALSE; in e1000g_set_driver_params()
846 e1000g_setup_max_mtu(Adapter); in e1000g_set_driver_params()
851 e1000g_force_speed_duplex(Adapter); in e1000g_set_driver_params()
854 e1000g_get_max_frame_size(Adapter); in e1000g_set_driver_params()
857 e1000g_get_conf(Adapter); in e1000g_set_driver_params()
860 e1000g_pch_limits(Adapter); in e1000g_set_driver_params()
863 e1000g_set_bufsize(Adapter); in e1000g_set_driver_params()
866 Adapter->master_latency_timer = DEFAULT_MASTER_LATENCY_TIMER; in e1000g_set_driver_params()
876 Adapter->link_state = LINK_STATE_UNKNOWN; in e1000g_set_driver_params()
879 Adapter->rx_intr_delay = DEFAULT_RX_INTR_DELAY; in e1000g_set_driver_params()
880 Adapter->rx_intr_abs_delay = DEFAULT_RX_INTR_ABS_DELAY; in e1000g_set_driver_params()
883 Adapter->tx_intr_enable = DEFAULT_TX_INTR_ENABLE; in e1000g_set_driver_params()
884 Adapter->tx_bcopy_thresh = DEFAULT_TX_BCOPY_THRESHOLD; in e1000g_set_driver_params()
885 Adapter->tx_intr_delay = DEFAULT_TX_INTR_DELAY; in e1000g_set_driver_params()
886 Adapter->tx_intr_abs_delay = DEFAULT_TX_INTR_ABS_DELAY; in e1000g_set_driver_params()
889 Adapter->rx_bcopy_thresh = DEFAULT_RX_BCOPY_THRESHOLD; in e1000g_set_driver_params()
895 e1000g_setup_max_mtu(struct e1000g *Adapter) in e1000g_setup_max_mtu() argument
897 struct e1000_mac_info *mac = &Adapter->shared.mac; in e1000g_setup_max_mtu()
898 struct e1000_phy_info *phy = &Adapter->shared.phy; in e1000g_setup_max_mtu()
905 Adapter->max_mtu = ETHERMTU; in e1000g_setup_max_mtu()
910 Adapter->max_mtu = ETHERMTU; in e1000g_setup_max_mtu()
912 Adapter->max_mtu = MAXIMUM_MTU_9K; in e1000g_setup_max_mtu()
916 Adapter->max_mtu = MAXIMUM_MTU_4K; in e1000g_setup_max_mtu()
931 Adapter->max_mtu = MAXIMUM_MTU_9K; in e1000g_setup_max_mtu()
941 Adapter->max_mtu = e1000g_jumbo_mtu; in e1000g_setup_max_mtu()
943 Adapter->max_mtu = MAXIMUM_MTU_9K; in e1000g_setup_max_mtu()
948 Adapter->max_mtu = FRAME_SIZE_UPTO_16K - in e1000g_setup_max_mtu()
955 e1000g_set_bufsize(struct e1000g *Adapter) in e1000g_set_bufsize() argument
957 struct e1000_mac_info *mac = &Adapter->shared.mac; in e1000g_set_bufsize()
961 dev_info_t *devinfo = Adapter->dip; in e1000g_set_bufsize()
966 Adapter->sys_page_sz = ddi_ptob(devinfo, (ulong_t)1); in e1000g_set_bufsize()
971 if (Adapter->sys_page_sz == iommu_pagesize) { in e1000g_set_bufsize()
973 Adapter->sys_page_sz = 0x4000; in e1000g_set_bufsize()
975 if (Adapter->sys_page_sz > iommu_pagesize) in e1000g_set_bufsize()
976 Adapter->sys_page_sz = iommu_pagesize; in e1000g_set_bufsize()
979 if (Adapter->lso_enable) { in e1000g_set_bufsize()
980 Adapter->dvma_page_num = E1000_LSO_MAXLEN / in e1000g_set_bufsize()
981 Adapter->sys_page_sz + E1000G_DEFAULT_DVMA_PAGE_NUM; in e1000g_set_bufsize()
983 Adapter->dvma_page_num = Adapter->max_frame_size / in e1000g_set_bufsize()
984 Adapter->sys_page_sz + E1000G_DEFAULT_DVMA_PAGE_NUM; in e1000g_set_bufsize()
986 ASSERT(Adapter->dvma_page_num >= E1000G_DEFAULT_DVMA_PAGE_NUM); in e1000g_set_bufsize()
989 Adapter->min_frame_size = ETHERMIN + ETHERFCSL; in e1000g_set_bufsize()
991 if (Adapter->mem_workaround_82546 && in e1000g_set_bufsize()
995 Adapter->rx_buffer_size = E1000_RX_BUFFER_SIZE_2K; in e1000g_set_bufsize()
997 rx_size = Adapter->max_frame_size; in e1000g_set_bufsize()
1000 Adapter->rx_buffer_size = E1000_RX_BUFFER_SIZE_4K; in e1000g_set_bufsize()
1003 Adapter->rx_buffer_size = E1000_RX_BUFFER_SIZE_8K; in e1000g_set_bufsize()
1006 Adapter->rx_buffer_size = E1000_RX_BUFFER_SIZE_16K; in e1000g_set_bufsize()
1008 Adapter->rx_buffer_size = E1000_RX_BUFFER_SIZE_2K; in e1000g_set_bufsize()
1010 Adapter->rx_buffer_size += E1000G_IPALIGNROOM; in e1000g_set_bufsize()
1012 tx_size = Adapter->max_frame_size; in e1000g_set_bufsize()
1014 Adapter->tx_buffer_size = E1000_TX_BUFFER_SIZE_4K; in e1000g_set_bufsize()
1017 Adapter->tx_buffer_size = E1000_TX_BUFFER_SIZE_8K; in e1000g_set_bufsize()
1020 Adapter->tx_buffer_size = E1000_TX_BUFFER_SIZE_16K; in e1000g_set_bufsize()
1022 Adapter->tx_buffer_size = E1000_TX_BUFFER_SIZE_2K; in e1000g_set_bufsize()
1036 Adapter->rx_buf_align = RECEIVE_BUFFER_ALIGN_SIZE; in e1000g_set_bufsize()
1038 Adapter->rx_buf_align = 1; in e1000g_set_bufsize()
1059 struct e1000g *Adapter; in e1000g_detach() local
1073 Adapter = (struct e1000g *)ddi_get_driver_private(devinfo); in e1000g_detach()
1074 if (Adapter == NULL) in e1000g_detach()
1077 rx_drain = e1000g_rx_drain(Adapter); in e1000g_detach()
1081 if (mac_unregister(Adapter->mh) != 0) { in e1000g_detach()
1082 e1000g_log(Adapter, CE_WARN, "Unregister MAC failed"); in e1000g_detach()
1085 Adapter->attach_progress &= ~ATTACH_PROGRESS_MAC; in e1000g_detach()
1087 ASSERT(!(Adapter->e1000g_state & E1000G_STARTED)); in e1000g_detach()
1092 e1000g_unattach(devinfo, Adapter); in e1000g_detach()
1120 e1000g_unattach(dev_info_t *devinfo, struct e1000g *Adapter) in e1000g_unattach() argument
1125 if (Adapter->e1000g_blink != NULL) { in e1000g_unattach()
1126 ddi_periodic_delete(Adapter->e1000g_blink); in e1000g_unattach()
1127 Adapter->e1000g_blink = NULL; in e1000g_unattach()
1130 if (Adapter->attach_progress & ATTACH_PROGRESS_ENABLE_INTR) { in e1000g_unattach()
1131 (void) e1000g_disable_intrs(Adapter); in e1000g_unattach()
1134 if (Adapter->attach_progress & ATTACH_PROGRESS_MAC) { in e1000g_unattach()
1135 (void) mac_unregister(Adapter->mh); in e1000g_unattach()
1138 if (Adapter->attach_progress & ATTACH_PROGRESS_ADD_INTR) { in e1000g_unattach()
1139 (void) e1000g_rem_intrs(Adapter); in e1000g_unattach()
1142 if (Adapter->attach_progress & ATTACH_PROGRESS_SETUP) { in e1000g_unattach()
1146 if (Adapter->attach_progress & ATTACH_PROGRESS_KSTATS) { in e1000g_unattach()
1147 kstat_delete((kstat_t *)Adapter->e1000g_ksp); in e1000g_unattach()
1150 if (Adapter->attach_progress & ATTACH_PROGRESS_INIT) { in e1000g_unattach()
1151 stop_link_timer(Adapter); in e1000g_unattach()
1154 result = e1000_reset_hw(&Adapter->shared); in e1000g_unattach()
1158 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_INVAL_STATE); in e1000g_unattach()
1159 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_LOST); in e1000g_unattach()
1163 e1000g_release_multicast(Adapter); in e1000g_unattach()
1165 if (Adapter->attach_progress & ATTACH_PROGRESS_REGS_MAP) { in e1000g_unattach()
1166 if (Adapter->osdep.reg_handle != NULL) in e1000g_unattach()
1167 ddi_regs_map_free(&Adapter->osdep.reg_handle); in e1000g_unattach()
1168 if (Adapter->osdep.ich_flash_handle != NULL && in e1000g_unattach()
1169 Adapter->shared.mac.type < e1000_pch_spt) in e1000g_unattach()
1170 ddi_regs_map_free(&Adapter->osdep.ich_flash_handle); in e1000g_unattach()
1171 if (Adapter->osdep.io_reg_handle != NULL) in e1000g_unattach()
1172 ddi_regs_map_free(&Adapter->osdep.io_reg_handle); in e1000g_unattach()
1175 if (Adapter->attach_progress & ATTACH_PROGRESS_PCI_CONFIG) { in e1000g_unattach()
1176 if (Adapter->osdep.cfg_handle != NULL) in e1000g_unattach()
1177 pci_config_teardown(&Adapter->osdep.cfg_handle); in e1000g_unattach()
1180 if (Adapter->attach_progress & ATTACH_PROGRESS_LOCKS) { in e1000g_unattach()
1181 e1000g_destroy_locks(Adapter); in e1000g_unattach()
1184 if (Adapter->attach_progress & ATTACH_PROGRESS_FMINIT) { in e1000g_unattach()
1185 e1000g_fm_fini(Adapter); in e1000g_unattach()
1189 if (e1000g_force_detach && (Adapter->priv_devi_node != NULL)) { in e1000g_unattach()
1190 devi_node = Adapter->priv_devi_node; in e1000g_unattach()
1199 kmem_free((caddr_t)Adapter, sizeof (struct e1000g)); in e1000g_unattach()
1267 e1000g_init_locks(struct e1000g *Adapter) in e1000g_init_locks() argument
1272 rw_init(&Adapter->chip_lock, NULL, in e1000g_init_locks()
1273 RW_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_init_locks()
1274 mutex_init(&Adapter->link_lock, NULL, in e1000g_init_locks()
1275 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_init_locks()
1276 mutex_init(&Adapter->watchdog_lock, NULL, in e1000g_init_locks()
1277 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_init_locks()
1279 tx_ring = Adapter->tx_ring; in e1000g_init_locks()
1282 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_init_locks()
1284 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_init_locks()
1286 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_init_locks()
1288 rx_ring = Adapter->rx_ring; in e1000g_init_locks()
1291 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_init_locks()
1293 mutex_init(&Adapter->e1000g_led_lock, NULL, in e1000g_init_locks()
1294 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_init_locks()
1298 e1000g_destroy_locks(struct e1000g *Adapter) in e1000g_destroy_locks() argument
1303 mutex_destroy(&Adapter->e1000g_led_lock); in e1000g_destroy_locks()
1305 tx_ring = Adapter->tx_ring; in e1000g_destroy_locks()
1310 rx_ring = Adapter->rx_ring; in e1000g_destroy_locks()
1313 mutex_destroy(&Adapter->link_lock); in e1000g_destroy_locks()
1314 mutex_destroy(&Adapter->watchdog_lock); in e1000g_destroy_locks()
1315 rw_destroy(&Adapter->chip_lock); in e1000g_destroy_locks()
1318 e1000_destroy_hw_mutex(&Adapter->shared); in e1000g_destroy_locks()
1324 struct e1000g *Adapter; in e1000g_resume() local
1326 Adapter = (struct e1000g *)ddi_get_driver_private(devinfo); in e1000g_resume()
1327 if (Adapter == NULL) in e1000g_resume()
1328 e1000g_log(Adapter, CE_PANIC, in e1000g_resume()
1331 if (Adapter->dip != devinfo) in e1000g_resume()
1332 e1000g_log(Adapter, CE_PANIC, in e1000g_resume()
1335 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_resume()
1337 if (Adapter->e1000g_state & E1000G_STARTED) { in e1000g_resume()
1338 if (e1000g_start(Adapter, B_FALSE) != DDI_SUCCESS) { in e1000g_resume()
1339 rw_exit(&Adapter->chip_lock); in e1000g_resume()
1344 e1000g_log(Adapter, CE_WARN, in e1000g_resume()
1349 enable_watchdog_timer(Adapter); in e1000g_resume()
1352 Adapter->e1000g_state &= ~E1000G_SUSPENDED; in e1000g_resume()
1354 rw_exit(&Adapter->chip_lock); in e1000g_resume()
1362 struct e1000g *Adapter; in e1000g_suspend() local
1364 Adapter = (struct e1000g *)ddi_get_driver_private(devinfo); in e1000g_suspend()
1365 if (Adapter == NULL) in e1000g_suspend()
1368 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_suspend()
1370 Adapter->e1000g_state |= E1000G_SUSPENDED; in e1000g_suspend()
1373 if (!(Adapter->e1000g_state & E1000G_STARTED)) { in e1000g_suspend()
1374 rw_exit(&Adapter->chip_lock); in e1000g_suspend()
1378 e1000g_stop(Adapter, B_FALSE); in e1000g_suspend()
1380 rw_exit(&Adapter->chip_lock); in e1000g_suspend()
1383 disable_watchdog_timer(Adapter); in e1000g_suspend()
1384 stop_link_timer(Adapter); in e1000g_suspend()
1385 stop_82547_timer(Adapter->tx_ring); in e1000g_suspend()
1391 e1000g_init(struct e1000g *Adapter) in e1000g_init() argument
1399 hw = &Adapter->shared; in e1000g_init()
1410 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_INVAL_STATE); in e1000g_init()
1427 e1000g_log(Adapter, CE_WARN, in e1000g_init()
1430 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_INVAL_STATE); in e1000g_init()
1440 result = e1000g_find_mac_address(Adapter); in e1000g_init()
1450 e1000g_log(Adapter, CE_WARN, "Read mac addr failed"); in e1000g_init()
1451 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_INVAL_STATE); in e1000g_init()
1457 e1000g_log(Adapter, CE_WARN, "Invalid mac addr"); in e1000g_init()
1458 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_INVAL_STATE); in e1000g_init()
1466 if (Adapter->master_latency_timer) { in e1000g_init()
1467 pci_config_put8(Adapter->osdep.cfg_handle, in e1000g_init()
1468 PCI_CONF_LATENCY_TIMER, Adapter->master_latency_timer); in e1000g_init()
1475 if (Adapter->max_frame_size > FRAME_SIZE_UPTO_8K) in e1000g_init()
1485 if (Adapter->max_frame_size > FRAME_SIZE_UPTO_8K) in e1000g_init()
1530 if (Adapter->max_frame_size > FRAME_SIZE_UPTO_8K) in e1000g_init()
1555 ((pba << 10) - Adapter->max_frame_size))); in e1000g_init()
1574 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_INVAL_STATE); in e1000g_init()
1598 e1000g_log(Adapter, CE_WARN, "Initialize hw failed"); in e1000g_init()
1599 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_INVAL_STATE); in e1000g_init()
1618 e1000g_init_unicst(Adapter); in e1000g_init()
1625 (uint8_t *)Adapter->mcast_table, Adapter->mcast_count); in e1000g_init()
1635 E1000_WRITE_REG(hw, E1000_ITR, Adapter->intr_throttling_rate); in e1000g_init()
1637 Adapter->intr_adaptive = B_FALSE; in e1000g_init()
1645 mutex_enter(&Adapter->link_lock); in e1000g_init()
1647 Adapter->link_complete = B_TRUE; in e1000g_init()
1649 Adapter->link_complete = B_FALSE; in e1000g_init()
1650 Adapter->link_tid = timeout(e1000g_link_timer, in e1000g_init()
1651 (void *)Adapter, link_timeout); in e1000g_init()
1653 mutex_exit(&Adapter->link_lock); in e1000g_init()
1656 e1000g_get_phy_state(Adapter); in e1000g_init()
1658 e1000g_param_sync(Adapter); in e1000g_init()
1660 Adapter->init_count++; in e1000g_init()
1662 if (e1000g_check_acc_handle(Adapter->osdep.cfg_handle) != DDI_FM_OK) { in e1000g_init()
1665 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_init()
1669 Adapter->poll_mode = e1000g_poll_mode; in e1000g_init()
1674 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_LOST); in e1000g_init()
1679 e1000g_alloc_rx_data(struct e1000g *Adapter) in e1000g_alloc_rx_data() argument
1684 rx_ring = Adapter->rx_ring; in e1000g_alloc_rx_data()
1691 rx_data->priv_devi_node = Adapter->priv_devi_node; in e1000g_alloc_rx_data()
1695 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_alloc_rx_data()
1697 MUTEX_DRIVER, DDI_INTR_PRI(Adapter->intr_pri)); in e1000g_alloc_rx_data()
1737 e1000g_link_up(struct e1000g *Adapter) in e1000g_link_up() argument
1739 struct e1000_hw *hw = &Adapter->shared; in e1000g_link_up()
1923 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_m_start() local
1925 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_m_start()
1927 if (Adapter->e1000g_state & E1000G_SUSPENDED) { in e1000g_m_start()
1928 rw_exit(&Adapter->chip_lock); in e1000g_m_start()
1932 if (e1000g_start(Adapter, B_TRUE) != DDI_SUCCESS) { in e1000g_m_start()
1933 rw_exit(&Adapter->chip_lock); in e1000g_m_start()
1937 Adapter->e1000g_state |= E1000G_STARTED; in e1000g_m_start()
1939 rw_exit(&Adapter->chip_lock); in e1000g_m_start()
1942 enable_watchdog_timer(Adapter); in e1000g_m_start()
1948 e1000g_start(struct e1000g *Adapter, boolean_t global) in e1000g_start() argument
1953 if (e1000g_alloc_rx_data(Adapter) != DDI_SUCCESS) { in e1000g_start()
1954 e1000g_log(Adapter, CE_WARN, "Allocate rx data failed"); in e1000g_start()
1959 if (e1000g_alloc_dma_resources(Adapter) != DDI_SUCCESS) { in e1000g_start()
1960 e1000g_log(Adapter, CE_WARN, in e1000g_start()
1964 Adapter->rx_buffer_setup = B_FALSE; in e1000g_start()
1967 if (!(Adapter->attach_progress & ATTACH_PROGRESS_INIT)) { in e1000g_start()
1968 if (e1000g_init(Adapter) != DDI_SUCCESS) { in e1000g_start()
1969 e1000g_log(Adapter, CE_WARN, in e1000g_start()
1976 e1000g_tx_setup(Adapter); in e1000g_start()
1980 e1000g_rx_setup(Adapter); in e1000g_start()
1984 e1000g_restore_promisc(Adapter); in e1000g_start()
1986 e1000g_mask_interrupt(Adapter); in e1000g_start()
1988 Adapter->attach_progress |= ATTACH_PROGRESS_INIT; in e1000g_start()
1990 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_start()
1991 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_LOST); in e1000g_start()
1998 rx_data = Adapter->rx_ring->rx_data; in e1000g_start()
2001 e1000g_release_dma_resources(Adapter); in e1000g_start()
2007 (void) e1000_reset_hw(&Adapter->shared); in e1000g_start()
2021 e1000g_flush_desc_rings(struct e1000g *Adapter) in e1000g_flush_desc_rings() argument
2023 struct e1000_hw *hw = &Adapter->shared; in e1000g_flush_desc_rings()
2034 hang_state = pci_config_get16(Adapter->osdep.cfg_handle, in e1000g_flush_desc_rings()
2038 e1000g_flush_tx_ring(Adapter); in e1000g_flush_desc_rings()
2041 hang_state = pci_config_get16(Adapter->osdep.cfg_handle, in e1000g_flush_desc_rings()
2044 e1000g_flush_rx_ring(Adapter); in e1000g_flush_desc_rings()
2051 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_m_stop() local
2054 (void) e1000g_tx_drain(Adapter); in e1000g_m_stop()
2056 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_m_stop()
2058 if (Adapter->e1000g_state & E1000G_SUSPENDED) { in e1000g_m_stop()
2059 rw_exit(&Adapter->chip_lock); in e1000g_m_stop()
2062 Adapter->e1000g_state &= ~E1000G_STARTED; in e1000g_m_stop()
2063 e1000g_stop(Adapter, B_TRUE); in e1000g_m_stop()
2065 rw_exit(&Adapter->chip_lock); in e1000g_m_stop()
2068 disable_watchdog_timer(Adapter); in e1000g_m_stop()
2069 stop_link_timer(Adapter); in e1000g_m_stop()
2070 stop_82547_timer(Adapter->tx_ring); in e1000g_m_stop()
2074 e1000g_stop(struct e1000g *Adapter, boolean_t global) in e1000g_stop() argument
2080 Adapter->attach_progress &= ~ATTACH_PROGRESS_INIT; in e1000g_stop()
2085 e1000g_release_driver_control(&Adapter->shared); in e1000g_stop()
2087 e1000g_clear_all_interrupts(Adapter); in e1000g_stop()
2090 result = e1000_reset_hw(&Adapter->shared); in e1000g_stop()
2094 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_INVAL_STATE); in e1000g_stop()
2095 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_LOST); in e1000g_stop()
2098 mutex_enter(&Adapter->link_lock); in e1000g_stop()
2099 Adapter->link_complete = B_FALSE; in e1000g_stop()
2100 mutex_exit(&Adapter->link_lock); in e1000g_stop()
2103 e1000g_tx_clean(Adapter); in e1000g_stop()
2105 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) in e1000g_stop()
2106 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_LOST); in e1000g_stop()
2109 e1000g_rx_clean(Adapter); in e1000g_stop()
2116 if (Adapter->shared.mac.type >= e1000_pch_spt) in e1000g_stop()
2117 e1000g_flush_desc_rings(Adapter); in e1000g_stop()
2120 e1000g_release_dma_resources(Adapter); in e1000g_stop()
2123 rx_data = Adapter->rx_ring->rx_data; in e1000g_stop()
2134 atomic_inc_32(&Adapter->pending_rx_count); in e1000g_stop()
2139 if (Adapter->link_state != LINK_STATE_UNKNOWN) { in e1000g_stop()
2140 Adapter->link_state = LINK_STATE_UNKNOWN; in e1000g_stop()
2141 if (!Adapter->reset_flag) in e1000g_stop()
2142 mac_link_update(Adapter->mh, Adapter->link_state); in e1000g_stop()
2147 e1000g_rx_clean(struct e1000g *Adapter) in e1000g_rx_clean() argument
2149 e1000g_rx_data_t *rx_data = Adapter->rx_ring->rx_data; in e1000g_rx_clean()
2163 e1000g_tx_clean(struct e1000g *Adapter) in e1000g_tx_clean() argument
2171 tx_ring = Adapter->tx_ring; in e1000g_tx_clean()
2215 E1000_WRITE_REG(&Adapter->shared, E1000_TDH(0), 0); in e1000g_tx_clean()
2216 E1000_WRITE_REG(&Adapter->shared, E1000_TDT(0), 0); in e1000g_tx_clean()
2221 e1000g_tx_drain(struct e1000g *Adapter) in e1000g_tx_drain() argument
2227 tx_ring = Adapter->tx_ring; in e1000g_tx_drain()
2245 e1000g_rx_drain(struct e1000g *Adapter) in e1000g_rx_drain() argument
2254 done = (Adapter->pending_rx_count == 0); in e1000g_rx_drain()
2266 e1000g_reset_adapter(struct e1000g *Adapter) in e1000g_reset_adapter() argument
2269 disable_watchdog_timer(Adapter); in e1000g_reset_adapter()
2270 stop_link_timer(Adapter); in e1000g_reset_adapter()
2271 stop_82547_timer(Adapter->tx_ring); in e1000g_reset_adapter()
2273 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_reset_adapter()
2275 if (Adapter->stall_flag) { in e1000g_reset_adapter()
2276 Adapter->stall_flag = B_FALSE; in e1000g_reset_adapter()
2277 Adapter->reset_flag = B_TRUE; in e1000g_reset_adapter()
2280 if (!(Adapter->e1000g_state & E1000G_STARTED)) { in e1000g_reset_adapter()
2281 rw_exit(&Adapter->chip_lock); in e1000g_reset_adapter()
2285 e1000g_stop(Adapter, B_FALSE); in e1000g_reset_adapter()
2287 if (e1000g_start(Adapter, B_FALSE) != DDI_SUCCESS) { in e1000g_reset_adapter()
2288 rw_exit(&Adapter->chip_lock); in e1000g_reset_adapter()
2289 e1000g_log(Adapter, CE_WARN, "Reset failed"); in e1000g_reset_adapter()
2293 rw_exit(&Adapter->chip_lock); in e1000g_reset_adapter()
2296 enable_watchdog_timer(Adapter); in e1000g_reset_adapter()
2302 e1000g_global_reset(struct e1000g *Adapter) in e1000g_global_reset() argument
2305 disable_watchdog_timer(Adapter); in e1000g_global_reset()
2306 stop_link_timer(Adapter); in e1000g_global_reset()
2307 stop_82547_timer(Adapter->tx_ring); in e1000g_global_reset()
2309 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_global_reset()
2311 e1000g_stop(Adapter, B_TRUE); in e1000g_global_reset()
2313 Adapter->init_count = 0; in e1000g_global_reset()
2315 if (e1000g_start(Adapter, B_TRUE) != DDI_SUCCESS) { in e1000g_global_reset()
2316 rw_exit(&Adapter->chip_lock); in e1000g_global_reset()
2317 e1000g_log(Adapter, CE_WARN, "Reset failed"); in e1000g_global_reset()
2321 rw_exit(&Adapter->chip_lock); in e1000g_global_reset()
2324 enable_watchdog_timer(Adapter); in e1000g_global_reset()
2339 struct e1000g *Adapter; in e1000g_intr_pciexpress() local
2342 Adapter = (struct e1000g *)(uintptr_t)arg; in e1000g_intr_pciexpress()
2343 icr = E1000_READ_REG(&Adapter->shared, E1000_ICR); in e1000g_intr_pciexpress()
2345 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_intr_pciexpress()
2346 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in e1000g_intr_pciexpress()
2356 e1000g_intr_work(Adapter, icr); in e1000g_intr_pciexpress()
2377 struct e1000g *Adapter; in e1000g_intr() local
2380 Adapter = (struct e1000g *)(uintptr_t)arg; in e1000g_intr()
2381 icr = E1000_READ_REG(&Adapter->shared, E1000_ICR); in e1000g_intr()
2383 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_intr()
2384 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in e1000g_intr()
2394 e1000g_intr_work(Adapter, icr); in e1000g_intr()
2412 e1000g_intr_work(struct e1000g *Adapter, uint32_t icr) in e1000g_intr_work() argument
2415 hw = &Adapter->shared; in e1000g_intr_work()
2416 e1000g_tx_ring_t *tx_ring = Adapter->tx_ring; in e1000g_intr_work()
2418 Adapter->rx_pkt_cnt = 0; in e1000g_intr_work()
2419 Adapter->tx_pkt_cnt = 0; in e1000g_intr_work()
2421 rw_enter(&Adapter->chip_lock, RW_READER); in e1000g_intr_work()
2423 if (Adapter->e1000g_state & E1000G_SUSPENDED) { in e1000g_intr_work()
2424 rw_exit(&Adapter->chip_lock); in e1000g_intr_work()
2432 if (!(Adapter->e1000g_state & E1000G_STARTED)) { in e1000g_intr_work()
2433 rw_exit(&Adapter->chip_lock); in e1000g_intr_work()
2442 rx_ring = Adapter->rx_ring; in e1000g_intr_work()
2454 rw_exit(&Adapter->chip_lock); in e1000g_intr_work()
2456 mac_rx_ring(Adapter->mh, rx_ring->mrh, in e1000g_intr_work()
2459 rw_exit(&Adapter->chip_lock); in e1000g_intr_work()
2462 if (!Adapter->tx_intr_enable) in e1000g_intr_work()
2463 e1000g_clear_tx_interrupt(Adapter); in e1000g_intr_work()
2466 rw_enter(&Adapter->chip_lock, RW_READER); in e1000g_intr_work()
2469 rw_exit(&Adapter->chip_lock); in e1000g_intr_work()
2474 mac_tx_update(Adapter->mh); in e1000g_intr_work()
2491 stop_watchdog_timer(Adapter); in e1000g_intr_work()
2493 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_intr_work()
2499 Adapter->shared.mac.get_link_status = B_TRUE; in e1000g_intr_work()
2502 link_changed = e1000g_link_check(Adapter); in e1000g_intr_work()
2505 e1000g_get_phy_state(Adapter); in e1000g_intr_work()
2511 if (link_changed && !Adapter->link_complete) { in e1000g_intr_work()
2512 if (Adapter->link_state == LINK_STATE_UP) { in e1000g_intr_work()
2513 mutex_enter(&Adapter->link_lock); in e1000g_intr_work()
2514 Adapter->link_complete = B_TRUE; in e1000g_intr_work()
2515 tid = Adapter->link_tid; in e1000g_intr_work()
2516 Adapter->link_tid = 0; in e1000g_intr_work()
2517 mutex_exit(&Adapter->link_lock); in e1000g_intr_work()
2522 rw_exit(&Adapter->chip_lock); in e1000g_intr_work()
2532 if ((Adapter->link_state == LINK_STATE_DOWN) && in e1000g_intr_work()
2533 (Adapter->shared.mac.type == e1000_80003es2lan)) { in e1000g_intr_work()
2537 e1000g_log(Adapter, CE_WARN, in e1000g_intr_work()
2539 Adapter->esb2_workaround = B_TRUE; in e1000g_intr_work()
2541 if (!Adapter->reset_flag) in e1000g_intr_work()
2542 mac_link_update(Adapter->mh, in e1000g_intr_work()
2543 Adapter->link_state); in e1000g_intr_work()
2544 if (Adapter->link_state == LINK_STATE_UP) in e1000g_intr_work()
2545 Adapter->reset_flag = B_FALSE; in e1000g_intr_work()
2548 start_watchdog_timer(Adapter); in e1000g_intr_work()
2553 e1000g_init_unicst(struct e1000g *Adapter) in e1000g_init_unicst() argument
2558 hw = &Adapter->shared; in e1000g_init_unicst()
2560 if (Adapter->init_count == 0) { in e1000g_init_unicst()
2562 Adapter->unicst_total = min(hw->mac.rar_entry_count, in e1000g_init_unicst()
2589 Adapter->unicst_total = min(rar, in e1000g_init_unicst()
2596 Adapter->unicst_total--; in e1000g_init_unicst()
2600 Adapter->unicst_total = 1; in e1000g_init_unicst()
2602 Adapter->unicst_avail = Adapter->unicst_total; in e1000g_init_unicst()
2604 for (slot = 0; slot < Adapter->unicst_total; slot++) { in e1000g_init_unicst()
2606 Adapter->unicst_addr[slot].reg.high = 0; in e1000g_init_unicst()
2607 Adapter->unicst_addr[slot].reg.low = 0; in e1000g_init_unicst()
2616 for (slot = 0; slot < Adapter->unicst_total; slot++) in e1000g_init_unicst()
2617 if (Adapter->unicst_addr[slot].mac.set == 1) in e1000g_init_unicst()
2619 Adapter->unicst_addr[slot].mac.addr, slot); in e1000g_init_unicst()
2622 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) in e1000g_init_unicst()
2623 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in e1000g_init_unicst()
2627 e1000g_unicst_set(struct e1000g *Adapter, const uint8_t *mac_addr, in e1000g_unicst_set() argument
2632 hw = &Adapter->shared; in e1000g_unicst_set()
2655 Adapter->unicst_addr[slot].reg.high = 0; in e1000g_unicst_set()
2656 Adapter->unicst_addr[slot].reg.low = 0; in e1000g_unicst_set()
2658 bcopy(mac_addr, Adapter->unicst_addr[slot].mac.addr, in e1000g_unicst_set()
2661 Adapter->unicst_addr[slot].mac.set = 1; in e1000g_unicst_set()
2694 e1000g_rx_setup(Adapter); in e1000g_unicst_set()
2697 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_unicst_set()
2698 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in e1000g_unicst_set()
2706 multicst_add(struct e1000g *Adapter, const uint8_t *multiaddr) in multicst_add() argument
2708 struct e1000_hw *hw = &Adapter->shared; in multicst_add()
2716 e1000g_log(Adapter, CE_WARN, "Illegal multicast address"); in multicst_add()
2720 if (Adapter->mcast_count >= Adapter->mcast_max_num) { in multicst_add()
2722 e1000g_log(Adapter, CE_WARN, in multicst_add()
2724 Adapter->mcast_max_num); in multicst_add()
2729 if (Adapter->mcast_count == Adapter->mcast_alloc_count) { in multicst_add()
2730 old_len = Adapter->mcast_alloc_count * in multicst_add()
2732 new_len = (Adapter->mcast_alloc_count + MCAST_ALLOC_SIZE) * in multicst_add()
2738 e1000g_log(Adapter, CE_WARN, in multicst_add()
2743 if (Adapter->mcast_table != NULL) { in multicst_add()
2744 bcopy(Adapter->mcast_table, newtable, old_len); in multicst_add()
2745 kmem_free(Adapter->mcast_table, old_len); in multicst_add()
2747 Adapter->mcast_alloc_count += MCAST_ALLOC_SIZE; in multicst_add()
2748 Adapter->mcast_table = newtable; in multicst_add()
2752 &Adapter->mcast_table[Adapter->mcast_count], ETHERADDRL); in multicst_add()
2753 Adapter->mcast_count++; in multicst_add()
2758 e1000g_clear_interrupt(Adapter); in multicst_add()
2761 (uint8_t *)Adapter->mcast_table, Adapter->mcast_count); in multicst_add()
2763 e1000g_mask_interrupt(Adapter); in multicst_add()
2765 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in multicst_add()
2766 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in multicst_add()
2775 multicst_remove(struct e1000g *Adapter, const uint8_t *multiaddr) in multicst_remove() argument
2777 struct e1000_hw *hw = &Adapter->shared; in multicst_remove()
2783 for (i = 0; i < Adapter->mcast_count; i++) { in multicst_remove()
2784 if (bcmp(multiaddr, &Adapter->mcast_table[i], in multicst_remove()
2786 for (i++; i < Adapter->mcast_count; i++) { in multicst_remove()
2787 Adapter->mcast_table[i - 1] = in multicst_remove()
2788 Adapter->mcast_table[i]; in multicst_remove()
2790 Adapter->mcast_count--; in multicst_remove()
2795 if ((Adapter->mcast_alloc_count - Adapter->mcast_count) > in multicst_remove()
2797 old_len = Adapter->mcast_alloc_count * in multicst_remove()
2799 new_len = (Adapter->mcast_alloc_count - MCAST_ALLOC_SIZE) * in multicst_remove()
2804 bcopy(Adapter->mcast_table, newtable, new_len); in multicst_remove()
2805 kmem_free(Adapter->mcast_table, old_len); in multicst_remove()
2807 Adapter->mcast_alloc_count -= MCAST_ALLOC_SIZE; in multicst_remove()
2808 Adapter->mcast_table = newtable; in multicst_remove()
2815 e1000g_clear_interrupt(Adapter); in multicst_remove()
2818 (uint8_t *)Adapter->mcast_table, Adapter->mcast_count); in multicst_remove()
2820 e1000g_mask_interrupt(Adapter); in multicst_remove()
2822 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in multicst_remove()
2823 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in multicst_remove()
2831 e1000g_release_multicast(struct e1000g *Adapter) in e1000g_release_multicast() argument
2833 if (Adapter->mcast_table != NULL) { in e1000g_release_multicast()
2834 kmem_free(Adapter->mcast_table, in e1000g_release_multicast()
2835 Adapter->mcast_alloc_count * sizeof (struct ether_addr)); in e1000g_release_multicast()
2836 Adapter->mcast_table = NULL; in e1000g_release_multicast()
2843 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_m_multicst() local
2846 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_m_multicst()
2848 if (Adapter->e1000g_state & E1000G_SUSPENDED) { in e1000g_m_multicst()
2853 result = (add) ? multicst_add(Adapter, addr) in e1000g_m_multicst()
2854 : multicst_remove(Adapter, addr); in e1000g_m_multicst()
2857 rw_exit(&Adapter->chip_lock); in e1000g_m_multicst()
2865 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_m_promisc() local
2868 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_m_promisc()
2870 if (Adapter->e1000g_state & E1000G_SUSPENDED) { in e1000g_m_promisc()
2871 rw_exit(&Adapter->chip_lock); in e1000g_m_promisc()
2875 rctl = E1000_READ_REG(&Adapter->shared, E1000_RCTL); in e1000g_m_promisc()
2883 E1000_WRITE_REG(&Adapter->shared, E1000_RCTL, rctl); in e1000g_m_promisc()
2885 Adapter->e1000g_promisc = on; in e1000g_m_promisc()
2887 rw_exit(&Adapter->chip_lock); in e1000g_m_promisc()
2889 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_m_promisc()
2890 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in e1000g_m_promisc()
3010 e1000g_unicst_find(struct e1000g *Adapter, const uint8_t *mac_addr) in e1000g_unicst_find() argument
3014 for (slot = 0; slot < Adapter->unicst_total; slot++) { in e1000g_unicst_find()
3015 if ((Adapter->unicst_addr[slot].mac.set == 1) && in e1000g_unicst_find()
3016 (bcmp(Adapter->unicst_addr[slot].mac.addr, in e1000g_unicst_find()
3033 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_addmac() local
3036 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_addmac()
3038 if (Adapter->e1000g_state & E1000G_SUSPENDED) { in e1000g_addmac()
3039 rw_exit(&Adapter->chip_lock); in e1000g_addmac()
3043 if (e1000g_unicst_find(Adapter, mac_addr) != -1) { in e1000g_addmac()
3045 rw_exit(&Adapter->chip_lock); in e1000g_addmac()
3049 if (Adapter->unicst_avail == 0) { in e1000g_addmac()
3051 rw_exit(&Adapter->chip_lock); in e1000g_addmac()
3056 for (slot = 0; slot < Adapter->unicst_total; slot++) { in e1000g_addmac()
3057 if (Adapter->unicst_addr[slot].mac.set == 0) in e1000g_addmac()
3060 ASSERT(slot < Adapter->unicst_total); in e1000g_addmac()
3062 err = e1000g_unicst_set(Adapter, mac_addr, slot); in e1000g_addmac()
3064 Adapter->unicst_avail--; in e1000g_addmac()
3066 rw_exit(&Adapter->chip_lock); in e1000g_addmac()
3074 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_remmac() local
3077 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_remmac()
3079 if (Adapter->e1000g_state & E1000G_SUSPENDED) { in e1000g_remmac()
3080 rw_exit(&Adapter->chip_lock); in e1000g_remmac()
3084 slot = e1000g_unicst_find(Adapter, mac_addr); in e1000g_remmac()
3086 rw_exit(&Adapter->chip_lock); in e1000g_remmac()
3090 ASSERT(Adapter->unicst_addr[slot].mac.set); in e1000g_remmac()
3093 err = e1000g_unicst_set(Adapter, NULL, slot); in e1000g_remmac()
3095 Adapter->unicst_avail++; in e1000g_remmac()
3097 rw_exit(&Adapter->chip_lock); in e1000g_remmac()
3126 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_fill_ring() local
3127 e1000g_rx_ring_t *rx_ring = Adapter->rx_ring; in e1000g_fill_ring()
3148 if (Adapter->msi_enable) in e1000g_fill_ring()
3149 mintr->mi_ddi_handle = Adapter->htable[0]; in e1000g_fill_ring()
3157 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_fill_group() local
3166 Adapter->rx_group = gh; in e1000g_fill_group()
3168 infop->mgi_driver = (mac_group_driver_t)Adapter; in e1000g_fill_group()
3177 mintr->mi_handle = (mac_intr_handle_t)Adapter; in e1000g_fill_group()
3289 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_m_getcapab() local
3295 if (Adapter->tx_hcksum_enable) in e1000g_m_getcapab()
3306 if (Adapter->lso_enable) { in e1000g_m_getcapab()
3333 if (Adapter->shared.mac.ops.blink_led != NULL && in e1000g_m_getcapab()
3334 Adapter->shared.mac.ops.blink_led != in e1000g_m_getcapab()
3339 if (Adapter->shared.mac.ops.led_off != NULL && in e1000g_m_getcapab()
3340 Adapter->shared.mac.ops.led_off != in e1000g_m_getcapab()
3345 if (Adapter->shared.mac.ops.led_on != NULL && in e1000g_m_getcapab()
3346 Adapter->shared.mac.ops.led_on != in e1000g_m_getcapab()
3360 Adapter->e1000g_emul_blink = B_TRUE; in e1000g_m_getcapab()
3400 struct e1000g *Adapter = arg; in e1000g_m_setprop() local
3401 struct e1000_hw *hw = &Adapter->shared; in e1000g_m_setprop()
3402 struct e1000_fc_info *fc = &Adapter->shared.fc; in e1000g_m_setprop()
3407 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_m_setprop()
3409 if (Adapter->e1000g_state & E1000G_SUSPENDED) { in e1000g_m_setprop()
3410 rw_exit(&Adapter->chip_lock); in e1000g_m_setprop()
3414 if (Adapter->loopback_mode != E1000G_LB_NONE && in e1000g_m_setprop()
3420 rw_exit(&Adapter->chip_lock); in e1000g_m_setprop()
3430 Adapter->param_en_1000fdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3431 Adapter->param_adv_1000fdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3438 Adapter->param_en_100fdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3439 Adapter->param_adv_100fdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3446 Adapter->param_en_100hdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3447 Adapter->param_adv_100hdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3454 Adapter->param_en_10fdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3455 Adapter->param_adv_10fdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3462 Adapter->param_en_10hdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3463 Adapter->param_adv_10hdx = *(uint8_t *)pr_val; in e1000g_m_setprop()
3470 Adapter->param_adv_autoneg = *(uint8_t *)pr_val; in e1000g_m_setprop()
3496 e1000g_pch_limits(Adapter); in e1000g_m_setprop()
3497 if (e1000g_reset_link(Adapter) != DDI_SUCCESS) in e1000g_m_setprop()
3516 if (Adapter->e1000g_state & E1000G_STARTED) { in e1000g_m_setprop()
3521 cur_mtu = Adapter->default_mtu; in e1000g_m_setprop()
3531 (new_mtu > Adapter->max_mtu)) { in e1000g_m_setprop()
3537 err = mac_maxsdu_update(Adapter->mh, new_mtu); in e1000g_m_setprop()
3540 Adapter->default_mtu = new_mtu; in e1000g_m_setprop()
3541 Adapter->max_frame_size = in e1000g_m_setprop()
3548 e1000g_pch_limits(Adapter); in e1000g_m_setprop()
3549 e1000g_set_bufsize(Adapter); in e1000g_m_setprop()
3556 if (Adapter->max_frame_size >= in e1000g_m_setprop()
3558 if (Adapter->tx_desc_num_flag == 0) in e1000g_m_setprop()
3559 Adapter->tx_desc_num = in e1000g_m_setprop()
3562 if (Adapter->rx_desc_num_flag == 0) in e1000g_m_setprop()
3563 Adapter->rx_desc_num = in e1000g_m_setprop()
3566 if (Adapter->tx_buf_num_flag == 0) in e1000g_m_setprop()
3567 Adapter->tx_freelist_num = in e1000g_m_setprop()
3570 if (Adapter->rx_buf_num_flag == 0) in e1000g_m_setprop()
3571 Adapter->rx_freelist_limit = in e1000g_m_setprop()
3574 if (Adapter->tx_desc_num_flag == 0) in e1000g_m_setprop()
3575 Adapter->tx_desc_num = in e1000g_m_setprop()
3578 if (Adapter->rx_desc_num_flag == 0) in e1000g_m_setprop()
3579 Adapter->rx_desc_num = in e1000g_m_setprop()
3582 if (Adapter->tx_buf_num_flag == 0) in e1000g_m_setprop()
3583 Adapter->tx_freelist_num = in e1000g_m_setprop()
3586 if (Adapter->rx_buf_num_flag == 0) in e1000g_m_setprop()
3587 Adapter->rx_freelist_limit = in e1000g_m_setprop()
3593 err = e1000g_set_priv_prop(Adapter, pr_name, in e1000g_m_setprop()
3600 rw_exit(&Adapter->chip_lock); in e1000g_m_setprop()
3608 struct e1000g *Adapter = arg; in e1000g_m_getprop() local
3609 struct e1000_hw *hw = &Adapter->shared; in e1000g_m_getprop()
3610 struct e1000_fc_info *fc = &Adapter->shared.fc; in e1000g_m_getprop()
3618 bcopy(&Adapter->link_duplex, pr_val, in e1000g_m_getprop()
3623 tmp = Adapter->link_speed * 1000000ull; in e1000g_m_getprop()
3627 *(uint8_t *)pr_val = Adapter->param_adv_autoneg; in e1000g_m_getprop()
3648 *(uint8_t *)pr_val = Adapter->param_adv_1000fdx; in e1000g_m_getprop()
3651 *(uint8_t *)pr_val = Adapter->param_en_1000fdx; in e1000g_m_getprop()
3654 *(uint8_t *)pr_val = Adapter->param_adv_1000hdx; in e1000g_m_getprop()
3657 *(uint8_t *)pr_val = Adapter->param_en_1000hdx; in e1000g_m_getprop()
3660 *(uint8_t *)pr_val = Adapter->param_adv_100fdx; in e1000g_m_getprop()
3663 *(uint8_t *)pr_val = Adapter->param_en_100fdx; in e1000g_m_getprop()
3666 *(uint8_t *)pr_val = Adapter->param_adv_100hdx; in e1000g_m_getprop()
3669 *(uint8_t *)pr_val = Adapter->param_en_100hdx; in e1000g_m_getprop()
3672 *(uint8_t *)pr_val = Adapter->param_adv_10fdx; in e1000g_m_getprop()
3675 *(uint8_t *)pr_val = Adapter->param_en_10fdx; in e1000g_m_getprop()
3678 *(uint8_t *)pr_val = Adapter->param_adv_10hdx; in e1000g_m_getprop()
3681 *(uint8_t *)pr_val = Adapter->param_en_10hdx; in e1000g_m_getprop()
3685 *(uint8_t *)pr_val = Adapter->param_adv_100t4; in e1000g_m_getprop()
3689 Adapter->link_speed); in e1000g_m_getprop()
3692 err = e1000g_get_priv_prop(Adapter, pr_name, in e1000g_m_getprop()
3707 struct e1000g *Adapter = arg; in e1000g_m_propinfo() local
3708 struct e1000_hw *hw = &Adapter->shared; in e1000g_m_propinfo()
3729 ((Adapter->phy_ext_status & in e1000g_m_propinfo()
3731 (Adapter->phy_ext_status & in e1000g_m_propinfo()
3741 ((Adapter->phy_status & MII_SR_100X_FD_CAPS) || in e1000g_m_propinfo()
3742 (Adapter->phy_status & MII_SR_100T2_FD_CAPS)) in e1000g_m_propinfo()
3752 ((Adapter->phy_status & MII_SR_100X_HD_CAPS) || in e1000g_m_propinfo()
3753 (Adapter->phy_status & MII_SR_100T2_HD_CAPS)) in e1000g_m_propinfo()
3763 (Adapter->phy_status & MII_SR_10T_FD_CAPS) ? 1 : 0); in e1000g_m_propinfo()
3772 (Adapter->phy_status & MII_SR_10T_HD_CAPS) ? 1 : 0); in e1000g_m_propinfo()
3786 (Adapter->phy_status & MII_SR_AUTONEG_CAPS) in e1000g_m_propinfo()
3796 struct e1000_mac_info *mac = &Adapter->shared.mac; in e1000g_m_propinfo()
3797 struct e1000_phy_info *phy = &Adapter->shared.phy; in e1000g_m_propinfo()
3806 max = Adapter->max_mtu; in e1000g_m_propinfo()
3853 e1000g_set_priv_prop(struct e1000g *Adapter, const char *pr_name, in e1000g_set_priv_prop() argument
3858 struct e1000_hw *hw = &Adapter->shared; in e1000g_set_priv_prop()
3870 Adapter->tx_bcopy_thresh = (uint32_t)result; in e1000g_set_priv_prop()
3883 Adapter->tx_intr_enable = (result == 1) ? in e1000g_set_priv_prop()
3885 if (Adapter->tx_intr_enable) in e1000g_set_priv_prop()
3886 e1000g_mask_tx_interrupt(Adapter); in e1000g_set_priv_prop()
3888 e1000g_clear_tx_interrupt(Adapter); in e1000g_set_priv_prop()
3890 Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_set_priv_prop()
3891 ddi_fm_service_impact(Adapter->dip, in e1000g_set_priv_prop()
3908 Adapter->tx_intr_delay = (uint32_t)result; in e1000g_set_priv_prop()
3909 E1000_WRITE_REG(hw, E1000_TIDV, Adapter->tx_intr_delay); in e1000g_set_priv_prop()
3911 Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_set_priv_prop()
3912 ddi_fm_service_impact(Adapter->dip, in e1000g_set_priv_prop()
3929 Adapter->tx_intr_abs_delay = (uint32_t)result; in e1000g_set_priv_prop()
3931 Adapter->tx_intr_abs_delay); in e1000g_set_priv_prop()
3933 Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_set_priv_prop()
3934 ddi_fm_service_impact(Adapter->dip, in e1000g_set_priv_prop()
3951 Adapter->rx_bcopy_thresh = (uint32_t)result; in e1000g_set_priv_prop()
3964 Adapter->rx_limit_onintr = (uint32_t)result; in e1000g_set_priv_prop()
3977 Adapter->rx_intr_delay = (uint32_t)result; in e1000g_set_priv_prop()
3978 E1000_WRITE_REG(hw, E1000_RDTR, Adapter->rx_intr_delay); in e1000g_set_priv_prop()
3980 Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_set_priv_prop()
3981 ddi_fm_service_impact(Adapter->dip, in e1000g_set_priv_prop()
3998 Adapter->rx_intr_abs_delay = (uint32_t)result; in e1000g_set_priv_prop()
4000 Adapter->rx_intr_abs_delay); in e1000g_set_priv_prop()
4002 Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_set_priv_prop()
4003 ddi_fm_service_impact(Adapter->dip, in e1000g_set_priv_prop()
4021 Adapter->intr_throttling_rate = in e1000g_set_priv_prop()
4024 Adapter->intr_throttling_rate); in e1000g_set_priv_prop()
4026 Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_set_priv_prop()
4027 ddi_fm_service_impact(Adapter->dip, in e1000g_set_priv_prop()
4046 Adapter->intr_adaptive = (result == 1) ? in e1000g_set_priv_prop()
4058 e1000g_get_priv_prop(struct e1000g *Adapter, const char *pr_name, in e1000g_get_priv_prop() argument
4065 value = Adapter->param_adv_pause; in e1000g_get_priv_prop()
4070 value = Adapter->param_adv_asym_pause; in e1000g_get_priv_prop()
4075 value = Adapter->tx_bcopy_thresh; in e1000g_get_priv_prop()
4080 value = Adapter->tx_intr_enable; in e1000g_get_priv_prop()
4085 value = Adapter->tx_intr_delay; in e1000g_get_priv_prop()
4090 value = Adapter->tx_intr_abs_delay; in e1000g_get_priv_prop()
4095 value = Adapter->rx_bcopy_thresh; in e1000g_get_priv_prop()
4100 value = Adapter->rx_limit_onintr; in e1000g_get_priv_prop()
4105 value = Adapter->rx_intr_delay; in e1000g_get_priv_prop()
4110 value = Adapter->rx_intr_abs_delay; in e1000g_get_priv_prop()
4115 value = Adapter->intr_throttling_rate; in e1000g_get_priv_prop()
4120 value = Adapter->intr_adaptive; in e1000g_get_priv_prop()
4143 e1000g_get_conf(struct e1000g *Adapter) in e1000g_get_conf() argument
4145 struct e1000_hw *hw = &Adapter->shared; in e1000g_get_conf()
4153 if (Adapter->max_frame_size >= FRAME_SIZE_UPTO_4K) { in e1000g_get_conf()
4164 Adapter->tx_desc_num_flag = in e1000g_get_conf()
4165 e1000g_get_prop(Adapter, "NumTxDescriptors", in e1000g_get_conf()
4169 Adapter->tx_desc_num = propval; in e1000g_get_conf()
4174 Adapter->rx_desc_num_flag = in e1000g_get_conf()
4175 e1000g_get_prop(Adapter, "NumRxDescriptors", in e1000g_get_conf()
4179 Adapter->rx_desc_num = propval; in e1000g_get_conf()
4184 Adapter->rx_buf_num_flag = in e1000g_get_conf()
4185 e1000g_get_prop(Adapter, "NumRxFreeList", in e1000g_get_conf()
4189 Adapter->rx_freelist_limit = propval; in e1000g_get_conf()
4194 Adapter->tx_buf_num_flag = in e1000g_get_conf()
4195 e1000g_get_prop(Adapter, "NumTxPacketList", in e1000g_get_conf()
4199 Adapter->tx_freelist_num = propval; in e1000g_get_conf()
4205 (void) e1000g_get_prop(Adapter, "FlowControl", in e1000g_get_conf()
4215 (void) e1000g_get_prop(Adapter, "MaxNumReceivePackets", in e1000g_get_conf()
4218 Adapter->rx_limit_onintr = propval; in e1000g_get_conf()
4223 (void) e1000g_get_prop(Adapter, "SetMasterSlave", in e1000g_get_conf()
4232 (void) e1000g_get_prop(Adapter, "TbiCompatibilityEnable", in e1000g_get_conf()
4240 (void) e1000g_get_prop(Adapter, "MSIEnable", in e1000g_get_conf()
4242 Adapter->msi_enable = (propval == 1); in e1000g_get_conf()
4247 (void) e1000g_get_prop(Adapter, "intr_throttling_rate", in e1000g_get_conf()
4250 Adapter->intr_throttling_rate = propval; in e1000g_get_conf()
4256 (void) e1000g_get_prop(Adapter, "intr_adaptive", 0, 1, 1, in e1000g_get_conf()
4258 Adapter->intr_adaptive = (propval == 1); in e1000g_get_conf()
4263 (void) e1000g_get_prop(Adapter, "tx_hcksum_enable", in e1000g_get_conf()
4265 Adapter->tx_hcksum_enable = (propval == 1); in e1000g_get_conf()
4303 Adapter->tx_hcksum_enable = B_FALSE; in e1000g_get_conf()
4311 (void) e1000g_get_prop(Adapter, "lso_enable", in e1000g_get_conf()
4313 Adapter->lso_enable = (propval == 1); in e1000g_get_conf()
4318 if (Adapter->lso_enable) in e1000g_get_conf()
4319 Adapter->lso_premature_issue = B_TRUE; in e1000g_get_conf()
4327 Adapter->lso_enable = B_FALSE; in e1000g_get_conf()
4330 if (!Adapter->tx_hcksum_enable) { in e1000g_get_conf()
4331 Adapter->lso_premature_issue = B_FALSE; in e1000g_get_conf()
4332 Adapter->lso_enable = B_FALSE; in e1000g_get_conf()
4340 (void) e1000g_get_prop(Adapter, "mem_workaround_82546", in e1000g_get_conf()
4342 Adapter->mem_workaround_82546 = (propval == 1); in e1000g_get_conf()
4347 (void) e1000g_get_prop(Adapter, "mcast_max_num", in e1000g_get_conf()
4350 Adapter->mcast_max_num = propval; in e1000g_get_conf()
4367 e1000g_get_prop(struct e1000g *Adapter, /* point to per-adapter structure */ in e1000g_get_prop() argument
4382 if (ddi_prop_lookup_int_array(DDI_DEV_T_ANY, Adapter->dip, in e1000g_get_prop()
4385 if (Adapter->instance < nprops) { in e1000g_get_prop()
4386 propval = props[Adapter->instance]; in e1000g_get_prop()
4390 E1000G_DEBUGLOG_2(Adapter, E1000G_INFO_LEVEL, in e1000g_get_prop()
4410 E1000G_DEBUGLOG_2(Adapter, E1000G_INFO_LEVEL, in e1000g_get_prop()
4417 E1000G_DEBUGLOG_2(Adapter, E1000G_INFO_LEVEL, in e1000g_get_prop()
4427 e1000g_link_check(struct e1000g *Adapter) in e1000g_link_check() argument
4434 hw = &Adapter->shared; in e1000g_link_check()
4436 if (e1000g_link_up(Adapter)) { in e1000g_link_check()
4440 if (Adapter->link_state != LINK_STATE_UP) { in e1000g_link_check()
4442 Adapter->link_speed = speed; in e1000g_link_check()
4443 Adapter->link_duplex = duplex; in e1000g_link_check()
4444 Adapter->link_state = LINK_STATE_UP; in e1000g_link_check()
4447 if (Adapter->link_speed == SPEED_1000) in e1000g_link_check()
4448 Adapter->stall_threshold = TX_STALL_TIME_2S; in e1000g_link_check()
4450 Adapter->stall_threshold = TX_STALL_TIME_8S; in e1000g_link_check()
4452 Adapter->tx_link_down_timeout = 0; in e1000g_link_check()
4464 Adapter->smartspeed = 0; in e1000g_link_check()
4466 if (Adapter->link_state != LINK_STATE_DOWN) { in e1000g_link_check()
4467 Adapter->link_speed = 0; in e1000g_link_check()
4468 Adapter->link_duplex = 0; in e1000g_link_check()
4469 Adapter->link_state = LINK_STATE_DOWN; in e1000g_link_check()
4485 e1000g_smartspeed(Adapter); in e1000g_link_check()
4488 if (Adapter->e1000g_state & E1000G_STARTED) { in e1000g_link_check()
4489 if (Adapter->tx_link_down_timeout < in e1000g_link_check()
4491 Adapter->tx_link_down_timeout++; in e1000g_link_check()
4492 } else if (Adapter->tx_link_down_timeout == in e1000g_link_check()
4494 e1000g_tx_clean(Adapter); in e1000g_link_check()
4495 Adapter->tx_link_down_timeout++; in e1000g_link_check()
4500 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) in e1000g_link_check()
4501 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in e1000g_link_check()
4510 e1000g_reset_link(struct e1000g *Adapter) in e1000g_reset_link() argument
4517 mac = &Adapter->shared.mac; in e1000g_reset_link()
4518 phy = &Adapter->shared.phy; in e1000g_reset_link()
4519 hw = &Adapter->shared; in e1000g_reset_link()
4525 if (Adapter->param_adv_autoneg == 1) { in e1000g_reset_link()
4532 if (Adapter->param_adv_1000fdx == 1) in e1000g_reset_link()
4535 if (Adapter->param_adv_100fdx == 1) in e1000g_reset_link()
4538 if (Adapter->param_adv_100hdx == 1) in e1000g_reset_link()
4541 if (Adapter->param_adv_10fdx == 1) in e1000g_reset_link()
4544 if (Adapter->param_adv_10hdx == 1) in e1000g_reset_link()
4556 if (Adapter->param_adv_100fdx == 1) in e1000g_reset_link()
4558 else if (Adapter->param_adv_100hdx == 1) in e1000g_reset_link()
4560 else if (Adapter->param_adv_10fdx == 1) in e1000g_reset_link()
4562 else if (Adapter->param_adv_10hdx == 1) in e1000g_reset_link()
4570 e1000g_log(Adapter, CE_WARN, in e1000g_reset_link()
4578 return (e1000_setup_link(&Adapter->shared)); in e1000g_reset_link()
4582 e1000g_timer_tx_resched(struct e1000g *Adapter) in e1000g_timer_tx_resched() argument
4584 e1000g_tx_ring_t *tx_ring = Adapter->tx_ring; in e1000g_timer_tx_resched()
4586 rw_enter(&Adapter->chip_lock, RW_READER); in e1000g_timer_tx_resched()
4591 (Adapter->e1000g_state & E1000G_STARTED) && in e1000g_timer_tx_resched()
4594 mac_tx_update(Adapter->mh); in e1000g_timer_tx_resched()
4599 rw_exit(&Adapter->chip_lock); in e1000g_timer_tx_resched()
4605 struct e1000g *Adapter = (struct e1000g *)ws; in e1000g_local_timer() local
4610 hw = &Adapter->shared; in e1000g_local_timer()
4612 if (Adapter->e1000g_state & E1000G_ERROR) { in e1000g_local_timer()
4613 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_local_timer()
4614 Adapter->e1000g_state &= ~E1000G_ERROR; in e1000g_local_timer()
4615 rw_exit(&Adapter->chip_lock); in e1000g_local_timer()
4617 Adapter->reset_count++; in e1000g_local_timer()
4618 if (e1000g_global_reset(Adapter)) { in e1000g_local_timer()
4619 ddi_fm_service_impact(Adapter->dip, in e1000g_local_timer()
4621 e1000g_timer_tx_resched(Adapter); in e1000g_local_timer()
4623 ddi_fm_service_impact(Adapter->dip, in e1000g_local_timer()
4628 if (e1000g_stall_check(Adapter)) { in e1000g_local_timer()
4629 E1000G_DEBUGLOG_0(Adapter, E1000G_INFO_LEVEL, in e1000g_local_timer()
4631 e1000g_fm_ereport(Adapter, DDI_FM_DEVICE_STALL); in e1000g_local_timer()
4632 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_LOST); in e1000g_local_timer()
4633 Adapter->reset_count++; in e1000g_local_timer()
4634 if (e1000g_reset_adapter(Adapter)) { in e1000g_local_timer()
4635 ddi_fm_service_impact(Adapter->dip, in e1000g_local_timer()
4637 e1000g_timer_tx_resched(Adapter); in e1000g_local_timer()
4643 rw_enter(&Adapter->chip_lock, RW_READER); in e1000g_local_timer()
4644 if (Adapter->link_complete) in e1000g_local_timer()
4645 link_changed = e1000g_link_check(Adapter); in e1000g_local_timer()
4646 rw_exit(&Adapter->chip_lock); in e1000g_local_timer()
4649 if (!Adapter->reset_flag && in e1000g_local_timer()
4650 (Adapter->e1000g_state & E1000G_STARTED) && in e1000g_local_timer()
4651 !(Adapter->e1000g_state & E1000G_SUSPENDED)) in e1000g_local_timer()
4652 mac_link_update(Adapter->mh, Adapter->link_state); in e1000g_local_timer()
4653 if (Adapter->link_state == LINK_STATE_UP) in e1000g_local_timer()
4654 Adapter->reset_flag = B_FALSE; in e1000g_local_timer()
4660 if (Adapter->esb2_workaround) { in e1000g_local_timer()
4661 Adapter->esb2_workaround = B_FALSE; in e1000g_local_timer()
4662 (void) e1000g_reset_adapter(Adapter); in e1000g_local_timer()
4699 ((Adapter->link_speed == SPEED_100) || in e1000g_local_timer()
4700 (Adapter->link_speed == SPEED_10))) { in e1000g_local_timer()
4708 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) in e1000g_local_timer()
4709 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in e1000g_local_timer()
4711 e1000g_timer_tx_resched(Adapter); in e1000g_local_timer()
4713 restart_watchdog_timer(Adapter); in e1000g_local_timer()
4727 struct e1000g *Adapter = (struct e1000g *)arg; in e1000g_link_timer() local
4729 mutex_enter(&Adapter->link_lock); in e1000g_link_timer()
4730 Adapter->link_complete = B_TRUE; in e1000g_link_timer()
4731 Adapter->link_tid = 0; in e1000g_link_timer()
4732 mutex_exit(&Adapter->link_lock); in e1000g_link_timer()
4742 e1000g_force_speed_duplex(struct e1000g *Adapter) in e1000g_force_speed_duplex() argument
4746 struct e1000_mac_info *mac = &Adapter->shared.mac; in e1000g_force_speed_duplex()
4747 struct e1000_phy_info *phy = &Adapter->shared.phy; in e1000g_force_speed_duplex()
4752 (void) e1000g_get_prop(Adapter, "ForceSpeedDuplex", in e1000g_force_speed_duplex()
4797 (void) e1000g_get_prop(Adapter, "AutoNegAdvertised", in e1000g_force_speed_duplex()
4811 e1000g_get_max_frame_size(struct e1000g *Adapter) in e1000g_get_max_frame_size() argument
4818 (void) e1000g_get_prop(Adapter, "MaxFrameSize", 0, 3, 0, in e1000g_get_max_frame_size()
4823 Adapter->default_mtu = ETHERMTU; in e1000g_get_max_frame_size()
4826 Adapter->default_mtu = FRAME_SIZE_UPTO_4K - in e1000g_get_max_frame_size()
4830 Adapter->default_mtu = FRAME_SIZE_UPTO_8K - in e1000g_get_max_frame_size()
4834 Adapter->default_mtu = FRAME_SIZE_UPTO_16K - in e1000g_get_max_frame_size()
4838 Adapter->default_mtu = ETHERMTU; in e1000g_get_max_frame_size()
4846 if (Adapter->default_mtu > Adapter->max_mtu) in e1000g_get_max_frame_size()
4847 Adapter->default_mtu = Adapter->max_mtu; in e1000g_get_max_frame_size()
4849 Adapter->max_frame_size = e1000g_mtu2maxframe(Adapter->default_mtu); in e1000g_get_max_frame_size()
4859 e1000g_pch_limits(struct e1000g *Adapter) in e1000g_pch_limits() argument
4861 struct e1000_hw *hw = &Adapter->shared; in e1000g_pch_limits()
4868 if (Adapter->max_frame_size > DEFAULT_FRAME_SIZE) { in e1000g_pch_limits()
4872 Adapter->param_adv_autoneg = 1; in e1000g_pch_limits()
4873 Adapter->param_adv_1000fdx = 1; in e1000g_pch_limits()
4875 Adapter->param_adv_100fdx = 0; in e1000g_pch_limits()
4876 Adapter->param_adv_100hdx = 0; in e1000g_pch_limits()
4877 Adapter->param_adv_10fdx = 0; in e1000g_pch_limits()
4878 Adapter->param_adv_10hdx = 0; in e1000g_pch_limits()
4880 e1000g_param_sync(Adapter); in e1000g_pch_limits()
4898 arm_watchdog_timer(struct e1000g *Adapter) in arm_watchdog_timer() argument
4900 Adapter->watchdog_tid = in arm_watchdog_timer()
4902 (void *)Adapter, 1 * drv_usectohz(1000000)); in arm_watchdog_timer()
4907 enable_watchdog_timer(struct e1000g *Adapter) in enable_watchdog_timer() argument
4909 mutex_enter(&Adapter->watchdog_lock); in enable_watchdog_timer()
4911 if (!Adapter->watchdog_timer_enabled) { in enable_watchdog_timer()
4912 Adapter->watchdog_timer_enabled = B_TRUE; in enable_watchdog_timer()
4913 Adapter->watchdog_timer_started = B_TRUE; in enable_watchdog_timer()
4914 arm_watchdog_timer(Adapter); in enable_watchdog_timer()
4917 mutex_exit(&Adapter->watchdog_lock); in enable_watchdog_timer()
4921 disable_watchdog_timer(struct e1000g *Adapter) in disable_watchdog_timer() argument
4925 mutex_enter(&Adapter->watchdog_lock); in disable_watchdog_timer()
4927 Adapter->watchdog_timer_enabled = B_FALSE; in disable_watchdog_timer()
4928 Adapter->watchdog_timer_started = B_FALSE; in disable_watchdog_timer()
4929 tid = Adapter->watchdog_tid; in disable_watchdog_timer()
4930 Adapter->watchdog_tid = 0; in disable_watchdog_timer()
4932 mutex_exit(&Adapter->watchdog_lock); in disable_watchdog_timer()
4939 start_watchdog_timer(struct e1000g *Adapter) in start_watchdog_timer() argument
4941 mutex_enter(&Adapter->watchdog_lock); in start_watchdog_timer()
4943 if (Adapter->watchdog_timer_enabled) { in start_watchdog_timer()
4944 if (!Adapter->watchdog_timer_started) { in start_watchdog_timer()
4945 Adapter->watchdog_timer_started = B_TRUE; in start_watchdog_timer()
4946 arm_watchdog_timer(Adapter); in start_watchdog_timer()
4950 mutex_exit(&Adapter->watchdog_lock); in start_watchdog_timer()
4954 restart_watchdog_timer(struct e1000g *Adapter) in restart_watchdog_timer() argument
4956 mutex_enter(&Adapter->watchdog_lock); in restart_watchdog_timer()
4958 if (Adapter->watchdog_timer_started) in restart_watchdog_timer()
4959 arm_watchdog_timer(Adapter); in restart_watchdog_timer()
4961 mutex_exit(&Adapter->watchdog_lock); in restart_watchdog_timer()
4965 stop_watchdog_timer(struct e1000g *Adapter) in stop_watchdog_timer() argument
4969 mutex_enter(&Adapter->watchdog_lock); in stop_watchdog_timer()
4971 Adapter->watchdog_timer_started = B_FALSE; in stop_watchdog_timer()
4972 tid = Adapter->watchdog_tid; in stop_watchdog_timer()
4973 Adapter->watchdog_tid = 0; in stop_watchdog_timer()
4975 mutex_exit(&Adapter->watchdog_lock); in stop_watchdog_timer()
4982 stop_link_timer(struct e1000g *Adapter) in stop_link_timer() argument
4987 mutex_enter(&Adapter->link_lock); in stop_link_timer()
4989 tid = Adapter->link_tid; in stop_link_timer()
4990 Adapter->link_tid = 0; in stop_link_timer()
4992 mutex_exit(&Adapter->link_lock); in stop_link_timer()
5017 e1000g_clear_interrupt(struct e1000g *Adapter) in e1000g_clear_interrupt() argument
5019 E1000_WRITE_REG(&Adapter->shared, E1000_IMC, in e1000g_clear_interrupt()
5024 e1000g_mask_interrupt(struct e1000g *Adapter) in e1000g_mask_interrupt() argument
5026 E1000_WRITE_REG(&Adapter->shared, E1000_IMS, in e1000g_mask_interrupt()
5029 if (Adapter->tx_intr_enable) in e1000g_mask_interrupt()
5030 e1000g_mask_tx_interrupt(Adapter); in e1000g_mask_interrupt()
5037 e1000g_clear_all_interrupts(struct e1000g *Adapter) in e1000g_clear_all_interrupts() argument
5039 E1000_WRITE_REG(&Adapter->shared, E1000_IMC, 0xffffffff); in e1000g_clear_all_interrupts()
5043 e1000g_mask_tx_interrupt(struct e1000g *Adapter) in e1000g_mask_tx_interrupt() argument
5045 E1000_WRITE_REG(&Adapter->shared, E1000_IMS, E1000_IMS_TXDW); in e1000g_mask_tx_interrupt()
5049 e1000g_clear_tx_interrupt(struct e1000g *Adapter) in e1000g_clear_tx_interrupt() argument
5051 E1000_WRITE_REG(&Adapter->shared, E1000_IMC, E1000_IMS_TXDW); in e1000g_clear_tx_interrupt()
5055 e1000g_smartspeed(struct e1000g *Adapter) in e1000g_smartspeed() argument
5057 struct e1000_hw *hw = &Adapter->shared; in e1000g_smartspeed()
5074 if (Adapter->smartspeed == 0) { in e1000g_smartspeed()
5107 Adapter->smartspeed++; in e1000g_smartspeed()
5125 } else if (Adapter->smartspeed == E1000_SMARTSPEED_DOWNSHIFT) { in e1000g_smartspeed()
5159 if (Adapter->smartspeed++ == E1000_SMARTSPEED_MAX) in e1000g_smartspeed()
5160 Adapter->smartspeed = 0; in e1000g_smartspeed()
5189 e1000g_stall_check(struct e1000g *Adapter) in e1000g_stall_check() argument
5193 tx_ring = Adapter->tx_ring; in e1000g_stall_check()
5195 if (Adapter->link_state != LINK_STATE_UP) in e1000g_stall_check()
5200 if (Adapter->stall_flag) in e1000g_stall_check()
5404 e1000g_loopback_ioctl(struct e1000g *Adapter, struct iocblk *iocp, mblk_t *mp) in e1000g_loopback_ioctl() argument
5413 hw = &Adapter->shared; in e1000g_loopback_ioctl()
5420 "Loopback is not supported on e1000g%d", Adapter->instance); in e1000g_loopback_ioctl()
5433 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_loopback_ioctl()
5434 e1000g_get_phy_state(Adapter); in e1000g_loopback_ioctl()
5443 e1000g_get_phy_state(Adapter); in e1000g_loopback_ioctl()
5444 rw_exit(&Adapter->chip_lock); in e1000g_loopback_ioctl()
5447 if ((Adapter->phy_ext_status & IEEE_ESR_1000T_FD_CAPS) || in e1000g_loopback_ioctl()
5448 (Adapter->phy_ext_status & IEEE_ESR_1000X_FD_CAPS) || in e1000g_loopback_ioctl()
5460 if ((Adapter->phy_status & MII_SR_100X_FD_CAPS) || in e1000g_loopback_ioctl()
5461 (Adapter->phy_status & MII_SR_100T2_FD_CAPS)) in e1000g_loopback_ioctl()
5463 if (Adapter->phy_status & MII_SR_10T_FD_CAPS) in e1000g_loopback_ioctl()
5472 if ((Adapter->phy_ext_status & IEEE_ESR_1000T_FD_CAPS) || in e1000g_loopback_ioctl()
5473 (Adapter->phy_ext_status & IEEE_ESR_1000X_FD_CAPS) || in e1000g_loopback_ioctl()
5485 if ((Adapter->phy_status & MII_SR_100X_FD_CAPS) || in e1000g_loopback_ioctl()
5486 (Adapter->phy_status & MII_SR_100T2_FD_CAPS)) in e1000g_loopback_ioctl()
5488 if (Adapter->phy_status & MII_SR_10T_FD_CAPS) in e1000g_loopback_ioctl()
5498 if ((Adapter->phy_ext_status & IEEE_ESR_1000T_FD_CAPS) || in e1000g_loopback_ioctl()
5499 (Adapter->phy_ext_status & IEEE_ESR_1000X_FD_CAPS) || in e1000g_loopback_ioctl()
5511 if ((Adapter->phy_status & MII_SR_100X_FD_CAPS) || in e1000g_loopback_ioctl()
5512 (Adapter->phy_status & MII_SR_100T2_FD_CAPS)) in e1000g_loopback_ioctl()
5514 if (Adapter->phy_status & MII_SR_10T_FD_CAPS) in e1000g_loopback_ioctl()
5524 *lbmp = Adapter->loopback_mode; in e1000g_loopback_ioctl()
5533 if (!e1000g_set_loopback_mode(Adapter, *lbmp)) in e1000g_loopback_ioctl()
5541 if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) { in e1000g_loopback_ioctl()
5542 ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED); in e1000g_loopback_ioctl()
5575 e1000g_set_loopback_mode(struct e1000g *Adapter, uint32_t mode) in e1000g_set_loopback_mode() argument
5581 if (mode == Adapter->loopback_mode) in e1000g_set_loopback_mode()
5584 hw = &Adapter->shared; in e1000g_set_loopback_mode()
5587 Adapter->loopback_mode = mode; in e1000g_set_loopback_mode()
5592 (void) e1000g_reset_adapter(Adapter); in e1000g_set_loopback_mode()
5599 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_set_loopback_mode()
5603 rw_exit(&Adapter->chip_lock); in e1000g_set_loopback_mode()
5607 e1000g_set_external_loopback_1000(Adapter); in e1000g_set_loopback_mode()
5611 e1000g_set_external_loopback_100(Adapter); in e1000g_set_loopback_mode()
5615 e1000g_set_external_loopback_10(Adapter); in e1000g_set_loopback_mode()
5619 e1000g_set_internal_loopback(Adapter); in e1000g_set_loopback_mode()
5625 rw_exit(&Adapter->chip_lock); in e1000g_set_loopback_mode()
5631 rw_enter(&Adapter->chip_lock, RW_WRITER); in e1000g_set_loopback_mode()
5633 link_up = e1000g_link_up(Adapter); in e1000g_set_loopback_mode()
5635 rw_exit(&Adapter->chip_lock); in e1000g_set_loopback_mode()
5638 E1000G_DEBUGLOG_0(Adapter, E1000G_INFO_LEVEL, in e1000g_set_loopback_mode()
5642 E1000G_DEBUGLOG_0(Adapter, E1000G_INFO_LEVEL, in e1000g_set_loopback_mode()
5644 (void) e1000g_reset_adapter(Adapter); in e1000g_set_loopback_mode()
5652 Adapter->loopback_mode = E1000G_LB_NONE; in e1000g_set_loopback_mode()
5656 (void) e1000g_reset_adapter(Adapter); in e1000g_set_loopback_mode()
5659 E1000G_DEBUGLOG_0(Adapter, E1000G_INFO_LEVEL, in e1000g_set_loopback_mode()
5675 e1000g_set_internal_loopback(struct e1000g *Adapter) in e1000g_set_internal_loopback() argument
5684 hw = &Adapter->shared; in e1000g_set_internal_loopback()
5846 e1000g_set_external_loopback_1000(struct e1000g *Adapter) in e1000g_set_external_loopback_1000() argument
5856 hw = &Adapter->shared; in e1000g_set_external_loopback_1000()
5945 Adapter->param_adv_autoneg = 1; in e1000g_set_external_loopback_1000()
5946 Adapter->param_adv_1000fdx = 1; in e1000g_set_external_loopback_1000()
5947 (void) e1000g_reset_link(Adapter); in e1000g_set_external_loopback_1000()
5953 e1000g_set_external_loopback_100(struct e1000g *Adapter) in e1000g_set_external_loopback_100() argument
5959 hw = &Adapter->shared; in e1000g_set_external_loopback_100()
5990 e1000g_set_external_loopback_10(struct e1000g *Adapter) in e1000g_set_external_loopback_10() argument
5996 hw = &Adapter->shared; in e1000g_set_external_loopback_10()
6028 e1000g_find_mac_address(struct e1000g *Adapter) in e1000g_find_mac_address() argument
6030 struct e1000_hw *hw = &Adapter->shared; in e1000g_find_mac_address()
6046 err = ddi_prop_lookup_byte_array(DDI_DEV_T_ANY, Adapter->dip, in e1000g_find_mac_address()
6061 if (ddi_prop_lookup_byte_array(DDI_DEV_T_ANY, Adapter->dip, 0, in e1000g_find_mac_address()
6078 err = ddi_prop_lookup_byte_array(DDI_DEV_T_ANY, Adapter->dip, in e1000g_find_mac_address()
6099 e1000g_add_intrs(struct e1000g *Adapter) in e1000g_add_intrs() argument
6105 devinfo = Adapter->dip; in e1000g_add_intrs()
6111 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_add_intrs()
6123 if (Adapter->shared.mac.type < e1000_82571) in e1000g_add_intrs()
6124 Adapter->msi_enable = B_FALSE; in e1000g_add_intrs()
6126 if ((intr_types & DDI_INTR_TYPE_MSI) && Adapter->msi_enable) { in e1000g_add_intrs()
6127 rc = e1000g_intr_add(Adapter, DDI_INTR_TYPE_MSI); in e1000g_add_intrs()
6131 E1000G_DEBUGLOG_0(Adapter, E1000G_WARN_LEVEL, in e1000g_add_intrs()
6134 Adapter->intr_type = DDI_INTR_TYPE_MSI; in e1000g_add_intrs()
6138 if ((Adapter->intr_type == 0) && in e1000g_add_intrs()
6140 rc = e1000g_intr_add(Adapter, DDI_INTR_TYPE_FIXED); in e1000g_add_intrs()
6143 E1000G_DEBUGLOG_0(Adapter, E1000G_WARN_LEVEL, in e1000g_add_intrs()
6148 Adapter->intr_type = DDI_INTR_TYPE_FIXED; in e1000g_add_intrs()
6151 if (Adapter->intr_type == 0) { in e1000g_add_intrs()
6152 E1000G_DEBUGLOG_0(Adapter, E1000G_WARN_LEVEL, in e1000g_add_intrs()
6164 e1000g_intr_add(struct e1000g *Adapter, int intr_type) in e1000g_intr_add() argument
6172 devinfo = Adapter->dip; in e1000g_intr_add()
6177 E1000G_DEBUGLOG_2(Adapter, E1000G_WARN_LEVEL, in e1000g_intr_add()
6186 E1000G_DEBUGLOG_2(Adapter, E1000G_WARN_LEVEL, in e1000g_intr_add()
6194 E1000G_DEBUGLOG_2(Adapter, E1000G_WARN_LEVEL, in e1000g_intr_add()
6200 Adapter->intr_size = count * sizeof (ddi_intr_handle_t); in e1000g_intr_add()
6201 Adapter->htable = kmem_alloc(Adapter->intr_size, KM_SLEEP); in e1000g_intr_add()
6207 rc = ddi_intr_alloc(devinfo, Adapter->htable, intr_type, inum, in e1000g_intr_add()
6211 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_intr_add()
6214 kmem_free(Adapter->htable, Adapter->intr_size); in e1000g_intr_add()
6220 E1000G_DEBUGLOG_2(Adapter, E1000G_WARN_LEVEL, in e1000g_intr_add()
6225 Adapter->intr_cnt = actual; in e1000g_intr_add()
6228 rc = ddi_intr_get_pri(Adapter->htable[0], &Adapter->intr_pri); in e1000g_intr_add()
6231 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_intr_add()
6236 (void) ddi_intr_free(Adapter->htable[y]); in e1000g_intr_add()
6238 kmem_free(Adapter->htable, Adapter->intr_size); in e1000g_intr_add()
6248 if (Adapter->shared.mac.type < e1000_82571) in e1000g_intr_add()
6255 rc = ddi_intr_add_handler(Adapter->htable[x], in e1000g_intr_add()
6256 intr_handler, (caddr_t)Adapter, NULL); in e1000g_intr_add()
6259 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_intr_add()
6265 Adapter->htable[y]); in e1000g_intr_add()
6269 (void) ddi_intr_free(Adapter->htable[y]); in e1000g_intr_add()
6271 kmem_free(Adapter->htable, Adapter->intr_size); in e1000g_intr_add()
6276 rc = ddi_intr_get_cap(Adapter->htable[0], &Adapter->intr_cap); in e1000g_intr_add()
6279 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_intr_add()
6284 (void) ddi_intr_remove_handler(Adapter->htable[y]); in e1000g_intr_add()
6285 (void) ddi_intr_free(Adapter->htable[y]); in e1000g_intr_add()
6288 kmem_free(Adapter->htable, Adapter->intr_size); in e1000g_intr_add()
6296 e1000g_rem_intrs(struct e1000g *Adapter) in e1000g_rem_intrs() argument
6301 for (x = 0; x < Adapter->intr_cnt; x++) { in e1000g_rem_intrs()
6302 rc = ddi_intr_remove_handler(Adapter->htable[x]); in e1000g_rem_intrs()
6304 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_rem_intrs()
6309 rc = ddi_intr_free(Adapter->htable[x]); in e1000g_rem_intrs()
6311 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_rem_intrs()
6317 kmem_free(Adapter->htable, Adapter->intr_size); in e1000g_rem_intrs()
6323 e1000g_enable_intrs(struct e1000g *Adapter) in e1000g_enable_intrs() argument
6329 if (Adapter->intr_cap & DDI_INTR_FLAG_BLOCK) { in e1000g_enable_intrs()
6331 rc = ddi_intr_block_enable(Adapter->htable, in e1000g_enable_intrs()
6332 Adapter->intr_cnt); in e1000g_enable_intrs()
6334 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_enable_intrs()
6340 for (x = 0; x < Adapter->intr_cnt; x++) { in e1000g_enable_intrs()
6341 rc = ddi_intr_enable(Adapter->htable[x]); in e1000g_enable_intrs()
6343 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_enable_intrs()
6354 e1000g_disable_intrs(struct e1000g *Adapter) in e1000g_disable_intrs() argument
6360 if (Adapter->intr_cap & DDI_INTR_FLAG_BLOCK) { in e1000g_disable_intrs()
6361 rc = ddi_intr_block_disable(Adapter->htable, in e1000g_disable_intrs()
6362 Adapter->intr_cnt); in e1000g_disable_intrs()
6364 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_disable_intrs()
6369 for (x = 0; x < Adapter->intr_cnt; x++) { in e1000g_disable_intrs()
6370 rc = ddi_intr_disable(Adapter->htable[x]); in e1000g_disable_intrs()
6372 E1000G_DEBUGLOG_1(Adapter, E1000G_WARN_LEVEL, in e1000g_disable_intrs()
6386 e1000g_get_phy_state(struct e1000g *Adapter) in e1000g_get_phy_state() argument
6388 struct e1000_hw *hw = &Adapter->shared; in e1000g_get_phy_state()
6391 (void) e1000_read_phy_reg(hw, PHY_CONTROL, &Adapter->phy_ctrl); in e1000g_get_phy_state()
6392 (void) e1000_read_phy_reg(hw, PHY_STATUS, &Adapter->phy_status); in e1000g_get_phy_state()
6394 &Adapter->phy_an_adv); in e1000g_get_phy_state()
6396 &Adapter->phy_an_exp); in e1000g_get_phy_state()
6398 &Adapter->phy_ext_status); in e1000g_get_phy_state()
6400 &Adapter->phy_1000t_ctrl); in e1000g_get_phy_state()
6402 &Adapter->phy_1000t_status); in e1000g_get_phy_state()
6404 &Adapter->phy_lp_able); in e1000g_get_phy_state()
6406 Adapter->param_autoneg_cap = in e1000g_get_phy_state()
6407 (Adapter->phy_status & MII_SR_AUTONEG_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6408 Adapter->param_pause_cap = in e1000g_get_phy_state()
6409 (Adapter->phy_an_adv & NWAY_AR_PAUSE) ? 1 : 0; in e1000g_get_phy_state()
6410 Adapter->param_asym_pause_cap = in e1000g_get_phy_state()
6411 (Adapter->phy_an_adv & NWAY_AR_ASM_DIR) ? 1 : 0; in e1000g_get_phy_state()
6412 Adapter->param_1000fdx_cap = in e1000g_get_phy_state()
6413 ((Adapter->phy_ext_status & IEEE_ESR_1000T_FD_CAPS) || in e1000g_get_phy_state()
6414 (Adapter->phy_ext_status & IEEE_ESR_1000X_FD_CAPS)) ? 1 : 0; in e1000g_get_phy_state()
6415 Adapter->param_1000hdx_cap = in e1000g_get_phy_state()
6416 ((Adapter->phy_ext_status & IEEE_ESR_1000T_HD_CAPS) || in e1000g_get_phy_state()
6417 (Adapter->phy_ext_status & IEEE_ESR_1000X_HD_CAPS)) ? 1 : 0; in e1000g_get_phy_state()
6418 Adapter->param_100t4_cap = in e1000g_get_phy_state()
6419 (Adapter->phy_status & MII_SR_100T4_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6420 Adapter->param_100fdx_cap = in e1000g_get_phy_state()
6421 ((Adapter->phy_status & MII_SR_100X_FD_CAPS) || in e1000g_get_phy_state()
6422 (Adapter->phy_status & MII_SR_100T2_FD_CAPS)) ? 1 : 0; in e1000g_get_phy_state()
6423 Adapter->param_100hdx_cap = in e1000g_get_phy_state()
6424 ((Adapter->phy_status & MII_SR_100X_HD_CAPS) || in e1000g_get_phy_state()
6425 (Adapter->phy_status & MII_SR_100T2_HD_CAPS)) ? 1 : 0; in e1000g_get_phy_state()
6426 Adapter->param_10fdx_cap = in e1000g_get_phy_state()
6427 (Adapter->phy_status & MII_SR_10T_FD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6428 Adapter->param_10hdx_cap = in e1000g_get_phy_state()
6429 (Adapter->phy_status & MII_SR_10T_HD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6431 Adapter->param_adv_autoneg = hw->mac.autoneg; in e1000g_get_phy_state()
6432 Adapter->param_adv_pause = in e1000g_get_phy_state()
6433 (Adapter->phy_an_adv & NWAY_AR_PAUSE) ? 1 : 0; in e1000g_get_phy_state()
6434 Adapter->param_adv_asym_pause = in e1000g_get_phy_state()
6435 (Adapter->phy_an_adv & NWAY_AR_ASM_DIR) ? 1 : 0; in e1000g_get_phy_state()
6436 Adapter->param_adv_1000hdx = in e1000g_get_phy_state()
6437 (Adapter->phy_1000t_ctrl & CR_1000T_HD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6438 Adapter->param_adv_100t4 = in e1000g_get_phy_state()
6439 (Adapter->phy_an_adv & NWAY_AR_100T4_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6440 if (Adapter->param_adv_autoneg == 1) { in e1000g_get_phy_state()
6441 Adapter->param_adv_1000fdx = in e1000g_get_phy_state()
6442 (Adapter->phy_1000t_ctrl & CR_1000T_FD_CAPS) in e1000g_get_phy_state()
6444 Adapter->param_adv_100fdx = in e1000g_get_phy_state()
6445 (Adapter->phy_an_adv & NWAY_AR_100TX_FD_CAPS) in e1000g_get_phy_state()
6447 Adapter->param_adv_100hdx = in e1000g_get_phy_state()
6448 (Adapter->phy_an_adv & NWAY_AR_100TX_HD_CAPS) in e1000g_get_phy_state()
6450 Adapter->param_adv_10fdx = in e1000g_get_phy_state()
6451 (Adapter->phy_an_adv & NWAY_AR_10T_FD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6452 Adapter->param_adv_10hdx = in e1000g_get_phy_state()
6453 (Adapter->phy_an_adv & NWAY_AR_10T_HD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6456 Adapter->param_lp_autoneg = in e1000g_get_phy_state()
6457 (Adapter->phy_an_exp & NWAY_ER_LP_NWAY_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6458 Adapter->param_lp_pause = in e1000g_get_phy_state()
6459 (Adapter->phy_lp_able & NWAY_LPAR_PAUSE) ? 1 : 0; in e1000g_get_phy_state()
6460 Adapter->param_lp_asym_pause = in e1000g_get_phy_state()
6461 (Adapter->phy_lp_able & NWAY_LPAR_ASM_DIR) ? 1 : 0; in e1000g_get_phy_state()
6462 Adapter->param_lp_1000fdx = in e1000g_get_phy_state()
6463 (Adapter->phy_1000t_status & SR_1000T_LP_FD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6464 Adapter->param_lp_1000hdx = in e1000g_get_phy_state()
6465 (Adapter->phy_1000t_status & SR_1000T_LP_HD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6466 Adapter->param_lp_100t4 = in e1000g_get_phy_state()
6467 (Adapter->phy_lp_able & NWAY_LPAR_100T4_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6468 Adapter->param_lp_100fdx = in e1000g_get_phy_state()
6469 (Adapter->phy_lp_able & NWAY_LPAR_100TX_FD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6470 Adapter->param_lp_100hdx = in e1000g_get_phy_state()
6471 (Adapter->phy_lp_able & NWAY_LPAR_100TX_HD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6472 Adapter->param_lp_10fdx = in e1000g_get_phy_state()
6473 (Adapter->phy_lp_able & NWAY_LPAR_10T_FD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6474 Adapter->param_lp_10hdx = in e1000g_get_phy_state()
6475 (Adapter->phy_lp_able & NWAY_LPAR_10T_HD_CAPS) ? 1 : 0; in e1000g_get_phy_state()
6481 Adapter->param_autoneg_cap = 0; in e1000g_get_phy_state()
6482 Adapter->param_pause_cap = 1; in e1000g_get_phy_state()
6483 Adapter->param_asym_pause_cap = 1; in e1000g_get_phy_state()
6484 Adapter->param_1000fdx_cap = 1; in e1000g_get_phy_state()
6485 Adapter->param_1000hdx_cap = 0; in e1000g_get_phy_state()
6486 Adapter->param_100t4_cap = 0; in e1000g_get_phy_state()
6487 Adapter->param_100fdx_cap = 0; in e1000g_get_phy_state()
6488 Adapter->param_100hdx_cap = 0; in e1000g_get_phy_state()
6489 Adapter->param_10fdx_cap = 0; in e1000g_get_phy_state()
6490 Adapter->param_10hdx_cap = 0; in e1000g_get_phy_state()
6492 Adapter->param_adv_autoneg = 0; in e1000g_get_phy_state()
6493 Adapter->param_adv_pause = 1; in e1000g_get_phy_state()
6494 Adapter->param_adv_asym_pause = 1; in e1000g_get_phy_state()
6495 Adapter->param_adv_1000fdx = 1; in e1000g_get_phy_state()
6496 Adapter->param_adv_1000hdx = 0; in e1000g_get_phy_state()
6497 Adapter->param_adv_100t4 = 0; in e1000g_get_phy_state()
6498 Adapter->param_adv_100fdx = 0; in e1000g_get_phy_state()
6499 Adapter->param_adv_100hdx = 0; in e1000g_get_phy_state()
6500 Adapter->param_adv_10fdx = 0; in e1000g_get_phy_state()
6501 Adapter->param_adv_10hdx = 0; in e1000g_get_phy_state()
6503 Adapter->param_lp_autoneg = 0; in e1000g_get_phy_state()
6504 Adapter->param_lp_pause = 0; in e1000g_get_phy_state()
6505 Adapter->param_lp_asym_pause = 0; in e1000g_get_phy_state()
6506 Adapter->param_lp_1000fdx = 0; in e1000g_get_phy_state()
6507 Adapter->param_lp_1000hdx = 0; in e1000g_get_phy_state()
6508 Adapter->param_lp_100t4 = 0; in e1000g_get_phy_state()
6509 Adapter->param_lp_100fdx = 0; in e1000g_get_phy_state()
6510 Adapter->param_lp_100hdx = 0; in e1000g_get_phy_state()
6511 Adapter->param_lp_10fdx = 0; in e1000g_get_phy_state()
6512 Adapter->param_lp_10hdx = 0; in e1000g_get_phy_state()
6555 e1000g_fm_init(struct e1000g *Adapter) in e1000g_fm_init() argument
6561 if (Adapter->fm_capabilities & DDI_FM_ACCCHK_CAPABLE) { in e1000g_fm_init()
6567 if (Adapter->fm_capabilities & DDI_FM_DMACHK_CAPABLE) { in e1000g_fm_init()
6575 if (Adapter->fm_capabilities) { in e1000g_fm_init()
6578 ddi_fm_init(Adapter->dip, &Adapter->fm_capabilities, &iblk); in e1000g_fm_init()
6583 if (DDI_FM_EREPORT_CAP(Adapter->fm_capabilities) || in e1000g_fm_init()
6584 DDI_FM_ERRCB_CAP(Adapter->fm_capabilities)) in e1000g_fm_init()
6585 pci_ereport_setup(Adapter->dip); in e1000g_fm_init()
6590 if (DDI_FM_ERRCB_CAP(Adapter->fm_capabilities)) in e1000g_fm_init()
6591 ddi_fm_handler_register(Adapter->dip, in e1000g_fm_init()
6592 e1000g_fm_error_cb, (void*) Adapter); in e1000g_fm_init()
6597 e1000g_fm_fini(struct e1000g *Adapter) in e1000g_fm_fini() argument
6600 if (Adapter->fm_capabilities) { in e1000g_fm_fini()
6605 if (DDI_FM_EREPORT_CAP(Adapter->fm_capabilities) || in e1000g_fm_fini()
6606 DDI_FM_ERRCB_CAP(Adapter->fm_capabilities)) in e1000g_fm_fini()
6607 pci_ereport_teardown(Adapter->dip); in e1000g_fm_fini()
6612 if (DDI_FM_ERRCB_CAP(Adapter->fm_capabilities)) in e1000g_fm_fini()
6613 ddi_fm_handler_unregister(Adapter->dip); in e1000g_fm_fini()
6617 ddi_fm_fini(Adapter->dip); in e1000g_fm_fini()
6618 if (Adapter->priv_dip != NULL) { in e1000g_fm_fini()
6619 DEVI(Adapter->priv_dip)->devi_fmhdl = NULL; in e1000g_fm_fini()
6626 e1000g_fm_ereport(struct e1000g *Adapter, char *detail) in e1000g_fm_ereport() argument
6633 if (DDI_FM_EREPORT_CAP(Adapter->fm_capabilities)) { in e1000g_fm_ereport()
6634 ddi_fm_ereport_post(Adapter->dip, buf, ena, DDI_NOSLEEP, in e1000g_fm_ereport()
6652 struct e1000g *Adapter; in e1000g_quiesce() local
6654 Adapter = (struct e1000g *)ddi_get_driver_private(devinfo); in e1000g_quiesce()
6656 if (Adapter == NULL) in e1000g_quiesce()
6659 e1000g_clear_all_interrupts(Adapter); in e1000g_quiesce()
6661 (void) e1000_reset_hw(&Adapter->shared); in e1000g_quiesce()
6664 E1000_WRITE_REG(&Adapter->shared, E1000_TDH(0), 0); in e1000g_quiesce()
6665 E1000_WRITE_REG(&Adapter->shared, E1000_TDT(0), 0); in e1000g_quiesce()
6668 E1000_WRITE_REG(&Adapter->shared, E1000_RDH(0), 0); in e1000g_quiesce()
6669 E1000_WRITE_REG(&Adapter->shared, E1000_RDT(0), 0); in e1000g_quiesce()
6683 e1000g_param_sync(struct e1000g *Adapter) in e1000g_param_sync() argument
6685 Adapter->param_en_1000fdx = Adapter->param_adv_1000fdx; in e1000g_param_sync()
6686 Adapter->param_en_1000hdx = Adapter->param_adv_1000hdx; in e1000g_param_sync()
6687 Adapter->param_en_100fdx = Adapter->param_adv_100fdx; in e1000g_param_sync()
6688 Adapter->param_en_100hdx = Adapter->param_adv_100hdx; in e1000g_param_sync()
6689 Adapter->param_en_10fdx = Adapter->param_adv_10fdx; in e1000g_param_sync()
6690 Adapter->param_en_10hdx = Adapter->param_adv_10hdx; in e1000g_param_sync()
6767 e1000g_restore_promisc(struct e1000g *Adapter) in e1000g_restore_promisc() argument
6769 if (Adapter->e1000g_promisc) { in e1000g_restore_promisc()
6772 rctl = E1000_READ_REG(&Adapter->shared, E1000_RCTL); in e1000g_restore_promisc()
6774 E1000_WRITE_REG(&Adapter->shared, E1000_RCTL, rctl); in e1000g_restore_promisc()