--- a/arch/powerpc/kernel/rtas-proc.c 2006-10-14 05:34:03.000000000 +0200 +++ b/arch/powerpc/kernel/rtas-proc.c 2006-10-16 10:46:16.000000000 +0200 @@ -253,43 +253,70 @@ static void get_location_code(struct seq static void check_location_string(struct seq_file *m, char *c); static void check_location(struct seq_file *m, char *c); +#ifdef CONFIG_PPC64 +#define PROCRTAS_ROOT "ppc64" +#else +#define PROCRTAS_ROOT "ppc" +static int __init proc_ppc32_create(void) +{ + struct proc_dir_entry *root; + + root = proc_mkdir(PROCRTAS_ROOT , NULL); + if (!root) + return -1; + + if (!proc_mkdir("rtas", root)) + return -1; + + if (!proc_symlink("rtas", NULL, PROCRTAS_ROOT "/rtas")) + return -1; + + return 0; +} +#endif + static int __init proc_rtas_init(void) { struct proc_dir_entry *entry; - if (!machine_is(pseries)) + if ( ! ( machine_is(pseries) || machine_is(chrp) ) ) return -ENODEV; rtas_node = of_find_node_by_name(NULL, "rtas"); if (rtas_node == NULL) return -ENODEV; - entry = create_proc_entry("ppc64/rtas/progress", S_IRUGO|S_IWUSR, NULL); +#ifndef CONFIG_PPC64 + if (proc_ppc32_create() != 0) + return -ENODEV; +#endif + + entry = create_proc_entry(PROCRTAS_ROOT "/rtas/progress", S_IRUGO|S_IWUSR, NULL); if (entry) entry->proc_fops = &ppc_rtas_progress_operations; - entry = create_proc_entry("ppc64/rtas/clock", S_IRUGO|S_IWUSR, NULL); + entry = create_proc_entry(PROCRTAS_ROOT "/rtas/clock", S_IRUGO|S_IWUSR, NULL); if (entry) entry->proc_fops = &ppc_rtas_clock_operations; - entry = create_proc_entry("ppc64/rtas/poweron", S_IWUSR|S_IRUGO, NULL); + entry = create_proc_entry(PROCRTAS_ROOT "/rtas/poweron", S_IWUSR|S_IRUGO, NULL); if (entry) entry->proc_fops = &ppc_rtas_poweron_operations; - entry = create_proc_entry("ppc64/rtas/sensors", S_IRUGO, NULL); + entry = create_proc_entry(PROCRTAS_ROOT "/rtas/sensors", S_IRUGO, NULL); if (entry) entry->proc_fops = &ppc_rtas_sensors_operations; - entry = create_proc_entry("ppc64/rtas/frequency", S_IWUSR|S_IRUGO, + entry = create_proc_entry(PROCRTAS_ROOT "/rtas/frequency", S_IWUSR|S_IRUGO, NULL); if (entry) entry->proc_fops = &ppc_rtas_tone_freq_operations; - entry = create_proc_entry("ppc64/rtas/volume", S_IWUSR|S_IRUGO, NULL); + entry = create_proc_entry(PROCRTAS_ROOT "/rtas/volume", S_IWUSR|S_IRUGO, NULL); if (entry) entry->proc_fops = &ppc_rtas_tone_volume_operations; - entry = create_proc_entry("ppc64/rtas/rmo_buffer", S_IRUSR, NULL); + entry = create_proc_entry(PROCRTAS_ROOT "/rtas/rmo_buffer", S_IRUSR, NULL); if (entry) entry->proc_fops = &ppc_rtas_rmo_buf_ops;