#define RANGE_CHECK_OK(addr, size, lower, upper) \
(((addr) >= (lower)) && (((addr) + (size)) < (upper)))
-- extern unsigned long _ramend;
++ extern unsigned long _ramend;
return(RANGE_CHECK_OK(addr, size, 0L, (unsigned long)&_ramend));
}
#define get_user(x, ptr) \
({ \
+ unsigned long long __gu_val; \
int __gu_err = 0; \
- typeof(*(ptr)) __gu_val = *ptr; \
switch (sizeof(*(ptr))) { \
case 1: \
+ __gu_val = *((u8 *)(ptr)); \
+ break; \
case 2: \
+ __gu_val = *((u16 *)ptr); \
+ break; \
case 4: \
+ __gu_val = *((u32 *)ptr); \
+ break; \
case 8: \
- break; \
+ memcpy((void *)&__gu_val, ptr, sizeof(*(ptr))); \
+ break; \
default: \
__gu_err = __get_user_bad(); \
- __gu_val = 0; \
break; \
} \
(x) = __gu_val; \
#define copy_from_user_ret(to,from,n,retval) ({ if (copy_from_user(to,from,n)) return retval; })
- #define __clear_user(addr, size) memset(addr, 0, size)
- #define clear_user(addr, size) __clear_user(addr, size)
-/*
- * Copy a null terminated string from userspace.
- */
-
-static inline long
-strncpy_from_user(char *dst, const char *src, long count)
-{
- char *tmp;
- strncpy(dst, src, count);
- for (tmp = dst; *tmp && count > 0; tmp++, count--)
- ;
- return(tmp - dst); /* DAVIDM should we count a NUL ? check getname */
-}
-
-/*
- * Return the size of a string (including the ending 0)
- *
- * Return 0 on exception, a value greater than N if too long
- */
-static inline long strnlen_user(const char *src, long n)
-{
- return(strlen(src) + 1); /* DAVIDM make safer */
-}
-
-#define strlen_user(str) strnlen_user(str, 32767)
-
-/*
- * Zero Userspace
- */
-
-static inline unsigned long
-clear_user(void *to, unsigned long n)
-{
- memset(to, 0, n);
- return 0;
-}
++unsigned long clear_user(void __user *addr, unsigned long size);
+#define strncpy_from_user(s, d, n) strncpy(s, d, n)
+#define strnlen_user(s, n) strnlen(s, n)
+ #define __clear_user clear_user
+
#endif /* _H8300_UACCESS_H */
char __initdata command_line[COMMAND_LINE_SIZE];
- extern int _stext, _etext, _sdata, _edata, _sbss, _ebss, _end;
-extern int _ramstart, _ramend;
+extern unsigned long _ramstart, _ramend;
extern char _target_name[];
-extern void h8300_gpio_init(void);
-
-#if (defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM)) \
- && defined(CONFIG_GDB_MAGICPRINT)
-/* printk with gdb service */
-static void gdb_console_output(struct console *c, const char *msg, unsigned len)
-{
- for (; len > 0; len--) {
- asm("mov.w %0,r2\n\t"
- "jsr @0xc4"::"r"(*msg++):"er2");
- }
-}
-
-/*
- * Setup initial baud/bits/parity. We do two things here:
- * - construct a cflag setting for the first rs_open()
- * - initialize the serial port
- * Return non-zero if we didn't find a serial port.
- */
-static int __init gdb_console_setup(struct console *co, char *options)
-{
- return 0;
-}
-
-static const struct console gdb_console = {
- .name = "gdb_con",
- .write = gdb_console_output,
- .device = NULL,
- .setup = gdb_console_setup,
- .flags = CON_PRINTBUFFER,
- .index = -1,
-};
-#endif
+extern char command_start[];
+void h8300_early_devices_register(void);
void __init setup_arch(char **cmdline_p)
{
memory_end = CONFIG_BLKDEV_RESERVE_ADDRESS;
#endif
- init_mm.start_code = (unsigned long) &_stext;
- init_mm.end_code = (unsigned long) &_etext;
- init_mm.end_data = (unsigned long) &_edata;
+ init_mm.start_code = (unsigned long) _stext;
+ init_mm.end_code = (unsigned long) _etext;
+ init_mm.end_data = (unsigned long) _edata;
init_mm.brk = (unsigned long) 0;
-#if (defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM)) && defined(CONFIG_GDB_MAGICPRINT)
- register_console((struct console *)&gdb_console);
-#endif
-
printk(KERN_INFO "\r\n\nuClinux " CPU "\n");
printk(KERN_INFO "Target Hardware: %s\n",_target_name);
printk(KERN_INFO "Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne\n");
#include <linux/profile.h>
#include <asm/io.h>
+ #include <asm/irq_regs.h>
#include <asm/timer.h>
+#include <asm/irq_regs.h>
#define TICK_SIZE (tick_nsec / 1000)
{
. = ALIGN(0x4) ;
__sbss = . ;
++ ___bss_start = .;
*(.bss*)
. = ALIGN(0x4) ;
*(COMMON)
.text
.global SYMBOL_NAME(memset)
++.global SYMBOL_NAME(clear_user)
;;void *memset(*ptr, int c, size_t count)
;; ptr = er0
bne 5b
6:
rts
++
++SYMBOL_NAME_LABEL(clear_user)
++ mov.l r1, r2
++ sub.l er1, er1
++ bra SYMBOL_NAME(memset)
/* this will put all memory onto the freelists */
totalram_pages = free_all_bootmem();
- codek = (&_etext - &_stext) >> 10;
- datak = (&_ebss - &_sdata) >> 10;
- initk = (&__init_begin - &__init_end) >> 10;
+ codek = (_etext - _stext) >> 10;
- datak = (__bss_stop - _sdata) >> 10;
++ datak = (__bss_start - _sdata) >> 10;
+ initk = (__init_begin - __init_end) >> 10;
tmp = nr_free_pages() << PAGE_SHIFT;
printk(KERN_INFO "Memory available: %luk/%luk RAM, %luk/%luk ROM (%dk kernel code, %dk data)\n",