diff options
Diffstat (limited to 'arch/m68k/kernel')
-rw-r--r-- | arch/m68k/kernel/Makefile | 3 | ||||
-rw-r--r-- | arch/m68k/kernel/dma.c | 4 | ||||
-rw-r--r-- | arch/m68k/kernel/entry.S | 33 | ||||
-rw-r--r-- | arch/m68k/kernel/ints.c | 21 | ||||
-rw-r--r-- | arch/m68k/kernel/m68k_ksyms.c | 4 | ||||
-rw-r--r-- | arch/m68k/kernel/setup.c | 2 | ||||
-rw-r--r-- | arch/m68k/kernel/time.c | 7 |
7 files changed, 55 insertions, 19 deletions
diff --git a/arch/m68k/kernel/Makefile b/arch/m68k/kernel/Makefile index dae609797dc0..1c9ecaa473d5 100644 --- a/arch/m68k/kernel/Makefile +++ b/arch/m68k/kernel/Makefile | |||
@@ -9,10 +9,11 @@ else | |||
9 | endif | 9 | endif |
10 | extra-y += vmlinux.lds | 10 | extra-y += vmlinux.lds |
11 | 11 | ||
12 | obj-y := entry.o process.o traps.o ints.o dma.o signal.o ptrace.o \ | 12 | obj-y := entry.o process.o traps.o ints.o signal.o ptrace.o \ |
13 | sys_m68k.o time.o semaphore.o setup.o m68k_ksyms.o | 13 | sys_m68k.o time.o semaphore.o setup.o m68k_ksyms.o |
14 | 14 | ||
15 | obj-$(CONFIG_PCI) += bios32.o | 15 | obj-$(CONFIG_PCI) += bios32.o |
16 | obj-$(CONFIG_MODULES) += module.o | 16 | obj-$(CONFIG_MODULES) += module.o |
17 | obj-y$(CONFIG_MMU_SUN3) += dma.o # no, it's not a typo | ||
17 | 18 | ||
18 | EXTRA_AFLAGS := -traditional | 19 | EXTRA_AFLAGS := -traditional |
diff --git a/arch/m68k/kernel/dma.c b/arch/m68k/kernel/dma.c index fc449f8b2045..9d4e4b5b6bd8 100644 --- a/arch/m68k/kernel/dma.c +++ b/arch/m68k/kernel/dma.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <asm/scatterlist.h> | 15 | #include <asm/scatterlist.h> |
16 | 16 | ||
17 | void *dma_alloc_coherent(struct device *dev, size_t size, | 17 | void *dma_alloc_coherent(struct device *dev, size_t size, |
18 | dma_addr_t *handle, int flag) | 18 | dma_addr_t *handle, gfp_t flag) |
19 | { | 19 | { |
20 | struct page *page, **map; | 20 | struct page *page, **map; |
21 | pgprot_t pgprot; | 21 | pgprot_t pgprot; |
@@ -51,7 +51,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size, | |||
51 | pgprot_val(pgprot) |= _PAGE_GLOBAL040 | _PAGE_NOCACHE_S; | 51 | pgprot_val(pgprot) |= _PAGE_GLOBAL040 | _PAGE_NOCACHE_S; |
52 | else | 52 | else |
53 | pgprot_val(pgprot) |= _PAGE_NOCACHE030; | 53 | pgprot_val(pgprot) |= _PAGE_NOCACHE030; |
54 | addr = vmap(map, size, flag, pgprot); | 54 | addr = vmap(map, size, VM_MAP, pgprot); |
55 | kfree(map); | 55 | kfree(map); |
56 | 56 | ||
57 | return addr; | 57 | return addr; |
diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S index 9083c8b7659f..222ce4244564 100644 --- a/arch/m68k/kernel/entry.S +++ b/arch/m68k/kernel/entry.S | |||
@@ -205,7 +205,7 @@ ENTRY(auto_inthandler) | |||
205 | movel %sp,%sp@- | 205 | movel %sp,%sp@- |
206 | movel %d0,%sp@- | put vector # on stack | 206 | movel %d0,%sp@- | put vector # on stack |
207 | auto_irqhandler_fixup = . + 2 | 207 | auto_irqhandler_fixup = . + 2 |
208 | jsr m68k_handle_int | process the IRQ | 208 | jsr __m68k_handle_int | process the IRQ |
209 | addql #8,%sp | pop parameters off stack | 209 | addql #8,%sp | pop parameters off stack |
210 | 210 | ||
211 | ret_from_interrupt: | 211 | ret_from_interrupt: |
@@ -239,7 +239,7 @@ user_irqvec_fixup = . + 2 | |||
239 | movel %sp,%sp@- | 239 | movel %sp,%sp@- |
240 | movel %d0,%sp@- | put vector # on stack | 240 | movel %d0,%sp@- | put vector # on stack |
241 | user_irqhandler_fixup = . + 2 | 241 | user_irqhandler_fixup = . + 2 |
242 | jsr m68k_handle_int | process the IRQ | 242 | jsr __m68k_handle_int | process the IRQ |
243 | addql #8,%sp | pop parameters off stack | 243 | addql #8,%sp | pop parameters off stack |
244 | 244 | ||
245 | subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) | 245 | subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) |
@@ -706,4 +706,33 @@ sys_call_table: | |||
706 | .long sys_add_key | 706 | .long sys_add_key |
707 | .long sys_request_key /* 280 */ | 707 | .long sys_request_key /* 280 */ |
708 | .long sys_keyctl | 708 | .long sys_keyctl |
709 | .long sys_ioprio_set | ||
710 | .long sys_ioprio_get | ||
711 | .long sys_inotify_init | ||
712 | .long sys_inotify_add_watch /* 285 */ | ||
713 | .long sys_inotify_rm_watch | ||
714 | .long sys_migrate_pages | ||
715 | .long sys_openat | ||
716 | .long sys_mkdirat | ||
717 | .long sys_mknodat /* 290 */ | ||
718 | .long sys_fchownat | ||
719 | .long sys_futimesat | ||
720 | .long sys_fstatat64 | ||
721 | .long sys_unlinkat | ||
722 | .long sys_renameat /* 295 */ | ||
723 | .long sys_linkat | ||
724 | .long sys_symlinkat | ||
725 | .long sys_readlinkat | ||
726 | .long sys_fchmodat | ||
727 | .long sys_faccessat /* 300 */ | ||
728 | .long sys_ni_syscall /* Reserved for pselect6 */ | ||
729 | .long sys_ni_syscall /* Reserved for ppoll */ | ||
730 | .long sys_unshare | ||
731 | .long sys_set_robust_list | ||
732 | .long sys_get_robust_list /* 305 */ | ||
733 | .long sys_splice | ||
734 | .long sys_sync_file_range | ||
735 | .long sys_tee | ||
736 | .long sys_vmsplice | ||
737 | .long sys_move_pages /* 310 */ | ||
709 | 738 | ||
diff --git a/arch/m68k/kernel/ints.c b/arch/m68k/kernel/ints.c index b33e37fb7b0e..84aceca6c05c 100644 --- a/arch/m68k/kernel/ints.c +++ b/arch/m68k/kernel/ints.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <asm/page.h> | 39 | #include <asm/page.h> |
40 | #include <asm/machdep.h> | 40 | #include <asm/machdep.h> |
41 | #include <asm/cacheflush.h> | 41 | #include <asm/cacheflush.h> |
42 | #include <asm/irq_regs.h> | ||
42 | 43 | ||
43 | #ifdef CONFIG_Q40 | 44 | #ifdef CONFIG_Q40 |
44 | #include <asm/q40ints.h> | 45 | #include <asm/q40ints.h> |
@@ -104,7 +105,7 @@ void __init init_IRQ(void) | |||
104 | * @handler: called from auto vector interrupts | 105 | * @handler: called from auto vector interrupts |
105 | * | 106 | * |
106 | * setup the handler to be called from auto vector interrupts instead of the | 107 | * setup the handler to be called from auto vector interrupts instead of the |
107 | * standard m68k_handle_int(), it will be called with irq numbers in the range | 108 | * standard __m68k_handle_int(), it will be called with irq numbers in the range |
108 | * from IRQ_AUTO_1 - IRQ_AUTO_7. | 109 | * from IRQ_AUTO_1 - IRQ_AUTO_7. |
109 | */ | 110 | */ |
110 | void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) | 111 | void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) |
@@ -123,7 +124,7 @@ void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_re | |||
123 | * setup user vector interrupts, this includes activating the specified range | 124 | * setup user vector interrupts, this includes activating the specified range |
124 | * of interrupts, only then these interrupts can be requested (note: this is | 125 | * of interrupts, only then these interrupts can be requested (note: this is |
125 | * different from auto vector interrupts). An optional handler can be installed | 126 | * different from auto vector interrupts). An optional handler can be installed |
126 | * to be called instead of the default m68k_handle_int(), it will be called | 127 | * to be called instead of the default __m68k_handle_int(), it will be called |
127 | * with irq numbers starting from IRQ_USER. | 128 | * with irq numbers starting from IRQ_USER. |
128 | */ | 129 | */ |
129 | void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, | 130 | void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, |
@@ -131,6 +132,7 @@ void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, | |||
131 | { | 132 | { |
132 | int i; | 133 | int i; |
133 | 134 | ||
135 | BUG_ON(IRQ_USER + cnt >= NR_IRQS); | ||
134 | m68k_first_user_vec = vec; | 136 | m68k_first_user_vec = vec; |
135 | for (i = 0; i < cnt; i++) | 137 | for (i = 0; i < cnt; i++) |
136 | irq_controller[IRQ_USER + i] = &user_irq_controller; | 138 | irq_controller[IRQ_USER + i] = &user_irq_controller; |
@@ -215,7 +217,7 @@ int setup_irq(unsigned int irq, struct irq_node *node) | |||
215 | } | 217 | } |
216 | 218 | ||
217 | int request_irq(unsigned int irq, | 219 | int request_irq(unsigned int irq, |
218 | irqreturn_t (*handler) (int, void *, struct pt_regs *), | 220 | irq_handler_t handler, |
219 | unsigned long flags, const char *devname, void *dev_id) | 221 | unsigned long flags, const char *devname, void *dev_id) |
220 | { | 222 | { |
221 | struct irq_node *node; | 223 | struct irq_node *node; |
@@ -379,18 +381,25 @@ unsigned int irq_canonicalize(unsigned int irq) | |||
379 | 381 | ||
380 | EXPORT_SYMBOL(irq_canonicalize); | 382 | EXPORT_SYMBOL(irq_canonicalize); |
381 | 383 | ||
382 | asmlinkage void m68k_handle_int(unsigned int irq, struct pt_regs *regs) | 384 | asmlinkage void m68k_handle_int(unsigned int irq) |
383 | { | 385 | { |
384 | struct irq_node *node; | 386 | struct irq_node *node; |
385 | |||
386 | kstat_cpu(0).irqs[irq]++; | 387 | kstat_cpu(0).irqs[irq]++; |
387 | node = irq_list[irq]; | 388 | node = irq_list[irq]; |
388 | do { | 389 | do { |
389 | node->handler(irq, node->dev_id, regs); | 390 | node->handler(irq, node->dev_id); |
390 | node = node->next; | 391 | node = node->next; |
391 | } while (node); | 392 | } while (node); |
392 | } | 393 | } |
393 | 394 | ||
395 | asmlinkage void __m68k_handle_int(unsigned int irq, struct pt_regs *regs) | ||
396 | { | ||
397 | struct pt_regs *old_regs; | ||
398 | old_regs = set_irq_regs(regs); | ||
399 | m68k_handle_int(irq); | ||
400 | set_irq_regs(old_regs); | ||
401 | } | ||
402 | |||
394 | asmlinkage void handle_badint(struct pt_regs *regs) | 403 | asmlinkage void handle_badint(struct pt_regs *regs) |
395 | { | 404 | { |
396 | kstat_cpu(0).irqs[0]++; | 405 | kstat_cpu(0).irqs[0]++; |
diff --git a/arch/m68k/kernel/m68k_ksyms.c b/arch/m68k/kernel/m68k_ksyms.c index aff26a52167c..f9636e84e6a4 100644 --- a/arch/m68k/kernel/m68k_ksyms.c +++ b/arch/m68k/kernel/m68k_ksyms.c | |||
@@ -1,7 +1,6 @@ | |||
1 | #include <linux/module.h> | 1 | #include <linux/module.h> |
2 | #include <linux/linkage.h> | 2 | #include <linux/linkage.h> |
3 | #include <linux/sched.h> | 3 | #include <linux/sched.h> |
4 | #include <linux/string.h> | ||
5 | #include <linux/mm.h> | 4 | #include <linux/mm.h> |
6 | #include <linux/user.h> | 5 | #include <linux/user.h> |
7 | #include <linux/elfcore.h> | 6 | #include <linux/elfcore.h> |
@@ -53,9 +52,6 @@ EXPORT_SYMBOL(mach_beep); | |||
53 | #endif | 52 | #endif |
54 | EXPORT_SYMBOL(dump_fpu); | 53 | EXPORT_SYMBOL(dump_fpu); |
55 | EXPORT_SYMBOL(dump_thread); | 54 | EXPORT_SYMBOL(dump_thread); |
56 | EXPORT_SYMBOL(strnlen); | ||
57 | EXPORT_SYMBOL(strrchr); | ||
58 | EXPORT_SYMBOL(strstr); | ||
59 | EXPORT_SYMBOL(kernel_thread); | 55 | EXPORT_SYMBOL(kernel_thread); |
60 | #ifdef CONFIG_VME | 56 | #ifdef CONFIG_VME |
61 | EXPORT_SYMBOL(vme_brdtype); | 57 | EXPORT_SYMBOL(vme_brdtype); |
diff --git a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c index f2d7ee0ee18c..42d5b85f3350 100644 --- a/arch/m68k/kernel/setup.c +++ b/arch/m68k/kernel/setup.c | |||
@@ -64,7 +64,7 @@ static char m68k_command_line[CL_SIZE]; | |||
64 | 64 | ||
65 | char m68k_debug_device[6] = ""; | 65 | char m68k_debug_device[6] = ""; |
66 | 66 | ||
67 | void (*mach_sched_init) (irqreturn_t (*handler)(int, void *, struct pt_regs *)) __initdata = NULL; | 67 | void (*mach_sched_init) (irq_handler_t handler) __initdata = NULL; |
68 | /* machine dependent irq functions */ | 68 | /* machine dependent irq functions */ |
69 | void (*mach_init_IRQ) (void) __initdata = NULL; | 69 | void (*mach_init_IRQ) (void) __initdata = NULL; |
70 | void (*mach_get_model) (char *model); | 70 | void (*mach_get_model) (char *model); |
diff --git a/arch/m68k/kernel/time.c b/arch/m68k/kernel/time.c index 28b2fefa4513..2a599c3ed787 100644 --- a/arch/m68k/kernel/time.c +++ b/arch/m68k/kernel/time.c | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include <asm/machdep.h> | 22 | #include <asm/machdep.h> |
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | #include <asm/irq_regs.h> | ||
24 | 25 | ||
25 | #include <linux/time.h> | 26 | #include <linux/time.h> |
26 | #include <linux/timex.h> | 27 | #include <linux/timex.h> |
@@ -37,13 +38,13 @@ static inline int set_rtc_mmss(unsigned long nowtime) | |||
37 | * timer_interrupt() needs to keep up the real-time clock, | 38 | * timer_interrupt() needs to keep up the real-time clock, |
38 | * as well as call the "do_timer()" routine every clocktick | 39 | * as well as call the "do_timer()" routine every clocktick |
39 | */ | 40 | */ |
40 | static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs) | 41 | static irqreturn_t timer_interrupt(int irq, void *dummy) |
41 | { | 42 | { |
42 | do_timer(1); | 43 | do_timer(1); |
43 | #ifndef CONFIG_SMP | 44 | #ifndef CONFIG_SMP |
44 | update_process_times(user_mode(regs)); | 45 | update_process_times(user_mode(get_irq_regs())); |
45 | #endif | 46 | #endif |
46 | profile_tick(CPU_PROFILING, regs); | 47 | profile_tick(CPU_PROFILING); |
47 | 48 | ||
48 | #ifdef CONFIG_HEARTBEAT | 49 | #ifdef CONFIG_HEARTBEAT |
49 | /* use power LED as a heartbeat instead -- much more useful | 50 | /* use power LED as a heartbeat instead -- much more useful |