Lines Matching refs:sa

79 static void link_start(ch_t *sa, struct pe_port_t *pp);
80 static ch_esb_t *ch_alloc_small_esbbuf(ch_t *sa, uint32_t i);
81 static ch_esb_t *ch_alloc_big_esbbuf(ch_t *sa, uint32_t i);
84 static const struct board_info *pe_sa_init(ch_t *sa);
87 static void pe_free_driver_resources(ch_t *sa);
107 static int pe_small_rbuf_pool_init(ch_t *sa);
108 static int pe_big_rbuf_pool_init(ch_t *sa);
130 pe_intr(ch_t *sa) in pe_intr() argument
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()
152 ch_t *sa = NULL; in pe_init() local
155 sa = (ch_t *)xsa; in pe_init()
163 if (sa->init_counter == 0) { in pe_init()
164 for_each_port(sa, i) { 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()
175 (void) t1_init_hw_modules(sa); 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()
207 t1_interrupts_enable(sa); in pe_init()
212 (void) pe_change_mtu(sa); in pe_init()
217 (void) t1_tpi_read(sa, SUNI1x10GEXP_REG_TXXG_CONFIG_1 << 2, in pe_init()
218 &sa->txxg_cfg1); in pe_init()
224 link_start(ch_t *sa, struct pe_port_t *p) in link_start() argument
239 pe_stop(ch_t *sa) in pe_stop() argument
241 t1_interrupts_disable(sa); in pe_stop()
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()
257 pe_start(ch_t *sa, mblk_t *mp, uint32_t flg) in pe_start() argument
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()
308 if (is_T2(sa)) { 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()
336 sa->sge->intr_cnt.tx_need_cpl_space++; in pe_start()
341 sa->oerr++; in pe_start()
365 sa->sge->intr_cnt.tx_multi_mblks++; in pe_start()
413 if (sa->ch_config.enable_dvma) { in pe_start()
414 lseg = ch_bind_dvma_handle(sa, len, in pe_start()
418 sa->sge->intr_cnt.tx_no_dvma1++; in pe_start()
419 if ((lseg = ch_bind_dma_handle(sa, len, in pe_start()
423 sa->sge->intr_cnt.tx_no_dma1++; in pe_start()
444 lseg = ch_bind_dma_handle(sa, len, in pe_start()
448 sa->sge->intr_cnt.tx_no_dma1++; in pe_start()
467 lseg = ch_bind_dma_handle(sa, len, in pe_start()
471 sa->sge->intr_cnt.tx_no_dma1++; in pe_start()
511 if (sa->ch_config.enable_dvma) { in pe_start()
512 nseg = ch_bind_dvma_handle(sa, len, in pe_start()
516 sa->sge->intr_cnt.tx_no_dvma2++; in pe_start()
517 nseg = ch_bind_dma_handle(sa, len, in pe_start()
521 sa->sge->intr_cnt.tx_no_dma2++; in pe_start()
531 nseg = ch_bind_dma_handle(sa, len, in pe_start()
534 sa->sge->intr_cnt.tx_no_dma2++; in pe_start()
544 nseg = ch_bind_dma_handle(sa, len, in pe_start()
547 sa->sge->intr_cnt.tx_no_dma2++; 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()
586 ch_unbind_dma_handle(sa, cmp->ce_dh); in pe_start()
589 ch_unbind_dvma_handle(sa, cmp->ce_dh); in pe_start()
618 sa->oerr++; in pe_start()
626 pe_set_mac(ch_t *sa, unsigned char *ac_enaddr) in pe_set_mac() argument
628 sa->port[0].mac->ops->macaddress_set(sa->port[0].mac, ac_enaddr); in pe_set_mac()
633 pe_get_mac(ch_t *sa) in pe_get_mac() argument
635 return (sa->port[0].enaddr); in pe_get_mac()
640 pe_set_promiscuous(ch_t *sa, int flag) in pe_set_promiscuous() argument
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()
660 rm.chp = sa; in pe_set_promiscuous()
661 rm.mc = sa->ch_mc; in pe_set_promiscuous()
664 mutex_exit(&sa->ch_mc_lck); in pe_set_promiscuous()
668 pe_set_mc(ch_t *sa, uint8_t *ep, int flg) in pe_set_mc() argument
670 struct cmac *mac = sa->port[0].mac; 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()
700 sa->ch_mc_cnt--; 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()
714 rm.chp = sa; in pe_set_mc()
715 rm.mc = sa->ch_mc; in pe_set_mc()
718 mutex_exit(&sa->ch_mc_lck); in pe_set_mc()
749 pe_get_stats(ch_t *sa, uint64_t *speed, uint32_t *intrcnt, uint32_t *norcvbuf, in pe_get_stats() argument
764 pt = &(sa->port[0]); 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()
803 *oerrors = sa->oerr + sp->TxFramesAbortedDueToXSCollisions + in pe_get_stats()
1089 pe_sa_init(ch_t *sa) in pe_sa_init() argument
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()
1123 pe_small_rbuf_pool_init(ch_t *sa) in pe_small_rbuf_pool_init() argument
1132 if (is_T2(sa)) in pe_small_rbuf_pool_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()
1149 rbp = ch_alloc_small_esbbuf(sa, j); 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()
1170 pe_rbuf_pool_free(sa); in pe_small_rbuf_pool_init()
1182 pe_big_rbuf_pool_init(ch_t *sa) in pe_big_rbuf_pool_init() argument
1191 if (is_T2(sa)) in pe_big_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()
1208 rbp = ch_alloc_big_esbbuf(sa, j); 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()
1226 pe_rbuf_pool_free(sa); in pe_big_rbuf_pool_init()
1237 ch_alloc_small_esbbuf(ch_t *sa, uint32_t i) in ch_alloc_small_esbbuf() argument
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()
1259 rbp->cs_sa = sa; in ch_alloc_small_esbbuf()
1274 ch_alloc_big_esbbuf(ch_t *sa, uint32_t i) in ch_alloc_big_esbbuf() argument
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()
1296 rbp->cs_sa = sa; in ch_alloc_big_esbbuf()
1309 pe_rbuf_pool_free(ch_t *sa) in pe_rbuf_pool_free() argument
1313 mutex_enter(&sa->ch_small_esbl); 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()
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()
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()
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()
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()
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() local
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()
1413 ch_t *sa = rbp->cs_sa; in ch_big_rbuf_recycle() local
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()
1455 ch_get_small_rbuf(ch_t *sa) in ch_get_small_rbuf() argument
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()
1475 ch_get_big_rbuf(ch_t *sa) in ch_get_big_rbuf() argument
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()
1490 pe_detach(ch_t *sa) in pe_detach() argument
1492 (void) sge_stop(sa->sge); in pe_detach()
1494 pe_free_driver_resources(sa); in pe_detach()
1498 pe_free_driver_resources(ch_t *sa) in pe_free_driver_resources() argument
1500 if (sa) { in pe_free_driver_resources()
1501 t1_free_sw_modules(sa); in pe_free_driver_resources()
1504 pe_rbuf_pool_free(sa); in pe_free_driver_resources()