Lines Matching full:adapter
58 #include "adapter.h"
166 read_reg(struct sume_adapter *adapter, int offset) in read_reg() argument
169 return (bus_space_read_4(adapter->bt, adapter->bh, offset << 2)); in read_reg()
173 write_reg(struct sume_adapter *adapter, int offset, uint32_t val) in write_reg() argument
176 bus_space_write_4(adapter->bt, adapter->bh, offset << 2, val); in write_reg()
210 sume_rx_build_mbuf(struct sume_adapter *adapter, uint32_t len) in sume_rx_build_mbuf() argument
217 device_t dev = adapter->dev; in sume_rx_build_mbuf()
219 adapter->recv[SUME_RIFFA_CHANNEL_DATA]->buf_addr + in sume_rx_build_mbuf()
226 adapter->packets_err++; in sume_rx_build_mbuf()
227 adapter->bytes_err += len; in sume_rx_build_mbuf()
248 adapter->packets_err++; in sume_rx_build_mbuf()
249 adapter->bytes_err += plen; in sume_rx_build_mbuf()
252 ifp = adapter->ifp[np]; in sume_rx_build_mbuf()
264 if (adapter->sume_debug) in sume_rx_build_mbuf()
269 adapter->packets_err++; in sume_rx_build_mbuf()
270 adapter->bytes_err += plen; in sume_rx_build_mbuf()
319 struct sume_adapter *adapter = arg; in sume_intr_handler() local
322 device_t dev = adapter->dev; in sume_intr_handler()
327 SUME_LOCK(adapter); in sume_intr_handler()
329 vect0 = read_reg(adapter, RIFFA_IRQ_REG0_OFF); in sume_intr_handler()
331 SUME_UNLOCK(adapter); in sume_intr_handler()
341 send = adapter->send[ch]; in sume_intr_handler()
342 recv = adapter->recv[ch]; in sume_intr_handler()
347 if (adapter->sume_debug) in sume_intr_handler()
376 len = read_reg(adapter, RIFFA_CHNL_REG(ch, in sume_intr_handler()
381 check_tx_queues(adapter); in sume_intr_handler()
410 if (adapter->sume_debug) in sume_intr_handler()
429 recv->offlast = read_reg(adapter, in sume_intr_handler()
432 recv->len = read_reg(adapter, RIFFA_CHNL_REG(ch, in sume_intr_handler()
445 adapter->sg_buf_size) in sume_intr_handler()
450 sume_fill_bb_desc(adapter, recv, in sume_intr_handler()
456 write_reg(adapter, RIFFA_CHNL_REG(ch, in sume_intr_handler()
459 write_reg(adapter, RIFFA_CHNL_REG(ch, in sume_intr_handler()
462 write_reg(adapter, RIFFA_CHNL_REG(ch, in sume_intr_handler()
493 len = read_reg(adapter, RIFFA_CHNL_REG(ch, in sume_intr_handler()
498 m = sume_rx_build_mbuf(adapter, in sume_intr_handler()
530 read_reg(adapter, RIFFA_CHNL_REG(ch, in sume_intr_handler()
536 SUME_UNLOCK(adapter); in sume_intr_handler()
546 * for the adapter to go into the 'running' state.
551 struct sume_adapter *adapter = arg; in sume_intr_filter() local
553 if (adapter->running == 0) in sume_intr_filter()
560 sume_probe_riffa_pci(struct sume_adapter *adapter) in sume_probe_riffa_pci() argument
562 device_t dev = adapter->dev; in sume_probe_riffa_pci()
568 adapter->rid = PCIR_BAR(0); in sume_probe_riffa_pci()
569 adapter->bar0_addr = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in sume_probe_riffa_pci()
570 &adapter->rid, RF_ACTIVE); in sume_probe_riffa_pci()
571 if (adapter->bar0_addr == NULL) { in sume_probe_riffa_pci()
576 adapter->bt = rman_get_bustag(adapter->bar0_addr); in sume_probe_riffa_pci()
577 adapter->bh = rman_get_bushandle(adapter->bar0_addr); in sume_probe_riffa_pci()
578 adapter->bar0_len = rman_get_size(adapter->bar0_addr); in sume_probe_riffa_pci()
579 if (adapter->bar0_len != 1024) { in sume_probe_riffa_pci()
581 adapter->bar0_len); in sume_probe_riffa_pci()
593 adapter->irq.rid = 1; /* Should be 1, thus says pci_alloc_msi() */ in sume_probe_riffa_pci()
594 adapter->irq.res = bus_alloc_resource_any(dev, SYS_RES_IRQ, in sume_probe_riffa_pci()
595 &adapter->irq.rid, RF_SHAREABLE | RF_ACTIVE); in sume_probe_riffa_pci()
596 if (adapter->irq.res == NULL) { in sume_probe_riffa_pci()
602 error = bus_setup_intr(dev, adapter->irq.res, INTR_MPSAFE | in sume_probe_riffa_pci()
603 INTR_TYPE_NET, sume_intr_filter, sume_intr_handler, adapter, in sume_probe_riffa_pci()
604 &adapter->irq.tag); in sume_probe_riffa_pci()
607 " %s: %d\n", adapter->irq.rid, "SUME_INTR", error); in sume_probe_riffa_pci()
628 reg = read_reg(adapter, RIFFA_INFO_REG_OFF); in sume_probe_riffa_pci()
629 adapter->num_sg = RIFFA_SG_ELEMS * ((reg >> 19) & 0xf); in sume_probe_riffa_pci()
630 adapter->sg_buf_size = RIFFA_SG_BUF_SIZE * ((reg >> 19) & 0xf); in sume_probe_riffa_pci()
685 sume_fill_bb_desc(struct sume_adapter *adapter, struct riffa_chnl_dir *p, in sume_fill_bb_desc() argument
697 sume_modreg_write_locked(struct sume_adapter *adapter) in sume_modreg_write_locked() argument
699 struct riffa_chnl_dir *send = adapter->send[SUME_RIFFA_CHANNEL_REG]; in sume_modreg_write_locked()
702 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_REG, in sume_modreg_write_locked()
704 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_REG, in sume_modreg_write_locked()
708 sume_fill_bb_desc(adapter, send, SUME_RIFFA_LEN(send->len)); in sume_modreg_write_locked()
716 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_REG, in sume_modreg_write_locked()
719 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_REG, in sume_modreg_write_locked()
722 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_REG, in sume_modreg_write_locked()
740 struct sume_adapter *adapter = nf_priv->adapter; in sume_module_reg_write() local
741 struct riffa_chnl_dir *send = adapter->send[SUME_RIFFA_CHANNEL_REG]; in sume_module_reg_write()
752 SUME_LOCK(adapter); in sume_module_reg_write()
755 SUME_UNLOCK(adapter); in sume_module_reg_write()
768 error = sume_modreg_write_locked(adapter); in sume_module_reg_write()
770 SUME_UNLOCK(adapter); in sume_module_reg_write()
776 error = msleep(&send->event, &adapter->lock, 0, in sume_module_reg_write()
797 SUME_UNLOCK(adapter); in sume_module_reg_write()
806 struct sume_adapter *adapter = nf_priv->adapter; in sume_module_reg_read() local
807 struct riffa_chnl_dir *recv = adapter->recv[SUME_RIFFA_CHANNEL_REG]; in sume_module_reg_read()
808 struct riffa_chnl_dir *send = adapter->send[SUME_RIFFA_CHANNEL_REG]; in sume_module_reg_read()
818 SUME_LOCK(adapter); in sume_module_reg_read()
827 error = msleep(&recv->event, &adapter->lock, 0, in sume_module_reg_read()
831 SUME_UNLOCK(adapter); in sume_module_reg_read()
832 device_printf(adapter->dev, "wait error: %d\n", error); in sume_module_reg_read()
848 device_printf(adapter->dev, "rtag error: 0x%08x 0x%08x\n", in sume_module_reg_read()
857 SUME_UNLOCK(adapter); in sume_module_reg_read()
949 struct sume_adapter *adapter = nf_priv->adapter; in sume_update_link_status() local
964 if (adapter->sume_debug) in sume_update_link_status()
965 device_printf(adapter->dev, "port %d link state " in sume_update_link_status()
970 if (adapter->sume_debug) in sume_update_link_status()
971 device_printf(adapter->dev, "port %d link state " in sume_update_link_status()
1010 struct sume_adapter *adapter = nf_priv->adapter; in sume_if_start_locked() local
1011 struct riffa_chnl_dir *send = adapter->send[SUME_RIFFA_CHANNEL_DATA]; in sume_if_start_locked()
1016 KASSERT(mtx_owned(&adapter->lock), ("SUME lock not owned")); in sume_if_start_locked()
1028 if (adapter->sume_debug) in sume_if_start_locked()
1029 device_printf(adapter->dev, "sending %d bytes to %s%d\n", plen, in sume_if_start_locked()
1040 adapter->sg_buf_size) { in sume_if_start_locked()
1041 device_printf(adapter->dev, "packet too big for bounce buffer " in sume_if_start_locked()
1067 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_DATA, in sume_if_start_locked()
1069 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_DATA, in sume_if_start_locked()
1073 sume_fill_bb_desc(adapter, send, SUME_RIFFA_LEN(send->len)); in sume_if_start_locked()
1079 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_DATA, in sume_if_start_locked()
1082 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_DATA, in sume_if_start_locked()
1085 write_reg(adapter, RIFFA_CHNL_REG(SUME_RIFFA_CHANNEL_DATA, in sume_if_start_locked()
1097 adapter->last_ifc = nf_priv->port; in sume_if_start_locked()
1100 adapter->wd_counter = 0; in sume_if_start_locked()
1109 struct sume_adapter *adapter = nf_priv->adapter; in sume_if_start() local
1111 if (!adapter->running || !(if_getflags(ifp) & IFF_UP)) in sume_if_start()
1114 SUME_LOCK(adapter); in sume_if_start()
1115 if (adapter->send[SUME_RIFFA_CHANNEL_DATA]->state == in sume_if_start()
1118 SUME_UNLOCK(adapter); in sume_if_start()
1126 check_tx_queues(struct sume_adapter *adapter) in check_tx_queues() argument
1130 KASSERT(mtx_owned(&adapter->lock), ("SUME lock not owned")); in check_tx_queues()
1132 last_ifc = adapter->last_ifc; in check_tx_queues()
1136 if_t ifp = adapter->ifp[i % SUME_NPORTS]; in check_tx_queues()
1147 sume_ifp_alloc(struct sume_adapter *adapter, uint32_t port) in sume_ifp_alloc() argument
1154 adapter->ifp[port] = ifp; in sume_ifp_alloc()
1157 nf_priv->adapter = adapter; in sume_ifp_alloc()
1193 sume_probe_riffa_buffer(const struct sume_adapter *adapter, in sume_probe_riffa_buffer() argument
1199 device_t dev = adapter->dev; in sume_probe_riffa_buffer()
1216 adapter->sg_buf_size, in sume_probe_riffa_buffer()
1218 adapter->sg_buf_size, in sume_probe_riffa_buffer()
1239 bzero(rp[ch]->buf_addr, adapter->sg_buf_size); in sume_probe_riffa_buffer()
1242 rp[ch]->buf_addr, adapter->sg_buf_size, callback_dma, in sume_probe_riffa_buffer()
1260 sume_probe_riffa_buffers(struct sume_adapter *adapter) in sume_probe_riffa_buffers() argument
1264 error = sume_probe_riffa_buffer(adapter, &adapter->recv, "recv"); in sume_probe_riffa_buffers()
1268 error = sume_probe_riffa_buffer(adapter, &adapter->send, "send"); in sume_probe_riffa_buffers()
1274 sume_sysctl_init(struct sume_adapter *adapter) in sume_sysctl_init() argument
1276 device_t dev = adapter->dev; in sume_sysctl_init()
1291 &adapter->sume_debug, 0, "debug int leaf"); in sume_sysctl_init()
1295 CTLFLAG_RD, &adapter->packets_err, 0, "rx errors"); in sume_sysctl_init()
1297 CTLFLAG_RD, &adapter->bytes_err, 0, "rx error bytes"); in sume_sysctl_init()
1300 if_t ifp = adapter->ifp[i]; in sume_sysctl_init()
1360 struct sume_adapter *adapter = arg; in sume_local_timer() local
1362 if (!adapter->running) in sume_local_timer()
1365 taskqueue_enqueue(adapter->tq, &adapter->stat_task); in sume_local_timer()
1367 SUME_LOCK(adapter); in sume_local_timer()
1368 if (adapter->send[SUME_RIFFA_CHANNEL_DATA]->state != in sume_local_timer()
1369 SUME_RIFFA_CHAN_STATE_IDLE && ++adapter->wd_counter >= 3) { in sume_local_timer()
1371 device_printf(adapter->dev, "TX stuck, resetting adapter.\n"); in sume_local_timer()
1372 read_reg(adapter, RIFFA_INFO_REG_OFF); in sume_local_timer()
1374 adapter->send[SUME_RIFFA_CHANNEL_DATA]->state = in sume_local_timer()
1376 adapter->wd_counter = 0; in sume_local_timer()
1378 check_tx_queues(adapter); in sume_local_timer()
1380 SUME_UNLOCK(adapter); in sume_local_timer()
1382 callout_reset(&adapter->timer, 1 * hz, sume_local_timer, adapter); in sume_local_timer()
1388 struct sume_adapter *adapter = context; in sume_get_stats() local
1392 if_t ifp = adapter->ifp[i]; in sume_get_stats()
1420 struct sume_adapter *adapter = device_get_softc(dev); in sume_attach() local
1421 adapter->dev = dev; in sume_attach()
1424 mtx_init(&adapter->lock, "Global lock", NULL, MTX_DEF); in sume_attach()
1426 adapter->running = 0; in sume_attach()
1429 error = sume_probe_riffa_pci(adapter); in sume_attach()
1433 error = sume_probe_riffa_buffers(adapter); in sume_attach()
1439 sume_ifp_alloc(adapter, i); in sume_attach()
1442 sume_sysctl_init(adapter); in sume_attach()
1445 read_reg(adapter, RIFFA_INFO_REG_OFF); in sume_attach()
1448 adapter->running = 1; in sume_attach()
1450 callout_init(&adapter->timer, 1); in sume_attach()
1451 TASK_INIT(&adapter->stat_task, 0, sume_get_stats, adapter); in sume_attach()
1453 adapter->tq = taskqueue_create("sume_stats", M_NOWAIT, in sume_attach()
1454 taskqueue_thread_enqueue, &adapter->tq); in sume_attach()
1455 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s stattaskq", in sume_attach()
1456 device_get_nameunit(adapter->dev)); in sume_attach()
1458 callout_reset(&adapter->timer, 1 * hz, sume_local_timer, adapter); in sume_attach()
1469 sume_remove_riffa_buffer(const struct sume_adapter *adapter, in sume_remove_riffa_buffer() argument
1489 sume_remove_riffa_buffers(struct sume_adapter *adapter) in sume_remove_riffa_buffers() argument
1491 if (adapter->send != NULL) { in sume_remove_riffa_buffers()
1492 sume_remove_riffa_buffer(adapter, adapter->send); in sume_remove_riffa_buffers()
1493 free(adapter->send, M_SUME); in sume_remove_riffa_buffers()
1494 adapter->send = NULL; in sume_remove_riffa_buffers()
1496 if (adapter->recv != NULL) { in sume_remove_riffa_buffers()
1497 sume_remove_riffa_buffer(adapter, adapter->recv); in sume_remove_riffa_buffers()
1498 free(adapter->recv, M_SUME); in sume_remove_riffa_buffers()
1499 adapter->recv = NULL; in sume_remove_riffa_buffers()
1506 struct sume_adapter *adapter = device_get_softc(dev); in sume_detach() local
1510 KASSERT(mtx_initialized(&adapter->lock), ("SUME mutex not " in sume_detach()
1512 adapter->running = 0; in sume_detach()
1515 callout_drain(&adapter->timer); in sume_detach()
1517 if (adapter->tq) { in sume_detach()
1518 taskqueue_drain(adapter->tq, &adapter->stat_task); in sume_detach()
1519 taskqueue_free(adapter->tq); in sume_detach()
1523 if_t ifp = adapter->ifp[i]; in sume_detach()
1542 sume_remove_riffa_buffers(adapter); in sume_detach()
1544 if (adapter->irq.tag) in sume_detach()
1545 bus_teardown_intr(dev, adapter->irq.res, adapter->irq.tag); in sume_detach()
1546 if (adapter->irq.res) in sume_detach()
1547 bus_release_resource(dev, SYS_RES_IRQ, adapter->irq.rid, in sume_detach()
1548 adapter->irq.res); in sume_detach()
1552 if (adapter->bar0_addr) in sume_detach()
1553 bus_release_resource(dev, SYS_RES_MEMORY, adapter->rid, in sume_detach()
1554 adapter->bar0_addr); in sume_detach()
1556 mtx_destroy(&adapter->lock); in sume_detach()