Lines Matching refs:lmac

79 static int bgx_xaui_check_link(struct lmac *lmac);
101 sizeof(struct lmac),
135 struct lmac *lmac; in thunder_bgx_attach() local
140 lmac = device_get_softc(dev); in thunder_bgx_attach()
141 lmac->bgx = bgx; in thunder_bgx_attach()
193 struct lmac *lmac; in thunder_bgx_detach() local
197 lmac = device_get_softc(dev); in thunder_bgx_detach()
198 bgx = lmac->bgx; in thunder_bgx_detach()
214 bgx_reg_read(struct bgx *bgx, uint8_t lmac, uint64_t offset) in bgx_reg_read() argument
218 addr = ((uint32_t)lmac << 20) + offset; in bgx_reg_read()
224 bgx_reg_write(struct bgx *bgx, uint8_t lmac, uint64_t offset, uint64_t val) in bgx_reg_write() argument
228 addr = ((uint32_t)lmac << 20) + offset; in bgx_reg_write()
234 bgx_reg_modify(struct bgx *bgx, uint8_t lmac, uint64_t offset, uint64_t val) in bgx_reg_modify() argument
238 addr = ((uint32_t)lmac << 20) + offset; in bgx_reg_modify()
244 bgx_poll_reg(struct bgx *bgx, uint8_t lmac, uint64_t reg, uint64_t mask, in bgx_poll_reg() argument
251 reg_val = bgx_reg_read(bgx, lmac, reg); in bgx_poll_reg()
297 struct lmac *lmac; in bgx_get_lmac_link_state() local
303 lmac = &bgx->lmac[lmacid]; in bgx_get_lmac_link_state()
304 link->link_up = lmac->link_up; in bgx_get_lmac_link_state()
305 link->duplex = lmac->last_duplex; in bgx_get_lmac_link_state()
306 link->speed = lmac->last_speed; in bgx_get_lmac_link_state()
315 return (bgx->lmac[lmacid].mac); in bgx_get_lmac_mac()
328 memcpy(bgx->lmac[lmacid].mac, mac, ETHER_ADDR_LEN); in bgx_set_lmac_mac()
332 bgx_sgmii_change_link_state(struct lmac *lmac) in bgx_sgmii_change_link_state() argument
334 struct bgx *bgx = lmac->bgx; in bgx_sgmii_change_link_state()
339 cmr_cfg = bgx_reg_read(bgx, lmac->lmacid, BGX_CMRX_CFG); in bgx_sgmii_change_link_state()
341 bgx_reg_write(bgx, lmac->lmacid, BGX_CMRX_CFG, cmr_cfg); in bgx_sgmii_change_link_state()
343 port_cfg = bgx_reg_read(bgx, lmac->lmacid, BGX_GMP_GMI_PRTX_CFG); in bgx_sgmii_change_link_state()
344 misc_ctl = bgx_reg_read(bgx, lmac->lmacid, BGX_GMP_PCS_MISCX_CTL); in bgx_sgmii_change_link_state()
346 if (lmac->link_up) { in bgx_sgmii_change_link_state()
349 port_cfg |= (lmac->last_duplex << 2); in bgx_sgmii_change_link_state()
354 switch (lmac->last_speed) { in bgx_sgmii_change_link_state()
361 bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_GMI_TXX_SLOT, 64); in bgx_sgmii_change_link_state()
362 bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_GMI_TXX_BURST, 0); in bgx_sgmii_change_link_state()
370 bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_GMI_TXX_SLOT, 64); in bgx_sgmii_change_link_state()
371 bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_GMI_TXX_BURST, 0); in bgx_sgmii_change_link_state()
379 bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_GMI_TXX_SLOT, 512); in bgx_sgmii_change_link_state()
380 if (lmac->last_duplex) in bgx_sgmii_change_link_state()
381 bgx_reg_write(bgx, lmac->lmacid, in bgx_sgmii_change_link_state()
384 bgx_reg_write(bgx, lmac->lmacid, in bgx_sgmii_change_link_state()
390 bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_PCS_MISCX_CTL, misc_ctl); in bgx_sgmii_change_link_state()
391 bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_GMI_PRTX_CFG, port_cfg); in bgx_sgmii_change_link_state()
393 port_cfg = bgx_reg_read(bgx, lmac->lmacid, BGX_GMP_GMI_PRTX_CFG); in bgx_sgmii_change_link_state()
397 bgx_reg_write(bgx, lmac->lmacid, BGX_CMRX_CFG, cmr_cfg); in bgx_sgmii_change_link_state()
403 struct lmac *lmac; in bgx_lmac_handler() local
408 lmac = (struct lmac *)arg; in bgx_lmac_handler()
410 err = LMAC_MEDIA_STATUS(lmac->phy_if_dev, lmac->lmacid, in bgx_lmac_handler()
415 if (!link && lmac->last_link) in bgx_lmac_handler()
419 (lmac->last_duplex != duplex || in bgx_lmac_handler()
420 lmac->last_link != link || in bgx_lmac_handler()
421 lmac->last_speed != speed)) { in bgx_lmac_handler()
425 lmac->last_link = link; in bgx_lmac_handler()
426 lmac->last_speed = speed; in bgx_lmac_handler()
427 lmac->last_duplex = duplex; in bgx_lmac_handler()
433 lmac->link_up = true; in bgx_lmac_handler()
435 lmac->link_up = false; in bgx_lmac_handler()
437 if (lmac->is_sgmii) in bgx_lmac_handler()
438 bgx_sgmii_change_link_state(lmac); in bgx_lmac_handler()
440 bgx_xaui_check_link(lmac); in bgx_lmac_handler()
443 callout_reset(&lmac->check_link, hz * 2, bgx_lmac_handler, lmac); in bgx_lmac_handler()
447 bgx_get_rx_stats(int node, int bgx_idx, int lmac, int idx) in bgx_get_rx_stats() argument
456 lmac = (0); in bgx_get_rx_stats()
457 return (bgx_reg_read(bgx, lmac, BGX_CMRX_RX_STAT0 + (idx * 8))); in bgx_get_rx_stats()
461 bgx_get_tx_stats(int node, int bgx_idx, int lmac, int idx) in bgx_get_tx_stats() argument
469 return (bgx_reg_read(bgx, lmac, BGX_CMRX_TX_STAT0 + (idx * 8))); in bgx_get_tx_stats()
473 bgx_flush_dmac_addrs(struct bgx *bgx, int lmac) in bgx_flush_dmac_addrs() argument
477 while (bgx->lmac[lmac].dmac > 0) { in bgx_flush_dmac_addrs()
478 offset = ((bgx->lmac[lmac].dmac - 1) * sizeof(uint64_t)) + in bgx_flush_dmac_addrs()
479 (lmac * MAX_DMAC_PER_LMAC * sizeof(uint64_t)); in bgx_flush_dmac_addrs()
481 bgx->lmac[lmac].dmac--; in bgx_flush_dmac_addrs()
486 bgx_add_dmac_addr(uint64_t dmac, int node, int bgx_idx, int lmac) in bgx_add_dmac_addr() argument
504 dmac = dmac | (1UL << 48) | ((uint64_t)lmac << 49); /* Enable DMAC */ in bgx_add_dmac_addr()
505 if (bgx->lmac[lmac].dmac == MAX_DMAC_PER_LMAC) { in bgx_add_dmac_addr()
508 lmac); in bgx_add_dmac_addr()
512 if (bgx->lmac[lmac].dmac == MAX_DMAC_PER_LMAC_TNS_BYPASS_MODE) in bgx_add_dmac_addr()
513 bgx->lmac[lmac].dmac = 1; in bgx_add_dmac_addr()
515 offset = (bgx->lmac[lmac].dmac * sizeof(uint64_t)) + in bgx_add_dmac_addr()
516 (lmac * MAX_DMAC_PER_LMAC * sizeof(uint64_t)); in bgx_add_dmac_addr()
518 bgx->lmac[lmac].dmac++; in bgx_add_dmac_addr()
520 bgx_reg_write(bgx, lmac, BGX_CMRX_RX_DMAC_CTL, in bgx_add_dmac_addr()
531 struct lmac *lmac; in bgx_lmac_internal_loopback() local
538 lmac = &bgx->lmac[lmac_idx]; in bgx_lmac_internal_loopback()
539 if (lmac->is_sgmii) { in bgx_lmac_internal_loopback()
689 bgx_xaui_check_link(struct lmac *lmac) in bgx_xaui_check_link() argument
691 struct bgx *bgx = lmac->bgx; in bgx_xaui_check_link()
692 int lmacid = lmac->lmacid; in bgx_xaui_check_link()
797 struct lmac *lmac; in bgx_poll_for_link() local
800 lmac = (struct lmac *)arg; in bgx_poll_for_link()
803 bgx_reg_modify(lmac->bgx, lmac->lmacid, in bgx_poll_for_link()
805 bgx_poll_reg(lmac->bgx, lmac->lmacid, BGX_SPUX_STATUS1, in bgx_poll_for_link()
808 link = bgx_reg_read(lmac->bgx, lmac->lmacid, BGX_SPUX_STATUS1); in bgx_poll_for_link()
810 lmac->link_up = 1; in bgx_poll_for_link()
811 if (lmac->bgx->lmac_type == BGX_MODE_XLAUI) in bgx_poll_for_link()
812 lmac->last_speed = 40000; in bgx_poll_for_link()
814 lmac->last_speed = 10000; in bgx_poll_for_link()
815 lmac->last_duplex = 1; in bgx_poll_for_link()
817 lmac->link_up = 0; in bgx_poll_for_link()
820 if (lmac->last_link != lmac->link_up) { in bgx_poll_for_link()
821 lmac->last_link = lmac->link_up; in bgx_poll_for_link()
822 if (lmac->link_up) in bgx_poll_for_link()
823 bgx_xaui_check_link(lmac); in bgx_poll_for_link()
826 callout_reset(&lmac->check_link, hz * 2, bgx_poll_for_link, lmac); in bgx_poll_for_link()
833 struct lmac *lmac; in bgx_lmac_enable() local
836 lmac = &bgx->lmac[lmacid]; in bgx_lmac_enable()
837 lmac->bgx = bgx; in bgx_lmac_enable()
840 lmac->is_sgmii = 1; in bgx_lmac_enable()
844 lmac->is_sgmii = 0; in bgx_lmac_enable()
849 if (lmac->is_sgmii) { in bgx_lmac_enable()
876 if (lmac->phy_if_dev == NULL) { in bgx_lmac_enable()
882 if (LMAC_PHY_CONNECT(lmac->phy_if_dev, lmac->phyaddr, in bgx_lmac_enable()
888 mtx_init(&lmac->check_link_mtx, "BGX link poll", NULL, MTX_DEF); in bgx_lmac_enable()
889 callout_init_mtx(&lmac->check_link, &lmac->check_link_mtx, 0); in bgx_lmac_enable()
890 mtx_lock(&lmac->check_link_mtx); in bgx_lmac_enable()
891 bgx_lmac_handler(lmac); in bgx_lmac_enable()
892 mtx_unlock(&lmac->check_link_mtx); in bgx_lmac_enable()
894 mtx_init(&lmac->check_link_mtx, "BGX link poll", NULL, MTX_DEF); in bgx_lmac_enable()
895 callout_init_mtx(&lmac->check_link, &lmac->check_link_mtx, 0); in bgx_lmac_enable()
896 mtx_lock(&lmac->check_link_mtx); in bgx_lmac_enable()
897 bgx_poll_for_link(lmac); in bgx_lmac_enable()
898 mtx_unlock(&lmac->check_link_mtx); in bgx_lmac_enable()
907 struct lmac *lmac; in bgx_lmac_disable() local
910 lmac = &bgx->lmac[lmacid]; in bgx_lmac_disable()
913 callout_drain(&lmac->check_link); in bgx_lmac_disable()
914 mtx_destroy(&lmac->check_link_mtx); in bgx_lmac_disable()
925 if (lmac->phy_if_dev == NULL) { in bgx_lmac_disable()
930 if (LMAC_PHY_DISCONNECT(lmac->phy_if_dev, lmac->phyaddr, in bgx_lmac_disable()
936 lmac->phy_if_dev = NULL; in bgx_lmac_disable()
1022 bgx->lmac[i].lmacid_bd = lmac_count; in bgx_init_hw()