3db86aab554edbb4244c8d1a1c90f152eee768afstevel * CDDL HEADER START
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * The contents of this file are subject to the terms of the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Common Development and Distribution License, Version 1.0 only
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * (the "License"). You may not use this file except in compliance
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * with the License.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * See the License for the specific language governing permissions
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * and limitations under the License.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * When distributing Covered Code, include this CDDL HEADER in each
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * If applicable, add the following below this CDDL HEADER, with the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * fields enclosed by brackets "[]" replaced with your own identifying
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * information: Portions Copyright [yyyy] [name of copyright owner]
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * CDDL HEADER END
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Use is subject to license terms.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#pragma ident "%Z%%M% %I% %E% SMI"
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * The string table contains all the strings used by the platform
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * library. The comment next to each string specifies whether the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * string should be internationalized (y) or not (n).
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Note that there are calls to dgettext() with strings other than
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * the ones below, they are marked by the li18 symbol.
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic char *
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "system will be temporarily suspended to connect a board: proceed",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* y */ "not enough precharge power for a new board",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* y */ "configuration operation already in progress on this board",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* y */ "hotplug feature unavailable on this machine",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* y */ "board does not support dynamic reconfiguration",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* y */ "firmware does not support dynamic reconfiguration",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Translation table for mapping from an <errno,sysc_err>
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * pair to an error string.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_COOLING, EAGAIN, SYSC_ERR_COOLING
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_POWER, EAGAIN, SYSC_ERR_POWER
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_PRECHARGE, EAGAIN, SYSC_ERR_PRECHARGE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_INTRANS, EBUSY, SYSC_ERR_INTRANS
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_KTHREAD, EBUSY, SYSC_ERR_KTHREAD
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_DEV_ATTACH, EBUSY, SYSC_ERR_NDI_ATTACH
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_DEV_DETACH, EBUSY, SYSC_ERR_NDI_DETACH
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_NDI_ATTACH, EFAULT, SYSC_ERR_NDI_ATTACH
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_NDI_DETACH, EFAULT, SYSC_ERR_NDI_DETACH
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_CORE_RESOURCE, EINVAL, SYSC_ERR_CORE_RESOURCE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_OSTATE, EINVAL, SYSC_ERR_OSTATE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_RSTATE, EINVAL, SYSC_ERR_RSTATE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_COND, EINVAL, SYSC_ERR_COND
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_PROM, EIO, SYSC_ERR_PROM
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_NOMEM, ENOMEM, SYSC_ERR_DR_INIT
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_NOMEM, ENOMEM, SYSC_ERR_NDI_ATTACH
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_NOMEM, ENOMEM, SYSC_ERR_NDI_DETACH
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_HOTPLUG, ENOTSUP, SYSC_ERR_HOTPLUG
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_HW_COMPAT, ENOTSUP, SYSC_ERR_HW_COMPAT
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_NON_DR_PROM, ENOTSUP, SYSC_ERR_NON_DR_PROM
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_SUSPEND, ENXIO, SYSC_ERR_SUSPEND
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_RESUME, ENXIO, SYSC_ERR_RESUME
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * SYSC_UTHREAD, ESRCH, SYSC_ERR_UTHREAD
3db86aab554edbb4244c8d1a1c90f152eee768afstevelsysc_cmd_init(sysc_cfga_cmd_t *sc, char *outputstr, int force)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) memset((void *)outputstr, 0, sizeof (outputstr));
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * cfga_err() accepts a variable number of message IDs and constructs
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * a corresponding error string which is returned via the errstring argument.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * cfga_err() calls dgettext() to internationalize proper messages.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel char *s[32];
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * If errstring is null it means user in not interested in getting
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * error status. So we don't do all the work
3db86aab554edbb4244c8d1a1c90f152eee768afstevel failed = dgettext(TEXT_DOMAIN, cfga_str(DIAG_FAILED));
3db86aab554edbb4244c8d1a1c90f152eee768afstevel switch (a) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel s[++n] = q;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel s[++n] = q;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (p == NULL) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel s[n++] = p;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (p && p[0]) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel s[n++] = q;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel s[n++] = p;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel for (i = 0; i < n; i++)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) strcat(p, s[i]);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * This routine accepts a variable number of message IDs and constructs
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * a corresponding error string which is printed via the message print routine
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * argument. The HELP_UNKNOWN message ID has an argument string (the unknown
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * help topic) that follows.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel char *s[32];
3db86aab554edbb4244c8d1a1c90f152eee768afstevel s[++n] = p;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel for (i = 0; i < n; i++)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) strcat(p, s[i]);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (ioctl(fd, SYSC_CFGA_CMD_GETSTATUS, sc_list) == -1) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (fdp)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * This code implementes the simulation of the ioctls that transition state.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * The GETSTAT ioctl is not simulated. In this way a snapshot of the system
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * state is read and manipulated by the simulation routines. It is basically
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * a useful debugging tool.
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic int sim_size = MAX_BOARDS * sizeof (sysc_cfga_stat_t);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if ((sim_fd = open("/tmp/cfga_simdata", O_RDWR|O_CREAT)) == -1) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (read(sim_fd, sim_sc_list, sim_size) == -1) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (ioctl(fd, SYSC_CFGA_CMD_GETSTATUS, sim_sc_list) == -1) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (fdp)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (open(a, b, c));
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel sim_sc_list[sim_idx].rstate = SYSC_CFGA_RSTATE_CONNECTED;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel sim_sc_list[sim_idx].ostate = SYSC_CFGA_OSTATE_CONFIGURED;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel sim_sc_list[sim_idx].ostate = SYSC_CFGA_OSTATE_UNCONFIGURED;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel sim_sc_list[sim_idx].rstate = SYSC_CFGA_RSTATE_DISCONNECTED;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define open(a, b, c) sim_open((char *)(a), (int)(b), (int)(c))
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define ioctl(a, b, c) sim_ioctl((int)(a), (int)(b), (void *)(c))
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#endif /* SIM */
3db86aab554edbb4244c8d1a1c90f152eee768afsteveltypedef union {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) strncpy(opp->oprom_array, var, OBP_MAXPROPNAME);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel DBG3("getprop(%s, %d)\n", opp->oprom_array, opp->oprom_size);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (err = prom_get_prop(prom_fd, dlprop, dlist)) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel for (i = 0; i < len; i++) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel b[0] = dl[i];
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afsteveldlist_update(int board, int disable, char *dlist, struct cfga_msg *msgp,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel int i, j, n;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel for (i = 0; i < len; i++) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel switch (n) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* FALLTHROUGH */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel cfga_err(NULL, errstring, ERR_OPT_INVAL, options, 0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * We disallow connecting on the disabled list unless
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * either the FORCE flag or the enable-at-boot option
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * is set. The check is made further below
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (disabled && !(force || (options && !disable)))
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (ioctl(fd, SYSC_CFGA_CMD_CONNECT, sc) == -1)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (options && (opterr = dlist_update(idx, disable,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (options && (opterr = dlist_update(idx, disable,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (ioctl(fd, SYSC_CFGA_CMD_CONNECT, sc) == -1) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (ioctl(fd, SYSC_CFGA_CMD_UNCONFIGURE, sc) == -1)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (options && (opterr = dlist_update(idx, disable,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (c);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *function,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel cfga_err(NULL, errstring, ERR_OPT_INVAL, options, 0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if ((strncmp(function, str, len) == 0) && (function[len++] == '=') &&
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (strcmp(function, cfga_str(CMD_QUIESCE)) == 0) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (strcmp(function, cfga_str(CMD_INSERT)) == 0) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (strcmp(function, cfga_str(CMD_REMOVE)) == 0) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel cfga_err(NULL, errstring, ERR_CMD_INVAL, (char *)function, 0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel switch (rs) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel switch (os) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel switch (sc) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic char *
3db86aab554edbb4244c8d1a1c90f152eee768afstevelinfo_set(sysc_cfga_stat_t *sc, cfga_info_t info, int disabled)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel for (i = 0; i < 2; i++)
3db86aab554edbb4244c8d1a1c90f152eee768afstevelsysc_cvt(sysc_cfga_stat_t *sc, cfga_stat_data_t *cs, int disabled)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (!(cs = (cfga_stat_data_t *)malloc(MAX_BOARDS * sizeof (*cs))))
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel cfga_err(NULL, errstring, ERR_OPT_INVAL, options, 0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ((opterr = dlist_update(idx, disable, dlist, NULL, 0))
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevelcfga_help(struct cfga_msg *msgp, const char *options, cfga_flags_t flags)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel else if (strcmp(options, cfga_str(CMD_QUIESCE)) == 0)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * cfga_ap_id_cmp -- use default_ap_id_cmp() in libcfgadm