summaryrefslogtreecommitdiff
path: root/usr/src/lib/efcode/fcdriver/fcdebug.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/efcode/fcdriver/fcdebug.c')
-rw-r--r--usr/src/lib/efcode/fcdriver/fcdebug.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/usr/src/lib/efcode/fcdriver/fcdebug.c b/usr/src/lib/efcode/fcdriver/fcdebug.c
new file mode 100644
index 0000000000..fee58574eb
--- /dev/null
+++ b/usr/src/lib/efcode/fcdriver/fcdebug.c
@@ -0,0 +1,116 @@
+/*
+ * 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
+ * or http://www.opensolaris.org/os/licensing.
+ * 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 (c) 1999 by Sun Microsystems, Inc.
+ * All rights reserved.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <strings.h>
+
+#include <fcode/private.h>
+#include <fcode/log.h>
+
+#include <fcdriver/fcdriver.h>
+
+static void
+dump_private(fcode_env_t *env)
+{
+ common_data_t *cdp;
+ private_data_t *p;
+
+ if (env->current_device) {
+ p = env->current_device->private;
+ if (p) {
+ cdp = p->common;
+ } else
+ cdp = NULL;
+ } else {
+ cdp = env->private;
+ p = NULL;
+ }
+
+ if (cdp == NULL) {
+ log_message(MSG_ERROR, "dump_private: NULL private ptr!\n");
+ return;
+ }
+
+ log_message(MSG_DEBUG, "Private Data:\n");
+ log_message(MSG_DEBUG, "Progname: %s\n", cdp->Progname);
+ log_message(MSG_DEBUG, "fcode_fd: %8p\n", cdp->fcode_fd);
+ log_message(MSG_DEBUG, "attach: %llx\n", cdp->attach);
+ log_message(MSG_DEBUG, "Params: (%8p)\n", &cdp->fc);
+ log_message(MSG_DEBUG, " size: %d\n", cdp->fc.fcode_size);
+ log_message(MSG_DEBUG, " unit: %s\n", cdp->fc.unit_address);
+ if (p != NULL) {
+ log_message(MSG_DEBUG, "Node: %p\n", p->node);
+ log_message(MSG_DEBUG, "Parent: %p\n", p->parent);
+ log_message(MSG_DEBUG, "upload: %d\n", p->upload);
+ log_message(MSG_DEBUG, "debug: %8x\n", p->debug);
+ }
+}
+
+static void
+trigger(fcode_env_t *env)
+{
+ common_data_t *cdp = (common_data_t *)env->private;
+
+ ASSERT(cdp);
+
+ cdp->fcode_fd = open("/dev/fcode", O_RDONLY);
+ if (cdp->fcode_fd >= 0) {
+ log_message(MSG_INFO, "Trigger...");
+ if (!fc_get_request(cdp))
+ log_message(MSG_ERROR, "fc_get_request failed\n");
+ else
+ log_message(MSG_INFO, "\n");
+ } else
+ forth_abort(env, "Can't open /dev/fcode\n");
+}
+
+static void
+do_trigger(fcode_env_t *env)
+{
+ trigger(env);
+ build_tree(env);
+ install_builtin_nodes(env);
+}
+
+#pragma init(_init)
+
+static void
+_init(void)
+{
+ fcode_env_t *env = initial_env;
+
+ ASSERT(env);
+ NOTICE;
+
+ FORTH(0, "dump-private", dump_private);
+ FORTH(0, "trigger", do_trigger);
+}