Lines Matching refs:nxge

38 #include <sys/nxge/nxge_impl.h>
39 #include <sys/nxge/nxge_fzc.h>
40 #include <sys/nxge/nxge_rxdma.h>
41 #include <sys/nxge/nxge_txdma.h>
42 #include <sys/nxge/nxge_hio.h>
78 * nxge
87 nxge_t *nxge)
94 nxge->environs = SOLARIS_DOMAIN;
99 if ((ddi_prop_lookup_string(DDI_DEV_T_ANY, nxge->dip,
103 nxge->environs = SOLARIS_GUEST_DOMAIN;
105 nxge->niu_type = N2_NIU;
106 NXGE_DEBUG_MSG((nxge, HIO_CTL,
121 * nxge
130 nxge_hio_init(nxge_t *nxge)
135 nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
140 nxge->nxge_hw_p->hio = (uintptr_t)nhd;
147 nxge->tdc_is_shared[i] = B_FALSE;
150 nxge->tx_hio_groups[i].ghandle = NULL;
151 nxge->tx_hio_groups[i].nxgep = nxge;
152 nxge->tx_hio_groups[i].type = MAC_RING_TYPE_TX;
153 nxge->tx_hio_groups[i].gindex = 0;
154 nxge->tx_hio_groups[i].sindex = 0;
158 nxge->rx_hio_groups[i].ghandle = NULL;
159 nxge->rx_hio_groups[i].nxgep = nxge;
160 nxge->rx_hio_groups[i].type = MAC_RING_TYPE_RX;
161 nxge->rx_hio_groups[i].gindex = 0;
162 nxge->rx_hio_groups[i].sindex = 0;
163 nxge->rx_hio_groups[i].started = B_FALSE;
164 nxge->rx_hio_groups[i].port_default_grp = B_FALSE;
165 nxge->rx_hio_groups[i].rdctbl = -1;
166 nxge->rx_hio_groups[i].n_mac_addrs = 0;
177 nxge_hio_uninit(nxge_t *nxge)
179 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
181 ASSERT(nxge->nxge_hw_p->ndevs == 0);
186 nxge->nxge_hw_p->hio = 0;
208 nxge_t *nxge,
217 set = &nxge->tx_set;
220 set = &nxge->rx_set;
248 * nxge_grp_cleanup(p_nxge_t nxge)
253 * nxge
256 nxge_grp_cleanup(p_nxge_t nxge)
261 MUTEX_ENTER(&nxge->group_lock);
266 set = &nxge->rx_set;
277 set = &nxge->tx_set;
284 MUTEX_EXIT(&nxge->group_lock);
294 * nxge
304 nxge_t *nxge,
312 group->nxge = nxge;
314 MUTEX_ENTER(&nxge->group_lock);
318 set = &nxge->tx_set;
321 set = &nxge->rx_set;
339 MUTEX_EXIT(&nxge->group_lock);
341 NXGE_DEBUG_MSG((nxge, HIO_CTL,
344 nxge->mac.portnum, group->sequence));
351 nxge_t *nxge,
360 MUTEX_ENTER(&nxge->group_lock);
364 set = &nxge->tx_set;
367 set = &nxge->rx_set;
372 MUTEX_EXIT(&nxge->group_lock);
383 MUTEX_EXIT(&nxge->group_lock);
385 NXGE_DEBUG_MSG((nxge, HIO_CTL,
388 nxge->mac.portnum, group->sequence));
401 nxge_grp_dc_remove(nxge, type, group->dc->channel);
413 * nxge
423 nxge_t *nxge,
428 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
434 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_grp_dc_add"));
441 set = &nxge->tx_set;
443 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
449 set = &nxge->rx_set;
451 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
458 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
462 NXGE_DEBUG_MSG((nxge, HIO_CTL,
465 nxge->mac.portnum, group->sequence, group->count, channel));
467 MUTEX_ENTER(&nxge->group_lock);
470 MUTEX_EXIT(&nxge->group_lock);
473 MUTEX_EXIT(&nxge->group_lock);
475 if (!(dc = nxge_grp_dc_find(nxge, type, channel))) {
476 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
486 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
506 if (isLDOMguest(nxge)) {
507 error = nxge_hio_ldsv_add(nxge, dc);
519 if ((status = (*dc->init)(nxge, channel)) != NXGE_OK) {
520 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
530 nxge_grp_dc_append(nxge, group, dc);
534 nxge->tdc_is_shared[channel] = B_FALSE;
538 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_grp_dc_add"));
545 nxge_t *nxge,
549 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
556 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_grp_dc_remove"));
558 if ((dc = nxge_grp_dc_find(nxge, type, channel)) == 0)
568 if (isLDOMguest(nxge)) {
569 (void) nxge_hio_intr_remove(nxge, type, channel);
572 NXGE_DEBUG_MSG((nxge, HIO_CTL,
574 nxge->mac.portnum, group->sequence, group->count,
579 set = dc->type == VP_BOUND_TX ? &nxge->tx_set : &nxge->rx_set;
582 if (nxge_grp_dc_unlink(nxge, group, channel) != dc) {
584 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
599 (*uninit)(nxge, channel);
602 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_grp_dc_remove"));
607 nxge_t *nxge,
611 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
616 if (!isLDOMguest(nxge)) {
626 if (current->vr && current->vr->nxge ==
627 (uintptr_t)nxge) {
645 * nxge
657 nxge_t *nxge,
661 MUTEX_ENTER(&nxge->group_lock);
681 MUTEX_EXIT(&nxge->group_lock);
690 * nxge
701 nxge_t *nxge,
707 MUTEX_ENTER(&nxge->group_lock);
710 MUTEX_EXIT(&nxge->group_lock);
715 MUTEX_EXIT(&nxge->group_lock);
733 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
745 MUTEX_EXIT(&nxge->group_lock);
756 * nxge
795 * nxge
960 static void nxge_hio_tdc_unshare(nxge_t *nxge, int dev_grpid, int channel);
961 static void nxge_hio_rdc_unshare(nxge_t *nxge, int dev_grpid, int channel);
972 * nxge
980 nxge_hio_init(nxge_t *nxge)
985 nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
989 if (isLDOMguest(nxge))
993 nxge->nxge_hw_p->hio = (uintptr_t)nhd;
996 if ((nxge->environs == SOLARIS_DOMAIN) &&
997 (nxge->niu_type == N2_NIU)) {
998 if (nxge->niu_hsvc_available == B_TRUE) {
999 hsvc_info_t *niu_hsvc = &nxge->niu_hsvc;
1007 nxge->environs = SOLARIS_SERVICE_DOMAIN;
1008 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
1021 nxge->tx_hio_groups[i].ghandle = NULL;
1022 nxge->tx_hio_groups[i].nxgep = nxge;
1023 nxge->tx_hio_groups[i].type = MAC_RING_TYPE_TX;
1024 nxge->tx_hio_groups[i].gindex = 0;
1025 nxge->tx_hio_groups[i].sindex = 0;
1029 nxge->rx_hio_groups[i].ghandle = NULL;
1030 nxge->rx_hio_groups[i].nxgep = nxge;
1031 nxge->rx_hio_groups[i].type = MAC_RING_TYPE_RX;
1032 nxge->rx_hio_groups[i].gindex = 0;
1033 nxge->rx_hio_groups[i].sindex = 0;
1034 nxge->rx_hio_groups[i].started = B_FALSE;
1035 nxge->rx_hio_groups[i].port_default_grp = B_FALSE;
1036 nxge->rx_hio_groups[i].rdctbl = -1;
1037 nxge->rx_hio_groups[i].n_mac_addrs = 0;
1040 if (!isLDOMs(nxge)) {
1059 nxge->tdc_is_shared[i] = B_FALSE;
1062 nxge->shares[i].nxgep = nxge;
1063 nxge->shares[i].index = 0;
1064 nxge->shares[i].vrp = NULL;
1065 nxge->shares[i].tmap = 0;
1066 nxge->shares[i].rmap = 0;
1067 nxge->shares[i].rxgroup = 0;
1068 nxge->shares[i].active = B_FALSE;
1072 nxge_hio_hv_init(nxge);
1074 if (isLDOMservice(nxge)) {
1075 NXGE_DEBUG_MSG((nxge, HIO_CTL,
1085 nxge_hio_group_mac_add(nxge_t *nxge, nxge_ring_group_t *g,
1091 mutex_enter(nxge->genlock);
1096 group = &nxge->pt_config.rdc_grps[g->rdctbl];
1098 group->port = NXGE_GET_PORT_NUM(nxge->function_num);
1103 mutex_exit(nxge->genlock);
1108 if ((rv = nxge_m_mmac_add_g((void *)nxge, macaddr,
1113 mutex_enter(nxge->genlock);
1115 mutex_exit(nxge->genlock);
1149 p_nxge_t nxge = group->nxgep;
1159 mutex_enter(nxge->genlock);
1161 if (!nxge->primary && group->port_default_grp) {
1162 rv = nxge_hio_set_unicst((void *)nxge, mac_addr);
1163 mutex_exit(nxge->genlock);
1171 vr = (nxge_hio_vr_t *)nxge->shares[group->sindex].vrp;
1173 mutex_exit(nxge->genlock);
1177 mutex_exit(nxge->genlock);
1182 if ((rv = nxge_hio_group_mac_add(nxge, group, mac_addr)) != 0) {
1208 p_nxge_t nxge = group->nxgep;
1218 mutex_enter(nxge->genlock);
1220 mmac_info = &nxge->nxge_mmac_info;
1223 if (group->port_default_grp && nxge->primary) {
1225 if (ether_cmp(&addrp, &nxge->ouraddr) == 0) {
1226 rv = nxge_hio_clear_unicst(nxge, mac_addr);
1227 mutex_exit(nxge->genlock);
1230 mutex_exit(nxge->genlock);
1234 mutex_exit(nxge->genlock);
1239 mutex_exit(nxge->genlock);
1244 if ((rv = nxge_m_mmac_remove(nxge, slot)) != 0) {
1248 mutex_enter(nxge->genlock);
1250 mutex_exit(nxge->genlock);
1399 nxge_t *nxge,
1405 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
1416 major = nxge->niu_hsvc.hsvc_major;
1420 NXGE_ERROR_MSG((nxge, HIO_CTL,
1432 (nxge->niu_cfg_hdl, vr->region, cookie, &vr->cookie))) {
1433 NXGE_ERROR_MSG((nxge, HIO_CTL,
1443 NXGE_DEBUG_MSG((nxge, HIO_CTL,
1457 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
1484 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
1508 nxge_t *nxge = (nxge_t *)vr->nxge;
1514 nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
1521 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
1534 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
1546 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
1557 p_nxge_t nxge = (p_nxge_t)arg;
1560 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
1562 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_share"));
1566 NXGE_ERROR_MSG((nxge, HIO_CTL, "HV assign function(s) NULL"));
1573 if ((vr = nxge_hio_vr_share(nxge)) == 0)
1576 shp = &nxge->shares[vr->region];
1577 shp->nxgep = nxge;
1586 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_share"));
1619 nxge_t *nxge;
1624 nxge = shp->nxgep;
1628 rh = nxge->rx_ring_handles;
1629 offset = nxge->pt_config.hw_config.start_rdc;
1633 rh = nxge->tx_ring_handles;
1634 offset = nxge->pt_config.hw_config.tdc.start;
1658 nxge_t *nxge;
1676 nxge = rg->nxgep;
1689 group = nxge->rx_set.group[rg->gindex];
1723 group = nxge->tx_set.group[rg->gindex];
1743 vr->tdc_tbl = nxge->pt_config.hw_config.def_mac_txdma_grpid +
1782 nxge_t *nxge;
1792 nxge = shp->nxgep;
1818 if ((rv = nxge_hio_share_assign(nxge, cookie,
1830 *rcookie = (((uint64_t)nxge->niu_cfg_hdl) << 32) | vr->cookie;
1860 * nxge
1869 nxge_t *nxge)
1871 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
1876 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_vr_share"));
1886 if (nxge->function_num == 0) {
1890 } else if (nxge->function_num == 1) {
1897 nxge->function_num);
1901 if (nhd->vr[region].nxge == 0)
1911 vr->nxge = (uintptr_t)nxge;
1918 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_vr_share"));
1927 nxge_t *nxge = (nxge_t *)vr->nxge;
1932 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_unshare"));
1934 if (!nxge) {
1935 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_unshare: "
1936 "vr->nxge is NULL"));
1944 * nxge_hio_hostinfo_uninit(nxge, vr);
1949 * (void) nxge_fzc_rdc_tbl_unbind(nxge, vr->rdc_tbl);
1952 nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
1964 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_unshare"));
1970 nxge_t *nxge;
1977 ASSERT(vr->nxge != NULL);
1978 nxge = (nxge_t *)vr->nxge;
1980 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_addres"));
1990 nxge->pt_config.hw_config.def_mac_txdma_grpid;
1991 group = nxge->tx_set.group[groupid];
1995 nxge->pt_config.hw_config.def_mac_rxdma_grpid;
1996 group = nxge->rx_set.group[groupid];
2002 NXGE_DEBUG_MSG((nxge, HIO_CTL, "There is no rings associated "
2009 if ((rv = nxge_hio_dc_share(nxge, vr, type, i)) < 0) {
2020 NXGE_DEBUG_MSG((nxge, HIO_CTL,
2025 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_addres"));
2036 nxge_t *nxge = (nxge_t *)vr->nxge;
2039 if (!nxge) {
2040 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_remres: "
2041 "vr->nxge is NULL"));
2045 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_remres(%lx)", res_map));
2055 nxge_hio_dc_unshare(nxge, vr, type, dc->channel);
2059 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_remres: "
2063 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_remres"));
2072 * nxge
2096 nxge_t *nxge,
2099 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
2100 nxge_grp_set_t *set = &nxge->tx_set;
2104 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_tdc_share"));
2109 ring = nxge->tx_rings->rings[channel];
2128 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
2139 nxge->tdc_is_shared[channel] = B_TRUE;
2142 if (nxge_intr_remove(nxge, VP_BOUND_TX, channel) != NXGE_OK) {
2143 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_tdc_share: "
2150 (void) nxge_txdma_channel_disable(nxge, channel);
2157 nxge_grp_dc_remove(nxge, VP_BOUND_TX, channel);
2163 if (nxge_init_fzc_tdc(nxge, channel) != NXGE_OK) {
2164 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
2169 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_tdc_share"));
2180 * nxge
2207 nxge_t *nxge,
2211 nxge_grp_set_t *set = &nxge->rx_set;
2214 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_rdc_share"));
2217 if (nxge_intr_remove(nxge, VP_BOUND_RX, channel) != NXGE_OK) {
2218 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_rdc_share: "
2225 if (nxge_rx_mac_disable(nxge) != NXGE_OK) {
2226 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_rdc_share: "
2231 (void) nxge_ipp_drain(nxge);
2235 if (nxge_disable_rxdma_channel(nxge, channel) != NXGE_OK) {
2236 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_rdc_share: "
2245 nxge_grp_dc_remove(nxge, VP_BOUND_RX, channel);
2256 if (nxge_rx_mac_enable(nxge) != NXGE_OK) {
2257 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
2265 if (nxge_init_fzc_rdc(nxge, channel) != NXGE_OK) {
2266 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
2274 rdc_grp = &nxge->pt_config.rdc_grps[vr->rdc_tbl];
2277 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_rdc_share"));
2288 * nxge
2300 nxge_t *nxge,
2305 nxge_hio_data_t *nhd = (nxge_hio_data_t *)nxge->nxge_hw_p->hio;
2310 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_dc_share(%cdc %d",
2316 nxge_hio_tdc_share(nxge, channel) :
2317 nxge_hio_rdc_share(nxge, vr, channel);
2321 nxge_hio_rdc_unshare(nxge, vr->rdc_tbl, channel);
2323 nxge_hio_tdc_unshare(nxge, vr->tdc_tbl, channel);
2345 MUTEX_ENTER(&nxge->group_lock);
2351 group->nxge = nxge;
2358 MUTEX_EXIT(&nxge->group_lock);
2360 NXGE_ERROR_MSG((nxge, HIO_CTL,
2364 nxge_grp_dc_append(nxge, group, dc);
2366 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_dc_share"));
2377 * nxge
2387 nxge_t *nxge,
2391 nxge_grp_set_t *set = &nxge->tx_set;
2395 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_tdc_unshare"));
2400 grpid = dev_grpid - nxge->pt_config.hw_config.def_mac_txdma_grpid;
2403 if ((nxge_grp_dc_add(nxge, group, VP_BOUND_TX, channel))) {
2404 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_tdc_unshare: "
2410 if (nxge_intr_add(nxge, VP_BOUND_TX, channel) != NXGE_OK) {
2411 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_tdc_unshare: "
2415 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_tdc_unshare"));
2424 * nxge
2434 nxge_t *nxge,
2438 nxge_grp_set_t *set = &nxge->rx_set;
2443 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_rdc_unshare"));
2446 if (nxge_rx_mac_disable(nxge) != NXGE_OK) {
2447 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_rdc_unshare: "
2452 (void) nxge_ipp_drain(nxge);
2456 if (nxge_disable_rxdma_channel(nxge, channel) != NXGE_OK) {
2457 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_rdc_unshare: "
2464 grpid = dev_grpid - nxge->pt_config.hw_config.def_mac_rxdma_grpid;
2474 if ((nxge_grp_dc_add(nxge, group, VP_BOUND_RX, channel))) {
2476 if (nxge_rx_mac_enable(nxge) != NXGE_OK) {
2477 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
2480 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL, "nxge_hio_rdc_unshare: "
2488 if (nxge_rx_mac_enable(nxge) != NXGE_OK) {
2489 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
2495 if (nxge_intr_add(nxge, VP_BOUND_RX, channel) != NXGE_OK) {
2496 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
2501 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_rdc_unshare"));
2504 if (nxge->rx_ring_handles[i].channel == channel) {
2506 (mac_ring_driver_t)&nxge->rx_ring_handles[i],
2507 nxge->rx_ring_handles[i].ring_gen_num);
2518 * nxge
2530 nxge_t *nxge,
2538 NXGE_DEBUG_MSG((nxge, HIO_CTL, "==> nxge_hio_dc_unshare(%cdc %d)",
2545 if ((dc = nxge_grp_dc_unlink(nxge, group, channel)) == 0) {
2546 NXGE_ERROR_MSG((nxge, NXGE_ERR_CTL,
2555 nxge_hio_rdc_unshare(nxge, vr->rdc_tbl, channel);
2557 nxge_hio_tdc_unshare(nxge, vr->tdc_tbl, channel);
2560 NXGE_DEBUG_MSG((nxge, HIO_CTL, "<== nxge_hio_dc_unshare"));
2572 nxge_hio_rxdma_bind_intr(nxge_t *nxge, rx_rcr_ring_t *ring, int channel)
2582 if (!(dc = nxge_grp_dc_find(nxge, VP_BOUND_RX, channel))) {
2589 control = nxge->ldgvp;