debug_firmware patch

From: <rmgls_at_wanadoo.fr>
Date: Tue, 02 May 2006 13:05:38 +0200
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_at_freebsd.org

Raoul
rmgls_at_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
_at__at_ -32,6 +32,8 _at__at_
 #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>
_at__at_ -41,6 +43,8 _at__at_
 #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];
_at__at_ -48,6 +52,49 _at__at_
 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
Received on Tue May 02 2006 - 09:05:49 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:55 UTC