diff options
Diffstat (limited to 'usr/src/uts/common/io/nxge/nxge_hio.c')
-rw-r--r-- | usr/src/uts/common/io/nxge/nxge_hio.c | 71 |
1 files changed, 35 insertions, 36 deletions
diff --git a/usr/src/uts/common/io/nxge/nxge_hio.c b/usr/src/uts/common/io/nxge/nxge_hio.c index 827553301c..b58acde5e8 100644 --- a/usr/src/uts/common/io/nxge/nxge_hio.c +++ b/usr/src/uts/common/io/nxge/nxge_hio.c @@ -41,9 +41,6 @@ #include <sys/nxge/nxge_txdma.h> #include <sys/nxge/nxge_hio.h> -#define NXGE_HIO_SHARE_MIN_CHANNELS 2 -#define NXGE_HIO_SHARE_MAX_CHANNELS 2 - /* * External prototypes */ @@ -1057,23 +1054,6 @@ nxge_hio_init( NXGE_DEBUG_MSG((nxge, HIO_CTL, "Hybrid IO-capable service domain")); return (NXGE_OK); - } else { - /* - * isLDOMguest(nxge) == B_TRUE - */ - nx_vio_fp_t *vio; - nhd->type = NXGE_HIO_TYPE_GUEST; - - vio = &nhd->hio.vio; - vio->__register = (vio_net_resource_reg_t) - modgetsymvalue("vio_net_resource_reg", 0); - vio->unregister = (vio_net_resource_unreg_t) - modgetsymvalue("vio_net_resource_unreg", 0); - - if (vio->__register == 0 || vio->unregister == 0) { - NXGE_ERROR_MSG((nxge, VIR_CTL, "vio_net is absent!")); - return (NXGE_ERROR); - } } return (0); @@ -1144,12 +1124,16 @@ nxge_hio_clear_unicst(p_nxge_t nxgep, const uint8_t *mac_addr) static int nxge_hio_add_mac(void *arg, const uint8_t *mac_addr) { - nxge_ring_group_t *group = (nxge_ring_group_t *)arg; - p_nxge_t nxge = group->nxgep; - int rv; - nxge_hio_vr_t *vr; /* The Virtualization Region */ + nxge_ring_group_t *group = (nxge_ring_group_t *)arg; + p_nxge_t nxge = group->nxgep; + int rv; + nxge_hio_vr_t *vr; /* The Virtualization Region */ ASSERT(group->type == MAC_RING_TYPE_RX); + ASSERT(group->nxgep != NULL); + + if (isLDOMguest(group->nxgep)) + return (0); mutex_enter(nxge->genlock); @@ -1174,8 +1158,7 @@ nxge_hio_add_mac(void *arg, const uint8_t *mac_addr) /* * Program the mac address for the group. */ - if ((rv = nxge_hio_group_mac_add(nxge, group, - mac_addr)) != 0) { + if ((rv = nxge_hio_group_mac_add(nxge, group, mac_addr)) != 0) { return (rv); } @@ -1206,6 +1189,10 @@ nxge_hio_rem_mac(void *arg, const uint8_t *mac_addr) int rv, slot; ASSERT(group->type == MAC_RING_TYPE_RX); + ASSERT(group->nxgep != NULL); + + if (isLDOMguest(group->nxgep)) + return (0); mutex_enter(nxge->genlock); @@ -1253,14 +1240,16 @@ nxge_hio_group_start(mac_group_driver_t gdriver) int dev_gindex; ASSERT(group->type == MAC_RING_TYPE_RX); + ASSERT(group->nxgep != NULL); -#ifdef later ASSERT(group->nxgep->nxge_mac_state == NXGE_MAC_STARTED); -#endif if (group->nxgep->nxge_mac_state != NXGE_MAC_STARTED) return (ENXIO); mutex_enter(group->nxgep->genlock); + if (isLDOMguest(group->nxgep)) + goto nxge_hio_group_start_exit; + dev_gindex = group->nxgep->pt_config.hw_config.def_mac_rxdma_grpid + group->gindex; rdc_grp_p = &group->nxgep->pt_config.rdc_grps[dev_gindex]; @@ -1289,9 +1278,9 @@ nxge_hio_group_start(mac_group_driver_t gdriver) (void) nxge_init_fzc_rdc_tbl(group->nxgep, rdc_grp_p, rdctbl); +nxge_hio_group_start_exit: group->started = B_TRUE; mutex_exit(group->nxgep->genlock); - return (0); } @@ -1305,6 +1294,9 @@ nxge_hio_group_stop(mac_group_driver_t gdriver) mutex_enter(group->nxgep->genlock); group->started = B_FALSE; + if (isLDOMguest(group->nxgep)) + goto nxge_hio_group_stop_exit; + /* * Unbind the RDC table previously bound for this group. * @@ -1314,6 +1306,7 @@ nxge_hio_group_stop(mac_group_driver_t gdriver) if (group->gindex != 0) (void) nxge_fzc_rdc_tbl_unbind(group->nxgep, group->rdctbl); +nxge_hio_group_stop_exit: mutex_exit(group->nxgep->genlock); } @@ -1334,20 +1327,26 @@ nxge_hio_group_get(void *arg, mac_ring_type_t type, int groupid, group->gindex = groupid; group->sindex = 0; /* not yet bound to a share */ - dev_gindex = nxgep->pt_config.hw_config.def_mac_rxdma_grpid + - groupid; + if (!isLDOMguest(nxgep)) { + dev_gindex = + nxgep->pt_config.hw_config.def_mac_rxdma_grpid + + groupid; - if (nxgep->pt_config.hw_config.def_mac_rxdma_grpid == - dev_gindex) - group->port_default_grp = B_TRUE; + if (nxgep->pt_config.hw_config.def_mac_rxdma_grpid == + dev_gindex) + group->port_default_grp = B_TRUE; + + infop->mgi_count = + nxgep->pt_config.rdc_grps[dev_gindex].max_rdcs; + } else { + infop->mgi_count = NXGE_HIO_SHARE_MAX_CHANNELS; + } infop->mgi_driver = (mac_group_driver_t)group; infop->mgi_start = nxge_hio_group_start; infop->mgi_stop = nxge_hio_group_stop; infop->mgi_addmac = nxge_hio_add_mac; infop->mgi_remmac = nxge_hio_rem_mac; - infop->mgi_count = - nxgep->pt_config.rdc_grps[dev_gindex].max_rdcs; break; case MAC_RING_TYPE_TX: |