Lines Matching +full:ethernet +full:- +full:port

28  * This file is part of the Chelsio T1 Ethernet driver.
30 * Copyright (C) 2003-2005 Chelsio Communications. All rights reserved.
34 * Solaris Multithreaded STREAMS Chelsio PCI Ethernet Driver.
45 #include <sys/ethernet.h>
73 #define MLEN(mp) ((mp)->b_wptr - (mp)->b_rptr)
132 mutex_enter(&sa->ch_intr); in pe_intr()
134 if (sge_data_in(sa->sge)) { in pe_intr()
135 sa->isr_intr++; in pe_intr()
136 mutex_exit(&sa->ch_intr); in pe_intr()
140 mutex_exit(&sa->ch_intr); in pe_intr()
161 * once for each port. in pe_init()
163 if (sa->init_counter == 0) { in pe_init()
169 if (sa->port[i].line_up == 0) { in pe_init()
170 link_start(sa, &sa->port[i]); in pe_init()
171 sa->port[i].line_up = 1; in pe_init()
180 if (sa->ch_config.cksum_enabled) { in pe_init()
181 if (sa->config_data.offload_ip_cksum) { in pe_init()
183 t1_tp_set_ip_checksum_offload(sa->tp, 1); in pe_init()
186 if (sa->config_data.offload_tcp_cksum) { in pe_init()
188 t1_tp_set_tcp_checksum_offload(sa->tp, 1); in pe_init()
191 if (sa->config_data.offload_udp_cksum) { in pe_init()
193 t1_tp_set_udp_checksum_offload(sa->tp, 1); in pe_init()
197 sa->ch_flags |= PEINITDONE; in pe_init()
199 sa->init_counter++; in pe_init()
206 (void) sge_start(sa->sge); in pe_init()
218 &sa->txxg_cfg1); in pe_init()
226 struct cmac *mac = p->mac; in link_start()
228 mac->ops->reset(mac); in link_start()
229 if (mac->ops->macaddress_set) in link_start()
230 mac->ops->macaddress_set(mac, p->enaddr); in link_start()
231 (void) t1_link_start(p->phy, mac, &p->link_config); in link_start()
232 mac->ops->enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX); in link_start()
242 (void) sge_stop(sa->sge); in pe_stop()
248 mutex_enter(&sa->ch_intr); in pe_stop()
249 mutex_exit(&sa->ch_intr); in pe_stop()
263 int cm_flg = 0; /* flag (1 - if kmem-alloced) */ in pe_start()
277 hmp->ce_pa = ((tbuf_t *)mp)->tb_pa; in pe_start()
278 hmp->ce_dh = NULL; in pe_start()
279 hmp->ce_flg = DH_TOE; in pe_start()
280 hmp->ce_len = ((tbuf_t *)mp)->tb_len; in pe_start()
281 hmp->ce_mp = mp; in pe_start()
284 (void) ddi_dma_sync((ddi_dma_handle_t)((tbuf_t *)mp)->tb_dh, in pe_start()
285 (off_t)0, hmp->ce_len, DDI_DMA_SYNC_FORDEV); in pe_start()
287 if (sge_data_out(sa->sge, 0, mp, hmp, 1, flg) == 0) { in pe_start()
295 sa->ch_blked = 1; in pe_start()
305 if (sa->ch_ip == 0) { in pe_start()
306 ushort_t ethertype = ntohs(*(short *)&mp->b_rptr[12]); in pe_start()
313 if (pe_make_fake_arp(sa, mp->b_rptr)) { in pe_start()
315 sa->oerr++; in pe_start()
319 sa->ch_ip = pe_get_ip(mp->b_rptr); in pe_start()
329 if ((mp->b_rptr - mp->b_datap->db_base) >= SZ_CPL_TX_PKT) { in pe_start()
331 mp->b_rptr -= SZ_CPL_TX_PKT; in pe_start()
336 sa->sge->intr_cnt.tx_need_cpl_space++; in pe_start()
341 sa->oerr++; in pe_start()
345 m0->b_wptr = m0->b_rptr + SZ_CPL_TX_PKT; in pe_start()
346 m0->b_cont = mp; in pe_start()
353 cpl = (struct cpl_tx_pkt *)mp->b_rptr; in pe_start()
354 cpl->opcode = CPL_TX_PKT; in pe_start()
355 cpl->iff = 0; /* XXX port 0 needs fixing with NEMO */ in pe_start()
356 cpl->ip_csum_dis = 1; /* no IP header cksum */ in pe_start()
357 cpl->l4_csum_dis = in pe_start()
359 cpl->vlan_valid = 0; /* no vlan */ in pe_start()
362 if (m0->b_cont) { in pe_start()
365 sa->sge->intr_cnt.tx_multi_mblks++; in pe_start()
375 mp = mp->b_cont; in pe_start()
388 if (nseg >= (mseg-4)) { in pe_start()
413 if (sa->ch_config.enable_dvma) { in pe_start()
415 (void *)mp->b_rptr, in pe_start()
416 &hmp[nseg], mseg - nseg); in pe_start()
418 sa->sge->intr_cnt.tx_no_dvma1++; in pe_start()
420 (void *)mp->b_rptr, in pe_start()
422 mseg - nseg)) == 0) { in pe_start()
423 sa->sge->intr_cnt.tx_no_dma1++; in pe_start()
445 (void *)mp->b_rptr, &hmp[nseg], in pe_start()
446 mseg - nseg); in pe_start()
448 sa->sge->intr_cnt.tx_no_dma1++; in pe_start()
468 (void *)mp->b_rptr, &hmp[nseg], in pe_start()
469 mseg - nseg); in pe_start()
471 sa->sge->intr_cnt.tx_no_dma1++; in pe_start()
490 mp = mp->b_cont; in pe_start()
511 if (sa->ch_config.enable_dvma) { in pe_start()
513 (void *)mp->b_rptr, in pe_start()
516 sa->sge->intr_cnt.tx_no_dvma2++; in pe_start()
518 (void *)mp->b_rptr, in pe_start()
521 sa->sge->intr_cnt.tx_no_dma2++; in pe_start()
532 (void *)mp->b_rptr, &hmp[0], 16); in pe_start()
534 sa->sge->intr_cnt.tx_no_dma2++; in pe_start()
545 (void *)mp->b_rptr, &hmp[0], 16); in pe_start()
547 sa->sge->intr_cnt.tx_no_dma2++; in pe_start()
561 hmp->ce_flg |= DH_ARP; in pe_start()
564 if (sge_data_out(sa->sge, 0, m0, hmp, nseg, flg) == 0) { in pe_start()
575 sa->ch_blked = 1; in pe_start()
583 for (--nseg; nseg >= 0; nseg--) { in pe_start()
584 if (cmp->ce_dh) { in pe_start()
585 if (cmp->ce_flg == DH_DMA) in pe_start()
586 ch_unbind_dma_handle(sa, cmp->ce_dh); in pe_start()
589 ch_unbind_dvma_handle(sa, cmp->ce_dh); in pe_start()
614 m0->b_rptr += SZ_CPL_TX_PKT; in pe_start()
618 sa->oerr++; in pe_start()
624 /* KLUDGE ALERT. HARD WIRED TO PORT ZERO */
628 sa->port[0].mac->ops->macaddress_set(sa->port[0].mac, ac_enaddr); in pe_set_mac()
631 /* KLUDGE ALERT. HARD WIRED TO PORT ZERO */
635 return (sa->port[0].enaddr); in pe_get_mac()
638 /* KLUDGE ALERT. HARD WIRED TO ONE PORT */
642 struct cmac *mac = sa->port[0].mac; in pe_set_promiscuous()
647 sa->ch_flags &= ~(PEPROMISC|PEALLMULTI); in pe_set_promiscuous()
651 sa->ch_flags |= PEPROMISC; in pe_set_promiscuous()
655 sa->ch_flags |= PEALLMULTI; in pe_set_promiscuous()
659 mutex_enter(&sa->ch_mc_lck); in pe_set_promiscuous()
661 rm.mc = sa->ch_mc; in pe_set_promiscuous()
663 mac->ops->set_rx_mode(mac, &rm); in pe_set_promiscuous()
664 mutex_exit(&sa->ch_mc_lck); in pe_set_promiscuous()
670 struct cmac *mac = sa->port[0].mac; in pe_set_mc()
681 bcopy(ep, &mcp->cmc_mca, 6); in pe_set_mc()
683 mutex_enter(&sa->ch_mc_lck); in pe_set_mc()
684 mcp->cmc_next = sa->ch_mc; in pe_set_mc()
685 sa->ch_mc = mcp; in pe_set_mc()
686 sa->ch_mc_cnt++; in pe_set_mc()
687 mutex_exit(&sa->ch_mc_lck); in pe_set_mc()
690 ch_mc_t **p = &sa->ch_mc; in pe_set_mc()
693 mutex_enter(&sa->ch_mc_lck); in pe_set_mc()
694 p = &sa->ch_mc; in pe_set_mc()
696 if (bcmp(ep, (*p)->cmc_mca, 6) == 0) { in pe_set_mc()
698 *p = (*p)->cmc_next; in pe_set_mc()
700 sa->ch_mc_cnt--; in pe_set_mc()
704 p = &(*p)->cmc_next; in pe_set_mc()
706 mutex_exit(&sa->ch_mc_lck); in pe_set_mc()
713 mutex_enter(&sa->ch_mc_lck); in pe_set_mc()
715 rm.mc = sa->ch_mc; in pe_set_mc()
717 mac->ops->set_rx_mode(mac, &rm); in pe_set_mc()
718 mutex_exit(&sa->ch_mc_lck); in pe_set_mc()
724 * return: speed - bandwidth of interface
725 * return: intrcnt - # interrupts
726 * return: norcvbuf - # recedived packets dropped by driver
727 * return: oerrors - # bad send packets
728 * return: ierrors - # bad receive packets
729 * return: underrun - # bad underrun xmit packets
730 * return: overrun - # bad overrun recv packets
731 * return: framing - # bad aligned recv packets
732 * return: crc - # bad FCS (crc) recv packets
733 * return: carrier - times carrier was lost
734 * return: collisions - # xmit collisions
735 * return: xcollisions - # xmit pkts dropped due to collisions
736 * return: late - # late xmit collisions
737 * return: defer - # deferred xmit packets
738 * return: xerrs - # xmit dropped packets
739 * return: rerrs - # recv dropped packets
740 * return: toolong - # recv pkts too long
741 * return: runt - # recv runt pkts
742 * return: multixmt - # multicast pkts xmitted
743 * return: multircv - # multicast pkts recved
744 * return: brdcstxmt - # broadcast pkts xmitted
745 * return: brdcstrcv - # broadcast pkts rcv
764 pt = &(sa->port[0]); in pe_get_stats()
765 (void) pt->phy->ops->get_link_status(pt->phy, in pe_get_stats()
791 *intrcnt = sa->isr_intr; in pe_get_stats()
792 *norcvbuf = sa->norcvbuf; in pe_get_stats()
794 sp = sa->port[0].mac->ops->statistics_update(sa->port[0].mac, in pe_get_stats()
797 *ierrors = sp->RxOctetsBad; in pe_get_stats()
803 *oerrors = sa->oerr + sp->TxFramesAbortedDueToXSCollisions + in pe_get_stats()
804 sp->TxUnderrun + sp->TxLengthErrors + in pe_get_stats()
805 sp->TxInternalMACXmitError + in pe_get_stats()
806 sp->TxFramesWithExcessiveDeferral + in pe_get_stats()
807 sp->TxFCSErrors; in pe_get_stats()
809 *underrun = sp->TxUnderrun; in pe_get_stats()
810 *overrun = sp->RxFrameTooLongErrors; in pe_get_stats()
811 *framing = sp->RxAlignErrors; in pe_get_stats()
812 *crc = sp->RxFCSErrors; in pe_get_stats()
814 *collisions = sp->TxTotalCollisions; in pe_get_stats()
815 *xcollisions = sp->TxFramesAbortedDueToXSCollisions; in pe_get_stats()
816 *late = sp->TxLateCollisions; in pe_get_stats()
817 *defer = sp->TxFramesWithDeferredXmissions; in pe_get_stats()
818 *xerrs = sp->TxUnderrun + sp->TxLengthErrors + in pe_get_stats()
819 sp->TxInternalMACXmitError + sp->TxFCSErrors; in pe_get_stats()
820 *rerrs = sp->RxSymbolErrors + sp->RxSequenceErrors + sp->RxRuntErrors + in pe_get_stats()
821 sp->RxJabberErrors + sp->RxInternalMACRcvError + in pe_get_stats()
822 sp->RxInRangeLengthErrors + sp->RxOutOfRangeLengthField; in pe_get_stats()
823 *toolong = sp->RxFrameTooLongErrors; in pe_get_stats()
824 *runt = sp->RxRuntErrors; in pe_get_stats()
826 *multixmt = sp->TxMulticastFramesOK; in pe_get_stats()
827 *multircv = sp->RxMulticastFramesOK; in pe_get_stats()
828 *brdcstxmt = sp->TxBroadcastFramesOK; in pe_get_stats()
829 *brdcstrcv = sp->RxBroadcastFramesOK; in pe_get_stats()
863 uint32_t ch_is_asic = 0; /* Default: non-ASIC */
864 uint32_t ch_link_speed = PE_LINK_SPEED_AUTONEG; /* Default: auto-negoiate */
865 uint32_t ch_num_of_ports = 1; /* Default: 1 port */
888 uint32_t ch_sge_flq0_cnt = /* Default: free list queue-0 length */
890 uint32_t ch_sge_flq1_cnt = /* Default: free list queue-1 length */
896 int32_t ch_chip = -1; /* Default: use hardware lookup tbl */
936 if (board_info(chp)->caps & SUPPORTED_10000baseT_Full) { in pe_attach()
942 if (chp->ch_config.burstsize_set) { in pe_attach()
944 pcix_cmd |= (chp->ch_config.burstsize << 18); in pe_attach()
949 if (chp->ch_config.transaction_cnt_set) { in pe_attach()
951 pcix_cmd |= (chp->ch_config.transaction_cnt << 20); in pe_attach()
957 pcix_cmd |= (chp->ch_config.relaxed_ordering << 17); in pe_attach()
968 if (board_info(chp)->caps & SUPPORTED_10000baseT_Full) { in pe_attach()
974 * update mtu table (regs: 0x404 - 0x420) with bigger values than in pe_attach()
996 * used to make decisions at run-time on behavior thus
998 * OUT: p_config - pointer to config structure that
1000 * RTN: 0 - Success;
1005 pe_config_data_t *p_config = (pe_config_data_t *)&chp->config_data; in ch_set_config_data()
1012 p_config->gtm = ch_gtm; in ch_set_config_data()
1014 p_config->global_config = ch_global_config; in ch_set_config_data()
1016 if (p_config->gtm) in ch_set_config_data()
1017 p_config->global_config |= CFGMD_TUNNEL; in ch_set_config_data()
1019 p_config->tp_reset_cm = ch_tp_reset_cm; in ch_set_config_data()
1020 p_config->is_asic = ch_is_asic; in ch_set_config_data()
1025 p_config->mc5_rtbl_size = ch_mc5_rtbl_size; in ch_set_config_data()
1026 p_config->mc5_dbsvr_size = ch_mc5_dbsvr_size; in ch_set_config_data()
1027 p_config->mc5_parity = ch_mc5_parity; in ch_set_config_data()
1028 p_config->mc5_issue_syn = ch_mc5_issue_syn; in ch_set_config_data()
1030 p_config->offload_ip_cksum = ch_offload_ip_cksum; in ch_set_config_data()
1031 p_config->offload_udp_cksum = ch_offload_udp_cksum; in ch_set_config_data()
1032 p_config->offload_tcp_cksum = ch_offload_tcp_cksum; in ch_set_config_data()
1034 p_config->packet_tracing = ch_packet_tracing; in ch_set_config_data()
1036 p_config->server_region_len = ch_server_region_len; in ch_set_config_data()
1037 p_config->rt_region_len = ch_rt_region_len; in ch_set_config_data()
1042 * 5-auto-neg 2-1000Gbps; 1-100Gbps; 0-10Gbps in ch_set_config_data()
1044 p_config->link_speed = ch_link_speed; in ch_set_config_data()
1045 p_config->num_of_ports = ch_num_of_ports; in ch_set_config_data()
1050 p_config->cat_opt0 = ch_cat_opt0; in ch_set_config_data()
1051 p_config->cat_opt1 = ch_cat_opt1; in ch_set_config_data()
1056 p_config->sge_cmdq0_cnt = ch_sge_cmdq0_cnt; in ch_set_config_data()
1057 p_config->sge_cmdq1_cnt = ch_sge_cmdq1_cnt; in ch_set_config_data()
1058 p_config->sge_flq0_cnt = ch_sge_flq0_cnt; in ch_set_config_data()
1059 p_config->sge_flq1_cnt = ch_sge_flq1_cnt; in ch_set_config_data()
1060 p_config->sge_respq_cnt = ch_sge_respq_cnt; in ch_set_config_data()
1062 p_config->phy_rx_fifo = ch_phy_rx_fifo; in ch_set_config_data()
1063 p_config->phy_tx_fifo = ch_phy_tx_fifo; in ch_set_config_data()
1065 p_config->sge_cmdq_threshold = ch_sge_cmdq_threshold; in ch_set_config_data()
1067 p_config->sge_flq_threshold = ch_sge_flq_threshold; in ch_set_config_data()
1069 p_config->phy_force_master = ch_phy_force_master; in ch_set_config_data()
1071 p_config->rb_num_of_entries = ch_rb_num_of_entries; in ch_set_config_data()
1073 p_config->rb_size_of_entries = ch_rb_size_of_entries; in ch_set_config_data()
1075 p_config->rb_flag = ch_rb_flag; in ch_set_config_data()
1077 p_config->exit_early = ch_exit_early; in ch_set_config_data()
1079 p_config->chip = ch_chip; in ch_set_config_data()
1081 p_config->stats = ch_stats; in ch_set_config_data()
1083 p_config->tx_delay_us = ch_tx_delay_us; in ch_set_config_data()
1095 sa->config = sa->config_data.global_config; in pe_sa_init()
1096 device_id = pci_config_get16(sa->ch_hpci, 2); in pe_sa_init()
1097 device_subid = pci_config_get16(sa->ch_hpci, 0x2e); in pe_sa_init()
1107 if (t1_get_board_rev(sa, bi, &sa->params)) { in pe_sa_init()
1137 mutex_init(&sa->ch_small_esbl, NULL, MUTEX_DRIVER, sa->ch_icookp); in pe_small_rbuf_pool_init()
1145 sa->ch_small_owner = NULL; in pe_small_rbuf_pool_init()
1146 sa->ch_sm_index = j; in pe_small_rbuf_pool_init()
1147 sa->ch_small_esb_free = NULL; in pe_small_rbuf_pool_init()
1155 rbp->cs_next = sa->ch_small_esb_free; in pe_small_rbuf_pool_init()
1156 sa->ch_small_esb_free = rbp; in pe_small_rbuf_pool_init()
1161 rbp->cs_owner = sa->ch_small_owner; in pe_small_rbuf_pool_init()
1162 sa->ch_small_owner = rbp; in pe_small_rbuf_pool_init()
1167 sa->ch_small_owner = NULL; in pe_small_rbuf_pool_init()
1196 mutex_init(&sa->ch_big_esbl, NULL, MUTEX_DRIVER, sa->ch_icookp); in pe_big_rbuf_pool_init()
1204 sa->ch_big_owner = NULL; in pe_big_rbuf_pool_init()
1205 sa->ch_big_index = j; in pe_big_rbuf_pool_init()
1206 sa->ch_big_esb_free = NULL; in pe_big_rbuf_pool_init()
1211 rbp->cs_next = sa->ch_big_esb_free; in pe_big_rbuf_pool_init()
1212 sa->ch_big_esb_free = rbp; in pe_big_rbuf_pool_init()
1217 rbp->cs_owner = sa->ch_big_owner; in pe_big_rbuf_pool_init()
1218 sa->ch_big_owner = rbp; in pe_big_rbuf_pool_init()
1223 sa->ch_big_owner = NULL; in pe_big_rbuf_pool_init()
1247 rbp->cs_buf = (caddr_t)ch_alloc_dma_mem(sa, 1, DMA_STREAM|DMA_SMALN, in ch_alloc_small_esbbuf()
1248 SGE_SM_BUF_SZ(sa), &rbp->cs_pa, &rbp->cs_dh, &rbp->cs_ah); in ch_alloc_small_esbbuf()
1250 rbp->cs_buf = (caddr_t)ch_alloc_dma_mem(sa, 0, DMA_STREAM|DMA_SMALN, in ch_alloc_small_esbbuf()
1251 SGE_SM_BUF_SZ(sa), &rbp->cs_pa, &rbp->cs_dh, &rbp->cs_ah); in ch_alloc_small_esbbuf()
1254 if (rbp->cs_buf == NULL) { in ch_alloc_small_esbbuf()
1259 rbp->cs_sa = sa; in ch_alloc_small_esbbuf()
1260 rbp->cs_index = i; in ch_alloc_small_esbbuf()
1262 rbp->cs_frtn.free_func = (void (*)())&ch_small_rbuf_recycle; in ch_alloc_small_esbbuf()
1263 rbp->cs_frtn.free_arg = (caddr_t)rbp; in ch_alloc_small_esbbuf()
1284 rbp->cs_buf = (caddr_t)ch_alloc_dma_mem(sa, 1, DMA_STREAM|DMA_BGALN, in ch_alloc_big_esbbuf()
1285 SGE_BG_BUF_SZ(sa), &rbp->cs_pa, &rbp->cs_dh, &rbp->cs_ah); in ch_alloc_big_esbbuf()
1287 rbp->cs_buf = (caddr_t)ch_alloc_dma_mem(sa, 0, DMA_STREAM|DMA_BGALN, in ch_alloc_big_esbbuf()
1288 SGE_BG_BUF_SZ(sa), &rbp->cs_pa, &rbp->cs_dh, &rbp->cs_ah); in ch_alloc_big_esbbuf()
1291 if (rbp->cs_buf == NULL) { in ch_alloc_big_esbbuf()
1296 rbp->cs_sa = sa; in ch_alloc_big_esbbuf()
1297 rbp->cs_index = i; in ch_alloc_big_esbbuf()
1299 rbp->cs_frtn.free_func = (void (*)())&ch_big_rbuf_recycle; in ch_alloc_big_esbbuf()
1300 rbp->cs_frtn.free_arg = (caddr_t)rbp; in ch_alloc_big_esbbuf()
1313 mutex_enter(&sa->ch_small_esbl); in pe_rbuf_pool_free()
1316 * Now set-up the rest to commit suicide. in pe_rbuf_pool_free()
1318 while (sa->ch_small_owner) { in pe_rbuf_pool_free()
1319 rbp = sa->ch_small_owner; in pe_rbuf_pool_free()
1320 sa->ch_small_owner = rbp->cs_owner; in pe_rbuf_pool_free()
1321 rbp->cs_owner = NULL; in pe_rbuf_pool_free()
1322 rbp->cs_flag = 1; in pe_rbuf_pool_free()
1325 while ((rbp = sa->ch_small_esb_free) != NULL) { in pe_rbuf_pool_free()
1327 sa->ch_small_esb_free = rbp->cs_next; in pe_rbuf_pool_free()
1329 ch_free_dma_mem(rbp->cs_dh, rbp->cs_ah); in pe_rbuf_pool_free()
1334 mutex_exit(&sa->ch_small_esbl); in pe_rbuf_pool_free()
1337 mutex_destroy(&sa->ch_small_esbl); in pe_rbuf_pool_free()
1340 mutex_enter(&sa->ch_big_esbl); in pe_rbuf_pool_free()
1343 * Now set-up the rest to commit suicide. in pe_rbuf_pool_free()
1345 while (sa->ch_big_owner) { in pe_rbuf_pool_free()
1346 rbp = sa->ch_big_owner; in pe_rbuf_pool_free()
1347 sa->ch_big_owner = rbp->cs_owner; in pe_rbuf_pool_free()
1348 rbp->cs_owner = NULL; in pe_rbuf_pool_free()
1349 rbp->cs_flag = 1; in pe_rbuf_pool_free()
1352 while ((rbp = sa->ch_big_esb_free) != NULL) { in pe_rbuf_pool_free()
1354 sa->ch_big_esb_free = rbp->cs_next; in pe_rbuf_pool_free()
1356 ch_free_dma_mem(rbp->cs_dh, rbp->cs_ah); in pe_rbuf_pool_free()
1361 mutex_exit(&sa->ch_big_esbl); in pe_rbuf_pool_free()
1364 mutex_destroy(&sa->ch_big_esbl); in pe_rbuf_pool_free()
1370 ch_t *sa = rbp->cs_sa; in ch_small_rbuf_recycle()
1372 if (rbp->cs_flag) { in ch_small_rbuf_recycle()
1377 ch_free_dma_mem(rbp->cs_dh, rbp->cs_ah); in ch_small_rbuf_recycle()
1379 i = rbp->cs_index; in ch_small_rbuf_recycle()
1396 mutex_enter(&sa->ch_small_esbl); in ch_small_rbuf_recycle()
1397 rbp->cs_next = sa->ch_small_esb_free; in ch_small_rbuf_recycle()
1398 sa->ch_small_esb_free = rbp; in ch_small_rbuf_recycle()
1399 mutex_exit(&sa->ch_small_esbl); in ch_small_rbuf_recycle()
1404 atomic_dec_32(&buffers_in_use[rbp->cs_index]); in ch_small_rbuf_recycle()
1413 ch_t *sa = rbp->cs_sa; in ch_big_rbuf_recycle()
1415 if (rbp->cs_flag) { in ch_big_rbuf_recycle()
1420 ch_free_dma_mem(rbp->cs_dh, rbp->cs_ah); in ch_big_rbuf_recycle()
1422 i = rbp->cs_index; in ch_big_rbuf_recycle()
1439 mutex_enter(&sa->ch_big_esbl); in ch_big_rbuf_recycle()
1440 rbp->cs_next = sa->ch_big_esb_free; in ch_big_rbuf_recycle()
1441 sa->ch_big_esb_free = rbp; in ch_big_rbuf_recycle()
1442 mutex_exit(&sa->ch_big_esbl); in ch_big_rbuf_recycle()
1447 atomic_dec_32(&buffers_in_use[rbp->cs_index]); in ch_big_rbuf_recycle()
1451 * get a pre-allocated, pre-mapped receive buffer from free list.
1459 mutex_enter(&sa->ch_small_esbl); in ch_get_small_rbuf()
1460 rbp = sa->ch_small_esb_free; in ch_get_small_rbuf()
1462 sa->ch_small_esb_free = rbp->cs_next; in ch_get_small_rbuf()
1464 mutex_exit(&sa->ch_small_esbl); in ch_get_small_rbuf()
1470 * get a pre-allocated, pre-mapped receive buffer from free list.
1479 mutex_enter(&sa->ch_big_esbl); in ch_get_big_rbuf()
1480 rbp = sa->ch_big_esb_free; in ch_get_big_rbuf()
1482 sa->ch_big_esb_free = rbp->cs_next; in ch_get_big_rbuf()
1484 mutex_exit(&sa->ch_big_esbl); in ch_get_big_rbuf()
1492 (void) sge_stop(sa->sge); in pe_detach()
1522 adapter->slow_intr_mask |= F_PL_INTR_EXT; in ext_intr_task()
1526 * Interrupt-context handler for elmer0 external interrupts.
1533 adapter->slow_intr_mask &= ~F_PL_INTR_EXT; in t1_os_elmer0_ext_intr()
1536 schedule_work(&adapter->ext_intr_handler_task); in t1_os_elmer0_ext_intr()
1546 if (rmp->mc) { in t1_get_next_mcaddr()
1547 addr = rmp->mc->cmc_mca; in t1_get_next_mcaddr()
1548 rmp->mc = rmp->mc->cmc_next; in t1_get_next_mcaddr()
1560 for (; cnt; cnt--) { in pe_dma_handle_init()
1564 mutex_enter(&chp->ch_dh_lck); in pe_dma_handle_init()
1565 dhe->dhe_next = chp->ch_vdh; in pe_dma_handle_init()
1566 chp->ch_vdh = dhe; in pe_dma_handle_init()
1567 mutex_exit(&chp->ch_dh_lck); in pe_dma_handle_init()
1572 while (cnt--) { in pe_dma_handle_init()
1576 mutex_enter(&chp->ch_dh_lck); in pe_dma_handle_init()
1577 dhe->dhe_next = chp->ch_dh; in pe_dma_handle_init()
1578 chp->ch_dh = dhe; in pe_dma_handle_init()
1579 mutex_exit(&chp->ch_dh_lck); in pe_dma_handle_init()
1596 int mtu = (unsigned int)adapter->params.mtus[i]; in update_mtu_tab()
1605 struct cmac *mac = chp->port[0].mac; in pe_change_mtu()
1608 if (!mac->ops->set_mtu) { in pe_change_mtu()
1611 if (chp->ch_mtu < 68) { in pe_change_mtu()
1614 if (ret = mac->ops->set_mtu(mac, chp->ch_mtu)) { in pe_change_mtu()
1622 char fa_dst[6]; /* ethernet header */
1623 char fa_src[6]; /* ethernet header */
1624 ushort_t fa_typ; /* ethernet header */
1644 pesge *sge = chp->sge; in pe_make_fake_arp()
1654 bzero(bp->b_rptr, sizeof (struct fake_arp) + SZ_CPL_TX_PKT); in pe_make_fake_arp()
1657 cpl = (struct cpl_tx_pkt *)bp->b_rptr; in pe_make_fake_arp()
1658 cpl->opcode = CPL_TX_PKT; in pe_make_fake_arp()
1659 cpl->iff = 0; /* XXX port 0 needs fixing with NEMO */ in pe_make_fake_arp()
1660 cpl->ip_csum_dis = 1; /* no IP header cksum */ in pe_make_fake_arp()
1661 cpl->l4_csum_dis = 1; /* no tcp/udp cksum */ in pe_make_fake_arp()
1662 cpl->vlan_valid = 0; /* no vlan */ in pe_make_fake_arp()
1664 fap = (fake_arp_t *)&bp->b_rptr[SZ_CPL_TX_PKT]; in pe_make_fake_arp()
1668 bcopy(buf, fap->fa_dst, 6); /* overwrite dst mac */ in pe_make_fake_arp()
1669 chp->ch_ip = fap->fa_src_ip; /* not used yet */ in pe_make_fake_arp()
1670 bcopy(buf, fap->fa_dst_mac, 6); /* overwrite dst mac */ in pe_make_fake_arp()
1672 bp->b_wptr = bp->b_rptr + sizeof (struct fake_arp)+SZ_CPL_TX_PKT; in pe_make_fake_arp()
1712 gld_mac_info_t *macinfo = obj->ch_macp; in t1_os_link_changed()