Lines Matching refs:bgep
35 #define PIO_ADDR(bgep, offset) ((void *)((caddr_t)(bgep)->io_regs+(offset))) argument
36 #define APE_ADDR(bgep, offset) ((void *)((caddr_t)(bgep)->ape_regs+(offset))) argument
176 static void bge_cfg_clr16(bge_t *bgep, bge_regno_t regno, uint16_t bits);
180 bge_cfg_clr16(bge_t *bgep, bge_regno_t regno, uint16_t bits) in bge_cfg_clr16() argument
185 (void *)bgep, regno, bits)); in bge_cfg_clr16()
187 regval = pci_config_get16(bgep->cfg_handle, regno); in bge_cfg_clr16()
190 (void *)bgep, regno, bits, regval, regval & ~bits)); in bge_cfg_clr16()
193 pci_config_put16(bgep->cfg_handle, regno, regval); in bge_cfg_clr16()
198 static void bge_cfg_clr32(bge_t *bgep, bge_regno_t regno, uint32_t bits);
202 bge_cfg_clr32(bge_t *bgep, bge_regno_t regno, uint32_t bits) in bge_cfg_clr32() argument
207 (void *)bgep, regno, bits)); in bge_cfg_clr32()
209 regval = pci_config_get32(bgep->cfg_handle, regno); in bge_cfg_clr32()
212 (void *)bgep, regno, bits, regval, regval & ~bits)); in bge_cfg_clr32()
215 pci_config_put32(bgep->cfg_handle, regno, regval); in bge_cfg_clr32()
234 uint32_t bge_ind_get32(bge_t *bgep, bge_regno_t regno);
238 bge_ind_get32(bge_t *bgep, bge_regno_t regno) in bge_ind_get32() argument
242 BGE_TRACE(("bge_ind_get32($%p, 0x%lx)", (void *)bgep, regno)); in bge_ind_get32()
245 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_ind_get32()
246 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_ind_get32()
247 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_ind_get32()
251 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_RIAAR, regno); in bge_ind_get32()
252 val = pci_config_get32(bgep->cfg_handle, PCI_CONF_BGE_RIADR); in bge_ind_get32()
255 (void *)bgep, regno, val)); in bge_ind_get32()
262 void bge_ind_put32(bge_t *bgep, bge_regno_t regno, uint32_t val);
266 bge_ind_put32(bge_t *bgep, bge_regno_t regno, uint32_t val) in bge_ind_put32() argument
269 (void *)bgep, regno, val)); in bge_ind_put32()
273 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_ind_put32()
274 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_ind_put32()
275 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_ind_put32()
279 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_RIAAR, regno); in bge_ind_put32()
280 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_RIADR, val); in bge_ind_put32()
287 static void bge_pci_check(bge_t *bgep);
291 bge_pci_check(bge_t *bgep) in bge_pci_check() argument
295 pcistatus = pci_config_get16(bgep->cfg_handle, PCI_CONF_STAT); in bge_pci_check()
298 (void *)bgep, pcistatus)); in bge_pci_check()
326 void bge_chip_cfg_init(bge_t *bgep, chip_id_t *cidp, boolean_t enable_dma);
330 bge_chip_cfg_init(bge_t *bgep, chip_id_t *cidp, boolean_t enable_dma) in bge_chip_cfg_init() argument
341 (void *)bgep, (void *)cidp, enable_dma)); in bge_chip_cfg_init()
362 handle = bgep->cfg_handle; in bge_chip_cfg_init()
370 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_cfg_init()
371 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_cfg_init()
372 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_cfg_init()
381 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_cfg_init()
382 DEVICE_5725_SERIES_CHIPSETS(bgep)) { in bge_chip_cfg_init()
384 } else if (DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_cfg_init()
401 if (pci_config_get16(bgep->cfg_handle, PCI_CONF_DEVID) == in bge_chip_cfg_init()
482 if (bgep->intr_type == DDI_INTR_TYPE_FIXED) in bge_chip_cfg_init()
491 bgep->asf_wordswapped = B_FALSE; in bge_chip_cfg_init()
496 if (bgep->ape_enabled) { in bge_chip_cfg_init()
500 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_PCISTATE, pci_state); in bge_chip_cfg_init()
514 command = bgep->chipid.command | PCI_COMM_MAE; in bge_chip_cfg_init()
534 if (bgep->chipid.pci_type == BGE_PCI_E) { in bge_chip_cfg_init()
565 bge_cfg_clr16(bgep, PCIX_CONF_COMM, PCIX_COMM_RELAXED); in bge_chip_cfg_init()
568 if (DEVICE_5723_SERIES_CHIPSETS(bgep)) { in bge_chip_cfg_init()
569 bge_cfg_clr16(bgep, PCI_CONF_DEV_CTRL_5723, in bge_chip_cfg_init()
571 } else if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_cfg_init()
572 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_cfg_init()
573 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_cfg_init()
574 bge_cfg_clr16(bgep, PCI_CONF_DEV_CTRL_5717, in bge_chip_cfg_init()
577 bge_cfg_clr16(bgep, PCI_CONF_DEV_CTRL, in bge_chip_cfg_init()
607 uint32_t bge_reg_get32(bge_t *bgep, bge_regno_t regno);
611 bge_reg_get32(bge_t *bgep, bge_regno_t regno) in bge_reg_get32() argument
614 (void *)bgep, regno)); in bge_reg_get32()
616 return (ddi_get32(bgep->io_handle, PIO_ADDR(bgep, regno))); in bge_reg_get32()
619 void bge_reg_put32(bge_t *bgep, bge_regno_t regno, uint32_t data);
623 bge_reg_put32(bge_t *bgep, bge_regno_t regno, uint32_t data) in bge_reg_put32() argument
626 (void *)bgep, regno, data)); in bge_reg_put32()
628 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, regno), data); in bge_reg_put32()
629 BGE_PCICHK(bgep); in bge_reg_put32()
632 void bge_reg_set32(bge_t *bgep, bge_regno_t regno, uint32_t bits);
636 bge_reg_set32(bge_t *bgep, bge_regno_t regno, uint32_t bits) in bge_reg_set32() argument
641 (void *)bgep, regno, bits)); in bge_reg_set32()
643 regval = bge_reg_get32(bgep, regno); in bge_reg_set32()
645 bge_reg_put32(bgep, regno, regval); in bge_reg_set32()
648 void bge_reg_clr32(bge_t *bgep, bge_regno_t regno, uint32_t bits);
652 bge_reg_clr32(bge_t *bgep, bge_regno_t regno, uint32_t bits) in bge_reg_clr32() argument
657 (void *)bgep, regno, bits)); in bge_reg_clr32()
659 regval = bge_reg_get32(bgep, regno); in bge_reg_clr32()
661 bge_reg_put32(bgep, regno, regval); in bge_reg_clr32()
664 static uint64_t bge_reg_get64(bge_t *bgep, bge_regno_t regno);
668 bge_reg_get64(bge_t *bgep, bge_regno_t regno) in bge_reg_get64() argument
673 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_reg_get64()
675 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_reg_get64()
676 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_reg_get64()
677 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_reg_get64()
678 regval = ddi_get32(bgep->io_handle, PIO_ADDR(bgep, regno + 4)); in bge_reg_get64()
680 regval |= ddi_get32(bgep->io_handle, PIO_ADDR(bgep, regno)); in bge_reg_get64()
682 regval = ddi_get64(bgep->io_handle, PIO_ADDR(bgep, regno)); in bge_reg_get64()
685 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_reg_get64()
686 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_reg_get64()
687 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_reg_get64()
688 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_reg_get64()
689 regval = ddi_get32(bgep->io_handle, PIO_ADDR(bgep, regno)); in bge_reg_get64()
691 regval |= ddi_get32(bgep->io_handle, PIO_ADDR(bgep, regno + 4)); in bge_reg_get64()
693 regval = ddi_get64(bgep->io_handle, PIO_ADDR(bgep, regno)); in bge_reg_get64()
696 regval = ddi_get64(bgep->io_handle, PIO_ADDR(bgep, regno)); in bge_reg_get64()
704 (void *)bgep, regno, regval)); in bge_reg_get64()
709 static void bge_reg_put64(bge_t *bgep, bge_regno_t regno, uint64_t data);
713 bge_reg_put64(bge_t *bgep, bge_regno_t regno, uint64_t data) in bge_reg_put64() argument
716 (void *)bgep, regno, data)); in bge_reg_put64()
723 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_reg_put64()
725 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_reg_put64()
726 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_reg_put64()
727 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_reg_put64()
728 ddi_put32(bgep->io_handle, in bge_reg_put64()
729 PIO_ADDR(bgep, regno), (uint32_t)data); in bge_reg_put64()
730 BGE_PCICHK(bgep); in bge_reg_put64()
731 ddi_put32(bgep->io_handle, in bge_reg_put64()
732 PIO_ADDR(bgep, regno + 4), (uint32_t)(data >> 32)); in bge_reg_put64()
735 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, regno), data); in bge_reg_put64()
738 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_reg_put64()
739 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_reg_put64()
740 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_reg_put64()
741 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_reg_put64()
742 ddi_put32(bgep->io_handle, in bge_reg_put64()
743 PIO_ADDR(bgep, regno + 4), (uint32_t)data); in bge_reg_put64()
744 BGE_PCICHK(bgep); in bge_reg_put64()
745 ddi_put32(bgep->io_handle, in bge_reg_put64()
746 PIO_ADDR(bgep, regno), (uint32_t)(data >> 32)); in bge_reg_put64()
748 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, regno), data); in bge_reg_put64()
751 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, regno), data); in bge_reg_put64()
754 BGE_PCICHK(bgep); in bge_reg_put64()
761 static void bge_reg_putrcb(bge_t *bgep, bge_regno_t addr, bge_rcb_t *rcbp);
765 bge_reg_putrcb(bge_t *bgep, bge_regno_t addr, bge_rcb_t *rcbp) in bge_reg_putrcb() argument
770 (void *)bgep, addr, rcbp->host_ring_addr, in bge_reg_putrcb()
776 bge_reg_put64(bgep, addr, *p++); in bge_reg_putrcb()
777 bge_reg_put64(bgep, addr+8, *p); in bge_reg_putrcb()
780 void bge_mbx_put(bge_t *bgep, bge_regno_t regno, uint64_t data);
784 bge_mbx_put(bge_t *bgep, bge_regno_t regno, uint64_t data) in bge_mbx_put() argument
786 if (DEVICE_5906_SERIES_CHIPSETS(bgep)) in bge_mbx_put()
790 (void *)bgep, regno, data)); in bge_mbx_put()
800 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, regno+4), (uint32_t)data); in bge_mbx_put()
802 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, regno), (uint32_t)data); in bge_mbx_put()
804 BGE_PCICHK(bgep); in bge_mbx_put()
807 uint32_t bge_mbx_get(bge_t *bgep, bge_regno_t regno);
811 bge_mbx_get(bge_t *bgep, bge_regno_t regno) in bge_mbx_get() argument
815 if (DEVICE_5906_SERIES_CHIPSETS(bgep)) in bge_mbx_get()
819 (void *)bgep, regno)); in bge_mbx_get()
822 val32 = ddi_get32(bgep->io_handle, PIO_ADDR(bgep, regno+4)); in bge_mbx_get()
824 val32 = ddi_get32(bgep->io_handle, PIO_ADDR(bgep, regno)); in bge_mbx_get()
826 BGE_PCICHK(bgep); in bge_mbx_get()
829 (void *)bgep, regno, val32)); in bge_mbx_get()
837 void bge_led_mark(bge_t *bgep);
841 bge_led_mark(bge_t *bgep) in bge_led_mark() argument
853 bge_reg_set32(bgep, ETHERNET_MAC_LED_CONTROL_REG, led_ctrl); in bge_led_mark()
855 bge_reg_clr32(bgep, ETHERNET_MAC_LED_CONTROL_REG, led_ctrl); in bge_led_mark()
857 bge_reg_clr32(bgep, ETHERNET_MAC_LED_CONTROL_REG, led_ctrl); in bge_led_mark()
872 static void bge_nic_setwin(bge_t *bgep, bge_regno_t base);
876 bge_nic_setwin(bge_t *bgep, bge_regno_t base) in bge_nic_setwin() argument
881 (void *)bgep, base)); in bge_nic_setwin()
889 cidp = &bgep->chipid; in bge_nic_setwin()
892 if (bgep->lastWriteZeroData && (base == (bge_regno_t)0)) in bge_nic_setwin()
895 bgep->lastWriteZeroData = ((base == (bge_regno_t)0) ? in bge_nic_setwin()
899 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_setwin()
900 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_setwin()
901 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_setwin()
905 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MWBAR, base); in bge_nic_setwin()
908 static uint32_t bge_nic_get32(bge_t *bgep, bge_regno_t addr);
912 bge_nic_get32(bge_t *bgep, bge_regno_t addr) in bge_nic_get32() argument
917 if (bgep->asf_enabled && !bgep->asf_wordswapped) { in bge_nic_get32()
927 data = bge_nic_read32(bgep, addr); in bge_nic_get32()
929 bge_nic_setwin(bgep, addr & ~MWBAR_GRANULE_MASK); in bge_nic_get32()
933 data = ddi_get32(bgep->io_handle, PIO_ADDR(bgep, addr)); in bge_nic_get32()
937 (void *)bgep, addr, data)); in bge_nic_get32()
942 void bge_nic_put32(bge_t *bgep, bge_regno_t addr, uint32_t data);
946 bge_nic_put32(bge_t *bgep, bge_regno_t addr, uint32_t data) in bge_nic_put32() argument
949 (void *)bgep, addr, data)); in bge_nic_put32()
952 if (bgep->asf_enabled && !bgep->asf_wordswapped) { in bge_nic_put32()
962 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_put32()
963 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_put32()
964 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_put32()
967 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MWBAR, addr); in bge_nic_put32()
969 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MWDAR, data); in bge_nic_put32()
970 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MWBAR, 0); in bge_nic_put32()
972 bge_nic_setwin(bgep, addr & ~MWBAR_GRANULE_MASK); in bge_nic_put32()
975 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr), data); in bge_nic_put32()
976 BGE_PCICHK(bgep); in bge_nic_put32()
980 static uint64_t bge_nic_get64(bge_t *bgep, bge_regno_t addr);
984 bge_nic_get64(bge_t *bgep, bge_regno_t addr) in bge_nic_get64() argument
988 bge_nic_setwin(bgep, addr & ~MWBAR_GRANULE_MASK); in bge_nic_get64()
993 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nic_get64()
995 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_get64()
996 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_get64()
997 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_get64()
998 data = ddi_get32(bgep->io_handle, in bge_nic_get64()
999 PIO_ADDR(bgep, addr + 4)); in bge_nic_get64()
1001 data |= ddi_get32(bgep->io_handle, PIO_ADDR(bgep, addr)); in bge_nic_get64()
1003 data = ddi_get64(bgep->io_handle, PIO_ADDR(bgep, addr)); in bge_nic_get64()
1006 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nic_get64()
1007 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_get64()
1008 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_get64()
1009 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_get64()
1010 data = ddi_get32(bgep->io_handle, PIO_ADDR(bgep, addr)); in bge_nic_get64()
1012 data |= ddi_get32(bgep->io_handle, in bge_nic_get64()
1013 PIO_ADDR(bgep, addr + 4)); in bge_nic_get64()
1015 data = ddi_get64(bgep->io_handle, PIO_ADDR(bgep, addr)); in bge_nic_get64()
1018 data = ddi_get64(bgep->io_handle, PIO_ADDR(bgep, addr)); in bge_nic_get64()
1022 (void *)bgep, addr, data)); in bge_nic_get64()
1027 static void bge_nic_put64(bge_t *bgep, bge_regno_t addr, uint64_t data);
1031 bge_nic_put64(bge_t *bgep, bge_regno_t addr, uint64_t data) in bge_nic_put64() argument
1034 (void *)bgep, addr, data)); in bge_nic_put64()
1036 bge_nic_setwin(bgep, addr & ~MWBAR_GRANULE_MASK); in bge_nic_put64()
1041 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nic_put64()
1043 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_put64()
1044 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_put64()
1045 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_put64()
1046 ddi_put32(bgep->io_handle, in bge_nic_put64()
1047 PIO_ADDR(bgep, addr + 4), (uint32_t)data); in bge_nic_put64()
1048 BGE_PCICHK(bgep); in bge_nic_put64()
1049 ddi_put32(bgep->io_handle, in bge_nic_put64()
1050 PIO_ADDR(bgep, addr), (uint32_t)(data >> 32)); in bge_nic_put64()
1052 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr), data); in bge_nic_put64()
1055 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nic_put64()
1056 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_put64()
1057 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_put64()
1058 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_put64()
1059 ddi_put32(bgep->io_handle, in bge_nic_put64()
1060 PIO_ADDR(bgep, addr + 4), (uint32_t)data); in bge_nic_put64()
1061 BGE_PCICHK(bgep); in bge_nic_put64()
1062 ddi_put32(bgep->io_handle, in bge_nic_put64()
1063 PIO_ADDR(bgep, addr), (uint32_t)(data >> 32)); in bge_nic_put64()
1065 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr), data); in bge_nic_put64()
1068 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr), data); in bge_nic_put64()
1071 BGE_PCICHK(bgep); in bge_nic_put64()
1078 static void bge_nic_putrcb(bge_t *bgep, bge_regno_t addr, bge_rcb_t *rcbp);
1082 bge_nic_putrcb(bge_t *bgep, bge_regno_t addr, bge_rcb_t *rcbp) in bge_nic_putrcb() argument
1087 (void *)bgep, addr, rcbp->host_ring_addr, in bge_nic_putrcb()
1092 bge_nic_setwin(bgep, addr & ~MWBAR_GRANULE_MASK); in bge_nic_putrcb()
1098 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nic_putrcb()
1100 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_putrcb()
1101 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_putrcb()
1102 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_putrcb()
1103 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr), in bge_nic_putrcb()
1105 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr + 4), in bge_nic_putrcb()
1107 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr + 8), in bge_nic_putrcb()
1109 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr + 12), in bge_nic_putrcb()
1113 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr), *p++); in bge_nic_putrcb()
1114 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr+8), *p); in bge_nic_putrcb()
1117 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nic_putrcb()
1118 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_putrcb()
1119 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_putrcb()
1120 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_putrcb()
1121 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr + 4), in bge_nic_putrcb()
1123 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr), in bge_nic_putrcb()
1125 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr + 12), in bge_nic_putrcb()
1127 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, addr + 8), in bge_nic_putrcb()
1130 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr), *p++); in bge_nic_putrcb()
1131 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr + 8), *p); in bge_nic_putrcb()
1134 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr), *p++); in bge_nic_putrcb()
1135 ddi_put64(bgep->io_handle, PIO_ADDR(bgep, addr + 8), *p); in bge_nic_putrcb()
1138 BGE_PCICHK(bgep); in bge_nic_putrcb()
1141 static void bge_nic_zero(bge_t *bgep, bge_regno_t addr, uint32_t nbytes);
1145 bge_nic_zero(bge_t *bgep, bge_regno_t addr, uint32_t nbytes) in bge_nic_zero() argument
1148 (void *)bgep, addr, nbytes)); in bge_nic_zero()
1153 bge_nic_setwin(bgep, addr & ~MWBAR_GRANULE_MASK); in bge_nic_zero()
1157 (void) ddi_device_zero(bgep->io_handle, PIO_ADDR(bgep, addr), in bge_nic_zero()
1159 BGE_PCICHK(bgep); in bge_nic_zero()
1173 static uint16_t bge_mii_access(bge_t *bgep, bge_regno_t regno,
1178 bge_mii_access(bge_t *bgep, bge_regno_t regno, uint16_t data, uint32_t cmd) in bge_mii_access() argument
1185 (void *)bgep, regno, data, cmd)); in bge_mii_access()
1187 ASSERT(mutex_owned(bgep->genlock)); in bge_mii_access()
1194 cmd |= bgep->phy_mii_addr << MI_COMMS_ADDRESS_SHIFT; in bge_mii_access()
1206 regval1 = regval2 = bge_reg_get32(bgep, MI_COMMS_REG); in bge_mii_access()
1209 bge_reg_put32(bgep, MI_COMMS_REG, cmd); in bge_mii_access()
1215 regval2 = bge_reg_get32(bgep, MI_COMMS_REG); in bge_mii_access()
1222 BGE_REPORT((bgep, "bge_mii_access: cmd 0x%x -- " in bge_mii_access()
1226 regval1 = bge_reg_get32(bgep, MI_COMMS_REG); in bge_mii_access()
1233 regval1 = bge_reg_get32(bgep, MI_COMMS_REG); in bge_mii_access()
1257 regval2 = bge_reg_get32(bgep, MI_COMMS_REG); in bge_mii_access()
1270 BGE_REPORT((bgep, "bge_mii_access: cmd 0x%x -- " in bge_mii_access()
1285 uint16_t bge_mii_get16(bge_t *bgep, bge_regno_t regno);
1289 bge_mii_get16(bge_t *bgep, bge_regno_t regno) in bge_mii_get16() argument
1292 (void *)bgep, regno)); in bge_mii_get16()
1294 ASSERT(mutex_owned(bgep->genlock)); in bge_mii_get16()
1296 if (DEVICE_5906_SERIES_CHIPSETS(bgep) && ((regno == MII_AUX_CONTROL) || in bge_mii_get16()
1300 return (bge_mii_access(bgep, regno, 0, MI_COMMS_COMMAND_READ)); in bge_mii_get16()
1303 void bge_mii_put16(bge_t *bgep, bge_regno_t regno, uint16_t data);
1307 bge_mii_put16(bge_t *bgep, bge_regno_t regno, uint16_t data) in bge_mii_put16() argument
1310 (void *)bgep, regno, data)); in bge_mii_put16()
1312 ASSERT(mutex_owned(bgep->genlock)); in bge_mii_put16()
1314 if (DEVICE_5906_SERIES_CHIPSETS(bgep) && ((regno == MII_AUX_CONTROL) || in bge_mii_put16()
1318 (void) bge_mii_access(bgep, regno, data, MI_COMMS_COMMAND_WRITE); in bge_mii_put16()
1322 bge_phydsp_read(bge_t *bgep, bge_regno_t regno) in bge_phydsp_read() argument
1325 (void *)bgep, regno)); in bge_phydsp_read()
1327 ASSERT(mutex_owned(bgep->genlock)); in bge_phydsp_read()
1329 bge_mii_put16(bgep, MII_DSP_ADDRESS, regno); in bge_phydsp_read()
1330 return bge_mii_get16(bgep, MII_DSP_RW_PORT); in bge_phydsp_read()
1336 bge_phydsp_write(bge_t *bgep, bge_regno_t regno, uint16_t data) in bge_phydsp_write() argument
1339 (void *)bgep, regno, data)); in bge_phydsp_write()
1341 ASSERT(mutex_owned(bgep->genlock)); in bge_phydsp_write()
1343 bge_mii_put16(bgep, MII_DSP_ADDRESS, regno); in bge_phydsp_write()
1344 bge_mii_put16(bgep, MII_DSP_RW_PORT, data); in bge_phydsp_write()
1370 static int bge_seeprom_access(bge_t *bgep, uint32_t cmd, bge_regno_t addr,
1375 bge_seeprom_access(bge_t *bgep, uint32_t cmd, bge_regno_t addr, uint32_t *dp) in bge_seeprom_access() argument
1380 ASSERT(mutex_owned(bgep->genlock)); in bge_seeprom_access()
1388 switch (bgep->chipid.nvtype) { in bge_seeprom_access()
1399 bge_reg_set32(bgep, NVM_CONFIG1_REG, in bge_seeprom_access()
1417 regval = bge_reg_get32(bgep, SERIAL_EEPROM_ADDRESS_REG); in bge_seeprom_access()
1434 bge_reg_put32(bgep, SERIAL_EEPROM_DATA_REG, *dp); in bge_seeprom_access()
1435 bge_reg_put32(bgep, SERIAL_EEPROM_ADDRESS_REG, cmd); in bge_seeprom_access()
1446 regval = bge_reg_get32(bgep, SERIAL_EEPROM_ADDRESS_REG); in bge_seeprom_access()
1460 *dp = bge_reg_get32(bgep, SERIAL_EEPROM_DATA_REG); in bge_seeprom_access()
1461 bge_reg_put32(bgep, SERIAL_EEPROM_ADDRESS_REG, regval); in bge_seeprom_access()
1475 bge_reg_set32(bgep, SERIAL_EEPROM_ADDRESS_REG, SEEPROM_ACCESS_INIT); in bge_seeprom_access()
1497 static int bge_flash_access(bge_t *bgep, uint32_t cmd, bge_regno_t addr,
1502 bge_flash_access(bge_t *bgep, uint32_t cmd, bge_regno_t addr, uint32_t *dp) in bge_flash_access() argument
1507 ASSERT(mutex_owned(bgep->genlock)); in bge_flash_access()
1515 switch (bgep->chipid.nvtype) { in bge_flash_access()
1526 bge_reg_clr32(bgep, NVM_CONFIG1_REG, in bge_flash_access()
1540 bge_reg_put32(bgep, NVM_FLASH_WRITE_REG, *dp); in bge_flash_access()
1541 bge_reg_put32(bgep, NVM_FLASH_ADDR_REG, addr); in bge_flash_access()
1542 bge_reg_put32(bgep, NVM_FLASH_CMD_REG, cmd); in bge_flash_access()
1548 regval = bge_reg_get32(bgep, NVM_FLASH_CMD_REG); in bge_flash_access()
1559 *dp = bge_reg_get32(bgep, NVM_FLASH_READ_REG); in bge_flash_access()
1606 static void bge_nvmem_relinquish(bge_t *bgep);
1610 bge_nvmem_relinquish(bge_t *bgep) in bge_nvmem_relinquish() argument
1612 ASSERT(mutex_owned(bgep->genlock)); in bge_nvmem_relinquish()
1614 switch (bgep->chipid.nvtype) { in bge_nvmem_relinquish()
1636 (void) bge_reg_get32(bgep, NVM_SW_ARBITRATION_REG); in bge_nvmem_relinquish()
1641 bge_reg_put32(bgep, NVM_SW_ARBITRATION_REG, NVM_RESET_REQ); in bge_nvmem_relinquish()
1642 (void) bge_reg_get32(bgep, NVM_SW_ARBITRATION_REG); in bge_nvmem_relinquish()
1653 static int bge_nvmem_acquire(bge_t *bgep);
1657 bge_nvmem_acquire(bge_t *bgep) in bge_nvmem_acquire() argument
1662 ASSERT(mutex_owned(bgep->genlock)); in bge_nvmem_acquire()
1664 switch (bgep->chipid.nvtype) { in bge_nvmem_acquire()
1716 regval = bge_reg_get32(bgep, NVM_SW_ARBITRATION_REG); in bge_nvmem_acquire()
1717 bge_reg_put32(bgep, NVM_SW_ARBITRATION_REG, NVM_SET_REQ); in bge_nvmem_acquire()
1720 regval = bge_reg_get32(bgep, NVM_SW_ARBITRATION_REG); in bge_nvmem_acquire()
1736 bge_nvmem_relinquish(bgep); in bge_nvmem_acquire()
1761 static void bge_nvmem_protect(bge_t *bgep, boolean_t protect);
1765 bge_nvmem_protect(bge_t *bgep, boolean_t protect) in bge_nvmem_protect() argument
1769 ASSERT(mutex_owned(bgep->genlock)); in bge_nvmem_protect()
1771 regval = bge_reg_get32(bgep, MISC_LOCAL_CONTROL_REG); in bge_nvmem_protect()
1779 bge_reg_put32(bgep, MISC_LOCAL_CONTROL_REG, regval); in bge_nvmem_protect()
1799 bge_nvmem_rw32(bge_t *bgep, uint32_t cmd, bge_regno_t addr, uint32_t *dp) in bge_nvmem_rw32() argument
1803 if ((err = bge_nvmem_acquire(bgep)) == 0) { in bge_nvmem_rw32()
1806 err = bge_seeprom_access(bgep, in bge_nvmem_rw32()
1811 bge_nvmem_protect(bgep, B_FALSE); in bge_nvmem_rw32()
1812 err = bge_seeprom_access(bgep, in bge_nvmem_rw32()
1814 bge_nvmem_protect(bgep, B_TRUE); in bge_nvmem_rw32()
1818 if (DEVICE_5721_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1819 DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1820 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1821 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1822 DEVICE_5714_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1823 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nvmem_rw32()
1824 bge_reg_set32(bgep, NVM_ACCESS_REG, in bge_nvmem_rw32()
1827 err = bge_flash_access(bgep, in bge_nvmem_rw32()
1829 if (DEVICE_5721_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1830 DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1831 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1832 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1833 DEVICE_5714_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1834 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nvmem_rw32()
1835 bge_reg_clr32(bgep, NVM_ACCESS_REG, in bge_nvmem_rw32()
1841 if (DEVICE_5721_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1842 DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1843 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1844 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1845 DEVICE_5714_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1846 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nvmem_rw32()
1847 bge_reg_set32(bgep, NVM_ACCESS_REG, in bge_nvmem_rw32()
1850 bge_nvmem_protect(bgep, B_FALSE); in bge_nvmem_rw32()
1851 err = bge_flash_access(bgep, in bge_nvmem_rw32()
1853 bge_nvmem_protect(bgep, B_TRUE); in bge_nvmem_rw32()
1854 if (DEVICE_5721_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1855 DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1856 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1857 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1858 DEVICE_5714_SERIES_CHIPSETS(bgep) || in bge_nvmem_rw32()
1859 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nvmem_rw32()
1860 bge_reg_clr32(bgep, NVM_ACCESS_REG, in bge_nvmem_rw32()
1870 bge_nvmem_relinquish(bgep); in bge_nvmem_rw32()
1878 bge_nvmem_access_cmd(bge_t *bgep, boolean_t read) in bge_nvmem_access_cmd() argument
1880 switch (bgep->chipid.nvtype) { in bge_nvmem_access_cmd()
1898 bge_nvmem_read32(bge_t *bgep, bge_regno_t addr, uint32_t *dp) in bge_nvmem_read32() argument
1900 return (bge_nvmem_rw32(bgep, bge_nvmem_access_cmd(bgep, B_TRUE), in bge_nvmem_read32()
1906 bge_nvmem_write32(bge_t *bgep, bge_regno_t addr, uint32_t *dp) in bge_nvmem_write32() argument
1908 return (bge_nvmem_rw32(bgep, bge_nvmem_access_cmd(bgep, B_FALSE), in bge_nvmem_write32()
1916 static uint64_t bge_get_nvmac(bge_t *bgep);
1920 bge_get_nvmac(bge_t *bgep) in bge_get_nvmac() argument
1929 (void *)bgep)); in bge_get_nvmac()
1931 switch (bgep->chipid.nvtype) { in bge_get_nvmac()
1948 if (DEVICE_5906_SERIES_CHIPSETS(bgep)) in bge_get_nvmac()
1953 if (bge_nvmem_rw32(bgep, cmd, addr, &mac_high)) in bge_get_nvmac()
1956 if (bge_nvmem_rw32(bgep, cmd, addr, &mac_low)) in bge_get_nvmac()
1982 static uint64_t bge_get_nvmac(bge_t *bgep);
1986 bge_get_nvmac(bge_t *bgep) in bge_get_nvmac() argument
1988 _NOTE(ARGUNUSED(bgep)) in bge_get_nvmac()
1997 static enum bge_nvmem_type bge_nvmem_id(bge_t *bgep);
2001 bge_nvmem_id(bge_t *bgep) in bge_nvmem_id() argument
2007 (void *)bgep)); in bge_nvmem_id()
2009 switch (bgep->chipid.device) { in bge_nvmem_id()
2082 config1 = bge_reg_get32(bgep, NVM_CONFIG1_REG); in bge_nvmem_id()
2103 uint32_t bge_ape_get32(bge_t *bgep, bge_regno_t regno);
2107 bge_ape_get32(bge_t *bgep, bge_regno_t regno) in bge_ape_get32() argument
2110 (void *)bgep, regno)); in bge_ape_get32()
2112 return (ddi_get32(bgep->ape_handle, APE_ADDR(bgep, regno))); in bge_ape_get32()
2115 void bge_ape_put32(bge_t *bgep, bge_regno_t regno, uint32_t data);
2119 bge_ape_put32(bge_t *bgep, bge_regno_t regno, uint32_t data) in bge_ape_put32() argument
2122 (void *)bgep, regno, data)); in bge_ape_put32()
2124 ddi_put32(bgep->ape_handle, APE_ADDR(bgep, regno), data); in bge_ape_put32()
2125 BGE_PCICHK(bgep); in bge_ape_put32()
2129 bge_ape_lock_init(bge_t *bgep) in bge_ape_lock_init() argument
2135 BGE_TRACE(("bge_ape_lock_init($%p)", (void *)bgep)); in bge_ape_lock_init()
2137 if (bgep->chipid.device == DEVICE_ID_5761) in bge_ape_lock_init()
2152 if (!bgep->pci_func) in bge_ape_lock_init()
2155 bit = 1 << bgep->pci_func; in bge_ape_lock_init()
2157 bge_ape_put32(bgep, regbase + 4 * i, bit); in bge_ape_lock_init()
2162 bge_ape_lock(bge_t *bgep, int locknum) in bge_ape_lock() argument
2171 BGE_TRACE(("bge_ape_lock($%p, 0x%x)", (void *)bgep, locknum)); in bge_ape_lock()
2173 if (!bgep->ape_enabled) in bge_ape_lock()
2178 if (bgep->chipid.device == DEVICE_ID_5761) in bge_ape_lock()
2183 if (!bgep->pci_func) in bge_ape_lock()
2186 bit = 1 << bgep->pci_func; in bge_ape_lock()
2198 if (bgep->chipid.device == DEVICE_ID_5761) { in bge_ape_lock()
2208 bge_ape_put32(bgep, req + off, bit); in bge_ape_lock()
2212 status = bge_ape_get32(bgep, gnt + off); in bge_ape_lock()
2220 bge_ape_put32(bgep, gnt + off, bit); in bge_ape_lock()
2228 bge_ape_unlock(bge_t *bgep, int locknum) in bge_ape_unlock() argument
2233 BGE_TRACE(("bge_ape_unlock($%p, 0x%x)", (void *)bgep, locknum)); in bge_ape_unlock()
2235 if (!bgep->ape_enabled) in bge_ape_unlock()
2240 if (bgep->chipid.device == DEVICE_ID_5761) in bge_ape_unlock()
2245 if (!bgep->pci_func) in bge_ape_unlock()
2248 bit = 1 << bgep->pci_func; in bge_ape_unlock()
2260 if (bgep->chipid.device == DEVICE_ID_5761) in bge_ape_unlock()
2265 bge_ape_put32(bgep, gnt + 4 * locknum, bit); in bge_ape_unlock()
2270 bge_ape_event_lock(bge_t *bgep, uint32_t timeout_us) in bge_ape_event_lock() argument
2274 BGE_TRACE(("bge_ape_event_lock($%p, %d)", (void *)bgep, timeout_us)); in bge_ape_event_lock()
2279 if (bge_ape_lock(bgep, BGE_APE_LOCK_MEM)) in bge_ape_event_lock()
2282 apedata = bge_ape_get32(bgep, BGE_APE_EVENT_STATUS); in bge_ape_event_lock()
2286 bge_ape_unlock(bgep, BGE_APE_LOCK_MEM); in bge_ape_event_lock()
2297 bge_ape_wait_for_event(bge_t *bgep, uint32_t timeout_us) in bge_ape_wait_for_event() argument
2302 BGE_TRACE(("bge_ape_wait_for_event($%p, %d)", (void *)bgep, timeout_us)); in bge_ape_wait_for_event()
2307 apedata = bge_ape_get32(bgep, BGE_APE_EVENT_STATUS); in bge_ape_wait_for_event()
2319 bge_ape_scratchpad_read(bge_t *bgep, uint32_t *data, uint32_t base_off, in bge_ape_scratchpad_read() argument
2330 (void *)bgep, (void*)data, base_off, lenToRead)); in bge_ape_scratchpad_read()
2332 if (!bgep->ape_has_ncsi) in bge_ape_scratchpad_read()
2335 apedata = bge_ape_get32(bgep, BGE_APE_SEG_SIG); in bge_ape_scratchpad_read()
2339 apedata = bge_ape_get32(bgep, BGE_APE_FW_STATUS); in bge_ape_scratchpad_read()
2343 bufoff = (bge_ape_get32(bgep, BGE_APE_SEG_MSG_BUF_OFF) + in bge_ape_scratchpad_read()
2346 maxlen = bge_ape_get32(bgep, BGE_APE_SEG_MSG_BUF_LEN); in bge_ape_scratchpad_read()
2355 apedata = bge_ape_get32(bgep, BGE_APE_FW_STATUS); in bge_ape_scratchpad_read()
2360 err = bge_ape_event_lock(bgep, 1000); in bge_ape_scratchpad_read()
2367 bge_ape_put32(bgep, BGE_APE_EVENT_STATUS, apedata); in bge_ape_scratchpad_read()
2369 bge_ape_put32(bgep, bufoff, base_off); in bge_ape_scratchpad_read()
2370 bge_ape_put32(bgep, bufoff + sizeof(uint32_t), transferLen); in bge_ape_scratchpad_read()
2372 bge_ape_unlock(bgep, BGE_APE_LOCK_MEM); in bge_ape_scratchpad_read()
2373 bge_ape_put32(bgep, BGE_APE_EVENT, APE_EVENT_1); in bge_ape_scratchpad_read()
2377 if (bge_ape_wait_for_event(bgep, 30000)) in bge_ape_scratchpad_read()
2381 uint32_t val = bge_ape_get32(bgep, msgoff + i); in bge_ape_scratchpad_read()
2391 bge_ape_scratchpad_write(bge_t *bgep, uint32_t dstoff, uint32_t *data, in bge_ape_scratchpad_write() argument
2402 (void *)bgep, dstoff, data, lenToWrite)); in bge_ape_scratchpad_write()
2404 if (!bgep->ape_has_ncsi) in bge_ape_scratchpad_write()
2407 apedata = bge_ape_get32(bgep, BGE_APE_SEG_SIG); in bge_ape_scratchpad_write()
2411 apedata = bge_ape_get32(bgep, BGE_APE_FW_STATUS); in bge_ape_scratchpad_write()
2415 bufoff = (bge_ape_get32(bgep, BGE_APE_SEG_MSG_BUF_OFF) + in bge_ape_scratchpad_write()
2418 maxlen = bge_ape_get32(bgep, BGE_APE_SEG_MSG_BUF_LEN); in bge_ape_scratchpad_write()
2430 err = bge_ape_event_lock(bgep, 1000); in bge_ape_scratchpad_write()
2434 bge_ape_put32(bgep, bufoff, dstoff); in bge_ape_scratchpad_write()
2435 bge_ape_put32(bgep, bufoff + sizeof(uint32_t), transferLen); in bge_ape_scratchpad_write()
2441 bge_ape_put32(bgep, apedata, *data++); in bge_ape_scratchpad_write()
2448 bge_ape_put32(bgep, BGE_APE_EVENT_STATUS, apedata); in bge_ape_scratchpad_write()
2450 bge_ape_unlock(bgep, BGE_APE_LOCK_MEM); in bge_ape_scratchpad_write()
2451 bge_ape_put32(bgep, BGE_APE_EVENT, APE_EVENT_1); in bge_ape_scratchpad_write()
2458 bge_ape_send_event(bge_t *bgep, uint32_t event) in bge_ape_send_event() argument
2463 BGE_TRACE(("bge_ape_send_event($%p, %d)", (void *)bgep, event)); in bge_ape_send_event()
2465 apedata = bge_ape_get32(bgep, BGE_APE_SEG_SIG); in bge_ape_send_event()
2469 apedata = bge_ape_get32(bgep, BGE_APE_FW_STATUS); in bge_ape_send_event()
2474 err = bge_ape_event_lock(bgep, 1000); in bge_ape_send_event()
2478 bge_ape_put32(bgep, BGE_APE_EVENT_STATUS, in bge_ape_send_event()
2481 bge_ape_unlock(bgep, BGE_APE_LOCK_MEM); in bge_ape_send_event()
2482 bge_ape_put32(bgep, BGE_APE_EVENT, APE_EVENT_1); in bge_ape_send_event()
2488 bge_ape_driver_state_change(bge_t *bgep, int mode) in bge_ape_driver_state_change() argument
2494 (void *)bgep, mode)); in bge_ape_driver_state_change()
2496 if (!bgep->ape_enabled) in bge_ape_driver_state_change()
2501 bge_ape_put32(bgep, BGE_APE_HOST_SEG_SIG, in bge_ape_driver_state_change()
2503 bge_ape_put32(bgep, BGE_APE_HOST_SEG_LEN, in bge_ape_driver_state_change()
2505 apedata = bge_ape_get32(bgep, BGE_APE_HOST_INIT_COUNT); in bge_ape_driver_state_change()
2506 bge_ape_put32(bgep, BGE_APE_HOST_INIT_COUNT, ++apedata); in bge_ape_driver_state_change()
2507 bge_ape_put32(bgep, BGE_APE_HOST_DRIVER_ID, in bge_ape_driver_state_change()
2509 bge_ape_put32(bgep, BGE_APE_HOST_BEHAVIOR, in bge_ape_driver_state_change()
2511 bge_ape_put32(bgep, BGE_APE_HOST_DRVR_STATE, in bge_ape_driver_state_change()
2522 bge_ape_put32(bgep, BGE_APE_HOST_SEG_SIG, 0x0); in bge_ape_driver_state_change()
2526 bge_ape_put32(bgep, BGE_APE_HOST_WOL_SPEED, in bge_ape_driver_state_change()
2533 bge_ape_put32(bgep, BGE_APE_HOST_DRVR_STATE, apedata); in bge_ape_driver_state_change()
2546 bge_ape_send_event(bgep, event); in bge_ape_driver_state_change()
2553 bge_init_recv_rule(bge_t *bgep) in bge_init_recv_rule() argument
2555 bge_recv_rule_t *rulep = bgep->recv_rules; in bge_init_recv_rule()
2563 bge_reg_put32(bgep, RECV_RULE_MASK_REG(i), rulep->mask_value); in bge_init_recv_rule()
2564 bge_reg_put32(bgep, RECV_RULE_CONTROL_REG(i), rulep->control); in bge_init_recv_rule()
2574 int bge_chip_id_init(bge_t *bgep);
2578 bge_chip_id_init(bge_t *bgep) in bge_chip_id_init() argument
2591 cidp = &bgep->chipid; in bge_chip_id_init()
2655 if (pci_config_get16(bgep->cfg_handle, PCI_CONF_DEVID) == in bge_chip_id_init()
2701 if (DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_id_init()
2741 if (bgep->chipid.asic_rev != MHCR_CHIP_REV_5703_A0) in bge_chip_id_init()
3116 if (DEVICE_5714_SERIES_CHIPSETS(bgep) || in bge_chip_id_init()
3117 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_id_init()
3118 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_id_init()
3119 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_id_init()
3144 cidp->nvtype = bge_nvmem_id(bgep); in bge_chip_id_init()
3157 bge_problem(bgep, in bge_chip_id_init()
3161 bge_problem(bgep, in bge_chip_id_init()
3168 if (bge_check_acc_handle(bgep, bgep->io_handle) != DDI_FM_OK) in bge_chip_id_init()
3175 bge_chip_msi_trig(bge_t *bgep) in bge_chip_msi_trig() argument
3179 regval = bgep->param_msi_cnt<<4; in bge_chip_msi_trig()
3180 bge_reg_set32(bgep, HOST_COALESCE_MODE_REG, regval); in bge_chip_msi_trig()
3204 static boolean_t bge_chip_poll_engine(bge_t *bgep, bge_regno_t regno,
3209 bge_chip_poll_engine(bge_t *bgep, bge_regno_t regno, in bge_chip_poll_engine() argument
3216 (void *)bgep, regno, mask, val)); in bge_chip_poll_engine()
3219 regval = bge_reg_get32(bgep, regno); in bge_chip_poll_engine()
3225 bge_problem(bgep, "bge_chip_poll_engine failed: regno = 0x%lx", regno); in bge_chip_poll_engine()
3226 bge_fm_ereport(bgep, DDI_FM_DEVICE_NO_RESPONSE); in bge_chip_poll_engine()
3246 static boolean_t bge_chip_reset_engine(bge_t *bgep, bge_regno_t regno);
3250 bge_chip_reset_engine(bge_t *bgep, bge_regno_t regno) in bge_chip_reset_engine() argument
3257 regval = bge_reg_get32(bgep, regno); in bge_chip_reset_engine()
3260 (void *)bgep, regno)); in bge_chip_reset_engine()
3275 if (DEVICE_5705_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3276 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3277 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3278 DEVICE_5721_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3279 DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3280 DEVICE_5714_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3281 DEVICE_5906_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3282 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_reset_engine()
3284 if (bgep->chipid.pci_type == BGE_PCI_E) { in bge_chip_reset_engine()
3285 if (bgep->chipid.asic_rev == in bge_chip_reset_engine()
3287 bgep->chipid.asic_rev == in bge_chip_reset_engine()
3289 bgep->chipid.asic_rev == in bge_chip_reset_engine()
3291 val32 = bge_reg_get32(bgep, in bge_chip_reset_engine()
3295 bge_reg_put32(bgep, in bge_chip_reset_engine()
3299 (bgep->cfg_handle, in bge_chip_reset_engine()
3302 pci_config_put32(bgep->cfg_handle, in bge_chip_reset_engine()
3305 bge_reg_set32(bgep, regno, in bge_chip_reset_engine()
3322 ddi_put32(bgep->io_handle, PIO_ADDR(bgep, regno), regval); in bge_chip_reset_engine()
3331 if (DEVICE_5906_SERIES_CHIPSETS(bgep)) { in bge_chip_reset_engine()
3332 bge_reg_set32(bgep, VCPU_STATUS_REG, VCPU_DRV_RESET); in bge_chip_reset_engine()
3334 bgep, VCPU_EXT_CTL, VCPU_EXT_CTL_HALF); in bge_chip_reset_engine()
3337 if (bgep->chipid.pci_type == BGE_PCI_E) { in bge_chip_reset_engine()
3345 mhcr = pci_config_get32(bgep->cfg_handle, PCI_CONF_BGE_MHCR); in bge_chip_reset_engine()
3346 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, in bge_chip_reset_engine()
3350 if ((bgep->chipid.chip_label == 5721) || in bge_chip_reset_engine()
3351 (bgep->chipid.chip_label == 5751) || in bge_chip_reset_engine()
3352 (bgep->chipid.chip_label == 5752) || in bge_chip_reset_engine()
3353 (bgep->chipid.chip_label == 5789) || in bge_chip_reset_engine()
3354 (bgep->chipid.chip_label == 5906)) { in bge_chip_reset_engine()
3355 pci_config_put16(bgep->cfg_handle, in bge_chip_reset_engine()
3357 pci_config_put16(bgep->cfg_handle, in bge_chip_reset_engine()
3361 if ((bgep->chipid.chip_label == 5723) || in bge_chip_reset_engine()
3362 (bgep->chipid.chip_label == 5761)) { in bge_chip_reset_engine()
3363 pci_config_put16(bgep->cfg_handle, in bge_chip_reset_engine()
3365 pci_config_put16(bgep->cfg_handle, in bge_chip_reset_engine()
3369 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3370 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_reset_engine()
3371 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_reset_engine()
3372 val16 = pci_config_get16(bgep->cfg_handle, in bge_chip_reset_engine()
3376 pci_config_put16(bgep->cfg_handle, in bge_chip_reset_engine()
3381 BGE_PCICHK(bgep); in bge_chip_reset_engine()
3385 bge_reg_put32(bgep, regno, regval); in bge_chip_reset_engine()
3386 return (bge_chip_poll_engine(bgep, regno, in bge_chip_reset_engine()
3401 static boolean_t bge_chip_disable_engine(bge_t *bgep, bge_regno_t regno,
3406 bge_chip_disable_engine(bge_t *bgep, bge_regno_t regno, uint32_t morebits) in bge_chip_disable_engine() argument
3411 (void *)bgep, regno, morebits)); in bge_chip_disable_engine()
3420 if (bgep->asf_enabled) in bge_chip_disable_engine()
3429 bge_reg_put32(bgep, regno, ~(uint32_t)0); in bge_chip_disable_engine()
3431 bge_reg_put32(bgep, regno, 0); in bge_chip_disable_engine()
3435 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) { in bge_chip_disable_engine()
3450 regval = bge_reg_get32(bgep, regno); in bge_chip_disable_engine()
3453 bge_reg_put32(bgep, regno, regval); in bge_chip_disable_engine()
3455 return bge_chip_poll_engine(bgep, regno, STATE_MACHINE_ENABLE_BIT, 0); in bge_chip_disable_engine()
3468 static boolean_t bge_chip_enable_engine(bge_t *bgep, bge_regno_t regno,
3473 bge_chip_enable_engine(bge_t *bgep, bge_regno_t regno, uint32_t morebits) in bge_chip_enable_engine() argument
3478 (void *)bgep, regno, morebits)); in bge_chip_enable_engine()
3484 if (bgep->asf_enabled) in bge_chip_enable_engine()
3493 bge_reg_put32(bgep, regno, ~(uint32_t)0); in bge_chip_enable_engine()
3495 bge_reg_put32(bgep, regno, 0); in bge_chip_enable_engine()
3499 regval = bge_reg_get32(bgep, regno); in bge_chip_enable_engine()
3502 bge_reg_put32(bgep, regno, regval); in bge_chip_enable_engine()
3503 return (bge_chip_poll_engine(bgep, regno, in bge_chip_enable_engine()
3512 void bge_sync_mac_modes(bge_t *bgep);
3516 bge_sync_mac_modes(bge_t *bgep) in bge_sync_mac_modes() argument
3521 ASSERT(mutex_owned(bgep->genlock)); in bge_sync_mac_modes()
3526 macmode = regval = bge_reg_get32(bgep, ETHERNET_MAC_MODE_REG); in bge_sync_mac_modes()
3529 if ((bgep->chipid.flags & CHIP_FLAG_SERDES) && in bge_sync_mac_modes()
3530 (bgep->param_loop_mode != BGE_LOOP_INTERNAL_MAC)) { in bge_sync_mac_modes()
3531 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_sync_mac_modes()
3532 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_sync_mac_modes()
3533 DEVICE_5714_SERIES_CHIPSETS(bgep) || in bge_sync_mac_modes()
3534 DEVICE_57765_SERIES_CHIPSETS(bgep)) in bge_sync_mac_modes()
3538 } else if (bgep->param_link_speed == 10 || in bge_sync_mac_modes()
3539 bgep->param_link_speed == 100) in bge_sync_mac_modes()
3543 if (bgep->param_link_duplex == LINK_DUPLEX_HALF) in bge_sync_mac_modes()
3547 if (bgep->param_loop_mode == BGE_LOOP_INTERNAL_MAC) in bge_sync_mac_modes()
3551 bge_reg_put32(bgep, ETHERNET_MAC_MODE_REG, macmode); in bge_sync_mac_modes()
3553 (void *)bgep, regval, macmode)); in bge_sync_mac_modes()
3558 macmode = regval = bge_reg_get32(bgep, TRANSMIT_MAC_MODE_REG); in bge_sync_mac_modes()
3559 if (bgep->param_link_tx_pause) in bge_sync_mac_modes()
3563 bge_reg_put32(bgep, TRANSMIT_MAC_MODE_REG, macmode); in bge_sync_mac_modes()
3565 (void *)bgep, regval, macmode)); in bge_sync_mac_modes()
3570 macmode = regval = bge_reg_get32(bgep, RECEIVE_MAC_MODE_REG); in bge_sync_mac_modes()
3571 if (bgep->param_link_rx_pause) in bge_sync_mac_modes()
3575 bge_reg_put32(bgep, RECEIVE_MAC_MODE_REG, macmode); in bge_sync_mac_modes()
3577 (void *)bgep, regval, macmode)); in bge_sync_mac_modes()
3583 if (bgep->chipid.device == DEVICE_ID_5785) in bge_sync_mac_modes()
3584 if (bgep->param_link_speed == 10) in bge_sync_mac_modes()
3585 bge_reg_put32(bgep, MI_STATUS_REG, MI_STATUS_LINK in bge_sync_mac_modes()
3588 bge_reg_put32(bgep, MI_STATUS_REG, MI_STATUS_LINK); in bge_sync_mac_modes()
3597 int bge_chip_sync(bge_t *bgep, boolean_t asf_keeplive);
3599 int bge_chip_sync(bge_t *bgep);
3605 bge_chip_sync(bge_t *bgep, boolean_t asf_keeplive) in bge_chip_sync() argument
3607 bge_chip_sync(bge_t *bgep) in bge_chip_sync()
3610 void (*opfn)(bge_t *bgep, bge_regno_t reg, uint32_t bits); in bge_chip_sync()
3618 (void *)bgep)); in bge_chip_sync()
3620 ASSERT(mutex_owned(bgep->genlock)); in bge_chip_sync()
3625 if (bgep->promisc) in bge_chip_sync()
3646 if (!bgep->asf_enabled) { in bge_chip_sync()
3647 if (!bge_chip_disable_engine(bgep, in bge_chip_sync()
3651 if (!bge_chip_disable_engine(bgep, in bge_chip_sync()
3656 if (!bge_chip_disable_engine(bgep, RECEIVE_MAC_MODE_REG, in bge_chip_sync()
3660 if (!bge_chip_disable_engine(bgep, TRANSMIT_MAC_MODE_REG, 0)) in bge_chip_sync()
3662 if (!bge_chip_reset_engine(bgep, RECEIVE_MAC_MODE_REG)) in bge_chip_sync()
3670 bge_reg_put32(bgep, MAC_HASH_REG(i), 0); in bge_chip_sync()
3673 bge_reg_put32(bgep, MAC_HASH_REG(i), in bge_chip_sync()
3674 bgep->mcast_hash[i] | fill); in bge_chip_sync()
3677 if (!bgep->asf_enabled || !asf_keeplive) { in bge_chip_sync()
3688 macaddr |= bgep->curr_addr[j].addr[i]; in bge_chip_sync()
3691 bge_reg_put64(bgep, MAC_ADDRESS_REG(j), macaddr); in bge_chip_sync()
3695 (void *)bgep, macaddr)); in bge_chip_sync()
3707 bge_reg_put32(bgep, MAC_TX_RANDOM_BACKOFF_REG, fill); in bge_chip_sync()
3713 (*opfn)(bgep, RECEIVE_MAC_MODE_REG, RECEIVE_MODE_PROMISCUOUS); in bge_chip_sync()
3718 bge_sync_mac_modes(bgep); in bge_chip_sync()
3723 if (bgep->bge_chip_state == BGE_CHIP_RUNNING) { in bge_chip_sync()
3724 if (!bge_chip_enable_engine(bgep, TRANSMIT_MAC_MODE_REG, 0)) in bge_chip_sync()
3727 if (!bgep->asf_enabled) { in bge_chip_sync()
3728 if (!bge_chip_enable_engine(bgep, in bge_chip_sync()
3732 if (!bge_chip_enable_engine(bgep, in bge_chip_sync()
3737 if (!bge_chip_enable_engine(bgep, RECEIVE_MAC_MODE_REG, in bge_chip_sync()
3753 void bge_chip_stop_nonblocking(bge_t *bgep);
3761 bge_chip_stop_nonblocking(bge_t *bgep) in bge_chip_stop_nonblocking() argument
3768 bgep->progress &= ~PROGRESS_READY; in bge_chip_stop_nonblocking()
3772 (void) bge_chip_disable_engine(bgep, *rbp, 0); in bge_chip_stop_nonblocking()
3776 bgep->bge_chip_state = BGE_CHIP_STOPPED; in bge_chip_stop_nonblocking()
3788 void bge_chip_stop(bge_t *bgep, boolean_t fault);
3792 bge_chip_stop(bge_t *bgep, boolean_t fault) in bge_chip_stop() argument
3799 (void *)bgep)); in bge_chip_stop()
3801 ASSERT(mutex_owned(bgep->genlock)); in bge_chip_stop()
3803 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, in bge_chip_stop()
3804 (pci_config_get32(bgep->cfg_handle, PCI_CONF_BGE_MHCR) | in bge_chip_stop()
3807 ok &= bge_chip_disable_engine(bgep, RECEIVE_MAC_MODE_REG, 0); in bge_chip_stop()
3808 ok &= bge_chip_disable_engine(bgep, RCV_BD_INITIATOR_MODE_REG, 0); in bge_chip_stop()
3809 ok &= bge_chip_disable_engine(bgep, RCV_LIST_PLACEMENT_MODE_REG, 0); in bge_chip_stop()
3810 ok &= bge_chip_disable_engine(bgep, RCV_LIST_SELECTOR_MODE_REG, 0); in bge_chip_stop()
3811 ok &= bge_chip_disable_engine(bgep, RCV_DATA_BD_INITIATOR_MODE_REG, 0); in bge_chip_stop()
3812 ok &= bge_chip_disable_engine(bgep, RCV_DATA_COMPLETION_MODE_REG, 0); in bge_chip_stop()
3813 ok &= bge_chip_disable_engine(bgep, RCV_BD_COMPLETION_MODE_REG, 0); in bge_chip_stop()
3815 ok &= bge_chip_disable_engine(bgep, SEND_BD_SELECTOR_MODE_REG, 0); in bge_chip_stop()
3816 ok &= bge_chip_disable_engine(bgep, SEND_BD_INITIATOR_MODE_REG, 0); in bge_chip_stop()
3817 ok &= bge_chip_disable_engine(bgep, SEND_DATA_INITIATOR_MODE_REG, 0); in bge_chip_stop()
3818 ok &= bge_chip_disable_engine(bgep, READ_DMA_MODE_REG, 0); in bge_chip_stop()
3819 ok &= bge_chip_disable_engine(bgep, SEND_DATA_COMPLETION_MODE_REG, 0); in bge_chip_stop()
3820 ok &= bge_chip_disable_engine(bgep, DMA_COMPLETION_MODE_REG, 0); in bge_chip_stop()
3821 ok &= bge_chip_disable_engine(bgep, SEND_BD_COMPLETION_MODE_REG, 0); in bge_chip_stop()
3822 ok &= bge_chip_disable_engine(bgep, TRANSMIT_MAC_MODE_REG, 0); in bge_chip_stop()
3824 bge_reg_clr32(bgep, ETHERNET_MAC_MODE_REG, ETHERNET_MODE_ENABLE_TDE); in bge_chip_stop()
3827 ok &= bge_chip_disable_engine(bgep, HOST_COALESCE_MODE_REG, 0); in bge_chip_stop()
3828 ok &= bge_chip_disable_engine(bgep, WRITE_DMA_MODE_REG, 0); in bge_chip_stop()
3829 ok &= bge_chip_disable_engine(bgep, MBUF_CLUSTER_FREE_MODE_REG, 0); in bge_chip_stop()
3830 ok &= bge_chip_disable_engine(bgep, FTQ_RESET_REG, 0); in bge_chip_stop()
3831 ok &= bge_chip_disable_engine(bgep, BUFFER_MANAGER_MODE_REG, 0); in bge_chip_stop()
3832 ok &= bge_chip_disable_engine(bgep, MEMORY_ARBITER_MODE_REG, 0); in bge_chip_stop()
3833 ok &= bge_chip_disable_engine(bgep, MEMORY_ARBITER_MODE_REG, 0); in bge_chip_stop()
3836 ddi_fm_service_impact(bgep->devinfo, DDI_SERVICE_UNAFFECTED); in bge_chip_stop()
3841 bge_reg_put32(bgep, ETHERNET_MAC_EVENT_ENABLE_REG, 0); in bge_chip_stop()
3842 bge_reg_put32(bgep, ETHERNET_MAC_STATUS_REG, ~0); in bge_chip_stop()
3849 if (bgep->bge_chip_state != BGE_CHIP_FAULT) { in bge_chip_stop()
3850 bgep->bge_chip_state = BGE_CHIP_FAULT; in bge_chip_stop()
3851 if (!bgep->manual_reset) in bge_chip_stop()
3852 ddi_fm_service_impact(bgep->devinfo, in bge_chip_stop()
3854 if (bgep->bge_dma_error) { in bge_chip_stop()
3860 if (bgep->progress & PROGRESS_KSTATS) { in bge_chip_stop()
3861 bge_fini_kstats(bgep); in bge_chip_stop()
3862 bgep->progress &= ~PROGRESS_KSTATS; in bge_chip_stop()
3864 if (bgep->progress & PROGRESS_INTR) { in bge_chip_stop()
3865 bge_intr_disable(bgep); in bge_chip_stop()
3866 rw_enter(bgep->errlock, RW_WRITER); in bge_chip_stop()
3867 bge_fini_rings(bgep); in bge_chip_stop()
3868 rw_exit(bgep->errlock); in bge_chip_stop()
3869 bgep->progress &= ~PROGRESS_INTR; in bge_chip_stop()
3871 if (bgep->progress & PROGRESS_BUFS) { in bge_chip_stop()
3872 bge_free_bufs(bgep); in bge_chip_stop()
3873 bgep->progress &= ~PROGRESS_BUFS; in bge_chip_stop()
3875 bgep->bge_dma_error = B_FALSE; in bge_chip_stop()
3879 bgep->bge_chip_state = BGE_CHIP_STOPPED; in bge_chip_stop()
3886 static uint64_t bge_poll_firmware(bge_t *bgep);
3890 bge_poll_firmware(bge_t *bgep) in bge_poll_firmware() argument
3920 if (MHCR_CHIP_ASIC_REV(bgep) == MHCR_CHIP_ASIC_REV_5906) { in bge_poll_firmware()
3923 val = bge_reg_get32(bgep, VCPU_STATUS_REG); in bge_poll_firmware()
3928 (void *)bgep, i)); in bge_poll_firmware()
3929 mac = bge_reg_get64(bgep, MAC_ADDRESS_REG(0)); in bge_poll_firmware()
3933 gen = bge_nic_get64(bgep, NIC_MEM_GENCOMM) >> 32; in bge_poll_firmware()
3934 if (i == 0 && DEVICE_5704_SERIES_CHIPSETS(bgep)) in bge_poll_firmware()
3936 mac = bge_reg_get64(bgep, MAC_ADDRESS_REG(0)); in bge_poll_firmware()
3938 if (!bgep->asf_enabled) { in bge_poll_firmware()
3947 if (bgep->bge_chip_state != BGE_CHIP_INITIAL) in bge_poll_firmware()
3952 magic = bge_nic_get64(bgep, NIC_MEM_GENCOMM); in bge_poll_firmware()
3954 (void *)bgep, gen, i)); in bge_poll_firmware()
3968 int bge_chip_reset(bge_t *bgep, boolean_t enable_dma, uint_t asf_mode);
3970 int bge_chip_reset(bge_t *bgep, boolean_t enable_dma);
3976 bge_chip_reset(bge_t *bgep, boolean_t enable_dma, uint_t asf_mode) in bge_chip_reset() argument
3978 bge_chip_reset(bge_t *bgep, boolean_t enable_dma) in bge_chip_reset()
3995 (void *)bgep, enable_dma)); in bge_chip_reset()
3997 ASSERT(mutex_owned(bgep->genlock)); in bge_chip_reset()
4000 (void *)bgep, enable_dma, bgep->bge_chip_state)); in bge_chip_reset()
4005 switch (bgep->bge_chip_state) { in bge_chip_reset()
4018 bge_chip_stop(bgep, B_FALSE); in bge_chip_reset()
4030 if (bgep->asf_enabled) { in bge_chip_reset()
4036 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, mhcr); in bge_chip_reset()
4038 bge_reg_put32(bgep, MEMORY_ARBITER_MODE_REG, in bge_chip_reset()
4039 bge_reg_get32(bgep, MEMORY_ARBITER_MODE_REG) | in bge_chip_reset()
4043 bge_asf_pre_reset_operations(bgep, BGE_INIT_RESET); in bge_chip_reset()
4045 bge_asf_pre_reset_operations(bgep, BGE_SHUTDOWN_RESET); in bge_chip_reset()
4061 if (!bge_chip_enable_engine(bgep, MEMORY_ARBITER_MODE_REG, 0)) in bge_chip_reset()
4069 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, mhcr); in bge_chip_reset()
4072 if (bgep->asf_enabled) in bge_chip_reset()
4073 bgep->asf_wordswapped = B_FALSE; in bge_chip_reset()
4079 if (bge_nvmem_acquire(bgep) != EAGAIN) in bge_chip_reset()
4083 bgep->ifname)); in bge_chip_reset()
4085 bge_ape_lock(bgep, BGE_APE_LOCK_GRC); in bge_chip_reset()
4088 if (!bgep->asf_enabled) { in bge_chip_reset()
4091 bge_nic_put64(bgep, NIC_MEM_GENCOMM, magic); in bge_chip_reset()
4096 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_reset()
4097 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_reset()
4098 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_reset()
4099 bge_reg_set32(bgep, FAST_BOOT_PC, 0); in bge_chip_reset()
4100 if (!bge_chip_enable_engine(bgep, MEMORY_ARBITER_MODE_REG, 0)) in bge_chip_reset()
4109 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, mhcr); in bge_chip_reset()
4111 if (!bge_chip_reset_engine(bgep, MISC_CONFIG_REG)) in bge_chip_reset()
4114 bge_chip_cfg_init(bgep, &chipid, enable_dma); in bge_chip_reset()
4120 if ((bgep->chipid.chip_label == 5721) || in bge_chip_reset()
4121 (bgep->chipid.chip_label == 5751) || in bge_chip_reset()
4122 (bgep->chipid.chip_label == 5752) || in bge_chip_reset()
4123 (bgep->chipid.chip_label == 5755) || in bge_chip_reset()
4124 (bgep->chipid.chip_label == 5756) || in bge_chip_reset()
4125 (bgep->chipid.chip_label == 5789) || in bge_chip_reset()
4126 (bgep->chipid.chip_label == 5906)) in bge_chip_reset()
4127 bge_reg_set32(bgep, TLP_CONTROL_REG, TLP_DATA_FIFO_PROTECT); in bge_chip_reset()
4133 if (DEVICE_57765_SERIES_CHIPSETS(bgep) && in bge_chip_reset()
4134 (CHIP_ASIC_REV_PROD_ID(bgep) >> 8) != CHIP_ASIC_REV_57765_AX) { in bge_chip_reset()
4135 tmp = bge_reg_get32(bgep, CPMU_PADRNG_CTL_REG); in bge_chip_reset()
4137 bge_reg_set32(bgep, CPMU_PADRNG_CTL_REG, tmp); in bge_chip_reset()
4145 if (!bge_chip_enable_engine(bgep, MEMORY_ARBITER_MODE_REG, 0)) in bge_chip_reset()
4162 if (bgep->asf_enabled) in bge_chip_reset()
4165 bge_reg_put32(bgep, MODE_CONTROL_REG, tmp); in bge_chip_reset()
4168 if (bgep->asf_enabled) { in bge_chip_reset()
4170 bge_reg_put32(bgep, MEMORY_ARBITER_MODE_REG, in bge_chip_reset()
4172 bge_reg_get32(bgep, MEMORY_ARBITER_MODE_REG)); in bge_chip_reset()
4176 if (!bgep->asf_newhandshake) { in bge_chip_reset()
4179 bge_asf_post_reset_old_mode(bgep, in bge_chip_reset()
4182 bge_asf_post_reset_old_mode(bgep, in bge_chip_reset()
4191 mailbox = bge_nic_get32(bgep, BGE_FIRMWARE_MAILBOX); in bge_chip_reset()
4197 mailbox = bge_nic_get32(bgep, in bge_chip_reset()
4203 if (!bgep->asf_newhandshake) { in bge_chip_reset()
4207 bge_asf_post_reset_old_mode(bgep, in bge_chip_reset()
4210 bge_asf_post_reset_old_mode(bgep, in bge_chip_reset()
4218 bge_ape_unlock(bgep, BGE_APE_LOCK_GRC); in bge_chip_reset()
4223 mac = bge_poll_firmware(bgep); in bge_chip_reset()
4225 if (bgep->chipid.device == DEVICE_ID_5720) { in bge_chip_reset()
4226 tmp = bge_reg_get32(bgep, CPMU_CLCK_ORIDE_REG); in bge_chip_reset()
4227 bge_reg_put32(bgep, CPMU_CLCK_ORIDE_REG, in bge_chip_reset()
4245 bge_reg_put32(bgep, MISC_LOCAL_CONTROL_REG, in bge_chip_reset()
4246 bgep->chipid.bge_mlcr_default); in bge_chip_reset()
4248 if ((bgep->chipid.flags & CHIP_FLAG_SERDES) && in bge_chip_reset()
4249 DEVICE_5714_SERIES_CHIPSETS(bgep)) { in bge_chip_reset()
4250 tmp = bge_reg_get32(bgep, SERDES_RX_CONTROL); in bge_chip_reset()
4252 bge_reg_put32(bgep, SERDES_RX_CONTROL, tmp); in bge_chip_reset()
4255 bge_reg_set32(bgep, SERIAL_EEPROM_ADDRESS_REG, SEEPROM_ACCESS_INIT); in bge_chip_reset()
4260 if (bgep->ape_enabled) in bge_chip_reset()
4261 bge_reg_put32(bgep, ETHERNET_MAC_MODE_REG, in bge_chip_reset()
4264 bge_reg_put32(bgep, ETHERNET_MAC_MODE_REG, 0); in bge_chip_reset()
4277 pci_config_put8(bgep->cfg_handle, PCI_CONF_CACHE_LINESZ, in bge_chip_reset()
4278 bgep->chipid.clsize); in bge_chip_reset()
4279 pci_config_put8(bgep->cfg_handle, PCI_CONF_LATENCY_TIMER, in bge_chip_reset()
4280 bgep->chipid.latency); in bge_chip_reset()
4281 bge_reg_put32(bgep, PCI_CONF_SUBVENID, in bge_chip_reset()
4282 (bgep->chipid.subdev << 16) | bgep->chipid.subven); in bge_chip_reset()
4289 sx0 = bge_reg_get32(bgep, NIC_DIAG_SEND_INDEX_REG(0)); in bge_chip_reset()
4291 BGE_REPORT((bgep, "SEND INDEX - device didn't RESET")); in bge_chip_reset()
4292 bge_fm_ereport(bgep, DDI_FM_DEVICE_INVAL_STATE); in bge_chip_reset()
4297 if (bgep->intr_type == DDI_INTR_TYPE_MSI) in bge_chip_reset()
4298 bge_reg_set32(bgep, MSI_MODE_REG, in bge_chip_reset()
4309 if (bgep->bge_chip_state == BGE_CHIP_INITIAL) { in bge_chip_reset()
4311 mac = bge_get_nvmac(bgep); in bge_chip_reset()
4313 bgep->chipid.hw_mac_addr = mac; in bge_chip_reset()
4315 bgep->chipid.vendor_addr.addr[i] = (uchar_t)mac; in bge_chip_reset()
4318 bgep->chipid.vendor_addr.set = B_TRUE; in bge_chip_reset()
4323 if (bgep->asf_enabled && bgep->asf_newhandshake) { in bge_chip_reset()
4328 bge_asf_post_reset_new_mode(bgep, in bge_chip_reset()
4331 bge_asf_post_reset_new_mode(bgep, in bge_chip_reset()
4341 bgep->chip_resets += 1; in bge_chip_reset()
4342 bgep->bge_chip_state = BGE_CHIP_RESET; in bge_chip_reset()
4350 int bge_chip_start(bge_t *bgep, boolean_t reset_phys);
4354 bge_chip_coalesce_update(bge_t *bgep) in bge_chip_coalesce_update() argument
4356 bge_reg_put32(bgep, SEND_COALESCE_MAX_BD_REG, in bge_chip_coalesce_update()
4357 bgep->chipid.tx_count_norm); in bge_chip_coalesce_update()
4358 bge_reg_put32(bgep, SEND_COALESCE_TICKS_REG, in bge_chip_coalesce_update()
4359 bgep->chipid.tx_ticks_norm); in bge_chip_coalesce_update()
4360 bge_reg_put32(bgep, RCV_COALESCE_MAX_BD_REG, in bge_chip_coalesce_update()
4361 bgep->chipid.rx_count_norm); in bge_chip_coalesce_update()
4362 bge_reg_put32(bgep, RCV_COALESCE_TICKS_REG, in bge_chip_coalesce_update()
4363 bgep->chipid.rx_ticks_norm); in bge_chip_coalesce_update()
4367 bge_chip_start(bge_t *bgep, boolean_t reset_phys) in bge_chip_start() argument
4383 (void *)bgep)); in bge_chip_start()
4385 ASSERT(mutex_owned(bgep->genlock)); in bge_chip_start()
4386 ASSERT(bgep->bge_chip_state == BGE_CHIP_RESET); in bge_chip_start()
4389 bge_eee_init(bgep); in bge_chip_start()
4391 if (bgep->ape_enabled) { in bge_chip_start()
4396 regval = pci_config_get32(bgep->cfg_handle, in bge_chip_start()
4400 pci_config_put32(bgep->cfg_handle, in bge_chip_start()
4415 if (bgep->chipid.statistic_type == BGE_STAT_BLK) in bge_chip_start()
4416 bge_nic_zero(bgep, NIC_MEM_STATISTICS, in bge_chip_start()
4422 DMA_ZERO(bgep->status_block); in bge_chip_start()
4427 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_PDRWCR, in bge_chip_start()
4428 bgep->chipid.bge_dma_rwctrl); in bge_chip_start()
4435 bge_reg_set32(bgep, MODE_CONTROL_REG, in bge_chip_start()
4439 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4440 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4441 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4442 reg = (CHIP_ASIC_REV(bgep) == CHIP_ASIC_REV_5762) in bge_chip_start()
4444 regval = bge_reg_get32(bgep, reg); in bge_chip_start()
4445 if ((bgep->chipid.device == DEVICE_ID_5719) || in bge_chip_start()
4446 (bgep->chipid.device == DEVICE_ID_5720) || in bge_chip_start()
4447 (CHIP_ASIC_REV(bgep) == CHIP_ASIC_REV_5762)) { in bge_chip_start()
4456 bge_reg_put32(bgep, reg, in bge_chip_start()
4459 if ((CHIP_ASIC_REV(bgep) == CHIP_ASIC_REV_5719) || in bge_chip_start()
4460 (CHIP_ASIC_REV(bgep) == CHIP_ASIC_REV_5720) || in bge_chip_start()
4461 (CHIP_ASIC_REV(bgep) == CHIP_ASIC_REV_5762)) { in bge_chip_start()
4462 reg = (CHIP_ASIC_REV(bgep) == CHIP_ASIC_REV_5762) in bge_chip_start()
4464 regval = bge_reg_get32(bgep, reg); in bge_chip_start()
4465 bge_reg_put32(bgep, reg, (regval | in bge_chip_start()
4477 if (bgep->chipid.flags & CHIP_FLAG_PARTIAL_CSUM) in bge_chip_start()
4478 bge_reg_set32(bgep, MODE_CONTROL_REG, in bge_chip_start()
4487 regval = bge_reg_get32(bgep, MISC_CONFIG_REG); in bge_chip_start()
4489 bge_reg_put32(bgep, MISC_CONFIG_REG, regval); in bge_chip_start()
4491 if (DEVICE_5906_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4494 bge_reg_clr32(bgep, MISC_CONFIG_REG, MISC_CONFIG_EPHY_IDDQ); in bge_chip_start()
4495 (void) bge_reg_get32(bgep, MISC_CONFIG_REG); /* flush */ in bge_chip_start()
4507 if ((bgep->chipid.mbuf_length != 0) && in bge_chip_start()
4508 (DEVICE_5704_SERIES_CHIPSETS(bgep))) { in bge_chip_start()
4509 bge_reg_put32(bgep, MBUF_POOL_BASE_REG, in bge_chip_start()
4510 bgep->chipid.mbuf_base); in bge_chip_start()
4511 bge_reg_put32(bgep, MBUF_POOL_LENGTH_REG, in bge_chip_start()
4512 bgep->chipid.mbuf_length); in bge_chip_start()
4513 bge_reg_put32(bgep, DMAD_POOL_BASE_REG, in bge_chip_start()
4515 bge_reg_put32(bgep, DMAD_POOL_LENGTH_REG, in bge_chip_start()
4522 bge_reg_put32(bgep, RDMA_MBUF_LOWAT_REG, in bge_chip_start()
4523 bgep->chipid.mbuf_lo_water_rdma); in bge_chip_start()
4524 bge_reg_put32(bgep, MAC_RX_MBUF_LOWAT_REG, in bge_chip_start()
4525 bgep->chipid.mbuf_lo_water_rmac); in bge_chip_start()
4526 bge_reg_put32(bgep, MBUF_HIWAT_REG, in bge_chip_start()
4527 bgep->chipid.mbuf_hi_water); in bge_chip_start()
4532 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4533 bge_reg_put32(bgep, DMAD_POOL_LOWAT_REG, in bge_chip_start()
4535 bge_reg_put32(bgep, DMAD_POOL_HIWAT_REG, in bge_chip_start()
4538 bge_reg_put32(bgep, LOWAT_MAX_RECV_FRAMES_REG, bge_lowat_recv_frames); in bge_chip_start()
4544 if (bgep->chipid.device == DEVICE_ID_5719) in bge_chip_start()
4546 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4547 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4548 DEVICE_57765_SERIES_CHIPSETS(bgep)) in bge_chip_start()
4550 if (!bge_chip_enable_engine(bgep, BUFFER_MANAGER_MODE_REG, regval)) in bge_chip_start()
4553 if (!bge_chip_enable_engine(bgep, FTQ_RESET_REG, 0)) in bge_chip_start()
4559 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4560 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4561 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4562 buff_ring_t *brp = &bgep->buff[BGE_STD_BUFF_RING]; in bge_chip_start()
4563 bge_reg_put64(bgep, STD_RCV_BD_RING_RCB_REG, in bge_chip_start()
4565 bge_reg_put32(bgep, STD_RCV_BD_RING_RCB_REG + 8, in bge_chip_start()
4567 if (DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4568 bge_reg_put32(bgep, STD_RCV_BD_RING_RCB_REG + 0xc, in bge_chip_start()
4571 bge_reg_put32(bgep, STD_RCV_BD_RING_RCB_REG + 0xc, in bge_chip_start()
4575 bge_reg_putrcb(bgep, STD_RCV_BD_RING_RCB_REG, in bge_chip_start()
4576 &bgep->buff[BGE_STD_BUFF_RING].hw_rcb); in bge_chip_start()
4579 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4580 bge_reg_putrcb(bgep, JUMBO_RCV_BD_RING_RCB_REG, in bge_chip_start()
4581 &bgep->buff[BGE_JUMBO_BUFF_RING].hw_rcb); in bge_chip_start()
4582 bge_reg_putrcb(bgep, MINI_RCV_BD_RING_RCB_REG, in bge_chip_start()
4583 &bgep->buff[BGE_MINI_BUFF_RING].hw_rcb); in bge_chip_start()
4589 bge_reg_put32(bgep, STD_RCV_BD_REPLENISH_REG, bge_replenish_std); in bge_chip_start()
4590 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4591 bge_reg_put32(bgep, JUMBO_RCV_BD_REPLENISH_REG, in bge_chip_start()
4593 bge_reg_put32(bgep, MINI_RCV_BD_REPLENISH_REG, in bge_chip_start()
4601 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) in bge_chip_start()
4606 bge_mbx_put(bgep, SEND_RING_HOST_INDEX_REG(ring), 0); in bge_chip_start()
4607 bge_mbx_put(bgep, SEND_RING_NIC_INDEX_REG(ring), 0); in bge_chip_start()
4608 bge_nic_putrcb(bgep, NIC_MEM_SEND_RING(ring), in bge_chip_start()
4609 &bgep->send[ring].hw_rcb); in bge_chip_start()
4616 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) in bge_chip_start()
4621 bge_nic_putrcb(bgep, NIC_MEM_RECV_RING(ring), in bge_chip_start()
4622 &bgep->recv[ring].hw_rcb); in bge_chip_start()
4627 bge_mbx_put(bgep, RECV_STD_PROD_INDEX_REG, 0); in bge_chip_start()
4628 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4629 bge_mbx_put(bgep, RECV_JUMBO_PROD_INDEX_REG, 0); in bge_chip_start()
4630 bge_mbx_put(bgep, RECV_MINI_PROD_INDEX_REG, 0); in bge_chip_start()
4638 if (bge_chip_sync(bgep, B_FALSE) == DDI_FAILURE) in bge_chip_start()
4640 if (bge_chip_sync(bgep) == DDI_FAILURE) in bge_chip_start()
4647 mtu = bgep->chipid.ethmax_size+ETHERFCSL+VLAN_TAGSZ; in bge_chip_start()
4648 bge_reg_put32(bgep, MAC_RX_MTU_SIZE_REG, mtu); in bge_chip_start()
4653 bge_reg_put32(bgep, MAC_TX_LENGTHS_REG, MAC_TX_LENGTHS_DEFAULT); in bge_chip_start()
4658 bge_reg_put32(bgep, RCV_RULES_CONFIG_REG, RCV_RULES_CONFIG_DEFAULT); in bge_chip_start()
4664 bge_reg_put32(bgep, RCV_LP_CONFIG_REG, in bge_chip_start()
4665 RCV_LP_CONFIG(bgep->chipid.rx_rings)); in bge_chip_start()
4666 switch (MHCR_CHIP_ASIC_REV(bgep)) { in bge_chip_start()
4671 bge_reg_put32(bgep, RCV_LP_STATS_ENABLE_MASK_REG, ~0); in bge_chip_start()
4676 stats_mask = bge_reg_get32(bgep, RCV_LP_STATS_ENABLE_MASK_REG); in bge_chip_start()
4678 bge_reg_put32(bgep, RCV_LP_STATS_ENABLE_MASK_REG, stats_mask); in bge_chip_start()
4681 bge_reg_set32(bgep, RCV_LP_STATS_CONTROL_REG, RCV_LP_STATS_ENABLE); in bge_chip_start()
4683 if (bgep->chipid.rx_rings > 1) in bge_chip_start()
4684 bge_init_recv_rule(bgep); in bge_chip_start()
4689 bge_reg_put32(bgep, SEND_INIT_STATS_ENABLE_MASK_REG, ~0); in bge_chip_start()
4690 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4691 bge_reg_put32(bgep, SEND_INIT_STATS_CONTROL_REG, in bge_chip_start()
4694 bge_reg_put32(bgep, SEND_INIT_STATS_CONTROL_REG, in bge_chip_start()
4700 if (!bge_chip_disable_engine(bgep, HOST_COALESCE_MODE_REG, ~0)) in bge_chip_start()
4706 bge_chip_coalesce_update(bgep); in bge_chip_start()
4707 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4708 bge_reg_put32(bgep, SEND_COALESCE_INT_BD_REG, in bge_chip_start()
4710 bge_reg_put32(bgep, SEND_COALESCE_INT_TICKS_REG, in bge_chip_start()
4712 bge_reg_put32(bgep, RCV_COALESCE_INT_BD_REG, in bge_chip_start()
4714 bge_reg_put32(bgep, RCV_COALESCE_INT_TICKS_REG, in bge_chip_start()
4724 bge_reg_put64(bgep, STATUS_BLOCK_HOST_ADDR_REG, in bge_chip_start()
4725 bgep->status_block.cookie.dmac_laddress); in bge_chip_start()
4731 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4732 bge_reg_put64(bgep, STATISTICS_HOST_ADDR_REG, in bge_chip_start()
4733 bgep->statistics.cookie.dmac_laddress); in bge_chip_start()
4734 bge_reg_put32(bgep, STATISTICS_TICKS_REG, in bge_chip_start()
4736 bge_reg_put32(bgep, STATUS_BLOCK_BASE_ADDR_REG, in bge_chip_start()
4738 bge_reg_put32(bgep, STATISTICS_BASE_ADDR_REG, in bge_chip_start()
4749 if (bgep->chipid.device == DEVICE_ID_5719) { in bge_chip_start()
4751 if (bge_reg_get32(bgep, (BGE_RDMA_LENGTH + (i << 2))) > in bge_chip_start()
4752 bgep->chipid.default_mtu) in bge_chip_start()
4756 regval = bge_reg_get32(bgep, RDMA_CORR_CTRL_REG); in bge_chip_start()
4758 bge_reg_put32(bgep, RDMA_CORR_CTRL_REG, regval); in bge_chip_start()
4759 bgep->rdma_length_bug_on_5719 = B_TRUE; in bge_chip_start()
4763 if (bgep->chipid.tx_rings <= COALESCE_64_BYTE_RINGS && in bge_chip_start()
4764 bgep->chipid.rx_rings <= COALESCE_64_BYTE_RINGS) in bge_chip_start()
4768 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4769 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4770 DEVICE_57765_SERIES_CHIPSETS(bgep)) in bge_chip_start()
4772 if (!bge_chip_enable_engine(bgep, HOST_COALESCE_MODE_REG, coalmode)) in bge_chip_start()
4774 if (!bge_chip_enable_engine(bgep, RCV_BD_COMPLETION_MODE_REG, in bge_chip_start()
4777 if (!bge_chip_enable_engine(bgep, RCV_LIST_PLACEMENT_MODE_REG, 0)) in bge_chip_start()
4780 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) in bge_chip_start()
4781 if (!bge_chip_enable_engine(bgep, RCV_LIST_SELECTOR_MODE_REG, in bge_chip_start()
4789 if (bgep->ape_enabled) { in bge_chip_start()
4791 bge_reg_put32(bgep, ETHERNET_MAC_MODE_REG, in bge_chip_start()
4794 bge_reg_set32(bgep, ETHERNET_MAC_MODE_REG, in bge_chip_start()
4798 bge_reg_set32(bgep, ETHERNET_MAC_MODE_REG, in bge_chip_start()
4806 if (bgep->ape_enabled) { in bge_chip_start()
4808 bge_ape_put32(bgep, BGE_APE_HOST_HEARTBEAT_INT_MS, in bge_chip_start()
4819 bge_mbx_put(bgep, INTERRUPT_MBOX_0_REG, 0); in bge_chip_start()
4833 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) in bge_chip_start()
4834 if (!bge_chip_enable_engine(bgep, DMA_COMPLETION_MODE_REG, 0)) in bge_chip_start()
4839 if ((MHCR_CHIP_ASIC_REV(bgep) == MHCR_CHIP_ASIC_REV_5755) || in bge_chip_start()
4840 (MHCR_CHIP_ASIC_REV(bgep) == MHCR_CHIP_ASIC_REV_5723) || in bge_chip_start()
4841 (MHCR_CHIP_ASIC_REV(bgep) == MHCR_CHIP_ASIC_REV_5906)) { in bge_chip_start()
4844 if (!bge_chip_enable_engine(bgep, WRITE_DMA_MODE_REG, in bge_chip_start()
4854 if (DEVICE_5723_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4855 DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4856 DEVICE_5725_SERIES_CHIPSETS(bgep)) in bge_chip_start()
4858 if (!bge_chip_enable_engine(bgep, READ_DMA_MODE_REG, in bge_chip_start()
4864 if (!bge_chip_enable_engine(bgep, RCV_DATA_COMPLETION_MODE_REG, in bge_chip_start()
4867 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) in bge_chip_start()
4868 if (!bge_chip_enable_engine(bgep, in bge_chip_start()
4871 if (!bge_chip_enable_engine(bgep, SEND_DATA_COMPLETION_MODE_REG, 0)) in bge_chip_start()
4873 if (!bge_chip_enable_engine(bgep, SEND_BD_COMPLETION_MODE_REG, in bge_chip_start()
4876 if (!bge_chip_enable_engine(bgep, RCV_BD_INITIATOR_MODE_REG, in bge_chip_start()
4879 if (!bge_chip_enable_engine(bgep, RCV_DATA_BD_INITIATOR_MODE_REG, in bge_chip_start()
4882 if (!bge_chip_enable_engine(bgep, SEND_DATA_INITIATOR_MODE_REG, 0)) in bge_chip_start()
4884 if (!bge_chip_enable_engine(bgep, SEND_BD_INITIATOR_MODE_REG, in bge_chip_start()
4887 if (!bge_chip_enable_engine(bgep, SEND_BD_SELECTOR_MODE_REG, in bge_chip_start()
4898 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_start()
4899 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
4902 if (!bge_chip_enable_engine(bgep, TRANSMIT_MAC_MODE_REG, regval)) in bge_chip_start()
4908 if (!bgep->asf_enabled) { in bge_chip_start()
4909 if (!bge_chip_enable_engine(bgep, RECEIVE_MAC_MODE_REG, in bge_chip_start()
4913 if (!bge_chip_enable_engine(bgep, RECEIVE_MAC_MODE_REG, 0)) in bge_chip_start()
4917 if (!bge_chip_enable_engine(bgep, RECEIVE_MAC_MODE_REG, in bge_chip_start()
4927 bge_reg_put32(bgep, MI_MODE_REG, MI_MODE_DEFAULT); in bge_chip_start()
4934 switch (bgep->chipid.device) { in bge_chip_start()
4948 bge_reg_put32(bgep, ETHERNET_MAC_LED_CONTROL_REG, ledctl); in bge_chip_start()
4953 bge_reg_put32(bgep, MI_STATUS_REG, MI_STATUS_LINK); in bge_chip_start()
4961 if (bge_phys_update(bgep) == DDI_FAILURE) in bge_chip_start()
4964 bge_phys_check(bgep); in bge_chip_start()
4965 bgep->link_state = (bgep->param_link_up) ? LINK_STATE_UP : in bge_chip_start()
4967 bge_sync_mac_modes(bgep); in bge_chip_start()
4968 mac_link_update(bgep->mh, bgep->link_state); in bge_chip_start()
4975 bge_mbx_put(bgep, bgep->buff[ring].chip_mbx_reg, in bge_chip_start()
4976 bgep->buff[ring].rf_next); in bge_chip_start()
4982 if (bgep->intr_type == DDI_INTR_TYPE_MSI) in bge_chip_start()
4983 bge_reg_set32(bgep, HOST_COALESCE_MODE_REG, 0x70); in bge_chip_start()
4992 bge_reg_set32(bgep, ETHERNET_MAC_EVENT_ENABLE_REG, in bge_chip_start()
4996 if (bgep->asf_enabled) { in bge_chip_start()
4997 bge_reg_set32(bgep, MODE_CONTROL_REG, in bge_chip_start()
5004 bge_reg_set32(bgep, MODE_CONTROL_REG, in bge_chip_start()
5012 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_chip_start()
5013 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_chip_start()
5014 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_chip_start()
5015 bge_cfg_clr16(bgep, PCI_CONF_DEV_CTRL_5717, in bge_chip_start()
5018 mhcr = pci_config_get32(bgep->cfg_handle, PCI_CONF_BGE_MHCR); in bge_chip_start()
5019 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, in bge_chip_start()
5027 if (bgep->intr_type == DDI_INTR_TYPE_FIXED) in bge_chip_start()
5028 bge_cfg_clr32(bgep, PCI_CONF_BGE_MHCR, in bge_chip_start()
5029 bgep->chipid.mask_pci_int); in bge_chip_start()
5034 bgep->bge_chip_state = BGE_CHIP_RUNNING; in bge_chip_start()
5052 static int bge_status_sync(bge_t *bgep, uint64_t bits, uint64_t *flags);
5056 bge_status_sync(bge_t *bgep, uint64_t bits, uint64_t *flags) in bge_status_sync() argument
5062 (void *)bgep, bits)); in bge_status_sync()
5064 ASSERT(bgep->bge_guard == BGE_GUARD); in bge_status_sync()
5066 DMA_SYNC(bgep->status_block, DDI_DMA_SYNC_FORKERNEL); in bge_status_sync()
5067 retval = bge_check_dma_handle(bgep, bgep->status_block.dma_hdl); in bge_status_sync()
5071 bsp = DMA_VPTR(bgep->status_block); in bge_status_sync()
5075 (void *)bgep, bits, *flags)); in bge_status_sync()
5080 void bge_wake_factotum(bge_t *bgep);
5084 bge_wake_factotum(bge_t *bgep) in bge_wake_factotum() argument
5086 mutex_enter(bgep->softintrlock); in bge_wake_factotum()
5087 if (bgep->factotum_flag == 0) { in bge_wake_factotum()
5088 bgep->factotum_flag = 1; in bge_wake_factotum()
5089 ddi_trigger_softintr(bgep->factotum_id); in bge_wake_factotum()
5091 mutex_exit(bgep->softintrlock); in bge_wake_factotum()
5095 bge_intr_error_handler(bge_t *bgep) in bge_intr_error_handler() argument
5107 ASSERT(mutex_owned(bgep->genlock)); in bge_intr_error_handler()
5113 flow = bge_reg_get32(bgep, FLOW_ATTN_REG); in bge_intr_error_handler()
5114 rdma = bge_reg_get32(bgep, READ_DMA_STATUS_REG); in bge_intr_error_handler()
5115 wdma = bge_reg_get32(bgep, WRITE_DMA_STATUS_REG); in bge_intr_error_handler()
5116 tmac = bge_reg_get32(bgep, TRANSMIT_MAC_STATUS_REG); in bge_intr_error_handler()
5117 rmac = bge_reg_get32(bgep, RECEIVE_MAC_STATUS_REG); in bge_intr_error_handler()
5118 rxrs = bge_reg_get32(bgep, RX_RISC_STATE_REG); in bge_intr_error_handler()
5119 emac = bge_reg_get32(bgep, ETHERNET_MAC_STATUS_REG); in bge_intr_error_handler()
5120 msis = bge_reg_get32(bgep, MSI_STATUS_REG); in bge_intr_error_handler()
5121 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) in bge_intr_error_handler()
5122 txrs = bge_reg_get32(bgep, TX_RISC_STATE_REG); in bge_intr_error_handler()
5125 (void *)bgep, flow, rdma, wdma, emac, msis)); in bge_intr_error_handler()
5127 (void *)bgep, tmac, rmac, rxrs, txrs)); in bge_intr_error_handler()
5132 if (DEVICE_5704_SERIES_CHIPSETS(bgep)) in bge_intr_error_handler()
5133 bge_reg_put32(bgep, TX_RISC_STATE_REG, ~0); in bge_intr_error_handler()
5134 bge_reg_put32(bgep, RX_RISC_STATE_REG, ~0); in bge_intr_error_handler()
5135 bge_reg_put32(bgep, RECEIVE_MAC_STATUS_REG, ~0); in bge_intr_error_handler()
5136 bge_reg_put32(bgep, WRITE_DMA_STATUS_REG, ~0); in bge_intr_error_handler()
5137 bge_reg_put32(bgep, READ_DMA_STATUS_REG, ~0); in bge_intr_error_handler()
5138 bge_reg_put32(bgep, FLOW_ATTN_REG, ~0); in bge_intr_error_handler()
5150 bge_t *bgep = (void *)arg1; /* private device info */ in bge_intr() local
5164 ASSERT(bgep->progress & PROGRESS_HWINT); in bge_intr()
5167 mutex_enter(bgep->genlock); in bge_intr()
5169 if (bgep->intr_type == DDI_INTR_TYPE_FIXED) { in bge_intr()
5177 regval = bge_reg_get32(bgep, MISC_LOCAL_CONTROL_REG); in bge_intr()
5178 if (!(DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_intr()
5179 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_intr()
5180 DEVICE_57765_SERIES_CHIPSETS(bgep)) && in bge_intr()
5182 if (bge_check_acc_handle(bgep, bgep->io_handle) in bge_intr()
5185 mutex_exit(bgep->genlock); in bge_intr()
5192 bge_reg_set32(bgep, PCI_CONF_BGE_MHCR, in bge_intr()
5193 bgep->chipid.mask_pci_int); in bge_intr()
5199 regval = bge_reg_get32(bgep, MSI_STATUS_REG); in bge_intr()
5201 BGE_REPORT((bgep, "msi error attention," in bge_intr()
5203 bge_reg_put32(bgep, MSI_STATUS_REG, regval); in bge_intr()
5218 bgep->missed_dmas += 1; in bge_intr()
5219 bsp = DMA_VPTR(bgep->status_block); in bge_intr()
5221 if (bgep->bge_chip_state != BGE_CHIP_RUNNING) { in bge_intr()
5227 (void) bge_check_acc_handle(bgep, in bge_intr()
5228 bgep->io_handle); in bge_intr()
5229 mutex_exit(bgep->genlock); in bge_intr()
5233 retval = bge_status_sync(bgep, STATUS_FLAG_UPDATED | in bge_intr()
5236 bgep->bge_dma_error = B_TRUE; in bge_intr()
5246 bge_mbx_put(bgep, INTERRUPT_MBOX_0_REG, in bge_intr()
5248 if (bge_check_acc_handle(bgep, bgep->io_handle) != in bge_intr()
5254 if (bge_phys_check(bgep)) { in bge_intr()
5255 bgep->link_state = bgep->param_link_up ? in bge_intr()
5257 bge_sync_mac_modes(bgep); in bge_intr()
5258 mac_link_update(bgep->mh, bgep->link_state); in bge_intr()
5261 if (bge_check_acc_handle(bgep, bgep->io_handle) != in bge_intr()
5267 bge_intr_error_handler(bgep); in bge_intr()
5269 if (bge_check_acc_handle(bgep, bgep->io_handle) != in bge_intr()
5279 bgep->bge_intr_running = B_TRUE; in bge_intr()
5280 mutex_exit(bgep->genlock); in bge_intr()
5281 bge_receive(bgep, bsp); in bge_intr()
5282 (void) bge_recycle(bgep, bsp); in bge_intr()
5283 mutex_enter(bgep->genlock); in bge_intr()
5284 bgep->bge_intr_running = B_FALSE; in bge_intr()
5297 bge_mbx_put(bgep, INTERRUPT_MBOX_0_REG, in bge_intr()
5299 if (bgep->chipid.pci_type == BGE_PCI_E) in bge_intr()
5300 (void) bge_mbx_get(bgep, INTERRUPT_MBOX_0_REG); in bge_intr()
5301 bgep->missed_dmas = 0; in bge_intr()
5304 if (bgep->missed_dmas) { in bge_intr()
5312 BGE_REPORT((bgep, "interrupt: flags 0x%llx - " in bge_intr()
5314 bgep->missed_updates++; in bge_intr()
5315 bge_reg_set32(bgep, HOST_COALESCE_MODE_REG, in bge_intr()
5318 if (bgep->missed_dmas >= bge_dma_miss_limit) { in bge_intr()
5331 bge_fm_ereport(bgep, in bge_intr()
5340 if (bgep->intr_type == DDI_INTR_TYPE_FIXED) { in bge_intr()
5341 bge_reg_clr32(bgep, PCI_CONF_BGE_MHCR, in bge_intr()
5342 bgep->chipid.mask_pci_int); in bge_intr()
5343 if (bge_check_acc_handle(bgep, bgep->cfg_handle) != in bge_intr()
5348 if (bge_check_acc_handle(bgep, bgep->io_handle) != DDI_FM_OK) in bge_intr()
5351 mutex_exit(bgep->genlock); in bge_intr()
5357 if (bgep->asf_enabled && bgep->asf_status == ASF_STAT_RUN) { in bge_intr()
5364 bge_asf_update_status(bgep); in bge_intr()
5365 bge_asf_stop_timer(bgep); in bge_intr()
5366 bgep->asf_status = ASF_STAT_STOP; in bge_intr()
5368 bge_asf_pre_reset_operations(bgep, BGE_INIT_RESET); in bge_intr()
5369 (void) bge_check_acc_handle(bgep, bgep->cfg_handle); in bge_intr()
5372 bge_chip_stop(bgep, B_TRUE); in bge_intr()
5373 (void) bge_check_acc_handle(bgep, bgep->io_handle); in bge_intr()
5374 mutex_exit(bgep->genlock); in bge_intr()
5388 static boolean_t bge_factotum_stall_check(bge_t *bgep);
5392 bge_factotum_stall_check(bge_t *bgep) in bge_factotum_stall_check() argument
5398 if ((now - bgep->timestamp) < BGE_CYCLIC_PERIOD) in bge_factotum_stall_check()
5401 bgep->timestamp = now; in bge_factotum_stall_check()
5403 ASSERT(mutex_owned(bgep->genlock)); in bge_factotum_stall_check()
5419 dogval = bge_atomic_shl32(&bgep->watchdog, 1); in bge_factotum_stall_check()
5420 bsp = DMA_VPTR(bgep->status_block); in bge_factotum_stall_check()
5421 if (dogval < bge_watchdog_count || bge_recycle(bgep, bsp)) in bge_factotum_stall_check()
5425 BGE_REPORT((bgep, "Tx stall detected, watchdog code 0x%x", dogval)); in bge_factotum_stall_check()
5427 bge_fm_ereport(bgep, DDI_FM_DEVICE_STALL); in bge_factotum_stall_check()
5442 bge_t *bgep; in bge_chip_factotum() local
5447 bgep = (void *)arg; in bge_chip_factotum()
5449 BGE_TRACE(("bge_chip_factotum($%p)", (void *)bgep)); in bge_chip_factotum()
5451 mutex_enter(bgep->softintrlock); in bge_chip_factotum()
5452 if (bgep->factotum_flag == 0) { in bge_chip_factotum()
5453 mutex_exit(bgep->softintrlock); in bge_chip_factotum()
5456 bgep->factotum_flag = 0; in bge_chip_factotum()
5457 mutex_exit(bgep->softintrlock); in bge_chip_factotum()
5462 mutex_enter(bgep->genlock); in bge_chip_factotum()
5463 switch (bgep->bge_chip_state) { in bge_chip_factotum()
5469 if (bgep->chipid.device == DEVICE_ID_5700) { in bge_chip_factotum()
5470 if (bge_phys_check(bgep)) { in bge_chip_factotum()
5471 bgep->link_state = (bgep->param_link_up) ? in bge_chip_factotum()
5473 bge_sync_mac_modes(bgep); in bge_chip_factotum()
5474 mac_link_update(bgep->mh, bgep->link_state); in bge_chip_factotum()
5478 error = bge_factotum_stall_check(bgep); in bge_chip_factotum()
5480 bgep->bge_dma_error = B_TRUE; in bge_chip_factotum()
5483 if (bge_check_acc_handle(bgep, bgep->io_handle) != DDI_FM_OK) in bge_chip_factotum()
5486 bgep->bge_chip_state = BGE_CHIP_ERROR; in bge_chip_factotum()
5498 if (!(bgep->progress & PROGRESS_BUFS)) { in bge_chip_factotum()
5503 if (bge_alloc_bufs(bgep) != DDI_SUCCESS) { in bge_chip_factotum()
5504 mutex_exit(bgep->genlock); in bge_chip_factotum()
5507 bgep->progress |= PROGRESS_BUFS; in bge_chip_factotum()
5509 if (!(bgep->progress & PROGRESS_INTR)) { in bge_chip_factotum()
5510 bge_init_rings(bgep); in bge_chip_factotum()
5511 bge_intr_enable(bgep); in bge_chip_factotum()
5512 bgep->progress |= PROGRESS_INTR; in bge_chip_factotum()
5514 if (!(bgep->progress & PROGRESS_KSTATS)) { in bge_chip_factotum()
5515 bge_init_kstats(bgep, in bge_chip_factotum()
5516 ddi_get_instance(bgep->devinfo)); in bge_chip_factotum()
5517 bgep->progress |= PROGRESS_KSTATS; in bge_chip_factotum()
5520 BGE_REPORT((bgep, "automatic recovery activated")); in bge_chip_factotum()
5522 if (bge_restart(bgep, B_FALSE) != DDI_SUCCESS) { in bge_chip_factotum()
5523 bgep->bge_chip_state = BGE_CHIP_ERROR; in bge_chip_factotum()
5526 if (bge_check_acc_handle(bgep, bgep->cfg_handle) != in bge_chip_factotum()
5528 bgep->bge_chip_state = BGE_CHIP_ERROR; in bge_chip_factotum()
5531 if (bge_check_acc_handle(bgep, bgep->io_handle) != in bge_chip_factotum()
5533 bgep->bge_chip_state = BGE_CHIP_ERROR; in bge_chip_factotum()
5538 if (bgep->asf_enabled && in bge_chip_factotum()
5539 bgep->asf_status != ASF_STAT_RUN) { in bge_chip_factotum()
5540 bgep->asf_timeout_id = timeout( in bge_chip_factotum()
5541 bge_asf_heartbeat, (void *)bgep, in bge_chip_factotum()
5544 bgep->asf_status = ASF_STAT_RUN; in bge_chip_factotum()
5547 if (!bgep->manual_reset) { in bge_chip_factotum()
5548 ddi_fm_service_impact(bgep->devinfo, in bge_chip_factotum()
5564 if (error && !bgep->bge_intr_running) { in bge_chip_factotum()
5566 if (bgep->asf_enabled && (bgep->asf_status == ASF_STAT_RUN)) { in bge_chip_factotum()
5572 bge_asf_update_status(bgep); in bge_chip_factotum()
5573 bge_asf_stop_timer(bgep); in bge_chip_factotum()
5574 bgep->asf_status = ASF_STAT_STOP; in bge_chip_factotum()
5576 bge_asf_pre_reset_operations(bgep, BGE_INIT_RESET); in bge_chip_factotum()
5577 (void) bge_check_acc_handle(bgep, bgep->cfg_handle); in bge_chip_factotum()
5580 bge_chip_stop(bgep, B_TRUE); in bge_chip_factotum()
5581 (void) bge_check_acc_handle(bgep, bgep->io_handle); in bge_chip_factotum()
5583 mutex_exit(bgep->genlock); in bge_chip_factotum()
5601 bge_t *bgep; in bge_chip_cyclic() local
5604 bgep = arg; in bge_chip_cyclic()
5606 switch (bgep->bge_chip_state) { in bge_chip_cyclic()
5613 bge_reg_set32(bgep, HOST_COALESCE_MODE_REG, COALESCE_NOW); in bge_chip_cyclic()
5614 if (bge_check_acc_handle(bgep, bgep->io_handle) != DDI_FM_OK) in bge_chip_cyclic()
5615 ddi_fm_service_impact(bgep->devinfo, in bge_chip_cyclic()
5626 mutex_enter(bgep->genlock); in bge_chip_cyclic()
5628 if (bgep->eee_lpi_wait && !--bgep->eee_lpi_wait) { in bge_chip_cyclic()
5630 bge_eee_enable(bgep); in bge_chip_cyclic()
5633 if (bgep->rdma_length_bug_on_5719) { in bge_chip_cyclic()
5634 if ((bge_reg_get32(bgep, STAT_IFHCOUT_UPKGS_REG) + in bge_chip_cyclic()
5635 bge_reg_get32(bgep, STAT_IFHCOUT_MPKGS_REG) + in bge_chip_cyclic()
5636 bge_reg_get32(bgep, STAT_IFHCOUT_BPKGS_REG)) > in bge_chip_cyclic()
5638 regval = bge_reg_get32(bgep, RDMA_CORR_CTRL_REG); in bge_chip_cyclic()
5640 bge_reg_put32(bgep, RDMA_CORR_CTRL_REG, regval); in bge_chip_cyclic()
5641 bgep->rdma_length_bug_on_5719 = B_FALSE; in bge_chip_cyclic()
5645 mutex_exit(bgep->genlock); in bge_chip_cyclic()
5647 bge_wake_factotum(bgep); in bge_chip_cyclic()
5661 static void bge_chip_peek_cfg(bge_t *bgep, bge_peekpoke_t *ppd);
5665 bge_chip_peek_cfg(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_peek_cfg() argument
5671 (void *)bgep, (void *)ppd)); in bge_chip_peek_cfg()
5677 regval = pci_config_get8(bgep->cfg_handle, regno); in bge_chip_peek_cfg()
5681 regval = pci_config_get16(bgep->cfg_handle, regno); in bge_chip_peek_cfg()
5685 regval = pci_config_get32(bgep->cfg_handle, regno); in bge_chip_peek_cfg()
5689 regval = pci_config_get64(bgep->cfg_handle, regno); in bge_chip_peek_cfg()
5696 static void bge_chip_poke_cfg(bge_t *bgep, bge_peekpoke_t *ppd);
5700 bge_chip_poke_cfg(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_poke_cfg() argument
5706 (void *)bgep, (void *)ppd)); in bge_chip_poke_cfg()
5713 pci_config_put8(bgep->cfg_handle, regno, regval); in bge_chip_poke_cfg()
5717 pci_config_put16(bgep->cfg_handle, regno, regval); in bge_chip_poke_cfg()
5721 pci_config_put32(bgep->cfg_handle, regno, regval); in bge_chip_poke_cfg()
5725 pci_config_put64(bgep->cfg_handle, regno, regval); in bge_chip_poke_cfg()
5730 static void bge_chip_peek_reg(bge_t *bgep, bge_peekpoke_t *ppd);
5734 bge_chip_peek_reg(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_peek_reg() argument
5740 (void *)bgep, (void *)ppd)); in bge_chip_peek_reg()
5742 regaddr = PIO_ADDR(bgep, ppd->pp_acc_offset); in bge_chip_peek_reg()
5746 regval = ddi_get8(bgep->io_handle, regaddr); in bge_chip_peek_reg()
5750 regval = ddi_get16(bgep->io_handle, regaddr); in bge_chip_peek_reg()
5754 regval = ddi_get32(bgep->io_handle, regaddr); in bge_chip_peek_reg()
5758 regval = ddi_get64(bgep->io_handle, regaddr); in bge_chip_peek_reg()
5765 static void bge_chip_poke_reg(bge_t *bgep, bge_peekpoke_t *ppd);
5769 bge_chip_poke_reg(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_poke_reg() argument
5775 (void *)bgep, (void *)ppd)); in bge_chip_poke_reg()
5777 regaddr = PIO_ADDR(bgep, ppd->pp_acc_offset); in bge_chip_poke_reg()
5782 ddi_put8(bgep->io_handle, regaddr, regval); in bge_chip_poke_reg()
5786 ddi_put16(bgep->io_handle, regaddr, regval); in bge_chip_poke_reg()
5790 ddi_put32(bgep->io_handle, regaddr, regval); in bge_chip_poke_reg()
5794 ddi_put64(bgep->io_handle, regaddr, regval); in bge_chip_poke_reg()
5797 BGE_PCICHK(bgep); in bge_chip_poke_reg()
5800 static void bge_chip_peek_nic(bge_t *bgep, bge_peekpoke_t *ppd);
5804 bge_chip_peek_nic(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_peek_nic() argument
5811 (void *)bgep, (void *)ppd)); in bge_chip_peek_nic()
5814 bge_nic_setwin(bgep, regoff & ~MWBAR_GRANULE_MASK); in bge_chip_peek_nic()
5817 regaddr = PIO_ADDR(bgep, regoff); in bge_chip_peek_nic()
5821 regval = ddi_get8(bgep->io_handle, regaddr); in bge_chip_peek_nic()
5825 regval = ddi_get16(bgep->io_handle, regaddr); in bge_chip_peek_nic()
5829 regval = ddi_get32(bgep->io_handle, regaddr); in bge_chip_peek_nic()
5833 regval = ddi_get64(bgep->io_handle, regaddr); in bge_chip_peek_nic()
5840 static void bge_chip_poke_nic(bge_t *bgep, bge_peekpoke_t *ppd);
5844 bge_chip_poke_nic(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_poke_nic() argument
5851 (void *)bgep, (void *)ppd)); in bge_chip_poke_nic()
5854 bge_nic_setwin(bgep, regoff & ~MWBAR_GRANULE_MASK); in bge_chip_poke_nic()
5857 regaddr = PIO_ADDR(bgep, regoff); in bge_chip_poke_nic()
5862 ddi_put8(bgep->io_handle, regaddr, regval); in bge_chip_poke_nic()
5866 ddi_put16(bgep->io_handle, regaddr, regval); in bge_chip_poke_nic()
5870 ddi_put32(bgep->io_handle, regaddr, regval); in bge_chip_poke_nic()
5874 ddi_put64(bgep->io_handle, regaddr, regval); in bge_chip_poke_nic()
5877 BGE_PCICHK(bgep); in bge_chip_poke_nic()
5880 static void bge_chip_peek_mii(bge_t *bgep, bge_peekpoke_t *ppd);
5884 bge_chip_peek_mii(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_peek_mii() argument
5887 (void *)bgep, (void *)ppd)); in bge_chip_peek_mii()
5889 ppd->pp_acc_data = bge_mii_get16(bgep, ppd->pp_acc_offset/2); in bge_chip_peek_mii()
5892 static void bge_chip_poke_mii(bge_t *bgep, bge_peekpoke_t *ppd);
5896 bge_chip_poke_mii(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_poke_mii() argument
5899 (void *)bgep, (void *)ppd)); in bge_chip_poke_mii()
5901 bge_mii_put16(bgep, ppd->pp_acc_offset/2, ppd->pp_acc_data); in bge_chip_poke_mii()
5906 static void bge_chip_peek_seeprom(bge_t *bgep, bge_peekpoke_t *ppd);
5910 bge_chip_peek_seeprom(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_peek_seeprom() argument
5916 (void *)bgep, (void *)ppd)); in bge_chip_peek_seeprom()
5918 err = bge_nvmem_rw32(bgep, BGE_SEE_READ, ppd->pp_acc_offset, &data); in bge_chip_peek_seeprom()
5922 static void bge_chip_poke_seeprom(bge_t *bgep, bge_peekpoke_t *ppd);
5926 bge_chip_poke_seeprom(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_poke_seeprom() argument
5931 (void *)bgep, (void *)ppd)); in bge_chip_poke_seeprom()
5934 (void) bge_nvmem_rw32(bgep, BGE_SEE_WRITE, ppd->pp_acc_offset, &data); in bge_chip_poke_seeprom()
5940 static void bge_chip_peek_flash(bge_t *bgep, bge_peekpoke_t *ppd);
5944 bge_chip_peek_flash(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_peek_flash() argument
5950 (void *)bgep, (void *)ppd)); in bge_chip_peek_flash()
5952 err = bge_nvmem_rw32(bgep, BGE_FLASH_READ, ppd->pp_acc_offset, &data); in bge_chip_peek_flash()
5956 static void bge_chip_poke_flash(bge_t *bgep, bge_peekpoke_t *ppd);
5960 bge_chip_poke_flash(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_poke_flash() argument
5965 (void *)bgep, (void *)ppd)); in bge_chip_poke_flash()
5968 (void) bge_nvmem_rw32(bgep, BGE_FLASH_WRITE, in bge_chip_poke_flash()
5973 static void bge_chip_peek_mem(bge_t *bgep, bge_peekpoke_t *ppd);
5977 bge_chip_peek_mem(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_peek_mem() argument
5983 (void *)bgep, (void *)ppd)); in bge_chip_peek_mem()
6006 (void *)bgep, (void *)ppd, regval, vaddr)); in bge_chip_peek_mem()
6011 static void bge_chip_poke_mem(bge_t *bgep, bge_peekpoke_t *ppd);
6015 bge_chip_poke_mem(bge_t *bgep, bge_peekpoke_t *ppd) in bge_chip_poke_mem() argument
6021 (void *)bgep, (void *)ppd)); in bge_chip_poke_mem()
6027 (void *)bgep, (void *)ppd, regval, vaddr)); in bge_chip_poke_mem()
6048 static enum ioc_reply bge_pp_ioctl(bge_t *bgep, int cmd, mblk_t *mp,
6053 bge_pp_ioctl(bge_t *bgep, int cmd, mblk_t *mp, struct iocblk *iocp) in bge_pp_ioctl() argument
6055 void (*ppfn)(bge_t *bgep, bge_peekpoke_t *ppd); in bge_pp_ioctl()
6066 bge_error(bgep, "bge_pp_ioctl: invalid cmd 0x%x", cmd); in bge_pp_ioctl()
6176 mem_va = (uintptr_t)bgep; in bge_pp_ioctl()
6177 maxoff = sizeof (*bgep); in bge_pp_ioctl()
6192 areap = &bgep->tx_desc; in bge_pp_ioctl()
6195 areap = &bgep->tx_buff[0]; in bge_pp_ioctl()
6198 areap = &bgep->rx_desc[0]; in bge_pp_ioctl()
6201 areap = &bgep->rx_buff[0]; in bge_pp_ioctl()
6204 areap = &bgep->status_block; in bge_pp_ioctl()
6207 if (bgep->chipid.statistic_type == BGE_STAT_BLK) in bge_pp_ioctl()
6208 areap = &bgep->statistics; in bge_pp_ioctl()
6245 (*ppfn)(bgep, ppd); in bge_pp_ioctl()
6249 static enum ioc_reply bge_diag_ioctl(bge_t *bgep, int cmd, mblk_t *mp,
6254 bge_diag_ioctl(bge_t *bgep, int cmd, mblk_t *mp, struct iocblk *iocp) in bge_diag_ioctl() argument
6256 ASSERT(mutex_owned(bgep->genlock)); in bge_diag_ioctl()
6261 bge_error(bgep, "bge_diag_ioctl: invalid cmd 0x%x", cmd); in bge_diag_ioctl()
6272 return (bge_pp_ioctl(bgep, cmd, mp, iocp)); in bge_diag_ioctl()
6282 bgep->bge_chip_state = BGE_CHIP_FAULT; in bge_diag_ioctl()
6283 ddi_trigger_softintr(bgep->factotum_id); in bge_diag_ioctl()
6284 (void) bge_restart(bgep, cmd == BGE_HARD_RESET); in bge_diag_ioctl()
6293 static enum ioc_reply bge_mii_ioctl(bge_t *bgep, int cmd, mblk_t *mp,
6298 bge_mii_ioctl(bge_t *bgep, int cmd, mblk_t *mp, struct iocblk *iocp) in bge_mii_ioctl() argument
6320 bge_error(bgep, "bge_mii_ioctl: invalid cmd 0x%x", cmd); in bge_mii_ioctl()
6324 miirwp->mii_data = bge_mii_get16(bgep, miirwp->mii_reg); in bge_mii_ioctl()
6328 bge_mii_put16(bgep, miirwp->mii_reg, miirwp->mii_data); in bge_mii_ioctl()
6337 static enum ioc_reply bge_see_ioctl(bge_t *bgep, int cmd, mblk_t *mp,
6342 bge_see_ioctl(bge_t *bgep, int cmd, mblk_t *mp, struct iocblk *iocp) in bge_see_ioctl() argument
6364 bge_error(bgep, "bge_see_ioctl: invalid cmd 0x%x", cmd); in bge_see_ioctl()
6369 iocp->ioc_error = bge_nvmem_rw32(bgep, cmd, in bge_see_ioctl()
6381 static enum ioc_reply bge_flash_ioctl(bge_t *bgep, int cmd, mblk_t *mp,
6386 bge_flash_ioctl(bge_t *bgep, int cmd, mblk_t *mp, struct iocblk *iocp) in bge_flash_ioctl() argument
6408 bge_error(bgep, "bge_flash_ioctl: invalid cmd 0x%x", cmd); in bge_flash_ioctl()
6413 iocp->ioc_error = bge_nvmem_rw32(bgep, cmd, in bge_flash_ioctl()
6423 enum ioc_reply bge_chip_ioctl(bge_t *bgep, queue_t *wq, mblk_t *mp,
6428 bge_chip_ioctl(bge_t *bgep, queue_t *wq, mblk_t *mp, struct iocblk *iocp) in bge_chip_ioctl() argument
6433 (void *)bgep, (void *)wq, (void *)mp, (void *)iocp)); in bge_chip_ioctl()
6435 ASSERT(mutex_owned(bgep->genlock)); in bge_chip_ioctl()
6441 bge_error(bgep, "bge_chip_ioctl: invalid cmd 0x%x", cmd); in bge_chip_ioctl()
6451 return (bge_diag_ioctl(bgep, cmd, mp, iocp)); in bge_chip_ioctl()
6458 return (bge_mii_ioctl(bgep, cmd, mp, iocp)); in bge_chip_ioctl()
6463 return (bge_see_ioctl(bgep, cmd, mp, iocp)); in bge_chip_ioctl()
6469 return (bge_flash_ioctl(bgep, cmd, mp, iocp)); in bge_chip_ioctl()
6481 bge_t *bgep = rrp->bgep; in bge_chip_blank() local
6483 mutex_enter(bgep->genlock); in bge_chip_blank()
6492 bge_reg_put32(bgep, RCV_COALESCE_TICKS_REG, ticks); in bge_chip_blank()
6493 bge_reg_put32(bgep, RCV_COALESCE_MAX_BD_REG, count); in bge_chip_blank()
6495 if (bge_check_acc_handle(bgep, bgep->io_handle) != DDI_FM_OK) in bge_chip_blank()
6496 ddi_fm_service_impact(bgep->devinfo, DDI_SERVICE_UNAFFECTED); in bge_chip_blank()
6497 mutex_exit(bgep->genlock); in bge_chip_blank()
6503 bge_nic_read32(bge_t *bgep, bge_regno_t addr) in bge_nic_read32() argument
6508 if (!bgep->asf_wordswapped) { in bge_nic_read32()
6516 if (DEVICE_5717_SERIES_CHIPSETS(bgep) || in bge_nic_read32()
6517 DEVICE_5725_SERIES_CHIPSETS(bgep) || in bge_nic_read32()
6518 DEVICE_57765_SERIES_CHIPSETS(bgep)) { in bge_nic_read32()
6523 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MWBAR, addr); in bge_nic_read32()
6524 data = pci_config_get32(bgep->cfg_handle, PCI_CONF_BGE_MWDAR); in bge_nic_read32()
6525 pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MWBAR, 0); in bge_nic_read32()
6530 (void *)bgep, addr, data)); in bge_nic_read32()
6536 bge_asf_update_status(bge_t *bgep) in bge_asf_update_status() argument
6540 bge_nic_put32(bgep, BGE_CMD_MAILBOX, BGE_CMD_NICDRV_ALIVE); in bge_asf_update_status()
6541 bge_nic_put32(bgep, BGE_CMD_LENGTH_MAILBOX, 4); in bge_asf_update_status()
6542 bge_nic_put32(bgep, BGE_CMD_DATA_MAILBOX, 3); in bge_asf_update_status()
6544 event = bge_reg_get32(bgep, RX_RISC_EVENT_REG); in bge_asf_update_status()
6545 bge_reg_put32(bgep, RX_RISC_EVENT_REG, event | RRER_ASF_EVENT); in bge_asf_update_status()
6562 bge_t *bgep = (bge_t *)arg; in bge_asf_heartbeat() local
6564 mutex_enter(bgep->genlock); in bge_asf_heartbeat()
6565 bge_asf_update_status((bge_t *)bgep); in bge_asf_heartbeat()
6566 if (bge_check_acc_handle(bgep, bgep->io_handle) != DDI_FM_OK) in bge_asf_heartbeat()
6567 ddi_fm_service_impact(bgep->devinfo, DDI_SERVICE_DEGRADED); in bge_asf_heartbeat()
6568 if (bge_check_acc_handle(bgep, bgep->cfg_handle) != DDI_FM_OK) in bge_asf_heartbeat()
6569 ddi_fm_service_impact(bgep->devinfo, DDI_SERVICE_DEGRADED); in bge_asf_heartbeat()
6570 mutex_exit(bgep->genlock); in bge_asf_heartbeat()
6571 ((bge_t *)bgep)->asf_timeout_id = timeout(bge_asf_heartbeat, bgep, in bge_asf_heartbeat()
6577 bge_asf_stop_timer(bge_t *bgep) in bge_asf_stop_timer() argument
6581 while ((bgep->asf_timeout_id != 0) && in bge_asf_stop_timer()
6582 (tmp_id != bgep->asf_timeout_id)) { in bge_asf_stop_timer()
6583 tmp_id = bgep->asf_timeout_id; in bge_asf_stop_timer()
6586 bgep->asf_timeout_id = 0; in bge_asf_stop_timer()
6595 bge_asf_get_config(bge_t *bgep) in bge_asf_get_config() argument
6600 bgep->asf_enabled = B_FALSE; in bge_asf_get_config()
6603 if (bgep->ape_enabled) in bge_asf_get_config()
6606 nicsig = bge_nic_read32(bgep, BGE_NIC_DATA_SIG_ADDR); in bge_asf_get_config()
6608 niccfg = bge_nic_read32(bgep, BGE_NIC_DATA_NIC_CFG_ADDR); in bge_asf_get_config()
6615 bgep->asf_enabled = B_TRUE; in bge_asf_get_config()
6617 bgep->asf_enabled = B_FALSE; in bge_asf_get_config()
6619 bgep->asf_enabled = B_FALSE; in bge_asf_get_config()
6624 bge_asf_pre_reset_operations(bge_t *bgep, uint32_t mode) in bge_asf_pre_reset_operations() argument
6629 ASSERT(bgep->asf_enabled); in bge_asf_pre_reset_operations()
6632 bge_nic_put32(bgep, BGE_CMD_MAILBOX, BGE_CMD_NICDRV_PAUSE_FW); in bge_asf_pre_reset_operations()
6633 event = bge_reg_get32(bgep, RX_RISC_EVENT_REG); in bge_asf_pre_reset_operations()
6634 bge_reg_put32(bgep, RX_RISC_EVENT_REG, event | RRER_ASF_EVENT); in bge_asf_pre_reset_operations()
6636 event = bge_reg_get32(bgep, RX_RISC_EVENT_REG); in bge_asf_pre_reset_operations()
6641 event = bge_reg_get32(bgep, RX_RISC_EVENT_REG); in bge_asf_pre_reset_operations()
6644 bge_nic_put32(bgep, BGE_FIRMWARE_MAILBOX, in bge_asf_pre_reset_operations()
6647 if (bgep->asf_newhandshake) { in bge_asf_pre_reset_operations()
6650 bge_nic_put32(bgep, BGE_DRV_STATE_MAILBOX, in bge_asf_pre_reset_operations()
6654 bge_nic_put32(bgep, BGE_DRV_STATE_MAILBOX, in bge_asf_pre_reset_operations()
6658 bge_nic_put32(bgep, BGE_DRV_STATE_MAILBOX, in bge_asf_pre_reset_operations()
6668 bge_ape_driver_state_change(bgep, mode); in bge_asf_pre_reset_operations()
6673 bge_asf_post_reset_old_mode(bge_t *bgep, uint32_t mode) in bge_asf_post_reset_old_mode() argument
6677 bge_nic_put32(bgep, BGE_DRV_STATE_MAILBOX, in bge_asf_post_reset_old_mode()
6681 bge_nic_put32(bgep, BGE_DRV_STATE_MAILBOX, in bge_asf_post_reset_old_mode()
6685 bge_nic_put32(bgep, BGE_DRV_STATE_MAILBOX, in bge_asf_post_reset_old_mode()
6695 bge_asf_post_reset_new_mode(bge_t *bgep, uint32_t mode) in bge_asf_post_reset_new_mode() argument
6699 bge_nic_put32(bgep, BGE_DRV_STATE_MAILBOX, in bge_asf_post_reset_new_mode()
6703 bge_nic_put32(bgep, BGE_DRV_STATE_MAILBOX, in bge_asf_post_reset_new_mode()
6711 bge_ape_driver_state_change(bgep, mode); in bge_asf_post_reset_new_mode()