From: "H. Peter Anvin" <hpa@zytor.com>
To: sparclinux@vger.kernel.org
Subject: Re: klibc and SPARC
Date: Thu, 18 May 2006 19:17:20 +0000 [thread overview]
Message-ID: <446CC840.8000006@zytor.com> (raw)
In-Reply-To: <e4g1ho$dae$1@terminus.zytor.com>
[-- Attachment #1: Type: text/plain, Size: 777 bytes --]
David S. Miller wrote:
> From: "H. Peter Anvin" <hpa@zytor.com>
> Date: Wed, 17 May 2006 16:10:51 -0700
>
>> Well, I'm happy to do it either which way. I'll go ahead and write
>> up an ad hoc solution for this case, unless it turns out to actually
>> be bigger than one of the generic codes.
>
> Note you could export these specific values via procfs/sysfs.
>
> Just an idea...
After thinking about it some more, I decided to drop the information into a file in the
rootfs. That way there is no "normal runtime" memory footprint, which would be the main
reason to avoid the normal drivers.
The kernel side of the patch is attached for review; there is obviously also a kinit side
which I haven't written yet (I'll try to finish the whole thing this evening.)
-hpa
[-- Attachment #2: sparc64.arch.diff --]
[-- Type: text/x-patch, Size: 3033 bytes --]
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c
index 005167f..a124cb0 100644
--- a/arch/sparc64/kernel/setup.c
+++ b/arch/sparc64/kernel/setup.c
@@ -102,7 +102,7 @@ int obp_system_intr(void)
return 0;
}
-/*
+/*
* Process kernel command line switches that are specific to the
* SPARC or that require special low-level processing.
*/
@@ -315,6 +315,53 @@ static void __init sun4v_patch(void)
}
}
+/*
+ * Platform-specific configuration commands which don't come from
+ * the actual kernel command line. Write them into a file in rootfs
+ * so kinit can pick them up.
+ */
+static void __init set_arch_init_commands(void)
+{
+ int fd = sys_open("/arch.cmd", O_WRONLY|O_CREATE|O_APPEND, 0666);
+ int chosen = prom_finddevice ("/chosen");
+ u32 cl, sv, gw;
+ char buffer[256];
+ int len = 0;
+
+ if (fd < 0)
+ return;
+
+ cl = prom_getintdefault (chosen, "client-ip", 0);
+ sv = prom_getintdefault (chosen, "server-ip", 0);
+ gw = prom_getintdefault (chosen, "gateway-ip", 0);
+
+#ifdef CONFIG_BLK_DEV_RAM
+ len = min(sizeof buffer - 1,
+ snprintf(buffer, sizeof buffer,
+ "ramdisk_start=%u\n"
+ "prompt_ramdisk=%d\n"
+ "load_ramdisk=%d\n",
+ ram_flags & RAMDISK_IMAGE_START_MASK,
+ !!(ram_flags & RAMDISK_PROMPT_FLAG),
+ !!(ram_flags & RAMDISK_LOAD_FLAG)));
+#endif
+ if (cl && sv) {
+ len += min(sizeof buffer - 1 - len,
+ snprintf(buffer+len, sizeof buffer - len,
+ "ip=%u.%u.%u.%u:%u.%u.%u.%u:"
+ "%u.%u.%u.%u\n",
+ (u8)(cl >> 24), (u8)(cl >> 16),
+ (u8)(cl >> 8), (u8)cl,
+ (u8)(sv >> 24), (u8)(sv >> 16),
+ (u8)(sv >> 8), (u8)sv,
+ (u8)(gw >> 24), (u8)(gw >> 16),
+ (u8)(gw >> 8), (u8)gw));
+ }
+
+ sys_write(fd, buffer, len);
+ sys_close(fd);
+}
+
void __init setup_arch(char **cmdline_p)
{
/* Initialize PROM console and command line. */
@@ -349,33 +396,10 @@ #endif
if (!root_flags)
root_mountflags &= ~MS_RDONLY;
ROOT_DEV = old_decode_dev(root_dev);
-#ifdef CONFIG_BLK_DEV_RAM
- rd_image_start = ram_flags & RAMDISK_IMAGE_START_MASK;
- rd_prompt = ((ram_flags & RAMDISK_PROMPT_FLAG) != 0);
- rd_doload = ((ram_flags & RAMDISK_LOAD_FLAG) != 0);
-#endif
task_thread_info(&init_task)->kregs = &fake_swapper_regs;
-#ifdef CONFIG_IP_PNP
- if (!ic_set_manually) {
- int chosen = prom_finddevice ("/chosen");
- u32 cl, sv, gw;
-
- cl = prom_getintdefault (chosen, "client-ip", 0);
- sv = prom_getintdefault (chosen, "server-ip", 0);
- gw = prom_getintdefault (chosen, "gateway-ip", 0);
- if (cl && sv) {
- ic_myaddr = cl;
- ic_servaddr = sv;
- if (gw)
- ic_gateway = gw;
-#if defined(CONFIG_IP_PNP_BOOTP) || defined(CONFIG_IP_PNP_RARP)
- ic_proto_enabled = 0;
-#endif
- }
- }
-#endif
+ set_arch_init_commands();
smp_setup_cpu_possible_map();
@@ -439,7 +463,7 @@ static int ncpus_probed;
static int show_cpuinfo(struct seq_file *m, void *__unused)
{
- seq_printf(m,
+ seq_printf(m,
"cpu\t\t: %s\n"
"fpu\t\t: %s\n"
"prom\t\t: %s\n"
next prev parent reply other threads:[~2006-05-18 19:17 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-17 20:37 klibc and SPARC H. Peter Anvin
2006-05-17 20:40 ` David S. Miller
2006-05-17 20:43 ` H. Peter Anvin
2006-05-17 20:57 ` H. Peter Anvin
2006-05-17 22:32 ` David S. Miller
2006-05-17 22:36 ` H. Peter Anvin
2006-05-17 22:41 ` David S. Miller
2006-05-17 23:10 ` H. Peter Anvin
2006-05-17 23:33 ` David S. Miller
2006-05-17 23:38 ` H. Peter Anvin
2006-05-18 19:17 ` H. Peter Anvin [this message]
2006-05-18 19:46 ` David S. Miller
2006-05-18 20:16 ` H. Peter Anvin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=446CC840.8000006@zytor.com \
--to=hpa@zytor.com \
--cc=sparclinux@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.