09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * CDDL HEADER START
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * The contents of this file are subject to the terms of the
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * Common Development and Distribution License (the "License").
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * You may not use this file except in compliance with the License.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * See the License for the specific language governing permissions
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * and limitations under the License.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * When distributing Covered Code, include this CDDL HEADER in each
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * If applicable, add the following below this CDDL HEADER, with the
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * fields enclosed by brackets "[]" replaced with your own identifying
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * information: Portions Copyright [yyyy] [name of copyright owner]
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * CDDL HEADER END
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * Use is subject to license terms.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen#pragma ident "%Z%%M% %I% %E% SMI"
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsenopl_get_scf_logical_disk(const apid_t *apidp, char **errstring,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen len = snprintf((char *)scf_disk->path, sizeof (scf_disk->path),
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * Open the SCF driver and use the ioctl interface to set or get the status.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * Returns 0 on success. Returns OP_FAILED on error.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsenopl_disk_led_control(apid_t *apidp, char **errstring, struct cfga_msg *msgp,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen /* paranoid check */
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen if ((apidp == NULL) || (msgp == NULL) || (scf_disk == NULL)) {
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen retval = opl_get_scf_logical_disk((const apid_t *)apidp, errstring,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen /* errstring is set in opl_get_scf_logical_disk */
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen /* Open a file descriptor for the scf driver. */
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen cfga_err(errstring, errno, ERRARG_OPEN, SCF_DRV, 0);
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * Use the ioctl interface with the SCF driver to get/set the
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * hdd locator indicator.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen /* Check Retry Error Number */
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen /* Check Retry Times */
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * Print the value of the hard disk locator in a human friendly form.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsenopl_print_locator(apid_t *apidp, struct cfga_msg *msgp, unsigned char led)
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen if ((msgp == NULL) || (msgp->message_routine == NULL)) {
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen switch ((int)led) {
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * Print the value of the hard disk fault LED in a human friendly form.
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsenopl_print_led(apid_t *apidp, struct cfga_msg *msgp, unsigned char led)
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen if ((msgp == NULL) || (msgp->message_routine == NULL)) {
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen switch ((int)led) {
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen const char *mode,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen retval = opl_disk_led_control(apidp, errstring, msgp,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen (void) memset((void *)&scf_disk, 0, sizeof (scf_disk));
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen retval = opl_disk_led_control(apidp, errstring, msgp,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen const char *mode,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen (void) memset((void *)&scf_disk, 0, sizeof (scf_disk));
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen retval = opl_disk_led_control(apidp, errstring, msgp,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * The func argument is a string in one of the two following forms:
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * led=LED[,mode=MODE]
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * locator[=on|off]
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * which can generically be thought of as:
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * name=value[,name=value]
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen * So first, split the function based on the comma into two name-value
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen/*ARGSUSED*/
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen const char *func,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen (strncmp(func, "locator", strlen("locator")) != 0) ||
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen /* Options are sane so set or get the locator. */
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen retval = opl_getled(OPL_LOCATOR_OPT, apidp, errstring,
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen if ((opt_led > 1) || (opt_mode > 1) || (opt_locator) ||
09fe1b16b0d85a4b43987628152f516df3ae9838dnielsen /* options are sane so go ahead and set or get the led */