diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-ia64/hw_irq.h | 18 | ||||
-rw-r--r-- | include/asm-ia64/iosapic.h | 6 | ||||
-rw-r--r-- | include/asm-ia64/irq.h | 9 | ||||
-rw-r--r-- | include/asm-ia64/rwsem.h | 4 | ||||
-rw-r--r-- | include/asm-ia64/unistd.h | 2 | ||||
-rw-r--r-- | include/linux/clocksource.h | 6 | ||||
-rw-r--r-- | include/linux/timex.h | 60 |
7 files changed, 38 insertions, 67 deletions
diff --git a/include/asm-ia64/hw_irq.h b/include/asm-ia64/hw_irq.h index c054d7a9aaa7..efa1b8f7251d 100644 --- a/include/asm-ia64/hw_irq.h +++ b/include/asm-ia64/hw_irq.h | |||
@@ -90,13 +90,27 @@ enum { | |||
90 | extern __u8 isa_irq_to_vector_map[16]; | 90 | extern __u8 isa_irq_to_vector_map[16]; |
91 | #define isa_irq_to_vector(x) isa_irq_to_vector_map[(x)] | 91 | #define isa_irq_to_vector(x) isa_irq_to_vector_map[(x)] |
92 | 92 | ||
93 | struct irq_cfg { | ||
94 | ia64_vector vector; | ||
95 | cpumask_t domain; | ||
96 | }; | ||
97 | extern spinlock_t vector_lock; | ||
98 | extern struct irq_cfg irq_cfg[NR_IRQS]; | ||
99 | #define irq_to_domain(x) irq_cfg[(x)].domain | ||
100 | DECLARE_PER_CPU(int[IA64_NUM_VECTORS], vector_irq); | ||
101 | |||
93 | extern struct hw_interrupt_type irq_type_ia64_lsapic; /* CPU-internal interrupt controller */ | 102 | extern struct hw_interrupt_type irq_type_ia64_lsapic; /* CPU-internal interrupt controller */ |
94 | 103 | ||
104 | extern int bind_irq_vector(int irq, int vector, cpumask_t domain); | ||
95 | extern int assign_irq_vector (int irq); /* allocate a free vector */ | 105 | extern int assign_irq_vector (int irq); /* allocate a free vector */ |
96 | extern void free_irq_vector (int vector); | 106 | extern void free_irq_vector (int vector); |
97 | extern int reserve_irq_vector (int vector); | 107 | extern int reserve_irq_vector (int vector); |
108 | extern void __setup_vector_irq(int cpu); | ||
109 | extern int reassign_irq_vector(int irq, int cpu); | ||
98 | extern void ia64_send_ipi (int cpu, int vector, int delivery_mode, int redirect); | 110 | extern void ia64_send_ipi (int cpu, int vector, int delivery_mode, int redirect); |
99 | extern void register_percpu_irq (ia64_vector vec, struct irqaction *action); | 111 | extern void register_percpu_irq (ia64_vector vec, struct irqaction *action); |
112 | extern int check_irq_used (int irq); | ||
113 | extern void destroy_and_reserve_irq (unsigned int irq); | ||
100 | 114 | ||
101 | static inline void ia64_resend_irq(unsigned int vector) | 115 | static inline void ia64_resend_irq(unsigned int vector) |
102 | { | 116 | { |
@@ -113,7 +127,7 @@ extern irq_desc_t irq_desc[NR_IRQS]; | |||
113 | static inline unsigned int | 127 | static inline unsigned int |
114 | __ia64_local_vector_to_irq (ia64_vector vec) | 128 | __ia64_local_vector_to_irq (ia64_vector vec) |
115 | { | 129 | { |
116 | return (unsigned int) vec; | 130 | return __get_cpu_var(vector_irq)[vec]; |
117 | } | 131 | } |
118 | #endif | 132 | #endif |
119 | 133 | ||
@@ -131,7 +145,7 @@ __ia64_local_vector_to_irq (ia64_vector vec) | |||
131 | static inline ia64_vector | 145 | static inline ia64_vector |
132 | irq_to_vector (int irq) | 146 | irq_to_vector (int irq) |
133 | { | 147 | { |
134 | return (ia64_vector) irq; | 148 | return irq_cfg[irq].vector; |
135 | } | 149 | } |
136 | 150 | ||
137 | /* | 151 | /* |
diff --git a/include/asm-ia64/iosapic.h b/include/asm-ia64/iosapic.h index 421cb6b62a7c..b8f712859140 100644 --- a/include/asm-ia64/iosapic.h +++ b/include/asm-ia64/iosapic.h | |||
@@ -47,19 +47,21 @@ | |||
47 | #define IOSAPIC_MASK_SHIFT 16 | 47 | #define IOSAPIC_MASK_SHIFT 16 |
48 | #define IOSAPIC_MASK (1<<IOSAPIC_MASK_SHIFT) | 48 | #define IOSAPIC_MASK (1<<IOSAPIC_MASK_SHIFT) |
49 | 49 | ||
50 | #define IOSAPIC_VECTOR_MASK 0xffffff00 | ||
51 | |||
50 | #ifndef __ASSEMBLY__ | 52 | #ifndef __ASSEMBLY__ |
51 | 53 | ||
52 | #ifdef CONFIG_IOSAPIC | 54 | #ifdef CONFIG_IOSAPIC |
53 | 55 | ||
54 | #define NR_IOSAPICS 256 | 56 | #define NR_IOSAPICS 256 |
55 | 57 | ||
56 | static inline unsigned int iosapic_read(char __iomem *iosapic, unsigned int reg) | 58 | static inline unsigned int __iosapic_read(char __iomem *iosapic, unsigned int reg) |
57 | { | 59 | { |
58 | writel(reg, iosapic + IOSAPIC_REG_SELECT); | 60 | writel(reg, iosapic + IOSAPIC_REG_SELECT); |
59 | return readl(iosapic + IOSAPIC_WINDOW); | 61 | return readl(iosapic + IOSAPIC_WINDOW); |
60 | } | 62 | } |
61 | 63 | ||
62 | static inline void iosapic_write(char __iomem *iosapic, unsigned int reg, u32 val) | 64 | static inline void __iosapic_write(char __iomem *iosapic, unsigned int reg, u32 val) |
63 | { | 65 | { |
64 | writel(reg, iosapic + IOSAPIC_REG_SELECT); | 66 | writel(reg, iosapic + IOSAPIC_REG_SELECT); |
65 | writel(val, iosapic + IOSAPIC_WINDOW); | 67 | writel(val, iosapic + IOSAPIC_WINDOW); |
diff --git a/include/asm-ia64/irq.h b/include/asm-ia64/irq.h index 67221615e317..35b360b82e43 100644 --- a/include/asm-ia64/irq.h +++ b/include/asm-ia64/irq.h | |||
@@ -14,8 +14,13 @@ | |||
14 | #include <linux/types.h> | 14 | #include <linux/types.h> |
15 | #include <linux/cpumask.h> | 15 | #include <linux/cpumask.h> |
16 | 16 | ||
17 | #define NR_IRQS 256 | 17 | #define NR_VECTORS 256 |
18 | #define NR_IRQ_VECTORS NR_IRQS | 18 | |
19 | #if (NR_VECTORS + 32 * NR_CPUS) < 1024 | ||
20 | #define NR_IRQS (NR_VECTORS + 32 * NR_CPUS) | ||
21 | #else | ||
22 | #define NR_IRQS 1024 | ||
23 | #endif | ||
19 | 24 | ||
20 | static __inline__ int | 25 | static __inline__ int |
21 | irq_canonicalize (int irq) | 26 | irq_canonicalize (int irq) |
diff --git a/include/asm-ia64/rwsem.h b/include/asm-ia64/rwsem.h index 2d1640cc240a..8aba06a7b038 100644 --- a/include/asm-ia64/rwsem.h +++ b/include/asm-ia64/rwsem.h | |||
@@ -21,6 +21,10 @@ | |||
21 | #ifndef _ASM_IA64_RWSEM_H | 21 | #ifndef _ASM_IA64_RWSEM_H |
22 | #define _ASM_IA64_RWSEM_H | 22 | #define _ASM_IA64_RWSEM_H |
23 | 23 | ||
24 | #ifndef _LINUX_RWSEM_H | ||
25 | #error "Please don't include <asm/rwsem.h> directly, use <linux/rwsem.h> instead." | ||
26 | #endif | ||
27 | |||
24 | #include <linux/list.h> | 28 | #include <linux/list.h> |
25 | #include <linux/spinlock.h> | 29 | #include <linux/spinlock.h> |
26 | 30 | ||
diff --git a/include/asm-ia64/unistd.h b/include/asm-ia64/unistd.h index 441c9e001776..315f8de950a2 100644 --- a/include/asm-ia64/unistd.h +++ b/include/asm-ia64/unistd.h | |||
@@ -292,7 +292,7 @@ | |||
292 | #define __NR_sync_file_range 1300 | 292 | #define __NR_sync_file_range 1300 |
293 | #define __NR_tee 1301 | 293 | #define __NR_tee 1301 |
294 | #define __NR_vmsplice 1302 | 294 | #define __NR_vmsplice 1302 |
295 | /* 1303 reserved for move_pages */ | 295 | #define __NR_fallocate 1303 |
296 | #define __NR_getcpu 1304 | 296 | #define __NR_getcpu 1304 |
297 | #define __NR_epoll_pwait 1305 | 297 | #define __NR_epoll_pwait 1305 |
298 | #define __NR_utimensat 1306 | 298 | #define __NR_utimensat 1306 |
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index bf297b03a4e4..16ea3374dddf 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
@@ -67,6 +67,12 @@ struct clocksource { | |||
67 | unsigned long flags; | 67 | unsigned long flags; |
68 | cycle_t (*vread)(void); | 68 | cycle_t (*vread)(void); |
69 | void (*resume)(void); | 69 | void (*resume)(void); |
70 | #ifdef CONFIG_IA64 | ||
71 | void *fsys_mmio; /* used by fsyscall asm code */ | ||
72 | #define CLKSRC_FSYS_MMIO_SET(mmio, addr) ((mmio) = (addr)) | ||
73 | #else | ||
74 | #define CLKSRC_FSYS_MMIO_SET(mmio, addr) do { } while (0) | ||
75 | #endif | ||
70 | 76 | ||
71 | /* timekeeping specific data, ignore */ | 77 | /* timekeeping specific data, ignore */ |
72 | cycle_t cycle_interval; | 78 | cycle_t cycle_interval; |
diff --git a/include/linux/timex.h b/include/linux/timex.h index da929dbbea2a..37ac3ff90faf 100644 --- a/include/linux/timex.h +++ b/include/linux/timex.h | |||
@@ -224,66 +224,6 @@ static inline int ntp_synced(void) | |||
224 | __x < 0 ? -(-__x >> __s) : __x >> __s; \ | 224 | __x < 0 ? -(-__x >> __s) : __x >> __s; \ |
225 | }) | 225 | }) |
226 | 226 | ||
227 | |||
228 | #ifdef CONFIG_TIME_INTERPOLATION | ||
229 | |||
230 | #define TIME_SOURCE_CPU 0 | ||
231 | #define TIME_SOURCE_MMIO64 1 | ||
232 | #define TIME_SOURCE_MMIO32 2 | ||
233 | #define TIME_SOURCE_FUNCTION 3 | ||
234 | |||
235 | /* For proper operations time_interpolator clocks must run slightly slower | ||
236 | * than the standard clock since the interpolator may only correct by having | ||
237 | * time jump forward during a tick. A slower clock is usually a side effect | ||
238 | * of the integer divide of the nanoseconds in a second by the frequency. | ||
239 | * The accuracy of the division can be increased by specifying a shift. | ||
240 | * However, this may cause the clock not to be slow enough. | ||
241 | * The interpolator will self-tune the clock by slowing down if no | ||
242 | * resets occur or speeding up if the time jumps per analysis cycle | ||
243 | * become too high. | ||
244 | * | ||
245 | * Setting jitter compensates for a fluctuating timesource by comparing | ||
246 | * to the last value read from the timesource to insure that an earlier value | ||
247 | * is not returned by a later call. The price to pay | ||
248 | * for the compensation is that the timer routines are not as scalable anymore. | ||
249 | */ | ||
250 | |||
251 | struct time_interpolator { | ||
252 | u16 source; /* time source flags */ | ||
253 | u8 shift; /* increases accuracy of multiply by shifting. */ | ||
254 | /* Note that bits may be lost if shift is set too high */ | ||
255 | u8 jitter; /* if set compensate for fluctuations */ | ||
256 | u32 nsec_per_cyc; /* set by register_time_interpolator() */ | ||
257 | void *addr; /* address of counter or function */ | ||
258 | cycles_t mask; /* mask the valid bits of the counter */ | ||
259 | unsigned long offset; /* nsec offset at last update of interpolator */ | ||
260 | u64 last_counter; /* counter value in units of the counter at last update */ | ||
261 | cycles_t last_cycle; /* Last timer value if TIME_SOURCE_JITTER is set */ | ||
262 | u64 frequency; /* frequency in counts/second */ | ||
263 | long drift; /* drift in parts-per-million (or -1) */ | ||
264 | unsigned long skips; /* skips forward */ | ||
265 | unsigned long ns_skipped; /* nanoseconds skipped */ | ||
266 | struct time_interpolator *next; | ||
267 | }; | ||
268 | |||
269 | extern void register_time_interpolator(struct time_interpolator *); | ||
270 | extern void unregister_time_interpolator(struct time_interpolator *); | ||
271 | extern void time_interpolator_reset(void); | ||
272 | extern unsigned long time_interpolator_get_offset(void); | ||
273 | extern void time_interpolator_update(long delta_nsec); | ||
274 | |||
275 | #else /* !CONFIG_TIME_INTERPOLATION */ | ||
276 | |||
277 | static inline void time_interpolator_reset(void) | ||
278 | { | ||
279 | } | ||
280 | |||
281 | static inline void time_interpolator_update(long delta_nsec) | ||
282 | { | ||
283 | } | ||
284 | |||
285 | #endif /* !CONFIG_TIME_INTERPOLATION */ | ||
286 | |||
287 | #define TICK_LENGTH_SHIFT 32 | 227 | #define TICK_LENGTH_SHIFT 32 |
288 | 228 | ||
289 | #ifdef CONFIG_NO_HZ | 229 | #ifdef CONFIG_NO_HZ |