Lines Matching refs:lmac

112 void cgx_write(struct cgx *cgx, u64 lmac, u64 offset, u64 val)  in cgx_write()  argument
114 writeq(val, cgx->reg_base + (lmac << cgx->mac_ops->lmac_offset) + in cgx_write()
118 u64 cgx_read(struct cgx *cgx, u64 lmac, u64 offset) in cgx_read() argument
120 return readq(cgx->reg_base + (lmac << cgx->mac_ops->lmac_offset) + in cgx_read()
124 struct lmac *lmac_pdata(u8 lmac_id, struct cgx *cgx) in lmac_pdata()
210 struct lmac *lmac = lmac_pdata(lmac_id, cgxd); in cgx_get_link_info() local
212 if (!lmac) in cgx_get_link_info()
215 *linfo = lmac->link_info; in cgx_get_link_info()
240 struct lmac *lmac = lmac_pdata(lmac_id, cgx_dev); in cgx_lmac_addr_set() local
255 index = id * lmac->mac_to_index_bmap.max; in cgx_lmac_addr_set()
299 struct lmac *lmac = lmac_pdata(lmac_id, cgx_dev); in cgx_lmac_addr_add() local
305 if (!lmac) in cgx_lmac_addr_add()
310 idx = rvu_alloc_rsrc(&lmac->mac_to_index_bmap); in cgx_lmac_addr_add()
316 index = id * lmac->mac_to_index_bmap.max + idx; in cgx_lmac_addr_add()
329 lmac->mcast_filters_count++; in cgx_lmac_addr_add()
330 } else if (!lmac->mcast_filters_count) { in cgx_lmac_addr_add()
342 struct lmac *lmac = lmac_pdata(lmac_id, cgx_dev); in cgx_lmac_addr_reset() local
347 if (!lmac) in cgx_lmac_addr_reset()
354 set_bit(0, lmac->mac_to_index_bmap.bmap); in cgx_lmac_addr_reset()
358 index = id * lmac->mac_to_index_bmap.max + index; in cgx_lmac_addr_reset()
378 struct lmac *lmac; in cgx_lmac_addr_update() local
382 lmac = lmac_pdata(lmac_id, cgx_dev); in cgx_lmac_addr_update()
383 if (!lmac) in cgx_lmac_addr_update()
388 if (index >= lmac->mac_to_index_bmap.max) in cgx_lmac_addr_update()
392 if (!test_bit(index, lmac->mac_to_index_bmap.bmap)) in cgx_lmac_addr_update()
397 index = id * lmac->mac_to_index_bmap.max + index; in cgx_lmac_addr_update()
410 struct lmac *lmac = lmac_pdata(lmac_id, cgx_dev); in cgx_lmac_addr_del() local
416 if (!lmac) in cgx_lmac_addr_del()
421 if (index >= lmac->mac_to_index_bmap.max) in cgx_lmac_addr_del()
428 rvu_free_rsrc(&lmac->mac_to_index_bmap, index); in cgx_lmac_addr_del()
432 index = id * lmac->mac_to_index_bmap.max + index; in cgx_lmac_addr_del()
439 lmac->mcast_filters_count--; in cgx_lmac_addr_del()
441 if (!lmac->mcast_filters_count) { in cgx_lmac_addr_del()
456 struct lmac *lmac = lmac_pdata(lmac_id, cgx_dev); in cgx_lmac_addr_max_entries_get() local
458 if (lmac) in cgx_lmac_addr_max_entries_get()
459 return lmac->mac_to_index_bmap.max; in cgx_lmac_addr_max_entries_get()
467 struct lmac *lmac = lmac_pdata(lmac_id, cgx_dev); in cgx_lmac_addr_get() local
477 index = id * lmac->mac_to_index_bmap.max; in cgx_lmac_addr_get()
561 struct lmac *lmac = lmac_pdata(lmac_id, cgx); in cgx_lmac_promisc_config() local
562 u16 max_dmac = lmac->mac_to_index_bmap.max; in cgx_lmac_promisc_config()
635 struct lmac *lmac; in cgx_lmac_enadis_rx_pause_fwding() local
641 lmac = lmac_pdata(lmac_id, cgx); in cgx_lmac_enadis_rx_pause_fwding()
642 if (!lmac) in cgx_lmac_enadis_rx_pause_fwding()
646 if (!bitmap_weight(lmac->rx_fc_pfvf_bmap.bmap, lmac->rx_fc_pfvf_bmap.max)) in cgx_lmac_enadis_rx_pause_fwding()
893 struct lmac *lmac; in verify_lmac_fc_cfg() local
895 lmac = lmac_pdata(lmac_id, cgx); in verify_lmac_fc_cfg()
896 if (!lmac) in verify_lmac_fc_cfg()
900 clear_bit(pfvf_idx, lmac->rx_fc_pfvf_bmap.bmap); in verify_lmac_fc_cfg()
902 set_bit(pfvf_idx, lmac->rx_fc_pfvf_bmap.bmap); in verify_lmac_fc_cfg()
905 clear_bit(pfvf_idx, lmac->tx_fc_pfvf_bmap.bmap); in verify_lmac_fc_cfg()
907 set_bit(pfvf_idx, lmac->tx_fc_pfvf_bmap.bmap); in verify_lmac_fc_cfg()
910 if (!rx_pause && bitmap_weight(lmac->rx_fc_pfvf_bmap.bmap, lmac->rx_fc_pfvf_bmap.max)) { in verify_lmac_fc_cfg()
916 if (!tx_pause && bitmap_weight(lmac->tx_fc_pfvf_bmap.bmap, lmac->tx_fc_pfvf_bmap.max)) { in verify_lmac_fc_cfg()
1015 int cgx_fwi_cmd_send(u64 req, u64 *resp, struct lmac *lmac) in cgx_fwi_cmd_send() argument
1017 struct cgx *cgx = lmac->cgx; in cgx_fwi_cmd_send()
1023 err = mutex_lock_interruptible(&lmac->cmd_lock); in cgx_fwi_cmd_send()
1028 cmd = cgx_read(cgx, lmac->lmac_id, CGX_COMMAND_REG); in cgx_fwi_cmd_send()
1038 lmac->cmd_pend = true; in cgx_fwi_cmd_send()
1041 cgx_write(cgx, lmac->lmac_id, CGX_COMMAND_REG, req); in cgx_fwi_cmd_send()
1044 if (!wait_event_timeout(lmac->wq_cmd_cmplt, !lmac->cmd_pend, in cgx_fwi_cmd_send()
1048 cgx->cgx_id, lmac->lmac_id, FIELD_GET(CMDREG_ID, req)); in cgx_fwi_cmd_send()
1055 *resp = lmac->resp; in cgx_fwi_cmd_send()
1058 mutex_unlock(&lmac->cmd_lock); in cgx_fwi_cmd_send()
1065 struct lmac *lmac; in cgx_fwi_cmd_generic() local
1068 lmac = lmac_pdata(lmac_id, cgx); in cgx_fwi_cmd_generic()
1069 if (!lmac) in cgx_fwi_cmd_generic()
1072 err = cgx_fwi_cmd_send(req, resp, lmac); in cgx_fwi_cmd_generic()
1240 struct lmac *lmac) in cgx_link_change_handler() argument
1243 struct cgx *cgx = lmac->cgx; in cgx_link_change_handler()
1250 link_status_user_format(lstat, &event.link_uinfo, cgx, lmac->lmac_id); in cgx_link_change_handler()
1254 event.lmac_id = lmac->lmac_id; in cgx_link_change_handler()
1257 lmac->link_info = event.link_uinfo; in cgx_link_change_handler()
1258 linfo = &lmac->link_info; in cgx_link_change_handler()
1264 spin_lock(&lmac->event_cb_lock); in cgx_link_change_handler()
1266 if (!lmac->event_cb.notify_link_chg) { in cgx_link_change_handler()
1268 cgx->cgx_id, lmac->lmac_id); in cgx_link_change_handler()
1271 cgx->cgx_id, lmac->lmac_id, err_type); in cgx_link_change_handler()
1274 cgx->cgx_id, lmac->lmac_id, in cgx_link_change_handler()
1279 if (lmac->event_cb.notify_link_chg(&event, lmac->event_cb.data)) in cgx_link_change_handler()
1282 spin_unlock(&lmac->event_cb_lock); in cgx_link_change_handler()
1309 struct lmac *lmac = data; in cgx_fwi_event_handler() local
1312 cgx = lmac->cgx; in cgx_fwi_event_handler()
1318 event = cgx_read(cgx, lmac->lmac_id, CGX_EVENT_REG); in cgx_fwi_event_handler()
1328 lmac->resp = event; in cgx_fwi_event_handler()
1336 cgx_link_change_handler(event, lmac); in cgx_fwi_event_handler()
1339 lmac->cmd_pend = false; in cgx_fwi_event_handler()
1340 wake_up_interruptible(&lmac->wq_cmd_cmplt); in cgx_fwi_event_handler()
1344 cgx_link_change_handler(event, lmac); in cgx_fwi_event_handler()
1352 cgx_write(lmac->cgx, lmac->lmac_id, CGX_EVENT_REG, 0); in cgx_fwi_event_handler()
1353 cgx_write(lmac->cgx, lmac->lmac_id, offset, clear_bit); in cgx_fwi_event_handler()
1364 struct lmac *lmac; in cgx_lmac_evh_register() local
1366 lmac = lmac_pdata(lmac_id, cgx); in cgx_lmac_evh_register()
1367 if (!lmac) in cgx_lmac_evh_register()
1370 lmac->event_cb = *cb; in cgx_lmac_evh_register()
1377 struct lmac *lmac; in cgx_lmac_evh_unregister() local
1381 lmac = lmac_pdata(lmac_id, cgx); in cgx_lmac_evh_unregister()
1382 if (!lmac) in cgx_lmac_evh_unregister()
1385 spin_lock_irqsave(&lmac->event_cb_lock, flags); in cgx_lmac_evh_unregister()
1386 lmac->event_cb.notify_link_chg = NULL; in cgx_lmac_evh_unregister()
1387 lmac->event_cb.data = NULL; in cgx_lmac_evh_unregister()
1388 spin_unlock_irqrestore(&lmac->event_cb_lock, flags); in cgx_lmac_evh_unregister()
1551 static int cgx_configure_interrupt(struct cgx *cgx, struct lmac *lmac, in cgx_configure_interrupt() argument
1565 free_irq(irq, lmac); in cgx_configure_interrupt()
1569 err = request_irq(irq, cgx_fwi_event_handler, 0, lmac->name, lmac); in cgx_configure_interrupt()
1574 cgx_write(cgx, lmac->lmac_id, offset, ena_bit); in cgx_configure_interrupt()
1601 struct lmac *lmac; in cgx_lmac_init() local
1621 lmac = kzalloc(sizeof(struct lmac), GFP_KERNEL); in cgx_lmac_init()
1622 if (!lmac) in cgx_lmac_init()
1624 lmac->name = kcalloc(1, sizeof("cgx_fwi_xxx_yyy"), GFP_KERNEL); in cgx_lmac_init()
1625 if (!lmac->name) { in cgx_lmac_init()
1629 sprintf(lmac->name, "cgx_fwi_%d_%d", cgx->cgx_id, i); in cgx_lmac_init()
1631 lmac->lmac_id = __ffs64(lmac_list); in cgx_lmac_init()
1632 lmac_list &= ~BIT_ULL(lmac->lmac_id); in cgx_lmac_init()
1634 lmac->lmac_id = i; in cgx_lmac_init()
1637 lmac->cgx = cgx; in cgx_lmac_init()
1638 lmac->mac_to_index_bmap.max = in cgx_lmac_init()
1642 err = rvu_alloc_bitmap(&lmac->mac_to_index_bmap); in cgx_lmac_init()
1647 set_bit(0, lmac->mac_to_index_bmap.bmap); in cgx_lmac_init()
1649 lmac->rx_fc_pfvf_bmap.max = 128; in cgx_lmac_init()
1650 err = rvu_alloc_bitmap(&lmac->rx_fc_pfvf_bmap); in cgx_lmac_init()
1654 lmac->tx_fc_pfvf_bmap.max = 128; in cgx_lmac_init()
1655 err = rvu_alloc_bitmap(&lmac->tx_fc_pfvf_bmap); in cgx_lmac_init()
1659 init_waitqueue_head(&lmac->wq_cmd_cmplt); in cgx_lmac_init()
1660 mutex_init(&lmac->cmd_lock); in cgx_lmac_init()
1661 spin_lock_init(&lmac->event_cb_lock); in cgx_lmac_init()
1662 err = cgx_configure_interrupt(cgx, lmac, lmac->lmac_id, false); in cgx_lmac_init()
1667 cgx->lmac_idmap[lmac->lmac_id] = lmac; in cgx_lmac_init()
1668 set_bit(lmac->lmac_id, &cgx->lmac_bmap); in cgx_lmac_init()
1669 cgx->mac_ops->mac_pause_frm_config(cgx, lmac->lmac_id, true); in cgx_lmac_init()
1675 rvu_free_bitmap(&lmac->tx_fc_pfvf_bmap); in cgx_lmac_init()
1677 rvu_free_bitmap(&lmac->rx_fc_pfvf_bmap); in cgx_lmac_init()
1679 rvu_free_bitmap(&lmac->mac_to_index_bmap); in cgx_lmac_init()
1681 kfree(lmac->name); in cgx_lmac_init()
1683 kfree(lmac); in cgx_lmac_init()
1689 struct lmac *lmac; in cgx_lmac_exit() local
1699 lmac = cgx->lmac_idmap[i]; in cgx_lmac_exit()
1700 if (!lmac) in cgx_lmac_exit()
1702 cgx->mac_ops->mac_pause_frm_config(cgx, lmac->lmac_id, false); in cgx_lmac_exit()
1703 cgx_configure_interrupt(cgx, lmac, lmac->lmac_id, true); in cgx_lmac_exit()
1704 kfree(lmac->mac_to_index_bmap.bmap); in cgx_lmac_exit()
1705 kfree(lmac->name); in cgx_lmac_exit()
1706 kfree(lmac); in cgx_lmac_exit()