Lines Matching refs:adapter

97 extern int create_rxtx_rings(unm_adapter *adapter);
98 extern void destroy_rxtx_rings(unm_adapter *adapter);
100 static void unm_post_rx_buffers_nodb(struct unm_adapter_s *adapter,
102 static mblk_t *unm_process_rcv(unm_adapter *adapter, statusDesc_t *desc);
104 static int unm_process_cmd_ring(struct unm_adapter_s *adapter);
106 static int unm_nic_do_ioctl(unm_adapter *adapter, queue_t *q, mblk_t *mp);
107 static void unm_nic_ioctl(struct unm_adapter_s *adapter, int cmd, queue_t *q,
125 unm_pci_alloc_consistent(unm_adapter *adapter, in unm_pci_alloc_consistent() argument
139 err = ddi_dma_alloc_handle(adapter->dip, in unm_pci_alloc_consistent()
140 &adapter->gc_dma_attr_desc, in unm_pci_alloc_consistent()
149 size, &adapter->gc_attr_desc, in unm_pci_alloc_consistent()
216 unm_nic_disable_int(unm_adapter *adapter) in unm_nic_disable_int() argument
220 adapter->unm_nic_hw_write_wx(adapter, adapter->interrupt_crb, in unm_nic_disable_int()
225 unm_nic_clear_int(unm_adapter *adapter) in unm_nic_clear_int() argument
229 UNM_READ_LOCK(&adapter->adapter_lock); in unm_nic_clear_int()
232 if (!UNM_IS_MSI_FAMILY(adapter)) { in unm_nic_clear_int()
235 adapter->unm_nic_pci_read_immediate(adapter, ISR_INT_VECTOR, in unm_nic_clear_int()
238 if (!(status & adapter->legacy_intr.int_vec_bit)) { in unm_nic_clear_int()
239 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_clear_int()
243 if (adapter->ahw.revision_id >= NX_P3_B1) { in unm_nic_clear_int()
244 adapter->unm_nic_pci_read_immediate(adapter, in unm_nic_clear_int()
247 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_clear_int()
250 } else if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in unm_nic_clear_int()
251 our_int = adapter->unm_nic_pci_read_normalize(adapter, in unm_nic_clear_int()
255 if ((our_int & (0x80 << adapter->portnum)) == 0) { in unm_nic_clear_int()
258 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_clear_int()
262 temp = our_int & ~((u32)(0x80 << adapter->portnum)); in unm_nic_clear_int()
263 adapter->unm_nic_pci_write_normalize(adapter, in unm_nic_clear_int()
267 if (adapter->fw_major < 4) in unm_nic_clear_int()
268 unm_nic_disable_int(adapter); in unm_nic_clear_int()
272 adapter->unm_nic_pci_write_immediate(adapter, in unm_nic_clear_int()
273 adapter->legacy_intr.tgt_status_reg, &temp); in unm_nic_clear_int()
275 adapter->unm_nic_pci_read_immediate(adapter, ISR_INT_VECTOR, in unm_nic_clear_int()
282 adapter->unm_nic_pci_read_immediate(adapter, ISR_INT_VECTOR, in unm_nic_clear_int()
284 } else if (adapter->flags & UNM_NIC_MSI_ENABLED) { in unm_nic_clear_int()
287 adapter->unm_nic_pci_write_immediate(adapter, in unm_nic_clear_int()
288 msi_tgt_status[adapter->ahw.pci_func], &temp); in unm_nic_clear_int()
291 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_clear_int()
297 unm_nic_enable_int(unm_adapter *adapter) in unm_nic_enable_int() argument
301 adapter->unm_nic_hw_write_wx(adapter, adapter->interrupt_crb, in unm_nic_enable_int()
304 if (!UNM_IS_MSI_FAMILY(adapter)) { in unm_nic_enable_int()
307 adapter->unm_nic_pci_write_immediate(adapter, in unm_nic_enable_int()
308 adapter->legacy_intr.tgt_mask_reg, &mask); in unm_nic_enable_int()
313 unm_free_hw_resources(unm_adapter *adapter) in unm_free_hw_resources() argument
319 if (adapter->context_alloced == 1) { in unm_free_hw_resources()
320 netxen_destroy_rxtx(adapter); in unm_free_hw_resources()
321 adapter->context_alloced = 0; in unm_free_hw_resources()
324 if (adapter->ctxDesc != NULL) { in unm_free_hw_resources()
325 unm_pci_free_consistent(&adapter->ctxDesc_dma_handle, in unm_free_hw_resources()
326 &adapter->ctxDesc_acc_handle); in unm_free_hw_resources()
327 adapter->ctxDesc = NULL; in unm_free_hw_resources()
330 if (adapter->ahw.cmdDescHead != NULL) { in unm_free_hw_resources()
331 unm_pci_free_consistent(&adapter->ahw.cmd_desc_dma_handle, in unm_free_hw_resources()
332 &adapter->ahw.cmd_desc_acc_handle); in unm_free_hw_resources()
333 adapter->ahw.cmdDesc_physAddr = 0; in unm_free_hw_resources()
334 adapter->ahw.cmdDescHead = NULL; in unm_free_hw_resources()
338 recv_ctx = &adapter->recv_ctx[ctx]; in unm_free_hw_resources()
339 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in unm_free_hw_resources()
362 cleanup_adapter(struct unm_adapter_s *adapter) in cleanup_adapter() argument
364 ddi_regs_map_free(&(adapter->regs_handle)); in cleanup_adapter()
365 ddi_regs_map_free(&(adapter->db_handle)); in cleanup_adapter()
366 kmem_free(adapter, sizeof (unm_adapter)); in cleanup_adapter()
370 unm_nic_remove(unm_adapter *adapter) in unm_nic_remove() argument
372 mac_link_update(adapter->mach, LINK_STATE_DOWN); in unm_nic_remove()
373 unm_nic_stop_port(adapter); in unm_nic_remove()
375 if (adapter->interrupt_crb) { in unm_nic_remove()
376 UNM_READ_LOCK(&adapter->adapter_lock); in unm_nic_remove()
377 unm_nic_disable_int(adapter); in unm_nic_remove()
378 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_remove()
380 (void) untimeout(adapter->watchdog_timer); in unm_nic_remove()
382 unm_free_hw_resources(adapter); in unm_nic_remove()
384 if (adapter->is_up == UNM_ADAPTER_UP_MAGIC) in unm_nic_remove()
385 destroy_rxtx_rings(adapter); in unm_nic_remove()
387 if (adapter->portnum == 0) in unm_nic_remove()
388 unm_free_dummy_dma(adapter); in unm_nic_remove()
390 unm_destroy_intr(adapter); in unm_nic_remove()
392 ddi_set_driver_private(adapter->dip, NULL); in unm_nic_remove()
393 cleanup_adapter(adapter); in unm_nic_remove()
397 init_firmware(unm_adapter *adapter) in init_firmware() argument
402 UNM_READ_LOCK(&adapter->adapter_lock); in init_firmware()
403 state = adapter->unm_nic_pci_read_normalize(adapter, CRB_CMDPEG_STATE); in init_firmware()
404 UNM_READ_UNLOCK(&adapter->adapter_lock); in init_firmware()
412 UNM_READ_LOCK(&adapter->adapter_lock); in init_firmware()
413 state = adapter->unm_nic_pci_read_normalize(adapter, in init_firmware()
415 UNM_READ_UNLOCK(&adapter->adapter_lock); in init_firmware()
421 adapter->name, adapter->instance, state); in init_firmware()
426 UNM_READ_LOCK(&adapter->adapter_lock); in init_firmware()
428 adapter->unm_nic_hw_write_wx(adapter, CRB_NIC_CAPABILITIES_HOST, in init_firmware()
431 adapter->unm_nic_hw_write_wx(adapter, CRB_NIC_MSI_MODE_HOST, in init_firmware()
434 adapter->unm_nic_hw_write_wx(adapter, CRB_MPORT_MODE, &tempout, 4); in init_firmware()
436 adapter->unm_nic_hw_write_wx(adapter, CRB_CMDPEG_STATE, &tempout, 4); in init_firmware()
437 UNM_READ_UNLOCK(&adapter->adapter_lock); in init_firmware()
448 receive_peg_ready(struct unm_adapter_s *adapter) in receive_peg_ready() argument
454 UNM_READ_LOCK(&adapter->adapter_lock); in receive_peg_ready()
455 state = adapter->unm_nic_pci_read_normalize(adapter, CRB_RCVPEG_STATE); in receive_peg_ready()
456 UNM_READ_UNLOCK(&adapter->adapter_lock); in receive_peg_ready()
462 UNM_READ_LOCK(&adapter->adapter_lock); in receive_peg_ready()
463 state = adapter->unm_nic_pci_read_normalize(adapter, in receive_peg_ready()
465 UNM_READ_UNLOCK(&adapter->adapter_lock); in receive_peg_ready()
484 unm_nic_hw_resources(unm_adapter *adapter) in unm_nic_hw_resources() argument
486 hardware_context *hw = &adapter->ahw; in unm_nic_hw_resources()
495 if (err = receive_peg_ready(adapter)) in unm_nic_hw_resources()
500 err = unm_pci_alloc_consistent(adapter, in unm_nic_hw_resources()
502 &adapter->ctxDesc_dma_handle, in unm_nic_hw_resources()
503 &adapter->ctxDesc_acc_handle); in unm_nic_hw_resources()
509 adapter->ctxDesc_physAddr = cookie.dmac_laddress; in unm_nic_hw_resources()
513 adapter->ctxDesc = (RingContext *) addr; in unm_nic_hw_resources()
514 adapter->ctxDesc->CtxId = adapter->portnum; in unm_nic_hw_resources()
515 adapter->ctxDesc->CMD_CONSUMER_OFFSET = in unm_nic_hw_resources()
516 adapter->ctxDesc_physAddr + sizeof (RingContext); in unm_nic_hw_resources()
517 adapter->cmdConsumer = in unm_nic_hw_resources()
520 ASSERT(!((unsigned long)adapter->ctxDesc_physAddr & 0x3f)); in unm_nic_hw_resources()
525 size = (sizeof (cmdDescType0_t) * adapter->MaxTxDescCount); in unm_nic_hw_resources()
526 err = unm_pci_alloc_consistent(adapter, in unm_nic_hw_resources()
539 recv_ctx = &adapter->recv_ctx[ctx]; in unm_nic_hw_resources()
541 size = (sizeof (statusDesc_t)* adapter->MaxRxDescCount); in unm_nic_hw_resources()
542 err = unm_pci_alloc_consistent(adapter, in unm_nic_hw_resources()
558 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in unm_nic_hw_resources()
561 size = (sizeof (rcvDesc_t) * adapter->MaxRxDescCount); in unm_nic_hw_resources()
562 err = unm_pci_alloc_consistent(adapter, in unm_nic_hw_resources()
579 if (err = netxen_create_rxtx(adapter)) in unm_nic_hw_resources()
581 adapter->context_alloced = 1; in unm_nic_hw_resources()
588 unm_free_hw_resources(adapter); in unm_nic_hw_resources()
615 unm_nic_update_cmd_producer(struct unm_adapter_s *adapter, in unm_nic_update_cmd_producer() argument
620 if (adapter->crb_addr_cmd_producer) { in unm_nic_update_cmd_producer()
621 UNM_READ_LOCK(&adapter->adapter_lock); in unm_nic_update_cmd_producer()
622 adapter->unm_nic_hw_write_wx(adapter, in unm_nic_update_cmd_producer()
623 adapter->crb_addr_cmd_producer, &data, 4); in unm_nic_update_cmd_producer()
624 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_update_cmd_producer()
629 unm_nic_update_cmd_consumer(struct unm_adapter_s *adapter, in unm_nic_update_cmd_consumer() argument
634 if (adapter->crb_addr_cmd_consumer) in unm_nic_update_cmd_consumer()
635 adapter->unm_nic_hw_write_wx(adapter, in unm_nic_update_cmd_consumer()
636 adapter->crb_addr_cmd_consumer, &data, 4); in unm_nic_update_cmd_consumer()
764 unm_send_copy(struct unm_adapter_s *adapter, mblk_t *mp, pktinfo_t *pktinfo) in unm_send_copy() argument
776 hw = &adapter->ahw; in unm_send_copy()
777 MaxTxDescCount = adapter->MaxTxDescCount; in unm_send_copy()
779 UNM_SPIN_LOCK(&adapter->tx_lock); in unm_send_copy()
782 if (find_diff_among(adapter->cmdProducer, adapter->lastCmdConsumer, in unm_send_copy()
784 adapter->stats.outofcmddesc++; in unm_send_copy()
785 adapter->resched_needed = 1; in unm_send_copy()
787 UNM_SPIN_UNLOCK(&adapter->tx_lock); in unm_send_copy()
790 adapter->freecmds -= no_of_desc; in unm_send_copy()
792 producer = adapter->cmdProducer; in unm_send_copy()
794 adapter->cmdProducer = get_index_range(adapter->cmdProducer, in unm_send_copy()
799 pbuf = &adapter->cmd_buf_arr[producer]; in unm_send_copy()
826 hwdesc->u3.s1.port = adapter->portnum; in unm_send_copy()
827 hwdesc->u3.s1.ctx_id = adapter->portnum; in unm_send_copy()
843 hw->cmdProducer = adapter->cmdProducer; in unm_send_copy()
844 unm_nic_update_cmd_producer(adapter, adapter->cmdProducer); in unm_send_copy()
846 adapter->stats.txbytes += pktinfo->total_len; in unm_send_copy()
847 adapter->stats.xmitfinished++; in unm_send_copy()
848 adapter->stats.txcopyed++; in unm_send_copy()
849 UNM_SPIN_UNLOCK(&adapter->tx_lock); in unm_send_copy()
857 unm_return_dma_handle(unm_adapter *adapter, unm_dmah_node_t *head, in unm_return_dma_handle() argument
861 tail->next = adapter->dmahdl_pool; in unm_return_dma_handle()
862 adapter->dmahdl_pool = head; in unm_return_dma_handle()
863 adapter->freehdls += num; in unm_return_dma_handle()
867 unm_reserve_dma_handle(unm_adapter* adapter) in unm_reserve_dma_handle() argument
871 dmah = adapter->dmahdl_pool; in unm_reserve_dma_handle()
873 adapter->dmahdl_pool = dmah->next; in unm_reserve_dma_handle()
875 adapter->freehdls--; in unm_reserve_dma_handle()
883 unm_send_mapped(struct unm_adapter_s *adapter, mblk_t *mp, pktinfo_t *pktinfo) in unm_send_mapped() argument
902 MaxTxDescCount = adapter->MaxTxDescCount; in unm_send_mapped()
904 UNM_SPIN_LOCK(&adapter->tx_lock); in unm_send_mapped()
912 dmah = unm_reserve_dma_handle(adapter); in unm_send_mapped()
914 adapter->stats.outoftxdmahdl++; in unm_send_mapped()
971 hw = &adapter->ahw; in unm_send_mapped()
975 if (find_diff_among(adapter->cmdProducer, adapter->lastCmdConsumer, in unm_send_mapped()
981 if (pktinfo->total_len > adapter->maxmtu) { in unm_send_mapped()
982 adapter->stats.outofcmddesc++; in unm_send_mapped()
983 adapter->resched_needed = 1; in unm_send_mapped()
988 adapter->freecmds -= no_of_desc; in unm_send_mapped()
991 producer = adapter->cmdProducer; in unm_send_mapped()
995 pbuf = &adapter->cmd_buf_arr[producer]; in unm_send_mapped()
1003 hwdesc->u3.s1.port = adapter->portnum; in unm_send_mapped()
1006 hwdesc->u3.s1.ctx_id = adapter->portnum; in unm_send_mapped()
1043 adapter->cmdProducer = get_next_index(producer, MaxTxDescCount); in unm_send_mapped()
1044 hw->cmdProducer = adapter->cmdProducer; in unm_send_mapped()
1045 unm_nic_update_cmd_producer(adapter, adapter->cmdProducer); in unm_send_mapped()
1047 adapter->stats.txbytes += pktinfo->total_len; in unm_send_mapped()
1048 adapter->stats.xmitfinished++; in unm_send_mapped()
1049 adapter->stats.txmapped++; in unm_send_mapped()
1050 UNM_SPIN_UNLOCK(&adapter->tx_lock); in unm_send_mapped()
1076 unm_return_dma_handle(adapter, head, tail, hdl_reserved); in unm_send_mapped()
1078 UNM_SPIN_UNLOCK(&adapter->tx_lock); in unm_send_mapped()
1083 unm_nic_xmit_frame(unm_adapter *adapter, mblk_t *mp) in unm_nic_xmit_frame() argument
1088 adapter->stats.xmitcalled++; in unm_nic_xmit_frame()
1092 if (pktinfo.total_len <= adapter->tx_bcopy_threshold || in unm_nic_xmit_frame()
1097 status = unm_send_mapped(adapter, mp, &pktinfo); in unm_nic_xmit_frame()
1100 if (pktinfo.total_len <= adapter->maxmtu) in unm_nic_xmit_frame()
1101 return (unm_send_copy(adapter, mp, &pktinfo)); in unm_nic_xmit_frame()
1105 adapter->stats.txdropped++; in unm_nic_xmit_frame()
1113 unm_nic_check_temp(struct unm_adapter_s *adapter) in unm_nic_check_temp() argument
1118 if ((adapter->ahw.revision_id == NX_P3_A2) || in unm_nic_check_temp()
1119 (adapter->ahw.revision_id == NX_P3_A0)) in unm_nic_check_temp()
1122 temp = adapter->unm_nic_pci_read_normalize(adapter, CRB_TEMP_STATE); in unm_nic_check_temp()
1133 if (adapter->temp == NX_TEMP_NORMAL) { in unm_nic_check_temp()
1139 if (adapter->temp == NX_TEMP_WARN) { in unm_nic_check_temp()
1146 adapter->temp = temp_state; in unm_nic_check_temp()
1153 unm_adapter *adapter = v; in unm_watchdog() local
1155 if ((adapter->portnum == 0) && unm_nic_check_temp(adapter)) { in unm_watchdog()
1163 unm_nic_handle_phy_intr(adapter); in unm_watchdog()
1168 adapter->watchdog_timer = timeout(&unm_watchdog, in unm_watchdog()
1169 adapter, 2 * drv_usectohz(1000000)); in unm_watchdog()
1173 static void unm_nic_clear_stats(unm_adapter *adapter) in unm_nic_clear_stats() argument
1175 (void) memset(&adapter->stats, 0, sizeof (adapter->stats)); in unm_nic_clear_stats()
1179 unm_nic_poll(unm_adapter *adapter) in unm_nic_poll() argument
1183 adapter->stats.polled++; in unm_nic_poll()
1186 tx_complete = unm_process_cmd_ring(adapter); in unm_nic_poll()
1187 work_done = unm_process_rcv_ring(adapter, NX_RX_MAXBUFS); in unm_nic_poll()
1191 UNM_READ_LOCK(&adapter->adapter_lock); in unm_nic_poll()
1192 unm_nic_enable_int(adapter); in unm_nic_poll()
1193 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_poll()
1200 unm_adapter *adapter = (unm_adapter *)(uintptr_t)data; in unm_intr() local
1202 if (unm_nic_clear_int(adapter)) in unm_intr()
1205 unm_nic_poll(adapter); in unm_intr()
1228 unm_process_rcv(unm_adapter *adapter, statusDesc_t *desc) in unm_process_rcv() argument
1230 unm_recv_context_t *recv_ctx = &(adapter->recv_ctx[0]); in unm_process_rcv()
1258 pkt_length + poff + (adapter->ahw.cut_through ? 0 : in unm_process_rcv()
1265 docopy = (pkt_length <= adapter->rx_bcopy_threshold) ? 1 : 0; in unm_process_rcv()
1274 adapter->stats.rxbufshort++; in unm_process_rcv()
1279 adapter->stats.allocbfailed++; in unm_process_rcv()
1286 adapter->stats.rxcopyed++; in unm_process_rcv()
1294 adapter->stats.desballocfailed++; in unm_process_rcv()
1300 adapter->stats.rxmapped++; in unm_process_rcv()
1306 adapter->stats.csummed++; in unm_process_rcv()
1314 adapter->stats.no_rcv++; in unm_process_rcv()
1315 adapter->stats.rxbytes += pkt_length; in unm_process_rcv()
1316 adapter->stats.uphappy++; in unm_process_rcv()
1327 unm_process_rcv_ring(unm_adapter *adapter, int max) in unm_process_rcv_ring() argument
1329 unm_recv_context_t *recv_ctx = &(adapter->recv_ctx[0]); in unm_process_rcv_ring()
1339 adapter->MaxRxDescCount, sizeof (statusDesc_t), in unm_process_rcv_ring()
1347 mp = unm_process_rcv(adapter, desc); in unm_process_rcv_ring()
1350 consumer = (consumer + 1) % adapter->MaxRxDescCount; in unm_process_rcv_ring()
1353 mac_rx(adapter->mach, NULL, mp); in unm_process_rcv_ring()
1356 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in unm_process_rcv_ring()
1358 unm_post_rx_buffers_nodb(adapter, ring); in unm_process_rcv_ring()
1363 count, adapter->MaxRxDescCount, sizeof (statusDesc_t), in unm_process_rcv_ring()
1369 UNM_READ_LOCK(&adapter->adapter_lock); in unm_process_rcv_ring()
1370 adapter->unm_nic_hw_write_wx(adapter, in unm_process_rcv_ring()
1372 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_process_rcv_ring()
1380 unm_process_cmd_ring(struct unm_adapter_s *adapter) in unm_process_cmd_ring() argument
1390 (void) ddi_dma_sync(adapter->ctxDesc_dma_handle, sizeof (RingContext), in unm_process_cmd_ring()
1393 last_consumer = adapter->lastCmdConsumer; in unm_process_cmd_ring()
1394 consumer = *(adapter->cmdConsumer); in unm_process_cmd_ring()
1397 buffer = &adapter->cmd_buf_arr[last_consumer]; in unm_process_cmd_ring()
1424 adapter->MaxTxDescCount); in unm_process_cmd_ring()
1432 UNM_SPIN_LOCK(&adapter->tx_lock); in unm_process_cmd_ring()
1433 adapter->lastCmdConsumer = last_consumer; in unm_process_cmd_ring()
1434 adapter->freecmds += count; in unm_process_cmd_ring()
1437 doresched = adapter->resched_needed; in unm_process_cmd_ring()
1439 adapter->resched_needed = 0; in unm_process_cmd_ring()
1442 unm_return_dma_handle(adapter, head, tail, free_hdls); in unm_process_cmd_ring()
1444 UNM_SPIN_UNLOCK(&adapter->tx_lock); in unm_process_cmd_ring()
1447 mac_tx_update(adapter->mach); in unm_process_cmd_ring()
1450 (void) ddi_dma_sync(adapter->ctxDesc_dma_handle, sizeof (RingContext), in unm_process_cmd_ring()
1453 consumer = *(adapter->cmdConsumer); in unm_process_cmd_ring()
1454 done = (adapter->lastCmdConsumer == consumer); in unm_process_cmd_ring()
1499 post_rx_doorbell(struct unm_adapter_s *adapter, uint32_t ringid, int count) in post_rx_doorbell() argument
1512 msg.CtxId = adapter->portnum; in post_rx_doorbell()
1515 (void *)(DB_NORMALIZE(adapter, UNM_RCV_PRODUCER_OFFSET))); in post_rx_doorbell()
1519 unm_post_rx_buffers(struct unm_adapter_s *adapter, uint32_t ringid) in unm_post_rx_buffers() argument
1521 unm_recv_context_t *recv_ctx = &(adapter->recv_ctx[0]); in unm_post_rx_buffers()
1551 UNM_READ_LOCK(&adapter->adapter_lock); in unm_post_rx_buffers()
1552 adapter->unm_nic_hw_write_wx(adapter, rcv_desc->host_rx_producer, in unm_post_rx_buffers()
1554 if (adapter->fw_major < 4) in unm_post_rx_buffers()
1555 post_rx_doorbell(adapter, ringid, count); in unm_post_rx_buffers()
1556 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_post_rx_buffers()
1562 unm_post_rx_buffers_nodb(struct unm_adapter_s *adapter, in unm_post_rx_buffers_nodb() argument
1565 unm_recv_context_t *recv_ctx = &(adapter->recv_ctx[0]); in unm_post_rx_buffers_nodb()
1582 adapter->stats.outofrxbuf++; in unm_post_rx_buffers_nodb()
1600 UNM_READ_LOCK(&adapter->adapter_lock); in unm_post_rx_buffers_nodb()
1601 adapter->unm_nic_hw_write_wx(adapter, in unm_post_rx_buffers_nodb()
1603 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_post_rx_buffers_nodb()
1608 unm_nic_fill_statistics_128M(struct unm_adapter_s *adapter, in unm_nic_fill_statistics_128M() argument
1612 if (adapter->ahw.board_type == UNM_NIC_XGBE) { in unm_nic_fill_statistics_128M()
1613 UNM_WRITE_LOCK(&adapter->adapter_lock); in unm_nic_fill_statistics_128M()
1614 unm_nic_pci_change_crbwindow_128M(adapter, 0); in unm_nic_fill_statistics_128M()
1648 unm_nic_pci_change_crbwindow_128M(adapter, 1); in unm_nic_fill_statistics_128M()
1649 UNM_WRITE_UNLOCK(&adapter->adapter_lock); in unm_nic_fill_statistics_128M()
1651 UNM_SPIN_LOCK_ISR(&adapter->tx_lock); in unm_nic_fill_statistics_128M()
1652 unm_stats->tx_bytes = adapter->stats.txbytes; in unm_nic_fill_statistics_128M()
1653 unm_stats->tx_packets = adapter->stats.xmitedframes + in unm_nic_fill_statistics_128M()
1654 adapter->stats.xmitfinished; in unm_nic_fill_statistics_128M()
1655 unm_stats->rx_bytes = adapter->stats.rxbytes; in unm_nic_fill_statistics_128M()
1656 unm_stats->rx_packets = adapter->stats.no_rcv; in unm_nic_fill_statistics_128M()
1657 unm_stats->rx_errors = adapter->stats.rcvdbadmsg; in unm_nic_fill_statistics_128M()
1658 unm_stats->tx_errors = adapter->stats.nocmddescriptor; in unm_nic_fill_statistics_128M()
1659 unm_stats->rx_short_length_error = adapter->stats.uplcong; in unm_nic_fill_statistics_128M()
1660 unm_stats->rx_long_length_error = adapter->stats.uphcong; in unm_nic_fill_statistics_128M()
1663 UNM_SPIN_UNLOCK_ISR(&adapter->tx_lock); in unm_nic_fill_statistics_128M()
1669 unm_nic_fill_statistics_2M(struct unm_adapter_s *adapter, in unm_nic_fill_statistics_2M() argument
1672 if (adapter->ahw.board_type == UNM_NIC_XGBE) { in unm_nic_fill_statistics_2M()
1673 (void) unm_nic_hw_read_wx_2M(adapter, UNM_NIU_XGE_TX_BYTE_CNT, in unm_nic_fill_statistics_2M()
1675 (void) unm_nic_hw_read_wx_2M(adapter, UNM_NIU_XGE_TX_FRAME_CNT, in unm_nic_fill_statistics_2M()
1677 (void) unm_nic_hw_read_wx_2M(adapter, UNM_NIU_XGE_RX_BYTE_CNT, in unm_nic_fill_statistics_2M()
1679 (void) unm_nic_hw_read_wx_2M(adapter, UNM_NIU_XGE_RX_FRAME_CNT, in unm_nic_fill_statistics_2M()
1681 (void) unm_nic_hw_read_wx_2M(adapter, in unm_nic_fill_statistics_2M()
1683 (void) unm_nic_hw_read_wx_2M(adapter, UNM_NIU_XGE_CRC_ERROR_CNT, in unm_nic_fill_statistics_2M()
1685 (void) unm_nic_hw_read_wx_2M(adapter, in unm_nic_fill_statistics_2M()
1688 (void) unm_nic_hw_read_wx_2M(adapter, in unm_nic_fill_statistics_2M()
1692 UNM_SPIN_LOCK_ISR(&adapter->tx_lock); in unm_nic_fill_statistics_2M()
1693 unm_stats->tx_bytes = adapter->stats.txbytes; in unm_nic_fill_statistics_2M()
1694 unm_stats->tx_packets = adapter->stats.xmitedframes + in unm_nic_fill_statistics_2M()
1695 adapter->stats.xmitfinished; in unm_nic_fill_statistics_2M()
1696 unm_stats->rx_bytes = adapter->stats.rxbytes; in unm_nic_fill_statistics_2M()
1697 unm_stats->rx_packets = adapter->stats.no_rcv; in unm_nic_fill_statistics_2M()
1698 unm_stats->rx_errors = adapter->stats.rcvdbadmsg; in unm_nic_fill_statistics_2M()
1699 unm_stats->tx_errors = adapter->stats.nocmddescriptor; in unm_nic_fill_statistics_2M()
1700 unm_stats->rx_short_length_error = adapter->stats.uplcong; in unm_nic_fill_statistics_2M()
1701 unm_stats->rx_long_length_error = adapter->stats.uphcong; in unm_nic_fill_statistics_2M()
1704 UNM_SPIN_UNLOCK_ISR(&adapter->tx_lock); in unm_nic_fill_statistics_2M()
1710 unm_nic_clear_statistics_128M(struct unm_adapter_s *adapter) in unm_nic_clear_statistics_128M() argument
1715 UNM_WRITE_LOCK(&adapter->adapter_lock); in unm_nic_clear_statistics_128M()
1716 unm_nic_pci_change_crbwindow_128M(adapter, 0); in unm_nic_clear_statistics_128M()
1735 unm_nic_pci_change_crbwindow_128M(adapter, 1); in unm_nic_clear_statistics_128M()
1736 UNM_WRITE_UNLOCK(&adapter->adapter_lock); in unm_nic_clear_statistics_128M()
1737 unm_nic_clear_stats(adapter); in unm_nic_clear_statistics_128M()
1742 unm_nic_clear_statistics_2M(struct unm_adapter_s *adapter) in unm_nic_clear_statistics_2M() argument
1746 (void) unm_nic_hw_write_wx_2M(adapter, UNM_NIU_XGE_TX_BYTE_CNT, in unm_nic_clear_statistics_2M()
1748 (void) unm_nic_hw_write_wx_2M(adapter, UNM_NIU_XGE_TX_FRAME_CNT, in unm_nic_clear_statistics_2M()
1750 (void) unm_nic_hw_write_wx_2M(adapter, UNM_NIU_XGE_RX_BYTE_CNT, in unm_nic_clear_statistics_2M()
1752 (void) unm_nic_hw_write_wx_2M(adapter, UNM_NIU_XGE_RX_FRAME_CNT, in unm_nic_clear_statistics_2M()
1754 (void) unm_nic_hw_write_wx_2M(adapter, UNM_NIU_XGE_AGGR_ERROR_CNT, in unm_nic_clear_statistics_2M()
1756 (void) unm_nic_hw_write_wx_2M(adapter, UNM_NIU_XGE_CRC_ERROR_CNT, in unm_nic_clear_statistics_2M()
1758 (void) unm_nic_hw_write_wx_2M(adapter, UNM_NIU_XGE_OVERSIZE_FRAME_ERR, in unm_nic_clear_statistics_2M()
1760 (void) unm_nic_hw_write_wx_2M(adapter, UNM_NIU_XGE_UNDERSIZE_FRAME_ERR, in unm_nic_clear_statistics_2M()
1762 unm_nic_clear_stats(adapter); in unm_nic_clear_statistics_2M()
1771 unm_nic_ioctl(struct unm_adapter_s *adapter, int cmd, queue_t *q, mblk_t *mp) in unm_nic_ioctl() argument
1777 (void) unm_nic_do_ioctl(adapter, q, mp); in unm_nic_ioctl()
1802 unm_nic_resume(unm_adapter *adapter) in unm_nic_resume() argument
1805 adapter->watchdog_timer = timeout((void (*)(void *))&unm_watchdog, in unm_nic_resume()
1806 (void *) adapter, 50000); in unm_nic_resume()
1808 if (adapter->intr_type == DDI_INTR_TYPE_MSI) in unm_nic_resume()
1809 (void) ddi_intr_block_enable(&adapter->intr_handle, 1); in unm_nic_resume()
1811 (void) ddi_intr_enable(adapter->intr_handle); in unm_nic_resume()
1812 UNM_READ_LOCK(&adapter->adapter_lock); in unm_nic_resume()
1813 unm_nic_enable_int(adapter); in unm_nic_resume()
1814 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_resume()
1816 mac_link_update(adapter->mach, LINK_STATE_UP); in unm_nic_resume()
1822 unm_nic_suspend(unm_adapter *adapter) in unm_nic_suspend() argument
1824 mac_link_update(adapter->mach, LINK_STATE_DOWN); in unm_nic_suspend()
1826 (void) untimeout(adapter->watchdog_timer); in unm_nic_suspend()
1828 UNM_READ_LOCK(&adapter->adapter_lock); in unm_nic_suspend()
1829 unm_nic_disable_int(adapter); in unm_nic_suspend()
1830 UNM_READ_UNLOCK(&adapter->adapter_lock); in unm_nic_suspend()
1831 if (adapter->intr_type == DDI_INTR_TYPE_MSI) in unm_nic_suspend()
1832 (void) ddi_intr_block_disable(&adapter->intr_handle, 1); in unm_nic_suspend()
1834 (void) ddi_intr_disable(adapter->intr_handle); in unm_nic_suspend()
1840 unm_nic_do_ioctl(unm_adapter *adapter, queue_t *wq, mblk_t *mp) in unm_nic_do_ioctl() argument
1866 if ((retval = adapter->unm_nic_hw_read_ioctl(adapter, in unm_nic_do_ioctl()
1879 if ((data.rv = adapter->unm_nic_hw_write_ioctl(adapter, in unm_nic_do_ioctl()
1891 if ((data.rv = adapter->unm_nic_pci_mem_read(adapter, in unm_nic_do_ioctl()
1903 if ((data.rv = adapter->unm_nic_pci_mem_write(adapter, in unm_nic_do_ioctl()
1919 if (adapter->pci_cfg_handle != NULL) { in unm_nic_do_ioctl()
1920 conf_handle = adapter->pci_cfg_handle; in unm_nic_do_ioctl()
1922 } else if ((retval = pci_config_setup(adapter->dip, in unm_nic_do_ioctl()
1929 adapter->pci_cfg_handle = conf_handle; in unm_nic_do_ioctl()
1950 if (adapter->pci_cfg_handle != NULL) { in unm_nic_do_ioctl()
1951 conf_handle = adapter->pci_cfg_handle; in unm_nic_do_ioctl()
1952 } else if ((retval = pci_config_setup(adapter->dip, in unm_nic_do_ioctl()
1958 adapter->pci_cfg_handle = conf_handle; in unm_nic_do_ioctl()
1979 data.rv = adapter->unm_nic_fill_statistics(adapter, in unm_nic_do_ioctl()
1986 data.rv = adapter->unm_nic_clear_statistics(adapter); in unm_nic_do_ioctl()
2001 efuse_chip_id = adapter->unm_nic_pci_read_normalize(adapter, in unm_nic_do_ioctl()
2004 efuse_chip_id |= adapter->unm_nic_pci_read_normalize(adapter, in unm_nic_do_ioctl()
2011 cmn_err(CE_WARN, "%s%d: bad command %d\n", adapter->name, in unm_nic_do_ioctl()
2012 adapter->instance, data.cmd); in unm_nic_do_ioctl()
2069 unm_adapter *adapter; in unm_kstat_update() local
2075 adapter = ksp->ks_private; in unm_kstat_update()
2078 (knp++)->value.ui32 = adapter->freehdls; in unm_kstat_update()
2079 (knp++)->value.ui64 = adapter->freecmds; in unm_kstat_update()
2080 (knp++)->value.ui64 = adapter->tx_bcopy_threshold; in unm_kstat_update()
2081 (knp++)->value.ui64 = adapter->rx_bcopy_threshold; in unm_kstat_update()
2083 (knp++)->value.ui64 = adapter->stats.xmitcalled; in unm_kstat_update()
2084 (knp++)->value.ui64 = adapter->stats.xmitedframes; in unm_kstat_update()
2085 (knp++)->value.ui64 = adapter->stats.xmitfinished; in unm_kstat_update()
2086 (knp++)->value.ui64 = adapter->stats.txbytes; in unm_kstat_update()
2087 (knp++)->value.ui64 = adapter->stats.txcopyed; in unm_kstat_update()
2088 (knp++)->value.ui64 = adapter->stats.txmapped; in unm_kstat_update()
2089 (knp++)->value.ui64 = adapter->stats.outoftxdmahdl; in unm_kstat_update()
2090 (knp++)->value.ui64 = adapter->stats.outofcmddesc; in unm_kstat_update()
2091 (knp++)->value.ui64 = adapter->stats.txdropped; in unm_kstat_update()
2092 (knp++)->value.ui64 = adapter->stats.polled; in unm_kstat_update()
2093 (knp++)->value.ui64 = adapter->stats.uphappy; in unm_kstat_update()
2094 (knp++)->value.ui64 = adapter->stats.updropped; in unm_kstat_update()
2095 (knp++)->value.ui64 = adapter->stats.csummed; in unm_kstat_update()
2096 (knp++)->value.ui64 = adapter->stats.no_rcv; in unm_kstat_update()
2097 (knp++)->value.ui64 = adapter->stats.rxbytes; in unm_kstat_update()
2098 (knp++)->value.ui64 = adapter->stats.rxcopyed; in unm_kstat_update()
2099 (knp++)->value.ui64 = adapter->stats.rxmapped; in unm_kstat_update()
2100 (knp++)->value.ui64 = adapter->stats.desballocfailed; in unm_kstat_update()
2101 (knp++)->value.ui64 = adapter->stats.outofrxbuf; in unm_kstat_update()
2102 (knp++)->value.ui64 = adapter->stats.promiscmode; in unm_kstat_update()
2103 (knp++)->value.ui64 = adapter->stats.rxbufshort; in unm_kstat_update()
2104 (knp++)->value.ui64 = adapter->stats.allocbfailed; in unm_kstat_update()
2110 unm_setup_named_kstat(unm_adapter *adapter, int instance, char *name, in unm_setup_named_kstat() argument
2125 ksp->ks_private = adapter; in unm_setup_named_kstat()
2154 unm_init_kstats(unm_adapter* adapter, int instance) in unm_init_kstats() argument
2156 adapter->kstats[0] = unm_setup_named_kstat(adapter, in unm_init_kstats()
2162 unm_fini_kstats(unm_adapter* adapter) in unm_fini_kstats() argument
2165 if (adapter->kstats[0] != NULL) { in unm_fini_kstats()
2166 kstat_delete(adapter->kstats[0]); in unm_fini_kstats()
2167 adapter->kstats[0] = NULL; in unm_fini_kstats()
2172 unm_nic_set_pauseparam(unm_adapter *adapter, unm_pauseparam_t *pause) in unm_nic_set_pauseparam() argument
2176 if (adapter->ahw.board_type == UNM_NIC_GBE) { in unm_nic_set_pauseparam()
2177 if (unm_niu_gbe_set_rx_flow_ctl(adapter, pause->rx_pause)) in unm_nic_set_pauseparam()
2180 if (unm_niu_gbe_set_tx_flow_ctl(adapter, pause->tx_pause)) in unm_nic_set_pauseparam()
2183 } else if (adapter->ahw.board_type == UNM_NIC_XGBE) { in unm_nic_set_pauseparam()
2184 if (unm_niu_xg_set_tx_flow_ctl(adapter, pause->tx_pause)) in unm_nic_set_pauseparam()
2198 unm_adapter *adapter = arg; in ntxn_m_start() local
2201 UNM_SPIN_LOCK(&adapter->lock); in ntxn_m_start()
2202 if (adapter->is_up == UNM_ADAPTER_UP_MAGIC) { in ntxn_m_start()
2203 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2207 if (create_rxtx_rings(adapter) != DDI_SUCCESS) { in ntxn_m_start()
2208 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2212 if (init_firmware(adapter) != DDI_SUCCESS) { in ntxn_m_start()
2213 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2215 adapter->name, adapter->instance); in ntxn_m_start()
2219 unm_nic_clear_stats(adapter); in ntxn_m_start()
2221 if (unm_nic_hw_resources(adapter) != 0) { in ntxn_m_start()
2222 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2224 adapter->name, adapter->instance); in ntxn_m_start()
2228 if (adapter->fw_major < 4) { in ntxn_m_start()
2229 adapter->crb_addr_cmd_producer = in ntxn_m_start()
2230 crb_cmd_producer[adapter->portnum]; in ntxn_m_start()
2231 adapter->crb_addr_cmd_consumer = in ntxn_m_start()
2232 crb_cmd_consumer[adapter->portnum]; in ntxn_m_start()
2233 unm_nic_update_cmd_producer(adapter, 0); in ntxn_m_start()
2234 unm_nic_update_cmd_consumer(adapter, 0); in ntxn_m_start()
2237 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in ntxn_m_start()
2238 if (unm_post_rx_buffers(adapter, ring) != DDI_SUCCESS) { in ntxn_m_start()
2239 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2244 if (unm_nic_macaddr_set(adapter, adapter->mac_addr) != 0) { in ntxn_m_start()
2245 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2247 adapter->name, adapter->instance); in ntxn_m_start()
2251 if (unm_nic_init_port(adapter) != 0) { in ntxn_m_start()
2252 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2254 adapter->name, adapter->instance); in ntxn_m_start()
2258 unm_nic_set_link_parameters(adapter); in ntxn_m_start()
2263 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in ntxn_m_start()
2264 if (unm_nic_set_promisc_mode(adapter) != 0) { in ntxn_m_start()
2265 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2267 adapter->name, adapter->instance); in ntxn_m_start()
2271 nx_p3_nic_set_multi(adapter); in ntxn_m_start()
2273 adapter->stats.promiscmode = 1; in ntxn_m_start()
2275 if (unm_nic_set_mtu(adapter, adapter->mtu) != 0) { in ntxn_m_start()
2276 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2278 adapter->name, adapter->instance); in ntxn_m_start()
2282 adapter->watchdog_timer = timeout((void (*)(void *))&unm_watchdog, in ntxn_m_start()
2283 (void *)adapter, 0); in ntxn_m_start()
2285 adapter->is_up = UNM_ADAPTER_UP_MAGIC; in ntxn_m_start()
2287 if (adapter->intr_type == DDI_INTR_TYPE_MSI) in ntxn_m_start()
2288 (void) ddi_intr_block_enable(&adapter->intr_handle, 1); in ntxn_m_start()
2290 (void) ddi_intr_enable(adapter->intr_handle); in ntxn_m_start()
2291 unm_nic_enable_int(adapter); in ntxn_m_start()
2293 UNM_SPIN_UNLOCK(&adapter->lock); in ntxn_m_start()
2297 unm_nic_stop_port(adapter); in ntxn_m_start()
2299 unm_free_hw_resources(adapter); in ntxn_m_start()
2301 destroy_rxtx_rings(adapter); in ntxn_m_start()
2334 struct unm_adapter_s *adapter = arg; in ntxn_m_promisc()
2336 err = on ? unm_nic_set_promisc_mode(adapter) : in ntxn_m_promisc()
2337 unm_nic_unset_promisc_mode(adapter); in ntxn_m_promisc()
2349 struct unm_adapter_s *adapter = arg; in ntxn_m_stat() local
2350 struct unm_adapter_stats *portstat = &adapter->stats; in ntxn_m_stat()
2354 if (adapter->ahw.board_type == UNM_NIC_XGBE) { in ntxn_m_stat()
2420 struct unm_adapter_s *adapter = arg; in ntxn_m_unicst() local
2424 if (unm_nic_macaddr_set(adapter, (uint8_t *)mac)) in ntxn_m_unicst()
2426 bcopy(mac, adapter->mac_addr, ETHERADDRL); in ntxn_m_unicst()
2434 unm_adapter *adapter = arg; in ntxn_m_tx() local
2441 if (unm_nic_xmit_frame(adapter, mp) != B_TRUE) { in ntxn_m_tx()
2446 adapter->stats.xmitedframes++; in ntxn_m_tx()
2457 struct unm_adapter_s *adapter = (struct unm_adapter_s *)arg; in ntxn_m_ioctl() local
2464 status = unm_nd_ioctl(adapter, wq, mp, iocp); in ntxn_m_ioctl()
2488 unm_nic_ioctl(adapter, cmd, wq, mp); in ntxn_m_ioctl()
2545 unm_register_mac(unm_adapter *adapter) in unm_register_mac() argument
2551 dev_info_t *dip = adapter->dip; in unm_register_mac()
2559 macp->m_driver = adapter; in unm_register_mac()
2561 macp->m_instance = adapter->instance; in unm_register_mac()
2562 macp->m_src_addr = adapter->mac_addr; in unm_register_mac()
2565 macp->m_max_sdu = adapter->mtu; in unm_register_mac()
2570 ret = mac_register(macp, &adapter->mach); in unm_register_mac()
2574 adapter->portnum); in unm_register_mac()
2578 unm_init_kstats(adapter, adapter->instance); in unm_register_mac()
2581 if (unm_nd_init(adapter)) { in unm_register_mac()
2586 pause.rx_pause = adapter->nd_params[PARAM_ADV_PAUSE_CAP].ndp_val; in unm_register_mac()
2587 pause.tx_pause = adapter->nd_params[PARAM_ADV_ASYM_PAUSE_CAP].ndp_val; in unm_register_mac()
2589 if (unm_nic_set_pauseparam(adapter, &pause)) { in unm_register_mac()
2593 adapter->nd_params[PARAM_PAUSE_CAP].ndp_val = pause.rx_pause; in unm_register_mac()
2594 adapter->nd_params[PARAM_ASYM_PAUSE_CAP].ndp_val = pause.tx_pause; in unm_register_mac()