Lines Matching refs:cgx

49 	struct cgx *cgx;  member
54 struct cgx { struct
74 static int cgx_fwi_link_change(struct cgx *cgx, int lmac_id, bool en); argument
84 static void cgx_write(struct cgx *cgx, u64 lmac, u64 offset, u64 val) in cgx_write() argument
86 writeq(val, cgx->reg_base + (lmac << 18) + offset); in cgx_write()
89 static u64 cgx_read(struct cgx *cgx, u64 lmac, u64 offset) in cgx_read() argument
91 return readq(cgx->reg_base + (lmac << 18) + offset); in cgx_read()
94 static inline struct lmac *lmac_pdata(u8 lmac_id, struct cgx *cgx) in lmac_pdata() argument
96 if (!cgx || lmac_id >= MAX_LMAC_PER_CGX) in lmac_pdata()
99 return cgx->lmac_idmap[lmac_id]; in lmac_pdata()
104 struct cgx *cgx_dev; in cgx_get_cgxcnt_max()
120 struct cgx *cgx = cgxd; in cgx_get_lmac_cnt() local
122 if (!cgx) in cgx_get_lmac_cnt()
125 return cgx->lmac_count; in cgx_get_lmac_cnt()
131 struct cgx *cgx_dev; in cgx_get_pdata()
171 struct cgx *cgx_dev = cgx_get_pdata(cgx_id); in cgx_lmac_addr_set()
192 struct cgx *cgx_dev = cgx_get_pdata(cgx_id); in cgx_lmac_addr_get()
202 struct cgx *cgx = cgxd; in cgx_set_pkind() local
204 if (!cgx || lmac_id >= cgx->lmac_count) in cgx_set_pkind()
207 cgx_write(cgx, lmac_id, CGXX_CMRX_RX_ID_MAP, (pkind & 0x3F)); in cgx_set_pkind()
212 static inline u8 cgx_get_lmac_type(struct cgx *cgx, int lmac_id) in cgx_get_lmac_type() argument
216 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_CFG); in cgx_get_lmac_type()
223 struct cgx *cgx = cgxd; in cgx_lmac_internal_loopback() local
227 if (!cgx || lmac_id >= cgx->lmac_count) in cgx_lmac_internal_loopback()
230 lmac_type = cgx_get_lmac_type(cgx, lmac_id); in cgx_lmac_internal_loopback()
232 cfg = cgx_read(cgx, lmac_id, CGXX_GMP_PCS_MRX_CTL); in cgx_lmac_internal_loopback()
237 cgx_write(cgx, lmac_id, CGXX_GMP_PCS_MRX_CTL, cfg); in cgx_lmac_internal_loopback()
239 cfg = cgx_read(cgx, lmac_id, CGXX_SPUX_CONTROL1); in cgx_lmac_internal_loopback()
244 cgx_write(cgx, lmac_id, CGXX_SPUX_CONTROL1, cfg); in cgx_lmac_internal_loopback()
252 struct cgx *cgx = cgx_get_pdata(cgx_id); in cgx_lmac_promisc_config() local
255 if (!cgx) in cgx_lmac_promisc_config()
260 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_RX_DMAC_CTL0); in cgx_lmac_promisc_config()
263 cgx_write(cgx, lmac_id, CGXX_CMRX_RX_DMAC_CTL0, cfg); in cgx_lmac_promisc_config()
265 cfg = cgx_read(cgx, 0, in cgx_lmac_promisc_config()
268 cgx_write(cgx, 0, in cgx_lmac_promisc_config()
272 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_RX_DMAC_CTL0); in cgx_lmac_promisc_config()
274 cgx_write(cgx, lmac_id, CGXX_CMRX_RX_DMAC_CTL0, cfg); in cgx_lmac_promisc_config()
275 cfg = cgx_read(cgx, 0, in cgx_lmac_promisc_config()
278 cgx_write(cgx, 0, in cgx_lmac_promisc_config()
286 struct cgx *cgx = cgxd; in cgx_get_rx_stats() local
288 if (!cgx || lmac_id >= cgx->lmac_count) in cgx_get_rx_stats()
290 *rx_stat = cgx_read(cgx, lmac_id, CGXX_CMRX_RX_STAT0 + (idx * 8)); in cgx_get_rx_stats()
297 struct cgx *cgx = cgxd; in cgx_get_tx_stats() local
299 if (!cgx || lmac_id >= cgx->lmac_count) in cgx_get_tx_stats()
301 *tx_stat = cgx_read(cgx, lmac_id, CGXX_CMRX_TX_STAT0 + (idx * 8)); in cgx_get_tx_stats()
308 struct cgx *cgx = cgxd; in cgx_lmac_rx_tx_enable() local
311 if (!cgx || lmac_id >= cgx->lmac_count) in cgx_lmac_rx_tx_enable()
314 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_CFG); in cgx_lmac_rx_tx_enable()
319 cgx_write(cgx, lmac_id, CGXX_CMRX_CFG, cfg); in cgx_lmac_rx_tx_enable()
327 struct cgx *cgx = lmac->cgx; in cgx_fwi_cmd_send() local
338 cmd = cgx_read(cgx, lmac->lmac_id, CGX_COMMAND_REG); in cgx_fwi_cmd_send()
351 cgx_write(cgx, lmac->lmac_id, CGX_COMMAND_REG, req); in cgx_fwi_cmd_send()
356 dev = &cgx->pdev->dev; in cgx_fwi_cmd_send()
358 cgx->cgx_id, lmac->lmac_id); in cgx_fwi_cmd_send()
374 struct cgx *cgx, int lmac_id) in cgx_fwi_cmd_generic() argument
379 lmac = lmac_pdata(lmac_id, cgx); in cgx_fwi_cmd_generic()
425 struct cgx *cgx, u8 lmac_id) in link_status_user_format() argument
432 linfo->lmac_type_id = cgx_get_lmac_type(cgx, lmac_id); in link_status_user_format()
442 struct cgx *cgx = lmac->cgx; in cgx_link_change_handler() local
447 dev = &cgx->pdev->dev; in cgx_link_change_handler()
449 link_status_user_format(lstat, &event.link_uinfo, cgx, lmac->lmac_id); in cgx_link_change_handler()
452 event.cgx_id = cgx->cgx_id; in cgx_link_change_handler()
464 cgx->cgx_id, lmac->lmac_id); in cgx_link_change_handler()
467 cgx->cgx_id, lmac->lmac_id, err_type); in cgx_link_change_handler()
470 cgx->cgx_id, lmac->lmac_id, in cgx_link_change_handler()
502 struct cgx *cgx) in cgx_fwi_get_mkex_prfl_sz() argument
509 err = cgx_fwi_cmd_generic(req, &resp, cgx, 0); in cgx_fwi_get_mkex_prfl_sz()
517 struct cgx *cgx) in cgx_fwi_get_mkex_prfl_addr() argument
524 err = cgx_fwi_cmd_generic(req, &resp, cgx, 0); in cgx_fwi_get_mkex_prfl_addr()
533 struct cgx *cgx_dev; in cgx_get_mkex_prfl_info()
539 cgx_dev = list_first_entry(&cgx_list, struct cgx, cgx_list); in cgx_get_mkex_prfl_info()
558 struct cgx *cgx; in cgx_fwi_event_handler() local
561 cgx = lmac->cgx; in cgx_fwi_event_handler()
563 event = cgx_read(cgx, lmac->lmac_id, CGX_EVENT_REG); in cgx_fwi_event_handler()
597 cgx_write(lmac->cgx, lmac->lmac_id, CGX_EVENT_REG, 0); in cgx_fwi_event_handler()
598 cgx_write(lmac->cgx, lmac->lmac_id, CGXX_CMRX_INT, FW_CGX_INT); in cgx_fwi_event_handler()
608 struct cgx *cgx = cgxd; in cgx_lmac_evh_register() local
611 lmac = lmac_pdata(lmac_id, cgx); in cgx_lmac_evh_register()
625 struct cgx *cgx = cgxd; in cgx_lmac_evh_unregister() local
627 lmac = lmac_pdata(lmac_id, cgx); in cgx_lmac_evh_unregister()
640 static int cgx_fwi_link_change(struct cgx *cgx, int lmac_id, bool enable) in cgx_fwi_link_change() argument
650 return cgx_fwi_cmd_generic(req, &resp, cgx, lmac_id); in cgx_fwi_link_change()
653 static inline int cgx_fwi_read_version(u64 *resp, struct cgx *cgx) in cgx_fwi_read_version() argument
658 return cgx_fwi_cmd_generic(req, resp, cgx, 0); in cgx_fwi_read_version()
661 static int cgx_lmac_verify_fwi_version(struct cgx *cgx) in cgx_lmac_verify_fwi_version() argument
663 struct device *dev = &cgx->pdev->dev; in cgx_lmac_verify_fwi_version()
668 if (!cgx->lmac_count) in cgx_lmac_verify_fwi_version()
671 err = cgx_fwi_read_version(&resp, cgx); in cgx_lmac_verify_fwi_version()
688 struct cgx *cgx = container_of(work, struct cgx, cgx_cmd_work); in cgx_lmac_linkup_work() local
689 struct device *dev = &cgx->pdev->dev; in cgx_lmac_linkup_work()
693 for (i = 0; i < cgx->lmac_count; i++) { in cgx_lmac_linkup_work()
694 err = cgx_fwi_link_change(cgx, i, true); in cgx_lmac_linkup_work()
697 cgx->cgx_id, i); in cgx_lmac_linkup_work()
703 struct cgx *cgx = cgxd; in cgx_lmac_linkup_start() local
705 if (!cgx) in cgx_lmac_linkup_start()
708 queue_work(cgx->cgx_cmd_workq, &cgx->cgx_cmd_work); in cgx_lmac_linkup_start()
714 static int cgx_lmac_init(struct cgx *cgx) in cgx_lmac_init() argument
719 cgx->lmac_count = cgx_read(cgx, 0, CGXX_CMRX_RX_LMACS) & 0x7; in cgx_lmac_init()
720 if (cgx->lmac_count > MAX_LMAC_PER_CGX) in cgx_lmac_init()
721 cgx->lmac_count = MAX_LMAC_PER_CGX; in cgx_lmac_init()
723 for (i = 0; i < cgx->lmac_count; i++) { in cgx_lmac_init()
730 sprintf(lmac->name, "cgx_fwi_%d_%d", cgx->cgx_id, i); in cgx_lmac_init()
732 lmac->cgx = cgx; in cgx_lmac_init()
736 err = request_irq(pci_irq_vector(cgx->pdev, in cgx_lmac_init()
743 cgx_write(cgx, lmac->lmac_id, CGXX_CMRX_INT_ENA_W1S, in cgx_lmac_init()
747 cgx->lmac_idmap[i] = lmac; in cgx_lmac_init()
750 return cgx_lmac_verify_fwi_version(cgx); in cgx_lmac_init()
753 static int cgx_lmac_exit(struct cgx *cgx) in cgx_lmac_exit() argument
758 if (cgx->cgx_cmd_workq) { in cgx_lmac_exit()
759 flush_workqueue(cgx->cgx_cmd_workq); in cgx_lmac_exit()
760 destroy_workqueue(cgx->cgx_cmd_workq); in cgx_lmac_exit()
761 cgx->cgx_cmd_workq = NULL; in cgx_lmac_exit()
765 for (i = 0; i < cgx->lmac_count; i++) { in cgx_lmac_exit()
766 lmac = cgx->lmac_idmap[i]; in cgx_lmac_exit()
769 free_irq(pci_irq_vector(cgx->pdev, CGX_LMAC_FWI + i * 9), lmac); in cgx_lmac_exit()
780 struct cgx *cgx; in cgx_probe() local
783 cgx = devm_kzalloc(dev, sizeof(*cgx), GFP_KERNEL); in cgx_probe()
784 if (!cgx) in cgx_probe()
786 cgx->pdev = pdev; in cgx_probe()
788 pci_set_drvdata(pdev, cgx); in cgx_probe()
804 cgx->reg_base = pcim_iomap(pdev, PCI_CFG_REG_BAR_NUM, 0); in cgx_probe()
805 if (!cgx->reg_base) { in cgx_probe()
819 cgx->cgx_id = (pci_resource_start(pdev, PCI_CFG_REG_BAR_NUM) >> 24) in cgx_probe()
823 INIT_WORK(&cgx->cgx_cmd_work, cgx_lmac_linkup_work); in cgx_probe()
824 cgx->cgx_cmd_workq = alloc_workqueue("cgx_cmd_workq", 0, 0); in cgx_probe()
825 if (!cgx->cgx_cmd_workq) { in cgx_probe()
831 list_add(&cgx->cgx_list, &cgx_list); in cgx_probe()
835 err = cgx_lmac_init(cgx); in cgx_probe()
842 cgx_lmac_exit(cgx); in cgx_probe()
843 list_del(&cgx->cgx_list); in cgx_probe()
856 struct cgx *cgx = pci_get_drvdata(pdev); in cgx_remove() local
858 cgx_lmac_exit(cgx); in cgx_remove()
859 list_del(&cgx->cgx_list); in cgx_remove()