aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68k/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/m68k/kernel')
-rw-r--r--arch/m68k/kernel/Makefile3
-rw-r--r--arch/m68k/kernel/dma.c4
-rw-r--r--arch/m68k/kernel/entry.S33
-rw-r--r--arch/m68k/kernel/ints.c21
-rw-r--r--arch/m68k/kernel/m68k_ksyms.c4
-rw-r--r--arch/m68k/kernel/setup.c2
-rw-r--r--arch/m68k/kernel/time.c7
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
9endif 9endif
10extra-y += vmlinux.lds 10extra-y += vmlinux.lds
11 11
12obj-y := entry.o process.o traps.o ints.o dma.o signal.o ptrace.o \ 12obj-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
15obj-$(CONFIG_PCI) += bios32.o 15obj-$(CONFIG_PCI) += bios32.o
16obj-$(CONFIG_MODULES) += module.o 16obj-$(CONFIG_MODULES) += module.o
17obj-y$(CONFIG_MMU_SUN3) += dma.o # no, it's not a typo
17 18
18EXTRA_AFLAGS := -traditional 19EXTRA_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
17void *dma_alloc_coherent(struct device *dev, size_t size, 17void *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
207auto_irqhandler_fixup = . + 2 207auto_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
211ret_from_interrupt: 211ret_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
241user_irqhandler_fixup = . + 2 241user_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 */
110void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) 111void __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 */
129void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, 130void __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
217int request_irq(unsigned int irq, 219int 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
380EXPORT_SYMBOL(irq_canonicalize); 382EXPORT_SYMBOL(irq_canonicalize);
381 383
382asmlinkage void m68k_handle_int(unsigned int irq, struct pt_regs *regs) 384asmlinkage 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
395asmlinkage 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
394asmlinkage void handle_badint(struct pt_regs *regs) 403asmlinkage 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
54EXPORT_SYMBOL(dump_fpu); 53EXPORT_SYMBOL(dump_fpu);
55EXPORT_SYMBOL(dump_thread); 54EXPORT_SYMBOL(dump_thread);
56EXPORT_SYMBOL(strnlen);
57EXPORT_SYMBOL(strrchr);
58EXPORT_SYMBOL(strstr);
59EXPORT_SYMBOL(kernel_thread); 55EXPORT_SYMBOL(kernel_thread);
60#ifdef CONFIG_VME 56#ifdef CONFIG_VME
61EXPORT_SYMBOL(vme_brdtype); 57EXPORT_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
65char m68k_debug_device[6] = ""; 65char m68k_debug_device[6] = "";
66 66
67void (*mach_sched_init) (irqreturn_t (*handler)(int, void *, struct pt_regs *)) __initdata = NULL; 67void (*mach_sched_init) (irq_handler_t handler) __initdata = NULL;
68/* machine dependent irq functions */ 68/* machine dependent irq functions */
69void (*mach_init_IRQ) (void) __initdata = NULL; 69void (*mach_init_IRQ) (void) __initdata = NULL;
70void (*mach_get_model) (char *model); 70void (*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 */
40static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs) 41static 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