summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/nxge/nxge_hio.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/io/nxge/nxge_hio.c')
-rw-r--r--usr/src/uts/common/io/nxge/nxge_hio.c71
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: