Lines Matching defs:adapter

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