[patch] CHRP free...
Ani Joshi
ajoshi at shell.unixbox.com
Thu May 11 14:53:46 EST 2000
Hey Cort,
I got bored and went ahead and did it. The attatched patch gives
"support" for the __chrp attribute just like the __{pmac,apus,prep} ones.
Granted it doesn't free up that much as there isn't a whole lot of chrp
code in the common kernel (free'ed up 8k on my system), it allows room for
the future ofcourse. Also I might have missed other chrp code or data
thats not in arch/ppc/kernel/chrp*.c so if you have any elsewhere i guess
you can add the proper stuff.
ani
-------------- next part --------------
diff -uNr linux.orig/arch/ppc/kernel/chrp_pci.c linux/arch/ppc/kernel/chrp_pci.c
--- linux.orig/arch/ppc/kernel/chrp_pci.c Wed Feb 9 22:43:47 2000
+++ linux/arch/ppc/kernel/chrp_pci.c Wed May 10 23:40:12 2000
@@ -17,6 +17,7 @@
#include <asm/prom.h>
#include <asm/gg2.h>
#include <asm/machdep.h>
+#include <asm/init.h>
#include "pci.h"
@@ -31,7 +32,7 @@
* limit the bus number to 3 bits
*/
-int gg2_pcibios_read_config_byte(unsigned char bus, unsigned char dev_fn,
+int __chrp gg2_pcibios_read_config_byte(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned char *val)
{
if (bus > 7) {
@@ -42,7 +43,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int gg2_pcibios_read_config_word(unsigned char bus, unsigned char dev_fn,
+int __chrp gg2_pcibios_read_config_word(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned short *val)
{
if (bus > 7) {
@@ -54,7 +55,7 @@
}
-int gg2_pcibios_read_config_dword(unsigned char bus, unsigned char dev_fn,
+int __chrp gg2_pcibios_read_config_dword(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned int *val)
{
if (bus > 7) {
@@ -65,7 +66,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int gg2_pcibios_write_config_byte(unsigned char bus, unsigned char dev_fn,
+int __chrp gg2_pcibios_write_config_byte(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned char val)
{
if (bus > 7)
@@ -74,7 +75,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int gg2_pcibios_write_config_word(unsigned char bus, unsigned char dev_fn,
+int __chrp gg2_pcibios_write_config_word(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned short val)
{
if (bus > 7)
@@ -83,7 +84,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int gg2_pcibios_write_config_dword(unsigned char bus, unsigned char dev_fn,
+int __chrp gg2_pcibios_write_config_dword(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned int val)
{
if (bus > 7)
@@ -98,7 +99,7 @@
| (((o) & ~3) << 24))
unsigned int python_busnr = 0;
-int python_pcibios_read_config_byte(unsigned char bus, unsigned char dev_fn,
+int __chrp python_pcibios_read_config_byte(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned char *val)
{
if (bus > python_busnr) {
@@ -110,7 +111,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int python_pcibios_read_config_word(unsigned char bus, unsigned char dev_fn,
+int __chrp python_pcibios_read_config_word(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned short *val)
{
if (bus > python_busnr) {
@@ -123,7 +124,7 @@
}
-int python_pcibios_read_config_dword(unsigned char bus, unsigned char dev_fn,
+int __chrp python_pcibios_read_config_dword(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned int *val)
{
if (bus > python_busnr) {
@@ -135,7 +136,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int python_pcibios_write_config_byte(unsigned char bus, unsigned char dev_fn,
+int __chrp python_pcibios_write_config_byte(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned char val)
{
if (bus > python_busnr)
@@ -145,7 +146,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int python_pcibios_write_config_word(unsigned char bus, unsigned char dev_fn,
+int __chrp python_pcibios_write_config_word(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned short val)
{
if (bus > python_busnr)
@@ -156,7 +157,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int python_pcibios_write_config_dword(unsigned char bus, unsigned char dev_fn,
+int __chrp python_pcibios_write_config_dword(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned int val)
{
if (bus > python_busnr)
@@ -167,7 +168,7 @@
}
-int rtas_pcibios_read_config_byte(unsigned char bus, unsigned char dev_fn,
+int __chrp rtas_pcibios_read_config_byte(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned char *val)
{
unsigned long addr = (offset&0xff) | ((dev_fn&0xff)<<8) | ((bus & 0xff)<<16);
@@ -176,7 +177,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int rtas_pcibios_read_config_word(unsigned char bus, unsigned char dev_fn,
+int __chrp rtas_pcibios_read_config_word(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned short *val)
{
unsigned long addr = (offset&0xff) | ((dev_fn&0xff)<<8) | ((bus & 0xff)<<16);
@@ -186,7 +187,7 @@
}
-int rtas_pcibios_read_config_dword(unsigned char bus, unsigned char dev_fn,
+int __chrp rtas_pcibios_read_config_dword(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned int *val)
{
unsigned long addr = (offset&0xff) | ((dev_fn&0xff)<<8) | ((bus & 0xff)<<16);
@@ -195,7 +196,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int rtas_pcibios_write_config_byte(unsigned char bus, unsigned char dev_fn,
+int __chrp rtas_pcibios_write_config_byte(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned char val)
{
unsigned long addr = (offset&0xff) | ((dev_fn&0xff)<<8) | ((bus & 0xff)<<16);
@@ -204,7 +205,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int rtas_pcibios_write_config_word(unsigned char bus, unsigned char dev_fn,
+int __chrp rtas_pcibios_write_config_word(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned short val)
{
unsigned long addr = (offset&0xff) | ((dev_fn&0xff)<<8) | ((bus & 0xff)<<16);
@@ -213,7 +214,7 @@
return PCIBIOS_SUCCESSFUL;
}
-int rtas_pcibios_write_config_dword(unsigned char bus, unsigned char dev_fn,
+int __chrp rtas_pcibios_write_config_dword(unsigned char bus, unsigned char dev_fn,
unsigned char offset, unsigned int val)
{
unsigned long addr = (offset&0xff) | ((dev_fn&0xff)<<8) | ((bus & 0xff)<<16);
diff -uNr linux.orig/arch/ppc/kernel/chrp_setup.c linux/arch/ppc/kernel/chrp_setup.c
--- linux.orig/arch/ppc/kernel/chrp_setup.c Tue May 2 13:57:02 2000
+++ linux/arch/ppc/kernel/chrp_setup.c Wed May 10 23:37:54 2000
@@ -49,6 +49,7 @@
#include <asm/irq.h>
#include <asm/hydra.h>
#include <asm/keyboard.h>
+#include <asm/init.h>
#include "time.h"
#include "local_irq.h"
@@ -112,7 +113,7 @@
"Disabled", "Write-Through", "Copy-Back", "Transparent Mode"
};
-int
+int __chrp
chrp_get_cpuinfo(char *buffer)
{
int i, len, sdramen;
@@ -306,7 +307,7 @@
}
}
-void
+void __chrp
chrp_event_scan(void)
{
unsigned char log[1024];
@@ -317,7 +318,7 @@
ppc_md.heartbeat_count = ppc_md.heartbeat_reset;
}
-void
+void __chrp
chrp_restart(char *cmd)
{
printk("RTAS system-reboot returned %d\n",
@@ -325,7 +326,7 @@
for (;;);
}
-void
+void __chrp
chrp_power_off(void)
{
/* allow power on only with power button press */
@@ -334,13 +335,13 @@
for (;;);
}
-void
+void __chrp
chrp_halt(void)
{
chrp_power_off();
}
-u_int
+u_int __chrp
chrp_irq_cannonicalize(u_int irq)
{
if (irq == 2)
@@ -353,7 +354,7 @@
}
}
-int chrp_get_irq( struct pt_regs *regs )
+int __chrp chrp_get_irq( struct pt_regs *regs )
{
int irq;
@@ -383,7 +384,7 @@
return irq;
}
-void chrp_post_irq(struct pt_regs* regs, int irq)
+void __chrp chrp_post_irq(struct pt_regs* regs, int irq)
{
/*
* If it's an i8259 irq then we've already done the
@@ -445,7 +446,7 @@
ide_ioreg_t chrp_ide_regbase[MAX_HWIFS];
ide_ioreg_t chrp_idedma_regbase;
-void
+void __chrp
chrp_ide_probe(void)
{
struct pci_dev *pdev = pci_find_device(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105, NULL);
@@ -460,19 +461,19 @@
}
}
-void
+void __chrp
chrp_ide_insw(ide_ioreg_t port, void *buf, int ns)
{
ide_insw(port+_IO_BASE, buf, ns);
}
-void
+void __chrp
chrp_ide_outsw(ide_ioreg_t port, void *buf, int ns)
{
ide_outsw(port+_IO_BASE, buf, ns);
}
-int
+int __chrp
chrp_ide_default_irq(ide_ioreg_t base)
{
if (chrp_ide_ports_known == 0)
@@ -480,7 +481,7 @@
return chrp_ide_irq;
}
-ide_ioreg_t
+ide_ioreg_t __chrp
chrp_ide_default_io_base(int index)
{
if (chrp_ide_ports_known == 0)
@@ -488,13 +489,13 @@
return chrp_ide_regbase[index];
}
-int
+int __chrp
chrp_ide_check_region(ide_ioreg_t from, unsigned int extent)
{
return check_region(from, extent);
}
-void
+void __chrp
chrp_ide_request_region(ide_ioreg_t from,
unsigned int extent,
const char *name)
@@ -502,20 +503,20 @@
request_region(from, extent, name);
}
-void
+void __chrp
chrp_ide_release_region(ide_ioreg_t from,
unsigned int extent)
{
release_region(from, extent);
}
-void
+void __chrp
chrp_ide_fix_driveid(struct hd_driveid *id)
{
ppc_generic_ide_fix_driveid(id);
}
-void
+void __chrp
chrp_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq)
{
ide_ioreg_t reg = data_port;
@@ -629,7 +630,7 @@
if ( ppc_md.progress ) ppc_md.progress("Linux/PPC "UTS_RELEASE"\n", 0x0);
}
-void
+void __chrp
chrp_progress(char *s, unsigned short hex)
{
extern unsigned int rtas_data;
diff -uNr linux.orig/arch/ppc/kernel/chrp_time.c linux/arch/ppc/kernel/chrp_time.c
--- linux.orig/arch/ppc/kernel/chrp_time.c Tue May 2 13:49:02 2000
+++ linux/arch/ppc/kernel/chrp_time.c Wed May 10 23:38:07 2000
@@ -25,6 +25,7 @@
#include <asm/processor.h>
#include <asm/nvram.h>
#include <asm/prom.h>
+#include <asm/init.h>
#include "time.h"
static int nvram_as1 = NVRAM_AS1;
@@ -45,7 +46,7 @@
nvram_data = base + 1;
}
-int chrp_cmos_clock_read(int addr)
+int __chrp chrp_cmos_clock_read(int addr)
{
if (nvram_as1 != 0)
outb(addr>>8, nvram_as1);
@@ -53,7 +54,7 @@
return (inb(nvram_data));
}
-void chrp_cmos_clock_write(unsigned long val, int addr)
+void __chrp chrp_cmos_clock_write(unsigned long val, int addr)
{
if (nvram_as1 != 0)
outb(addr>>8, nvram_as1);
@@ -65,7 +66,7 @@
/*
* Set the hardware clock. -- Cort
*/
-int chrp_set_rtc_time(unsigned long nowtime)
+int __chrp chrp_set_rtc_time(unsigned long nowtime)
{
unsigned char save_control, save_freq_select;
struct rtc_time tm;
@@ -111,7 +112,7 @@
return 0;
}
-unsigned long chrp_get_rtc_time(void)
+unsigned long __chrp chrp_get_rtc_time(void)
{
unsigned int year, mon, day, hour, min, sec;
int i;
diff -uNr linux.orig/arch/ppc/mm/init.c linux/arch/ppc/mm/init.c
--- linux.orig/arch/ppc/mm/init.c Tue May 2 13:57:03 2000
+++ linux/arch/ppc/mm/init.c Wed May 10 23:27:11 2000
@@ -77,6 +77,7 @@
extern char etext[], _stext[];
extern char __init_begin, __init_end;
extern char __prep_begin, __prep_end;
+extern char __chrp_begin, __chrp_end;
extern char __pmac_begin, __pmac_end;
extern char __apus_begin, __apus_end;
extern char __openfirmware_begin, __openfirmware_end;
@@ -768,7 +769,7 @@
unsigned long a;
unsigned long num_freed_pages = 0, num_prep_pages = 0,
num_pmac_pages = 0, num_openfirmware_pages = 0,
- num_apus_pages = 0;
+ num_apus_pages = 0, num_chrp_pages = 0;
#define FREESEC(START,END,CNT) do { \
a = (unsigned long)(&START); \
for (; a < (unsigned long)(&END); a += PAGE_SIZE) { \
@@ -785,6 +786,7 @@
case _MACH_Pmac:
FREESEC(__apus_begin,__apus_end,num_apus_pages);
FREESEC(__prep_begin,__prep_end,num_prep_pages);
+ FREESEC(__chrp_begin,__chrp_end,num_chrp_pages);
break;
case _MACH_chrp:
FREESEC(__apus_begin,__apus_end,num_apus_pages);
@@ -820,6 +822,8 @@
if ( num_prep_pages )
printk(" %ldk prep", PGTOKB(num_prep_pages));
+ if ( num_chrp_pages )
+ printk(" %ldk chrp", PGTOKB(num_chrp_pages));
if ( num_pmac_pages )
printk(" %ldk pmac", PGTOKB(num_pmac_pages));
if ( num_openfirmware_pages )
diff -uNr linux.orig/arch/ppc/vmlinux.lds linux/arch/ppc/vmlinux.lds
--- linux.orig/arch/ppc/vmlinux.lds Thu Oct 7 13:17:09 1999
+++ linux/arch/ppc/vmlinux.lds Wed May 10 23:24:50 2000
@@ -104,6 +104,13 @@
__prep_end = .;
. = ALIGN(4096);
+ __chrp_begin = .;
+ .text.chrp : { *(.text.chrp) }
+ .data.chrp : { *(.data.chrp) }
+ . = ALIGN(4096);
+ __chrp_end = .;
+
+ . = ALIGN(4096);
__apus_begin = .;
.text.apus : { *(.text.apus) }
.data.apus : { *(.data.apus) }
diff -uNr linux.orig/include/asm-ppc/init.h linux/include/asm-ppc/init.h
--- linux.orig/include/asm-ppc/init.h Sat Nov 27 18:42:33 1999
+++ linux/include/asm-ppc/init.h Wed May 10 23:25:43 2000
@@ -16,6 +16,12 @@
__argprep __prep; \
__argprep
+#define __chrp __attribute__ ((__section__ (".text.chrp")))
+#define __chrpdata __attribute__ ((__section__ (".data.chrp")))
+#define __chrpfunc(__argchrp) \
+ __argchrp __chrp; \
+ __argchrp
+
#define __apus __attribute__ ((__section__ (".text.apus")))
#define __apusdata __attribute__ ((__section__ (".data.apus")))
#define __apusfunc(__argapus) \
More information about the Linuxppc-dev
mailing list