diff options
Diffstat (limited to 'include/asm-powerpc')
-rw-r--r-- | include/asm-powerpc/ide.h | 57 | ||||
-rw-r--r-- | include/asm-powerpc/mediabay.h | 6 | ||||
-rw-r--r-- | include/asm-powerpc/semaphore.h | 95 | ||||
-rw-r--r-- | include/asm-powerpc/topology.h | 3 |
4 files changed, 39 insertions, 122 deletions
diff --git a/include/asm-powerpc/ide.h b/include/asm-powerpc/ide.h index 6d50310ecaea..3d90bf7d3d73 100644 --- a/include/asm-powerpc/ide.h +++ b/include/asm-powerpc/ide.h | |||
@@ -31,39 +31,48 @@ | |||
31 | #include <linux/hdreg.h> | 31 | #include <linux/hdreg.h> |
32 | #include <linux/ioport.h> | 32 | #include <linux/ioport.h> |
33 | 33 | ||
34 | struct ide_machdep_calls { | 34 | /* FIXME: use ide_platform host driver */ |
35 | int (*default_irq)(unsigned long base); | ||
36 | unsigned long (*default_io_base)(int index); | ||
37 | void (*ide_init_hwif)(hw_regs_t *hw, | ||
38 | unsigned long data_port, | ||
39 | unsigned long ctrl_port, | ||
40 | int *irq); | ||
41 | }; | ||
42 | |||
43 | extern struct ide_machdep_calls ppc_ide_md; | ||
44 | |||
45 | #define IDE_ARCH_OBSOLETE_DEFAULTS | ||
46 | |||
47 | static __inline__ int ide_default_irq(unsigned long base) | 35 | static __inline__ int ide_default_irq(unsigned long base) |
48 | { | 36 | { |
49 | if (ppc_ide_md.default_irq) | 37 | #ifdef CONFIG_PPLUS |
50 | return ppc_ide_md.default_irq(base); | 38 | switch (base) { |
39 | case 0x1f0: return 14; | ||
40 | case 0x170: return 15; | ||
41 | } | ||
42 | #endif | ||
43 | #ifdef CONFIG_PPC_PREP | ||
44 | switch (base) { | ||
45 | case 0x1f0: return 13; | ||
46 | case 0x170: return 13; | ||
47 | case 0x1e8: return 11; | ||
48 | case 0x168: return 10; | ||
49 | case 0xfff0: return 14; /* MCP(N)750 ide0 */ | ||
50 | case 0xffe0: return 15; /* MCP(N)750 ide1 */ | ||
51 | } | ||
52 | #endif | ||
51 | return 0; | 53 | return 0; |
52 | } | 54 | } |
53 | 55 | ||
56 | /* FIXME: use ide_platform host driver */ | ||
54 | static __inline__ unsigned long ide_default_io_base(int index) | 57 | static __inline__ unsigned long ide_default_io_base(int index) |
55 | { | 58 | { |
56 | if (ppc_ide_md.default_io_base) | 59 | #ifdef CONFIG_PPLUS |
57 | return ppc_ide_md.default_io_base(index); | 60 | switch (index) { |
61 | case 0: return 0x1f0; | ||
62 | case 1: return 0x170; | ||
63 | } | ||
64 | #endif | ||
65 | #ifdef CONFIG_PPC_PREP | ||
66 | switch (index) { | ||
67 | case 0: return 0x1f0; | ||
68 | case 1: return 0x170; | ||
69 | case 2: return 0x1e8; | ||
70 | case 3: return 0x168; | ||
71 | } | ||
72 | #endif | ||
58 | return 0; | 73 | return 0; |
59 | } | 74 | } |
60 | 75 | ||
61 | #ifdef CONFIG_PCI | ||
62 | #define ide_init_default_irq(base) (0) | ||
63 | #else | ||
64 | #define ide_init_default_irq(base) ide_default_irq(base) | ||
65 | #endif | ||
66 | |||
67 | #ifdef CONFIG_BLK_DEV_MPC8xx_IDE | 76 | #ifdef CONFIG_BLK_DEV_MPC8xx_IDE |
68 | #define IDE_ARCH_ACK_INTR 1 | 77 | #define IDE_ARCH_ACK_INTR 1 |
69 | #define ide_ack_intr(hwif) ((hwif)->ack_intr ? (hwif)->ack_intr(hwif) : 1) | 78 | #define ide_ack_intr(hwif) ((hwif)->ack_intr ? (hwif)->ack_intr(hwif) : 1) |
@@ -71,8 +80,6 @@ static __inline__ unsigned long ide_default_io_base(int index) | |||
71 | 80 | ||
72 | #endif /* __powerpc64__ */ | 81 | #endif /* __powerpc64__ */ |
73 | 82 | ||
74 | #define ide_default_io_ctl(base) ((base) + 0x206) /* obsolete */ | ||
75 | |||
76 | #endif /* __KERNEL__ */ | 83 | #endif /* __KERNEL__ */ |
77 | 84 | ||
78 | #endif /* _ASM_POWERPC_IDE_H */ | 85 | #endif /* _ASM_POWERPC_IDE_H */ |
diff --git a/include/asm-powerpc/mediabay.h b/include/asm-powerpc/mediabay.h index de83fe196309..df111c362a7f 100644 --- a/include/asm-powerpc/mediabay.h +++ b/include/asm-powerpc/mediabay.h | |||
@@ -22,10 +22,14 @@ int check_media_bay(struct device_node *which_bay, int what); | |||
22 | /* Number of bays in the machine or 0 */ | 22 | /* Number of bays in the machine or 0 */ |
23 | extern int media_bay_count; | 23 | extern int media_bay_count; |
24 | 24 | ||
25 | #ifdef CONFIG_BLK_DEV_IDE_PMAC | ||
26 | #include <linux/ide.h> | ||
27 | |||
25 | int check_media_bay_by_base(unsigned long base, int what); | 28 | int check_media_bay_by_base(unsigned long base, int what); |
26 | /* called by IDE PMAC host driver to register IDE controller for media bay */ | 29 | /* called by IDE PMAC host driver to register IDE controller for media bay */ |
27 | int media_bay_set_ide_infos(struct device_node *which_bay, unsigned long base, | 30 | int media_bay_set_ide_infos(struct device_node *which_bay, unsigned long base, |
28 | int irq, int index); | 31 | int irq, ide_hwif_t *hwif); |
32 | #endif | ||
29 | 33 | ||
30 | #endif /* __KERNEL__ */ | 34 | #endif /* __KERNEL__ */ |
31 | #endif /* _PPC_MEDIABAY_H */ | 35 | #endif /* _PPC_MEDIABAY_H */ |
diff --git a/include/asm-powerpc/semaphore.h b/include/asm-powerpc/semaphore.h index 48dd32e07749..d9b2034ed1d2 100644 --- a/include/asm-powerpc/semaphore.h +++ b/include/asm-powerpc/semaphore.h | |||
@@ -1,94 +1 @@ | |||
1 | #ifndef _ASM_POWERPC_SEMAPHORE_H | #include <linux/semaphore.h> | |
2 | #define _ASM_POWERPC_SEMAPHORE_H | ||
3 | |||
4 | /* | ||
5 | * Remove spinlock-based RW semaphores; RW semaphore definitions are | ||
6 | * now in rwsem.h and we use the generic lib/rwsem.c implementation. | ||
7 | * Rework semaphores to use atomic_dec_if_positive. | ||
8 | * -- Paul Mackerras (paulus@samba.org) | ||
9 | */ | ||
10 | |||
11 | #ifdef __KERNEL__ | ||
12 | |||
13 | #include <asm/atomic.h> | ||
14 | #include <asm/system.h> | ||
15 | #include <linux/wait.h> | ||
16 | #include <linux/rwsem.h> | ||
17 | |||
18 | struct semaphore { | ||
19 | /* | ||
20 | * Note that any negative value of count is equivalent to 0, | ||
21 | * but additionally indicates that some process(es) might be | ||
22 | * sleeping on `wait'. | ||
23 | */ | ||
24 | atomic_t count; | ||
25 | wait_queue_head_t wait; | ||
26 | }; | ||
27 | |||
28 | #define __SEMAPHORE_INITIALIZER(name, n) \ | ||
29 | { \ | ||
30 | .count = ATOMIC_INIT(n), \ | ||
31 | .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \ | ||
32 | } | ||
33 | |||
34 | #define __DECLARE_SEMAPHORE_GENERIC(name, count) \ | ||
35 | struct semaphore name = __SEMAPHORE_INITIALIZER(name,count) | ||
36 | |||
37 | #define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name, 1) | ||
38 | |||
39 | static inline void sema_init (struct semaphore *sem, int val) | ||
40 | { | ||
41 | atomic_set(&sem->count, val); | ||
42 | init_waitqueue_head(&sem->wait); | ||
43 | } | ||
44 | |||
45 | static inline void init_MUTEX (struct semaphore *sem) | ||
46 | { | ||
47 | sema_init(sem, 1); | ||
48 | } | ||
49 | |||
50 | static inline void init_MUTEX_LOCKED (struct semaphore *sem) | ||
51 | { | ||
52 | sema_init(sem, 0); | ||
53 | } | ||
54 | |||
55 | extern void __down(struct semaphore * sem); | ||
56 | extern int __down_interruptible(struct semaphore * sem); | ||
57 | extern void __up(struct semaphore * sem); | ||
58 | |||
59 | static inline void down(struct semaphore * sem) | ||
60 | { | ||
61 | might_sleep(); | ||
62 | |||
63 | /* | ||
64 | * Try to get the semaphore, take the slow path if we fail. | ||
65 | */ | ||
66 | if (unlikely(atomic_dec_return(&sem->count) < 0)) | ||
67 | __down(sem); | ||
68 | } | ||
69 | |||
70 | static inline int down_interruptible(struct semaphore * sem) | ||
71 | { | ||
72 | int ret = 0; | ||
73 | |||
74 | might_sleep(); | ||
75 | |||
76 | if (unlikely(atomic_dec_return(&sem->count) < 0)) | ||
77 | ret = __down_interruptible(sem); | ||
78 | return ret; | ||
79 | } | ||
80 | |||
81 | static inline int down_trylock(struct semaphore * sem) | ||
82 | { | ||
83 | return atomic_dec_if_positive(&sem->count) < 0; | ||
84 | } | ||
85 | |||
86 | static inline void up(struct semaphore * sem) | ||
87 | { | ||
88 | if (unlikely(atomic_inc_return(&sem->count) <= 0)) | ||
89 | __up(sem); | ||
90 | } | ||
91 | |||
92 | #endif /* __KERNEL__ */ | ||
93 | |||
94 | #endif /* _ASM_POWERPC_SEMAPHORE_H */ | ||
diff --git a/include/asm-powerpc/topology.h b/include/asm-powerpc/topology.h index ca23b681ad05..100c6fbfc587 100644 --- a/include/asm-powerpc/topology.h +++ b/include/asm-powerpc/topology.h | |||
@@ -96,11 +96,10 @@ static inline void sysfs_remove_device_from_node(struct sys_device *dev, | |||
96 | { | 96 | { |
97 | } | 97 | } |
98 | 98 | ||
99 | #endif /* CONFIG_NUMA */ | ||
99 | 100 | ||
100 | #include <asm-generic/topology.h> | 101 | #include <asm-generic/topology.h> |
101 | 102 | ||
102 | #endif /* CONFIG_NUMA */ | ||
103 | |||
104 | #ifdef CONFIG_SMP | 103 | #ifdef CONFIG_SMP |
105 | #include <asm/cputable.h> | 104 | #include <asm/cputable.h> |
106 | #define smt_capable() (cpu_has_feature(CPU_FTR_SMT)) | 105 | #define smt_capable() (cpu_has_feature(CPU_FTR_SMT)) |