/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#include <string.h>
#include <assert.h>
#include <pcidr.h>
#include <pcidr_cfga.h>
/*
* misc config_admin(3cfgadm) related routines
*/
static struct {
char *name;
} pcidr_cfga_stat_nametab[] = {
{CFGA_STAT_NONE, "CFGA_STAT_NONE"},
{CFGA_STAT_EMPTY, "CFGA_STAT_EMPTY"},
{CFGA_STAT_DISCONNECTED, "CFGA_STAT_DISCONNECTED"},
{CFGA_STAT_CONNECTED, "CFGA_STAT_CONNECTED"},
{CFGA_STAT_UNCONFIGURED, "CFGA_STAT_UNCONFIGURED"},
{CFGA_STAT_CONFIGURED, "CFGA_STAT_CONFIGURED"},
};
static int pcidr_cfga_stat_nametab_len =
sizeof (pcidr_cfga_stat_nametab) / sizeof (pcidr_cfga_stat_nametab[0]);
char *
{
int i;
for (i = 0; i < pcidr_cfga_stat_nametab_len; i++) {
return (pcidr_cfga_stat_nametab[i].name);
}
return (NULL);
}
static struct {
char *name;
} pcidr_cfga_cmd_nametab[] = {
{CFGA_CMD_NONE, "CFGA_CMD_NONE"},
{CFGA_CMD_LOAD, "CFGA_CMD_LOAD"},
{CFGA_CMD_UNLOAD, "CFGA_CMD_UNLOAD"},
{CFGA_CMD_CONNECT, "CFGA_CMD_CONNECT"},
{CFGA_CMD_DISCONNECT, "CFGA_CMD_DISCONNECT"},
{CFGA_CMD_CONFIGURE, "CFGA_CMD_CONFIGURE"},
{CFGA_CMD_UNCONFIGURE, "CFGA_CMD_UNCONFIGURE"},
};
static int pcidr_cfga_cmd_nametab_len =
sizeof (pcidr_cfga_cmd_nametab) / sizeof (pcidr_cfga_cmd_nametab[0]);
char *
{
int i;
for (i = 0; i < pcidr_cfga_cmd_nametab_len; i++) {
return (pcidr_cfga_cmd_nametab[i].name);
}
return (NULL);
}
static struct {
char *name;
} pcidr_cfga_cond_nametab[] = {
{CFGA_COND_UNKNOWN, "CFGA_COND_UNKNOWN"},
{CFGA_COND_OK, "CFGA_COND_OK"},
{CFGA_COND_FAILING, "CFGA_COND_FAILING"},
{CFGA_COND_FAILED, "CFGA_COND_FAILED"},
{CFGA_COND_UNUSABLE, "CFGA_COND_UNUSABLE"},
};
static int pcidr_cfga_cond_nametab_len =
sizeof (pcidr_cfga_cond_nametab) / sizeof (pcidr_cfga_cond_nametab[0]);
char *
{
int i;
for (i = 0; i < pcidr_cfga_cond_nametab_len; i++) {
return (pcidr_cfga_cond_nametab[i].name);
}
return (NULL);
}
static struct {
char *name;
} pcidr_cfga_err_nametab[] = {
{CFGA_OK, "CFGA_OK"},
{CFGA_NACK, "CFGA_NACK"},
{CFGA_NOTSUPP, "CFGA_NOTSUPP"},
{CFGA_OPNOTSUPP, "CFGA_OPNOTSUPP"},
{CFGA_PRIV, "CFGA_PRIV"},
{CFGA_BUSY, "CFGA_BUSY"},
{CFGA_SYSTEM_BUSY, "CFGA_SYSTEM_BUSY"},
{CFGA_DATA_ERROR, "CFGA_DATA_ERROR"},
{CFGA_LIB_ERROR, "CFGA_LIB_ERROR"},
{CFGA_NO_LIB, "CFGA_NO_LIB"},
{CFGA_INSUFFICENT_CONDITION, "CFGA_INSUFFICENT_CONDITION"},
{CFGA_INVAL, "CFGA_INVAL"},
{CFGA_ERROR, "CFGA_ERROR"},
{CFGA_APID_NOEXIST, "CFGA_APID_NOEXIST"},
{CFGA_ATTR_INVAL, "CFGA_ATTR_INVAL"},
};
static int pcidr_cfga_err_nametab_len =
sizeof (pcidr_cfga_err_nametab) / sizeof (pcidr_cfga_err_nametab[0]);
char *
{
int i;
for (i = 0; i < pcidr_cfga_err_nametab_len; i++) {
return (pcidr_cfga_err_nametab[i].name);
}
return (NULL);
}
void
{
char *str;
prestr = "";
str = "(unrecognized cfga_stat_t value!)";
str = "(unrecognized cfga_stat_t value!)";
str = "(unrecognized cfga_cond_t value!)";
}
/*
* for use with config_admin(3cfgadm) functions in their
* <struct cfga_msg *msgp> parameter
*/
int
{
prestr = "";
return (0);
}
/*
* for use with config_admin(3cfgadm) functions in their
* <struct cfga_confirm *confp> parameter
*/
/*ARGSUSED*/
int
{
return (1);
}
/*
* returns 0 if successful, -1 if unusuccesful, 1 if the AP already had
* <cmd> performed on it
*/
int
{
int rv, i, j;
if (cfga_listp->ap_busy != 0) {
return (-1);
}
/*
* explicitly perform each step that would otherwise be done
* implicitly by cfgadm to isolate errors
*/
j = 0;
switch (cmd) {
case CFGA_CMD_CONFIGURE:
cmdarr[j] = CFGA_CMD_CONNECT;
j++;
}
cmdarr[j] = CFGA_CMD_CONFIGURE;
j++;
}
goto ALREADY;
break;
case CFGA_CMD_DISCONNECT:
cmdarr[j] = CFGA_CMD_UNCONFIGURE;
j++;
}
cmdarr[j] = CFGA_CMD_DISCONNECT;
j++;
}
goto ALREADY;
break;
default:
return (-1);
}
assert(j <= cmdarr_len);
for (i = 0; i < j; i++) {
str = "unrecognized rv!";
if (cfga_errstr != NULL) {
"\"%s\"", cfga_errstr);
}
return (-1);
}
}
return (0);
/*NOTREACHED*/
return (1);
}