vlds.c revision 49b225e1cfa7bbf7738d4df0a03f18e3283426eb
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * CDDL HEADER START
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * The contents of this file are subject to the terms of the
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Common Development and Distribution License (the "License").
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * You may not use this file except in compliance with the License.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * See the License for the specific language governing permissions
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * and limitations under the License.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * When distributing Covered Code, include this CDDL HEADER in each
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * If applicable, add the following below this CDDL HEADER, with the
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * fields enclosed by brackets "[]" replaced with your own identifying
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * information: Portions Copyright [yyyy] [name of copyright owner]
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * CDDL HEADER END
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Use is subject to license terms.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * LDOMs Domain Services Device Driver
typedef struct vlds_state {
int instance;
} vlds_state_t;
static void *vlds_statep;
typedef struct vlds_recv_hdr {
typedef struct vlds_svc_info {
static int vlds_ports_inited = 0;
int *rvalp);
void **resultp);
static void vlds_mdeg_init(void);
static int vlds_mdeg_register(void);
static int vlds_mdeg_unregister(void);
(void *)&modldrv,
static ulong_t *
vlds_minor_alloc(void)
return (vlds_minor_bitmap);
static index_t
vlds_minor_get(void)
return (idx);
vlds_minor_init(void)
_init(void)
(void) vlds_mdeg_register();
_fini(void)
(void) vlds_mdeg_unregister();
switch (cmd) {
case DDI_INFO_DEVT2DEVINFO:
return (DDI_SUCCESS);
case DDI_INFO_DEVT2INSTANCE:
*resultp = 0;
return (DDI_SUCCESS);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_SUCCESS);
return (DDI_FAILURE);
return (DDI_SUCCESS);
int minor;
return (EINVAL);
return (ENXIO);
if (minor == 0)
return (EBUSY);
return (ENOMEM);
return (EINVAL);
return (ENXIO);
int rv;
__func__);
return (rv);
#define ARGTOINT(x) ((int)(x))
char *str;
if (len == 0) {
len);
return (EINVAL);
return (EFAULT);
return (EINVAL);
int rv;
if (len > 0) {
if (tstr) {
if (rv) {
return (EFAULT);
char *servp;
uint_t n;
int rv;
(void *)capp);
return (EFAULT);
nver);
return (EINVAL);
return (rv);
__func__);
return (EINVAL);
return (EFAULT);
for (i = 0; i < nver; i++) {
int *rvalp)
char *servicep;
int rv;
return (ENXIO);
switch (cmd) {
case VLDS_SVC_REG:
mode) != 0) {
__func__);
return (EFAULT);
mode)) != 0) {
return (rv);
return (rv);
if (rv) {
return (rv);
__func__);
return (EFAULT);
case VLDS_UNREG_HDL:
mode) != 0) {
__func__);
return (EFAULT);
return (rv);
return (rv);
case VLDS_HDL_LOOKUP:
mode) != 0) {
__func__);
return (EFAULT);
if (maxhdls == 0) {
return (EINVAL);
mode)) != 0) {
return (EFAULT);
return (EINVAL);
if (rv) {
if (hdlsp) {
return (rv);
if (hdlsp) {
return (EFAULT);
if (hdlsp) {
return (EFAULT);
case VLDS_DMN_LOOKUP:
mode) != 0) {
__func__);
return (EFAULT);
return (rv);
return (rv);
case VLDS_SEND_MSG:
char *bufp;
mode) != 0) {
__func__);
return (EFAULT);
return (rv);
buflen);
mode) != 0) {
return (EFAULT);
return (rv);
buflen);
case VLDS_RECV_MSG:
mode) != 0) {
__func__);
return (EFAULT);
return (rv);
return (rv);
return (EFAULT);
return (EFBIG);
case VLDS_HDL_ISREADY:
mode) != 0) {
return (EFAULT);
return (rv);
return (EFAULT);
case VLDS_DOM_NAM2HDL:
char *domain_name;
mode) != 0) {
return (EFAULT);
return (EFAULT);
return (EINVAL);
return (rv);
return (EFAULT);
case VLDS_DOM_HDL2NAM:
char *domain_name;
mode) != 0) {
return (EFAULT);
return (rv);
return (rv);
return (EINVAL);
static uint_t
return (sflags);
int idx;
int rv;
return (MDEG_FAILURE);
if (vlds_ports_inited) {
return (MDEG_SUCCESS);
vlds_mdeg_register(void)
int rv;
return (DDI_FAILURE);
return (DDI_SUCCESS);
vlds_mdeg_unregister(void)
if (nchan <= 0) {
__func__);
nchan);
__func__);
int rv;
char *dom_name;
return (MDEG_FAILURE);
portno);
return (MDEG_FAILURE);
return (MDEG_FAILURE);
if (rv != 0) {
if (vlds_ports_inited) {
return (MDEG_FAILURE);
return (MDEG_SUCCESS);
vlds_mdeg_init(void)
int num_nodes;
int listsz;
int nvlds;
char *dom_name;
char *svc_name;
if (nvlds <= 0) {
goto done;
for (i = 0; i < nvlds; i++) {
if (i >= nvlds) {
goto done;
done:
char *servicep;
int minor;
hdl);
int minor;
void *dpsp;
if (dpsp) {
__func__);
hdl);
EVCH_SLEEP)) {
int minor;
void *dpsp;
int rv;
__func__);
return (ENOBUFS);
if (buflen == 0) {
*msglenp = 0;
return (EFBIG);
if (rv == 0) {
return (EINTR);
return (EINVAL);
return (EFBIG);
if (rv == 0) {
if (rv != 0) {
return (EFAULT);
__func__);
return (ENOBUFS);
int mode)
void *dpsp;
int rv;
return (rv);
return (EINVAL);
return (ENXIO);
return (rv);