Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 02 May 2006 13:05:38 +0200
From:      rmgls@wanadoo.fr
To:        Freebsd-current@freebsd.org
Subject:   debug_firmware patch
Message-ID:  <20060502110542.D120B7000093@mwinf1809.wanadoo.fr>

next in thread | raw e-mail | index | archive | help

On Monday 01 May 2006 00:20, Max Laier wrote:
> Here is a small patch to build a "debug.firmware" sysctl.  Should give:
> "iwi_bss/300/191142" for the latest firmware from net/iwi-firmware-kmod

> Any comments on the patch?  Will commit shortly otherwise.

...

Hi,

A minor side effect of the patch:

if defined before X_load="YES"
(say ucom, and uplcom), in loader.conf,
prevents X_loading: no cuaU nor ttyU present;
No problem if defined after.

Best regards,                      | mlaier@freebsd.org

Raoul
rmgls@wanadoo.Fr

Index: subr_firmware.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/store/mlaier/fcvs/src/sys/kern/subr_firmware.c,v
retrieving revision 1.1
diff -u -r1.1 subr_firmware.c
=2D-- subr_firmware.c	29 Jan 2006 02:52:41 -0000	1.1
+++ subr_firmware.c	30 Apr 2006 22:11:05 -0000
@@ -32,6 +32,8 @@
 #include <sys/malloc.h>
 #include <sys/queue.h>
 #include <sys/taskqueue.h>
+#include <sys/sbuf.h>
+#include <sys/sysctl.h>
 #include <sys/systm.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
@@ -41,6 +43,8 @@
 #include <sys/proc.h>
 #include <sys/module.h>

+static int sysctl_debug_firmware(SYSCTL_HANDLER_ARGS);
+#define	FIRMWARE_MAX	30
 static char *name_unload = "UNLOADING";
 static struct firmware firmware_table[FIRMWARE_MAX];
@@ -48,6 +52,49 @@
 struct mtx firmware_mtx;
 MTX_SYSINIT(firmware, &firmware_mtx, "firmware table", MTX_DEF);

+static int
+sysctl_debug_firmware(SYSCTL_HANDLER_ARGS)
+{
+	struct firmware *fp;
+	struct sbuf sb;
+	int error, i, count = 0;
+
+	for (i = 0; i < FIRMWARE_MAX; i++) {
+		fp = &firmware_table[i];
+		if (fp->name != NULL)
+			count++;
+	}
+
+	if (count == 0)
+		return (sysctl_handle_string(oidp, "NONE", 5, req));
+
+	sbuf_new(&sb, NULL, count * 32 + 2, SBUF_FIXEDLEN);
+
+	sbuf_printf(&sb, "\n");
+
+	mtx_lock(&firmware_mtx);
+	for (i = 0; i < FIRMWARE_MAX; i++) {
+		fp = &firmware_table[i];
+		if (fp->name != NULL) {
+			if (count-- <= 0)
+				sbuf_printf(&sb, "...\n");
+			else
+				sbuf_printf(&sb, "\t%16s/%u/%zi\n", fp->name,
+				    fp->version, fp->datasize);
+		}
+	}
+	mtx_unlock(&firmware_mtx);
+
+	sbuf_trim(&sb);
+	sbuf_finish(&sb);
+	error = sysctl_handle_string(oidp, sbuf_data(&sb), sbuf_len(&sb), req);
+	sbuf_delete(&sb);
+
+	return (error);
+}
+SYSCTL_OID(_debug, OID_AUTO, firmware, CTLTYPE_STRING|CTLFLAG_RD, NULL, 0,
+    sysctl_debug_firmware, "A", "Loaded firmware images");
+
 /*
  * Register a firmware image with the specified name.  The
  * image name must not already be registered.  If this is a




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060502110542.D120B7000093>