aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/include
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc/include')
-rw-r--r--arch/sparc/include/asm/atomic_32.h8
-rw-r--r--arch/sparc/include/asm/atomic_64.h18
-rw-r--r--arch/sparc/include/asm/auxio.h7
-rw-r--r--arch/sparc/include/asm/auxio_32.h6
-rw-r--r--arch/sparc/include/asm/auxio_64.h6
-rw-r--r--arch/sparc/include/asm/bitext.h6
-rw-r--r--arch/sparc/include/asm/bitops_32.h6
-rw-r--r--arch/sparc/include/asm/bitops_64.h24
-rw-r--r--arch/sparc/include/asm/btext.h2
-rw-r--r--arch/sparc/include/asm/bug.h4
-rw-r--r--arch/sparc/include/asm/cacheflush_32.h8
-rw-r--r--arch/sparc/include/asm/cacheflush_64.h24
-rw-r--r--arch/sparc/include/asm/checksum_32.h4
-rw-r--r--arch/sparc/include/asm/checksum_64.h32
-rw-r--r--arch/sparc/include/asm/cmpxchg_32.h6
-rw-r--r--arch/sparc/include/asm/cmpxchg_64.h4
-rw-r--r--arch/sparc/include/asm/cpudata.h10
-rw-r--r--arch/sparc/include/asm/cpudata_64.h5
-rw-r--r--arch/sparc/include/asm/delay_32.h4
-rw-r--r--arch/sparc/include/asm/delay_64.h4
-rw-r--r--arch/sparc/include/asm/device.h2
-rw-r--r--arch/sparc/include/asm/dma-mapping.h2
-rw-r--r--arch/sparc/include/asm/ebus_dma.h16
-rw-r--r--arch/sparc/include/asm/floppy_32.h14
-rw-r--r--arch/sparc/include/asm/floppy_64.h2
-rw-r--r--arch/sparc/include/asm/ftrace.h6
-rw-r--r--arch/sparc/include/asm/highmem.h10
-rw-r--r--arch/sparc/include/asm/hvtramp.h2
-rw-r--r--arch/sparc/include/asm/hypervisor.h325
-rw-r--r--arch/sparc/include/asm/idprom.h2
-rw-r--r--arch/sparc/include/asm/io-unit.h2
-rw-r--r--arch/sparc/include/asm/io_32.h299
-rw-r--r--arch/sparc/include/asm/io_64.h21
-rw-r--r--arch/sparc/include/asm/iommu_32.h10
-rw-r--r--arch/sparc/include/asm/iommu_64.h6
-rw-r--r--arch/sparc/include/asm/irq_32.h3
-rw-r--r--arch/sparc/include/asm/irq_64.h44
-rw-r--r--arch/sparc/include/asm/irqflags_32.h6
-rw-r--r--arch/sparc/include/asm/kdebug_64.h2
-rw-r--r--arch/sparc/include/asm/kgdb.h5
-rw-r--r--arch/sparc/include/asm/kprobes.h8
-rw-r--r--arch/sparc/include/asm/ldc.h66
-rw-r--r--arch/sparc/include/asm/leon.h54
-rw-r--r--arch/sparc/include/asm/leon_pci.h4
-rw-r--r--arch/sparc/include/asm/mc146818rtc.h5
-rw-r--r--arch/sparc/include/asm/mdesc.h32
-rw-r--r--arch/sparc/include/asm/mmu_64.h6
-rw-r--r--arch/sparc/include/asm/mmu_context_64.h24
-rw-r--r--arch/sparc/include/asm/nmi.h10
-rw-r--r--arch/sparc/include/asm/oplib_32.h68
-rw-r--r--arch/sparc/include/asm/oplib_64.h112
-rw-r--r--arch/sparc/include/asm/page.h3
-rw-r--r--arch/sparc/include/asm/page_64.h8
-rw-r--r--arch/sparc/include/asm/pci_64.h14
-rw-r--r--arch/sparc/include/asm/pcic.h8
-rw-r--r--arch/sparc/include/asm/pcr.h6
-rw-r--r--arch/sparc/include/asm/pgalloc_32.h2
-rw-r--r--arch/sparc/include/asm/pgalloc_64.h16
-rw-r--r--arch/sparc/include/asm/pgtable_32.h11
-rw-r--r--arch/sparc/include/asm/pgtable_64.h58
-rw-r--r--arch/sparc/include/asm/processor_32.h5
-rw-r--r--arch/sparc/include/asm/processor_64.h6
-rw-r--r--arch/sparc/include/asm/prom.h24
-rw-r--r--arch/sparc/include/asm/ptrace.h2
-rw-r--r--arch/sparc/include/asm/setup.h39
-rw-r--r--arch/sparc/include/asm/sfp-machine_32.h28
-rw-r--r--arch/sparc/include/asm/smp_32.h6
-rw-r--r--arch/sparc/include/asm/smp_64.h24
-rw-r--r--arch/sparc/include/asm/spitfire.h2
-rw-r--r--arch/sparc/include/asm/stacktrace.h2
-rw-r--r--arch/sparc/include/asm/starfire.h8
-rw-r--r--arch/sparc/include/asm/string_32.h12
-rw-r--r--arch/sparc/include/asm/string_64.h12
-rw-r--r--arch/sparc/include/asm/switch_to_32.h6
-rw-r--r--arch/sparc/include/asm/switch_to_64.h4
-rw-r--r--arch/sparc/include/asm/syscalls.h8
-rw-r--r--arch/sparc/include/asm/timer_32.h6
-rw-r--r--arch/sparc/include/asm/timer_64.h6
-rw-r--r--arch/sparc/include/asm/tlb_64.h8
-rw-r--r--arch/sparc/include/asm/tlbflush_64.h22
-rw-r--r--arch/sparc/include/asm/topology_64.h2
-rw-r--r--arch/sparc/include/asm/trap_block.h6
-rw-r--r--arch/sparc/include/asm/uaccess.h2
-rw-r--r--arch/sparc/include/asm/uaccess_32.h14
-rw-r--r--arch/sparc/include/asm/uaccess_64.h50
-rw-r--r--arch/sparc/include/asm/vio.h36
-rw-r--r--arch/sparc/include/asm/visasm.h3
-rw-r--r--arch/sparc/include/asm/xor_64.h28
88 files changed, 867 insertions, 986 deletions
diff --git a/arch/sparc/include/asm/atomic_32.h b/arch/sparc/include/asm/atomic_32.h
index f08fe51b264d..7aed2be45b44 100644
--- a/arch/sparc/include/asm/atomic_32.h
+++ b/arch/sparc/include/asm/atomic_32.h
@@ -20,11 +20,11 @@
20 20
21#define ATOMIC_INIT(i) { (i) } 21#define ATOMIC_INIT(i) { (i) }
22 22
23extern int __atomic_add_return(int, atomic_t *); 23int __atomic_add_return(int, atomic_t *);
24extern int atomic_cmpxchg(atomic_t *, int, int); 24int atomic_cmpxchg(atomic_t *, int, int);
25#define atomic_xchg(v, new) (xchg(&((v)->counter), new)) 25#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
26extern int __atomic_add_unless(atomic_t *, int, int); 26int __atomic_add_unless(atomic_t *, int, int);
27extern void atomic_set(atomic_t *, int); 27void atomic_set(atomic_t *, int);
28 28
29#define atomic_read(v) (*(volatile int *)&(v)->counter) 29#define atomic_read(v) (*(volatile int *)&(v)->counter)
30 30
diff --git a/arch/sparc/include/asm/atomic_64.h b/arch/sparc/include/asm/atomic_64.h
index 8b2f1bde2889..bb894c8bec56 100644
--- a/arch/sparc/include/asm/atomic_64.h
+++ b/arch/sparc/include/asm/atomic_64.h
@@ -20,15 +20,15 @@
20#define atomic_set(v, i) (((v)->counter) = i) 20#define atomic_set(v, i) (((v)->counter) = i)
21#define atomic64_set(v, i) (((v)->counter) = i) 21#define atomic64_set(v, i) (((v)->counter) = i)
22 22
23extern void atomic_add(int, atomic_t *); 23void atomic_add(int, atomic_t *);
24extern void atomic64_add(long, atomic64_t *); 24void atomic64_add(long, atomic64_t *);
25extern void atomic_sub(int, atomic_t *); 25void atomic_sub(int, atomic_t *);
26extern void atomic64_sub(long, atomic64_t *); 26void atomic64_sub(long, atomic64_t *);
27 27
28extern int atomic_add_ret(int, atomic_t *); 28int atomic_add_ret(int, atomic_t *);
29extern long atomic64_add_ret(long, atomic64_t *); 29long atomic64_add_ret(long, atomic64_t *);
30extern int atomic_sub_ret(int, atomic_t *); 30int atomic_sub_ret(int, atomic_t *);
31extern long atomic64_sub_ret(long, atomic64_t *); 31long atomic64_sub_ret(long, atomic64_t *);
32 32
33#define atomic_dec_return(v) atomic_sub_ret(1, v) 33#define atomic_dec_return(v) atomic_sub_ret(1, v)
34#define atomic64_dec_return(v) atomic64_sub_ret(1, v) 34#define atomic64_dec_return(v) atomic64_sub_ret(1, v)
@@ -107,6 +107,6 @@ static inline long atomic64_add_unless(atomic64_t *v, long a, long u)
107 107
108#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) 108#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
109 109
110extern long atomic64_dec_if_positive(atomic64_t *v); 110long atomic64_dec_if_positive(atomic64_t *v);
111 111
112#endif /* !(__ARCH_SPARC64_ATOMIC__) */ 112#endif /* !(__ARCH_SPARC64_ATOMIC__) */
diff --git a/arch/sparc/include/asm/auxio.h b/arch/sparc/include/asm/auxio.h
index 13dc67f03011..3e09a07b77e9 100644
--- a/arch/sparc/include/asm/auxio.h
+++ b/arch/sparc/include/asm/auxio.h
@@ -1,5 +1,12 @@
1#ifndef ___ASM_SPARC_AUXIO_H 1#ifndef ___ASM_SPARC_AUXIO_H
2#define ___ASM_SPARC_AUXIO_H 2#define ___ASM_SPARC_AUXIO_H
3
4#ifndef __ASSEMBLY__
5
6extern void __iomem *auxio_register;
7
8#endif /* ifndef __ASSEMBLY__ */
9
3#if defined(__sparc__) && defined(__arch64__) 10#if defined(__sparc__) && defined(__arch64__)
4#include <asm/auxio_64.h> 11#include <asm/auxio_64.h>
5#else 12#else
diff --git a/arch/sparc/include/asm/auxio_32.h b/arch/sparc/include/asm/auxio_32.h
index 3a319775ae37..5d685df427b4 100644
--- a/arch/sparc/include/asm/auxio_32.h
+++ b/arch/sparc/include/asm/auxio_32.h
@@ -34,8 +34,8 @@
34 * NOTE: these routines are implementation dependent-- 34 * NOTE: these routines are implementation dependent--
35 * understand the hardware you are querying! 35 * understand the hardware you are querying!
36 */ 36 */
37extern void set_auxio(unsigned char bits_on, unsigned char bits_off); 37void set_auxio(unsigned char bits_on, unsigned char bits_off);
38extern unsigned char get_auxio(void); /* .../asm/floppy.h */ 38unsigned char get_auxio(void); /* .../asm/floppy.h */
39 39
40/* 40/*
41 * The following routines are provided for driver-compatibility 41 * The following routines are provided for driver-compatibility
@@ -78,7 +78,7 @@ do { \
78 78
79 79
80/* AUXIO2 (Power Off Control) */ 80/* AUXIO2 (Power Off Control) */
81extern __volatile__ unsigned char * auxio_power_register; 81extern volatile u8 __iomem *auxio_power_register;
82 82
83#define AUXIO_POWER_DETECT_FAILURE 32 83#define AUXIO_POWER_DETECT_FAILURE 32
84#define AUXIO_POWER_CLEAR_FAILURE 2 84#define AUXIO_POWER_CLEAR_FAILURE 2
diff --git a/arch/sparc/include/asm/auxio_64.h b/arch/sparc/include/asm/auxio_64.h
index f61cd1e3e395..6079e59a7ad1 100644
--- a/arch/sparc/include/asm/auxio_64.h
+++ b/arch/sparc/include/asm/auxio_64.h
@@ -75,8 +75,6 @@
75 75
76#ifndef __ASSEMBLY__ 76#ifndef __ASSEMBLY__
77 77
78extern void __iomem *auxio_register;
79
80#define AUXIO_LTE_ON 1 78#define AUXIO_LTE_ON 1
81#define AUXIO_LTE_OFF 0 79#define AUXIO_LTE_OFF 0
82 80
@@ -84,7 +82,7 @@ extern void __iomem *auxio_register;
84 * 82 *
85 * on - AUXIO_LTE_ON or AUXIO_LTE_OFF 83 * on - AUXIO_LTE_ON or AUXIO_LTE_OFF
86 */ 84 */
87extern void auxio_set_lte(int on); 85void auxio_set_lte(int on);
88 86
89#define AUXIO_LED_ON 1 87#define AUXIO_LED_ON 1
90#define AUXIO_LED_OFF 0 88#define AUXIO_LED_OFF 0
@@ -93,7 +91,7 @@ extern void auxio_set_lte(int on);
93 * 91 *
94 * on - AUXIO_LED_ON or AUXIO_LED_OFF 92 * on - AUXIO_LED_ON or AUXIO_LED_OFF
95 */ 93 */
96extern void auxio_set_led(int on); 94void auxio_set_led(int on);
97 95
98#endif /* ifndef __ASSEMBLY__ */ 96#endif /* ifndef __ASSEMBLY__ */
99 97
diff --git a/arch/sparc/include/asm/bitext.h b/arch/sparc/include/asm/bitext.h
index 297b2f2fcb49..9c988bf3adb6 100644
--- a/arch/sparc/include/asm/bitext.h
+++ b/arch/sparc/include/asm/bitext.h
@@ -20,8 +20,8 @@ struct bit_map {
20 int num_colors; 20 int num_colors;
21}; 21};
22 22
23extern int bit_map_string_get(struct bit_map *t, int len, int align); 23int bit_map_string_get(struct bit_map *t, int len, int align);
24extern void bit_map_clear(struct bit_map *t, int offset, int len); 24void bit_map_clear(struct bit_map *t, int offset, int len);
25extern void bit_map_init(struct bit_map *t, unsigned long *map, int size); 25void bit_map_init(struct bit_map *t, unsigned long *map, int size);
26 26
27#endif /* defined(_SPARC_BITEXT_H) */ 27#endif /* defined(_SPARC_BITEXT_H) */
diff --git a/arch/sparc/include/asm/bitops_32.h b/arch/sparc/include/asm/bitops_32.h
index 88c9a962502c..600ed1d9c8c8 100644
--- a/arch/sparc/include/asm/bitops_32.h
+++ b/arch/sparc/include/asm/bitops_32.h
@@ -18,9 +18,9 @@
18#error only <linux/bitops.h> can be included directly 18#error only <linux/bitops.h> can be included directly
19#endif 19#endif
20 20
21extern unsigned long ___set_bit(unsigned long *addr, unsigned long mask); 21unsigned long ___set_bit(unsigned long *addr, unsigned long mask);
22extern unsigned long ___clear_bit(unsigned long *addr, unsigned long mask); 22unsigned long ___clear_bit(unsigned long *addr, unsigned long mask);
23extern unsigned long ___change_bit(unsigned long *addr, unsigned long mask); 23unsigned long ___change_bit(unsigned long *addr, unsigned long mask);
24 24
25/* 25/*
26 * Set bit 'nr' in 32-bit quantity at address 'addr' where bit '0' 26 * Set bit 'nr' in 32-bit quantity at address 'addr' where bit '0'
diff --git a/arch/sparc/include/asm/bitops_64.h b/arch/sparc/include/asm/bitops_64.h
index f1a051ca301a..2d522402a937 100644
--- a/arch/sparc/include/asm/bitops_64.h
+++ b/arch/sparc/include/asm/bitops_64.h
@@ -15,12 +15,12 @@
15#include <asm/byteorder.h> 15#include <asm/byteorder.h>
16#include <asm/barrier.h> 16#include <asm/barrier.h>
17 17
18extern int test_and_set_bit(unsigned long nr, volatile unsigned long *addr); 18int test_and_set_bit(unsigned long nr, volatile unsigned long *addr);
19extern int test_and_clear_bit(unsigned long nr, volatile unsigned long *addr); 19int test_and_clear_bit(unsigned long nr, volatile unsigned long *addr);
20extern int test_and_change_bit(unsigned long nr, volatile unsigned long *addr); 20int test_and_change_bit(unsigned long nr, volatile unsigned long *addr);
21extern void set_bit(unsigned long nr, volatile unsigned long *addr); 21void set_bit(unsigned long nr, volatile unsigned long *addr);
22extern void clear_bit(unsigned long nr, volatile unsigned long *addr); 22void clear_bit(unsigned long nr, volatile unsigned long *addr);
23extern void change_bit(unsigned long nr, volatile unsigned long *addr); 23void change_bit(unsigned long nr, volatile unsigned long *addr);
24 24
25#include <asm-generic/bitops/non-atomic.h> 25#include <asm-generic/bitops/non-atomic.h>
26 26
@@ -30,8 +30,8 @@ extern void change_bit(unsigned long nr, volatile unsigned long *addr);
30 30
31#ifdef __KERNEL__ 31#ifdef __KERNEL__
32 32
33extern int ffs(int x); 33int ffs(int x);
34extern unsigned long __ffs(unsigned long); 34unsigned long __ffs(unsigned long);
35 35
36#include <asm-generic/bitops/ffz.h> 36#include <asm-generic/bitops/ffz.h>
37#include <asm-generic/bitops/sched.h> 37#include <asm-generic/bitops/sched.h>
@@ -41,10 +41,10 @@ extern unsigned long __ffs(unsigned long);
41 * of bits set) of a N-bit word 41 * of bits set) of a N-bit word
42 */ 42 */
43 43
44extern unsigned long __arch_hweight64(__u64 w); 44unsigned long __arch_hweight64(__u64 w);
45extern unsigned int __arch_hweight32(unsigned int w); 45unsigned int __arch_hweight32(unsigned int w);
46extern unsigned int __arch_hweight16(unsigned int w); 46unsigned int __arch_hweight16(unsigned int w);
47extern unsigned int __arch_hweight8(unsigned int w); 47unsigned int __arch_hweight8(unsigned int w);
48 48
49#include <asm-generic/bitops/const_hweight.h> 49#include <asm-generic/bitops/const_hweight.h>
50#include <asm-generic/bitops/lock.h> 50#include <asm-generic/bitops/lock.h>
diff --git a/arch/sparc/include/asm/btext.h b/arch/sparc/include/asm/btext.h
index 9b2bc6b6ed0a..75a32b109e15 100644
--- a/arch/sparc/include/asm/btext.h
+++ b/arch/sparc/include/asm/btext.h
@@ -1,6 +1,6 @@
1#ifndef _SPARC_BTEXT_H 1#ifndef _SPARC_BTEXT_H
2#define _SPARC_BTEXT_H 2#define _SPARC_BTEXT_H
3 3
4extern int btext_find_display(void); 4int btext_find_display(void);
5 5
6#endif /* _SPARC_BTEXT_H */ 6#endif /* _SPARC_BTEXT_H */
diff --git a/arch/sparc/include/asm/bug.h b/arch/sparc/include/asm/bug.h
index 6bd9f43cb5a5..eaa8f8d38125 100644
--- a/arch/sparc/include/asm/bug.h
+++ b/arch/sparc/include/asm/bug.h
@@ -5,7 +5,7 @@
5#include <linux/compiler.h> 5#include <linux/compiler.h>
6 6
7#ifdef CONFIG_DEBUG_BUGVERBOSE 7#ifdef CONFIG_DEBUG_BUGVERBOSE
8extern void do_BUG(const char *file, int line); 8void do_BUG(const char *file, int line);
9#define BUG() do { \ 9#define BUG() do { \
10 do_BUG(__FILE__, __LINE__); \ 10 do_BUG(__FILE__, __LINE__); \
11 __builtin_trap(); \ 11 __builtin_trap(); \
@@ -20,6 +20,6 @@ extern void do_BUG(const char *file, int line);
20#include <asm-generic/bug.h> 20#include <asm-generic/bug.h>
21 21
22struct pt_regs; 22struct pt_regs;
23extern void die_if_kernel(char *str, struct pt_regs *regs) __attribute__ ((noreturn)); 23void __noreturn die_if_kernel(char *str, struct pt_regs *regs);
24 24
25#endif 25#endif
diff --git a/arch/sparc/include/asm/cacheflush_32.h b/arch/sparc/include/asm/cacheflush_32.h
index bb014c24f318..12164006181c 100644
--- a/arch/sparc/include/asm/cacheflush_32.h
+++ b/arch/sparc/include/asm/cacheflush_32.h
@@ -36,7 +36,7 @@
36#define flush_page_for_dma(addr) \ 36#define flush_page_for_dma(addr) \
37 sparc32_cachetlb_ops->page_for_dma(addr) 37 sparc32_cachetlb_ops->page_for_dma(addr)
38 38
39extern void sparc_flush_page_to_ram(struct page *page); 39void sparc_flush_page_to_ram(struct page *page);
40 40
41#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 41#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
42#define flush_dcache_page(page) sparc_flush_page_to_ram(page) 42#define flush_dcache_page(page) sparc_flush_page_to_ram(page)
@@ -51,8 +51,8 @@ extern void sparc_flush_page_to_ram(struct page *page);
51 * way the windows are all clean for the next process and the stack 51 * way the windows are all clean for the next process and the stack
52 * frames are up to date. 52 * frames are up to date.
53 */ 53 */
54extern void flush_user_windows(void); 54void flush_user_windows(void);
55extern void kill_user_windows(void); 55void kill_user_windows(void);
56extern void flushw_all(void); 56void flushw_all(void);
57 57
58#endif /* _SPARC_CACHEFLUSH_H */ 58#endif /* _SPARC_CACHEFLUSH_H */
diff --git a/arch/sparc/include/asm/cacheflush_64.h b/arch/sparc/include/asm/cacheflush_64.h
index 301736d9e7a1..38965379e350 100644
--- a/arch/sparc/include/asm/cacheflush_64.h
+++ b/arch/sparc/include/asm/cacheflush_64.h
@@ -10,7 +10,7 @@
10/* Cache flush operations. */ 10/* Cache flush operations. */
11#define flushw_all() __asm__ __volatile__("flushw") 11#define flushw_all() __asm__ __volatile__("flushw")
12 12
13extern void __flushw_user(void); 13void __flushw_user(void);
14#define flushw_user() __flushw_user() 14#define flushw_user() __flushw_user()
15 15
16#define flush_user_windows flushw_user 16#define flush_user_windows flushw_user
@@ -30,29 +30,29 @@ extern void __flushw_user(void);
30 * use block commit stores (which invalidate icache lines) during 30 * use block commit stores (which invalidate icache lines) during
31 * module load, so we need this. 31 * module load, so we need this.
32 */ 32 */
33extern void flush_icache_range(unsigned long start, unsigned long end); 33void flush_icache_range(unsigned long start, unsigned long end);
34extern void __flush_icache_page(unsigned long); 34void __flush_icache_page(unsigned long);
35 35
36extern void __flush_dcache_page(void *addr, int flush_icache); 36void __flush_dcache_page(void *addr, int flush_icache);
37extern void flush_dcache_page_impl(struct page *page); 37void flush_dcache_page_impl(struct page *page);
38#ifdef CONFIG_SMP 38#ifdef CONFIG_SMP
39extern void smp_flush_dcache_page_impl(struct page *page, int cpu); 39void smp_flush_dcache_page_impl(struct page *page, int cpu);
40extern void flush_dcache_page_all(struct mm_struct *mm, struct page *page); 40void flush_dcache_page_all(struct mm_struct *mm, struct page *page);
41#else 41#else
42#define smp_flush_dcache_page_impl(page,cpu) flush_dcache_page_impl(page) 42#define smp_flush_dcache_page_impl(page,cpu) flush_dcache_page_impl(page)
43#define flush_dcache_page_all(mm,page) flush_dcache_page_impl(page) 43#define flush_dcache_page_all(mm,page) flush_dcache_page_impl(page)
44#endif 44#endif
45 45
46extern void __flush_dcache_range(unsigned long start, unsigned long end); 46void __flush_dcache_range(unsigned long start, unsigned long end);
47#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 47#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
48extern void flush_dcache_page(struct page *page); 48void flush_dcache_page(struct page *page);
49 49
50#define flush_icache_page(vma, pg) do { } while(0) 50#define flush_icache_page(vma, pg) do { } while(0)
51#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) 51#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
52 52
53extern void flush_ptrace_access(struct vm_area_struct *, struct page *, 53void flush_ptrace_access(struct vm_area_struct *, struct page *,
54 unsigned long uaddr, void *kaddr, 54 unsigned long uaddr, void *kaddr,
55 unsigned long len, int write); 55 unsigned long len, int write);
56 56
57#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ 57#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
58 do { \ 58 do { \
diff --git a/arch/sparc/include/asm/checksum_32.h b/arch/sparc/include/asm/checksum_32.h
index 04471dc64847..426b2389a1c2 100644
--- a/arch/sparc/include/asm/checksum_32.h
+++ b/arch/sparc/include/asm/checksum_32.h
@@ -29,7 +29,7 @@
29 * 29 *
30 * it's best to have buff aligned on a 32-bit boundary 30 * it's best to have buff aligned on a 32-bit boundary
31 */ 31 */
32extern __wsum csum_partial(const void *buff, int len, __wsum sum); 32__wsum csum_partial(const void *buff, int len, __wsum sum);
33 33
34/* the same as csum_partial, but copies from fs:src while it 34/* the same as csum_partial, but copies from fs:src while it
35 * checksums 35 * checksums
@@ -38,7 +38,7 @@ extern __wsum csum_partial(const void *buff, int len, __wsum sum);
38 * better 64-bit) boundary 38 * better 64-bit) boundary
39 */ 39 */
40 40
41extern unsigned int __csum_partial_copy_sparc_generic (const unsigned char *, unsigned char *); 41unsigned int __csum_partial_copy_sparc_generic (const unsigned char *, unsigned char *);
42 42
43static inline __wsum 43static inline __wsum
44csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum) 44csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
diff --git a/arch/sparc/include/asm/checksum_64.h b/arch/sparc/include/asm/checksum_64.h
index 2ff81ae8f3af..b8779a6a5911 100644
--- a/arch/sparc/include/asm/checksum_64.h
+++ b/arch/sparc/include/asm/checksum_64.h
@@ -29,7 +29,7 @@
29 * 29 *
30 * it's best to have buff aligned on a 32-bit boundary 30 * it's best to have buff aligned on a 32-bit boundary
31 */ 31 */
32extern __wsum csum_partial(const void * buff, int len, __wsum sum); 32__wsum csum_partial(const void * buff, int len, __wsum sum);
33 33
34/* the same as csum_partial, but copies from user space while it 34/* the same as csum_partial, but copies from user space while it
35 * checksums 35 * checksums
@@ -37,12 +37,12 @@ extern __wsum csum_partial(const void * buff, int len, __wsum sum);
37 * here even more important to align src and dst on a 32-bit (or even 37 * here even more important to align src and dst on a 32-bit (or even
38 * better 64-bit) boundary 38 * better 64-bit) boundary
39 */ 39 */
40extern __wsum csum_partial_copy_nocheck(const void *src, void *dst, 40__wsum csum_partial_copy_nocheck(const void *src, void *dst,
41 int len, __wsum sum); 41 int len, __wsum sum);
42 42
43extern long __csum_partial_copy_from_user(const void __user *src, 43long __csum_partial_copy_from_user(const void __user *src,
44 void *dst, int len, 44 void *dst, int len,
45 __wsum sum); 45 __wsum sum);
46 46
47static inline __wsum 47static inline __wsum
48csum_partial_copy_from_user(const void __user *src, 48csum_partial_copy_from_user(const void __user *src,
@@ -59,9 +59,9 @@ csum_partial_copy_from_user(const void __user *src,
59 * Copy and checksum to user 59 * Copy and checksum to user
60 */ 60 */
61#define HAVE_CSUM_COPY_USER 61#define HAVE_CSUM_COPY_USER
62extern long __csum_partial_copy_to_user(const void *src, 62long __csum_partial_copy_to_user(const void *src,
63 void __user *dst, int len, 63 void __user *dst, int len,
64 __wsum sum); 64 __wsum sum);
65 65
66static inline __wsum 66static inline __wsum
67csum_and_copy_to_user(const void *src, 67csum_and_copy_to_user(const void *src,
@@ -77,7 +77,7 @@ csum_and_copy_to_user(const void *src,
77/* ihl is always 5 or greater, almost always is 5, and iph is word aligned 77/* ihl is always 5 or greater, almost always is 5, and iph is word aligned
78 * the majority of the time. 78 * the majority of the time.
79 */ 79 */
80extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl); 80__sum16 ip_fast_csum(const void *iph, unsigned int ihl);
81 81
82/* Fold a partial checksum without adding pseudo headers. */ 82/* Fold a partial checksum without adding pseudo headers. */
83static inline __sum16 csum_fold(__wsum sum) 83static inline __sum16 csum_fold(__wsum sum)
@@ -96,9 +96,9 @@ static inline __sum16 csum_fold(__wsum sum)
96} 96}
97 97
98static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, 98static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
99 unsigned int len, 99 unsigned int len,
100 unsigned short proto, 100 unsigned short proto,
101 __wsum sum) 101 __wsum sum)
102{ 102{
103 __asm__ __volatile__( 103 __asm__ __volatile__(
104" addcc %1, %0, %0\n" 104" addcc %1, %0, %0\n"
@@ -116,9 +116,9 @@ static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
116 * returns a 16-bit checksum, already complemented 116 * returns a 16-bit checksum, already complemented
117 */ 117 */
118static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr, 118static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
119 unsigned short len, 119 unsigned short len,
120 unsigned short proto, 120 unsigned short proto,
121 __wsum sum) 121 __wsum sum)
122{ 122{
123 return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum)); 123 return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum));
124} 124}
diff --git a/arch/sparc/include/asm/cmpxchg_32.h b/arch/sparc/include/asm/cmpxchg_32.h
index 1fae1a02e3c2..32c29a133f9d 100644
--- a/arch/sparc/include/asm/cmpxchg_32.h
+++ b/arch/sparc/include/asm/cmpxchg_32.h
@@ -20,7 +20,7 @@ static inline unsigned long xchg_u32(__volatile__ unsigned long *m, unsigned lon
20 return val; 20 return val;
21} 21}
22 22
23extern void __xchg_called_with_bad_pointer(void); 23void __xchg_called_with_bad_pointer(void);
24 24
25static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int size) 25static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int size)
26{ 26{
@@ -45,9 +45,9 @@ static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int
45#define __HAVE_ARCH_CMPXCHG 1 45#define __HAVE_ARCH_CMPXCHG 1
46 46
47/* bug catcher for when unsupported size is used - won't link */ 47/* bug catcher for when unsupported size is used - won't link */
48extern void __cmpxchg_called_with_bad_pointer(void); 48void __cmpxchg_called_with_bad_pointer(void);
49/* we only need to support cmpxchg of a u32 on sparc */ 49/* we only need to support cmpxchg of a u32 on sparc */
50extern unsigned long __cmpxchg_u32(volatile u32 *m, u32 old, u32 new_); 50unsigned long __cmpxchg_u32(volatile u32 *m, u32 old, u32 new_);
51 51
52/* don't worry...optimizer will get rid of most of this */ 52/* don't worry...optimizer will get rid of most of this */
53static inline unsigned long 53static inline unsigned long
diff --git a/arch/sparc/include/asm/cmpxchg_64.h b/arch/sparc/include/asm/cmpxchg_64.h
index 4adefe8e2885..0e1ed6cfbf68 100644
--- a/arch/sparc/include/asm/cmpxchg_64.h
+++ b/arch/sparc/include/asm/cmpxchg_64.h
@@ -42,7 +42,7 @@ static inline unsigned long xchg64(__volatile__ unsigned long *m, unsigned long
42 42
43#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) 43#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
44 44
45extern void __xchg_called_with_bad_pointer(void); 45void __xchg_called_with_bad_pointer(void);
46 46
47static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, 47static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr,
48 int size) 48 int size)
@@ -91,7 +91,7 @@ __cmpxchg_u64(volatile long *m, unsigned long old, unsigned long new)
91 91
92/* This function doesn't exist, so you'll get a linker error 92/* This function doesn't exist, so you'll get a linker error
93 if something tries to do an invalid cmpxchg(). */ 93 if something tries to do an invalid cmpxchg(). */
94extern void __cmpxchg_called_with_bad_pointer(void); 94void __cmpxchg_called_with_bad_pointer(void);
95 95
96static inline unsigned long 96static inline unsigned long
97__cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size) 97__cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
diff --git a/arch/sparc/include/asm/cpudata.h b/arch/sparc/include/asm/cpudata.h
index b5976de7cacd..128b56b08676 100644
--- a/arch/sparc/include/asm/cpudata.h
+++ b/arch/sparc/include/asm/cpudata.h
@@ -1,5 +1,15 @@
1#ifndef ___ASM_SPARC_CPUDATA_H 1#ifndef ___ASM_SPARC_CPUDATA_H
2#define ___ASM_SPARC_CPUDATA_H 2#define ___ASM_SPARC_CPUDATA_H
3
4#ifndef __ASSEMBLY__
5
6#include <linux/threads.h>
7#include <linux/percpu.h>
8
9extern const struct seq_operations cpuinfo_op;
10
11#endif /* !(__ASSEMBLY__) */
12
3#if defined(__sparc__) && defined(__arch64__) 13#if defined(__sparc__) && defined(__arch64__)
4#include <asm/cpudata_64.h> 14#include <asm/cpudata_64.h>
5#else 15#else
diff --git a/arch/sparc/include/asm/cpudata_64.h b/arch/sparc/include/asm/cpudata_64.h
index 050ef35b9dcf..0e594076912c 100644
--- a/arch/sparc/include/asm/cpudata_64.h
+++ b/arch/sparc/include/asm/cpudata_64.h
@@ -8,9 +8,6 @@
8 8
9#ifndef __ASSEMBLY__ 9#ifndef __ASSEMBLY__
10 10
11#include <linux/percpu.h>
12#include <linux/threads.h>
13
14typedef struct { 11typedef struct {
15 /* Dcache line 1 */ 12 /* Dcache line 1 */
16 unsigned int __softirq_pending; /* must be 1st, see rtrap.S */ 13 unsigned int __softirq_pending; /* must be 1st, see rtrap.S */
@@ -35,8 +32,6 @@ DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data);
35#define cpu_data(__cpu) per_cpu(__cpu_data, (__cpu)) 32#define cpu_data(__cpu) per_cpu(__cpu_data, (__cpu))
36#define local_cpu_data() __get_cpu_var(__cpu_data) 33#define local_cpu_data() __get_cpu_var(__cpu_data)
37 34
38extern const struct seq_operations cpuinfo_op;
39
40#endif /* !(__ASSEMBLY__) */ 35#endif /* !(__ASSEMBLY__) */
41 36
42#include <asm/trap_block.h> 37#include <asm/trap_block.h>
diff --git a/arch/sparc/include/asm/delay_32.h b/arch/sparc/include/asm/delay_32.h
index bc9aba2bead6..3fb8ca144b4f 100644
--- a/arch/sparc/include/asm/delay_32.h
+++ b/arch/sparc/include/asm/delay_32.h
@@ -20,8 +20,8 @@ static inline void __delay(unsigned long loops)
20} 20}
21 21
22/* This is too messy with inline asm on the Sparc. */ 22/* This is too messy with inline asm on the Sparc. */
23extern void __udelay(unsigned long usecs, unsigned long lpj); 23void __udelay(unsigned long usecs, unsigned long lpj);
24extern void __ndelay(unsigned long nsecs, unsigned long lpj); 24void __ndelay(unsigned long nsecs, unsigned long lpj);
25 25
26#ifdef CONFIG_SMP 26#ifdef CONFIG_SMP
27#define __udelay_val cpu_data(smp_processor_id()).udelay_val 27#define __udelay_val cpu_data(smp_processor_id()).udelay_val
diff --git a/arch/sparc/include/asm/delay_64.h b/arch/sparc/include/asm/delay_64.h
index a77aa622d762..0ba5424856d8 100644
--- a/arch/sparc/include/asm/delay_64.h
+++ b/arch/sparc/include/asm/delay_64.h
@@ -8,8 +8,8 @@
8 8
9#ifndef __ASSEMBLY__ 9#ifndef __ASSEMBLY__
10 10
11extern void __delay(unsigned long loops); 11void __delay(unsigned long loops);
12extern void udelay(unsigned long usecs); 12void udelay(unsigned long usecs);
13#define mdelay(n) udelay((n) * 1000) 13#define mdelay(n) udelay((n) * 1000)
14 14
15#endif /* !__ASSEMBLY__ */ 15#endif /* !__ASSEMBLY__ */
diff --git a/arch/sparc/include/asm/device.h b/arch/sparc/include/asm/device.h
index daa6a8a5e9cd..bb3f0b0c6754 100644
--- a/arch/sparc/include/asm/device.h
+++ b/arch/sparc/include/asm/device.h
@@ -19,7 +19,7 @@ struct dev_archdata {
19 int numa_node; 19 int numa_node;
20}; 20};
21 21
22extern void of_propagate_archdata(struct platform_device *bus); 22void of_propagate_archdata(struct platform_device *bus);
23 23
24struct pdev_archdata { 24struct pdev_archdata {
25 struct resource resource[PROMREG_MAX]; 25 struct resource resource[PROMREG_MAX];
diff --git a/arch/sparc/include/asm/dma-mapping.h b/arch/sparc/include/asm/dma-mapping.h
index 05fe53f5346e..1ee02710b2dc 100644
--- a/arch/sparc/include/asm/dma-mapping.h
+++ b/arch/sparc/include/asm/dma-mapping.h
@@ -7,7 +7,7 @@
7 7
8#define DMA_ERROR_CODE (~(dma_addr_t)0x0) 8#define DMA_ERROR_CODE (~(dma_addr_t)0x0)
9 9
10extern int dma_supported(struct device *dev, u64 mask); 10int dma_supported(struct device *dev, u64 mask);
11 11
12#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) 12#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
13#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) 13#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
diff --git a/arch/sparc/include/asm/ebus_dma.h b/arch/sparc/include/asm/ebus_dma.h
index f07a5b541c98..fcfb4948147f 100644
--- a/arch/sparc/include/asm/ebus_dma.h
+++ b/arch/sparc/include/asm/ebus_dma.h
@@ -22,14 +22,14 @@ struct ebus_dma_info {
22 unsigned char name[64]; 22 unsigned char name[64];
23}; 23};
24 24
25extern int ebus_dma_register(struct ebus_dma_info *p); 25int ebus_dma_register(struct ebus_dma_info *p);
26extern int ebus_dma_irq_enable(struct ebus_dma_info *p, int on); 26int ebus_dma_irq_enable(struct ebus_dma_info *p, int on);
27extern void ebus_dma_unregister(struct ebus_dma_info *p); 27void ebus_dma_unregister(struct ebus_dma_info *p);
28extern int ebus_dma_request(struct ebus_dma_info *p, dma_addr_t bus_addr, 28int ebus_dma_request(struct ebus_dma_info *p, dma_addr_t bus_addr,
29 size_t len); 29 size_t len);
30extern void ebus_dma_prepare(struct ebus_dma_info *p, int write); 30void ebus_dma_prepare(struct ebus_dma_info *p, int write);
31extern unsigned int ebus_dma_residue(struct ebus_dma_info *p); 31unsigned int ebus_dma_residue(struct ebus_dma_info *p);
32extern unsigned int ebus_dma_addr(struct ebus_dma_info *p); 32unsigned int ebus_dma_addr(struct ebus_dma_info *p);
33extern void ebus_dma_enable(struct ebus_dma_info *p, int on); 33void ebus_dma_enable(struct ebus_dma_info *p, int on);
34 34
35#endif /* __ASM_SPARC_EBUS_DMA_H */ 35#endif /* __ASM_SPARC_EBUS_DMA_H */
diff --git a/arch/sparc/include/asm/floppy_32.h b/arch/sparc/include/asm/floppy_32.h
index fb3f16954c69..071b83e52f15 100644
--- a/arch/sparc/include/asm/floppy_32.h
+++ b/arch/sparc/include/asm/floppy_32.h
@@ -9,11 +9,12 @@
9#include <linux/of.h> 9#include <linux/of.h>
10#include <linux/of_device.h> 10#include <linux/of_device.h>
11 11
12#include <asm/page.h>
13#include <asm/pgtable.h> 12#include <asm/pgtable.h>
14#include <asm/idprom.h> 13#include <asm/idprom.h>
15#include <asm/oplib.h> 14#include <asm/oplib.h>
16#include <asm/auxio.h> 15#include <asm/auxio.h>
16#include <asm/setup.h>
17#include <asm/page.h>
17#include <asm/irq.h> 18#include <asm/irq.h>
18 19
19/* We don't need no stinkin' I/O port allocation crap. */ 20/* We don't need no stinkin' I/O port allocation crap. */
@@ -49,7 +50,6 @@ struct sun_flpy_controller {
49 50
50/* You'll only ever find one controller on a SparcStation anyways. */ 51/* You'll only ever find one controller on a SparcStation anyways. */
51static struct sun_flpy_controller *sun_fdc = NULL; 52static struct sun_flpy_controller *sun_fdc = NULL;
52extern volatile unsigned char *fdc_status;
53 53
54struct sun_floppy_ops { 54struct sun_floppy_ops {
55 unsigned char (*fd_inb)(int port); 55 unsigned char (*fd_inb)(int port);
@@ -212,13 +212,6 @@ static void sun_82077_fd_outb(unsigned char value, int port)
212 * underruns. If non-zero, doing_pdma encodes the direction of 212 * underruns. If non-zero, doing_pdma encodes the direction of
213 * the transfer for debugging. 1=read 2=write 213 * the transfer for debugging. 1=read 2=write
214 */ 214 */
215extern char *pdma_vaddr;
216extern unsigned long pdma_size;
217extern volatile int doing_pdma;
218
219/* This is software state */
220extern char *pdma_base;
221extern unsigned long pdma_areasize;
222 215
223/* Common routines to all controller types on the Sparc. */ 216/* Common routines to all controller types on the Sparc. */
224static inline void virtual_dma_init(void) 217static inline void virtual_dma_init(void)
@@ -263,8 +256,7 @@ static inline void sun_fd_enable_dma(void)
263 pdma_areasize = pdma_size; 256 pdma_areasize = pdma_size;
264} 257}
265 258
266extern int sparc_floppy_request_irq(unsigned int irq, 259int sparc_floppy_request_irq(unsigned int irq, irq_handler_t irq_handler);
267 irq_handler_t irq_handler);
268 260
269static int sun_fd_request_irq(void) 261static int sun_fd_request_irq(void)
270{ 262{
diff --git a/arch/sparc/include/asm/floppy_64.h b/arch/sparc/include/asm/floppy_64.h
index 7c90c50c200d..625756406a7e 100644
--- a/arch/sparc/include/asm/floppy_64.h
+++ b/arch/sparc/include/asm/floppy_64.h
@@ -296,7 +296,7 @@ struct sun_pci_dma_op {
296static struct sun_pci_dma_op sun_pci_dma_current = { -1U, 0, 0, NULL}; 296static struct sun_pci_dma_op sun_pci_dma_current = { -1U, 0, 0, NULL};
297static struct sun_pci_dma_op sun_pci_dma_pending = { -1U, 0, 0, NULL}; 297static struct sun_pci_dma_op sun_pci_dma_pending = { -1U, 0, 0, NULL};
298 298
299extern irqreturn_t floppy_interrupt(int irq, void *dev_id); 299irqreturn_t floppy_interrupt(int irq, void *dev_id);
300 300
301static unsigned char sun_pci_fd_inb(unsigned long port) 301static unsigned char sun_pci_fd_inb(unsigned long port)
302{ 302{
diff --git a/arch/sparc/include/asm/ftrace.h b/arch/sparc/include/asm/ftrace.h
index b0f18e9893db..9ec94ad116fb 100644
--- a/arch/sparc/include/asm/ftrace.h
+++ b/arch/sparc/include/asm/ftrace.h
@@ -6,7 +6,7 @@
6#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ 6#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */
7 7
8#ifndef __ASSEMBLY__ 8#ifndef __ASSEMBLY__
9extern void _mcount(void); 9void _mcount(void);
10#endif 10#endif
11 11
12#endif 12#endif
@@ -22,4 +22,8 @@ struct dyn_arch_ftrace {
22}; 22};
23#endif /* CONFIG_DYNAMIC_FTRACE */ 23#endif /* CONFIG_DYNAMIC_FTRACE */
24 24
25unsigned long prepare_ftrace_return(unsigned long parent,
26 unsigned long self_addr,
27 unsigned long frame_pointer);
28
25#endif /* _ASM_SPARC64_FTRACE */ 29#endif /* _ASM_SPARC64_FTRACE */
diff --git a/arch/sparc/include/asm/highmem.h b/arch/sparc/include/asm/highmem.h
index 4f9e15c757e2..92ded294a4ec 100644
--- a/arch/sparc/include/asm/highmem.h
+++ b/arch/sparc/include/asm/highmem.h
@@ -31,7 +31,7 @@ extern unsigned long highstart_pfn, highend_pfn;
31extern pgprot_t kmap_prot; 31extern pgprot_t kmap_prot;
32extern pte_t *pkmap_page_table; 32extern pte_t *pkmap_page_table;
33 33
34extern void kmap_init(void) __init; 34void kmap_init(void) __init;
35 35
36/* 36/*
37 * Right now we initialize only a single pte table. It can be extended 37 * Right now we initialize only a single pte table. It can be extended
@@ -49,8 +49,8 @@ extern void kmap_init(void) __init;
49 49
50#define PKMAP_END (PKMAP_ADDR(LAST_PKMAP)) 50#define PKMAP_END (PKMAP_ADDR(LAST_PKMAP))
51 51
52extern void *kmap_high(struct page *page); 52void *kmap_high(struct page *page);
53extern void kunmap_high(struct page *page); 53void kunmap_high(struct page *page);
54 54
55static inline void *kmap(struct page *page) 55static inline void *kmap(struct page *page)
56{ 56{
@@ -68,8 +68,8 @@ static inline void kunmap(struct page *page)
68 kunmap_high(page); 68 kunmap_high(page);
69} 69}
70 70
71extern void *kmap_atomic(struct page *page); 71void *kmap_atomic(struct page *page);
72extern void __kunmap_atomic(void *kvaddr); 72void __kunmap_atomic(void *kvaddr);
73 73
74#define flush_cache_kmaps() flush_cache_all() 74#define flush_cache_kmaps() flush_cache_all()
75 75
diff --git a/arch/sparc/include/asm/hvtramp.h b/arch/sparc/include/asm/hvtramp.h
index b2b9b947b3a4..04b56f862bbe 100644
--- a/arch/sparc/include/asm/hvtramp.h
+++ b/arch/sparc/include/asm/hvtramp.h
@@ -19,7 +19,7 @@ struct hvtramp_descr {
19 struct hvtramp_mapping maps[1]; 19 struct hvtramp_mapping maps[1];
20}; 20};
21 21
22extern void hv_cpu_startup(unsigned long hvdescr_pa); 22void hv_cpu_startup(unsigned long hvdescr_pa);
23 23
24#endif 24#endif
25 25
diff --git a/arch/sparc/include/asm/hypervisor.h b/arch/sparc/include/asm/hypervisor.h
index ca121f0fa3ec..94b39caea3eb 100644
--- a/arch/sparc/include/asm/hypervisor.h
+++ b/arch/sparc/include/asm/hypervisor.h
@@ -98,7 +98,7 @@
98#define HV_FAST_MACH_EXIT 0x00 98#define HV_FAST_MACH_EXIT 0x00
99 99
100#ifndef __ASSEMBLY__ 100#ifndef __ASSEMBLY__
101extern void sun4v_mach_exit(unsigned long exit_code); 101void sun4v_mach_exit(unsigned long exit_code);
102#endif 102#endif
103 103
104/* Domain services. */ 104/* Domain services. */
@@ -127,9 +127,9 @@ extern void sun4v_mach_exit(unsigned long exit_code);
127#define HV_FAST_MACH_DESC 0x01 127#define HV_FAST_MACH_DESC 0x01
128 128
129#ifndef __ASSEMBLY__ 129#ifndef __ASSEMBLY__
130extern unsigned long sun4v_mach_desc(unsigned long buffer_pa, 130unsigned long sun4v_mach_desc(unsigned long buffer_pa,
131 unsigned long buf_len, 131 unsigned long buf_len,
132 unsigned long *real_buf_len); 132 unsigned long *real_buf_len);
133#endif 133#endif
134 134
135/* mach_sir() 135/* mach_sir()
@@ -148,7 +148,7 @@ extern unsigned long sun4v_mach_desc(unsigned long buffer_pa,
148#define HV_FAST_MACH_SIR 0x02 148#define HV_FAST_MACH_SIR 0x02
149 149
150#ifndef __ASSEMBLY__ 150#ifndef __ASSEMBLY__
151extern void sun4v_mach_sir(void); 151void sun4v_mach_sir(void);
152#endif 152#endif
153 153
154/* mach_set_watchdog() 154/* mach_set_watchdog()
@@ -204,8 +204,8 @@ extern void sun4v_mach_sir(void);
204#define HV_FAST_MACH_SET_WATCHDOG 0x05 204#define HV_FAST_MACH_SET_WATCHDOG 0x05
205 205
206#ifndef __ASSEMBLY__ 206#ifndef __ASSEMBLY__
207extern unsigned long sun4v_mach_set_watchdog(unsigned long timeout, 207unsigned long sun4v_mach_set_watchdog(unsigned long timeout,
208 unsigned long *orig_timeout); 208 unsigned long *orig_timeout);
209#endif 209#endif
210 210
211/* CPU services. 211/* CPU services.
@@ -250,10 +250,10 @@ extern unsigned long sun4v_mach_set_watchdog(unsigned long timeout,
250#define HV_FAST_CPU_START 0x10 250#define HV_FAST_CPU_START 0x10
251 251
252#ifndef __ASSEMBLY__ 252#ifndef __ASSEMBLY__
253extern unsigned long sun4v_cpu_start(unsigned long cpuid, 253unsigned long sun4v_cpu_start(unsigned long cpuid,
254 unsigned long pc, 254 unsigned long pc,
255 unsigned long rtba, 255 unsigned long rtba,
256 unsigned long arg0); 256 unsigned long arg0);
257#endif 257#endif
258 258
259/* cpu_stop() 259/* cpu_stop()
@@ -278,7 +278,7 @@ extern unsigned long sun4v_cpu_start(unsigned long cpuid,
278#define HV_FAST_CPU_STOP 0x11 278#define HV_FAST_CPU_STOP 0x11
279 279
280#ifndef __ASSEMBLY__ 280#ifndef __ASSEMBLY__
281extern unsigned long sun4v_cpu_stop(unsigned long cpuid); 281unsigned long sun4v_cpu_stop(unsigned long cpuid);
282#endif 282#endif
283 283
284/* cpu_yield() 284/* cpu_yield()
@@ -295,7 +295,7 @@ extern unsigned long sun4v_cpu_stop(unsigned long cpuid);
295#define HV_FAST_CPU_YIELD 0x12 295#define HV_FAST_CPU_YIELD 0x12
296 296
297#ifndef __ASSEMBLY__ 297#ifndef __ASSEMBLY__
298extern unsigned long sun4v_cpu_yield(void); 298unsigned long sun4v_cpu_yield(void);
299#endif 299#endif
300 300
301/* cpu_qconf() 301/* cpu_qconf()
@@ -341,9 +341,9 @@ extern unsigned long sun4v_cpu_yield(void);
341#define HV_CPU_QUEUE_NONRES_ERROR 0x3f 341#define HV_CPU_QUEUE_NONRES_ERROR 0x3f
342 342
343#ifndef __ASSEMBLY__ 343#ifndef __ASSEMBLY__
344extern unsigned long sun4v_cpu_qconf(unsigned long type, 344unsigned long sun4v_cpu_qconf(unsigned long type,
345 unsigned long queue_paddr, 345 unsigned long queue_paddr,
346 unsigned long num_queue_entries); 346 unsigned long num_queue_entries);
347#endif 347#endif
348 348
349/* cpu_qinfo() 349/* cpu_qinfo()
@@ -394,7 +394,9 @@ extern unsigned long sun4v_cpu_qconf(unsigned long type,
394#define HV_FAST_CPU_MONDO_SEND 0x42 394#define HV_FAST_CPU_MONDO_SEND 0x42
395 395
396#ifndef __ASSEMBLY__ 396#ifndef __ASSEMBLY__
397extern unsigned long sun4v_cpu_mondo_send(unsigned long cpu_count, unsigned long cpu_list_pa, unsigned long mondo_block_pa); 397unsigned long sun4v_cpu_mondo_send(unsigned long cpu_count,
398 unsigned long cpu_list_pa,
399 unsigned long mondo_block_pa);
398#endif 400#endif
399 401
400/* cpu_myid() 402/* cpu_myid()
@@ -425,7 +427,7 @@ extern unsigned long sun4v_cpu_mondo_send(unsigned long cpu_count, unsigned long
425#define HV_CPU_STATE_ERROR 0x03 427#define HV_CPU_STATE_ERROR 0x03
426 428
427#ifndef __ASSEMBLY__ 429#ifndef __ASSEMBLY__
428extern long sun4v_cpu_state(unsigned long cpuid); 430long sun4v_cpu_state(unsigned long cpuid);
429#endif 431#endif
430 432
431/* cpu_set_rtba() 433/* cpu_set_rtba()
@@ -625,8 +627,8 @@ struct hv_fault_status {
625#define HV_FAST_MMU_TSB_CTX0 0x20 627#define HV_FAST_MMU_TSB_CTX0 0x20
626 628
627#ifndef __ASSEMBLY__ 629#ifndef __ASSEMBLY__
628extern unsigned long sun4v_mmu_tsb_ctx0(unsigned long num_descriptions, 630unsigned long sun4v_mmu_tsb_ctx0(unsigned long num_descriptions,
629 unsigned long tsb_desc_ra); 631 unsigned long tsb_desc_ra);
630#endif 632#endif
631 633
632/* mmu_tsb_ctxnon0() 634/* mmu_tsb_ctxnon0()
@@ -710,7 +712,7 @@ extern unsigned long sun4v_mmu_tsb_ctx0(unsigned long num_descriptions,
710#define HV_FAST_MMU_DEMAP_ALL 0x24 712#define HV_FAST_MMU_DEMAP_ALL 0x24
711 713
712#ifndef __ASSEMBLY__ 714#ifndef __ASSEMBLY__
713extern void sun4v_mmu_demap_all(void); 715void sun4v_mmu_demap_all(void);
714#endif 716#endif
715 717
716/* mmu_map_perm_addr() 718/* mmu_map_perm_addr()
@@ -740,10 +742,10 @@ extern void sun4v_mmu_demap_all(void);
740#define HV_FAST_MMU_MAP_PERM_ADDR 0x25 742#define HV_FAST_MMU_MAP_PERM_ADDR 0x25
741 743
742#ifndef __ASSEMBLY__ 744#ifndef __ASSEMBLY__
743extern unsigned long sun4v_mmu_map_perm_addr(unsigned long vaddr, 745unsigned long sun4v_mmu_map_perm_addr(unsigned long vaddr,
744 unsigned long set_to_zero, 746 unsigned long set_to_zero,
745 unsigned long tte, 747 unsigned long tte,
746 unsigned long flags); 748 unsigned long flags);
747#endif 749#endif
748 750
749/* mmu_fault_area_conf() 751/* mmu_fault_area_conf()
@@ -945,7 +947,7 @@ extern unsigned long sun4v_mmu_map_perm_addr(unsigned long vaddr,
945#define HV_FAST_TOD_GET 0x50 947#define HV_FAST_TOD_GET 0x50
946 948
947#ifndef __ASSEMBLY__ 949#ifndef __ASSEMBLY__
948extern unsigned long sun4v_tod_get(unsigned long *time); 950unsigned long sun4v_tod_get(unsigned long *time);
949#endif 951#endif
950 952
951/* tod_set() 953/* tod_set()
@@ -962,7 +964,7 @@ extern unsigned long sun4v_tod_get(unsigned long *time);
962#define HV_FAST_TOD_SET 0x51 964#define HV_FAST_TOD_SET 0x51
963 965
964#ifndef __ASSEMBLY__ 966#ifndef __ASSEMBLY__
965extern unsigned long sun4v_tod_set(unsigned long time); 967unsigned long sun4v_tod_set(unsigned long time);
966#endif 968#endif
967 969
968/* Console services */ 970/* Console services */
@@ -1038,14 +1040,14 @@ extern unsigned long sun4v_tod_set(unsigned long time);
1038#define HV_FAST_CONS_WRITE 0x63 1040#define HV_FAST_CONS_WRITE 0x63
1039 1041
1040#ifndef __ASSEMBLY__ 1042#ifndef __ASSEMBLY__
1041extern long sun4v_con_getchar(long *status); 1043long sun4v_con_getchar(long *status);
1042extern long sun4v_con_putchar(long c); 1044long sun4v_con_putchar(long c);
1043extern long sun4v_con_read(unsigned long buffer, 1045long sun4v_con_read(unsigned long buffer,
1044 unsigned long size, 1046 unsigned long size,
1045 unsigned long *bytes_read); 1047 unsigned long *bytes_read);
1046extern unsigned long sun4v_con_write(unsigned long buffer, 1048unsigned long sun4v_con_write(unsigned long buffer,
1047 unsigned long size, 1049 unsigned long size,
1048 unsigned long *bytes_written); 1050 unsigned long *bytes_written);
1049#endif 1051#endif
1050 1052
1051/* mach_set_soft_state() 1053/* mach_set_soft_state()
@@ -1080,8 +1082,8 @@ extern unsigned long sun4v_con_write(unsigned long buffer,
1080#define HV_SOFT_STATE_TRANSITION 0x02 1082#define HV_SOFT_STATE_TRANSITION 0x02
1081 1083
1082#ifndef __ASSEMBLY__ 1084#ifndef __ASSEMBLY__
1083extern unsigned long sun4v_mach_set_soft_state(unsigned long soft_state, 1085unsigned long sun4v_mach_set_soft_state(unsigned long soft_state,
1084 unsigned long msg_string_ra); 1086 unsigned long msg_string_ra);
1085#endif 1087#endif
1086 1088
1087/* mach_get_soft_state() 1089/* mach_get_soft_state()
@@ -1159,20 +1161,20 @@ extern unsigned long sun4v_mach_set_soft_state(unsigned long soft_state,
1159#define HV_FAST_SVC_CLRSTATUS 0x84 1161#define HV_FAST_SVC_CLRSTATUS 0x84
1160 1162
1161#ifndef __ASSEMBLY__ 1163#ifndef __ASSEMBLY__
1162extern unsigned long sun4v_svc_send(unsigned long svc_id, 1164unsigned long sun4v_svc_send(unsigned long svc_id,
1163 unsigned long buffer, 1165 unsigned long buffer,
1164 unsigned long buffer_size, 1166 unsigned long buffer_size,
1165 unsigned long *sent_bytes); 1167 unsigned long *sent_bytes);
1166extern unsigned long sun4v_svc_recv(unsigned long svc_id, 1168unsigned long sun4v_svc_recv(unsigned long svc_id,
1167 unsigned long buffer, 1169 unsigned long buffer,
1168 unsigned long buffer_size, 1170 unsigned long buffer_size,
1169 unsigned long *recv_bytes); 1171 unsigned long *recv_bytes);
1170extern unsigned long sun4v_svc_getstatus(unsigned long svc_id, 1172unsigned long sun4v_svc_getstatus(unsigned long svc_id,
1171 unsigned long *status_bits); 1173 unsigned long *status_bits);
1172extern unsigned long sun4v_svc_setstatus(unsigned long svc_id, 1174unsigned long sun4v_svc_setstatus(unsigned long svc_id,
1173 unsigned long status_bits); 1175 unsigned long status_bits);
1174extern unsigned long sun4v_svc_clrstatus(unsigned long svc_id, 1176unsigned long sun4v_svc_clrstatus(unsigned long svc_id,
1175 unsigned long status_bits); 1177 unsigned long status_bits);
1176#endif 1178#endif
1177 1179
1178/* Trap trace services. 1180/* Trap trace services.
@@ -1458,8 +1460,8 @@ struct hv_trap_trace_entry {
1458#define HV_FAST_INTR_DEVINO2SYSINO 0xa0 1460#define HV_FAST_INTR_DEVINO2SYSINO 0xa0
1459 1461
1460#ifndef __ASSEMBLY__ 1462#ifndef __ASSEMBLY__
1461extern unsigned long sun4v_devino_to_sysino(unsigned long devhandle, 1463unsigned long sun4v_devino_to_sysino(unsigned long devhandle,
1462 unsigned long devino); 1464 unsigned long devino);
1463#endif 1465#endif
1464 1466
1465/* intr_getenabled() 1467/* intr_getenabled()
@@ -1476,7 +1478,7 @@ extern unsigned long sun4v_devino_to_sysino(unsigned long devhandle,
1476#define HV_FAST_INTR_GETENABLED 0xa1 1478#define HV_FAST_INTR_GETENABLED 0xa1
1477 1479
1478#ifndef __ASSEMBLY__ 1480#ifndef __ASSEMBLY__
1479extern unsigned long sun4v_intr_getenabled(unsigned long sysino); 1481unsigned long sun4v_intr_getenabled(unsigned long sysino);
1480#endif 1482#endif
1481 1483
1482/* intr_setenabled() 1484/* intr_setenabled()
@@ -1492,7 +1494,8 @@ extern unsigned long sun4v_intr_getenabled(unsigned long sysino);
1492#define HV_FAST_INTR_SETENABLED 0xa2 1494#define HV_FAST_INTR_SETENABLED 0xa2
1493 1495
1494#ifndef __ASSEMBLY__ 1496#ifndef __ASSEMBLY__
1495extern unsigned long sun4v_intr_setenabled(unsigned long sysino, unsigned long intr_enabled); 1497unsigned long sun4v_intr_setenabled(unsigned long sysino,
1498 unsigned long intr_enabled);
1496#endif 1499#endif
1497 1500
1498/* intr_getstate() 1501/* intr_getstate()
@@ -1508,7 +1511,7 @@ extern unsigned long sun4v_intr_setenabled(unsigned long sysino, unsigned long i
1508#define HV_FAST_INTR_GETSTATE 0xa3 1511#define HV_FAST_INTR_GETSTATE 0xa3
1509 1512
1510#ifndef __ASSEMBLY__ 1513#ifndef __ASSEMBLY__
1511extern unsigned long sun4v_intr_getstate(unsigned long sysino); 1514unsigned long sun4v_intr_getstate(unsigned long sysino);
1512#endif 1515#endif
1513 1516
1514/* intr_setstate() 1517/* intr_setstate()
@@ -1528,7 +1531,7 @@ extern unsigned long sun4v_intr_getstate(unsigned long sysino);
1528#define HV_FAST_INTR_SETSTATE 0xa4 1531#define HV_FAST_INTR_SETSTATE 0xa4
1529 1532
1530#ifndef __ASSEMBLY__ 1533#ifndef __ASSEMBLY__
1531extern unsigned long sun4v_intr_setstate(unsigned long sysino, unsigned long intr_state); 1534unsigned long sun4v_intr_setstate(unsigned long sysino, unsigned long intr_state);
1532#endif 1535#endif
1533 1536
1534/* intr_gettarget() 1537/* intr_gettarget()
@@ -1546,7 +1549,7 @@ extern unsigned long sun4v_intr_setstate(unsigned long sysino, unsigned long int
1546#define HV_FAST_INTR_GETTARGET 0xa5 1549#define HV_FAST_INTR_GETTARGET 0xa5
1547 1550
1548#ifndef __ASSEMBLY__ 1551#ifndef __ASSEMBLY__
1549extern unsigned long sun4v_intr_gettarget(unsigned long sysino); 1552unsigned long sun4v_intr_gettarget(unsigned long sysino);
1550#endif 1553#endif
1551 1554
1552/* intr_settarget() 1555/* intr_settarget()
@@ -1563,7 +1566,7 @@ extern unsigned long sun4v_intr_gettarget(unsigned long sysino);
1563#define HV_FAST_INTR_SETTARGET 0xa6 1566#define HV_FAST_INTR_SETTARGET 0xa6
1564 1567
1565#ifndef __ASSEMBLY__ 1568#ifndef __ASSEMBLY__
1566extern unsigned long sun4v_intr_settarget(unsigned long sysino, unsigned long cpuid); 1569unsigned long sun4v_intr_settarget(unsigned long sysino, unsigned long cpuid);
1567#endif 1570#endif
1568 1571
1569/* vintr_get_cookie() 1572/* vintr_get_cookie()
@@ -1647,30 +1650,30 @@ extern unsigned long sun4v_intr_settarget(unsigned long sysino, unsigned long cp
1647#define HV_FAST_VINTR_SET_TARGET 0xae 1650#define HV_FAST_VINTR_SET_TARGET 0xae
1648 1651
1649#ifndef __ASSEMBLY__ 1652#ifndef __ASSEMBLY__
1650extern unsigned long sun4v_vintr_get_cookie(unsigned long dev_handle, 1653unsigned long sun4v_vintr_get_cookie(unsigned long dev_handle,
1651 unsigned long dev_ino, 1654 unsigned long dev_ino,
1652 unsigned long *cookie); 1655 unsigned long *cookie);
1653extern unsigned long sun4v_vintr_set_cookie(unsigned long dev_handle, 1656unsigned long sun4v_vintr_set_cookie(unsigned long dev_handle,
1654 unsigned long dev_ino, 1657 unsigned long dev_ino,
1655 unsigned long cookie); 1658 unsigned long cookie);
1656extern unsigned long sun4v_vintr_get_valid(unsigned long dev_handle, 1659unsigned long sun4v_vintr_get_valid(unsigned long dev_handle,
1657 unsigned long dev_ino, 1660 unsigned long dev_ino,
1658 unsigned long *valid); 1661 unsigned long *valid);
1659extern unsigned long sun4v_vintr_set_valid(unsigned long dev_handle, 1662unsigned long sun4v_vintr_set_valid(unsigned long dev_handle,
1660 unsigned long dev_ino, 1663 unsigned long dev_ino,
1661 unsigned long valid); 1664 unsigned long valid);
1662extern unsigned long sun4v_vintr_get_state(unsigned long dev_handle, 1665unsigned long sun4v_vintr_get_state(unsigned long dev_handle,
1663 unsigned long dev_ino, 1666 unsigned long dev_ino,
1664 unsigned long *state); 1667 unsigned long *state);
1665extern unsigned long sun4v_vintr_set_state(unsigned long dev_handle, 1668unsigned long sun4v_vintr_set_state(unsigned long dev_handle,
1666 unsigned long dev_ino, 1669 unsigned long dev_ino,
1667 unsigned long state); 1670 unsigned long state);
1668extern unsigned long sun4v_vintr_get_target(unsigned long dev_handle, 1671unsigned long sun4v_vintr_get_target(unsigned long dev_handle,
1669 unsigned long dev_ino, 1672 unsigned long dev_ino,
1670 unsigned long *cpuid); 1673 unsigned long *cpuid);
1671extern unsigned long sun4v_vintr_set_target(unsigned long dev_handle, 1674unsigned long sun4v_vintr_set_target(unsigned long dev_handle,
1672 unsigned long dev_ino, 1675 unsigned long dev_ino,
1673 unsigned long cpuid); 1676 unsigned long cpuid);
1674#endif 1677#endif
1675 1678
1676/* PCI IO services. 1679/* PCI IO services.
@@ -2627,50 +2630,50 @@ struct ldc_mtable_entry {
2627#define HV_FAST_LDC_REVOKE 0xef 2630#define HV_FAST_LDC_REVOKE 0xef
2628 2631
2629#ifndef __ASSEMBLY__ 2632#ifndef __ASSEMBLY__
2630extern unsigned long sun4v_ldc_tx_qconf(unsigned long channel, 2633unsigned long sun4v_ldc_tx_qconf(unsigned long channel,
2631 unsigned long ra, 2634 unsigned long ra,
2632 unsigned long num_entries); 2635 unsigned long num_entries);
2633extern unsigned long sun4v_ldc_tx_qinfo(unsigned long channel, 2636unsigned long sun4v_ldc_tx_qinfo(unsigned long channel,
2634 unsigned long *ra, 2637 unsigned long *ra,
2635 unsigned long *num_entries); 2638 unsigned long *num_entries);
2636extern unsigned long sun4v_ldc_tx_get_state(unsigned long channel, 2639unsigned long sun4v_ldc_tx_get_state(unsigned long channel,
2637 unsigned long *head_off, 2640 unsigned long *head_off,
2638 unsigned long *tail_off, 2641 unsigned long *tail_off,
2639 unsigned long *chan_state); 2642 unsigned long *chan_state);
2640extern unsigned long sun4v_ldc_tx_set_qtail(unsigned long channel, 2643unsigned long sun4v_ldc_tx_set_qtail(unsigned long channel,
2641 unsigned long tail_off); 2644 unsigned long tail_off);
2642extern unsigned long sun4v_ldc_rx_qconf(unsigned long channel, 2645unsigned long sun4v_ldc_rx_qconf(unsigned long channel,
2643 unsigned long ra, 2646 unsigned long ra,
2644 unsigned long num_entries); 2647 unsigned long num_entries);
2645extern unsigned long sun4v_ldc_rx_qinfo(unsigned long channel, 2648unsigned long sun4v_ldc_rx_qinfo(unsigned long channel,
2646 unsigned long *ra, 2649 unsigned long *ra,
2647 unsigned long *num_entries); 2650 unsigned long *num_entries);
2648extern unsigned long sun4v_ldc_rx_get_state(unsigned long channel, 2651unsigned long sun4v_ldc_rx_get_state(unsigned long channel,
2649 unsigned long *head_off, 2652 unsigned long *head_off,
2650 unsigned long *tail_off, 2653 unsigned long *tail_off,
2651 unsigned long *chan_state); 2654 unsigned long *chan_state);
2652extern unsigned long sun4v_ldc_rx_set_qhead(unsigned long channel, 2655unsigned long sun4v_ldc_rx_set_qhead(unsigned long channel,
2653 unsigned long head_off); 2656 unsigned long head_off);
2654extern unsigned long sun4v_ldc_set_map_table(unsigned long channel, 2657unsigned long sun4v_ldc_set_map_table(unsigned long channel,
2655 unsigned long ra, 2658 unsigned long ra,
2656 unsigned long num_entries); 2659 unsigned long num_entries);
2657extern unsigned long sun4v_ldc_get_map_table(unsigned long channel, 2660unsigned long sun4v_ldc_get_map_table(unsigned long channel,
2658 unsigned long *ra, 2661 unsigned long *ra,
2659 unsigned long *num_entries); 2662 unsigned long *num_entries);
2660extern unsigned long sun4v_ldc_copy(unsigned long channel, 2663unsigned long sun4v_ldc_copy(unsigned long channel,
2661 unsigned long dir_code, 2664 unsigned long dir_code,
2662 unsigned long tgt_raddr, 2665 unsigned long tgt_raddr,
2663 unsigned long lcl_raddr, 2666 unsigned long lcl_raddr,
2664 unsigned long len, 2667 unsigned long len,
2665 unsigned long *actual_len); 2668 unsigned long *actual_len);
2666extern unsigned long sun4v_ldc_mapin(unsigned long channel, 2669unsigned long sun4v_ldc_mapin(unsigned long channel,
2667 unsigned long cookie, 2670 unsigned long cookie,
2668 unsigned long *ra, 2671 unsigned long *ra,
2669 unsigned long *perm); 2672 unsigned long *perm);
2670extern unsigned long sun4v_ldc_unmap(unsigned long ra); 2673unsigned long sun4v_ldc_unmap(unsigned long ra);
2671extern unsigned long sun4v_ldc_revoke(unsigned long channel, 2674unsigned long sun4v_ldc_revoke(unsigned long channel,
2672 unsigned long cookie, 2675 unsigned long cookie,
2673 unsigned long mte_cookie); 2676 unsigned long mte_cookie);
2674#endif 2677#endif
2675 2678
2676/* Performance counter services. */ 2679/* Performance counter services. */
@@ -2727,14 +2730,14 @@ extern unsigned long sun4v_ldc_revoke(unsigned long channel,
2727#define HV_FAST_N2_SET_PERFREG 0x105 2730#define HV_FAST_N2_SET_PERFREG 0x105
2728 2731
2729#ifndef __ASSEMBLY__ 2732#ifndef __ASSEMBLY__
2730extern unsigned long sun4v_niagara_getperf(unsigned long reg, 2733unsigned long sun4v_niagara_getperf(unsigned long reg,
2731 unsigned long *val); 2734 unsigned long *val);
2732extern unsigned long sun4v_niagara_setperf(unsigned long reg, 2735unsigned long sun4v_niagara_setperf(unsigned long reg,
2733 unsigned long val); 2736 unsigned long val);
2734extern unsigned long sun4v_niagara2_getperf(unsigned long reg, 2737unsigned long sun4v_niagara2_getperf(unsigned long reg,
2735 unsigned long *val); 2738 unsigned long *val);
2736extern unsigned long sun4v_niagara2_setperf(unsigned long reg, 2739unsigned long sun4v_niagara2_setperf(unsigned long reg,
2737 unsigned long val); 2740 unsigned long val);
2738#endif 2741#endif
2739 2742
2740/* MMU statistics services. 2743/* MMU statistics services.
@@ -2829,8 +2832,8 @@ struct hv_mmu_statistics {
2829#define HV_FAST_MMUSTAT_INFO 0x103 2832#define HV_FAST_MMUSTAT_INFO 0x103
2830 2833
2831#ifndef __ASSEMBLY__ 2834#ifndef __ASSEMBLY__
2832extern unsigned long sun4v_mmustat_conf(unsigned long ra, unsigned long *orig_ra); 2835unsigned long sun4v_mmustat_conf(unsigned long ra, unsigned long *orig_ra);
2833extern unsigned long sun4v_mmustat_info(unsigned long *ra); 2836unsigned long sun4v_mmustat_info(unsigned long *ra);
2834#endif 2837#endif
2835 2838
2836/* NCS crypto services */ 2839/* NCS crypto services */
@@ -2919,9 +2922,9 @@ struct hv_ncs_qtail_update_arg {
2919#define HV_FAST_NCS_REQUEST 0x110 2922#define HV_FAST_NCS_REQUEST 0x110
2920 2923
2921#ifndef __ASSEMBLY__ 2924#ifndef __ASSEMBLY__
2922extern unsigned long sun4v_ncs_request(unsigned long request, 2925unsigned long sun4v_ncs_request(unsigned long request,
2923 unsigned long arg_ra, 2926 unsigned long arg_ra,
2924 unsigned long arg_size); 2927 unsigned long arg_size);
2925#endif 2928#endif
2926 2929
2927#define HV_FAST_FIRE_GET_PERFREG 0x120 2930#define HV_FAST_FIRE_GET_PERFREG 0x120
@@ -2930,18 +2933,18 @@ extern unsigned long sun4v_ncs_request(unsigned long request,
2930#define HV_FAST_REBOOT_DATA_SET 0x172 2933#define HV_FAST_REBOOT_DATA_SET 0x172
2931 2934
2932#ifndef __ASSEMBLY__ 2935#ifndef __ASSEMBLY__
2933extern unsigned long sun4v_reboot_data_set(unsigned long ra, 2936unsigned long sun4v_reboot_data_set(unsigned long ra,
2934 unsigned long len); 2937 unsigned long len);
2935#endif 2938#endif
2936 2939
2937#define HV_FAST_VT_GET_PERFREG 0x184 2940#define HV_FAST_VT_GET_PERFREG 0x184
2938#define HV_FAST_VT_SET_PERFREG 0x185 2941#define HV_FAST_VT_SET_PERFREG 0x185
2939 2942
2940#ifndef __ASSEMBLY__ 2943#ifndef __ASSEMBLY__
2941extern unsigned long sun4v_vt_get_perfreg(unsigned long reg_num, 2944unsigned long sun4v_vt_get_perfreg(unsigned long reg_num,
2942 unsigned long *reg_val); 2945 unsigned long *reg_val);
2943extern unsigned long sun4v_vt_set_perfreg(unsigned long reg_num, 2946unsigned long sun4v_vt_set_perfreg(unsigned long reg_num,
2944 unsigned long reg_val); 2947 unsigned long reg_val);
2945#endif 2948#endif
2946 2949
2947/* Function numbers for HV_CORE_TRAP. */ 2950/* Function numbers for HV_CORE_TRAP. */
@@ -2978,21 +2981,21 @@ extern unsigned long sun4v_vt_set_perfreg(unsigned long reg_num,
2978#define HV_GRP_DIAG 0x0300 2981#define HV_GRP_DIAG 0x0300
2979 2982
2980#ifndef __ASSEMBLY__ 2983#ifndef __ASSEMBLY__
2981extern unsigned long sun4v_get_version(unsigned long group, 2984unsigned long sun4v_get_version(unsigned long group,
2982 unsigned long *major, 2985 unsigned long *major,
2983 unsigned long *minor); 2986 unsigned long *minor);
2984extern unsigned long sun4v_set_version(unsigned long group, 2987unsigned long sun4v_set_version(unsigned long group,
2985 unsigned long major, 2988 unsigned long major,
2986 unsigned long minor, 2989 unsigned long minor,
2987 unsigned long *actual_minor); 2990 unsigned long *actual_minor);
2988 2991
2989extern int sun4v_hvapi_register(unsigned long group, unsigned long major, 2992int sun4v_hvapi_register(unsigned long group, unsigned long major,
2990 unsigned long *minor); 2993 unsigned long *minor);
2991extern void sun4v_hvapi_unregister(unsigned long group); 2994void sun4v_hvapi_unregister(unsigned long group);
2992extern int sun4v_hvapi_get(unsigned long group, 2995int sun4v_hvapi_get(unsigned long group,
2993 unsigned long *major, 2996 unsigned long *major,
2994 unsigned long *minor); 2997 unsigned long *minor);
2995extern void sun4v_hvapi_init(void); 2998void sun4v_hvapi_init(void);
2996#endif 2999#endif
2997 3000
2998#endif /* !(_SPARC64_HYPERVISOR_H) */ 3001#endif /* !(_SPARC64_HYPERVISOR_H) */
diff --git a/arch/sparc/include/asm/idprom.h b/arch/sparc/include/asm/idprom.h
index 6976aa2439c6..3793f7f91c42 100644
--- a/arch/sparc/include/asm/idprom.h
+++ b/arch/sparc/include/asm/idprom.h
@@ -20,6 +20,6 @@ struct idprom {
20}; 20};
21 21
22extern struct idprom *idprom; 22extern struct idprom *idprom;
23extern void idprom_init(void); 23void idprom_init(void);
24 24
25#endif /* !(_SPARC_IDPROM_H) */ 25#endif /* !(_SPARC_IDPROM_H) */
diff --git a/arch/sparc/include/asm/io-unit.h b/arch/sparc/include/asm/io-unit.h
index 01ab2f613e91..04a9701e7202 100644
--- a/arch/sparc/include/asm/io-unit.h
+++ b/arch/sparc/include/asm/io-unit.h
@@ -43,7 +43,7 @@
43struct iounit_struct { 43struct iounit_struct {
44 unsigned long bmap[(IOUNIT_DMA_SIZE >> (PAGE_SHIFT + 3)) / sizeof(unsigned long)]; 44 unsigned long bmap[(IOUNIT_DMA_SIZE >> (PAGE_SHIFT + 3)) / sizeof(unsigned long)];
45 spinlock_t lock; 45 spinlock_t lock;
46 iopte_t *page_table; 46 iopte_t __iomem *page_table;
47 unsigned long rotor[3]; 47 unsigned long rotor[3];
48 unsigned long limit[4]; 48 unsigned long limit[4];
49}; 49};
diff --git a/arch/sparc/include/asm/io_32.h b/arch/sparc/include/asm/io_32.h
index c1acbd891cbc..9f532902627c 100644
--- a/arch/sparc/include/asm/io_32.h
+++ b/arch/sparc/include/asm/io_32.h
@@ -2,191 +2,94 @@
2#define __SPARC_IO_H 2#define __SPARC_IO_H
3 3
4#include <linux/kernel.h> 4#include <linux/kernel.h>
5#include <linux/types.h>
6#include <linux/ioport.h> /* struct resource */ 5#include <linux/ioport.h> /* struct resource */
7 6
8#include <asm/page.h> /* IO address mapping routines need this */ 7#define readb_relaxed(__addr) readb(__addr)
9#include <asm-generic/pci_iomap.h> 8#define readw_relaxed(__addr) readw(__addr)
10 9#define readl_relaxed(__addr) readl(__addr)
11#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
12
13static inline u32 flip_dword (u32 l)
14{
15 return ((l&0xff)<<24) | (((l>>8)&0xff)<<16) | (((l>>16)&0xff)<<8)| ((l>>24)&0xff);
16}
17
18static inline u16 flip_word (u16 w)
19{
20 return ((w&0xff) << 8) | ((w>>8)&0xff);
21}
22
23#define mmiowb()
24
25/*
26 * Memory mapped I/O to PCI
27 */
28
29static inline u8 __raw_readb(const volatile void __iomem *addr)
30{
31 return *(__force volatile u8 *)addr;
32}
33
34static inline u16 __raw_readw(const volatile void __iomem *addr)
35{
36 return *(__force volatile u16 *)addr;
37}
38
39static inline u32 __raw_readl(const volatile void __iomem *addr)
40{
41 return *(__force volatile u32 *)addr;
42}
43 10
44static inline void __raw_writeb(u8 b, volatile void __iomem *addr) 11#define IO_SPACE_LIMIT 0xffffffff
45{
46 *(__force volatile u8 *)addr = b;
47}
48 12
49static inline void __raw_writew(u16 w, volatile void __iomem *addr) 13#define memset_io(d,c,sz) _memset_io(d,c,sz)
50{ 14#define memcpy_fromio(d,s,sz) _memcpy_fromio(d,s,sz)
51 *(__force volatile u16 *)addr = w; 15#define memcpy_toio(d,s,sz) _memcpy_toio(d,s,sz)
52}
53 16
54static inline void __raw_writel(u32 l, volatile void __iomem *addr) 17#include <asm-generic/io.h>
55{
56 *(__force volatile u32 *)addr = l;
57}
58 18
59static inline u8 __readb(const volatile void __iomem *addr) 19static inline void _memset_io(volatile void __iomem *dst,
20 int c, __kernel_size_t n)
60{ 21{
61 return *(__force volatile u8 *)addr; 22 volatile void __iomem *d = dst;
62}
63 23
64static inline u16 __readw(const volatile void __iomem *addr) 24 while (n--) {
65{ 25 writeb(c, d);
66 return flip_word(*(__force volatile u16 *)addr); 26 d++;
27 }
67} 28}
68 29
69static inline u32 __readl(const volatile void __iomem *addr) 30static inline void _memcpy_fromio(void *dst, const volatile void __iomem *src,
31 __kernel_size_t n)
70{ 32{
71 return flip_dword(*(__force volatile u32 *)addr); 33 char *d = dst;
72}
73 34
74static inline void __writeb(u8 b, volatile void __iomem *addr) 35 while (n--) {
75{ 36 char tmp = readb(src);
76 *(__force volatile u8 *)addr = b; 37 *d++ = tmp;
38 src++;
39 }
77} 40}
78 41
79static inline void __writew(u16 w, volatile void __iomem *addr) 42static inline void _memcpy_toio(volatile void __iomem *dst, const void *src,
43 __kernel_size_t n)
80{ 44{
81 *(__force volatile u16 *)addr = flip_word(w); 45 const char *s = src;
82} 46 volatile void __iomem *d = dst;
83 47
84static inline void __writel(u32 l, volatile void __iomem *addr) 48 while (n--) {
85{ 49 char tmp = *s++;
86 *(__force volatile u32 *)addr = flip_dword(l); 50 writeb(tmp, d);
51 d++;
52 }
87} 53}
88 54
89#define readb(__addr) __readb(__addr)
90#define readw(__addr) __readw(__addr)
91#define readl(__addr) __readl(__addr)
92#define readb_relaxed(__addr) readb(__addr)
93#define readw_relaxed(__addr) readw(__addr)
94#define readl_relaxed(__addr) readl(__addr)
95
96#define writeb(__b, __addr) __writeb((__b),(__addr))
97#define writew(__w, __addr) __writew((__w),(__addr))
98#define writel(__l, __addr) __writel((__l),(__addr))
99
100/*
101 * I/O space operations
102 *
103 * Arrangement on a Sun is somewhat complicated.
104 *
105 * First of all, we want to use standard Linux drivers
106 * for keyboard, PC serial, etc. These drivers think
107 * they access I/O space and use inb/outb.
108 * On the other hand, EBus bridge accepts PCI *memory*
109 * cycles and converts them into ISA *I/O* cycles.
110 * Ergo, we want inb & outb to generate PCI memory cycles.
111 *
112 * If we want to issue PCI *I/O* cycles, we do this
113 * with a low 64K fixed window in PCIC. This window gets
114 * mapped somewhere into virtual kernel space and we
115 * can use inb/outb again.
116 */
117#define inb_local(__addr) __readb((void __iomem *)(unsigned long)(__addr))
118#define inb(__addr) __readb((void __iomem *)(unsigned long)(__addr))
119#define inw(__addr) __readw((void __iomem *)(unsigned long)(__addr))
120#define inl(__addr) __readl((void __iomem *)(unsigned long)(__addr))
121
122#define outb_local(__b, __addr) __writeb(__b, (void __iomem *)(unsigned long)(__addr))
123#define outb(__b, __addr) __writeb(__b, (void __iomem *)(unsigned long)(__addr))
124#define outw(__w, __addr) __writew(__w, (void __iomem *)(unsigned long)(__addr))
125#define outl(__l, __addr) __writel(__l, (void __iomem *)(unsigned long)(__addr))
126
127#define inb_p(__addr) inb(__addr)
128#define outb_p(__b, __addr) outb(__b, __addr)
129#define inw_p(__addr) inw(__addr)
130#define outw_p(__w, __addr) outw(__w, __addr)
131#define inl_p(__addr) inl(__addr)
132#define outl_p(__l, __addr) outl(__l, __addr)
133
134void outsb(unsigned long addr, const void *src, unsigned long cnt);
135void outsw(unsigned long addr, const void *src, unsigned long cnt);
136void outsl(unsigned long addr, const void *src, unsigned long cnt);
137void insb(unsigned long addr, void *dst, unsigned long count);
138void insw(unsigned long addr, void *dst, unsigned long count);
139void insl(unsigned long addr, void *dst, unsigned long count);
140
141#define IO_SPACE_LIMIT 0xffffffff
142
143/* 55/*
144 * SBus accessors. 56 * SBus accessors.
145 * 57 *
146 * SBus has only one, memory mapped, I/O space. 58 * SBus has only one, memory mapped, I/O space.
147 * We do not need to flip bytes for SBus of course. 59 * We do not need to flip bytes for SBus of course.
148 */ 60 */
149static inline u8 _sbus_readb(const volatile void __iomem *addr) 61static inline u8 sbus_readb(const volatile void __iomem *addr)
150{ 62{
151 return *(__force volatile u8 *)addr; 63 return *(__force volatile u8 *)addr;
152} 64}
153 65
154static inline u16 _sbus_readw(const volatile void __iomem *addr) 66static inline u16 sbus_readw(const volatile void __iomem *addr)
155{ 67{
156 return *(__force volatile u16 *)addr; 68 return *(__force volatile u16 *)addr;
157} 69}
158 70
159static inline u32 _sbus_readl(const volatile void __iomem *addr) 71static inline u32 sbus_readl(const volatile void __iomem *addr)
160{ 72{
161 return *(__force volatile u32 *)addr; 73 return *(__force volatile u32 *)addr;
162} 74}
163 75
164static inline void _sbus_writeb(u8 b, volatile void __iomem *addr) 76static inline void sbus_writeb(u8 b, volatile void __iomem *addr)
165{ 77{
166 *(__force volatile u8 *)addr = b; 78 *(__force volatile u8 *)addr = b;
167} 79}
168 80
169static inline void _sbus_writew(u16 w, volatile void __iomem *addr) 81static inline void sbus_writew(u16 w, volatile void __iomem *addr)
170{ 82{
171 *(__force volatile u16 *)addr = w; 83 *(__force volatile u16 *)addr = w;
172} 84}
173 85
174static inline void _sbus_writel(u32 l, volatile void __iomem *addr) 86static inline void sbus_writel(u32 l, volatile void __iomem *addr)
175{ 87{
176 *(__force volatile u32 *)addr = l; 88 *(__force volatile u32 *)addr = l;
177} 89}
178 90
179/* 91static inline void sbus_memset_io(volatile void __iomem *__dst, int c,
180 * The only reason for #define's is to hide casts to unsigned long. 92 __kernel_size_t n)
181 */
182#define sbus_readb(__addr) _sbus_readb(__addr)
183#define sbus_readw(__addr) _sbus_readw(__addr)
184#define sbus_readl(__addr) _sbus_readl(__addr)
185#define sbus_writeb(__b, __addr) _sbus_writeb(__b, __addr)
186#define sbus_writew(__w, __addr) _sbus_writew(__w, __addr)
187#define sbus_writel(__l, __addr) _sbus_writel(__l, __addr)
188
189static inline void sbus_memset_io(volatile void __iomem *__dst, int c, __kernel_size_t n)
190{ 93{
191 while(n--) { 94 while(n--) {
192 sbus_writeb(c, __dst); 95 sbus_writeb(c, __dst);
@@ -194,22 +97,9 @@ static inline void sbus_memset_io(volatile void __iomem *__dst, int c, __kernel_
194 } 97 }
195} 98}
196 99
197static inline void 100static inline void sbus_memcpy_fromio(void *dst,
198_memset_io(volatile void __iomem *dst, int c, __kernel_size_t n) 101 const volatile void __iomem *src,
199{ 102 __kernel_size_t n)
200 volatile void __iomem *d = dst;
201
202 while (n--) {
203 writeb(c, d);
204 d++;
205 }
206}
207
208#define memset_io(d,c,sz) _memset_io(d,c,sz)
209
210static inline void
211_sbus_memcpy_fromio(void *dst, const volatile void __iomem *src,
212 __kernel_size_t n)
213{ 103{
214 char *d = dst; 104 char *d = dst;
215 105
@@ -220,25 +110,9 @@ _sbus_memcpy_fromio(void *dst, const volatile void __iomem *src,
220 } 110 }
221} 111}
222 112
223#define sbus_memcpy_fromio(d, s, sz) _sbus_memcpy_fromio(d, s, sz) 113static inline void sbus_memcpy_toio(volatile void __iomem *dst,
224 114 const void *src,
225static inline void 115 __kernel_size_t n)
226_memcpy_fromio(void *dst, const volatile void __iomem *src, __kernel_size_t n)
227{
228 char *d = dst;
229
230 while (n--) {
231 char tmp = readb(src);
232 *d++ = tmp;
233 src++;
234 }
235}
236
237#define memcpy_fromio(d,s,sz) _memcpy_fromio(d,s,sz)
238
239static inline void
240_sbus_memcpy_toio(volatile void __iomem *dst, const void *src,
241 __kernel_size_t n)
242{ 116{
243 const char *s = src; 117 const char *s = src;
244 volatile void __iomem *d = dst; 118 volatile void __iomem *d = dst;
@@ -250,81 +124,26 @@ _sbus_memcpy_toio(volatile void __iomem *dst, const void *src,
250 } 124 }
251} 125}
252 126
253#define sbus_memcpy_toio(d, s, sz) _sbus_memcpy_toio(d, s, sz)
254
255static inline void
256_memcpy_toio(volatile void __iomem *dst, const void *src, __kernel_size_t n)
257{
258 const char *s = src;
259 volatile void __iomem *d = dst;
260
261 while (n--) {
262 char tmp = *s++;
263 writeb(tmp, d);
264 d++;
265 }
266}
267
268#define memcpy_toio(d,s,sz) _memcpy_toio(d,s,sz)
269
270#ifdef __KERNEL__ 127#ifdef __KERNEL__
271 128
272/* 129/*
273 * Bus number may be embedded in the higher bits of the physical address. 130 * Bus number may be embedded in the higher bits of the physical address.
274 * This is why we have no bus number argument to ioremap(). 131 * This is why we have no bus number argument to ioremap().
275 */ 132 */
276extern void __iomem *ioremap(unsigned long offset, unsigned long size); 133void __iomem *ioremap(unsigned long offset, unsigned long size);
277#define ioremap_nocache(X,Y) ioremap((X),(Y)) 134#define ioremap_nocache(X,Y) ioremap((X),(Y))
278#define ioremap_wc(X,Y) ioremap((X),(Y)) 135#define ioremap_wc(X,Y) ioremap((X),(Y))
279extern void iounmap(volatile void __iomem *addr); 136void iounmap(volatile void __iomem *addr);
280
281#define ioread8(X) readb(X)
282#define ioread16(X) readw(X)
283#define ioread16be(X) __raw_readw(X)
284#define ioread32(X) readl(X)
285#define ioread32be(X) __raw_readl(X)
286#define iowrite8(val,X) writeb(val,X)
287#define iowrite16(val,X) writew(val,X)
288#define iowrite16be(val,X) __raw_writew(val,X)
289#define iowrite32(val,X) writel(val,X)
290#define iowrite32be(val,X) __raw_writel(val,X)
291
292static inline void ioread8_rep(void __iomem *port, void *buf, unsigned long count)
293{
294 insb((unsigned long __force)port, buf, count);
295}
296static inline void ioread16_rep(void __iomem *port, void *buf, unsigned long count)
297{
298 insw((unsigned long __force)port, buf, count);
299}
300
301static inline void ioread32_rep(void __iomem *port, void *buf, unsigned long count)
302{
303 insl((unsigned long __force)port, buf, count);
304}
305
306static inline void iowrite8_rep(void __iomem *port, const void *buf, unsigned long count)
307{
308 outsb((unsigned long __force)port, buf, count);
309}
310
311static inline void iowrite16_rep(void __iomem *port, const void *buf, unsigned long count)
312{
313 outsw((unsigned long __force)port, buf, count);
314}
315
316static inline void iowrite32_rep(void __iomem *port, const void *buf, unsigned long count)
317{
318 outsl((unsigned long __force)port, buf, count);
319}
320 137
321/* Create a virtual mapping cookie for an IO port range */ 138/* Create a virtual mapping cookie for an IO port range */
322extern void __iomem *ioport_map(unsigned long port, unsigned int nr); 139void __iomem *ioport_map(unsigned long port, unsigned int nr);
323extern void ioport_unmap(void __iomem *); 140void ioport_unmap(void __iomem *);
324 141
325/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ 142/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
326struct pci_dev; 143struct pci_dev;
327extern void pci_iounmap(struct pci_dev *dev, void __iomem *); 144void pci_iounmap(struct pci_dev *dev, void __iomem *);
145
146
328 147
329/* 148/*
330 * At the moment, we do not use CMOS_READ anywhere outside of rtc.c, 149 * At the moment, we do not use CMOS_READ anywhere outside of rtc.c,
@@ -343,21 +162,11 @@ static inline int sbus_can_burst64(void)
343 return 0; /* actually, sparc_cpu_model==sun4d */ 162 return 0; /* actually, sparc_cpu_model==sun4d */
344} 163}
345struct device; 164struct device;
346extern void sbus_set_sbus64(struct device *, int); 165void sbus_set_sbus64(struct device *, int);
347 166
348#endif 167#endif
349 168
350#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1 169#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1
351 170
352/*
353 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
354 * access
355 */
356#define xlate_dev_mem_ptr(p) __va(p)
357
358/*
359 * Convert a virtual cached pointer to an uncached pointer
360 */
361#define xlate_dev_kmem_ptr(p) p
362 171
363#endif /* !(__SPARC_IO_H) */ 172#endif /* !(__SPARC_IO_H) */
diff --git a/arch/sparc/include/asm/io_64.h b/arch/sparc/include/asm/io_64.h
index 09b0b88aeb2a..05381c3a4228 100644
--- a/arch/sparc/include/asm/io_64.h
+++ b/arch/sparc/include/asm/io_64.h
@@ -15,7 +15,6 @@
15 15
16/* BIO layer definitions. */ 16/* BIO layer definitions. */
17extern unsigned long kern_base, kern_size; 17extern unsigned long kern_base, kern_size;
18#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
19 18
20static inline u8 _inb(unsigned long addr) 19static inline u8 _inb(unsigned long addr)
21{ 20{
@@ -91,12 +90,12 @@ static inline void _outl(u32 l, unsigned long addr)
91#define inl_p(__addr) inl(__addr) 90#define inl_p(__addr) inl(__addr)
92#define outl_p(__l, __addr) outl(__l, __addr) 91#define outl_p(__l, __addr) outl(__l, __addr)
93 92
94extern void outsb(unsigned long, const void *, unsigned long); 93void outsb(unsigned long, const void *, unsigned long);
95extern void outsw(unsigned long, const void *, unsigned long); 94void outsw(unsigned long, const void *, unsigned long);
96extern void outsl(unsigned long, const void *, unsigned long); 95void outsl(unsigned long, const void *, unsigned long);
97extern void insb(unsigned long, void *, unsigned long); 96void insb(unsigned long, void *, unsigned long);
98extern void insw(unsigned long, void *, unsigned long); 97void insw(unsigned long, void *, unsigned long);
99extern void insl(unsigned long, void *, unsigned long); 98void insl(unsigned long, void *, unsigned long);
100 99
101static inline void ioread8_rep(void __iomem *port, void *buf, unsigned long count) 100static inline void ioread8_rep(void __iomem *port, void *buf, unsigned long count)
102{ 101{
@@ -509,12 +508,12 @@ static inline void iounmap(volatile void __iomem *addr)
509#define iowrite32be(val,X) __raw_writel(val,X) 508#define iowrite32be(val,X) __raw_writel(val,X)
510 509
511/* Create a virtual mapping cookie for an IO port range */ 510/* Create a virtual mapping cookie for an IO port range */
512extern void __iomem *ioport_map(unsigned long port, unsigned int nr); 511void __iomem *ioport_map(unsigned long port, unsigned int nr);
513extern void ioport_unmap(void __iomem *); 512void ioport_unmap(void __iomem *);
514 513
515/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ 514/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
516struct pci_dev; 515struct pci_dev;
517extern void pci_iounmap(struct pci_dev *dev, void __iomem *); 516void pci_iounmap(struct pci_dev *dev, void __iomem *);
518 517
519static inline int sbus_can_dma_64bit(void) 518static inline int sbus_can_dma_64bit(void)
520{ 519{
@@ -525,7 +524,7 @@ static inline int sbus_can_burst64(void)
525 return 1; 524 return 1;
526} 525}
527struct device; 526struct device;
528extern void sbus_set_sbus64(struct device *, int); 527void sbus_set_sbus64(struct device *, int);
529 528
530/* 529/*
531 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 530 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
diff --git a/arch/sparc/include/asm/iommu_32.h b/arch/sparc/include/asm/iommu_32.h
index 70c589c05a10..f6c066b52fd6 100644
--- a/arch/sparc/include/asm/iommu_32.h
+++ b/arch/sparc/include/asm/iommu_32.h
@@ -99,7 +99,7 @@ struct iommu_regs {
99#define IOPTE_WAZ 0x00000001 /* Write as zeros */ 99#define IOPTE_WAZ 0x00000001 /* Write as zeros */
100 100
101struct iommu_struct { 101struct iommu_struct {
102 struct iommu_regs *regs; 102 struct iommu_regs __iomem *regs;
103 iopte_t *page_table; 103 iopte_t *page_table;
104 /* For convenience */ 104 /* For convenience */
105 unsigned long start; /* First managed virtual address */ 105 unsigned long start; /* First managed virtual address */
@@ -108,14 +108,14 @@ struct iommu_struct {
108 struct bit_map usemap; 108 struct bit_map usemap;
109}; 109};
110 110
111static inline void iommu_invalidate(struct iommu_regs *regs) 111static inline void iommu_invalidate(struct iommu_regs __iomem *regs)
112{ 112{
113 regs->tlbflush = 0; 113 sbus_writel(0, &regs->tlbflush);
114} 114}
115 115
116static inline void iommu_invalidate_page(struct iommu_regs *regs, unsigned long ba) 116static inline void iommu_invalidate_page(struct iommu_regs __iomem *regs, unsigned long ba)
117{ 117{
118 regs->pageflush = (ba & PAGE_MASK); 118 sbus_writel(ba & PAGE_MASK, &regs->pageflush);
119} 119}
120 120
121#endif /* !(_SPARC_IOMMU_H) */ 121#endif /* !(_SPARC_IOMMU_H) */
diff --git a/arch/sparc/include/asm/iommu_64.h b/arch/sparc/include/asm/iommu_64.h
index caf798b56191..2b9321ab064d 100644
--- a/arch/sparc/include/asm/iommu_64.h
+++ b/arch/sparc/include/asm/iommu_64.h
@@ -58,8 +58,8 @@ struct strbuf {
58 volatile unsigned long __flushflag_buf[(64+(64-1)) / sizeof(long)]; 58 volatile unsigned long __flushflag_buf[(64+(64-1)) / sizeof(long)];
59}; 59};
60 60
61extern int iommu_table_init(struct iommu *iommu, int tsbsize, 61int iommu_table_init(struct iommu *iommu, int tsbsize,
62 u32 dma_offset, u32 dma_addr_mask, 62 u32 dma_offset, u32 dma_addr_mask,
63 int numa_node); 63 int numa_node);
64 64
65#endif /* !(_SPARC64_IOMMU_H) */ 65#endif /* !(_SPARC64_IOMMU_H) */
diff --git a/arch/sparc/include/asm/irq_32.h b/arch/sparc/include/asm/irq_32.h
index 2ae3acaeb1b3..eecd3d8442c9 100644
--- a/arch/sparc/include/asm/irq_32.h
+++ b/arch/sparc/include/asm/irq_32.h
@@ -16,7 +16,8 @@
16 16
17#define irq_canonicalize(irq) (irq) 17#define irq_canonicalize(irq) (irq)
18 18
19extern void __init init_IRQ(void); 19void __init init_IRQ(void);
20void __init sun4d_init_sbi_irq(void);
20 21
21#define NO_IRQ 0xffffffff 22#define NO_IRQ 0xffffffff
22 23
diff --git a/arch/sparc/include/asm/irq_64.h b/arch/sparc/include/asm/irq_64.h
index abf6afe82ca8..375cffcf7dbd 100644
--- a/arch/sparc/include/asm/irq_64.h
+++ b/arch/sparc/include/asm/irq_64.h
@@ -39,32 +39,32 @@
39 */ 39 */
40#define NR_IRQS 255 40#define NR_IRQS 255
41 41
42extern void irq_install_pre_handler(int irq, 42void irq_install_pre_handler(int irq,
43 void (*func)(unsigned int, void *, void *), 43 void (*func)(unsigned int, void *, void *),
44 void *arg1, void *arg2); 44 void *arg1, void *arg2);
45#define irq_canonicalize(irq) (irq) 45#define irq_canonicalize(irq) (irq)
46extern unsigned int build_irq(int inofixup, unsigned long iclr, unsigned long imap); 46unsigned int build_irq(int inofixup, unsigned long iclr, unsigned long imap);
47extern unsigned int sun4v_build_irq(u32 devhandle, unsigned int devino); 47unsigned int sun4v_build_irq(u32 devhandle, unsigned int devino);
48extern unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino); 48unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino);
49extern unsigned int sun4v_build_msi(u32 devhandle, unsigned int *irq_p, 49unsigned int sun4v_build_msi(u32 devhandle, unsigned int *irq_p,
50 unsigned int msi_devino_start, 50 unsigned int msi_devino_start,
51 unsigned int msi_devino_end); 51 unsigned int msi_devino_end);
52extern void sun4v_destroy_msi(unsigned int irq); 52void sun4v_destroy_msi(unsigned int irq);
53extern unsigned int sun4u_build_msi(u32 portid, unsigned int *irq_p, 53unsigned int sun4u_build_msi(u32 portid, unsigned int *irq_p,
54 unsigned int msi_devino_start, 54 unsigned int msi_devino_start,
55 unsigned int msi_devino_end, 55 unsigned int msi_devino_end,
56 unsigned long imap_base, 56 unsigned long imap_base,
57 unsigned long iclr_base); 57 unsigned long iclr_base);
58extern void sun4u_destroy_msi(unsigned int irq); 58void sun4u_destroy_msi(unsigned int irq);
59 59
60extern unsigned char irq_alloc(unsigned int dev_handle, 60unsigned char irq_alloc(unsigned int dev_handle,
61 unsigned int dev_ino); 61 unsigned int dev_ino);
62#ifdef CONFIG_PCI_MSI 62#ifdef CONFIG_PCI_MSI
63extern void irq_free(unsigned int irq); 63void irq_free(unsigned int irq);
64#endif 64#endif
65 65
66extern void __init init_IRQ(void); 66void __init init_IRQ(void);
67extern void fixup_irqs(void); 67void fixup_irqs(void);
68 68
69static inline void set_softint(unsigned long bits) 69static inline void set_softint(unsigned long bits)
70{ 70{
diff --git a/arch/sparc/include/asm/irqflags_32.h b/arch/sparc/include/asm/irqflags_32.h
index e414c06615c1..71cc284f55c5 100644
--- a/arch/sparc/include/asm/irqflags_32.h
+++ b/arch/sparc/include/asm/irqflags_32.h
@@ -15,9 +15,9 @@
15#include <linux/types.h> 15#include <linux/types.h>
16#include <asm/psr.h> 16#include <asm/psr.h>
17 17
18extern void arch_local_irq_restore(unsigned long); 18void arch_local_irq_restore(unsigned long);
19extern unsigned long arch_local_irq_save(void); 19unsigned long arch_local_irq_save(void);
20extern void arch_local_irq_enable(void); 20void arch_local_irq_enable(void);
21 21
22static inline notrace unsigned long arch_local_save_flags(void) 22static inline notrace unsigned long arch_local_save_flags(void)
23{ 23{
diff --git a/arch/sparc/include/asm/kdebug_64.h b/arch/sparc/include/asm/kdebug_64.h
index feb3578e12c4..04465de8f3b5 100644
--- a/arch/sparc/include/asm/kdebug_64.h
+++ b/arch/sparc/include/asm/kdebug_64.h
@@ -3,7 +3,7 @@
3 3
4struct pt_regs; 4struct pt_regs;
5 5
6extern void bad_trap(struct pt_regs *, long); 6void bad_trap(struct pt_regs *, long);
7 7
8/* Grossly misnamed. */ 8/* Grossly misnamed. */
9enum die_val { 9enum die_val {
diff --git a/arch/sparc/include/asm/kgdb.h b/arch/sparc/include/asm/kgdb.h
index b6ef301d05bf..47366af7a589 100644
--- a/arch/sparc/include/asm/kgdb.h
+++ b/arch/sparc/include/asm/kgdb.h
@@ -28,9 +28,12 @@ enum regnames {
28#define NUMREGBYTES ((GDB_CSR + 1) * 4) 28#define NUMREGBYTES ((GDB_CSR + 1) * 4)
29#else 29#else
30#define NUMREGBYTES ((GDB_Y + 1) * 8) 30#define NUMREGBYTES ((GDB_Y + 1) * 8)
31
32struct pt_regs;
33asmlinkage void kgdb_trap(unsigned long trap_level, struct pt_regs *regs);
31#endif 34#endif
32 35
33extern void arch_kgdb_breakpoint(void); 36void arch_kgdb_breakpoint(void);
34 37
35#define BREAK_INSTR_SIZE 4 38#define BREAK_INSTR_SIZE 4
36#define CACHE_FLUSH_IS_SAFE 1 39#define CACHE_FLUSH_IS_SAFE 1
diff --git a/arch/sparc/include/asm/kprobes.h b/arch/sparc/include/asm/kprobes.h
index 5879d71afdaa..a145d798e112 100644
--- a/arch/sparc/include/asm/kprobes.h
+++ b/arch/sparc/include/asm/kprobes.h
@@ -43,7 +43,9 @@ struct kprobe_ctlblk {
43 struct prev_kprobe prev_kprobe; 43 struct prev_kprobe prev_kprobe;
44}; 44};
45 45
46extern int kprobe_exceptions_notify(struct notifier_block *self, 46int kprobe_exceptions_notify(struct notifier_block *self,
47 unsigned long val, void *data); 47 unsigned long val, void *data);
48extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); 48int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
49asmlinkage void __kprobes kprobe_trap(unsigned long trap_level,
50 struct pt_regs *regs);
49#endif /* _SPARC64_KPROBES_H */ 51#endif /* _SPARC64_KPROBES_H */
diff --git a/arch/sparc/include/asm/ldc.h b/arch/sparc/include/asm/ldc.h
index bdb524a7b814..c8c67f621f4f 100644
--- a/arch/sparc/include/asm/ldc.h
+++ b/arch/sparc/include/asm/ldc.h
@@ -4,9 +4,9 @@
4#include <asm/hypervisor.h> 4#include <asm/hypervisor.h>
5 5
6extern int ldom_domaining_enabled; 6extern int ldom_domaining_enabled;
7extern void ldom_set_var(const char *var, const char *value); 7void ldom_set_var(const char *var, const char *value);
8extern void ldom_reboot(const char *boot_command); 8void ldom_reboot(const char *boot_command);
9extern void ldom_power_off(void); 9void ldom_power_off(void);
10 10
11/* The event handler will be evoked when link state changes 11/* The event handler will be evoked when link state changes
12 * or data becomes available on the receive side. 12 * or data becomes available on the receive side.
@@ -51,30 +51,30 @@ struct ldc_channel_config {
51struct ldc_channel; 51struct ldc_channel;
52 52
53/* Allocate state for a channel. */ 53/* Allocate state for a channel. */
54extern struct ldc_channel *ldc_alloc(unsigned long id, 54struct ldc_channel *ldc_alloc(unsigned long id,
55 const struct ldc_channel_config *cfgp, 55 const struct ldc_channel_config *cfgp,
56 void *event_arg); 56 void *event_arg);
57 57
58/* Shut down and free state for a channel. */ 58/* Shut down and free state for a channel. */
59extern void ldc_free(struct ldc_channel *lp); 59void ldc_free(struct ldc_channel *lp);
60 60
61/* Register TX and RX queues of the link with the hypervisor. */ 61/* Register TX and RX queues of the link with the hypervisor. */
62extern int ldc_bind(struct ldc_channel *lp, const char *name); 62int ldc_bind(struct ldc_channel *lp, const char *name);
63 63
64/* For non-RAW protocols we need to complete a handshake before 64/* For non-RAW protocols we need to complete a handshake before
65 * communication can proceed. ldc_connect() does that, if the 65 * communication can proceed. ldc_connect() does that, if the
66 * handshake completes successfully, an LDC_EVENT_UP event will 66 * handshake completes successfully, an LDC_EVENT_UP event will
67 * be sent up to the driver. 67 * be sent up to the driver.
68 */ 68 */
69extern int ldc_connect(struct ldc_channel *lp); 69int ldc_connect(struct ldc_channel *lp);
70extern int ldc_disconnect(struct ldc_channel *lp); 70int ldc_disconnect(struct ldc_channel *lp);
71 71
72extern int ldc_state(struct ldc_channel *lp); 72int ldc_state(struct ldc_channel *lp);
73 73
74/* Read and write operations. Only valid when the link is up. */ 74/* Read and write operations. Only valid when the link is up. */
75extern int ldc_write(struct ldc_channel *lp, const void *buf, 75int ldc_write(struct ldc_channel *lp, const void *buf,
76 unsigned int size); 76 unsigned int size);
77extern int ldc_read(struct ldc_channel *lp, void *buf, unsigned int size); 77int ldc_read(struct ldc_channel *lp, void *buf, unsigned int size);
78 78
79#define LDC_MAP_SHADOW 0x01 79#define LDC_MAP_SHADOW 0x01
80#define LDC_MAP_DIRECT 0x02 80#define LDC_MAP_DIRECT 0x02
@@ -92,22 +92,22 @@ struct ldc_trans_cookie {
92}; 92};
93 93
94struct scatterlist; 94struct scatterlist;
95extern int ldc_map_sg(struct ldc_channel *lp, 95int ldc_map_sg(struct ldc_channel *lp,
96 struct scatterlist *sg, int num_sg, 96 struct scatterlist *sg, int num_sg,
97 struct ldc_trans_cookie *cookies, int ncookies, 97 struct ldc_trans_cookie *cookies, int ncookies,
98 unsigned int map_perm); 98 unsigned int map_perm);
99 99
100extern int ldc_map_single(struct ldc_channel *lp, 100int ldc_map_single(struct ldc_channel *lp,
101 void *buf, unsigned int len, 101 void *buf, unsigned int len,
102 struct ldc_trans_cookie *cookies, int ncookies, 102 struct ldc_trans_cookie *cookies, int ncookies,
103 unsigned int map_perm); 103 unsigned int map_perm);
104 104
105extern void ldc_unmap(struct ldc_channel *lp, struct ldc_trans_cookie *cookies, 105void ldc_unmap(struct ldc_channel *lp, struct ldc_trans_cookie *cookies,
106 int ncookies); 106 int ncookies);
107 107
108extern int ldc_copy(struct ldc_channel *lp, int copy_dir, 108int ldc_copy(struct ldc_channel *lp, int copy_dir,
109 void *buf, unsigned int len, unsigned long offset, 109 void *buf, unsigned int len, unsigned long offset,
110 struct ldc_trans_cookie *cookies, int ncookies); 110 struct ldc_trans_cookie *cookies, int ncookies);
111 111
112static inline int ldc_get_dring_entry(struct ldc_channel *lp, 112static inline int ldc_get_dring_entry(struct ldc_channel *lp,
113 void *buf, unsigned int len, 113 void *buf, unsigned int len,
@@ -127,12 +127,12 @@ static inline int ldc_put_dring_entry(struct ldc_channel *lp,
127 return ldc_copy(lp, LDC_COPY_OUT, buf, len, offset, cookies, ncookies); 127 return ldc_copy(lp, LDC_COPY_OUT, buf, len, offset, cookies, ncookies);
128} 128}
129 129
130extern void *ldc_alloc_exp_dring(struct ldc_channel *lp, unsigned int len, 130void *ldc_alloc_exp_dring(struct ldc_channel *lp, unsigned int len,
131 struct ldc_trans_cookie *cookies, 131 struct ldc_trans_cookie *cookies,
132 int *ncookies, unsigned int map_perm); 132 int *ncookies, unsigned int map_perm);
133 133
134extern void ldc_free_exp_dring(struct ldc_channel *lp, void *buf, 134void ldc_free_exp_dring(struct ldc_channel *lp, void *buf,
135 unsigned int len, 135 unsigned int len,
136 struct ldc_trans_cookie *cookies, int ncookies); 136 struct ldc_trans_cookie *cookies, int ncookies);
137 137
138#endif /* _SPARC64_LDC_H */ 138#endif /* _SPARC64_LDC_H */
diff --git a/arch/sparc/include/asm/leon.h b/arch/sparc/include/asm/leon.h
index c2f6ff6d7a35..204771cd74a5 100644
--- a/arch/sparc/include/asm/leon.h
+++ b/arch/sparc/include/asm/leon.h
@@ -82,8 +82,8 @@ static inline unsigned long leon_load_reg(unsigned long paddr)
82#define LEON_BYPASS_LOAD_PA(x) leon_load_reg((unsigned long)(x)) 82#define LEON_BYPASS_LOAD_PA(x) leon_load_reg((unsigned long)(x))
83#define LEON_BYPASS_STORE_PA(x, v) leon_store_reg((unsigned long)(x), (unsigned long)(v)) 83#define LEON_BYPASS_STORE_PA(x, v) leon_store_reg((unsigned long)(x), (unsigned long)(v))
84 84
85extern void leon_switch_mm(void); 85void leon_switch_mm(void);
86extern void leon_init_IRQ(void); 86void leon_init_IRQ(void);
87 87
88static inline unsigned long sparc_leon3_get_dcachecfg(void) 88static inline unsigned long sparc_leon3_get_dcachecfg(void)
89{ 89{
@@ -196,14 +196,14 @@ static inline int sparc_leon3_cpuid(void)
196#ifndef __ASSEMBLY__ 196#ifndef __ASSEMBLY__
197struct vm_area_struct; 197struct vm_area_struct;
198 198
199extern unsigned long leon_swprobe(unsigned long vaddr, unsigned long *paddr); 199unsigned long leon_swprobe(unsigned long vaddr, unsigned long *paddr);
200extern void leon_flush_icache_all(void); 200void leon_flush_icache_all(void);
201extern void leon_flush_dcache_all(void); 201void leon_flush_dcache_all(void);
202extern void leon_flush_cache_all(void); 202void leon_flush_cache_all(void);
203extern void leon_flush_tlb_all(void); 203void leon_flush_tlb_all(void);
204extern int leon_flush_during_switch; 204extern int leon_flush_during_switch;
205extern int leon_flush_needed(void); 205int leon_flush_needed(void);
206extern void leon_flush_pcache_all(struct vm_area_struct *vma, unsigned long page); 206void leon_flush_pcache_all(struct vm_area_struct *vma, unsigned long page);
207 207
208/* struct that hold LEON3 cache configuration registers */ 208/* struct that hold LEON3 cache configuration registers */
209struct leon3_cacheregs { 209struct leon3_cacheregs {
@@ -217,29 +217,29 @@ struct leon3_cacheregs {
217 217
218struct device_node; 218struct device_node;
219struct task_struct; 219struct task_struct;
220extern unsigned int leon_build_device_irq(unsigned int real_irq, 220unsigned int leon_build_device_irq(unsigned int real_irq,
221 irq_flow_handler_t flow_handler, 221 irq_flow_handler_t flow_handler,
222 const char *name, int do_ack); 222 const char *name, int do_ack);
223extern void leon_update_virq_handling(unsigned int virq, 223void leon_update_virq_handling(unsigned int virq,
224 irq_flow_handler_t flow_handler, 224 irq_flow_handler_t flow_handler,
225 const char *name, int do_ack); 225 const char *name, int do_ack);
226extern void leon_init_timers(void); 226void leon_init_timers(void);
227extern void leon_trans_init(struct device_node *dp); 227void leon_trans_init(struct device_node *dp);
228extern void leon_node_init(struct device_node *dp, struct device_node ***nextp); 228void leon_node_init(struct device_node *dp, struct device_node ***nextp);
229extern void init_leon(void); 229void init_leon(void);
230extern void poke_leonsparc(void); 230void poke_leonsparc(void);
231extern void leon3_getCacheRegs(struct leon3_cacheregs *regs); 231void leon3_getCacheRegs(struct leon3_cacheregs *regs);
232extern int leon3_ticker_irq; 232extern int leon3_ticker_irq;
233 233
234#ifdef CONFIG_SMP 234#ifdef CONFIG_SMP
235extern int leon_smp_nrcpus(void); 235int leon_smp_nrcpus(void);
236extern void leon_clear_profile_irq(int cpu); 236void leon_clear_profile_irq(int cpu);
237extern void leon_smp_done(void); 237void leon_smp_done(void);
238extern void leon_boot_cpus(void); 238void leon_boot_cpus(void);
239extern int leon_boot_one_cpu(int i, struct task_struct *); 239int leon_boot_one_cpu(int i, struct task_struct *);
240void leon_init_smp(void); 240void leon_init_smp(void);
241void leon_enable_irq_cpu(unsigned int irq_nr, unsigned int cpu); 241void leon_enable_irq_cpu(unsigned int irq_nr, unsigned int cpu);
242extern irqreturn_t leon_percpu_timer_interrupt(int irq, void *unused); 242irqreturn_t leon_percpu_timer_interrupt(int irq, void *unused);
243 243
244extern unsigned int smpleon_ipi[]; 244extern unsigned int smpleon_ipi[];
245extern unsigned int linux_trap_ipi15_leon[]; 245extern unsigned int linux_trap_ipi15_leon[];
diff --git a/arch/sparc/include/asm/leon_pci.h b/arch/sparc/include/asm/leon_pci.h
index bfd3ab3092b5..049d067ed8be 100644
--- a/arch/sparc/include/asm/leon_pci.h
+++ b/arch/sparc/include/asm/leon_pci.h
@@ -16,7 +16,7 @@ struct leon_pci_info {
16 int (*map_irq)(const struct pci_dev *dev, u8 slot, u8 pin); 16 int (*map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
17}; 17};
18 18
19extern void leon_pci_init(struct platform_device *ofdev, 19void leon_pci_init(struct platform_device *ofdev,
20 struct leon_pci_info *info); 20 struct leon_pci_info *info);
21 21
22#endif /* _ASM_LEON_PCI_H_ */ 22#endif /* _ASM_LEON_PCI_H_ */
diff --git a/arch/sparc/include/asm/mc146818rtc.h b/arch/sparc/include/asm/mc146818rtc.h
index 67ed9e3a0235..d8e72f37dc4b 100644
--- a/arch/sparc/include/asm/mc146818rtc.h
+++ b/arch/sparc/include/asm/mc146818rtc.h
@@ -1,5 +1,10 @@
1#ifndef ___ASM_SPARC_MC146818RTC_H 1#ifndef ___ASM_SPARC_MC146818RTC_H
2#define ___ASM_SPARC_MC146818RTC_H 2#define ___ASM_SPARC_MC146818RTC_H
3
4#include <linux/spinlock.h>
5
6extern spinlock_t rtc_lock;
7
3#if defined(__sparc__) && defined(__arch64__) 8#if defined(__sparc__) && defined(__arch64__)
4#include <asm/mc146818rtc_64.h> 9#include <asm/mc146818rtc_64.h>
5#else 10#else
diff --git a/arch/sparc/include/asm/mdesc.h b/arch/sparc/include/asm/mdesc.h
index 139097f3a67b..aebeb88f70db 100644
--- a/arch/sparc/include/asm/mdesc.h
+++ b/arch/sparc/include/asm/mdesc.h
@@ -12,13 +12,13 @@ struct mdesc_handle;
12 * the first argument to all of the operational calls that work 12 * the first argument to all of the operational calls that work
13 * on mdescs. 13 * on mdescs.
14 */ 14 */
15extern struct mdesc_handle *mdesc_grab(void); 15struct mdesc_handle *mdesc_grab(void);
16extern void mdesc_release(struct mdesc_handle *); 16void mdesc_release(struct mdesc_handle *);
17 17
18#define MDESC_NODE_NULL (~(u64)0) 18#define MDESC_NODE_NULL (~(u64)0)
19 19
20extern u64 mdesc_node_by_name(struct mdesc_handle *handle, 20u64 mdesc_node_by_name(struct mdesc_handle *handle,
21 u64 from_node, const char *name); 21 u64 from_node, const char *name);
22#define mdesc_for_each_node_by_name(__hdl, __node, __name) \ 22#define mdesc_for_each_node_by_name(__hdl, __node, __name) \
23 for (__node = mdesc_node_by_name(__hdl, MDESC_NODE_NULL, __name); \ 23 for (__node = mdesc_node_by_name(__hdl, MDESC_NODE_NULL, __name); \
24 (__node) != MDESC_NODE_NULL; \ 24 (__node) != MDESC_NODE_NULL; \
@@ -34,9 +34,9 @@ extern u64 mdesc_node_by_name(struct mdesc_handle *handle,
34 * 34 *
35 * These same rules apply to mdesc_node_name(). 35 * These same rules apply to mdesc_node_name().
36 */ 36 */
37extern const void *mdesc_get_property(struct mdesc_handle *handle, 37const void *mdesc_get_property(struct mdesc_handle *handle,
38 u64 node, const char *name, int *lenp); 38 u64 node, const char *name, int *lenp);
39extern const char *mdesc_node_name(struct mdesc_handle *hp, u64 node); 39const char *mdesc_node_name(struct mdesc_handle *hp, u64 node);
40 40
41/* MD arc iteration, the standard sequence is: 41/* MD arc iteration, the standard sequence is:
42 * 42 *
@@ -50,16 +50,16 @@ extern const char *mdesc_node_name(struct mdesc_handle *hp, u64 node);
50#define MDESC_ARC_TYPE_FWD "fwd" 50#define MDESC_ARC_TYPE_FWD "fwd"
51#define MDESC_ARC_TYPE_BACK "back" 51#define MDESC_ARC_TYPE_BACK "back"
52 52
53extern u64 mdesc_next_arc(struct mdesc_handle *handle, u64 from, 53u64 mdesc_next_arc(struct mdesc_handle *handle, u64 from,
54 const char *arc_type); 54 const char *arc_type);
55#define mdesc_for_each_arc(__arc, __hdl, __node, __type) \ 55#define mdesc_for_each_arc(__arc, __hdl, __node, __type) \
56 for (__arc = mdesc_next_arc(__hdl, __node, __type); \ 56 for (__arc = mdesc_next_arc(__hdl, __node, __type); \
57 (__arc) != MDESC_NODE_NULL; \ 57 (__arc) != MDESC_NODE_NULL; \
58 __arc = mdesc_next_arc(__hdl, __arc, __type)) 58 __arc = mdesc_next_arc(__hdl, __arc, __type))
59 59
60extern u64 mdesc_arc_target(struct mdesc_handle *hp, u64 arc); 60u64 mdesc_arc_target(struct mdesc_handle *hp, u64 arc);
61 61
62extern void mdesc_update(void); 62void mdesc_update(void);
63 63
64struct mdesc_notifier_client { 64struct mdesc_notifier_client {
65 void (*add)(struct mdesc_handle *handle, u64 node); 65 void (*add)(struct mdesc_handle *handle, u64 node);
@@ -69,12 +69,12 @@ struct mdesc_notifier_client {
69 struct mdesc_notifier_client *next; 69 struct mdesc_notifier_client *next;
70}; 70};
71 71
72extern void mdesc_register_notifier(struct mdesc_notifier_client *client); 72void mdesc_register_notifier(struct mdesc_notifier_client *client);
73 73
74extern void mdesc_fill_in_cpu_data(cpumask_t *mask); 74void mdesc_fill_in_cpu_data(cpumask_t *mask);
75extern void mdesc_populate_present_mask(cpumask_t *mask); 75void mdesc_populate_present_mask(cpumask_t *mask);
76extern void mdesc_get_page_sizes(cpumask_t *mask, unsigned long *pgsz_mask); 76void mdesc_get_page_sizes(cpumask_t *mask, unsigned long *pgsz_mask);
77 77
78extern void sun4v_mdesc_init(void); 78void sun4v_mdesc_init(void);
79 79
80#endif 80#endif
diff --git a/arch/sparc/include/asm/mmu_64.h b/arch/sparc/include/asm/mmu_64.h
index f668797ae234..70067ce184b1 100644
--- a/arch/sparc/include/asm/mmu_64.h
+++ b/arch/sparc/include/asm/mmu_64.h
@@ -67,9 +67,9 @@ struct tsb {
67 unsigned long pte; 67 unsigned long pte;
68} __attribute__((aligned(TSB_ENTRY_ALIGNMENT))); 68} __attribute__((aligned(TSB_ENTRY_ALIGNMENT)));
69 69
70extern void __tsb_insert(unsigned long ent, unsigned long tag, unsigned long pte); 70void __tsb_insert(unsigned long ent, unsigned long tag, unsigned long pte);
71extern void tsb_flush(unsigned long ent, unsigned long tag); 71void tsb_flush(unsigned long ent, unsigned long tag);
72extern void tsb_init(struct tsb *tsb, unsigned long size); 72void tsb_init(struct tsb *tsb, unsigned long size);
73 73
74struct tsb_config { 74struct tsb_config {
75 struct tsb *tsb; 75 struct tsb *tsb;
diff --git a/arch/sparc/include/asm/mmu_context_64.h b/arch/sparc/include/asm/mmu_context_64.h
index 3d528f06e4b0..b84be675e507 100644
--- a/arch/sparc/include/asm/mmu_context_64.h
+++ b/arch/sparc/include/asm/mmu_context_64.h
@@ -17,20 +17,20 @@ extern spinlock_t ctx_alloc_lock;
17extern unsigned long tlb_context_cache; 17extern unsigned long tlb_context_cache;
18extern unsigned long mmu_context_bmap[]; 18extern unsigned long mmu_context_bmap[];
19 19
20extern void get_new_mmu_context(struct mm_struct *mm); 20void get_new_mmu_context(struct mm_struct *mm);
21#ifdef CONFIG_SMP 21#ifdef CONFIG_SMP
22extern void smp_new_mmu_context_version(void); 22void smp_new_mmu_context_version(void);
23#else 23#else
24#define smp_new_mmu_context_version() do { } while (0) 24#define smp_new_mmu_context_version() do { } while (0)
25#endif 25#endif
26 26
27extern int init_new_context(struct task_struct *tsk, struct mm_struct *mm); 27int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
28extern void destroy_context(struct mm_struct *mm); 28void destroy_context(struct mm_struct *mm);
29 29
30extern void __tsb_context_switch(unsigned long pgd_pa, 30void __tsb_context_switch(unsigned long pgd_pa,
31 struct tsb_config *tsb_base, 31 struct tsb_config *tsb_base,
32 struct tsb_config *tsb_huge, 32 struct tsb_config *tsb_huge,
33 unsigned long tsb_descr_pa); 33 unsigned long tsb_descr_pa);
34 34
35static inline void tsb_context_switch(struct mm_struct *mm) 35static inline void tsb_context_switch(struct mm_struct *mm)
36{ 36{
@@ -46,9 +46,11 @@ static inline void tsb_context_switch(struct mm_struct *mm)
46 , __pa(&mm->context.tsb_descr[0])); 46 , __pa(&mm->context.tsb_descr[0]));
47} 47}
48 48
49extern void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long mm_rss); 49void tsb_grow(struct mm_struct *mm,
50 unsigned long tsb_index,
51 unsigned long mm_rss);
50#ifdef CONFIG_SMP 52#ifdef CONFIG_SMP
51extern void smp_tsb_sync(struct mm_struct *mm); 53void smp_tsb_sync(struct mm_struct *mm);
52#else 54#else
53#define smp_tsb_sync(__mm) do { } while (0) 55#define smp_tsb_sync(__mm) do { } while (0)
54#endif 56#endif
@@ -66,7 +68,7 @@ extern void smp_tsb_sync(struct mm_struct *mm);
66 : "r" (CTX_HWBITS((__mm)->context)), \ 68 : "r" (CTX_HWBITS((__mm)->context)), \
67 "r" (SECONDARY_CONTEXT), "i" (ASI_DMMU), "i" (ASI_MMU)) 69 "r" (SECONDARY_CONTEXT), "i" (ASI_DMMU), "i" (ASI_MMU))
68 70
69extern void __flush_tlb_mm(unsigned long, unsigned long); 71void __flush_tlb_mm(unsigned long, unsigned long);
70 72
71/* Switch the current MM context. */ 73/* Switch the current MM context. */
72static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, struct task_struct *tsk) 74static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, struct task_struct *tsk)
diff --git a/arch/sparc/include/asm/nmi.h b/arch/sparc/include/asm/nmi.h
index 72e6500e7ab0..26ad2b2607c6 100644
--- a/arch/sparc/include/asm/nmi.h
+++ b/arch/sparc/include/asm/nmi.h
@@ -1,13 +1,13 @@
1#ifndef __NMI_H 1#ifndef __NMI_H
2#define __NMI_H 2#define __NMI_H
3 3
4extern int __init nmi_init(void); 4int __init nmi_init(void);
5extern void perfctr_irq(int irq, struct pt_regs *regs); 5void perfctr_irq(int irq, struct pt_regs *regs);
6extern void nmi_adjust_hz(unsigned int new_hz); 6void nmi_adjust_hz(unsigned int new_hz);
7 7
8extern atomic_t nmi_active; 8extern atomic_t nmi_active;
9 9
10extern void start_nmi_watchdog(void *unused); 10void start_nmi_watchdog(void *unused);
11extern void stop_nmi_watchdog(void *unused); 11void stop_nmi_watchdog(void *unused);
12 12
13#endif /* __NMI_H */ 13#endif /* __NMI_H */
diff --git a/arch/sparc/include/asm/oplib_32.h b/arch/sparc/include/asm/oplib_32.h
index c72f3045820c..56a09b9d7b1b 100644
--- a/arch/sparc/include/asm/oplib_32.h
+++ b/arch/sparc/include/asm/oplib_32.h
@@ -43,28 +43,28 @@ extern struct linux_nodeops *prom_nodeops;
43/* You must call prom_init() before using any of the library services, 43/* You must call prom_init() before using any of the library services,
44 * preferably as early as possible. Pass it the romvec pointer. 44 * preferably as early as possible. Pass it the romvec pointer.
45 */ 45 */
46extern void prom_init(struct linux_romvec *rom_ptr); 46void prom_init(struct linux_romvec *rom_ptr);
47 47
48/* Boot argument acquisition, returns the boot command line string. */ 48/* Boot argument acquisition, returns the boot command line string. */
49extern char *prom_getbootargs(void); 49char *prom_getbootargs(void);
50 50
51/* Miscellaneous routines, don't really fit in any category per se. */ 51/* Miscellaneous routines, don't really fit in any category per se. */
52 52
53/* Reboot the machine with the command line passed. */ 53/* Reboot the machine with the command line passed. */
54extern void prom_reboot(char *boot_command); 54void prom_reboot(char *boot_command);
55 55
56/* Evaluate the forth string passed. */ 56/* Evaluate the forth string passed. */
57extern void prom_feval(char *forth_string); 57void prom_feval(char *forth_string);
58 58
59/* Enter the prom, with possibility of continuation with the 'go' 59/* Enter the prom, with possibility of continuation with the 'go'
60 * command in newer proms. 60 * command in newer proms.
61 */ 61 */
62extern void prom_cmdline(void); 62void prom_cmdline(void);
63 63
64/* Enter the prom, with no chance of continuation for the stand-alone 64/* Enter the prom, with no chance of continuation for the stand-alone
65 * which calls this. 65 * which calls this.
66 */ 66 */
67extern void __noreturn prom_halt(void); 67void __noreturn prom_halt(void);
68 68
69/* Set the PROM 'sync' callback function to the passed function pointer. 69/* Set the PROM 'sync' callback function to the passed function pointer.
70 * When the user gives the 'sync' command at the prom prompt while the 70 * When the user gives the 'sync' command at the prom prompt while the
@@ -73,37 +73,37 @@ extern void __noreturn prom_halt(void);
73 * XXX The arguments are different on V0 vs. V2->higher proms, grrr! XXX 73 * XXX The arguments are different on V0 vs. V2->higher proms, grrr! XXX
74 */ 74 */
75typedef void (*sync_func_t)(void); 75typedef void (*sync_func_t)(void);
76extern void prom_setsync(sync_func_t func_ptr); 76void prom_setsync(sync_func_t func_ptr);
77 77
78/* Acquire the IDPROM of the root node in the prom device tree. This 78/* Acquire the IDPROM of the root node in the prom device tree. This
79 * gets passed a buffer where you would like it stuffed. The return value 79 * gets passed a buffer where you would like it stuffed. The return value
80 * is the format type of this idprom or 0xff on error. 80 * is the format type of this idprom or 0xff on error.
81 */ 81 */
82extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size); 82unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
83 83
84/* Get the prom major version. */ 84/* Get the prom major version. */
85extern int prom_version(void); 85int prom_version(void);
86 86
87/* Get the prom plugin revision. */ 87/* Get the prom plugin revision. */
88extern int prom_getrev(void); 88int prom_getrev(void);
89 89
90/* Get the prom firmware revision. */ 90/* Get the prom firmware revision. */
91extern int prom_getprev(void); 91int prom_getprev(void);
92 92
93/* Write a buffer of characters to the console. */ 93/* Write a buffer of characters to the console. */
94extern void prom_console_write_buf(const char *buf, int len); 94void prom_console_write_buf(const char *buf, int len);
95 95
96/* Prom's internal routines, don't use in kernel/boot code. */ 96/* Prom's internal routines, don't use in kernel/boot code. */
97extern __printf(1, 2) void prom_printf(const char *fmt, ...); 97__printf(1, 2) void prom_printf(const char *fmt, ...);
98extern void prom_write(const char *buf, unsigned int len); 98void prom_write(const char *buf, unsigned int len);
99 99
100/* Multiprocessor operations... */ 100/* Multiprocessor operations... */
101 101
102/* Start the CPU with the given device tree node, context table, and context 102/* Start the CPU with the given device tree node, context table, and context
103 * at the passed program counter. 103 * at the passed program counter.
104 */ 104 */
105extern int prom_startcpu(int cpunode, struct linux_prom_registers *context_table, 105int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
106 int context, char *program_counter); 106 int context, char *program_counter);
107 107
108/* Initialize the memory lists based upon the prom version. */ 108/* Initialize the memory lists based upon the prom version. */
109void prom_meminit(void); 109void prom_meminit(void);
@@ -111,65 +111,65 @@ void prom_meminit(void);
111/* PROM device tree traversal functions... */ 111/* PROM device tree traversal functions... */
112 112
113/* Get the child node of the given node, or zero if no child exists. */ 113/* Get the child node of the given node, or zero if no child exists. */
114extern phandle prom_getchild(phandle parent_node); 114phandle prom_getchild(phandle parent_node);
115 115
116/* Get the next sibling node of the given node, or zero if no further 116/* Get the next sibling node of the given node, or zero if no further
117 * siblings exist. 117 * siblings exist.
118 */ 118 */
119extern phandle prom_getsibling(phandle node); 119phandle prom_getsibling(phandle node);
120 120
121/* Get the length, at the passed node, of the given property type. 121/* Get the length, at the passed node, of the given property type.
122 * Returns -1 on error (ie. no such property at this node). 122 * Returns -1 on error (ie. no such property at this node).
123 */ 123 */
124extern int prom_getproplen(phandle thisnode, const char *property); 124int prom_getproplen(phandle thisnode, const char *property);
125 125
126/* Fetch the requested property using the given buffer. Returns 126/* Fetch the requested property using the given buffer. Returns
127 * the number of bytes the prom put into your buffer or -1 on error. 127 * the number of bytes the prom put into your buffer or -1 on error.
128 */ 128 */
129extern int __must_check prom_getproperty(phandle thisnode, const char *property, 129int __must_check prom_getproperty(phandle thisnode, const char *property,
130 char *prop_buffer, int propbuf_size); 130 char *prop_buffer, int propbuf_size);
131 131
132/* Acquire an integer property. */ 132/* Acquire an integer property. */
133extern int prom_getint(phandle node, char *property); 133int prom_getint(phandle node, char *property);
134 134
135/* Acquire an integer property, with a default value. */ 135/* Acquire an integer property, with a default value. */
136extern int prom_getintdefault(phandle node, char *property, int defval); 136int prom_getintdefault(phandle node, char *property, int defval);
137 137
138/* Acquire a boolean property, 0=FALSE 1=TRUE. */ 138/* Acquire a boolean property, 0=FALSE 1=TRUE. */
139extern int prom_getbool(phandle node, char *prop); 139int prom_getbool(phandle node, char *prop);
140 140
141/* Acquire a string property, null string on error. */ 141/* Acquire a string property, null string on error. */
142extern void prom_getstring(phandle node, char *prop, char *buf, int bufsize); 142void prom_getstring(phandle node, char *prop, char *buf, int bufsize);
143 143
144/* Search all siblings starting at the passed node for "name" matching 144/* Search all siblings starting at the passed node for "name" matching
145 * the given string. Returns the node on success, zero on failure. 145 * the given string. Returns the node on success, zero on failure.
146 */ 146 */
147extern phandle prom_searchsiblings(phandle node_start, char *name); 147phandle prom_searchsiblings(phandle node_start, char *name);
148 148
149/* Returns the next property after the passed property for the given 149/* Returns the next property after the passed property for the given
150 * node. Returns null string on failure. 150 * node. Returns null string on failure.
151 */ 151 */
152extern char *prom_nextprop(phandle node, char *prev_property, char *buffer); 152char *prom_nextprop(phandle node, char *prev_property, char *buffer);
153 153
154/* Returns phandle of the path specified */ 154/* Returns phandle of the path specified */
155extern phandle prom_finddevice(char *name); 155phandle prom_finddevice(char *name);
156 156
157/* Set the indicated property at the given node with the passed value. 157/* Set the indicated property at the given node with the passed value.
158 * Returns the number of bytes of your value that the prom took. 158 * Returns the number of bytes of your value that the prom took.
159 */ 159 */
160extern int prom_setprop(phandle node, const char *prop_name, char *prop_value, 160int prom_setprop(phandle node, const char *prop_name, char *prop_value,
161 int value_size); 161 int value_size);
162 162
163extern phandle prom_inst2pkg(int); 163phandle prom_inst2pkg(int);
164 164
165/* Dorking with Bus ranges... */ 165/* Dorking with Bus ranges... */
166 166
167/* Apply promlib probes OBIO ranges to registers. */ 167/* Apply promlib probes OBIO ranges to registers. */
168extern void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs); 168void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
169 169
170/* Apply ranges of any prom node (and optionally parent node as well) to registers. */ 170/* Apply ranges of any prom node (and optionally parent node as well) to registers. */
171extern void prom_apply_generic_ranges(phandle node, phandle parent, 171void prom_apply_generic_ranges(phandle node, phandle parent,
172 struct linux_prom_registers *sbusregs, int nregs); 172 struct linux_prom_registers *sbusregs, int nregs);
173 173
174void prom_ranges_init(void); 174void prom_ranges_init(void);
175 175
diff --git a/arch/sparc/include/asm/oplib_64.h b/arch/sparc/include/asm/oplib_64.h
index a12dbe3b7762..f34682430fcf 100644
--- a/arch/sparc/include/asm/oplib_64.h
+++ b/arch/sparc/include/asm/oplib_64.h
@@ -62,100 +62,100 @@ struct linux_mem_p1275 {
62/* You must call prom_init() before using any of the library services, 62/* You must call prom_init() before using any of the library services,
63 * preferably as early as possible. Pass it the romvec pointer. 63 * preferably as early as possible. Pass it the romvec pointer.
64 */ 64 */
65extern void prom_init(void *cif_handler, void *cif_stack); 65void prom_init(void *cif_handler, void *cif_stack);
66 66
67/* Boot argument acquisition, returns the boot command line string. */ 67/* Boot argument acquisition, returns the boot command line string. */
68extern char *prom_getbootargs(void); 68char *prom_getbootargs(void);
69 69
70/* Miscellaneous routines, don't really fit in any category per se. */ 70/* Miscellaneous routines, don't really fit in any category per se. */
71 71
72/* Reboot the machine with the command line passed. */ 72/* Reboot the machine with the command line passed. */
73extern void prom_reboot(const char *boot_command); 73void prom_reboot(const char *boot_command);
74 74
75/* Evaluate the forth string passed. */ 75/* Evaluate the forth string passed. */
76extern void prom_feval(const char *forth_string); 76void prom_feval(const char *forth_string);
77 77
78/* Enter the prom, with possibility of continuation with the 'go' 78/* Enter the prom, with possibility of continuation with the 'go'
79 * command in newer proms. 79 * command in newer proms.
80 */ 80 */
81extern void prom_cmdline(void); 81void prom_cmdline(void);
82 82
83/* Enter the prom, with no chance of continuation for the stand-alone 83/* Enter the prom, with no chance of continuation for the stand-alone
84 * which calls this. 84 * which calls this.
85 */ 85 */
86extern void prom_halt(void) __attribute__ ((noreturn)); 86void prom_halt(void) __attribute__ ((noreturn));
87 87
88/* Halt and power-off the machine. */ 88/* Halt and power-off the machine. */
89extern void prom_halt_power_off(void) __attribute__ ((noreturn)); 89void prom_halt_power_off(void) __attribute__ ((noreturn));
90 90
91/* Acquire the IDPROM of the root node in the prom device tree. This 91/* Acquire the IDPROM of the root node in the prom device tree. This
92 * gets passed a buffer where you would like it stuffed. The return value 92 * gets passed a buffer where you would like it stuffed. The return value
93 * is the format type of this idprom or 0xff on error. 93 * is the format type of this idprom or 0xff on error.
94 */ 94 */
95extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size); 95unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
96 96
97/* Write a buffer of characters to the console. */ 97/* Write a buffer of characters to the console. */
98extern void prom_console_write_buf(const char *buf, int len); 98void prom_console_write_buf(const char *buf, int len);
99 99
100/* Prom's internal routines, don't use in kernel/boot code. */ 100/* Prom's internal routines, don't use in kernel/boot code. */
101extern __printf(1, 2) void prom_printf(const char *fmt, ...); 101__printf(1, 2) void prom_printf(const char *fmt, ...);
102extern void prom_write(const char *buf, unsigned int len); 102void prom_write(const char *buf, unsigned int len);
103 103
104/* Multiprocessor operations... */ 104/* Multiprocessor operations... */
105#ifdef CONFIG_SMP 105#ifdef CONFIG_SMP
106/* Start the CPU with the given device tree node at the passed program 106/* Start the CPU with the given device tree node at the passed program
107 * counter with the given arg passed in via register %o0. 107 * counter with the given arg passed in via register %o0.
108 */ 108 */
109extern void prom_startcpu(int cpunode, unsigned long pc, unsigned long arg); 109void prom_startcpu(int cpunode, unsigned long pc, unsigned long arg);
110 110
111/* Start the CPU with the given cpu ID at the passed program 111/* Start the CPU with the given cpu ID at the passed program
112 * counter with the given arg passed in via register %o0. 112 * counter with the given arg passed in via register %o0.
113 */ 113 */
114extern void prom_startcpu_cpuid(int cpuid, unsigned long pc, unsigned long arg); 114void prom_startcpu_cpuid(int cpuid, unsigned long pc, unsigned long arg);
115 115
116/* Stop the CPU with the given cpu ID. */ 116/* Stop the CPU with the given cpu ID. */
117extern void prom_stopcpu_cpuid(int cpuid); 117void prom_stopcpu_cpuid(int cpuid);
118 118
119/* Stop the current CPU. */ 119/* Stop the current CPU. */
120extern void prom_stopself(void); 120void prom_stopself(void);
121 121
122/* Idle the current CPU. */ 122/* Idle the current CPU. */
123extern void prom_idleself(void); 123void prom_idleself(void);
124 124
125/* Resume the CPU with the passed device tree node. */ 125/* Resume the CPU with the passed device tree node. */
126extern void prom_resumecpu(int cpunode); 126void prom_resumecpu(int cpunode);
127#endif 127#endif
128 128
129/* Power management interfaces. */ 129/* Power management interfaces. */
130 130
131/* Put the current CPU to sleep. */ 131/* Put the current CPU to sleep. */
132extern void prom_sleepself(void); 132void prom_sleepself(void);
133 133
134/* Put the entire system to sleep. */ 134/* Put the entire system to sleep. */
135extern int prom_sleepsystem(void); 135int prom_sleepsystem(void);
136 136
137/* Initiate a wakeup event. */ 137/* Initiate a wakeup event. */
138extern int prom_wakeupsystem(void); 138int prom_wakeupsystem(void);
139 139
140/* MMU and memory related OBP interfaces. */ 140/* MMU and memory related OBP interfaces. */
141 141
142/* Get unique string identifying SIMM at given physical address. */ 142/* Get unique string identifying SIMM at given physical address. */
143extern int prom_getunumber(int syndrome_code, 143int prom_getunumber(int syndrome_code,
144 unsigned long phys_addr, 144 unsigned long phys_addr,
145 char *buf, int buflen); 145 char *buf, int buflen);
146 146
147/* Retain physical memory to the caller across soft resets. */ 147/* Retain physical memory to the caller across soft resets. */
148extern int prom_retain(const char *name, unsigned long size, 148int prom_retain(const char *name, unsigned long size,
149 unsigned long align, unsigned long *paddr); 149 unsigned long align, unsigned long *paddr);
150 150
151/* Load explicit I/D TLB entries into the calling processor. */ 151/* Load explicit I/D TLB entries into the calling processor. */
152extern long prom_itlb_load(unsigned long index, 152long prom_itlb_load(unsigned long index,
153 unsigned long tte_data, 153 unsigned long tte_data,
154 unsigned long vaddr); 154 unsigned long vaddr);
155 155
156extern long prom_dtlb_load(unsigned long index, 156long prom_dtlb_load(unsigned long index,
157 unsigned long tte_data, 157 unsigned long tte_data,
158 unsigned long vaddr); 158 unsigned long vaddr);
159 159
160/* Map/Unmap client program address ranges. First the format of 160/* Map/Unmap client program address ranges. First the format of
161 * the mapping mode argument. 161 * the mapping mode argument.
@@ -170,81 +170,81 @@ extern long prom_dtlb_load(unsigned long index,
170#define PROM_MAP_IE 0x0100 /* Invert-Endianness */ 170#define PROM_MAP_IE 0x0100 /* Invert-Endianness */
171#define PROM_MAP_DEFAULT (PROM_MAP_WRITE | PROM_MAP_READ | PROM_MAP_EXEC | PROM_MAP_CACHED) 171#define PROM_MAP_DEFAULT (PROM_MAP_WRITE | PROM_MAP_READ | PROM_MAP_EXEC | PROM_MAP_CACHED)
172 172
173extern int prom_map(int mode, unsigned long size, 173int prom_map(int mode, unsigned long size,
174 unsigned long vaddr, unsigned long paddr); 174 unsigned long vaddr, unsigned long paddr);
175extern void prom_unmap(unsigned long size, unsigned long vaddr); 175void prom_unmap(unsigned long size, unsigned long vaddr);
176 176
177 177
178/* PROM device tree traversal functions... */ 178/* PROM device tree traversal functions... */
179 179
180/* Get the child node of the given node, or zero if no child exists. */ 180/* Get the child node of the given node, or zero if no child exists. */
181extern phandle prom_getchild(phandle parent_node); 181phandle prom_getchild(phandle parent_node);
182 182
183/* Get the next sibling node of the given node, or zero if no further 183/* Get the next sibling node of the given node, or zero if no further
184 * siblings exist. 184 * siblings exist.
185 */ 185 */
186extern phandle prom_getsibling(phandle node); 186phandle prom_getsibling(phandle node);
187 187
188/* Get the length, at the passed node, of the given property type. 188/* Get the length, at the passed node, of the given property type.
189 * Returns -1 on error (ie. no such property at this node). 189 * Returns -1 on error (ie. no such property at this node).
190 */ 190 */
191extern int prom_getproplen(phandle thisnode, const char *property); 191int prom_getproplen(phandle thisnode, const char *property);
192 192
193/* Fetch the requested property using the given buffer. Returns 193/* Fetch the requested property using the given buffer. Returns
194 * the number of bytes the prom put into your buffer or -1 on error. 194 * the number of bytes the prom put into your buffer or -1 on error.
195 */ 195 */
196extern int prom_getproperty(phandle thisnode, const char *property, 196int prom_getproperty(phandle thisnode, const char *property,
197 char *prop_buffer, int propbuf_size); 197 char *prop_buffer, int propbuf_size);
198 198
199/* Acquire an integer property. */ 199/* Acquire an integer property. */
200extern int prom_getint(phandle node, const char *property); 200int prom_getint(phandle node, const char *property);
201 201
202/* Acquire an integer property, with a default value. */ 202/* Acquire an integer property, with a default value. */
203extern int prom_getintdefault(phandle node, const char *property, int defval); 203int prom_getintdefault(phandle node, const char *property, int defval);
204 204
205/* Acquire a boolean property, 0=FALSE 1=TRUE. */ 205/* Acquire a boolean property, 0=FALSE 1=TRUE. */
206extern int prom_getbool(phandle node, const char *prop); 206int prom_getbool(phandle node, const char *prop);
207 207
208/* Acquire a string property, null string on error. */ 208/* Acquire a string property, null string on error. */
209extern void prom_getstring(phandle node, const char *prop, char *buf, 209void prom_getstring(phandle node, const char *prop, char *buf,
210 int bufsize); 210 int bufsize);
211 211
212/* Does the passed node have the given "name"? YES=1 NO=0 */ 212/* Does the passed node have the given "name"? YES=1 NO=0 */
213extern int prom_nodematch(phandle thisnode, const char *name); 213int prom_nodematch(phandle thisnode, const char *name);
214 214
215/* Search all siblings starting at the passed node for "name" matching 215/* Search all siblings starting at the passed node for "name" matching
216 * the given string. Returns the node on success, zero on failure. 216 * the given string. Returns the node on success, zero on failure.
217 */ 217 */
218extern phandle prom_searchsiblings(phandle node_start, const char *name); 218phandle prom_searchsiblings(phandle node_start, const char *name);
219 219
220/* Return the first property type, as a string, for the given node. 220/* Return the first property type, as a string, for the given node.
221 * Returns a null string on error. Buffer should be at least 32B long. 221 * Returns a null string on error. Buffer should be at least 32B long.
222 */ 222 */
223extern char *prom_firstprop(phandle node, char *buffer); 223char *prom_firstprop(phandle node, char *buffer);
224 224
225/* Returns the next property after the passed property for the given 225/* Returns the next property after the passed property for the given
226 * node. Returns null string on failure. Buffer should be at least 32B long. 226 * node. Returns null string on failure. Buffer should be at least 32B long.
227 */ 227 */
228extern char *prom_nextprop(phandle node, const char *prev_property, char *buf); 228char *prom_nextprop(phandle node, const char *prev_property, char *buf);
229 229
230/* Returns 1 if the specified node has given property. */ 230/* Returns 1 if the specified node has given property. */
231extern int prom_node_has_property(phandle node, const char *property); 231int prom_node_has_property(phandle node, const char *property);
232 232
233/* Returns phandle of the path specified */ 233/* Returns phandle of the path specified */
234extern phandle prom_finddevice(const char *name); 234phandle prom_finddevice(const char *name);
235 235
236/* Set the indicated property at the given node with the passed value. 236/* Set the indicated property at the given node with the passed value.
237 * Returns the number of bytes of your value that the prom took. 237 * Returns the number of bytes of your value that the prom took.
238 */ 238 */
239extern int prom_setprop(phandle node, const char *prop_name, char *prop_value, 239int prom_setprop(phandle node, const char *prop_name, char *prop_value,
240 int value_size); 240 int value_size);
241 241
242extern phandle prom_inst2pkg(int); 242phandle prom_inst2pkg(int);
243extern void prom_sun4v_guest_soft_state(void); 243void prom_sun4v_guest_soft_state(void);
244 244
245extern int prom_ihandle2path(int handle, char *buffer, int bufsize); 245int prom_ihandle2path(int handle, char *buffer, int bufsize);
246 246
247/* Client interface level routines. */ 247/* Client interface level routines. */
248extern void p1275_cmd_direct(unsigned long *); 248void p1275_cmd_direct(unsigned long *);
249 249
250#endif /* !(__SPARC64_OPLIB_H) */ 250#endif /* !(__SPARC64_OPLIB_H) */
diff --git a/arch/sparc/include/asm/page.h b/arch/sparc/include/asm/page.h
index f21de0349025..1be2fdec6268 100644
--- a/arch/sparc/include/asm/page.h
+++ b/arch/sparc/include/asm/page.h
@@ -1,5 +1,8 @@
1#ifndef ___ASM_SPARC_PAGE_H 1#ifndef ___ASM_SPARC_PAGE_H
2#define ___ASM_SPARC_PAGE_H 2#define ___ASM_SPARC_PAGE_H
3
4#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
5
3#if defined(__sparc__) && defined(__arch64__) 6#if defined(__sparc__) && defined(__arch64__)
4#include <asm/page_64.h> 7#include <asm/page_64.h>
5#else 8#else
diff --git a/arch/sparc/include/asm/page_64.h b/arch/sparc/include/asm/page_64.h
index aac53fcea807..bf109984a032 100644
--- a/arch/sparc/include/asm/page_64.h
+++ b/arch/sparc/include/asm/page_64.h
@@ -31,17 +31,17 @@
31 31
32#if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) 32#if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
33struct pt_regs; 33struct pt_regs;
34extern void hugetlb_setup(struct pt_regs *regs); 34void hugetlb_setup(struct pt_regs *regs);
35#endif 35#endif
36 36
37#define WANT_PAGE_VIRTUAL 37#define WANT_PAGE_VIRTUAL
38 38
39extern void _clear_page(void *page); 39void _clear_page(void *page);
40#define clear_page(X) _clear_page((void *)(X)) 40#define clear_page(X) _clear_page((void *)(X))
41struct page; 41struct page;
42extern void clear_user_page(void *addr, unsigned long vaddr, struct page *page); 42void clear_user_page(void *addr, unsigned long vaddr, struct page *page);
43#define copy_page(X,Y) memcpy((void *)(X), (void *)(Y), PAGE_SIZE) 43#define copy_page(X,Y) memcpy((void *)(X), (void *)(Y), PAGE_SIZE)
44extern void copy_user_page(void *to, void *from, unsigned long vaddr, struct page *topage); 44void copy_user_page(void *to, void *from, unsigned long vaddr, struct page *topage);
45 45
46/* Unlike sparc32, sparc64's parameter passing API is more 46/* Unlike sparc32, sparc64's parameter passing API is more
47 * sane in that structures which as small enough are passed 47 * sane in that structures which as small enough are passed
diff --git a/arch/sparc/include/asm/pci_64.h b/arch/sparc/include/asm/pci_64.h
index c6c7396e7627..bd00a6226169 100644
--- a/arch/sparc/include/asm/pci_64.h
+++ b/arch/sparc/include/asm/pci_64.h
@@ -52,7 +52,7 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,
52 52
53/* Return the index of the PCI controller for device PDEV. */ 53/* Return the index of the PCI controller for device PDEV. */
54 54
55extern int pci_domain_nr(struct pci_bus *bus); 55int pci_domain_nr(struct pci_bus *bus);
56static inline int pci_proc_domain(struct pci_bus *bus) 56static inline int pci_proc_domain(struct pci_bus *bus)
57{ 57{
58 return 1; 58 return 1;
@@ -64,9 +64,9 @@ static inline int pci_proc_domain(struct pci_bus *bus)
64#define HAVE_ARCH_PCI_GET_UNMAPPED_AREA 64#define HAVE_ARCH_PCI_GET_UNMAPPED_AREA
65#define get_pci_unmapped_area get_fb_unmapped_area 65#define get_pci_unmapped_area get_fb_unmapped_area
66 66
67extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, 67int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
68 enum pci_mmap_state mmap_state, 68 enum pci_mmap_state mmap_state,
69 int write_combine); 69 int write_combine);
70 70
71static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) 71static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
72{ 72{
@@ -74,9 +74,9 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
74} 74}
75 75
76#define HAVE_ARCH_PCI_RESOURCE_TO_USER 76#define HAVE_ARCH_PCI_RESOURCE_TO_USER
77extern void pci_resource_to_user(const struct pci_dev *dev, int bar, 77void pci_resource_to_user(const struct pci_dev *dev, int bar,
78 const struct resource *rsrc, 78 const struct resource *rsrc,
79 resource_size_t *start, resource_size_t *end); 79 resource_size_t *start, resource_size_t *end);
80#endif /* __KERNEL__ */ 80#endif /* __KERNEL__ */
81 81
82#endif /* __SPARC64_PCI_H */ 82#endif /* __SPARC64_PCI_H */
diff --git a/arch/sparc/include/asm/pcic.h b/arch/sparc/include/asm/pcic.h
index 6676cbcc8b6a..f41706792592 100644
--- a/arch/sparc/include/asm/pcic.h
+++ b/arch/sparc/include/asm/pcic.h
@@ -30,10 +30,10 @@ struct linux_pcic {
30}; 30};
31 31
32#ifdef CONFIG_PCIC_PCI 32#ifdef CONFIG_PCIC_PCI
33extern int pcic_present(void); 33int pcic_present(void);
34extern int pcic_probe(void); 34int pcic_probe(void);
35extern void pci_time_init(void); 35void pci_time_init(void);
36extern void sun4m_pci_init_IRQ(void); 36void sun4m_pci_init_IRQ(void);
37#else 37#else
38static inline int pcic_present(void) { return 0; } 38static inline int pcic_present(void) { return 0; }
39static inline int pcic_probe(void) { return 0; } 39static inline int pcic_probe(void) { return 0; }
diff --git a/arch/sparc/include/asm/pcr.h b/arch/sparc/include/asm/pcr.h
index 942bb17f60cd..cdf800c3326c 100644
--- a/arch/sparc/include/asm/pcr.h
+++ b/arch/sparc/include/asm/pcr.h
@@ -12,8 +12,8 @@ struct pcr_ops {
12}; 12};
13extern const struct pcr_ops *pcr_ops; 13extern const struct pcr_ops *pcr_ops;
14 14
15extern void deferred_pcr_work_irq(int irq, struct pt_regs *regs); 15void deferred_pcr_work_irq(int irq, struct pt_regs *regs);
16extern void schedule_deferred_pcr_work(void); 16void schedule_deferred_pcr_work(void);
17 17
18#define PCR_PIC_PRIV 0x00000001 /* PIC access is privileged */ 18#define PCR_PIC_PRIV 0x00000001 /* PIC access is privileged */
19#define PCR_STRACE 0x00000002 /* Trace supervisor events */ 19#define PCR_STRACE 0x00000002 /* Trace supervisor events */
@@ -45,6 +45,6 @@ extern void schedule_deferred_pcr_work(void);
45#define PCR_N4_PICNHT 0x00020000 /* PIC non-hypervisor trap */ 45#define PCR_N4_PICNHT 0x00020000 /* PIC non-hypervisor trap */
46#define PCR_N4_NTC 0x00040000 /* Next-To-Commit wrap */ 46#define PCR_N4_NTC 0x00040000 /* Next-To-Commit wrap */
47 47
48extern int pcr_arch_init(void); 48int pcr_arch_init(void);
49 49
50#endif /* __PCR_H */ 50#endif /* __PCR_H */
diff --git a/arch/sparc/include/asm/pgalloc_32.h b/arch/sparc/include/asm/pgalloc_32.h
index 9b1c36de0f18..a3890da94428 100644
--- a/arch/sparc/include/asm/pgalloc_32.h
+++ b/arch/sparc/include/asm/pgalloc_32.h
@@ -14,6 +14,8 @@ struct page;
14void *srmmu_get_nocache(int size, int align); 14void *srmmu_get_nocache(int size, int align);
15void srmmu_free_nocache(void *addr, int size); 15void srmmu_free_nocache(void *addr, int size);
16 16
17extern struct resource sparc_iomap;
18
17#define check_pgt_cache() do { } while (0) 19#define check_pgt_cache() do { } while (0)
18 20
19pgd_t *get_pgd_fast(void); 21pgd_t *get_pgd_fast(void);
diff --git a/arch/sparc/include/asm/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h
index bcfe063bce23..39a7ac49b00c 100644
--- a/arch/sparc/include/asm/pgalloc_64.h
+++ b/arch/sparc/include/asm/pgalloc_64.h
@@ -38,12 +38,12 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
38 kmem_cache_free(pgtable_cache, pmd); 38 kmem_cache_free(pgtable_cache, pmd);
39} 39}
40 40
41extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 41pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
42 unsigned long address); 42 unsigned long address);
43extern pgtable_t pte_alloc_one(struct mm_struct *mm, 43pgtable_t pte_alloc_one(struct mm_struct *mm,
44 unsigned long address); 44 unsigned long address);
45extern void pte_free_kernel(struct mm_struct *mm, pte_t *pte); 45void pte_free_kernel(struct mm_struct *mm, pte_t *pte);
46extern void pte_free(struct mm_struct *mm, pgtable_t ptepage); 46void pte_free(struct mm_struct *mm, pgtable_t ptepage);
47 47
48#define pmd_populate_kernel(MM, PMD, PTE) pmd_set(MM, PMD, PTE) 48#define pmd_populate_kernel(MM, PMD, PTE) pmd_set(MM, PMD, PTE)
49#define pmd_populate(MM, PMD, PTE) pmd_set(MM, PMD, PTE) 49#define pmd_populate(MM, PMD, PTE) pmd_set(MM, PMD, PTE)
@@ -51,12 +51,12 @@ extern void pte_free(struct mm_struct *mm, pgtable_t ptepage);
51 51
52#define check_pgt_cache() do { } while (0) 52#define check_pgt_cache() do { } while (0)
53 53
54extern void pgtable_free(void *table, bool is_page); 54void pgtable_free(void *table, bool is_page);
55 55
56#ifdef CONFIG_SMP 56#ifdef CONFIG_SMP
57 57
58struct mmu_gather; 58struct mmu_gather;
59extern void tlb_remove_table(struct mmu_gather *, void *); 59void tlb_remove_table(struct mmu_gather *, void *);
60 60
61static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, bool is_page) 61static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, bool is_page)
62{ 62{
diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h
index 502f632f6cc7..b9b91ae19fe1 100644
--- a/arch/sparc/include/asm/pgtable_32.h
+++ b/arch/sparc/include/asm/pgtable_32.h
@@ -25,8 +25,9 @@
25struct vm_area_struct; 25struct vm_area_struct;
26struct page; 26struct page;
27 27
28extern void load_mmu(void); 28void load_mmu(void);
29extern unsigned long calc_highpages(void); 29unsigned long calc_highpages(void);
30unsigned long __init bootmem_init(unsigned long *pages_avail);
30 31
31#define pte_ERROR(e) __builtin_trap() 32#define pte_ERROR(e) __builtin_trap()
32#define pmd_ERROR(e) __builtin_trap() 33#define pmd_ERROR(e) __builtin_trap()
@@ -56,7 +57,7 @@ extern unsigned long calc_highpages(void);
56 * srmmu.c will assign the real one (which is dynamically sized) */ 57 * srmmu.c will assign the real one (which is dynamically sized) */
57#define swapper_pg_dir NULL 58#define swapper_pg_dir NULL
58 59
59extern void paging_init(void); 60void paging_init(void);
60 61
61extern unsigned long ptr_in_current_pgd; 62extern unsigned long ptr_in_current_pgd;
62 63
@@ -428,8 +429,8 @@ extern unsigned long *sparc_valid_addr_bitmap;
428#define GET_IOSPACE(pfn) (pfn >> (BITS_PER_LONG - 4)) 429#define GET_IOSPACE(pfn) (pfn >> (BITS_PER_LONG - 4))
429#define GET_PFN(pfn) (pfn & 0x0fffffffUL) 430#define GET_PFN(pfn) (pfn & 0x0fffffffUL)
430 431
431extern int remap_pfn_range(struct vm_area_struct *, unsigned long, unsigned long, 432int remap_pfn_range(struct vm_area_struct *, unsigned long, unsigned long,
432 unsigned long, pgprot_t); 433 unsigned long, pgprot_t);
433 434
434static inline int io_remap_pfn_range(struct vm_area_struct *vma, 435static inline int io_remap_pfn_range(struct vm_area_struct *vma,
435 unsigned long from, unsigned long pfn, 436 unsigned long from, unsigned long pfn,
diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h
index 1a49ffdf9da9..3770bf5c6e1b 100644
--- a/arch/sparc/include/asm/pgtable_64.h
+++ b/arch/sparc/include/asm/pgtable_64.h
@@ -210,9 +210,9 @@ static inline bool kern_addr_valid(unsigned long addr)
210 210
211#ifndef __ASSEMBLY__ 211#ifndef __ASSEMBLY__
212 212
213extern pte_t mk_pte_io(unsigned long, pgprot_t, int, unsigned long); 213pte_t mk_pte_io(unsigned long, pgprot_t, int, unsigned long);
214 214
215extern unsigned long pte_sz_bits(unsigned long size); 215unsigned long pte_sz_bits(unsigned long size);
216 216
217extern pgprot_t PAGE_KERNEL; 217extern pgprot_t PAGE_KERNEL;
218extern pgprot_t PAGE_KERNEL_LOCKED; 218extern pgprot_t PAGE_KERNEL_LOCKED;
@@ -780,8 +780,8 @@ static inline int pmd_present(pmd_t pmd)
780 !__kern_addr_valid(pud_val(pud))) 780 !__kern_addr_valid(pud_val(pud)))
781 781
782#ifdef CONFIG_TRANSPARENT_HUGEPAGE 782#ifdef CONFIG_TRANSPARENT_HUGEPAGE
783extern void set_pmd_at(struct mm_struct *mm, unsigned long addr, 783void set_pmd_at(struct mm_struct *mm, unsigned long addr,
784 pmd_t *pmdp, pmd_t pmd); 784 pmd_t *pmdp, pmd_t pmd);
785#else 785#else
786static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr, 786static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr,
787 pmd_t *pmdp, pmd_t pmd) 787 pmd_t *pmdp, pmd_t pmd)
@@ -840,8 +840,8 @@ static inline unsigned long __pmd_page(pmd_t pmd)
840#define pte_unmap(pte) do { } while (0) 840#define pte_unmap(pte) do { } while (0)
841 841
842/* Actual page table PTE updates. */ 842/* Actual page table PTE updates. */
843extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, 843void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr,
844 pte_t *ptep, pte_t orig, int fullmm); 844 pte_t *ptep, pte_t orig, int fullmm);
845 845
846#define __HAVE_ARCH_PMDP_GET_AND_CLEAR 846#define __HAVE_ARCH_PMDP_GET_AND_CLEAR
847static inline pmd_t pmdp_get_and_clear(struct mm_struct *mm, 847static inline pmd_t pmdp_get_and_clear(struct mm_struct *mm,
@@ -900,28 +900,28 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr,
900extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; 900extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
901extern pmd_t swapper_low_pmd_dir[PTRS_PER_PMD]; 901extern pmd_t swapper_low_pmd_dir[PTRS_PER_PMD];
902 902
903extern void paging_init(void); 903void paging_init(void);
904extern unsigned long find_ecache_flush_span(unsigned long size); 904unsigned long find_ecache_flush_span(unsigned long size);
905 905
906struct seq_file; 906struct seq_file;
907extern void mmu_info(struct seq_file *); 907void mmu_info(struct seq_file *);
908 908
909struct vm_area_struct; 909struct vm_area_struct;
910extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t *); 910void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t *);
911#ifdef CONFIG_TRANSPARENT_HUGEPAGE 911#ifdef CONFIG_TRANSPARENT_HUGEPAGE
912extern void update_mmu_cache_pmd(struct vm_area_struct *vma, unsigned long addr, 912void update_mmu_cache_pmd(struct vm_area_struct *vma, unsigned long addr,
913 pmd_t *pmd); 913 pmd_t *pmd);
914 914
915#define __HAVE_ARCH_PMDP_INVALIDATE 915#define __HAVE_ARCH_PMDP_INVALIDATE
916extern void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address, 916extern void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
917 pmd_t *pmdp); 917 pmd_t *pmdp);
918 918
919#define __HAVE_ARCH_PGTABLE_DEPOSIT 919#define __HAVE_ARCH_PGTABLE_DEPOSIT
920extern void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp, 920void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
921 pgtable_t pgtable); 921 pgtable_t pgtable);
922 922
923#define __HAVE_ARCH_PGTABLE_WITHDRAW 923#define __HAVE_ARCH_PGTABLE_WITHDRAW
924extern pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp); 924pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
925#endif 925#endif
926 926
927/* Encode and de-code a swap entry */ 927/* Encode and de-code a swap entry */
@@ -937,12 +937,12 @@ extern pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
937#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) 937#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
938 938
939/* File offset in PTE support. */ 939/* File offset in PTE support. */
940extern unsigned long pte_file(pte_t); 940unsigned long pte_file(pte_t);
941#define pte_to_pgoff(pte) (pte_val(pte) >> PAGE_SHIFT) 941#define pte_to_pgoff(pte) (pte_val(pte) >> PAGE_SHIFT)
942extern pte_t pgoff_to_pte(unsigned long); 942pte_t pgoff_to_pte(unsigned long);
943#define PTE_FILE_MAX_BITS (64UL - PAGE_SHIFT - 1UL) 943#define PTE_FILE_MAX_BITS (64UL - PAGE_SHIFT - 1UL)
944 944
945extern int page_in_phys_avail(unsigned long paddr); 945int page_in_phys_avail(unsigned long paddr);
946 946
947/* 947/*
948 * For sparc32&64, the pfn in io_remap_pfn_range() carries <iospace> in 948 * For sparc32&64, the pfn in io_remap_pfn_range() carries <iospace> in
@@ -952,8 +952,8 @@ extern int page_in_phys_avail(unsigned long paddr);
952#define GET_IOSPACE(pfn) (pfn >> (BITS_PER_LONG - 4)) 952#define GET_IOSPACE(pfn) (pfn >> (BITS_PER_LONG - 4))
953#define GET_PFN(pfn) (pfn & 0x0fffffffffffffffUL) 953#define GET_PFN(pfn) (pfn & 0x0fffffffffffffffUL)
954 954
955extern int remap_pfn_range(struct vm_area_struct *, unsigned long, unsigned long, 955int remap_pfn_range(struct vm_area_struct *, unsigned long, unsigned long,
956 unsigned long, pgprot_t); 956 unsigned long, pgprot_t);
957 957
958static inline int io_remap_pfn_range(struct vm_area_struct *vma, 958static inline int io_remap_pfn_range(struct vm_area_struct *vma,
959 unsigned long from, unsigned long pfn, 959 unsigned long from, unsigned long pfn,
@@ -981,20 +981,20 @@ static inline int io_remap_pfn_range(struct vm_area_struct *vma,
981/* We provide a special get_unmapped_area for framebuffer mmaps to try and use 981/* We provide a special get_unmapped_area for framebuffer mmaps to try and use
982 * the largest alignment possible such that larget PTEs can be used. 982 * the largest alignment possible such that larget PTEs can be used.
983 */ 983 */
984extern unsigned long get_fb_unmapped_area(struct file *filp, unsigned long, 984unsigned long get_fb_unmapped_area(struct file *filp, unsigned long,
985 unsigned long, unsigned long, 985 unsigned long, unsigned long,
986 unsigned long); 986 unsigned long);
987#define HAVE_ARCH_FB_UNMAPPED_AREA 987#define HAVE_ARCH_FB_UNMAPPED_AREA
988 988
989extern void pgtable_cache_init(void); 989void pgtable_cache_init(void);
990extern void sun4v_register_fault_status(void); 990void sun4v_register_fault_status(void);
991extern void sun4v_ktsb_register(void); 991void sun4v_ktsb_register(void);
992extern void __init cheetah_ecache_flush_init(void); 992void __init cheetah_ecache_flush_init(void);
993extern void sun4v_patch_tlb_handlers(void); 993void sun4v_patch_tlb_handlers(void);
994 994
995extern unsigned long cmdline_memory_size; 995extern unsigned long cmdline_memory_size;
996 996
997extern asmlinkage void do_sparc64_fault(struct pt_regs *regs); 997asmlinkage void do_sparc64_fault(struct pt_regs *regs);
998 998
999#endif /* !(__ASSEMBLY__) */ 999#endif /* !(__ASSEMBLY__) */
1000 1000
diff --git a/arch/sparc/include/asm/processor_32.h b/arch/sparc/include/asm/processor_32.h
index 2c7baa4c4505..a564817bbc2e 100644
--- a/arch/sparc/include/asm/processor_32.h
+++ b/arch/sparc/include/asm/processor_32.h
@@ -74,7 +74,7 @@ struct thread_struct {
74} 74}
75 75
76/* Return saved PC of a blocked thread. */ 76/* Return saved PC of a blocked thread. */
77extern unsigned long thread_saved_pc(struct task_struct *t); 77unsigned long thread_saved_pc(struct task_struct *t);
78 78
79/* Do necessary setup to start up a newly executed thread. */ 79/* Do necessary setup to start up a newly executed thread. */
80static inline void start_thread(struct pt_regs * regs, unsigned long pc, 80static inline void start_thread(struct pt_regs * regs, unsigned long pc,
@@ -107,7 +107,7 @@ static inline void start_thread(struct pt_regs * regs, unsigned long pc,
107/* Free all resources held by a thread. */ 107/* Free all resources held by a thread. */
108#define release_thread(tsk) do { } while(0) 108#define release_thread(tsk) do { } while(0)
109 109
110extern unsigned long get_wchan(struct task_struct *); 110unsigned long get_wchan(struct task_struct *);
111 111
112#define task_pt_regs(tsk) ((tsk)->thread.kregs) 112#define task_pt_regs(tsk) ((tsk)->thread.kregs)
113#define KSTK_EIP(tsk) ((tsk)->thread.kregs->pc) 113#define KSTK_EIP(tsk) ((tsk)->thread.kregs->pc)
@@ -116,6 +116,7 @@ extern unsigned long get_wchan(struct task_struct *);
116#ifdef __KERNEL__ 116#ifdef __KERNEL__
117 117
118extern struct task_struct *last_task_used_math; 118extern struct task_struct *last_task_used_math;
119int do_mathemu(struct pt_regs *regs, struct task_struct *fpt);
119 120
120#define cpu_relax() barrier() 121#define cpu_relax() barrier()
121extern void (*sparc_idle)(void); 122extern void (*sparc_idle)(void);
diff --git a/arch/sparc/include/asm/processor_64.h b/arch/sparc/include/asm/processor_64.h
index 4c3f7f01c709..7028fe1a7c04 100644
--- a/arch/sparc/include/asm/processor_64.h
+++ b/arch/sparc/include/asm/processor_64.h
@@ -95,7 +95,7 @@ struct thread_struct {
95 95
96/* Return saved PC of a blocked thread. */ 96/* Return saved PC of a blocked thread. */
97struct task_struct; 97struct task_struct;
98extern unsigned long thread_saved_pc(struct task_struct *); 98unsigned long thread_saved_pc(struct task_struct *);
99 99
100/* On Uniprocessor, even in RMO processes see TSO semantics */ 100/* On Uniprocessor, even in RMO processes see TSO semantics */
101#ifdef CONFIG_SMP 101#ifdef CONFIG_SMP
@@ -194,7 +194,7 @@ do { \
194/* Free all resources held by a thread. */ 194/* Free all resources held by a thread. */
195#define release_thread(tsk) do { } while (0) 195#define release_thread(tsk) do { } while (0)
196 196
197extern unsigned long get_wchan(struct task_struct *task); 197unsigned long get_wchan(struct task_struct *task);
198 198
199#define task_pt_regs(tsk) (task_thread_info(tsk)->kregs) 199#define task_pt_regs(tsk) (task_thread_info(tsk)->kregs)
200#define KSTK_EIP(tsk) (task_pt_regs(tsk)->tpc) 200#define KSTK_EIP(tsk) (task_pt_regs(tsk)->tpc)
@@ -253,6 +253,8 @@ static inline void prefetchw(const void *x)
253 253
254#define HAVE_ARCH_PICK_MMAP_LAYOUT 254#define HAVE_ARCH_PICK_MMAP_LAYOUT
255 255
256int do_mathemu(struct pt_regs *regs, struct fpustate *f, bool illegal_insn_trap);
257
256#endif /* !(__ASSEMBLY__) */ 258#endif /* !(__ASSEMBLY__) */
257 259
258#endif /* !(__ASM_SPARC64_PROCESSOR_H) */ 260#endif /* !(__ASM_SPARC64_PROCESSOR_H) */
diff --git a/arch/sparc/include/asm/prom.h b/arch/sparc/include/asm/prom.h
index 11ebd659e7b6..d955c8df62d6 100644
--- a/arch/sparc/include/asm/prom.h
+++ b/arch/sparc/include/asm/prom.h
@@ -36,28 +36,28 @@ struct of_irq_controller {
36 void *data; 36 void *data;
37}; 37};
38 38
39extern struct device_node *of_find_node_by_cpuid(int cpuid); 39struct device_node *of_find_node_by_cpuid(int cpuid);
40extern int of_set_property(struct device_node *node, const char *name, void *val, int len); 40int of_set_property(struct device_node *node, const char *name, void *val, int len);
41extern struct mutex of_set_property_mutex; 41extern struct mutex of_set_property_mutex;
42extern int of_getintprop_default(struct device_node *np, 42int of_getintprop_default(struct device_node *np,
43 const char *name, 43 const char *name,
44 int def); 44 int def);
45extern int of_find_in_proplist(const char *list, const char *match, int len); 45int of_find_in_proplist(const char *list, const char *match, int len);
46 46
47extern void prom_build_devicetree(void); 47void prom_build_devicetree(void);
48extern void of_populate_present_mask(void); 48void of_populate_present_mask(void);
49extern void of_fill_in_cpu_data(void); 49void of_fill_in_cpu_data(void);
50 50
51struct resource; 51struct resource;
52extern void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name); 52void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name);
53extern void of_iounmap(struct resource *res, void __iomem *base, unsigned long size); 53void of_iounmap(struct resource *res, void __iomem *base, unsigned long size);
54 54
55extern struct device_node *of_console_device; 55extern struct device_node *of_console_device;
56extern char *of_console_path; 56extern char *of_console_path;
57extern char *of_console_options; 57extern char *of_console_options;
58 58
59extern void irq_trans_init(struct device_node *dp); 59void irq_trans_init(struct device_node *dp);
60extern char *build_path_component(struct device_node *dp); 60char *build_path_component(struct device_node *dp);
61 61
62#endif /* __KERNEL__ */ 62#endif /* __KERNEL__ */
63#endif /* _SPARC_PROM_H */ 63#endif /* _SPARC_PROM_H */
diff --git a/arch/sparc/include/asm/ptrace.h b/arch/sparc/include/asm/ptrace.h
index bdfafd7af46f..bac6a946ee00 100644
--- a/arch/sparc/include/asm/ptrace.h
+++ b/arch/sparc/include/asm/ptrace.h
@@ -73,7 +73,7 @@ static inline long regs_return_value(struct pt_regs *regs)
73 return regs->u_regs[UREG_I0]; 73 return regs->u_regs[UREG_I0];
74} 74}
75#ifdef CONFIG_SMP 75#ifdef CONFIG_SMP
76extern unsigned long profile_pc(struct pt_regs *); 76unsigned long profile_pc(struct pt_regs *);
77#else 77#else
78#define profile_pc(regs) instruction_pointer(regs) 78#define profile_pc(regs) instruction_pointer(regs)
79#endif 79#endif
diff --git a/arch/sparc/include/asm/setup.h b/arch/sparc/include/asm/setup.h
index 5e35e0517318..f5fffd84d0dd 100644
--- a/arch/sparc/include/asm/setup.h
+++ b/arch/sparc/include/asm/setup.h
@@ -4,8 +4,9 @@
4#ifndef _SPARC_SETUP_H 4#ifndef _SPARC_SETUP_H
5#define _SPARC_SETUP_H 5#define _SPARC_SETUP_H
6 6
7#include <uapi/asm/setup.h> 7#include <linux/interrupt.h>
8 8
9#include <uapi/asm/setup.h>
9 10
10extern char reboot_command[]; 11extern char reboot_command[];
11 12
@@ -22,9 +23,43 @@ static inline int con_is_present(void)
22{ 23{
23 return serial_console ? 0 : 1; 24 return serial_console ? 0 : 1;
24} 25}
26
27/* from irq_32.c */
28extern volatile unsigned char *fdc_status;
29extern char *pdma_vaddr;
30extern unsigned long pdma_size;
31extern volatile int doing_pdma;
32
33/* This is software state */
34extern char *pdma_base;
35extern unsigned long pdma_areasize;
36
37int sparc_floppy_request_irq(unsigned int irq, irq_handler_t irq_handler);
38
39/* setup_32.c */
40extern unsigned long cmdline_memory_size;
41
42/* devices.c */
43void __init device_scan(void);
44
45/* unaligned_32.c */
46unsigned long safe_compute_effective_address(struct pt_regs *, unsigned int);
47
48#endif
49
50#ifdef CONFIG_SPARC64
51/* unaligned_64.c */
52int handle_ldf_stq(u32 insn, struct pt_regs *regs);
53void handle_ld_nf(u32 insn, struct pt_regs *regs);
54
55/* init_64.c */
56extern atomic_t dcpage_flushes;
57extern atomic_t dcpage_flushes_xcall;
58
59extern int sysctl_tsb_ratio;
25#endif 60#endif
26 61
27extern void sun_do_break(void); 62void sun_do_break(void);
28extern int stop_a_enabled; 63extern int stop_a_enabled;
29extern int scons_pwroff; 64extern int scons_pwroff;
30 65
diff --git a/arch/sparc/include/asm/sfp-machine_32.h b/arch/sparc/include/asm/sfp-machine_32.h
index 01d9c3b5a73b..838c9d58f3b4 100644
--- a/arch/sparc/include/asm/sfp-machine_32.h
+++ b/arch/sparc/include/asm/sfp-machine_32.h
@@ -79,9 +79,9 @@
79 __asm__ ("addcc %r7,%8,%2\n\t" \ 79 __asm__ ("addcc %r7,%8,%2\n\t" \
80 "addxcc %r5,%6,%1\n\t" \ 80 "addxcc %r5,%6,%1\n\t" \
81 "addx %r3,%4,%0\n" \ 81 "addx %r3,%4,%0\n" \
82 : "=r" ((USItype)(r2)), \ 82 : "=r" (r2), \
83 "=&r" ((USItype)(r1)), \ 83 "=&r" (r1), \
84 "=&r" ((USItype)(r0)) \ 84 "=&r" (r0) \
85 : "%rJ" ((USItype)(x2)), \ 85 : "%rJ" ((USItype)(x2)), \
86 "rI" ((USItype)(y2)), \ 86 "rI" ((USItype)(y2)), \
87 "%rJ" ((USItype)(x1)), \ 87 "%rJ" ((USItype)(x1)), \
@@ -94,9 +94,9 @@
94 __asm__ ("subcc %r7,%8,%2\n\t" \ 94 __asm__ ("subcc %r7,%8,%2\n\t" \
95 "subxcc %r5,%6,%1\n\t" \ 95 "subxcc %r5,%6,%1\n\t" \
96 "subx %r3,%4,%0\n" \ 96 "subx %r3,%4,%0\n" \
97 : "=r" ((USItype)(r2)), \ 97 : "=r" (r2), \
98 "=&r" ((USItype)(r1)), \ 98 "=&r" (r1), \
99 "=&r" ((USItype)(r0)) \ 99 "=&r" (r0) \
100 : "%rJ" ((USItype)(x2)), \ 100 : "%rJ" ((USItype)(x2)), \
101 "rI" ((USItype)(y2)), \ 101 "rI" ((USItype)(y2)), \
102 "%rJ" ((USItype)(x1)), \ 102 "%rJ" ((USItype)(x1)), \
@@ -115,8 +115,8 @@
115 "addxcc %r6,%7,%0\n\t" \ 115 "addxcc %r6,%7,%0\n\t" \
116 "addxcc %r4,%5,%%g2\n\t" \ 116 "addxcc %r4,%5,%%g2\n\t" \
117 "addx %r2,%3,%%g1\n\t" \ 117 "addx %r2,%3,%%g1\n\t" \
118 : "=&r" ((USItype)(r1)), \ 118 : "=&r" (r1), \
119 "=&r" ((USItype)(r0)) \ 119 "=&r" (r0) \
120 : "%rJ" ((USItype)(x3)), \ 120 : "%rJ" ((USItype)(x3)), \
121 "rI" ((USItype)(y3)), \ 121 "rI" ((USItype)(y3)), \
122 "%rJ" ((USItype)(x2)), \ 122 "%rJ" ((USItype)(x2)), \
@@ -140,8 +140,8 @@
140 "subxcc %r6,%7,%0\n\t" \ 140 "subxcc %r6,%7,%0\n\t" \
141 "subxcc %r4,%5,%%g2\n\t" \ 141 "subxcc %r4,%5,%%g2\n\t" \
142 "subx %r2,%3,%%g1\n\t" \ 142 "subx %r2,%3,%%g1\n\t" \
143 : "=&r" ((USItype)(r1)), \ 143 : "=&r" (r1), \
144 "=&r" ((USItype)(r0)) \ 144 "=&r" (r0) \
145 : "%rJ" ((USItype)(x3)), \ 145 : "%rJ" ((USItype)(x3)), \
146 "rI" ((USItype)(y3)), \ 146 "rI" ((USItype)(y3)), \
147 "%rJ" ((USItype)(x2)), \ 147 "%rJ" ((USItype)(x2)), \
@@ -164,10 +164,10 @@
164 "addxcc %2,%%g0,%2\n\t" \ 164 "addxcc %2,%%g0,%2\n\t" \
165 "addxcc %1,%%g0,%1\n\t" \ 165 "addxcc %1,%%g0,%1\n\t" \
166 "addx %0,%%g0,%0\n\t" \ 166 "addx %0,%%g0,%0\n\t" \
167 : "=&r" ((USItype)(x3)), \ 167 : "=&r" (x3), \
168 "=&r" ((USItype)(x2)), \ 168 "=&r" (x2), \
169 "=&r" ((USItype)(x1)), \ 169 "=&r" (x1), \
170 "=&r" ((USItype)(x0)) \ 170 "=&r" (x0) \
171 : "rI" ((USItype)(i)), \ 171 : "rI" ((USItype)(i)), \
172 "0" ((USItype)(x3)), \ 172 "0" ((USItype)(x3)), \
173 "1" ((USItype)(x2)), \ 173 "1" ((USItype)(x2)), \
diff --git a/arch/sparc/include/asm/smp_32.h b/arch/sparc/include/asm/smp_32.h
index 3c8917f054de..7c24e08a88d2 100644
--- a/arch/sparc/include/asm/smp_32.h
+++ b/arch/sparc/include/asm/smp_32.h
@@ -93,15 +93,15 @@ static inline void xc4(smpfunc_t func, unsigned long arg1, unsigned long arg2,
93 arg1, arg2, arg3, arg4); 93 arg1, arg2, arg3, arg4);
94} 94}
95 95
96extern void arch_send_call_function_single_ipi(int cpu); 96void arch_send_call_function_single_ipi(int cpu);
97extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); 97void arch_send_call_function_ipi_mask(const struct cpumask *mask);
98 98
99static inline int cpu_logical_map(int cpu) 99static inline int cpu_logical_map(int cpu)
100{ 100{
101 return cpu; 101 return cpu;
102} 102}
103 103
104extern int hard_smp_processor_id(void); 104int hard_smp_processor_id(void);
105 105
106#define raw_smp_processor_id() (current_thread_info()->cpu) 106#define raw_smp_processor_id() (current_thread_info()->cpu)
107 107
diff --git a/arch/sparc/include/asm/smp_64.h b/arch/sparc/include/asm/smp_64.h
index 05710393959f..26d9e7726867 100644
--- a/arch/sparc/include/asm/smp_64.h
+++ b/arch/sparc/include/asm/smp_64.h
@@ -33,29 +33,35 @@
33DECLARE_PER_CPU(cpumask_t, cpu_sibling_map); 33DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
34extern cpumask_t cpu_core_map[NR_CPUS]; 34extern cpumask_t cpu_core_map[NR_CPUS];
35 35
36extern void arch_send_call_function_single_ipi(int cpu); 36void arch_send_call_function_single_ipi(int cpu);
37extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); 37void arch_send_call_function_ipi_mask(const struct cpumask *mask);
38 38
39/* 39/*
40 * General functions that each host system must provide. 40 * General functions that each host system must provide.
41 */ 41 */
42 42
43extern int hard_smp_processor_id(void); 43int hard_smp_processor_id(void);
44#define raw_smp_processor_id() (current_thread_info()->cpu) 44#define raw_smp_processor_id() (current_thread_info()->cpu)
45 45
46extern void smp_fill_in_sib_core_maps(void); 46void smp_fill_in_sib_core_maps(void);
47extern void cpu_play_dead(void); 47void cpu_play_dead(void);
48 48
49extern void smp_fetch_global_regs(void); 49void smp_fetch_global_regs(void);
50extern void smp_fetch_global_pmu(void); 50void smp_fetch_global_pmu(void);
51 51
52struct seq_file; 52struct seq_file;
53void smp_bogo(struct seq_file *); 53void smp_bogo(struct seq_file *);
54void smp_info(struct seq_file *); 54void smp_info(struct seq_file *);
55 55
56void smp_callin(void);
57void cpu_panic(void);
58void smp_synchronize_tick_client(void);
59void smp_capture(void);
60void smp_release(void);
61
56#ifdef CONFIG_HOTPLUG_CPU 62#ifdef CONFIG_HOTPLUG_CPU
57extern int __cpu_disable(void); 63int __cpu_disable(void);
58extern void __cpu_die(unsigned int cpu); 64void __cpu_die(unsigned int cpu);
59#endif 65#endif
60 66
61#endif /* !(__ASSEMBLY__) */ 67#endif /* !(__ASSEMBLY__) */
diff --git a/arch/sparc/include/asm/spitfire.h b/arch/sparc/include/asm/spitfire.h
index 6b67e50fb9b4..3fc58691dbd0 100644
--- a/arch/sparc/include/asm/spitfire.h
+++ b/arch/sparc/include/asm/spitfire.h
@@ -62,7 +62,7 @@ extern enum ultra_tlb_layout tlb_type;
62extern int sun4v_chip_type; 62extern int sun4v_chip_type;
63 63
64extern int cheetah_pcache_forced_on; 64extern int cheetah_pcache_forced_on;
65extern void cheetah_enable_pcache(void); 65void cheetah_enable_pcache(void);
66 66
67#define sparc64_highest_locked_tlbent() \ 67#define sparc64_highest_locked_tlbent() \
68 (tlb_type == spitfire ? \ 68 (tlb_type == spitfire ? \
diff --git a/arch/sparc/include/asm/stacktrace.h b/arch/sparc/include/asm/stacktrace.h
index 6cee39adf6d6..c30d066f3048 100644
--- a/arch/sparc/include/asm/stacktrace.h
+++ b/arch/sparc/include/asm/stacktrace.h
@@ -1,6 +1,6 @@
1#ifndef _SPARC64_STACKTRACE_H 1#ifndef _SPARC64_STACKTRACE_H
2#define _SPARC64_STACKTRACE_H 2#define _SPARC64_STACKTRACE_H
3 3
4extern void stack_trace_flush(void); 4void stack_trace_flush(void);
5 5
6#endif /* _SPARC64_STACKTRACE_H */ 6#endif /* _SPARC64_STACKTRACE_H */
diff --git a/arch/sparc/include/asm/starfire.h b/arch/sparc/include/asm/starfire.h
index d56ce60a5992..c100dc27a0a9 100644
--- a/arch/sparc/include/asm/starfire.h
+++ b/arch/sparc/include/asm/starfire.h
@@ -11,10 +11,10 @@
11 11
12extern int this_is_starfire; 12extern int this_is_starfire;
13 13
14extern void check_if_starfire(void); 14void check_if_starfire(void);
15extern int starfire_hard_smp_processor_id(void); 15int starfire_hard_smp_processor_id(void);
16extern void starfire_hookup(int); 16void starfire_hookup(int);
17extern unsigned int starfire_translate(unsigned long imap, unsigned int upaid); 17unsigned int starfire_translate(unsigned long imap, unsigned int upaid);
18 18
19#endif 19#endif
20#endif 20#endif
diff --git a/arch/sparc/include/asm/string_32.h b/arch/sparc/include/asm/string_32.h
index 12f67857152e..69974e924611 100644
--- a/arch/sparc/include/asm/string_32.h
+++ b/arch/sparc/include/asm/string_32.h
@@ -15,7 +15,7 @@
15 15
16#ifdef __KERNEL__ 16#ifdef __KERNEL__
17 17
18extern void __memmove(void *,const void *,__kernel_size_t); 18void __memmove(void *,const void *,__kernel_size_t);
19 19
20#ifndef EXPORT_SYMTAB_STROPS 20#ifndef EXPORT_SYMTAB_STROPS
21 21
@@ -40,8 +40,8 @@ extern void __memmove(void *,const void *,__kernel_size_t);
40#undef memscan 40#undef memscan
41#define memscan(__arg0, __char, __arg2) \ 41#define memscan(__arg0, __char, __arg2) \
42({ \ 42({ \
43 extern void *__memscan_zero(void *, size_t); \ 43 void *__memscan_zero(void *, size_t); \
44 extern void *__memscan_generic(void *, int, size_t); \ 44 void *__memscan_generic(void *, int, size_t); \
45 void *__retval, *__addr = (__arg0); \ 45 void *__retval, *__addr = (__arg0); \
46 size_t __size = (__arg2); \ 46 size_t __size = (__arg2); \
47 \ 47 \
@@ -54,14 +54,14 @@ extern void __memmove(void *,const void *,__kernel_size_t);
54}) 54})
55 55
56#define __HAVE_ARCH_MEMCMP 56#define __HAVE_ARCH_MEMCMP
57extern int memcmp(const void *,const void *,__kernel_size_t); 57int memcmp(const void *,const void *,__kernel_size_t);
58 58
59/* Now the str*() stuff... */ 59/* Now the str*() stuff... */
60#define __HAVE_ARCH_STRLEN 60#define __HAVE_ARCH_STRLEN
61extern __kernel_size_t strlen(const char *); 61__kernel_size_t strlen(const char *);
62 62
63#define __HAVE_ARCH_STRNCMP 63#define __HAVE_ARCH_STRNCMP
64extern int strncmp(const char *, const char *, __kernel_size_t); 64int strncmp(const char *, const char *, __kernel_size_t);
65 65
66#endif /* !EXPORT_SYMTAB_STROPS */ 66#endif /* !EXPORT_SYMTAB_STROPS */
67 67
diff --git a/arch/sparc/include/asm/string_64.h b/arch/sparc/include/asm/string_64.h
index 9623bc213158..5936b8ff3c05 100644
--- a/arch/sparc/include/asm/string_64.h
+++ b/arch/sparc/include/asm/string_64.h
@@ -19,7 +19,7 @@
19 19
20/* First the mem*() things. */ 20/* First the mem*() things. */
21#define __HAVE_ARCH_MEMMOVE 21#define __HAVE_ARCH_MEMMOVE
22extern void *memmove(void *, const void *, __kernel_size_t); 22void *memmove(void *, const void *, __kernel_size_t);
23 23
24#define __HAVE_ARCH_MEMCPY 24#define __HAVE_ARCH_MEMCPY
25#define memcpy(t, f, n) __builtin_memcpy(t, f, n) 25#define memcpy(t, f, n) __builtin_memcpy(t, f, n)
@@ -32,8 +32,8 @@ extern void *memmove(void *, const void *, __kernel_size_t);
32#undef memscan 32#undef memscan
33#define memscan(__arg0, __char, __arg2) \ 33#define memscan(__arg0, __char, __arg2) \
34({ \ 34({ \
35 extern void *__memscan_zero(void *, size_t); \ 35 void *__memscan_zero(void *, size_t); \
36 extern void *__memscan_generic(void *, int, size_t); \ 36 void *__memscan_generic(void *, int, size_t); \
37 void *__retval, *__addr = (__arg0); \ 37 void *__retval, *__addr = (__arg0); \
38 size_t __size = (__arg2); \ 38 size_t __size = (__arg2); \
39 \ 39 \
@@ -46,14 +46,14 @@ extern void *memmove(void *, const void *, __kernel_size_t);
46}) 46})
47 47
48#define __HAVE_ARCH_MEMCMP 48#define __HAVE_ARCH_MEMCMP
49extern int memcmp(const void *,const void *,__kernel_size_t); 49int memcmp(const void *,const void *,__kernel_size_t);
50 50
51/* Now the str*() stuff... */ 51/* Now the str*() stuff... */
52#define __HAVE_ARCH_STRLEN 52#define __HAVE_ARCH_STRLEN
53extern __kernel_size_t strlen(const char *); 53__kernel_size_t strlen(const char *);
54 54
55#define __HAVE_ARCH_STRNCMP 55#define __HAVE_ARCH_STRNCMP
56extern int strncmp(const char *, const char *, __kernel_size_t); 56int strncmp(const char *, const char *, __kernel_size_t);
57 57
58#endif /* !EXPORT_SYMTAB_STROPS */ 58#endif /* !EXPORT_SYMTAB_STROPS */
59 59
diff --git a/arch/sparc/include/asm/switch_to_32.h b/arch/sparc/include/asm/switch_to_32.h
index e32e82b76eed..16f10374feb3 100644
--- a/arch/sparc/include/asm/switch_to_32.h
+++ b/arch/sparc/include/asm/switch_to_32.h
@@ -99,8 +99,8 @@ extern struct thread_info *current_set[NR_CPUS];
99 "o0", "o1", "o2", "o3", "o7"); \ 99 "o0", "o1", "o2", "o3", "o7"); \
100 } while(0) 100 } while(0)
101 101
102extern void fpsave(unsigned long *fpregs, unsigned long *fsr, 102void fpsave(unsigned long *fpregs, unsigned long *fsr,
103 void *fpqueue, unsigned long *fpqdepth); 103 void *fpqueue, unsigned long *fpqdepth);
104extern void synchronize_user_stack(void); 104void synchronize_user_stack(void);
105 105
106#endif /* __SPARC_SWITCH_TO_H */ 106#endif /* __SPARC_SWITCH_TO_H */
diff --git a/arch/sparc/include/asm/switch_to_64.h b/arch/sparc/include/asm/switch_to_64.h
index 8d284801f232..10e76332dc99 100644
--- a/arch/sparc/include/asm/switch_to_64.h
+++ b/arch/sparc/include/asm/switch_to_64.h
@@ -65,7 +65,7 @@ do { save_and_clear_fpu(); \
65 "o0", "o1", "o2", "o3", "o4", "o5", "o7"); \ 65 "o0", "o1", "o2", "o3", "o4", "o5", "o7"); \
66} while(0) 66} while(0)
67 67
68extern void synchronize_user_stack(void); 68void synchronize_user_stack(void);
69extern void fault_in_user_windows(void); 69void fault_in_user_windows(void);
70 70
71#endif /* __SPARC64_SWITCH_TO_64_H */ 71#endif /* __SPARC64_SWITCH_TO_64_H */
diff --git a/arch/sparc/include/asm/syscalls.h b/arch/sparc/include/asm/syscalls.h
index bf8972adea17..b0a0db8ea61a 100644
--- a/arch/sparc/include/asm/syscalls.h
+++ b/arch/sparc/include/asm/syscalls.h
@@ -3,9 +3,9 @@
3 3
4struct pt_regs; 4struct pt_regs;
5 5
6extern asmlinkage long sparc_do_fork(unsigned long clone_flags, 6asmlinkage long sparc_do_fork(unsigned long clone_flags,
7 unsigned long stack_start, 7 unsigned long stack_start,
8 struct pt_regs *regs, 8 struct pt_regs *regs,
9 unsigned long stack_size); 9 unsigned long stack_size);
10 10
11#endif /* _SPARC64_SYSCALLS_H */ 11#endif /* _SPARC64_SYSCALLS_H */
diff --git a/arch/sparc/include/asm/timer_32.h b/arch/sparc/include/asm/timer_32.h
index 72f40a546de3..f8e708a0aa58 100644
--- a/arch/sparc/include/asm/timer_32.h
+++ b/arch/sparc/include/asm/timer_32.h
@@ -32,13 +32,13 @@ static inline unsigned int timer_value(unsigned int value)
32 return (value + 1) << TIMER_VALUE_SHIFT; 32 return (value + 1) << TIMER_VALUE_SHIFT;
33} 33}
34 34
35extern __volatile__ unsigned int *master_l10_counter; 35extern volatile u32 __iomem *master_l10_counter;
36 36
37extern irqreturn_t notrace timer_interrupt(int dummy, void *dev_id); 37irqreturn_t notrace timer_interrupt(int dummy, void *dev_id);
38 38
39#ifdef CONFIG_SMP 39#ifdef CONFIG_SMP
40DECLARE_PER_CPU(struct clock_event_device, sparc32_clockevent); 40DECLARE_PER_CPU(struct clock_event_device, sparc32_clockevent);
41extern void register_percpu_ce(int cpu); 41void register_percpu_ce(int cpu);
42#endif 42#endif
43 43
44#endif /* !(_SPARC_TIMER_H) */ 44#endif /* !(_SPARC_TIMER_H) */
diff --git a/arch/sparc/include/asm/timer_64.h b/arch/sparc/include/asm/timer_64.h
index 01197d8215c4..fce415034000 100644
--- a/arch/sparc/include/asm/timer_64.h
+++ b/arch/sparc/include/asm/timer_64.h
@@ -23,8 +23,8 @@ struct sparc64_tick_ops {
23 23
24extern struct sparc64_tick_ops *tick_ops; 24extern struct sparc64_tick_ops *tick_ops;
25 25
26extern unsigned long sparc64_get_clock_tick(unsigned int cpu); 26unsigned long sparc64_get_clock_tick(unsigned int cpu);
27extern void setup_sparc64_timer(void); 27void setup_sparc64_timer(void);
28extern void __init time_init(void); 28void __init time_init(void);
29 29
30#endif /* _SPARC64_TIMER_H */ 30#endif /* _SPARC64_TIMER_H */
diff --git a/arch/sparc/include/asm/tlb_64.h b/arch/sparc/include/asm/tlb_64.h
index 190e18913cc6..4cb392f75d2b 100644
--- a/arch/sparc/include/asm/tlb_64.h
+++ b/arch/sparc/include/asm/tlb_64.h
@@ -8,19 +8,19 @@
8#include <asm/mmu_context.h> 8#include <asm/mmu_context.h>
9 9
10#ifdef CONFIG_SMP 10#ifdef CONFIG_SMP
11extern void smp_flush_tlb_pending(struct mm_struct *, 11void smp_flush_tlb_pending(struct mm_struct *,
12 unsigned long, unsigned long *); 12 unsigned long, unsigned long *);
13#endif 13#endif
14 14
15#ifdef CONFIG_SMP 15#ifdef CONFIG_SMP
16extern void smp_flush_tlb_mm(struct mm_struct *mm); 16void smp_flush_tlb_mm(struct mm_struct *mm);
17#define do_flush_tlb_mm(mm) smp_flush_tlb_mm(mm) 17#define do_flush_tlb_mm(mm) smp_flush_tlb_mm(mm)
18#else 18#else
19#define do_flush_tlb_mm(mm) __flush_tlb_mm(CTX_HWBITS(mm->context), SECONDARY_CONTEXT) 19#define do_flush_tlb_mm(mm) __flush_tlb_mm(CTX_HWBITS(mm->context), SECONDARY_CONTEXT)
20#endif 20#endif
21 21
22extern void __flush_tlb_pending(unsigned long, unsigned long, unsigned long *); 22void __flush_tlb_pending(unsigned long, unsigned long, unsigned long *);
23extern void flush_tlb_pending(void); 23void flush_tlb_pending(void);
24 24
25#define tlb_start_vma(tlb, vma) do { } while (0) 25#define tlb_start_vma(tlb, vma) do { } while (0)
26#define tlb_end_vma(tlb, vma) do { } while (0) 26#define tlb_end_vma(tlb, vma) do { } while (0)
diff --git a/arch/sparc/include/asm/tlbflush_64.h b/arch/sparc/include/asm/tlbflush_64.h
index 3c3c89f52643..816d8202fa0a 100644
--- a/arch/sparc/include/asm/tlbflush_64.h
+++ b/arch/sparc/include/asm/tlbflush_64.h
@@ -14,9 +14,9 @@ struct tlb_batch {
14 unsigned long vaddrs[TLB_BATCH_NR]; 14 unsigned long vaddrs[TLB_BATCH_NR];
15}; 15};
16 16
17extern void flush_tsb_kernel_range(unsigned long start, unsigned long end); 17void flush_tsb_kernel_range(unsigned long start, unsigned long end);
18extern void flush_tsb_user(struct tlb_batch *tb); 18void flush_tsb_user(struct tlb_batch *tb);
19extern void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr); 19void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr);
20 20
21/* TLB flush operations. */ 21/* TLB flush operations. */
22 22
@@ -36,15 +36,15 @@ static inline void flush_tlb_range(struct vm_area_struct *vma,
36 36
37#define __HAVE_ARCH_ENTER_LAZY_MMU_MODE 37#define __HAVE_ARCH_ENTER_LAZY_MMU_MODE
38 38
39extern void flush_tlb_pending(void); 39void flush_tlb_pending(void);
40extern void arch_enter_lazy_mmu_mode(void); 40void arch_enter_lazy_mmu_mode(void);
41extern void arch_leave_lazy_mmu_mode(void); 41void arch_leave_lazy_mmu_mode(void);
42#define arch_flush_lazy_mmu_mode() do {} while (0) 42#define arch_flush_lazy_mmu_mode() do {} while (0)
43 43
44/* Local cpu only. */ 44/* Local cpu only. */
45extern void __flush_tlb_all(void); 45void __flush_tlb_all(void);
46extern void __flush_tlb_page(unsigned long context, unsigned long vaddr); 46void __flush_tlb_page(unsigned long context, unsigned long vaddr);
47extern void __flush_tlb_kernel_range(unsigned long start, unsigned long end); 47void __flush_tlb_kernel_range(unsigned long start, unsigned long end);
48 48
49#ifndef CONFIG_SMP 49#ifndef CONFIG_SMP
50 50
@@ -60,8 +60,8 @@ static inline void global_flush_tlb_page(struct mm_struct *mm, unsigned long vad
60 60
61#else /* CONFIG_SMP */ 61#else /* CONFIG_SMP */
62 62
63extern void smp_flush_tlb_kernel_range(unsigned long start, unsigned long end); 63void smp_flush_tlb_kernel_range(unsigned long start, unsigned long end);
64extern void smp_flush_tlb_page(struct mm_struct *mm, unsigned long vaddr); 64void smp_flush_tlb_page(struct mm_struct *mm, unsigned long vaddr);
65 65
66#define flush_tlb_kernel_range(start, end) \ 66#define flush_tlb_kernel_range(start, end) \
67do { flush_tsb_kernel_range(start,end); \ 67do { flush_tsb_kernel_range(start,end); \
diff --git a/arch/sparc/include/asm/topology_64.h b/arch/sparc/include/asm/topology_64.h
index a2d10fc64faf..ed8f071132e4 100644
--- a/arch/sparc/include/asm/topology_64.h
+++ b/arch/sparc/include/asm/topology_64.h
@@ -18,7 +18,7 @@ static inline int cpu_to_node(int cpu)
18 18
19struct pci_bus; 19struct pci_bus;
20#ifdef CONFIG_PCI 20#ifdef CONFIG_PCI
21extern int pcibus_to_node(struct pci_bus *pbus); 21int pcibus_to_node(struct pci_bus *pbus);
22#else 22#else
23static inline int pcibus_to_node(struct pci_bus *pbus) 23static inline int pcibus_to_node(struct pci_bus *pbus)
24{ 24{
diff --git a/arch/sparc/include/asm/trap_block.h b/arch/sparc/include/asm/trap_block.h
index 7e26b2db6211..6fd4436d32f0 100644
--- a/arch/sparc/include/asm/trap_block.h
+++ b/arch/sparc/include/asm/trap_block.h
@@ -51,11 +51,11 @@ struct trap_per_cpu {
51 unsigned long __per_cpu_base; 51 unsigned long __per_cpu_base;
52} __attribute__((aligned(64))); 52} __attribute__((aligned(64)));
53extern struct trap_per_cpu trap_block[NR_CPUS]; 53extern struct trap_per_cpu trap_block[NR_CPUS];
54extern void init_cur_cpu_trap(struct thread_info *); 54void init_cur_cpu_trap(struct thread_info *);
55extern void setup_tba(void); 55void setup_tba(void);
56extern int ncpus_probed; 56extern int ncpus_probed;
57 57
58extern unsigned long real_hard_smp_processor_id(void); 58unsigned long real_hard_smp_processor_id(void);
59 59
60struct cpuid_patch_entry { 60struct cpuid_patch_entry {
61 unsigned int addr; 61 unsigned int addr;
diff --git a/arch/sparc/include/asm/uaccess.h b/arch/sparc/include/asm/uaccess.h
index 0167d26d0d1d..bd56c28fff9f 100644
--- a/arch/sparc/include/asm/uaccess.h
+++ b/arch/sparc/include/asm/uaccess.h
@@ -9,6 +9,6 @@
9#define user_addr_max() \ 9#define user_addr_max() \
10 (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL) 10 (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL)
11 11
12extern long strncpy_from_user(char *dest, const char __user *src, long count); 12long strncpy_from_user(char *dest, const char __user *src, long count);
13 13
14#endif 14#endif
diff --git a/arch/sparc/include/asm/uaccess_32.h b/arch/sparc/include/asm/uaccess_32.h
index 53a28dd59f59..9634d086fc56 100644
--- a/arch/sparc/include/asm/uaccess_32.h
+++ b/arch/sparc/include/asm/uaccess_32.h
@@ -78,9 +78,9 @@ struct exception_table_entry
78}; 78};
79 79
80/* Returns 0 if exception not found and fixup otherwise. */ 80/* Returns 0 if exception not found and fixup otherwise. */
81extern unsigned long search_extables_range(unsigned long addr, unsigned long *g2); 81unsigned long search_extables_range(unsigned long addr, unsigned long *g2);
82 82
83extern void __ret_efault(void); 83void __ret_efault(void);
84 84
85/* Uh, these should become the main single-value transfer routines.. 85/* Uh, these should become the main single-value transfer routines..
86 * They automatically use the right size if we just have the right 86 * They automatically use the right size if we just have the right
@@ -152,7 +152,7 @@ __asm__ __volatile__( \
152 : "=&r" (ret) : "r" (x), "m" (*__m(addr)), \ 152 : "=&r" (ret) : "r" (x), "m" (*__m(addr)), \
153 "i" (-EFAULT)) 153 "i" (-EFAULT))
154 154
155extern int __put_user_bad(void); 155int __put_user_bad(void);
156 156
157#define __get_user_check(x,addr,size,type) ({ \ 157#define __get_user_check(x,addr,size,type) ({ \
158register int __gu_ret; \ 158register int __gu_ret; \
@@ -244,9 +244,9 @@ __asm__ __volatile__( \
244 ".previous\n\t" \ 244 ".previous\n\t" \
245 : "=&r" (x) : "m" (*__m(addr)), "i" (retval)) 245 : "=&r" (x) : "m" (*__m(addr)), "i" (retval))
246 246
247extern int __get_user_bad(void); 247int __get_user_bad(void);
248 248
249extern unsigned long __copy_user(void __user *to, const void __user *from, unsigned long size); 249unsigned long __copy_user(void __user *to, const void __user *from, unsigned long size);
250 250
251static inline unsigned long copy_to_user(void __user *to, const void *from, unsigned long n) 251static inline unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
252{ 252{
@@ -306,8 +306,8 @@ static inline unsigned long clear_user(void __user *addr, unsigned long n)
306 return n; 306 return n;
307} 307}
308 308
309extern __must_check long strlen_user(const char __user *str); 309__must_check long strlen_user(const char __user *str);
310extern __must_check long strnlen_user(const char __user *str, long n); 310__must_check long strnlen_user(const char __user *str, long n);
311 311
312#endif /* __ASSEMBLY__ */ 312#endif /* __ASSEMBLY__ */
313 313
diff --git a/arch/sparc/include/asm/uaccess_64.h b/arch/sparc/include/asm/uaccess_64.h
index ad7e178337f1..c990a5e577f0 100644
--- a/arch/sparc/include/asm/uaccess_64.h
+++ b/arch/sparc/include/asm/uaccess_64.h
@@ -76,8 +76,8 @@ struct exception_table_entry {
76 unsigned int insn, fixup; 76 unsigned int insn, fixup;
77}; 77};
78 78
79extern void __ret_efault(void); 79void __ret_efault(void);
80extern void __retl_efault(void); 80void __retl_efault(void);
81 81
82/* Uh, these should become the main single-value transfer routines.. 82/* Uh, these should become the main single-value transfer routines..
83 * They automatically use the right size if we just have the right 83 * They automatically use the right size if we just have the right
@@ -134,7 +134,7 @@ __asm__ __volatile__( \
134 : "=r" (ret) : "r" (x), "r" (__m(addr)), \ 134 : "=r" (ret) : "r" (x), "r" (__m(addr)), \
135 "i" (-EFAULT)) 135 "i" (-EFAULT))
136 136
137extern int __put_user_bad(void); 137int __put_user_bad(void);
138 138
139#define __get_user_nocheck(data,addr,size,type) ({ \ 139#define __get_user_nocheck(data,addr,size,type) ({ \
140register int __gu_ret; \ 140register int __gu_ret; \
@@ -204,13 +204,13 @@ __asm__ __volatile__( \
204 ".previous\n\t" \ 204 ".previous\n\t" \
205 : "=r" (x) : "r" (__m(addr)), "i" (retval)) 205 : "=r" (x) : "r" (__m(addr)), "i" (retval))
206 206
207extern int __get_user_bad(void); 207int __get_user_bad(void);
208 208
209extern unsigned long __must_check ___copy_from_user(void *to, 209unsigned long __must_check ___copy_from_user(void *to,
210 const void __user *from, 210 const void __user *from,
211 unsigned long size); 211 unsigned long size);
212extern unsigned long copy_from_user_fixup(void *to, const void __user *from, 212unsigned long copy_from_user_fixup(void *to, const void __user *from,
213 unsigned long size); 213 unsigned long size);
214static inline unsigned long __must_check 214static inline unsigned long __must_check
215copy_from_user(void *to, const void __user *from, unsigned long size) 215copy_from_user(void *to, const void __user *from, unsigned long size)
216{ 216{
@@ -223,11 +223,11 @@ copy_from_user(void *to, const void __user *from, unsigned long size)
223} 223}
224#define __copy_from_user copy_from_user 224#define __copy_from_user copy_from_user
225 225
226extern unsigned long __must_check ___copy_to_user(void __user *to, 226unsigned long __must_check ___copy_to_user(void __user *to,
227 const void *from, 227 const void *from,
228 unsigned long size); 228 unsigned long size);
229extern unsigned long copy_to_user_fixup(void __user *to, const void *from, 229unsigned long copy_to_user_fixup(void __user *to, const void *from,
230 unsigned long size); 230 unsigned long size);
231static inline unsigned long __must_check 231static inline unsigned long __must_check
232copy_to_user(void __user *to, const void *from, unsigned long size) 232copy_to_user(void __user *to, const void *from, unsigned long size)
233{ 233{
@@ -239,11 +239,11 @@ copy_to_user(void __user *to, const void *from, unsigned long size)
239} 239}
240#define __copy_to_user copy_to_user 240#define __copy_to_user copy_to_user
241 241
242extern unsigned long __must_check ___copy_in_user(void __user *to, 242unsigned long __must_check ___copy_in_user(void __user *to,
243 const void __user *from, 243 const void __user *from,
244 unsigned long size); 244 unsigned long size);
245extern unsigned long copy_in_user_fixup(void __user *to, void __user *from, 245unsigned long copy_in_user_fixup(void __user *to, void __user *from,
246 unsigned long size); 246 unsigned long size);
247static inline unsigned long __must_check 247static inline unsigned long __must_check
248copy_in_user(void __user *to, void __user *from, unsigned long size) 248copy_in_user(void __user *to, void __user *from, unsigned long size)
249{ 249{
@@ -255,20 +255,20 @@ copy_in_user(void __user *to, void __user *from, unsigned long size)
255} 255}
256#define __copy_in_user copy_in_user 256#define __copy_in_user copy_in_user
257 257
258extern unsigned long __must_check __clear_user(void __user *, unsigned long); 258unsigned long __must_check __clear_user(void __user *, unsigned long);
259 259
260#define clear_user __clear_user 260#define clear_user __clear_user
261 261
262extern __must_check long strlen_user(const char __user *str); 262__must_check long strlen_user(const char __user *str);
263extern __must_check long strnlen_user(const char __user *str, long n); 263__must_check long strnlen_user(const char __user *str, long n);
264 264
265#define __copy_to_user_inatomic __copy_to_user 265#define __copy_to_user_inatomic __copy_to_user
266#define __copy_from_user_inatomic __copy_from_user 266#define __copy_from_user_inatomic __copy_from_user
267 267
268struct pt_regs; 268struct pt_regs;
269extern unsigned long compute_effective_address(struct pt_regs *, 269unsigned long compute_effective_address(struct pt_regs *,
270 unsigned int insn, 270 unsigned int insn,
271 unsigned int rd); 271 unsigned int rd);
272 272
273#endif /* __ASSEMBLY__ */ 273#endif /* __ASSEMBLY__ */
274 274
diff --git a/arch/sparc/include/asm/vio.h b/arch/sparc/include/asm/vio.h
index 432afa838861..e0f6c399f1d0 100644
--- a/arch/sparc/include/asm/vio.h
+++ b/arch/sparc/include/asm/vio.h
@@ -372,14 +372,14 @@ do { if (vio->debug & VIO_DEBUG_##TYPE) \
372 vio->vdev->channel_id, ## a); \ 372 vio->vdev->channel_id, ## a); \
373} while (0) 373} while (0)
374 374
375extern int __vio_register_driver(struct vio_driver *drv, struct module *owner, 375int __vio_register_driver(struct vio_driver *drv, struct module *owner,
376 const char *mod_name); 376 const char *mod_name);
377/* 377/*
378 * vio_register_driver must be a macro so that KBUILD_MODNAME can be expanded 378 * vio_register_driver must be a macro so that KBUILD_MODNAME can be expanded
379 */ 379 */
380#define vio_register_driver(driver) \ 380#define vio_register_driver(driver) \
381 __vio_register_driver(driver, THIS_MODULE, KBUILD_MODNAME) 381 __vio_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
382extern void vio_unregister_driver(struct vio_driver *drv); 382void vio_unregister_driver(struct vio_driver *drv);
383 383
384static inline struct vio_driver *to_vio_driver(struct device_driver *drv) 384static inline struct vio_driver *to_vio_driver(struct device_driver *drv)
385{ 385{
@@ -391,21 +391,21 @@ static inline struct vio_dev *to_vio_dev(struct device *dev)
391 return container_of(dev, struct vio_dev, dev); 391 return container_of(dev, struct vio_dev, dev);
392} 392}
393 393
394extern int vio_ldc_send(struct vio_driver_state *vio, void *data, int len); 394int vio_ldc_send(struct vio_driver_state *vio, void *data, int len);
395extern void vio_link_state_change(struct vio_driver_state *vio, int event); 395void vio_link_state_change(struct vio_driver_state *vio, int event);
396extern void vio_conn_reset(struct vio_driver_state *vio); 396void vio_conn_reset(struct vio_driver_state *vio);
397extern int vio_control_pkt_engine(struct vio_driver_state *vio, void *pkt); 397int vio_control_pkt_engine(struct vio_driver_state *vio, void *pkt);
398extern int vio_validate_sid(struct vio_driver_state *vio, 398int vio_validate_sid(struct vio_driver_state *vio,
399 struct vio_msg_tag *tp); 399 struct vio_msg_tag *tp);
400extern u32 vio_send_sid(struct vio_driver_state *vio); 400u32 vio_send_sid(struct vio_driver_state *vio);
401extern int vio_ldc_alloc(struct vio_driver_state *vio, 401int vio_ldc_alloc(struct vio_driver_state *vio,
402 struct ldc_channel_config *base_cfg, void *event_arg); 402 struct ldc_channel_config *base_cfg, void *event_arg);
403extern void vio_ldc_free(struct vio_driver_state *vio); 403void vio_ldc_free(struct vio_driver_state *vio);
404extern int vio_driver_init(struct vio_driver_state *vio, struct vio_dev *vdev, 404int vio_driver_init(struct vio_driver_state *vio, struct vio_dev *vdev,
405 u8 dev_class, struct vio_version *ver_table, 405 u8 dev_class, struct vio_version *ver_table,
406 int ver_table_size, struct vio_driver_ops *ops, 406 int ver_table_size, struct vio_driver_ops *ops,
407 char *name); 407 char *name);
408 408
409extern void vio_port_up(struct vio_driver_state *vio); 409void vio_port_up(struct vio_driver_state *vio);
410 410
411#endif /* _SPARC64_VIO_H */ 411#endif /* _SPARC64_VIO_H */
diff --git a/arch/sparc/include/asm/visasm.h b/arch/sparc/include/asm/visasm.h
index 39ca301920db..b26673759283 100644
--- a/arch/sparc/include/asm/visasm.h
+++ b/arch/sparc/include/asm/visasm.h
@@ -57,7 +57,8 @@ static inline void save_and_clear_fpu(void) {
57" " : : "i" (FPRS_FEF|FPRS_DU) : 57" " : : "i" (FPRS_FEF|FPRS_DU) :
58 "o5", "g1", "g2", "g3", "g7", "cc"); 58 "o5", "g1", "g2", "g3", "g7", "cc");
59} 59}
60extern int vis_emul(struct pt_regs *, unsigned int); 60
61int vis_emul(struct pt_regs *, unsigned int);
61#endif 62#endif
62 63
63#endif /* _SPARC64_ASI_H */ 64#endif /* _SPARC64_ASI_H */
diff --git a/arch/sparc/include/asm/xor_64.h b/arch/sparc/include/asm/xor_64.h
index ee8edc68423e..50c882856031 100644
--- a/arch/sparc/include/asm/xor_64.h
+++ b/arch/sparc/include/asm/xor_64.h
@@ -20,13 +20,13 @@
20 20
21#include <asm/spitfire.h> 21#include <asm/spitfire.h>
22 22
23extern void xor_vis_2(unsigned long, unsigned long *, unsigned long *); 23void xor_vis_2(unsigned long, unsigned long *, unsigned long *);
24extern void xor_vis_3(unsigned long, unsigned long *, unsigned long *, 24void xor_vis_3(unsigned long, unsigned long *, unsigned long *,
25 unsigned long *); 25 unsigned long *);
26extern void xor_vis_4(unsigned long, unsigned long *, unsigned long *, 26void xor_vis_4(unsigned long, unsigned long *, unsigned long *,
27 unsigned long *, unsigned long *); 27 unsigned long *, unsigned long *);
28extern void xor_vis_5(unsigned long, unsigned long *, unsigned long *, 28void xor_vis_5(unsigned long, unsigned long *, unsigned long *,
29 unsigned long *, unsigned long *, unsigned long *); 29 unsigned long *, unsigned long *, unsigned long *);
30 30
31/* XXX Ugh, write cheetah versions... -DaveM */ 31/* XXX Ugh, write cheetah versions... -DaveM */
32 32
@@ -38,13 +38,13 @@ static struct xor_block_template xor_block_VIS = {
38 .do_5 = xor_vis_5, 38 .do_5 = xor_vis_5,
39}; 39};
40 40
41extern void xor_niagara_2(unsigned long, unsigned long *, unsigned long *); 41void xor_niagara_2(unsigned long, unsigned long *, unsigned long *);
42extern void xor_niagara_3(unsigned long, unsigned long *, unsigned long *, 42void xor_niagara_3(unsigned long, unsigned long *, unsigned long *,
43 unsigned long *); 43 unsigned long *);
44extern void xor_niagara_4(unsigned long, unsigned long *, unsigned long *, 44void xor_niagara_4(unsigned long, unsigned long *, unsigned long *,
45 unsigned long *, unsigned long *); 45 unsigned long *, unsigned long *);
46extern void xor_niagara_5(unsigned long, unsigned long *, unsigned long *, 46void xor_niagara_5(unsigned long, unsigned long *, unsigned long *,
47 unsigned long *, unsigned long *, unsigned long *); 47 unsigned long *, unsigned long *, unsigned long *);
48 48
49static struct xor_block_template xor_block_niagara = { 49static struct xor_block_template xor_block_niagara = {
50 .name = "Niagara", 50 .name = "Niagara",