Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Sep 2011 17:55:02 -0400
From:      Andrew Duane <aduane@juniper.net>
To:        "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>, "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org>
Subject:   Soliciting opinions on an extension of the bootinfo structure
Message-ID:  <AC6674AB7BC78549BB231821ABF7A9AEB748F9A329@EMBX01-WF.jnpr.net>

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

I'm proposing an extension framework for the bootinfo structure used to pas=
s information from the bootstrap/loader to the kernel. Although I'm only pr=
oposing this for the MIPS bootinfo, it's completely applicable to any of th=
em.

What I propose is adding an optional platform extension structure: bootinfo=
_pext, surrounded by #ifdef BOOTINFO_PEXT

struct bootinfo {
        ....
        u_int32_t       bi_kernend;             /* end of kernel space */
        u_int32_t       bi_envp;                /* environment */
        u_int32_t       bi_modulep;             /* preloaded modules */
+#ifdef BOOTINFO_PEXT
+       struct bootinfo_pext    bi_pext;        /* platform extensions if d=
efined */
+#endif
 };

Then, any vendor, platform, architecture, family, or developer could define=
 a new header file (or expand an existing one) with a definition of struct =
bootinfo_pext, and a #define BOOTINFO_PEXT. Include the new (or existing) h=
eader file in your source, and you have whatever extensions you want, witho=
ut affecting other platforms, architectures, families, or developers. The f=
ile we're looking to add is sys/mips/cavium/bootinfo_octeon.h:

+/*
+ * Platform bootinfo extensions for OCTEON bootinfo structure
+ *
+ * Specific vendors can add their own bootinfo_pext structures
+ * surrounded by #ifdef OCTEON_VENDOR_XXX
+ */
+
+#include "opt_cvmx.h"          /* For OCTEON_VENDOR_XXX definitions */
+
+#ifdef OCTEON_VENDOR_JUNIPER
+#define BOOTINFO_PEXT          /* include bootinfo_pext in main structure =
*/
+#define BOOTINFO_PEXT_MAGIC    0xCADECADE
+#define BOOTINFO_PEXT_VERSION  1
+
+struct bootinfo_pext {
+        int             pext_i2cid;
+        u_int32_t       pext_flags;
+        u_int32_t       pext_magic;             /* Magic number for octeon=
 pext */
+        u_int32_t       pext_version;           /* Version of pext */
+        u_int16_t       pext_uboot_major_rev;
+        u_int16_t       pext_uboot_minor_rev;
+        u_int16_t       pext_loader_major_rev;
+        u_int16_t       pext_loader_minor_rev;
+};
+#endif /* OCTEON_VENDOR_JUNIPER */


Reasonable? Unreasonable? Insane?

--
Andrew Duane             Juniper Networks
978-589-0551              10 Technology Park Dr
aduane@juniper.net      Westford, MA  01886-3418



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