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 * <sys/spitregs.h> has these defines inside 'ifdef _KERNEL' at the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * time of writing. Re-define here if that is still the case.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define P_DER_UE 0x00000000000000200ULL /* UE has occurred */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define P_DER_CE 0x00000000000000100ULL /* CE has occurred */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define P_DER_E_SYND 0x000000000000000FFULL /* SYND<7:0>: ECC syndrome */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#endif /* ! P_DER_UE */
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic int debugging(void);
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic void dump_ioctl(int, void *);
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic void dump_ioctl_res(int, void *, int, int);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#else /* DEV_DEBUG */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#endif /* DEV_DEBUG */
3db86aab554edbb4244c8d1a1c90f152eee768afsteveltypedef struct {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "disable-at-boot",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "enable-at-boot",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * For each function there is an array of opt_control structures giving
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * the valid options. The array is terminated by an element with the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * subopt field set to -1. The group field is used to identify
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * mutually exclusive options, with zero meaning no grouping.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Returned set of options.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * If the option takes a value, it will be set in 'val'
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * if the corresponding bit is set in 'bits' is set,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * otherwise the pointer in 'val' is undefined.
3db86aab554edbb4244c8d1a1c90f152eee768afsteveltypedef struct {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define OPTSET_SET_VAL(S, O, V) ((S).bits |= _OPT_TO_BIT(O), \
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (S).val[(O)] = (V))
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define OPTSET_TEST(S, O) (((S).bits & _OPT_TO_BIT(O)) != 0)
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic option_set_t process_options(const char *, struct opt_control *,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel int *, char **);
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char still_testing[] = "bank %s being tested by process %d";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char no_value[] = "sub-option \"%s\" does not take a value";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char missing_value[] = "sub-option \"%s\" needs a value";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char conflict_opt[] = "sub-option \"%s\" conflicts with \"%s\"";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char unk_subopt[] = "sub-option \"%s\" unknown\n"
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "choose from: %s";
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "sub-option \"%s\" not valid for this operation\n"
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "choose from: %s";
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "timeout value not a positive integer \"%s\"";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char calloc_fail[] = "memory allocation failed (%d*%d bytes)";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char unk_test[] = "test \"%s\" unknown\n"
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "choose from: %s";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char dup_test[] = "more than one test type specified (\"%s\")";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char dup_num[] = "option specified more than once (\"%s\")";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char no_num[] = "invalid number specified for max_errors(\"%s\")";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char mtest_rw_error[] = "memory test read/write error";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char mtest_lib_error[] = "memory test library error";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char dlist_invalid[] = "invalid disabled-memory-list";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char dlist_write_failed[] = "disabled-memory-list write failed";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char mtest_unknown_error[] = "unknown memory test error";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char ap_invalid[] = "invalid attachment point: %s";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char trans_illegal[] = "illegal transition";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char open_failed[] = "open failed: %s: %s";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char mema_help[] = "\nAc specific options:\n";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char disable_opts[] = "\t-o disable-at-boot\n";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char enable_opts[] = "\t-o enable-at-boot\n";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char timeout_opts[] = "\t-o timeout=# (seconds)\n";
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "\t-o {quick, normal, extended},[max_errors=#] -t ap_id [ap_id...]\n";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char private_funcs[] = "\t-x relocate-test ap_id [ap_id...]\n";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char add_is_disabled[] = "memory is disabled at boot";
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory will be disabled at boot";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char add_disab_err[] = "cannot get memory disabled status";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic const char pfunc_unknown[] = "private function \"%s\" unknown";
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic char *
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory bank busy",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "invalid memory bank",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "invalid board id",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "invalid board type",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "invalid board state",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "invalid memory test id",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "invalid memory test parameter(s)",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "no write permission",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory operation cancelled",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory operation refused",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory already in use (add)",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory span duplicate (delete)",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory access test failed (add)",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "some resource was not available",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "operation not supported",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "cannot allocate any more handles",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "non-relocatable pages in span",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "bad handle supplied",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory in span is being deleted",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "VM viability test failed",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "function called out of sequence",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "no memory to delete",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "delete processing not finished",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "delete processing not running",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "insufficient virtual memory",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory stat failed: %s",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory add failed: %s",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory delete failed: %s",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory test start failed: %s",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory test stop failed: %s",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "unknown error",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory delete killed",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory delete timeout",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory relocate-test failed: %s",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "memory cannot be de-interleaved"
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_MEM_PERM, EBADF, AC_ERR_MEM_PERM
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_BK_BUSY, EBUSY, AC_ERR_MEM_BK
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_CANCELLED, EINTR, AC_ERR_KPM_CANCELLED
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_REFUSED, EINTR, AC_ERR_KPM_REFUSED
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_BK_ID, EINVAL, AC_ERR_MEM_BK
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_BD_ID, EINVAL, AC_ERR_BD
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_BD_TYPE, EINVAL, AC_ERR_BD_TYPE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_BD_STATE, EINVAL, AC_ERR_BD_STATE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_MEM_TEST_ID, EINVAL, AC_ERR_MEM_TEST
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_MEM_TEST_PAR, EINVAL, AC_ERR_MEM_TEST_PAR
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_SPAN, EINVAL, AC_ERR_KPM_SPAN
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_DUP, EINVAL, AC_ERR_KPM_DUP?
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_FAULT, EINVAL, AC_ERR_KPM_FAULT
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_RESOURCE, EINVAL, AC_ERR_KPM_RESOURCE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_NOTSUP, EINVAL, AC_ERR_KPM_NOTSUP
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_NOHANDLES, EINVAL, AC_ERR_KPM_NOHANDLES
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_NONRELOC, EINVAL, AC_ERR_KPM_NONRELOC
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_HANDLE, EINVAL, AC_ERR_KPM_HANDLE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_BUSY, EINVAL, AC_ERR_KPM_BUSY
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_NOTVIABLE, EINVAL, AC_ERR_KPM_NOTVIABLE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_SEQUENCE, EINVAL, AC_ERR_KPM_SEQUENCE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_NOWORK, EINVAL, AC_ERR_KPM_NOWORK
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_NOTFINISHED, EINVAL, AC_ERR_KPM_NOTFINISHED
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_KPM_NOTRUNNING, EINVAL, AC_ERR_KPM_NOTRUNNING
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_VMEM, ENOMEM, AC_ERR_VMEM
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_INTR, EINTR, AC_ERR_INTR
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_TIMEOUT, EINTR, AC_ERR_TIMEOUT
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * AC_DEINTLV, EINVAL, AC_ERR_MEM_DEINTLV
3db86aab554edbb4244c8d1a1c90f152eee768afstevelmema_err(ac_cfga_cmd_t *ac, int ret_errno, char **errstring, int cmd)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* strerror() does its own gettext(). */
3db86aab554edbb4244c8d1a1c90f152eee768afstevelmema_cmd_init(ac_cfga_cmd_t *ac, void *cmd, char *outputstr, int force)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *bank_spec,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if ((fd = open(bank_spec, ((fdp != NULL) ? O_RDWR : O_RDONLY), 0)) ==
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dgettext(TEXT_DOMAIN, open_failed), bank_spec, syserr);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (!prom_write_disabled_list(&disab, board)) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (OPTSET_TEST(do_option, OPT_BOOT_DISABLE)) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel } else if (!prom_write_disabled_list(&disab, board)) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *bank_spec,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel do_option = process_options(options, add_opts, &ret, errstring);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (ret != 0) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ret = ap_stat(bank_spec, &fd, &bk, &stat, errstring);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (disab != 0 &&
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (disab == 0 &&
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dump_ioctl_res(AC_MEM_CONFIGURE, NULL, ret, ret_errno);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ret = prom_do_options(do_option, bk.board, &stat, errstring);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *bank_spec,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel do_option = process_options(options, del_opts, &ret, errstring);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (ret != 0) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (*ep != '\0' || ep == to_val || timeout_secs < 0) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ret = ap_stat(bank_spec, &fd, &bk, &stat, errstring);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dump_ioctl_res(AC_MEM_UNCONFIGURE, NULL, ret, ret_errno);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ret = prom_do_options(do_option, bk.board, &stat, errstring);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *function,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dump_ioctl_res(AC_MEM_EXERCISE, &cmd, ret, ret_errno);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel mema_err(&cmd, ret_errno, errstring, CMD_MEM_RELOCTEST);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) memset((void *)&test_start, 0, sizeof (test_start));
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dump_ioctl_res(AC_MEM_TEST_START, &test_start, ret, ret_errno);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (ret_errno == EBUSY && test_start.tester_pid > 0) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Bank appears to be being tested. Check that
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * process 'tester_pid' is still running.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* Process still exists. */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Do a test stop and re-try the start.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Ignore test stop error processing and re-try the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * start. The error return will be derived from the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * result of start.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* Test return code again to cover the case of a re-try. */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel handle.lines_per_page = test_start.page_size / test_start.line_size;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Convert memory test code to MEMA_ code.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) memset((void *)&test_stop, 0, sizeof (test_stop));
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dump_ioctl_res(AC_MEM_TEST_STOP, &test_stop, ret, ret_errno);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define DRVHANDLE(H) (((ac_mem_test_start_t *)(H)->drvhandle)->handle)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) memset((void *)&test_write, 0, sizeof (test_write));
3db86aab554edbb4244c8d1a1c90f152eee768afstevel test_write.address.line_count = handle->lines_per_page;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dump_ioctl_res(AC_MEM_TEST_WRITE, &test_write, ret, ret_errno);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) memset((void *)&test_read, 0, sizeof (test_read));
3db86aab554edbb4244c8d1a1c90f152eee768afstevel test_read.address.line_count = handle->lines_per_page;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dump_ioctl_res(AC_MEM_TEST_READ, &test_read, ret, ret_errno);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Special case indicating CE or UE.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (((errbuf.udbh_error_reg | errbuf.udbl_error_reg) &
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (-1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic char *
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (n == 0)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Decode test level and max error number.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* getsubopt() modifies the input string, so copy it. */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* Free after printing value. */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ((flags & CFGA_FLAG_VERBOSE) != 0) ? msgp : NULL, errstring,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel switch (rs) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel switch (os) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel switch (sc) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevelinfo_set(ac_stat_t *asp, mema_bank_t *bkp, cfga_info_t info)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* Print the board number in a way that matches the sysctrl AP. */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel info += snprintf(info, end - info, " (%d%s used)", n, f);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel info += snprintf(info, end - info, " interleaved %u-way",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (disab != 0) {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel info += snprintf(info, end - info, " disabled at boot");
3db86aab554edbb4244c8d1a1c90f152eee768afstevelmema_cvt(ac_stat_t *ac, mema_bank_t *bkp, cfga_stat_data_t *cs)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel do_option = process_options(options, stat_opts, &ret, errstring);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ret = prom_do_options(do_option, bk.board, &stat, errstring);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *ap_id,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * cfga_ap_id_cmp -- use default_ap_id_cmp() in libcfgadm
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*ARGSUSED*/
3db86aab554edbb4244c8d1a1c90f152eee768afstevelcfga_help(struct cfga_msg *msgp, const char *options, cfga_flags_t flags)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (*msgp->message_routine)(msgp->appdata_ptr, mema_help);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (*msgp->message_routine)(msgp->appdata_ptr, disable_opts);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (*msgp->message_routine)(msgp->appdata_ptr, enable_opts);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (*msgp->message_routine)(msgp->appdata_ptr, timeout_opts);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (*msgp->message_routine)(msgp->appdata_ptr, test_opts);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (*msgp->message_routine)(msgp->appdata_ptr, private_funcs);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dump_ioctl_res(AC_MEM_ADMIN_VER, &ver, ret, ret_errno);
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstatic char *
3db86aab554edbb4244c8d1a1c90f152eee768afstevel if (n == 0)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *options,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel dgettext(TEXT_DOMAIN, calloc_fail), strlen(options) + 1, 1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel __fmt_errstring(errstring, strlen(value) + strlen(hlp),
3db86aab554edbb4244c8d1a1c90f152eee768afstevel /* Ignore repeated options. */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (0);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "\nDebug started, pid=%d\n", (int)getpid());
3db86aab554edbb4244c8d1a1c90f152eee768afstevel return (1);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: AC_MEM_CONFIGURE\n");
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: AC_MEM_UNCONFIGURE\n");
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: AC_MEM_TEST_START\n");
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: AC_MEM_TEST_STOP handle=%#x "
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: AC_MEM_TEST_READ handle=%#x "
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "buf=%#p page=%#llx off=%#x count=%#x\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel tread->address.line_offset, tread->address.line_count);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: AC_MEM_TEST_WRITE handle=%#x "
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "buf=%#p page=%#llx off=%#x count=%#x\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel twrite->address.line_offset, twrite->address.line_count);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: AC_MEM_ADMIN_VER:\n");
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: AC_MEM_EXERCISE arg=%d\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL: unknown (%#x)\n", cmd);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL failed, \"%s\" (errno=%d)\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "IOCTL succeeded, ret=%d\n", ret);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, " handle=%#x tester_pid=%d "
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "prev_condition=%d bank_size=%#llx "
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "page_size=%#x line_size=%#x afar_base=%#llx\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, "module_id=%#llx afsr=%#llx "
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "afar=%#llx udbh_error_reg=%#llx "
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "udbl_error_reg=%#llx\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "condition=%u status_time=%#lx board=%u\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (uint_t)tstat->condition, (ulong_t)tstat->status_time,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (void) fprintf(debug_fp, " real_size=%u use_size=%u "
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "busy=%u\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "phys_pages=%#llx managed=%#llx nonrelocatable=%#llx\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel "decode0=%#llx decode1=%#llx\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (longlong_t)tstat->ac_memctl, (longlong_t)tstat->ac_decode0,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel " nopaget=%u nolock=%u isfree=%u reloc=%u"
3db86aab554edbb4244c8d1a1c90f152eee768afstevel " noreloc=%u\n",
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#endif /* DEV_DEBUG */