Lines Matching refs:adapter

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()
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
1155 device_printf(adapter->dev, "cannot allocate ifnet\n"); in sume_ifp_alloc()
1159 adapter->ifp[port] = ifp; in sume_ifp_alloc()
1162 nf_priv->adapter = adapter; in sume_ifp_alloc()
1200 sume_probe_riffa_buffer(const struct sume_adapter *adapter, in sume_probe_riffa_buffer() argument
1206 device_t dev = adapter->dev; in sume_probe_riffa_buffer()
1233 adapter->sg_buf_size, in sume_probe_riffa_buffer()
1235 adapter->sg_buf_size, in sume_probe_riffa_buffer()
1256 bzero(rp[ch]->buf_addr, adapter->sg_buf_size); in sume_probe_riffa_buffer()
1259 rp[ch]->buf_addr, adapter->sg_buf_size, callback_dma, in sume_probe_riffa_buffer()
1277 sume_probe_riffa_buffers(struct sume_adapter *adapter) in sume_probe_riffa_buffers() argument
1281 error = sume_probe_riffa_buffer(adapter, &adapter->recv, "recv"); in sume_probe_riffa_buffers()
1285 error = sume_probe_riffa_buffer(adapter, &adapter->send, "send"); in sume_probe_riffa_buffers()
1291 sume_sysctl_init(struct sume_adapter *adapter) in sume_sysctl_init() argument
1293 device_t dev = adapter->dev; in sume_sysctl_init()
1308 &adapter->sume_debug, 0, "debug int leaf"); in sume_sysctl_init()
1312 CTLFLAG_RD, &adapter->packets_err, 0, "rx errors"); in sume_sysctl_init()
1314 CTLFLAG_RD, &adapter->bytes_err, 0, "rx error bytes"); in sume_sysctl_init()
1317 if_t ifp = adapter->ifp[i]; in sume_sysctl_init()
1377 struct sume_adapter *adapter = arg; in sume_local_timer() local
1379 if (!adapter->running) in sume_local_timer()
1382 taskqueue_enqueue(adapter->tq, &adapter->stat_task); in sume_local_timer()
1384 SUME_LOCK(adapter); in sume_local_timer()
1385 if (adapter->send[SUME_RIFFA_CHANNEL_DATA]->state != in sume_local_timer()
1386 SUME_RIFFA_CHAN_STATE_IDLE && ++adapter->wd_counter >= 3) { in sume_local_timer()
1388 device_printf(adapter->dev, "TX stuck, resetting adapter.\n"); in sume_local_timer()
1389 read_reg(adapter, RIFFA_INFO_REG_OFF); in sume_local_timer()
1391 adapter->send[SUME_RIFFA_CHANNEL_DATA]->state = in sume_local_timer()
1393 adapter->wd_counter = 0; in sume_local_timer()
1395 check_tx_queues(adapter); in sume_local_timer()
1397 SUME_UNLOCK(adapter); in sume_local_timer()
1399 callout_reset(&adapter->timer, 1 * hz, sume_local_timer, adapter); in sume_local_timer()
1405 struct sume_adapter *adapter = context; in sume_get_stats() local
1409 if_t ifp = adapter->ifp[i]; in sume_get_stats()
1437 struct sume_adapter *adapter = device_get_softc(dev); in sume_attach() local
1438 adapter->dev = dev; in sume_attach()
1441 mtx_init(&adapter->lock, "Global lock", NULL, MTX_DEF); in sume_attach()
1443 adapter->running = 0; in sume_attach()
1446 error = sume_probe_riffa_pci(adapter); in sume_attach()
1450 error = sume_probe_riffa_buffers(adapter); in sume_attach()
1456 error = sume_ifp_alloc(adapter, i); in sume_attach()
1462 sume_sysctl_init(adapter); in sume_attach()
1465 read_reg(adapter, RIFFA_INFO_REG_OFF); in sume_attach()
1468 adapter->running = 1; in sume_attach()
1470 callout_init(&adapter->timer, 1); in sume_attach()
1471 TASK_INIT(&adapter->stat_task, 0, sume_get_stats, adapter); in sume_attach()
1473 adapter->tq = taskqueue_create("sume_stats", M_NOWAIT, in sume_attach()
1474 taskqueue_thread_enqueue, &adapter->tq); in sume_attach()
1475 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s stattaskq", in sume_attach()
1476 device_get_nameunit(adapter->dev)); in sume_attach()
1478 callout_reset(&adapter->timer, 1 * hz, sume_local_timer, adapter); in sume_attach()
1489 sume_remove_riffa_buffer(const struct sume_adapter *adapter, in sume_remove_riffa_buffer() argument
1509 sume_remove_riffa_buffers(struct sume_adapter *adapter) in sume_remove_riffa_buffers() argument
1511 if (adapter->send != NULL) { in sume_remove_riffa_buffers()
1512 sume_remove_riffa_buffer(adapter, adapter->send); in sume_remove_riffa_buffers()
1513 free(adapter->send, M_SUME); in sume_remove_riffa_buffers()
1514 adapter->send = NULL; in sume_remove_riffa_buffers()
1516 if (adapter->recv != NULL) { in sume_remove_riffa_buffers()
1517 sume_remove_riffa_buffer(adapter, adapter->recv); in sume_remove_riffa_buffers()
1518 free(adapter->recv, M_SUME); in sume_remove_riffa_buffers()
1519 adapter->recv = NULL; in sume_remove_riffa_buffers()
1526 struct sume_adapter *adapter = device_get_softc(dev); in sume_detach() local
1530 KASSERT(mtx_initialized(&adapter->lock), ("SUME mutex not " in sume_detach()
1532 adapter->running = 0; in sume_detach()
1535 callout_drain(&adapter->timer); in sume_detach()
1537 if (adapter->tq) { in sume_detach()
1538 taskqueue_drain(adapter->tq, &adapter->stat_task); in sume_detach()
1539 taskqueue_free(adapter->tq); in sume_detach()
1543 if_t ifp = adapter->ifp[i]; in sume_detach()
1562 sume_remove_riffa_buffers(adapter); in sume_detach()
1564 if (adapter->irq.tag) in sume_detach()
1565 bus_teardown_intr(dev, adapter->irq.res, adapter->irq.tag); in sume_detach()
1566 if (adapter->irq.res) in sume_detach()
1567 bus_release_resource(dev, SYS_RES_IRQ, adapter->irq.rid, in sume_detach()
1568 adapter->irq.res); in sume_detach()
1572 if (adapter->bar0_addr) in sume_detach()
1573 bus_release_resource(dev, SYS_RES_MEMORY, adapter->rid, in sume_detach()
1574 adapter->bar0_addr); in sume_detach()
1576 mtx_destroy(&adapter->lock); in sume_detach()