1 --- linux/include/asm-generic/4level-fixup.h
2 +++ linux/include/asm-generic/4level-fixup.h
4 +#ifndef _4LEVEL_FIXUP_H
5 +#define _4LEVEL_FIXUP_H
7 +#define __ARCH_HAS_4LEVEL_HACK
9 +#define PUD_SIZE PGDIR_SIZE
10 +#define PUD_MASK PGDIR_MASK
11 +#define PTRS_PER_PUD 1
15 +#define pmd_alloc(mm, pud, address) \
17 + if (pgd_none(*pud)) \
18 + ret = __pmd_alloc(mm, pud, address); \
20 + ret = pmd_offset(pud, address); \
24 +#define pud_alloc(mm, pgd, address) (pgd)
25 +#define pud_offset(pgd, start) (pgd)
26 +#define pud_none(pud) 0
27 +#define pud_bad(pud) 0
28 +#define pud_present(pud) 1
29 +#define pud_ERROR(pud) do { } while (0)
30 +#define pud_clear(pud) pgd_clear(pud)
33 +#define pud_free_tlb(tlb, x) do { } while (0)
34 +#define pud_free(x) do { } while (0)
35 +#define __pud_free_tlb(tlb, x) do { } while (0)
38 --- linux/include/asm-generic/bitops.h
39 +++ linux/include/asm-generic/bitops.h
41 +#ifndef _ASM_GENERIC_BITOPS_H_
42 +#define _ASM_GENERIC_BITOPS_H_
45 + * For the benefit of those who are trying to port Linux to another
46 + * architecture, here are some C-language equivalents. You should
47 + * recode these in the native assembly language, if at all possible.
48 + * To guarantee atomicity, these routines call cli() and sti() to
49 + * disable interrupts while they operate. (You have to provide inline
50 + * routines to cli() and sti().)
52 + * Also note, these routines assume that you have 32 bit longs.
53 + * You will have to change this if you are trying to port Linux to the
54 + * Alpha architecture or to a Cray. :-)
56 + * C language equivalents written by Theodore Ts'o, 9/26/92
59 +extern __inline__ int set_bit(int nr,long * addr)
64 + mask = 1 << (nr & 0x1f);
66 + retval = (mask & *addr) != 0;
72 +extern __inline__ int clear_bit(int nr, long * addr)
77 + mask = 1 << (nr & 0x1f);
79 + retval = (mask & *addr) != 0;
85 +extern __inline__ int test_bit(int nr, const unsigned long * addr)
90 + mask = 1 << (nr & 0x1f);
91 + return ((mask & *addr) != 0);
95 + * fls: find last bit set.
98 +#define fls(x) generic_fls(x)
103 + * ffs: find first bit set. This is defined the same way as
104 + * the libc and compiler builtin ffs routines, therefore
105 + * differs in spirit from the above ffz (man ffs).
108 +#define ffs(x) generic_ffs(x)
111 + * hweightN: returns the hamming weight (i.e. the number
112 + * of bits set) of a N-bit word
115 +#define hweight32(x) generic_hweight32(x)
116 +#define hweight16(x) generic_hweight16(x)
117 +#define hweight8(x) generic_hweight8(x)
119 +#endif /* __KERNEL__ */
121 +#endif /* _ASM_GENERIC_BITOPS_H */
122 --- linux/include/asm-generic/bug.h
123 +++ linux/include/asm-generic/bug.h
125 +#ifndef _ASM_GENERIC_BUG_H
126 +#define _ASM_GENERIC_BUG_H
128 +#include <linux/compiler.h>
129 +// #include <linux/config.h>
131 +#ifndef HAVE_ARCH_BUG
132 +#define BUG() do { \
133 + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
138 +#ifndef HAVE_ARCH_PAGE_BUG
139 +#define PAGE_BUG(page) do { \
140 + printk("page BUG for page at %p\n", page); \
145 +#ifndef HAVE_ARCH_BUG_ON
146 +#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
149 +#ifndef HAVE_ARCH_WARN_ON
150 +#define WARN_ON(condition) do { \
151 + if (unlikely((condition)!=0)) { \
152 + printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
159 --- linux/include/asm-generic/cpumask_arith.h
160 +++ linux/include/asm-generic/cpumask_arith.h
162 +#ifndef __ASM_GENERIC_CPUMASK_ARITH_H
163 +#define __ASM_GENERIC_CPUMASK_ARITH_H
166 + * Arithmetic type -based cpu bitmaps. A single unsigned long is used
167 + * to contain the whole cpu bitmap.
170 +#define cpu_set(cpu, map) set_bit(cpu, &(map))
171 +#define cpu_clear(cpu, map) clear_bit(cpu, &(map))
172 +#define cpu_isset(cpu, map) test_bit(cpu, &(map))
173 +#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, &(map))
175 +#define cpus_and(dst,src1,src2) do { dst = (src1) & (src2); } while (0)
176 +#define cpus_or(dst,src1,src2) do { dst = (src1) | (src2); } while (0)
177 +#define cpus_clear(map) do { map = 0; } while (0)
178 +#define cpus_complement(map) do { map = ~(map); } while (0)
179 +#define cpus_equal(map1, map2) ((map1) == (map2))
180 +#define cpus_empty(map) ((map) == 0)
181 +#define cpus_addr(map) (&(map))
183 +#if BITS_PER_LONG == 32
184 +#define cpus_weight(map) hweight32(map)
185 +#elif BITS_PER_LONG == 64
186 +#define cpus_weight(map) hweight64(map)
189 +#define cpus_shift_right(dst, src, n) do { dst = (src) >> (n); } while (0)
190 +#define cpus_shift_left(dst, src, n) do { dst = (src) << (n); } while (0)
192 +#define any_online_cpu(map) \
194 + cpumask_t __tmp__; \
195 + cpus_and(__tmp__, map, cpu_online_map); \
196 + __tmp__ ? first_cpu(__tmp__) : NR_CPUS; \
199 +#define CPU_MASK_ALL (~((cpumask_t)0) >> (8*sizeof(cpumask_t) - NR_CPUS))
200 +#define CPU_MASK_NONE ((cpumask_t)0)
202 +/* only ever use this for things that are _never_ used on large boxen */
203 +#define cpus_coerce(map) ((unsigned long)(map))
204 +#define cpus_promote(map) ({ map; })
205 +#define cpumask_of_cpu(cpu) ({ ((cpumask_t)1) << (cpu); })
207 +#define first_cpu(map) __ffs(map)
208 +#define next_cpu(cpu, map) find_next_bit(&(map), NR_CPUS, cpu + 1)
210 +#endif /* __ASM_GENERIC_CPUMASK_ARITH_H */
211 --- linux/include/asm-generic/cpumask_array.h
212 +++ linux/include/asm-generic/cpumask_array.h
214 +#ifndef __ASM_GENERIC_CPUMASK_ARRAY_H
215 +#define __ASM_GENERIC_CPUMASK_ARRAY_H
218 + * Array-based cpu bitmaps. An array of unsigned longs is used to contain
219 + * the bitmap, and then contained in a structure so it may be passed by
223 +#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
225 +#define cpu_set(cpu, map) set_bit(cpu, (map).mask)
226 +#define cpu_clear(cpu, map) clear_bit(cpu, (map).mask)
227 +#define cpu_isset(cpu, map) test_bit(cpu, (map).mask)
228 +#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, (map).mask)
230 +#define cpus_and(dst,src1,src2) bitmap_and((dst).mask,(src1).mask, (src2).mask, NR_CPUS)
231 +#define cpus_or(dst,src1,src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, NR_CPUS)
232 +#define cpus_clear(map) bitmap_clear((map).mask, NR_CPUS)
233 +#define cpus_complement(map) bitmap_complement((map).mask, NR_CPUS)
234 +#define cpus_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, NR_CPUS)
235 +#define cpus_empty(map) bitmap_empty(map.mask, NR_CPUS)
236 +#define cpus_addr(map) ((map).mask)
237 +#define cpus_weight(map) bitmap_weight((map).mask, NR_CPUS)
238 +#define cpus_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, NR_CPUS)
239 +#define cpus_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, NR_CPUS)
240 +#define first_cpu(map) find_first_bit((map).mask, NR_CPUS)
241 +#define next_cpu(cpu, map) find_next_bit((map).mask, NR_CPUS, cpu + 1)
243 +/* only ever use this for things that are _never_ used on large boxen */
244 +#define cpus_coerce(map) ((map).mask[0])
245 +#define cpus_promote(map) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
246 + __cpu_mask.mask[0] = map; \
249 +#define cpumask_of_cpu(cpu) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
250 + cpu_set(cpu, __cpu_mask); \
253 +#define any_online_cpu(map) \
255 + cpumask_t __tmp__; \
256 + cpus_and(__tmp__, map, cpu_online_map); \
257 + find_first_bit(__tmp__.mask, NR_CPUS); \
262 + * um, these need to be usable as static initializers
264 +#define CPU_MASK_ALL { {[0 ... CPU_ARRAY_SIZE-1] = ~0UL} }
265 +#define CPU_MASK_NONE { {[0 ... CPU_ARRAY_SIZE-1] = 0UL} }
267 +#endif /* __ASM_GENERIC_CPUMASK_ARRAY_H */
268 --- linux/include/asm-generic/cpumask_const_reference.h
269 +++ linux/include/asm-generic/cpumask_const_reference.h
271 +#ifndef __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
272 +#define __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
274 +struct cpumask_ref {
275 + const cpumask_t *val;
278 +typedef const struct cpumask_ref cpumask_const_t;
280 +#define mk_cpumask_const(map) ((cpumask_const_t){ &(map) })
281 +#define cpu_isset_const(cpu, map) cpu_isset(cpu, *(map).val)
283 +#define cpus_and_const(dst,src1,src2) cpus_and(dst,*(src1).val,*(src2).val)
284 +#define cpus_or_const(dst,src1,src2) cpus_or(dst,*(src1).val,*(src2).val)
286 +#define cpus_equal_const(map1, map2) cpus_equal(*(map1).val, *(map2).val)
288 +#define cpus_copy_const(map1, map2) bitmap_copy((map1).mask, (map2).val->mask, NR_CPUS)
290 +#define cpus_empty_const(map) cpus_empty(*(map).val)
291 +#define cpus_weight_const(map) cpus_weight(*(map).val)
292 +#define first_cpu_const(map) first_cpu(*(map).val)
293 +#define next_cpu_const(cpu, map) next_cpu(cpu, *(map).val)
295 +/* only ever use this for things that are _never_ used on large boxen */
296 +#define cpus_coerce_const(map) cpus_coerce(*(map).val)
297 +#define any_online_cpu_const(map) any_online_cpu(*(map).val)
299 +#endif /* __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H */
300 --- linux/include/asm-generic/cpumask_const_value.h
301 +++ linux/include/asm-generic/cpumask_const_value.h
303 +#ifndef __ASM_GENERIC_CPUMASK_CONST_VALUE_H
304 +#define __ASM_GENERIC_CPUMASK_CONST_VALUE_H
306 +typedef const cpumask_t cpumask_const_t;
308 +#define mk_cpumask_const(map) (map)
309 +#define cpu_isset_const(cpu, map) cpu_isset(cpu, map)
310 +#define cpus_and_const(dst,src1,src2) cpus_and(dst, src1, src2)
311 +#define cpus_or_const(dst,src1,src2) cpus_or(dst, src1, src2)
312 +#define cpus_equal_const(map1, map2) cpus_equal(map1, map2)
313 +#define cpus_empty_const(map) cpus_empty(map)
314 +#define cpus_copy_const(map1, map2) do { map1 = (cpumask_t)map2; } while (0)
315 +#define cpus_weight_const(map) cpus_weight(map)
316 +#define first_cpu_const(map) first_cpu(map)
317 +#define next_cpu_const(cpu, map) next_cpu(cpu, map)
319 +/* only ever use this for things that are _never_ used on large boxen */
320 +#define cpus_coerce_const(map) cpus_coerce(map)
321 +#define any_online_cpu_const(map) any_online_cpu(map)
323 +#endif /* __ASM_GENERIC_CPUMASK_CONST_VALUE_H */
324 --- linux/include/asm-generic/cpumask.h
325 +++ linux/include/asm-generic/cpumask.h
327 +#ifndef __ASM_GENERIC_CPUMASK_H
328 +#define __ASM_GENERIC_CPUMASK_H
330 +// #include <linux/config.h>
331 +#include <linux/kernel.h>
332 +#include <linux/threads.h>
333 +#include <linux/types.h>
334 +#include <linux/bitmap.h>
336 +#if NR_CPUS > BITS_PER_LONG && NR_CPUS != 1
337 +#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
341 + unsigned long mask[CPU_ARRAY_SIZE];
344 +typedef struct cpumask cpumask_t;
347 +typedef unsigned long cpumask_t;
351 +#if NR_CPUS > BITS_PER_LONG
352 +#include <asm-generic/cpumask_array.h>
354 +#include <asm-generic/cpumask_arith.h>
357 +#include <asm-generic/cpumask_up.h>
360 +#if NR_CPUS <= 4*BITS_PER_LONG
361 +#include <asm-generic/cpumask_const_value.h>
363 +#include <asm-generic/cpumask_const_reference.h>
366 +#endif /* __ASM_GENERIC_CPUMASK_H */
367 --- linux/include/asm-generic/cpumask_up.h
368 +++ linux/include/asm-generic/cpumask_up.h
370 +#ifndef __ASM_GENERIC_CPUMASK_UP_H
371 +#define __ASM_GENERIC_CPUMASK_UP_H
373 +#define cpus_coerce(map) (map)
375 +#define cpu_set(cpu, map) do { (void)(cpu); cpus_coerce(map) = 1UL; } while (0)
376 +#define cpu_clear(cpu, map) do { (void)(cpu); cpus_coerce(map) = 0UL; } while (0)
377 +#define cpu_isset(cpu, map) ((void)(cpu), cpus_coerce(map) != 0UL)
378 +#define cpu_test_and_set(cpu, map) ((void)(cpu), test_and_set_bit(0, &(map)))
380 +#define cpus_and(dst, src1, src2) \
382 + if (cpus_coerce(src1) && cpus_coerce(src2)) \
383 + cpus_coerce(dst) = 1UL; \
385 + cpus_coerce(dst) = 0UL; \
388 +#define cpus_or(dst, src1, src2) \
390 + if (cpus_coerce(src1) || cpus_coerce(src2)) \
391 + cpus_coerce(dst) = 1UL; \
393 + cpus_coerce(dst) = 0UL; \
396 +#define cpus_clear(map) do { cpus_coerce(map) = 0UL; } while (0)
398 +#define cpus_complement(map) \
400 + cpus_coerce(map) = !cpus_coerce(map); \
403 +#define cpus_equal(map1, map2) (cpus_coerce(map1) == cpus_coerce(map2))
404 +#define cpus_empty(map) (cpus_coerce(map) == 0UL)
405 +#define cpus_addr(map) (&(map))
406 +#define cpus_weight(map) (cpus_coerce(map) ? 1UL : 0UL)
407 +#define cpus_shift_right(d, s, n) do { cpus_coerce(d) = 0UL; } while (0)
408 +#define cpus_shift_left(d, s, n) do { cpus_coerce(d) = 0UL; } while (0)
409 +#define first_cpu(map) (cpus_coerce(map) ? 0 : 1)
410 +#define next_cpu(cpu, map) 1
412 +/* only ever use this for things that are _never_ used on large boxen */
413 +#define cpus_promote(map) \
415 + cpumask_t __tmp__; \
416 + cpus_coerce(__tmp__) = map; \
419 +#define cpumask_of_cpu(cpu) ((void)(cpu), cpus_promote(1))
420 +#define any_online_cpu(map) (cpus_coerce(map) ? 0 : 1)
423 + * um, these need to be usable as static initializers
425 +#define CPU_MASK_ALL 1UL
426 +#define CPU_MASK_NONE 0UL
428 +#endif /* __ASM_GENERIC_CPUMASK_UP_H */
429 --- linux/include/asm-generic/cputime.h
430 +++ linux/include/asm-generic/cputime.h
432 +#ifndef _ASM_GENERIC_CPUTIME_H
433 +#define _ASM_GENERIC_CPUTIME_H
435 +#include <linux/time.h>
436 +#include <linux/jiffies.h>
438 +typedef unsigned long cputime_t;
440 +#define cputime_zero (0UL)
441 +#define cputime_max ((~0UL >> 1) - 1)
442 +#define cputime_add(__a, __b) ((__a) + (__b))
443 +#define cputime_sub(__a, __b) ((__a) - (__b))
444 +#define cputime_eq(__a, __b) ((__a) == (__b))
445 +#define cputime_gt(__a, __b) ((__a) > (__b))
446 +#define cputime_ge(__a, __b) ((__a) >= (__b))
447 +#define cputime_lt(__a, __b) ((__a) < (__b))
448 +#define cputime_le(__a, __b) ((__a) <= (__b))
449 +#define cputime_to_jiffies(__ct) (__ct)
450 +#define jiffies_to_cputime(__hz) (__hz)
452 +typedef u64 cputime64_t;
454 +#define cputime64_zero (0ULL)
455 +#define cputime64_add(__a, __b) ((__a) + (__b))
456 +#define cputime64_to_jiffies64(__ct) (__ct)
457 +#define cputime_to_cputime64(__ct) ((u64) __ct)
461 + * Convert cputime to milliseconds and back.
463 +#define cputime_to_msecs(__ct) jiffies_to_msecs(__ct)
464 +#define msecs_to_cputime(__msecs) msecs_to_jiffies(__msecs)
467 + * Convert cputime to seconds and back.
469 +#define cputime_to_secs(jif) ((jif) / HZ)
470 +#define secs_to_cputime(sec) ((sec) * HZ)
473 + * Convert cputime to timespec and back.
475 +#define timespec_to_cputime(__val) timespec_to_jiffies(__val)
476 +#define cputime_to_timespec(__ct,__val) jiffies_to_timespec(__ct,__val)
479 + * Convert cputime to timeval and back.
481 +#define timeval_to_cputime(__val) timeval_to_jiffies(__val)
482 +#define cputime_to_timeval(__ct,__val) jiffies_to_timeval(__ct,__val)
485 + * Convert cputime to clock and back.
487 +#define cputime_to_clock_t(__ct) jiffies_to_clock_t(__ct)
488 +#define clock_t_to_cputime(__x) clock_t_to_jiffies(__x)
491 + * Convert cputime64 to clock.
493 +#define cputime64_to_clock_t(__ct) jiffies_64_to_clock_t(__ct)
496 --- linux/include/asm-generic/div64.h
497 +++ linux/include/asm-generic/div64.h
499 +#ifndef _ASM_GENERIC_DIV64_H
500 +#define _ASM_GENERIC_DIV64_H
502 + * Copyright (C) 2003 Bernardo Innocenti <bernie@develer.com>
503 + * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h
505 + * The semantics of do_div() are:
507 + * uint32_t do_div(uint64_t *n, uint32_t base)
509 + * uint32_t remainder = *n % base;
511 + * return remainder;
514 + * NOTE: macro parameter n is evaluated multiple times,
515 + * beware of side effects!
518 +#include <linux/types.h>
519 +#include <linux/compiler.h>
521 +#if BITS_PER_LONG == 64
523 +# define do_div(n,base) ({ \
524 + uint32_t __base = (base); \
526 + __rem = ((uint64_t)(n)) % __base; \
527 + (n) = ((uint64_t)(n)) / __base; \
531 +#elif BITS_PER_LONG == 32
533 +extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
535 +/* The unnecessary pointer compare is there
536 + * to check for type safety (n must be 64bit)
538 +# define do_div(n,base) ({ \
539 + uint32_t __base = (base); \
541 + (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \
542 + if (likely(((n) >> 32) == 0)) { \
543 + __rem = (uint32_t)(n) % __base; \
544 + (n) = (uint32_t)(n) / __base; \
546 + __rem = __div64_32(&(n), __base); \
550 +#else /* BITS_PER_LONG == ?? */
552 +# error do_div() does not yet support the C64
554 +#endif /* BITS_PER_LONG */
556 +#endif /* _ASM_GENERIC_DIV64_H */
557 --- linux/include/asm-generic/dma-mapping-broken.h
558 +++ linux/include/asm-generic/dma-mapping-broken.h
560 +#ifndef _ASM_GENERIC_DMA_MAPPING_H
561 +#define _ASM_GENERIC_DMA_MAPPING_H
563 +/* This is used for archs that do not support DMA */
566 +static inline void *
567 +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
575 +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
576 + dma_addr_t dma_handle)
581 +#endif /* _ASM_GENERIC_DMA_MAPPING_H */
582 --- linux/include/asm-generic/dma-mapping.h
583 +++ linux/include/asm-generic/dma-mapping.h
585 +/* Copyright (C) 2002 by James.Bottomley@HansenPartnership.com
587 + * Implements the generic device dma API via the existing pci_ one
588 + * for unconverted architectures
591 +#ifndef _ASM_GENERIC_DMA_MAPPING_H
592 +#define _ASM_GENERIC_DMA_MAPPING_H
594 +// #include <linux/config.h>
598 +/* we implement the API below in terms of the existing PCI one,
600 +#include <linux/pci.h>
601 +/* need struct page definitions */
602 +#include <linux/mm.h>
605 +dma_supported(struct device *dev, u64 mask)
607 + BUG_ON(dev->bus != &pci_bus_type);
609 + return pci_dma_supported(to_pci_dev(dev), mask);
613 +dma_set_mask(struct device *dev, u64 dma_mask)
615 + BUG_ON(dev->bus != &pci_bus_type);
617 + return pci_set_dma_mask(to_pci_dev(dev), dma_mask);
620 +static inline void *
621 +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
624 + BUG_ON(dev->bus != &pci_bus_type);
626 + return pci_alloc_consistent(to_pci_dev(dev), size, dma_handle);
630 +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
631 + dma_addr_t dma_handle)
633 + BUG_ON(dev->bus != &pci_bus_type);
635 + pci_free_consistent(to_pci_dev(dev), size, cpu_addr, dma_handle);
638 +static inline dma_addr_t
639 +dma_map_single(struct device *dev, void *cpu_addr, size_t size,
640 + enum dma_data_direction direction)
642 + BUG_ON(dev->bus != &pci_bus_type);
644 + return pci_map_single(to_pci_dev(dev), cpu_addr, size, (int)direction);
648 +dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
649 + enum dma_data_direction direction)
651 + BUG_ON(dev->bus != &pci_bus_type);
653 + pci_unmap_single(to_pci_dev(dev), dma_addr, size, (int)direction);
656 +static inline dma_addr_t
657 +dma_map_page(struct device *dev, struct page *page,
658 + unsigned long offset, size_t size,
659 + enum dma_data_direction direction)
661 + BUG_ON(dev->bus != &pci_bus_type);
663 + return pci_map_page(to_pci_dev(dev), page, offset, size, (int)direction);
667 +dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
668 + enum dma_data_direction direction)
670 + BUG_ON(dev->bus != &pci_bus_type);
672 + pci_unmap_page(to_pci_dev(dev), dma_address, size, (int)direction);
676 +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
677 + enum dma_data_direction direction)
679 + BUG_ON(dev->bus != &pci_bus_type);
681 + return pci_map_sg(to_pci_dev(dev), sg, nents, (int)direction);
685 +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
686 + enum dma_data_direction direction)
688 + BUG_ON(dev->bus != &pci_bus_type);
690 + pci_unmap_sg(to_pci_dev(dev), sg, nhwentries, (int)direction);
694 +dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size,
695 + enum dma_data_direction direction)
697 + BUG_ON(dev->bus != &pci_bus_type);
699 + pci_dma_sync_single_for_cpu(to_pci_dev(dev), dma_handle,
700 + size, (int)direction);
704 +dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size,
705 + enum dma_data_direction direction)
707 + BUG_ON(dev->bus != &pci_bus_type);
709 + pci_dma_sync_single_for_device(to_pci_dev(dev), dma_handle,
710 + size, (int)direction);
714 +dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
715 + enum dma_data_direction direction)
717 + BUG_ON(dev->bus != &pci_bus_type);
719 + pci_dma_sync_sg_for_cpu(to_pci_dev(dev), sg, nelems, (int)direction);
723 +dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems,
724 + enum dma_data_direction direction)
726 + BUG_ON(dev->bus != &pci_bus_type);
728 + pci_dma_sync_sg_for_device(to_pci_dev(dev), sg, nelems, (int)direction);
732 +dma_mapping_error(dma_addr_t dma_addr)
734 + return pci_dma_mapping_error(dma_addr);
741 +dma_supported(struct device *dev, u64 mask)
747 +dma_set_mask(struct device *dev, u64 dma_mask)
753 +static inline void *
754 +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
762 +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
763 + dma_addr_t dma_handle)
768 +static inline dma_addr_t
769 +dma_map_single(struct device *dev, void *cpu_addr, size_t size,
770 + enum dma_data_direction direction)
777 +dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
778 + enum dma_data_direction direction)
783 +static inline dma_addr_t
784 +dma_map_page(struct device *dev, struct page *page,
785 + unsigned long offset, size_t size,
786 + enum dma_data_direction direction)
793 +dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
794 + enum dma_data_direction direction)
800 +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
801 + enum dma_data_direction direction)
808 +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
809 + enum dma_data_direction direction)
815 +dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size,
816 + enum dma_data_direction direction)
822 +dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size,
823 + enum dma_data_direction direction)
829 +dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
830 + enum dma_data_direction direction)
836 +dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems,
837 + enum dma_data_direction direction)
843 +dma_error(dma_addr_t dma_addr)
850 +/* Now for the API extensions over the pci_ one */
852 +#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
853 +#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
854 +#define dma_is_consistent(d) (1)
857 +dma_get_cache_alignment(void)
859 + /* no easy way to get cache size on all processors, so return
860 + * the maximum possible, to be safe */
861 + return (1 << L1_CACHE_SHIFT_MAX);
865 +dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle,
866 + unsigned long offset, size_t size,
867 + enum dma_data_direction direction)
869 + /* just sync everything, that's all the pci API can do */
870 + dma_sync_single_for_cpu(dev, dma_handle, offset+size, direction);
874 +dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle,
875 + unsigned long offset, size_t size,
876 + enum dma_data_direction direction)
878 + /* just sync everything, that's all the pci API can do */
879 + dma_sync_single_for_device(dev, dma_handle, offset+size, direction);
883 +dma_cache_sync(void *vaddr, size_t size,
884 + enum dma_data_direction direction)
886 + /* could define this in terms of the dma_cache ... operations,
887 + * but if you get this on a platform, you should convert the platform
888 + * to using the generic device DMA API */
894 --- linux/include/asm-generic/errno-base.h
895 +++ linux/include/asm-generic/errno-base.h
897 +#ifndef _ASM_GENERIC_ERRNO_BASE_H
898 +#define _ASM_GENERIC_ERRNO_BASE_H
900 +#define EPERM 1 /* Operation not permitted */
901 +#define ENOENT 2 /* No such file or directory */
902 +#define ESRCH 3 /* No such process */
903 +#define EINTR 4 /* Interrupted system call */
904 +#define EIO 5 /* I/O error */
905 +#define ENXIO 6 /* No such device or address */
906 +#define E2BIG 7 /* Argument list too long */
907 +#define ENOEXEC 8 /* Exec format error */
908 +#define EBADF 9 /* Bad file number */
909 +#define ECHILD 10 /* No child processes */
910 +#define EAGAIN 11 /* Try again */
911 +#define ENOMEM 12 /* Out of memory */
912 +#define EACCES 13 /* Permission denied */
913 +#define EFAULT 14 /* Bad address */
914 +#define ENOTBLK 15 /* Block device required */
915 +#define EBUSY 16 /* Device or resource busy */
916 +#define EEXIST 17 /* File exists */
917 +#define EXDEV 18 /* Cross-device link */
918 +#define ENODEV 19 /* No such device */
919 +#define ENOTDIR 20 /* Not a directory */
920 +#define EISDIR 21 /* Is a directory */
921 +#define EINVAL 22 /* Invalid argument */
922 +#define ENFILE 23 /* File table overflow */
923 +#define EMFILE 24 /* Too many open files */
924 +#define ENOTTY 25 /* Not a typewriter */
925 +#define ETXTBSY 26 /* Text file busy */
926 +#define EFBIG 27 /* File too large */
927 +#define ENOSPC 28 /* No space left on device */
928 +#define ESPIPE 29 /* Illegal seek */
929 +#define EROFS 30 /* Read-only file system */
930 +#define EMLINK 31 /* Too many links */
931 +#define EPIPE 32 /* Broken pipe */
932 +#define EDOM 33 /* Math argument out of domain of func */
933 +#define ERANGE 34 /* Math result not representable */
936 --- linux/include/asm-generic/errno.h
937 +++ linux/include/asm-generic/errno.h
939 +#ifndef _ASM_GENERIC_ERRNO_H
940 +#define _ASM_GENERIC_ERRNO_H
942 +#include <asm-generic/errno-base.h>
944 +#define EDEADLK 35 /* Resource deadlock would occur */
945 +#define ENAMETOOLONG 36 /* File name too long */
946 +#define ENOLCK 37 /* No record locks available */
947 +#define ENOSYS 38 /* Function not implemented */
948 +#define ENOTEMPTY 39 /* Directory not empty */
949 +#define ELOOP 40 /* Too many symbolic links encountered */
950 +#define EWOULDBLOCK EAGAIN /* Operation would block */
951 +#define ENOMSG 42 /* No message of desired type */
952 +#define EIDRM 43 /* Identifier removed */
953 +#define ECHRNG 44 /* Channel number out of range */
954 +#define EL2NSYNC 45 /* Level 2 not synchronized */
955 +#define EL3HLT 46 /* Level 3 halted */
956 +#define EL3RST 47 /* Level 3 reset */
957 +#define ELNRNG 48 /* Link number out of range */
958 +#define EUNATCH 49 /* Protocol driver not attached */
959 +#define ENOCSI 50 /* No CSI structure available */
960 +#define EL2HLT 51 /* Level 2 halted */
961 +#define EBADE 52 /* Invalid exchange */
962 +#define EBADR 53 /* Invalid request descriptor */
963 +#define EXFULL 54 /* Exchange full */
964 +#define ENOANO 55 /* No anode */
965 +#define EBADRQC 56 /* Invalid request code */
966 +#define EBADSLT 57 /* Invalid slot */
968 +#define EDEADLOCK EDEADLK
970 +#define EBFONT 59 /* Bad font file format */
971 +#define ENOSTR 60 /* Device not a stream */
972 +#define ENODATA 61 /* No data available */
973 +#define ETIME 62 /* Timer expired */
974 +#define ENOSR 63 /* Out of streams resources */
975 +#define ENONET 64 /* Machine is not on the network */
976 +#define ENOPKG 65 /* Package not installed */
977 +#define EREMOTE 66 /* Object is remote */
978 +#define ENOLINK 67 /* Link has been severed */
979 +#define EADV 68 /* Advertise error */
980 +#define ESRMNT 69 /* Srmount error */
981 +#define ECOMM 70 /* Communication error on send */
982 +#define EPROTO 71 /* Protocol error */
983 +#define EMULTIHOP 72 /* Multihop attempted */
984 +#define EDOTDOT 73 /* RFS specific error */
985 +#define EBADMSG 74 /* Not a data message */
986 +#define EOVERFLOW 75 /* Value too large for defined data type */
987 +#define ENOTUNIQ 76 /* Name not unique on network */
988 +#define EBADFD 77 /* File descriptor in bad state */
989 +#define EREMCHG 78 /* Remote address changed */
990 +#define ELIBACC 79 /* Can not access a needed shared library */
991 +#define ELIBBAD 80 /* Accessing a corrupted shared library */
992 +#define ELIBSCN 81 /* .lib section in a.out corrupted */
993 +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
994 +#define ELIBEXEC 83 /* Cannot exec a shared library directly */
995 +#define EILSEQ 84 /* Illegal byte sequence */
996 +#define ERESTART 85 /* Interrupted system call should be restarted */
997 +#define ESTRPIPE 86 /* Streams pipe error */
998 +#define EUSERS 87 /* Too many users */
999 +#define ENOTSOCK 88 /* Socket operation on non-socket */
1000 +#define EDESTADDRREQ 89 /* Destination address required */
1001 +#define EMSGSIZE 90 /* Message too long */
1002 +#define EPROTOTYPE 91 /* Protocol wrong type for socket */
1003 +#define ENOPROTOOPT 92 /* Protocol not available */
1004 +#define EPROTONOSUPPORT 93 /* Protocol not supported */
1005 +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
1006 +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
1007 +#define EPFNOSUPPORT 96 /* Protocol family not supported */
1008 +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
1009 +#define EADDRINUSE 98 /* Address already in use */
1010 +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
1011 +#define ENETDOWN 100 /* Network is down */
1012 +#define ENETUNREACH 101 /* Network is unreachable */
1013 +#define ENETRESET 102 /* Network dropped connection because of reset */
1014 +#define ECONNABORTED 103 /* Software caused connection abort */
1015 +#define ECONNRESET 104 /* Connection reset by peer */
1016 +#define ENOBUFS 105 /* No buffer space available */
1017 +#define EISCONN 106 /* Transport endpoint is already connected */
1018 +#define ENOTCONN 107 /* Transport endpoint is not connected */
1019 +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
1020 +#define ETOOMANYREFS 109 /* Too many references: cannot splice */
1021 +#define ETIMEDOUT 110 /* Connection timed out */
1022 +#define ECONNREFUSED 111 /* Connection refused */
1023 +#define EHOSTDOWN 112 /* Host is down */
1024 +#define EHOSTUNREACH 113 /* No route to host */
1025 +#define EALREADY 114 /* Operation already in progress */
1026 +#define EINPROGRESS 115 /* Operation now in progress */
1027 +#define ESTALE 116 /* Stale NFS file handle */
1028 +#define EUCLEAN 117 /* Structure needs cleaning */
1029 +#define ENOTNAM 118 /* Not a XENIX named type file */
1030 +#define ENAVAIL 119 /* No XENIX semaphores available */
1031 +#define EISNAM 120 /* Is a named type file */
1032 +#define EREMOTEIO 121 /* Remote I/O error */
1033 +#define EDQUOT 122 /* Quota exceeded */
1035 +#define ENOMEDIUM 123 /* No medium found */
1036 +#define EMEDIUMTYPE 124 /* Wrong medium type */
1037 +#define ECANCELED 125 /* Operation Canceled */
1038 +#define ENOKEY 126 /* Required key not available */
1039 +#define EKEYEXPIRED 127 /* Key has expired */
1040 +#define EKEYREVOKED 128 /* Key has been revoked */
1041 +#define EKEYREJECTED 129 /* Key was rejected by service */
1044 --- linux/include/asm-generic/hdreg.h
1045 +++ linux/include/asm-generic/hdreg.h
1047 +#warning <asm/hdreg.h> is obsolete, please do not use it
1049 +#ifndef __ASM_GENERIC_HDREG_H
1050 +#define __ASM_GENERIC_HDREG_H
1052 +typedef unsigned long ide_ioreg_t;
1054 +#endif /* __ASM_GENERIC_HDREG_H */
1055 --- linux/include/asm-generic/ide_iops.h
1056 +++ linux/include/asm-generic/ide_iops.h
1058 +/* Generic I/O and MEMIO string operations. */
1060 +#define __ide_insw insw
1061 +#define __ide_insl insl
1062 +#define __ide_outsw outsw
1063 +#define __ide_outsl outsl
1065 +static __inline__ void __ide_mm_insw(void __iomem *port, void *addr, u32 count)
1068 + *(u16 *)addr = readw(port);
1073 +static __inline__ void __ide_mm_insl(void __iomem *port, void *addr, u32 count)
1076 + *(u32 *)addr = readl(port);
1081 +static __inline__ void __ide_mm_outsw(void __iomem *port, void *addr, u32 count)
1084 + writew(*(u16 *)addr, port);
1089 +static __inline__ void __ide_mm_outsl(void __iomem * port, void *addr, u32 count)
1092 + writel(*(u32 *)addr, port);
1096 --- linux/include/asm-generic/iomap.h
1097 +++ linux/include/asm-generic/iomap.h
1099 +#ifndef __GENERIC_IO_H
1100 +#define __GENERIC_IO_H
1102 +#include <linux/linkage.h>
1105 + * These are the "generic" interfaces for doing new-style
1106 + * memory-mapped or PIO accesses. Architectures may do
1107 + * their own arch-optimized versions, these just act as
1108 + * wrappers around the old-style IO register access functions:
1109 + * read[bwl]/write[bwl]/in[bwl]/out[bwl]
1111 + * Don't include this directly, include it from <asm/io.h>.
1115 + * Read/write from/to an (offsettable) iomem cookie. It might be a PIO
1116 + * access or a MMIO access, these functions don't care. The info is
1117 + * encoded in the hardware mapping set up by the mapping functions
1118 + * (or the cookie itself, depending on implementation and hw).
1120 + * The generic routines just encode the PIO/MMIO as part of the
1121 + * cookie, and coldly assume that the MMIO IO mappings are not
1122 + * in the low address range. Architectures for which this is not
1123 + * true can't use this generic implementation.
1125 +extern unsigned int fastcall ioread8(void __iomem *);
1126 +extern unsigned int fastcall ioread16(void __iomem *);
1127 +extern unsigned int fastcall ioread32(void __iomem *);
1129 +extern void fastcall iowrite8(u8, void __iomem *);
1130 +extern void fastcall iowrite16(u16, void __iomem *);
1131 +extern void fastcall iowrite32(u32, void __iomem *);
1134 + * "string" versions of the above. Note that they
1135 + * use native byte ordering for the accesses (on
1136 + * the assumption that IO and memory agree on a
1137 + * byte order, and CPU byteorder is irrelevant).
1139 + * They do _not_ update the port address. If you
1140 + * want MMIO that copies stuff laid out in MMIO
1141 + * memory across multiple ports, use "memcpy_toio()"
1144 +extern void fastcall ioread8_rep(void __iomem *port, void *buf, unsigned long count);
1145 +extern void fastcall ioread16_rep(void __iomem *port, void *buf, unsigned long count);
1146 +extern void fastcall ioread32_rep(void __iomem *port, void *buf, unsigned long count);
1148 +extern void fastcall iowrite8_rep(void __iomem *port, const void *buf, unsigned long count);
1149 +extern void fastcall iowrite16_rep(void __iomem *port, const void *buf, unsigned long count);
1150 +extern void fastcall iowrite32_rep(void __iomem *port, const void *buf, unsigned long count);
1152 +/* Create a virtual mapping cookie for an IO port range */
1153 +extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
1154 +extern void ioport_unmap(void __iomem *);
1156 +/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
1158 +extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
1159 +extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
1162 --- linux/include/asm-generic/local.h
1163 +++ linux/include/asm-generic/local.h
1165 +#ifndef _ASM_GENERIC_LOCAL_H
1166 +#define _ASM_GENERIC_LOCAL_H
1168 +// #include <linux/config.h>
1169 +#include <linux/percpu.h>
1170 +#include <linux/hardirq.h>
1171 +#include <asm/types.h>
1173 +/* An unsigned long type for operations which are atomic for a single
1174 + * CPU. Usually used in combination with per-cpu variables. */
1176 +#if BITS_PER_LONG == 32
1177 +/* Implement in terms of atomics. */
1179 +/* Don't use typedef: don't want them to be mixed with atomic_t's. */
1185 +#define LOCAL_INIT(i) { ATOMIC_INIT(i) }
1187 +#define local_read(l) ((unsigned long)atomic_read(&(l)->a))
1188 +#define local_set(l,i) atomic_set((&(l)->a),(i))
1189 +#define local_inc(l) atomic_inc(&(l)->a)
1190 +#define local_dec(l) atomic_dec(&(l)->a)
1191 +#define local_add(i,l) atomic_add((i),(&(l)->a))
1192 +#define local_sub(i,l) atomic_sub((i),(&(l)->a))
1194 +/* Non-atomic variants, ie. preemption disabled and won't be touched
1195 + * in interrupt, etc. Some archs can optimize this case well. */
1196 +#define __local_inc(l) local_set((l), local_read(l) + 1)
1197 +#define __local_dec(l) local_set((l), local_read(l) - 1)
1198 +#define __local_add(i,l) local_set((l), local_read(l) + (i))
1199 +#define __local_sub(i,l) local_set((l), local_read(l) - (i))
1201 +#else /* ... can't use atomics. */
1202 +/* Implement in terms of three variables.
1203 + Another option would be to use local_irq_save/restore. */
1207 + /* 0 = in hardirq, 1 = in softirq, 2 = usermode. */
1208 + unsigned long v[3];
1211 +#define _LOCAL_VAR(l) ((l)->v[!in_interrupt() + !in_irq()])
1213 +#define LOCAL_INIT(i) { { (i), 0, 0 } }
1215 +static inline unsigned long local_read(local_t *l)
1217 + return l->v[0] + l->v[1] + l->v[2];
1220 +static inline void local_set(local_t *l, unsigned long v)
1223 + l->v[1] = l->v[2] = 0;
1226 +static inline void local_inc(local_t *l)
1228 + preempt_disable();
1233 +static inline void local_dec(local_t *l)
1235 + preempt_disable();
1240 +static inline void local_add(unsigned long v, local_t *l)
1242 + preempt_disable();
1243 + _LOCAL_VAR(l) += v;
1247 +static inline void local_sub(unsigned long v, local_t *l)
1249 + preempt_disable();
1250 + _LOCAL_VAR(l) -= v;
1254 +/* Non-atomic variants, ie. preemption disabled and won't be touched
1255 + * in interrupt, etc. Some archs can optimize this case well. */
1256 +#define __local_inc(l) ((l)->v[0]++)
1257 +#define __local_dec(l) ((l)->v[0]--)
1258 +#define __local_add(i,l) ((l)->v[0] += (i))
1259 +#define __local_sub(i,l) ((l)->v[0] -= (i))
1261 +#endif /* Non-atomic implementation */
1263 +/* Use these for per-cpu local_t variables: on some archs they are
1264 + * much more efficient than these naive implementations. Note they take
1265 + * a variable (eg. mystruct.foo), not an address.
1267 +#define cpu_local_read(v) local_read(&__get_cpu_var(v))
1268 +#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i))
1269 +#define cpu_local_inc(v) local_inc(&__get_cpu_var(v))
1270 +#define cpu_local_dec(v) local_dec(&__get_cpu_var(v))
1271 +#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v))
1272 +#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v))
1274 +/* Non-atomic increments, ie. preemption disabled and won't be touched
1275 + * in interrupt, etc. Some archs can optimize this case well.
1277 +#define __cpu_local_inc(v) __local_inc(&__get_cpu_var(v))
1278 +#define __cpu_local_dec(v) __local_dec(&__get_cpu_var(v))
1279 +#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v))
1280 +#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v))
1282 +#endif /* _ASM_GENERIC_LOCAL_H */
1283 --- linux/include/asm-generic/pci-dma-compat.h
1284 +++ linux/include/asm-generic/pci-dma-compat.h
1286 +/* include this file if the platform implements the dma_ DMA Mapping API
1287 + * and wants to provide the pci_ DMA Mapping API in terms of it */
1289 +#ifndef _ASM_GENERIC_PCI_DMA_COMPAT_H
1290 +#define _ASM_GENERIC_PCI_DMA_COMPAT_H
1292 +#include <linux/dma-mapping.h>
1294 +/* note pci_set_dma_mask isn't here, since it's a public function
1295 + * exported from drivers/pci, use dma_supported instead */
1298 +pci_dma_supported(struct pci_dev *hwdev, u64 mask)
1300 + return dma_supported(hwdev == NULL ? NULL : &hwdev->dev, mask);
1303 +static inline void *
1304 +pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
1305 + dma_addr_t *dma_handle)
1307 + return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC);
1311 +pci_free_consistent(struct pci_dev *hwdev, size_t size,
1312 + void *vaddr, dma_addr_t dma_handle)
1314 + dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, vaddr, dma_handle);
1317 +static inline dma_addr_t
1318 +pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction)
1320 + return dma_map_single(hwdev == NULL ? NULL : &hwdev->dev, ptr, size, (enum dma_data_direction)direction);
1324 +pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
1325 + size_t size, int direction)
1327 + dma_unmap_single(hwdev == NULL ? NULL : &hwdev->dev, dma_addr, size, (enum dma_data_direction)direction);
1330 +static inline dma_addr_t
1331 +pci_map_page(struct pci_dev *hwdev, struct page *page,
1332 + unsigned long offset, size_t size, int direction)
1334 + return dma_map_page(hwdev == NULL ? NULL : &hwdev->dev, page, offset, size, (enum dma_data_direction)direction);
1338 +pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
1339 + size_t size, int direction)
1341 + dma_unmap_page(hwdev == NULL ? NULL : &hwdev->dev, dma_address, size, (enum dma_data_direction)direction);
1345 +pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
1346 + int nents, int direction)
1348 + return dma_map_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction);
1352 +pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
1353 + int nents, int direction)
1355 + dma_unmap_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction);
1359 +pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle,
1360 + size_t size, int direction)
1362 + dma_sync_single_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
1366 +pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle,
1367 + size_t size, int direction)
1369 + dma_sync_single_for_device(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
1373 +pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg,
1374 + int nelems, int direction)
1376 + dma_sync_sg_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
1380 +pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg,
1381 + int nelems, int direction)
1383 + dma_sync_sg_for_device(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
1387 +pci_dma_mapping_error(dma_addr_t dma_addr)
1389 + return dma_mapping_error(dma_addr);
1393 --- linux/include/asm-generic/pci.h
1394 +++ linux/include/asm-generic/pci.h
1397 + * linux/include/asm-generic/pci.h
1399 + * Copyright (C) 2003 Russell King
1401 +#ifndef _ASM_GENERIC_PCI_H
1402 +#define _ASM_GENERIC_PCI_H
1405 + * pcibios_resource_to_bus - convert resource to PCI bus address
1406 + * @dev: device which owns this resource
1407 + * @region: converted bus-centric region (start,end)
1408 + * @res: resource to convert
1410 + * Convert a resource to a PCI device bus address or bus window.
1413 +pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
1414 + struct resource *res)
1416 + region->start = res->start;
1417 + region->end = res->end;
1420 +#define pcibios_scan_all_fns(a, b) 0
1422 +#ifndef HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
1423 +static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
1425 + return channel ? 15 : 14;
1427 +#endif /* HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ */
1430 --- linux/include/asm-generic/percpu.h
1431 +++ linux/include/asm-generic/percpu.h
1433 +#ifndef _ASM_GENERIC_PERCPU_H_
1434 +#define _ASM_GENERIC_PERCPU_H_
1435 +#include <linux/compiler.h>
1437 +#define __GENERIC_PER_CPU
1440 +extern unsigned long __per_cpu_offset[NR_CPUS];
1442 +/* Separate out the type, so (int[3], foo) works. */
1443 +#define DEFINE_PER_CPU(type, name) \
1444 + __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
1446 +/* var is in discarded region: offset to particular copy we want */
1447 +#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
1448 +#define __get_cpu_var(var) per_cpu(var, smp_processor_id())
1450 +/* A macro to avoid #include hell... */
1451 +#define percpu_modcopy(pcpudst, src, size) \
1453 + unsigned int __i; \
1454 + for (__i = 0; __i < NR_CPUS; __i++) \
1455 + if (cpu_possible(__i)) \
1456 + memcpy((pcpudst)+__per_cpu_offset[__i], \
1461 +#define DEFINE_PER_CPU(type, name) \
1462 + __typeof__(type) per_cpu__##name
1464 +#define per_cpu(var, cpu) (*((void)cpu, &per_cpu__##var))
1465 +#define __get_cpu_var(var) per_cpu__##var
1469 +#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name
1471 +#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
1472 +#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
1474 +#endif /* _ASM_GENERIC_PERCPU_H_ */
1475 --- linux/include/asm-generic/pgtable.h
1476 +++ linux/include/asm-generic/pgtable.h
1478 +#ifndef _ASM_GENERIC_PGTABLE_H
1479 +#define _ASM_GENERIC_PGTABLE_H
1481 +#ifndef __HAVE_ARCH_PTEP_ESTABLISH
1483 + * Establish a new mapping:
1484 + * - flush the old one
1485 + * - update the page tables
1486 + * - inform the TLB about the new one
1488 + * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock.
1490 + * Note: the old pte is known to not be writable, so we don't need to
1491 + * worry about dirty bits etc getting lost.
1493 +#ifndef __HAVE_ARCH_SET_PTE_ATOMIC
1494 +#define ptep_establish(__vma, __address, __ptep, __entry) \
1496 + set_pte(__ptep, __entry); \
1497 + flush_tlb_page(__vma, __address); \
1499 +#else /* __HAVE_ARCH_SET_PTE_ATOMIC */
1500 +#define ptep_establish(__vma, __address, __ptep, __entry) \
1502 + set_pte_atomic(__ptep, __entry); \
1503 + flush_tlb_page(__vma, __address); \
1505 +#endif /* __HAVE_ARCH_SET_PTE_ATOMIC */
1508 +#ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
1510 + * Largely same as above, but only sets the access flags (dirty,
1511 + * accessed, and writable). Furthermore, we know it always gets set
1512 + * to a "more permissive" setting, which allows most architectures
1513 + * to optimize this.
1515 +#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
1517 + set_pte(__ptep, __entry); \
1518 + flush_tlb_page(__vma, __address); \
1522 +#ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
1523 +static inline int ptep_test_and_clear_young(pte_t *ptep)
1525 + pte_t pte = *ptep;
1526 + if (!pte_young(pte))
1528 + set_pte(ptep, pte_mkold(pte));
1533 +#ifndef __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH
1534 +#define ptep_clear_flush_young(__vma, __address, __ptep) \
1536 + int __young = ptep_test_and_clear_young(__ptep); \
1538 + flush_tlb_page(__vma, __address); \
1543 +#ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
1544 +static inline int ptep_test_and_clear_dirty(pte_t *ptep)
1546 + pte_t pte = *ptep;
1547 + if (!pte_dirty(pte))
1549 + set_pte(ptep, pte_mkclean(pte));
1554 +#ifndef __HAVE_ARCH_PTEP_CLEAR_DIRTY_FLUSH
1555 +#define ptep_clear_flush_dirty(__vma, __address, __ptep) \
1557 + int __dirty = ptep_test_and_clear_dirty(__ptep); \
1559 + flush_tlb_page(__vma, __address); \
1564 +#ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR
1565 +static inline pte_t ptep_get_and_clear(pte_t *ptep)
1567 + pte_t pte = *ptep;
1573 +#ifndef __HAVE_ARCH_PTEP_CLEAR_FLUSH
1574 +#define ptep_clear_flush(__vma, __address, __ptep) \
1576 + pte_t __pte = ptep_get_and_clear(__ptep); \
1577 + flush_tlb_page(__vma, __address); \
1582 +#ifndef __HAVE_ARCH_PTEP_SET_WRPROTECT
1583 +static inline void ptep_set_wrprotect(pte_t *ptep)
1585 + pte_t old_pte = *ptep;
1586 + set_pte(ptep, pte_wrprotect(old_pte));
1590 +#ifndef __HAVE_ARCH_PTEP_MKDIRTY
1591 +static inline void ptep_mkdirty(pte_t *ptep)
1593 + pte_t old_pte = *ptep;
1594 + set_pte(ptep, pte_mkdirty(old_pte));
1598 +#ifndef __HAVE_ARCH_PTE_SAME
1599 +#define pte_same(A,B) (pte_val(A) == pte_val(B))
1602 +#ifndef __HAVE_ARCH_PAGE_TEST_AND_CLEAR_DIRTY
1603 +#define page_test_and_clear_dirty(page) (0)
1606 +#ifndef __HAVE_ARCH_PAGE_TEST_AND_CLEAR_YOUNG
1607 +#define page_test_and_clear_young(page) (0)
1610 +#ifndef __HAVE_ARCH_PGD_OFFSET_GATE
1611 +#define pgd_offset_gate(mm, addr) pgd_offset(mm, addr)
1614 +#endif /* _ASM_GENERIC_PGTABLE_H */
1615 --- linux/include/asm-generic/pgtable-nopmd.h
1616 +++ linux/include/asm-generic/pgtable-nopmd.h
1618 +#ifndef _PGTABLE_NOPMD_H
1619 +#define _PGTABLE_NOPMD_H
1621 +#ifndef __ASSEMBLY__
1623 +#include <asm-generic/pgtable-nopud.h>
1626 + * Having the pmd type consist of a pud gets the size right, and allows
1627 + * us to conceptually access the pud entry that this pmd is folded into
1628 + * without casting.
1630 +typedef struct { pud_t pud; } pmd_t;
1632 +#define PMD_SHIFT PUD_SHIFT
1633 +#define PTRS_PER_PMD 1
1634 +#define PMD_SIZE (1UL << PMD_SHIFT)
1635 +#define PMD_MASK (~(PMD_SIZE-1))
1638 + * The "pud_xxx()" functions here are trivial for a folded two-level
1639 + * setup: the pmd is never bad, and a pmd always exists (as it's folded
1640 + * into the pud entry)
1642 +static inline int pud_none(pud_t pud) { return 0; }
1643 +static inline int pud_bad(pud_t pud) { return 0; }
1644 +static inline int pud_present(pud_t pud) { return 1; }
1645 +static inline void pud_clear(pud_t *pud) { }
1646 +#define pmd_ERROR(pmd) (pud_ERROR((pmd).pud))
1648 +#define pud_populate(mm, pmd, pte) do { } while (0)
1651 + * (pmds are folded into puds so this doesn't get actually called,
1652 + * but the define is needed for a generic inline function.)
1654 +#define set_pud(pudptr, pudval) set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval })
1656 +static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
1658 + return (pmd_t *)pud;
1661 +#define pmd_val(x) (pud_val((x).pud))
1662 +#define __pmd(x) ((pmd_t) { __pud(x) } )
1664 +#define pud_page(pud) (pmd_page((pmd_t){ pud }))
1665 +#define pud_page_kernel(pud) (pmd_page_kernel((pmd_t){ pud }))
1668 + * allocating and freeing a pmd is trivial: the 1-entry pmd is
1669 + * inside the pud, so has no extra memory associated with it.
1671 +#define pmd_alloc_one(mm, address) NULL
1672 +#define pmd_free(x) do { } while (0)
1673 +#define __pmd_free_tlb(tlb, x) do { } while (0)
1675 +#endif /* __ASSEMBLY__ */
1677 +#endif /* _PGTABLE_NOPMD_H */
1678 --- linux/include/asm-generic/pgtable-nopud.h
1679 +++ linux/include/asm-generic/pgtable-nopud.h
1681 +#ifndef _PGTABLE_NOPUD_H
1682 +#define _PGTABLE_NOPUD_H
1684 +#ifndef __ASSEMBLY__
1687 + * Having the pud type consist of a pgd gets the size right, and allows
1688 + * us to conceptually access the pgd entry that this pud is folded into
1689 + * without casting.
1691 +typedef struct { pgd_t pgd; } pud_t;
1693 +#define PUD_SHIFT PGDIR_SHIFT
1694 +#define PTRS_PER_PUD 1
1695 +#define PUD_SIZE (1UL << PUD_SHIFT)
1696 +#define PUD_MASK (~(PUD_SIZE-1))
1699 + * The "pgd_xxx()" functions here are trivial for a folded two-level
1700 + * setup: the pud is never bad, and a pud always exists (as it's folded
1701 + * into the pgd entry)
1703 +static inline int pgd_none(pgd_t pgd) { return 0; }
1704 +static inline int pgd_bad(pgd_t pgd) { return 0; }
1705 +static inline int pgd_present(pgd_t pgd) { return 1; }
1706 +static inline void pgd_clear(pgd_t *pgd) { }
1707 +#define pud_ERROR(pud) (pgd_ERROR((pud).pgd))
1709 +#define pgd_populate(mm, pgd, pud) do { } while (0)
1711 + * (puds are folded into pgds so this doesn't get actually called,
1712 + * but the define is needed for a generic inline function.)
1714 +#define set_pgd(pgdptr, pgdval) set_pud((pud_t *)(pgdptr), (pud_t) { pgdval })
1716 +static inline pud_t * pud_offset(pgd_t * pgd, unsigned long address)
1718 + return (pud_t *)pgd;
1721 +#define pud_val(x) (pgd_val((x).pgd))
1722 +#define __pud(x) ((pud_t) { __pgd(x) } )
1724 +#define pgd_page(pgd) (pud_page((pud_t){ pgd }))
1725 +#define pgd_page_kernel(pgd) (pud_page_kernel((pud_t){ pgd }))
1728 + * allocating and freeing a pud is trivial: the 1-entry pud is
1729 + * inside the pgd, so has no extra memory associated with it.
1731 +#define pud_alloc_one(mm, address) NULL
1732 +#define pud_free(x) do { } while (0)
1733 +#define __pud_free_tlb(tlb, x) do { } while (0)
1735 +#endif /* __ASSEMBLY__ */
1736 +#endif /* _PGTABLE_NOPUD_H */
1737 --- linux/include/asm-generic/resource.h
1738 +++ linux/include/asm-generic/resource.h
1740 +#ifndef _ASM_GENERIC_RESOURCE_H
1741 +#define _ASM_GENERIC_RESOURCE_H
1747 +/* Allow arch to control resource order */
1748 +#ifndef __ARCH_RLIMIT_ORDER
1749 +#define RLIMIT_CPU 0 /* CPU time in ms */
1750 +#define RLIMIT_FSIZE 1 /* Maximum filesize */
1751 +#define RLIMIT_DATA 2 /* max data size */
1752 +#define RLIMIT_STACK 3 /* max stack size */
1753 +#define RLIMIT_CORE 4 /* max core file size */
1754 +#define RLIMIT_RSS 5 /* max resident set size */
1755 +#define RLIMIT_NPROC 6 /* max number of processes */
1756 +#define RLIMIT_NOFILE 7 /* max number of open files */
1757 +#define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */
1758 +#define RLIMIT_AS 9 /* address space limit */
1759 +#define RLIMIT_LOCKS 10 /* maximum file locks held */
1760 +#define RLIMIT_SIGPENDING 11 /* max number of pending signals */
1761 +#define RLIMIT_MSGQUEUE 12 /* maximum bytes in POSIX mqueues */
1763 +#define RLIM_NLIMITS 13
1767 + * SuS says limits have to be unsigned.
1768 + * Which makes a ton more sense anyway.
1770 +#ifndef RLIM_INFINITY
1771 +#define RLIM_INFINITY (~0UL)
1774 +#ifndef _STK_LIM_MAX
1775 +#define _STK_LIM_MAX RLIM_INFINITY
1780 +#define INIT_RLIMITS \
1782 + [RLIMIT_CPU] = { RLIM_INFINITY, RLIM_INFINITY }, \
1783 + [RLIMIT_FSIZE] = { RLIM_INFINITY, RLIM_INFINITY }, \
1784 + [RLIMIT_DATA] = { RLIM_INFINITY, RLIM_INFINITY }, \
1785 + [RLIMIT_STACK] = { _STK_LIM, _STK_LIM_MAX }, \
1786 + [RLIMIT_CORE] = { 0, RLIM_INFINITY }, \
1787 + [RLIMIT_RSS] = { RLIM_INFINITY, RLIM_INFINITY }, \
1788 + [RLIMIT_NPROC] = { 0, 0 }, \
1789 + [RLIMIT_NOFILE] = { INR_OPEN, INR_OPEN }, \
1790 + [RLIMIT_MEMLOCK] = { MLOCK_LIMIT, MLOCK_LIMIT }, \
1791 + [RLIMIT_AS] = { RLIM_INFINITY, RLIM_INFINITY }, \
1792 + [RLIMIT_LOCKS] = { RLIM_INFINITY, RLIM_INFINITY }, \
1793 + [RLIMIT_SIGPENDING] = { MAX_SIGPENDING, MAX_SIGPENDING }, \
1794 + [RLIMIT_MSGQUEUE] = { MQ_BYTES_MAX, MQ_BYTES_MAX }, \
1797 +#endif /* __KERNEL__ */
1800 --- linux/include/asm-generic/rmap.h
1801 +++ linux/include/asm-generic/rmap.h
1803 +#ifndef _GENERIC_RMAP_H
1804 +#define _GENERIC_RMAP_H
1806 + * linux/include/asm-generic/rmap.h
1808 + * Architecture dependent parts of the reverse mapping code,
1809 + * this version should work for most architectures with a
1810 + * 'normal' page table layout.
1812 + * We use the struct page of the page table page to find out
1813 + * the process and full address of a page table entry:
1814 + * - page->mapping points to the process' mm_struct
1815 + * - page->index has the high bits of the address
1816 + * - the lower bits of the address are calculated from the
1817 + * offset of the page table entry within the page table page
1819 + * For CONFIG_HIGHPTE, we need to represent the address of a pte in a
1820 + * scalar pte_addr_t. The pfn of the pte's page is shifted left by PAGE_SIZE
1821 + * bits and is then ORed with the byte offset of the pte within its page.
1823 + * For CONFIG_HIGHMEM4G, the pte_addr_t is 32 bits. 20 for the pfn, 12 for
1826 + * For CONFIG_HIGHMEM64G, the pte_addr_t is 64 bits. 52 for the pfn, 12 for
1829 +#include <linux/mm.h>
1831 +static inline void pgtable_add_rmap(struct page * page, struct mm_struct * mm, unsigned long address)
1833 +#ifdef BROKEN_PPC_PTE_ALLOC_ONE
1834 + /* OK, so PPC calls pte_alloc() before mem_map[] is setup ... ;( */
1835 + extern int mem_init_done;
1837 + if (!mem_init_done)
1840 + page->mapping = (void *)mm;
1841 + page->index = address & ~((PTRS_PER_PTE * PAGE_SIZE) - 1);
1842 + inc_page_state(nr_page_table_pages);
1845 +static inline void pgtable_remove_rmap(struct page * page)
1847 + page->mapping = NULL;
1849 + dec_page_state(nr_page_table_pages);
1852 +static inline struct mm_struct * ptep_to_mm(pte_t * ptep)
1854 + struct page * page = kmap_atomic_to_page(ptep);
1855 + return (struct mm_struct *) page->mapping;
1858 +static inline unsigned long ptep_to_address(pte_t * ptep)
1860 + struct page * page = kmap_atomic_to_page(ptep);
1861 + unsigned long low_bits;
1862 + low_bits = ((unsigned long)ptep & ~PAGE_MASK) * PTRS_PER_PTE;
1863 + return page->index + low_bits;
1866 +#ifdef CONFIG_HIGHPTE
1867 +static inline pte_addr_t ptep_to_paddr(pte_t *ptep)
1870 + paddr = ((pte_addr_t)page_to_pfn(kmap_atomic_to_page(ptep))) << PAGE_SHIFT;
1871 + return paddr + (pte_addr_t)((unsigned long)ptep & ~PAGE_MASK);
1874 +static inline pte_addr_t ptep_to_paddr(pte_t *ptep)
1876 + return (pte_addr_t)ptep;
1880 +#ifndef CONFIG_HIGHPTE
1881 +static inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr)
1883 + return (pte_t *)pte_paddr;
1886 +static inline void rmap_ptep_unmap(pte_t *pte)
1892 +#endif /* _GENERIC_RMAP_H */
1893 --- linux/include/asm-generic/rtc.h
1894 +++ linux/include/asm-generic/rtc.h
1897 + * inclue/asm-generic/rtc.h
1899 + * Author: Tom Rini <trini@mvista.com>
1902 + * drivers/char/rtc.c
1904 + * Please read the COPYING file for all license details.
1907 +#ifndef __ASM_RTC_H__
1908 +#define __ASM_RTC_H__
1912 +#include <linux/mc146818rtc.h>
1913 +#include <linux/rtc.h>
1914 +#include <linux/bcd.h>
1916 +#define RTC_PIE 0x40 /* periodic interrupt enable */
1917 +#define RTC_AIE 0x20 /* alarm interrupt enable */
1918 +#define RTC_UIE 0x10 /* update-finished interrupt enable */
1920 +/* some dummy definitions */
1921 +#define RTC_BATT_BAD 0x100 /* battery bad */
1922 +#define RTC_SQWE 0x08 /* enable square-wave output */
1923 +#define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */
1924 +#define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */
1925 +#define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */
1928 + * Returns true if a clock update is in progress
1930 +static inline unsigned char rtc_is_updating(void)
1932 + unsigned char uip;
1934 + spin_lock_irq(&rtc_lock);
1935 + uip = (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP);
1936 + spin_unlock_irq(&rtc_lock);
1940 +static inline unsigned int get_rtc_time(struct rtc_time *time)
1942 + unsigned long uip_watchdog = jiffies;
1943 + unsigned char ctrl;
1944 +#ifdef CONFIG_MACH_DECSTATION
1945 + unsigned int real_year;
1949 + * read RTC once any update in progress is done. The update
1950 + * can take just over 2ms. We wait 10 to 20ms. There is no need to
1951 + * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP.
1952 + * If you need to know *exactly* when a second has started, enable
1953 + * periodic update complete interrupts, (via ioctl) and then
1954 + * immediately read /dev/rtc which will block until you get the IRQ.
1955 + * Once the read clears, read the RTC time (again via ioctl). Easy.
1958 + if (rtc_is_updating() != 0)
1959 + while (jiffies - uip_watchdog < 2*HZ/100) {
1965 + * Only the values that we read from the RTC are set. We leave
1966 + * tm_wday, tm_yday and tm_isdst untouched. Even though the
1967 + * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated
1968 + * by the RTC when initially set to a non-zero value.
1970 + spin_lock_irq(&rtc_lock);
1971 + time->tm_sec = CMOS_READ(RTC_SECONDS);
1972 + time->tm_min = CMOS_READ(RTC_MINUTES);
1973 + time->tm_hour = CMOS_READ(RTC_HOURS);
1974 + time->tm_mday = CMOS_READ(RTC_DAY_OF_MONTH);
1975 + time->tm_mon = CMOS_READ(RTC_MONTH);
1976 + time->tm_year = CMOS_READ(RTC_YEAR);
1977 +#ifdef CONFIG_MACH_DECSTATION
1978 + real_year = CMOS_READ(RTC_DEC_YEAR);
1980 + ctrl = CMOS_READ(RTC_CONTROL);
1981 + spin_unlock_irq(&rtc_lock);
1983 + if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
1985 + BCD_TO_BIN(time->tm_sec);
1986 + BCD_TO_BIN(time->tm_min);
1987 + BCD_TO_BIN(time->tm_hour);
1988 + BCD_TO_BIN(time->tm_mday);
1989 + BCD_TO_BIN(time->tm_mon);
1990 + BCD_TO_BIN(time->tm_year);
1993 +#ifdef CONFIG_MACH_DECSTATION
1994 + time->tm_year += real_year - 72;
1998 + * Account for differences between how the RTC uses the values
1999 + * and how they are defined in a struct rtc_time;
2001 + if (time->tm_year <= 69)
2002 + time->tm_year += 100;
2009 +/* Set the current date and time in the real time clock. */
2010 +static inline int set_rtc_time(struct rtc_time *time)
2012 + unsigned char mon, day, hrs, min, sec;
2013 + unsigned char save_control, save_freq_select;
2015 +#ifdef CONFIG_MACH_DECSTATION
2016 + unsigned int real_yrs, leap_yr;
2019 + yrs = time->tm_year;
2020 + mon = time->tm_mon + 1; /* tm_mon starts at zero */
2021 + day = time->tm_mday;
2022 + hrs = time->tm_hour;
2023 + min = time->tm_min;
2024 + sec = time->tm_sec;
2026 + if (yrs > 255) /* They are unsigned */
2029 + spin_lock_irq(&rtc_lock);
2030 +#ifdef CONFIG_MACH_DECSTATION
2032 + leap_yr = ((!((yrs + 1900) % 4) && ((yrs + 1900) % 100)) ||
2033 + !((yrs + 1900) % 400));
2037 + * We want to keep the year set to 73 until March
2038 + * for non-leap years, so that Feb, 29th is handled
2041 + if (!leap_yr && mon < 3) {
2046 + /* These limits and adjustments are independent of
2047 + * whether the chip is in binary mode or not.
2050 + spin_unlock_irq(&rtc_lock);
2057 + if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY)
2058 + || RTC_ALWAYS_BCD) {
2067 + save_control = CMOS_READ(RTC_CONTROL);
2068 + CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL);
2069 + save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
2070 + CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT);
2072 +#ifdef CONFIG_MACH_DECSTATION
2073 + CMOS_WRITE(real_yrs, RTC_DEC_YEAR);
2075 + CMOS_WRITE(yrs, RTC_YEAR);
2076 + CMOS_WRITE(mon, RTC_MONTH);
2077 + CMOS_WRITE(day, RTC_DAY_OF_MONTH);
2078 + CMOS_WRITE(hrs, RTC_HOURS);
2079 + CMOS_WRITE(min, RTC_MINUTES);
2080 + CMOS_WRITE(sec, RTC_SECONDS);
2082 + CMOS_WRITE(save_control, RTC_CONTROL);
2083 + CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
2085 + spin_unlock_irq(&rtc_lock);
2090 +static inline unsigned int get_rtc_ss(void)
2092 + struct rtc_time h;
2098 +static inline int get_rtc_pll(struct rtc_pll_info *pll)
2102 +static inline int set_rtc_pll(struct rtc_pll_info *pll)
2107 +#endif /* __KERNEL__ */
2108 +#endif /* __ASM_RTC_H__ */
2109 --- linux/include/asm-generic/sections.h
2110 +++ linux/include/asm-generic/sections.h
2112 +#ifndef _ASM_GENERIC_SECTIONS_H_
2113 +#define _ASM_GENERIC_SECTIONS_H_
2115 +/* References to section boundaries */
2117 +extern char _text[], _stext[], _etext[];
2118 +extern char _data[], _sdata[], _edata[];
2119 +extern char __bss_start[], __bss_stop[];
2120 +extern char __init_begin[], __init_end[];
2121 +extern char _sinittext[], _einittext[];
2122 +extern char _end[];
2124 +#endif /* _ASM_GENERIC_SECTIONS_H_ */
2125 --- linux/include/asm-generic/siginfo.h
2126 +++ linux/include/asm-generic/siginfo.h
2128 +#ifndef _ASM_GENERIC_SIGINFO_H
2129 +#define _ASM_GENERIC_SIGINFO_H
2131 +#include <linux/compiler.h>
2132 +#include <linux/types.h>
2133 +#include <linux/resource.h>
2135 +typedef union sigval {
2137 + void __user *sival_ptr;
2141 + * This is the size (including padding) of the part of the
2142 + * struct siginfo that is before the union.
2144 +#ifndef __ARCH_SI_PREAMBLE_SIZE
2145 +#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
2148 +#define SI_MAX_SIZE 128
2149 +#ifndef SI_PAD_SIZE
2150 +#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
2153 +#ifndef __ARCH_SI_UID_T
2154 +#define __ARCH_SI_UID_T uid_t
2158 + * The default "si_band" type is "long", as specified by POSIX.
2159 + * However, some architectures want to override this to "int"
2160 + * for historical compatibility reasons, so we allow that.
2162 +#ifndef __ARCH_SI_BAND_T
2163 +#define __ARCH_SI_BAND_T long
2166 +#ifndef HAVE_ARCH_SIGINFO_T
2168 +typedef struct siginfo {
2174 + int _pad[SI_PAD_SIZE];
2178 + pid_t _pid; /* sender's pid */
2179 + __ARCH_SI_UID_T _uid; /* sender's uid */
2182 + /* POSIX.1b timers */
2184 + timer_t _tid; /* timer id */
2185 + int _overrun; /* overrun count */
2186 + char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
2187 + sigval_t _sigval; /* same as below */
2188 + int _sys_private; /* not to be passed to user */
2191 + /* POSIX.1b signals */
2193 + pid_t _pid; /* sender's pid */
2194 + __ARCH_SI_UID_T _uid; /* sender's uid */
2200 + pid_t _pid; /* which child */
2201 + __ARCH_SI_UID_T _uid; /* sender's uid */
2202 + int _status; /* exit code */
2207 + /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
2209 + void __user *_addr; /* faulting insn/memory ref. */
2210 +#ifdef __ARCH_SI_TRAPNO
2211 + int _trapno; /* TRAP # which caused the signal */
2217 + __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
2226 + * How these fields are to be accessed.
2228 +#define si_pid _sifields._kill._pid
2229 +#define si_uid _sifields._kill._uid
2230 +#define si_tid _sifields._timer._tid
2231 +#define si_overrun _sifields._timer._overrun
2232 +#define si_sys_private _sifields._timer._sys_private
2233 +#define si_status _sifields._sigchld._status
2234 +#define si_utime _sifields._sigchld._utime
2235 +#define si_stime _sifields._sigchld._stime
2236 +#define si_value _sifields._rt._sigval
2237 +#define si_int _sifields._rt._sigval.sival_int
2238 +#define si_ptr _sifields._rt._sigval.sival_ptr
2239 +#define si_addr _sifields._sigfault._addr
2240 +#ifdef __ARCH_SI_TRAPNO
2241 +#define si_trapno _sifields._sigfault._trapno
2243 +#define si_band _sifields._sigpoll._band
2244 +#define si_fd _sifields._sigpoll._fd
2247 +#define __SI_MASK 0xffff0000u
2248 +#define __SI_KILL (0 << 16)
2249 +#define __SI_TIMER (1 << 16)
2250 +#define __SI_POLL (2 << 16)
2251 +#define __SI_FAULT (3 << 16)
2252 +#define __SI_CHLD (4 << 16)
2253 +#define __SI_RT (5 << 16)
2254 +#define __SI_MESGQ (6 << 16)
2255 +#define __SI_CODE(T,N) ((T) | ((N) & 0xffff))
2257 +#define __SI_KILL 0
2258 +#define __SI_TIMER 0
2259 +#define __SI_POLL 0
2260 +#define __SI_FAULT 0
2261 +#define __SI_CHLD 0
2263 +#define __SI_MESGQ 0
2264 +#define __SI_CODE(T,N) (N)
2269 + * Digital reserves positive values for kernel-generated signals.
2271 +#define SI_USER 0 /* sent by kill, sigsend, raise */
2272 +#define SI_KERNEL 0x80 /* sent by the kernel from somewhere */
2273 +#define SI_QUEUE -1 /* sent by sigqueue */
2274 +#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
2275 +#define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */
2276 +#define SI_ASYNCIO -4 /* sent by AIO completion */
2277 +#define SI_SIGIO -5 /* sent by queued SIGIO */
2278 +#define SI_TKILL -6 /* sent by tkill system call */
2279 +#define SI_DETHREAD -7 /* sent by execve() killing subsidiary threads */
2281 +#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
2282 +#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
2287 +#define ILL_ILLOPC (__SI_FAULT|1) /* illegal opcode */
2288 +#define ILL_ILLOPN (__SI_FAULT|2) /* illegal operand */
2289 +#define ILL_ILLADR (__SI_FAULT|3) /* illegal addressing mode */
2290 +#define ILL_ILLTRP (__SI_FAULT|4) /* illegal trap */
2291 +#define ILL_PRVOPC (__SI_FAULT|5) /* privileged opcode */
2292 +#define ILL_PRVREG (__SI_FAULT|6) /* privileged register */
2293 +#define ILL_COPROC (__SI_FAULT|7) /* coprocessor error */
2294 +#define ILL_BADSTK (__SI_FAULT|8) /* internal stack error */
2300 +#define FPE_INTDIV (__SI_FAULT|1) /* integer divide by zero */
2301 +#define FPE_INTOVF (__SI_FAULT|2) /* integer overflow */
2302 +#define FPE_FLTDIV (__SI_FAULT|3) /* floating point divide by zero */
2303 +#define FPE_FLTOVF (__SI_FAULT|4) /* floating point overflow */
2304 +#define FPE_FLTUND (__SI_FAULT|5) /* floating point underflow */
2305 +#define FPE_FLTRES (__SI_FAULT|6) /* floating point inexact result */
2306 +#define FPE_FLTINV (__SI_FAULT|7) /* floating point invalid operation */
2307 +#define FPE_FLTSUB (__SI_FAULT|8) /* subscript out of range */
2311 + * SIGSEGV si_codes
2313 +#define SEGV_MAPERR (__SI_FAULT|1) /* address not mapped to object */
2314 +#define SEGV_ACCERR (__SI_FAULT|2) /* invalid permissions for mapped object */
2320 +#define BUS_ADRALN (__SI_FAULT|1) /* invalid address alignment */
2321 +#define BUS_ADRERR (__SI_FAULT|2) /* non-existant physical address */
2322 +#define BUS_OBJERR (__SI_FAULT|3) /* object specific hardware error */
2326 + * SIGTRAP si_codes
2328 +#define TRAP_BRKPT (__SI_FAULT|1) /* process breakpoint */
2329 +#define TRAP_TRACE (__SI_FAULT|2) /* process trace trap */
2333 + * SIGCHLD si_codes
2335 +#define CLD_EXITED (__SI_CHLD|1) /* child has exited */
2336 +#define CLD_KILLED (__SI_CHLD|2) /* child was killed */
2337 +#define CLD_DUMPED (__SI_CHLD|3) /* child terminated abnormally */
2338 +#define CLD_TRAPPED (__SI_CHLD|4) /* traced child has trapped */
2339 +#define CLD_STOPPED (__SI_CHLD|5) /* child has stopped */
2340 +#define CLD_CONTINUED (__SI_CHLD|6) /* stopped child has continued */
2344 + * SIGPOLL si_codes
2346 +#define POLL_IN (__SI_POLL|1) /* data input available */
2347 +#define POLL_OUT (__SI_POLL|2) /* output buffers available */
2348 +#define POLL_MSG (__SI_POLL|3) /* input message available */
2349 +#define POLL_ERR (__SI_POLL|4) /* i/o error */
2350 +#define POLL_PRI (__SI_POLL|5) /* high priority input available */
2351 +#define POLL_HUP (__SI_POLL|6) /* device disconnected */
2355 + * sigevent definitions
2357 + * It seems likely that SIGEV_THREAD will have to be handled from
2358 + * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
2359 + * thread manager then catches and does the appropriate nonsense.
2360 + * However, everything is written out here so as to not get lost.
2362 +#define SIGEV_SIGNAL 0 /* notify via signal */
2363 +#define SIGEV_NONE 1 /* other notification: meaningless */
2364 +#define SIGEV_THREAD 2 /* deliver via thread creation */
2365 +#define SIGEV_THREAD_ID 4 /* deliver to thread */
2367 +#define SIGEV_MAX_SIZE 64
2368 +#ifndef SIGEV_PAD_SIZE
2369 +#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
2372 +typedef struct sigevent {
2373 + sigval_t sigev_value;
2377 + int _pad[SIGEV_PAD_SIZE];
2381 + void (*_function)(sigval_t);
2382 + void *_attribute; /* really pthread_attr_t */
2387 +#define sigev_notify_function _sigev_un._sigev_thread._function
2388 +#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
2389 +#define sigev_notify_thread_id _sigev_un._tid
2394 +void do_schedule_next_timer(struct siginfo *info);
2396 +#ifndef HAVE_ARCH_COPY_SIGINFO
2398 +#include <linux/string.h>
2400 +static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
2402 + if (from->si_code < 0)
2403 + memcpy(to, from, sizeof(*to));
2405 + /* _sigchld is currently the largest know union member */
2406 + memcpy(to, from, __ARCH_SI_PREAMBLE_SIZE + sizeof(from->_sifields._sigchld));
2411 +extern int copy_siginfo_to_user(struct siginfo __user *to, struct siginfo *from);
2413 +#endif /* __KERNEL__ */
2416 --- linux/include/asm-generic/statfs.h
2417 +++ linux/include/asm-generic/statfs.h
2419 +#ifndef _GENERIC_STATFS_H
2420 +#define _GENERIC_STATFS_H
2422 +#ifndef __KERNEL_STRICT_NAMES
2423 +# include <linux/types.h>
2424 +typedef __kernel_fsid_t fsid_t;
2435 + __kernel_fsid_t f_fsid;
2449 + __kernel_fsid_t f_fsid;
2455 +struct compat_statfs64 {
2463 + __kernel_fsid_t f_fsid;
2470 --- linux/include/asm-generic/termios.h
2471 +++ linux/include/asm-generic/termios.h
2473 +/* termios.h: generic termios/termio user copying/translation
2476 +#ifndef _ASM_GENERIC_TERMIOS_H
2477 +#define _ASM_GENERIC_TERMIOS_H
2479 +#include <asm/uaccess.h>
2481 +#ifndef __ARCH_TERMIO_GETPUT
2484 + * Translate a "termio" structure into a "termios". Ugh.
2486 +static inline int user_termio_to_kernel_termios(struct termios *termios,
2487 + struct termio __user *termio)
2489 + unsigned short tmp;
2491 + if (get_user(tmp, &termio->c_iflag) < 0)
2493 + termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp;
2495 + if (get_user(tmp, &termio->c_oflag) < 0)
2497 + termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp;
2499 + if (get_user(tmp, &termio->c_cflag) < 0)
2501 + termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp;
2503 + if (get_user(tmp, &termio->c_lflag) < 0)
2505 + termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp;
2507 + if (get_user(termios->c_line, &termio->c_line) < 0)
2510 + if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0)
2520 + * Translate a "termios" structure into a "termio". Ugh.
2522 +static inline int kernel_termios_to_user_termio(struct termio __user *termio,
2523 + struct termios *termios)
2525 + if (put_user(termios->c_iflag, &termio->c_iflag) < 0 ||
2526 + put_user(termios->c_oflag, &termio->c_oflag) < 0 ||
2527 + put_user(termios->c_cflag, &termio->c_cflag) < 0 ||
2528 + put_user(termios->c_lflag, &termio->c_lflag) < 0 ||
2529 + put_user(termios->c_line, &termio->c_line) < 0 ||
2530 + copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0)
2536 +#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
2537 +#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
2539 +#endif /* __ARCH_TERMIO_GETPUT */
2541 +#endif /* _ASM_GENERIC_TERMIOS_H */
2542 --- linux/include/asm-generic/tlb.h
2543 +++ linux/include/asm-generic/tlb.h
2545 +/* asm-generic/tlb.h
2547 + * Generic TLB shootdown code
2549 + * Copyright 2001 Red Hat, Inc.
2550 + * Based on code from mm/memory.c Copyright Linus Torvalds and others.
2552 + * This program is free software; you can redistribute it and/or
2553 + * modify it under the terms of the GNU General Public License
2554 + * as published by the Free Software Foundation; either version
2555 + * 2 of the License, or (at your option) any later version.
2557 +#ifndef _ASM_GENERIC__TLB_H
2558 +#define _ASM_GENERIC__TLB_H
2560 +// #include <linux/config.h>
2561 +#include <linux/swap.h>
2562 +#include <asm/pgalloc.h>
2563 +#include <asm/tlbflush.h>
2566 + * For UP we don't need to worry about TLB flush
2567 + * and page free order so much..
2570 + #define FREE_PTE_NR 506
2571 + #define tlb_fast_mode(tlb) ((tlb)->nr == ~0U)
2573 + #define FREE_PTE_NR 1
2574 + #define tlb_fast_mode(tlb) 1
2577 +/* struct mmu_gather is an opaque type used by the mm code for passing around
2578 + * any data needed by arch specific code for tlb_remove_page. This structure
2579 + * can be per-CPU or per-MM as the page table lock is held for the duration of
2582 +struct mmu_gather {
2583 + struct mm_struct *mm;
2584 + unsigned int nr; /* set to ~0U means fast mode */
2585 + unsigned int need_flush;/* Really unmapped some ptes? */
2586 + unsigned int fullmm; /* non-zero means full mm flush */
2587 + unsigned long freed;
2588 + struct page * pages[FREE_PTE_NR];
2591 +/* Users of the generic TLB shootdown code must declare this storage space. */
2592 +DECLARE_PER_CPU(struct mmu_gather, mmu_gathers);
2595 + * Return a pointer to an initialized struct mmu_gather.
2597 +static inline struct mmu_gather *
2598 +tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush)
2600 + struct mmu_gather *tlb = &per_cpu(mmu_gathers, smp_processor_id());
2604 + /* Use fast mode if only one CPU is online */
2605 + tlb->nr = num_online_cpus() > 1 ? 0U : ~0U;
2607 + tlb->fullmm = full_mm_flush;
2614 +tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
2616 + if (!tlb->need_flush)
2618 + tlb->need_flush = 0;
2620 + if (!tlb_fast_mode(tlb)) {
2621 + free_pages_and_swap_cache(tlb->pages, tlb->nr);
2627 + * Called at the end of the shootdown operation to free up any resources
2628 + * that were required. The page table lock is still held at this point.
2631 +tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
2633 + int freed = tlb->freed;
2634 + struct mm_struct *mm = tlb->mm;
2635 + int rss = mm->rss;
2639 + mm->rss = rss - freed;
2640 + tlb_flush_mmu(tlb, start, end);
2642 + /* keep the page table cache within bounds */
2643 + check_pgt_cache();
2646 +static inline unsigned int
2647 +tlb_is_full_mm(struct mmu_gather *tlb)
2649 + return tlb->fullmm;
2653 + * Must perform the equivalent to __free_pte(pte_get_and_clear(ptep)), while
2654 + * handling the additional races in SMP caused by other CPUs caching valid
2655 + * mappings in their TLBs.
2657 +static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
2659 + tlb->need_flush = 1;
2660 + if (tlb_fast_mode(tlb)) {
2661 + free_page_and_swap_cache(page);
2664 + tlb->pages[tlb->nr++] = page;
2665 + if (tlb->nr >= FREE_PTE_NR)
2666 + tlb_flush_mmu(tlb, 0, 0);
2670 + * tlb_remove_tlb_entry - remember a pte unmapping for later tlb invalidation.
2672 + * Record the fact that pte's were really umapped in ->need_flush, so we can
2673 + * later optimise away the tlb invalidate. This helps when userspace is
2674 + * unmapping already-unmapped pages, which happens quite a lot.
2676 +#define tlb_remove_tlb_entry(tlb, ptep, address) \
2678 + tlb->need_flush = 1; \
2679 + __tlb_remove_tlb_entry(tlb, ptep, address); \
2682 +#define pte_free_tlb(tlb, ptep) \
2684 + tlb->need_flush = 1; \
2685 + __pte_free_tlb(tlb, ptep); \
2688 +#ifndef __ARCH_HAS_4LEVEL_HACK
2689 +#define pud_free_tlb(tlb, pudp) \
2691 + tlb->need_flush = 1; \
2692 + __pud_free_tlb(tlb, pudp); \
2696 +#define pmd_free_tlb(tlb, pmdp) \
2698 + tlb->need_flush = 1; \
2699 + __pmd_free_tlb(tlb, pmdp); \
2702 +#define tlb_migrate_finish(mm) do {} while (0)
2704 +#endif /* _ASM_GENERIC__TLB_H */
2705 --- linux/include/asm-generic/topology.h
2706 +++ linux/include/asm-generic/topology.h
2709 + * linux/include/asm-generic/topology.h
2711 + * Written by: Matthew Dobson, IBM Corporation
2713 + * Copyright (C) 2002, IBM Corp.
2715 + * All rights reserved.
2717 + * This program is free software; you can redistribute it and/or modify
2718 + * it under the terms of the GNU General Public License as published by
2719 + * the Free Software Foundation; either version 2 of the License, or
2720 + * (at your option) any later version.
2722 + * This program is distributed in the hope that it will be useful, but
2723 + * WITHOUT ANY WARRANTY; without even the implied warranty of
2724 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
2725 + * NON INFRINGEMENT. See the GNU General Public License for more
2728 + * You should have received a copy of the GNU General Public License
2729 + * along with this program; if not, write to the Free Software
2730 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
2732 + * Send feedback to <colpatch@us.ibm.com>
2734 +#ifndef _ASM_GENERIC_TOPOLOGY_H
2735 +#define _ASM_GENERIC_TOPOLOGY_H
2737 +/* Other architectures wishing to use this simple topology API should fill
2738 + in the below functions as appropriate in their own <asm/topology.h> file. */
2739 +#ifndef cpu_to_node
2740 +#define cpu_to_node(cpu) (0)
2742 +#ifndef parent_node
2743 +#define parent_node(node) (0)
2745 +#ifndef node_to_cpumask
2746 +#define node_to_cpumask(node) (cpu_online_map)
2748 +#ifndef node_to_first_cpu
2749 +#define node_to_first_cpu(node) (0)
2751 +#ifndef pcibus_to_cpumask
2752 +#define pcibus_to_cpumask(bus) (cpu_online_map)
2755 +#endif /* _ASM_GENERIC_TOPOLOGY_H */
2756 --- linux/include/asm-generic/uaccess.h
2757 +++ linux/include/asm-generic/uaccess.h
2759 +#ifndef _ASM_GENERIC_UACCESS_H_
2760 +#define _ASM_GENERIC_UACCESS_H_
2763 + * This macro should be used instead of __get_user() when accessing
2764 + * values at locations that are not known to be aligned.
2766 +#define __get_user_unaligned(x, ptr) \
2768 + __typeof__ (*(ptr)) __x; \
2769 + __copy_from_user(&__x, (ptr), sizeof(*(ptr))) ? -EFAULT : 0; \
2775 + * This macro should be used instead of __put_user() when accessing
2776 + * values at locations that are not known to be aligned.
2778 +#define __put_user_unaligned(x, ptr) \
2780 + __typeof__ (*(ptr)) __x = (x); \
2781 + __copy_to_user((ptr), &__x, sizeof(*(ptr))) ? -EFAULT : 0; \
2784 +#endif /* _ASM_GENERIC_UACCESS_H */
2785 --- linux/include/asm-generic/unaligned.h
2786 +++ linux/include/asm-generic/unaligned.h
2788 +#ifndef _ASM_GENERIC_UNALIGNED_H_
2789 +#define _ASM_GENERIC_UNALIGNED_H_
2792 + * For the benefit of those who are trying to port Linux to another
2793 + * architecture, here are some C-language equivalents.
2796 +#include <asm/string.h>
2799 +#define get_unaligned(ptr) \
2800 + ({ __typeof__(*(ptr)) __tmp; memcpy(&__tmp, (ptr), sizeof(*(ptr))); __tmp; })
2802 +#define put_unaligned(val, ptr) \
2803 + ({ __typeof__(*(ptr)) __tmp = (val); \
2804 + memcpy((ptr), &__tmp, sizeof(*(ptr))); \
2807 +#endif /* _ASM_GENERIC_UNALIGNED_H */
2808 --- linux/include/asm-generic/vmlinux.lds.h
2809 +++ linux/include/asm-generic/vmlinux.lds.h
2811 +#ifndef LOAD_OFFSET
2812 +#define LOAD_OFFSET 0
2815 +#ifndef VMLINUX_SYMBOL
2816 +#define VMLINUX_SYMBOL(_sym_) _sym_
2820 + .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
2821 + *(.rodata) *(.rodata.*) \
2822 + *(__vermagic) /* Kernel version magic */ \
2825 + .rodata1 : AT(ADDR(.rodata1) - LOAD_OFFSET) { \
2829 + /* PCI quirks */ \
2830 + .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \
2831 + VMLINUX_SYMBOL(__start_pci_fixups_early) = .; \
2832 + *(.pci_fixup_early) \
2833 + VMLINUX_SYMBOL(__end_pci_fixups_early) = .; \
2834 + VMLINUX_SYMBOL(__start_pci_fixups_header) = .; \
2835 + *(.pci_fixup_header) \
2836 + VMLINUX_SYMBOL(__end_pci_fixups_header) = .; \
2837 + VMLINUX_SYMBOL(__start_pci_fixups_final) = .; \
2838 + *(.pci_fixup_final) \
2839 + VMLINUX_SYMBOL(__end_pci_fixups_final) = .; \
2840 + VMLINUX_SYMBOL(__start_pci_fixups_enable) = .; \
2841 + *(.pci_fixup_enable) \
2842 + VMLINUX_SYMBOL(__end_pci_fixups_enable) = .; \
2845 + /* Kernel symbol table: Normal symbols */ \
2846 + __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \
2847 + VMLINUX_SYMBOL(__start___ksymtab) = .; \
2849 + VMLINUX_SYMBOL(__stop___ksymtab) = .; \
2852 + /* Kernel symbol table: GPL-only symbols */ \
2853 + __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \
2854 + VMLINUX_SYMBOL(__start___ksymtab_gpl) = .; \
2855 + *(__ksymtab_gpl) \
2856 + VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \
2859 + /* Kernel symbol table: Normal symbols */ \
2860 + __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \
2861 + VMLINUX_SYMBOL(__start___kcrctab) = .; \
2863 + VMLINUX_SYMBOL(__stop___kcrctab) = .; \
2866 + /* Kernel symbol table: GPL-only symbols */ \
2867 + __kcrctab_gpl : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) { \
2868 + VMLINUX_SYMBOL(__start___kcrctab_gpl) = .; \
2869 + *(__kcrctab_gpl) \
2870 + VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \
2873 + /* Kernel symbol table: strings */ \
2874 + __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \
2875 + *(__ksymtab_strings) \
2878 + /* Built-in module parameters. */ \
2879 + __param : AT(ADDR(__param) - LOAD_OFFSET) { \
2880 + VMLINUX_SYMBOL(__start___param) = .; \
2882 + VMLINUX_SYMBOL(__stop___param) = .; \
2885 +#define SECURITY_INIT \
2886 + .security_initcall.init : { \
2887 + VMLINUX_SYMBOL(__security_initcall_start) = .; \
2888 + *(.security_initcall.init) \
2889 + VMLINUX_SYMBOL(__security_initcall_end) = .; \
2892 +#define SCHED_TEXT \
2893 + VMLINUX_SYMBOL(__sched_text_start) = .; \
2895 + VMLINUX_SYMBOL(__sched_text_end) = .;
2897 +#define LOCK_TEXT \
2898 + VMLINUX_SYMBOL(__lock_text_start) = .; \
2899 + *(.spinlock.text) \
2900 + VMLINUX_SYMBOL(__lock_text_end) = .;
2901 --- linux/include/asm-generic/xor.h
2902 +++ linux/include/asm-generic/xor.h
2905 + * include/asm-generic/xor.h
2907 + * Generic optimized RAID-5 checksumming functions.
2909 + * This program is free software; you can redistribute it and/or modify
2910 + * it under the terms of the GNU General Public License as published by
2911 + * the Free Software Foundation; either version 2, or (at your option)
2912 + * any later version.
2914 + * You should have received a copy of the GNU General Public License
2915 + * (for example /usr/src/linux/COPYING); if not, write to the Free
2916 + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
2919 +#include <asm/processor.h>
2922 +xor_8regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
2924 + long lines = bytes / (sizeof (long)) / 8;
2937 + } while (--lines > 0);
2941 +xor_8regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2942 + unsigned long *p3)
2944 + long lines = bytes / (sizeof (long)) / 8;
2947 + p1[0] ^= p2[0] ^ p3[0];
2948 + p1[1] ^= p2[1] ^ p3[1];
2949 + p1[2] ^= p2[2] ^ p3[2];
2950 + p1[3] ^= p2[3] ^ p3[3];
2951 + p1[4] ^= p2[4] ^ p3[4];
2952 + p1[5] ^= p2[5] ^ p3[5];
2953 + p1[6] ^= p2[6] ^ p3[6];
2954 + p1[7] ^= p2[7] ^ p3[7];
2958 + } while (--lines > 0);
2962 +xor_8regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2963 + unsigned long *p3, unsigned long *p4)
2965 + long lines = bytes / (sizeof (long)) / 8;
2968 + p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
2969 + p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
2970 + p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
2971 + p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
2972 + p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
2973 + p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
2974 + p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
2975 + p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
2980 + } while (--lines > 0);
2984 +xor_8regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2985 + unsigned long *p3, unsigned long *p4, unsigned long *p5)
2987 + long lines = bytes / (sizeof (long)) / 8;
2990 + p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
2991 + p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
2992 + p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
2993 + p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
2994 + p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
2995 + p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
2996 + p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
2997 + p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
3003 + } while (--lines > 0);
3007 +xor_32regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
3009 + long lines = bytes / (sizeof (long)) / 8;
3012 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3013 + d0 = p1[0]; /* Pull the stuff into registers */
3014 + d1 = p1[1]; /* ... in bursts, if possible. */
3029 + p1[0] = d0; /* Store the result (in bursts) */
3039 + } while (--lines > 0);
3043 +xor_32regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3044 + unsigned long *p3)
3046 + long lines = bytes / (sizeof (long)) / 8;
3049 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3050 + d0 = p1[0]; /* Pull the stuff into registers */
3051 + d1 = p1[1]; /* ... in bursts, if possible. */
3074 + p1[0] = d0; /* Store the result (in bursts) */
3085 + } while (--lines > 0);
3089 +xor_32regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3090 + unsigned long *p3, unsigned long *p4)
3092 + long lines = bytes / (sizeof (long)) / 8;
3095 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3096 + d0 = p1[0]; /* Pull the stuff into registers */
3097 + d1 = p1[1]; /* ... in bursts, if possible. */
3128 + p1[0] = d0; /* Store the result (in bursts) */
3140 + } while (--lines > 0);
3144 +xor_32regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3145 + unsigned long *p3, unsigned long *p4, unsigned long *p5)
3147 + long lines = bytes / (sizeof (long)) / 8;
3150 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3151 + d0 = p1[0]; /* Pull the stuff into registers */
3152 + d1 = p1[1]; /* ... in bursts, if possible. */
3191 + p1[0] = d0; /* Store the result (in bursts) */
3204 + } while (--lines > 0);
3208 +xor_8regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
3210 + long lines = bytes / (sizeof (long)) / 8 - 1;
3228 + } while (--lines > 0);
3234 +xor_8regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3235 + unsigned long *p3)
3237 + long lines = bytes / (sizeof (long)) / 8 - 1;
3247 + p1[0] ^= p2[0] ^ p3[0];
3248 + p1[1] ^= p2[1] ^ p3[1];
3249 + p1[2] ^= p2[2] ^ p3[2];
3250 + p1[3] ^= p2[3] ^ p3[3];
3251 + p1[4] ^= p2[4] ^ p3[4];
3252 + p1[5] ^= p2[5] ^ p3[5];
3253 + p1[6] ^= p2[6] ^ p3[6];
3254 + p1[7] ^= p2[7] ^ p3[7];
3258 + } while (--lines > 0);
3264 +xor_8regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3265 + unsigned long *p3, unsigned long *p4)
3267 + long lines = bytes / (sizeof (long)) / 8 - 1;
3280 + p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
3281 + p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
3282 + p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
3283 + p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
3284 + p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
3285 + p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
3286 + p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
3287 + p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
3292 + } while (--lines > 0);
3298 +xor_8regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3299 + unsigned long *p3, unsigned long *p4, unsigned long *p5)
3301 + long lines = bytes / (sizeof (long)) / 8 - 1;
3316 + p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
3317 + p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
3318 + p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
3319 + p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
3320 + p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
3321 + p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
3322 + p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
3323 + p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
3329 + } while (--lines > 0);
3335 +xor_32regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
3337 + long lines = bytes / (sizeof (long)) / 8 - 1;
3343 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3348 + d0 = p1[0]; /* Pull the stuff into registers */
3349 + d1 = p1[1]; /* ... in bursts, if possible. */
3364 + p1[0] = d0; /* Store the result (in bursts) */
3374 + } while (--lines > 0);
3380 +xor_32regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3381 + unsigned long *p3)
3383 + long lines = bytes / (sizeof (long)) / 8 - 1;
3390 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3396 + d0 = p1[0]; /* Pull the stuff into registers */
3397 + d1 = p1[1]; /* ... in bursts, if possible. */
3420 + p1[0] = d0; /* Store the result (in bursts) */
3431 + } while (--lines > 0);
3437 +xor_32regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3438 + unsigned long *p3, unsigned long *p4)
3440 + long lines = bytes / (sizeof (long)) / 8 - 1;
3448 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3455 + d0 = p1[0]; /* Pull the stuff into registers */
3456 + d1 = p1[1]; /* ... in bursts, if possible. */
3487 + p1[0] = d0; /* Store the result (in bursts) */
3499 + } while (--lines > 0);
3505 +xor_32regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3506 + unsigned long *p3, unsigned long *p4, unsigned long *p5)
3508 + long lines = bytes / (sizeof (long)) / 8 - 1;
3517 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3525 + d0 = p1[0]; /* Pull the stuff into registers */
3526 + d1 = p1[1]; /* ... in bursts, if possible. */
3565 + p1[0] = d0; /* Store the result (in bursts) */
3578 + } while (--lines > 0);
3583 +static struct xor_block_template xor_block_8regs = {
3585 + .do_2 = xor_8regs_2,
3586 + .do_3 = xor_8regs_3,
3587 + .do_4 = xor_8regs_4,
3588 + .do_5 = xor_8regs_5,
3591 +static struct xor_block_template xor_block_32regs = {
3593 + .do_2 = xor_32regs_2,
3594 + .do_3 = xor_32regs_3,
3595 + .do_4 = xor_32regs_4,
3596 + .do_5 = xor_32regs_5,
3599 +static struct xor_block_template xor_block_8regs_p = {
3600 + .name = "8regs_prefetch",
3601 + .do_2 = xor_8regs_p_2,
3602 + .do_3 = xor_8regs_p_3,
3603 + .do_4 = xor_8regs_p_4,
3604 + .do_5 = xor_8regs_p_5,
3607 +static struct xor_block_template xor_block_32regs_p = {
3608 + .name = "32regs_prefetch",
3609 + .do_2 = xor_32regs_p_2,
3610 + .do_3 = xor_32regs_p_3,
3611 + .do_4 = xor_32regs_p_4,
3612 + .do_5 = xor_32regs_p_5,
3615 +#define XOR_TRY_TEMPLATES \
3617 + xor_speed(&xor_block_8regs); \
3618 + xor_speed(&xor_block_8regs_p); \
3619 + xor_speed(&xor_block_32regs); \
3620 + xor_speed(&xor_block_32regs_p); \
3622 --- linux/include/asm-nios2nommu/altera_juart.h
3623 +++ linux/include/asm-nios2nommu/altera_juart.h
3625 +/*------------------------------------------------------------------------
3627 + * linux/drivers/serial/altera_juart.h
3629 + * Driver for Altera JTAG UART core with Avalon interface
3631 + * Copyright (C) 2004 Microtronix Datacom Ltd
3633 + * This program is free software; you can redistribute it and/or modify
3634 + * it under the terms of the GNU General Public License as published by
3635 + * the Free Software Foundation; either version 2 of the License, or
3636 + * (at your option) any later version.
3638 + * This program is distributed in the hope that it will be useful,
3639 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
3640 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3641 + * GNU General Public License for more details.
3645 + * Jun/20/2005 DGT Microtronix Datacom NiosII
3647 + -----------------------------------------------------------------------*/
3649 +#ifndef _ALTERA_JUART_H_
3650 + #define _ALTERA_JUART_H_
3652 + /* jtag uart details needed outside of the driver itself: */
3653 + /* by: arch/kernel/start.c - boot time error message(s) */
3655 + void jtaguart_console_write
3656 + ( struct console *co,
3658 + unsigned int count);
3660 +#endif /* _ALTERA_JUART_H_ */
3661 --- linux/include/asm-nios2nommu/a.out.h
3662 +++ linux/include/asm-nios2nommu/a.out.h
3664 +/* $Id: a.out.h,v 1.4 2004/03/30 19:35:04 ken-h Exp $ */
3666 + * Copyright (C) 2004 Microtronix Datacom Ltd.
3668 + * All rights reserved.
3670 + * This program is free software; you can redistribute it and/or modify
3671 + * it under the terms of the GNU General Public License as published by
3672 + * the Free Software Foundation; either version 2 of the License, or
3673 + * (at your option) any later version.
3675 + * This program is distributed in the hope that it will be useful, but
3676 + * WITHOUT ANY WARRANTY; without even the implied warranty of
3677 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
3678 + * NON INFRINGEMENT. See the GNU General Public License for more
3681 + * You should have received a copy of the GNU General Public License
3682 + * along with this program; if not, write to the Free Software
3683 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
3686 +#ifndef __NIOS2NOMMU_A_OUT_H__
3687 +#define __NIOS2NOMMU_A_OUT_H__
3689 +#define SPARC_PGSIZE 0x1000 /* Thanks to the sun4 architecture... */
3690 +#define SEGMENT_SIZE SPARC_PGSIZE /* whee... */
3693 + unsigned char a_dynamic:1; /* A __DYNAMIC is in this image */
3694 + unsigned char a_toolversion:7;
3695 + unsigned char a_machtype;
3696 + unsigned short a_info;
3697 + unsigned long a_text; /* length of text, in bytes */
3698 + unsigned long a_data; /* length of data, in bytes */
3699 + unsigned long a_bss; /* length of bss, in bytes */
3700 + unsigned long a_syms; /* length of symbol table, in bytes */
3701 + unsigned long a_entry; /* where program begins */
3702 + unsigned long a_trsize;
3703 + unsigned long a_drsize;
3706 +#define INIT_EXEC { \
3708 + .a_toolversion = 0, \
3709 + .a_machtype = 0, \
3720 +/* Where in the file does the text information begin? */
3721 +#define N_TXTOFF(x) (N_MAGIC(x) == ZMAGIC ? 0 : sizeof (struct exec))
3723 +/* Where do the Symbols start? */
3724 +#define N_SYMOFF(x) (N_TXTOFF(x) + (x).a_text + \
3725 + (x).a_data + (x).a_trsize + \
3728 +/* Where does text segment go in memory after being loaded? */
3729 +#define N_TXTADDR(x) (((N_MAGIC(x) == ZMAGIC) && \
3730 + ((x).a_entry < SPARC_PGSIZE)) ? \
3733 +/* And same for the data segment.. */
3734 +#define N_DATADDR(x) (N_MAGIC(x)==OMAGIC ? \
3735 + (N_TXTADDR(x) + (x).a_text) \
3736 + : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
3738 +#define N_TRSIZE(a) ((a).a_trsize)
3739 +#define N_DRSIZE(a) ((a).a_drsize)
3740 +#define N_SYMSIZE(a) ((a).a_syms)
3744 +#define STACK_TOP TASK_SIZE
3748 +#endif /* __NIOS2NOMMU_A_OUT_H__ */
3749 --- linux/include/asm-nios2nommu/asm-macros.h
3750 +++ linux/include/asm-nios2nommu/asm-macros.h
3753 + * Macro used to simplify coding multi-line assembler.
3754 + * Some of the bit test macro can simplify down to one line
3755 + * depending on the mask value.
3757 + * Copyright (C) 2004 Microtronix Datacom Ltd.
3759 + * All rights reserved.
3761 + * This program is free software; you can redistribute it and/or modify
3762 + * it under the terms of the GNU General Public License as published by
3763 + * the Free Software Foundation; either version 2 of the License, or
3764 + * (at your option) any later version.
3766 + * This program is distributed in the hope that it will be useful, but
3767 + * WITHOUT ANY WARRANTY; without even the implied warranty of
3768 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
3769 + * NON INFRINGEMENT. See the GNU General Public License for more
3772 + * You should have received a copy of the GNU General Public License
3773 + * along with this program; if not, write to the Free Software
3774 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
3779 + * ANDs reg2 with mask and places the result in reg1.
3781 + * You cannnot use the same register for reg1 & reg2.
3784 +.macro ANDI32 reg1,reg2,mask
3785 + .if \mask & 0xffff
3786 + .if \mask & 0xffff0000
3787 + movhi \reg1,%hi(\mask)
3788 + movui \reg1,%lo(\mask)
3789 + and \reg1,\reg1,\reg2
3791 + andi \reg1,\reg2,%lo(\mask)
3794 + andhi \reg1,\reg2,%hi(\mask)
3799 + * ORs reg2 with mask and places the result in reg1.
3801 + * It is safe to use the same register for reg1 & reg2.
3804 +.macro ORI32 reg1,reg2,mask
3805 + .if \mask & 0xffff
3806 + .if \mask & 0xffff0000
3807 + orhi \reg1,\reg2,%hi(\mask)
3808 + ori \reg1,\reg2,%lo(\mask)
3810 + ori \reg1,\reg2,%lo(\mask)
3813 + orhi \reg1,\reg2,%hi(\mask)
3818 + * XORs reg2 with mask and places the result in reg1.
3820 + * It is safe to use the same register for reg1 & reg2.
3823 +.macro XORI32 reg1,reg2,mask
3824 + .if \mask & 0xffff
3825 + .if \mask & 0xffff0000
3826 + xorhi \reg1,\reg2,%hi(\mask)
3827 + xori \reg1,\reg1,%lo(\mask)
3829 + xori \reg1,\reg2,%lo(\mask)
3832 + xorhi \reg1,\reg2,%hi(\mask)
3837 + * This is a support macro for BTBZ & BTBNZ. It checks
3838 + * the bit to make sure it is valid 32 value.
3840 + * It is safe to use the same register for reg1 & reg2.
3843 +.macro BT reg1,reg2,bit
3848 + andi \reg1,\reg2,(1 << \bit)
3850 + andhi \reg1,\reg2,(1 << (\bit - 16))
3856 + * Tests the bit in reg2 and branches to label if the
3857 + * bit is zero. The result of the bit test is stored in reg1.
3859 + * It is safe to use the same register for reg1 & reg2.
3862 +.macro BTBZ reg1,reg2,bit,label
3863 + BT \reg1,\reg2,\bit
3864 + beq \reg1,r0,\label
3868 + * Tests the bit in reg2 and branches to label if the
3869 + * bit is non-zero. The result of the bit test is stored in reg1.
3871 + * It is safe to use the same register for reg1 & reg2.
3874 +.macro BTBNZ reg1,reg2,bit,label
3875 + BT \reg1,\reg2,\bit
3876 + bne \reg1,r0,\label
3880 + * Tests the bit in reg2 and then compliments the bit in reg2.
3881 + * The result of the bit test is stored in reg1.
3883 + * It is NOT safe to use the same register for reg1 & reg2.
3886 +.macro BTC reg1,reg2,bit
3891 + andi \reg1,\reg2,(1 << \bit)
3892 + xori \reg2,\reg2,(1 << \bit)
3894 + andhi \reg1,\reg2,(1 << (\bit - 16))
3895 + xorhi \reg2,\reg2,(1 << (\bit - 16))
3901 + * Tests the bit in reg2 and then sets the bit in reg2.
3902 + * The result of the bit test is stored in reg1.
3904 + * It is NOT safe to use the same register for reg1 & reg2.
3907 +.macro BTS reg1,reg2,bit
3912 + andi \reg1,\reg2,(1 << \bit)
3913 + ori \reg2,\reg2,(1 << \bit)
3915 + andhi \reg1,\reg2,(1 << (\bit - 16))
3916 + orhi \reg2,\reg2,(1 << (\bit - 16))
3922 + * Tests the bit in reg2 and then resets the bit in reg2.
3923 + * The result of the bit test is stored in reg1.
3925 + * It is NOT safe to use the same register for reg1 & reg2.
3928 +.macro BTR reg1,reg2,bit
3933 + andi \reg1,\reg2,(1 << \bit)
3934 + andi \reg2,\reg2,%lo(~(1 << \bit))
3936 + andhi \reg1,\reg2,(1 << (\bit - 16))
3937 + andhi \reg2,\reg2,%lo(~(1 << (\bit - 16)))
3943 + * Tests the bit in reg2 and then compliments the bit in reg2.
3944 + * The result of the bit test is stored in reg1. If the
3945 + * original bit was zero it branches to label.
3947 + * It is NOT safe to use the same register for reg1 & reg2.
3950 +.macro BTCBZ reg1,reg2,bit,label
3951 + BTC \reg1,\reg2,\bit
3952 + beq \reg1,r0,\label
3956 + * Tests the bit in reg2 and then compliments the bit in reg2.
3957 + * The result of the bit test is stored in reg1. If the
3958 + * original bit was non-zero it branches to label.
3960 + * It is NOT safe to use the same register for reg1 & reg2.
3963 +.macro BTCBNZ reg1,reg2,bit,label
3964 + BTC \reg1,\reg2,\bit
3965 + bne \reg1,r0,\label
3969 + * Tests the bit in reg2 and then sets the bit in reg2.
3970 + * The result of the bit test is stored in reg1. If the
3971 + * original bit was zero it branches to label.
3973 + * It is NOT safe to use the same register for reg1 & reg2.
3976 +.macro BTSBZ reg1,reg2,bit,label
3977 + BTS \reg1,\reg2,\bit
3978 + beq \reg1,r0,\label
3982 + * Tests the bit in reg2 and then sets the bit in reg2.
3983 + * The result of the bit test is stored in reg1. If the
3984 + * original bit was non-zero it branches to label.
3986 + * It is NOT safe to use the same register for reg1 & reg2.
3989 +.macro BTSBNZ reg1,reg2,bit,label
3990 + BTS \reg1,\reg2,\bit
3991 + bne \reg1,r0,\label
3995 + * Tests the bit in reg2 and then resets the bit in reg2.
3996 + * The result of the bit test is stored in reg1. If the
3997 + * original bit was zero it branches to label.
3999 + * It is NOT safe to use the same register for reg1 & reg2.
4002 +.macro BTRBZ reg1,reg2,bit,label
4003 + BTR \reg1,\reg2,\bit
4004 + bne \reg1,r0,\label
4008 + * Tests the bit in reg2 and then resets the bit in reg2.
4009 + * The result of the bit test is stored in reg1. If the
4010 + * original bit was non-zero it branches to label.
4012 + * It is NOT safe to use the same register for reg1 & reg2.
4015 +.macro BTRBNZ reg1,reg2,bit,label
4016 + BTR \reg1,\reg2,\bit
4017 + bne \reg1,r0,\label
4021 + * Tests the bits in mask against reg2 stores the result in reg1.
4022 + * If the all the bits in the mask are zero it branches to label.
4024 + * It is safe to use the same register for reg1 & reg2.
4027 +.macro TSTBZ reg1,reg2,mask,label
4028 + ANDI32 \reg1,\reg2,\mask
4029 + beq \reg1,r0,\label
4033 + * Tests the bits in mask against reg2 stores the result in reg1.
4034 + * If the any of the bits in the mask are 1 it branches to label.
4036 + * It is safe to use the same register for reg1 & reg2.
4039 +.macro TSTBNZ reg1,reg2,mask,label
4040 + ANDI32 \reg1,\reg2,\mask
4041 + bne \reg1,r0,\label
4045 + * Pushes reg onto the stack.
4054 + * Pops the top of the stack into reg.
4071 + * The preprocessor macro does not work for
4072 + * the nios2 compiler. Undefine ENTRY and define
4073 + * a real assembler macro.
4076 +#define ENTRY(name) ASM_ENTRY name
4078 +.macro ASM_ENTRY name
4083 --- linux/include/asm-nios2nommu/atomic.h
4084 +++ linux/include/asm-nios2nommu/atomic.h
4086 +//vic - add 'atomic_add/sub_return', 'atomic_add_negative'
4087 +//vic from v850 architecture
4091 + * Copyright (C) 2004 Microtronix Datacom Ltd.
4092 + * Copyright (C) 2001 Vic Phillips (vic@microtronix.com)
4094 + * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
4096 + * All rights reserved.
4098 + * This program is free software; you can redistribute it and/or modify
4099 + * it under the terms of the GNU General Public License as published by
4100 + * the Free Software Foundation; either version 2 of the License, or
4101 + * (at your option) any later version.
4103 + * This program is distributed in the hope that it will be useful, but
4104 + * WITHOUT ANY WARRANTY; without even the implied warranty of
4105 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
4106 + * NON INFRINGEMENT. See the GNU General Public License for more
4109 + * You should have received a copy of the GNU General Public License
4110 + * along with this program; if not, write to the Free Software
4111 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
4115 +#ifndef __ARCH_NIOS2NOMMU_ATOMIC__
4116 +#define __ARCH_NIOS2NOMMU_ATOMIC__
4118 +#include <asm/system.h>
4120 +typedef struct { int counter; } atomic_t;
4121 +#define ATOMIC_INIT(i) { (i) }
4123 +#define atomic_read(v) ((v)->counter)
4124 +#define atomic_set(v, i) (((v)->counter) = i)
4127 +extern __inline__ void atomic_add(int i, atomic_t *v)
4129 + unsigned long flags;
4131 + local_irq_save(flags);
4133 + local_irq_restore(flags);
4136 +extern __inline__ int atomic_add_negative(int i, atomic_t *v)
4138 + unsigned long flags;
4141 + local_irq_save(flags);
4143 + result = (v->counter < 0);
4144 + local_irq_restore(flags);
4148 +extern __inline__ void atomic_sub(int i, atomic_t *v)
4150 + unsigned long flags;
4152 + local_irq_save(flags);
4154 + local_irq_restore(flags);
4157 +extern __inline__ int atomic_sub_and_test(int i, atomic_t *v)
4160 + unsigned long flags;
4162 + local_irq_save(flags);
4164 + result = (v->counter == 0);
4165 + local_irq_restore(flags);
4169 +extern __inline__ void atomic_inc(atomic_t *v)
4171 + unsigned long flags;
4173 + local_irq_save(flags);
4175 + local_irq_restore(flags);
4178 +extern __inline__ int atomic_inc_and_test(atomic_t *v)
4180 + unsigned long flags;
4183 + local_irq_save(flags);
4185 + result = (v->counter == 0);
4186 + local_irq_restore(flags);
4190 +extern __inline__ void atomic_dec(atomic_t *v)
4192 + int i = 1; /* the compiler optimizes better this way */
4193 + unsigned long flags;
4195 + local_irq_save(flags);
4197 + local_irq_restore(flags);
4200 +extern __inline__ int atomic_dec_and_test(atomic_t *v)
4203 + int i = 1; /* the compiler optimizes better this way */
4204 + unsigned long flags;
4206 + local_irq_save(flags);
4208 + result = (v->counter == 0);
4209 + local_irq_restore(flags);
4213 +extern __inline__ int atomic_inc_return(atomic_t *v)
4216 + unsigned long flags;
4218 + local_irq_save(flags);
4219 + result = ++v->counter;
4220 + local_irq_restore(flags);
4224 +extern __inline__ int atomic_dec_return(atomic_t *v)
4227 + int i = 1; /* the compiler optimizes better this way */
4228 + unsigned long flags;
4230 + local_irq_save(flags);
4232 + result = v->counter;
4233 + local_irq_restore(flags);
4237 +extern __inline__ int atomic_add_return (int i, volatile atomic_t *v)
4240 + unsigned long flags;
4242 + local_irq_save(flags);
4243 + res = v->counter + i;
4245 + local_irq_restore(flags);
4250 +static __inline__ int atomic_sub_return (int i, volatile atomic_t *v)
4253 + unsigned long flags;
4255 + local_irq_save(flags);
4256 + res = v->counter - i;
4258 + local_irq_restore(flags);
4263 +#define atomic_dec_return(v) atomic_sub_return(1,(v))
4264 +#define atomic_inc_return(v) atomic_add_return(1,(v))
4266 +/* Atomic operations are already serializing */
4267 +#define smp_mb__before_atomic_dec() barrier()
4268 +#define smp_mb__after_atomic_dec() barrier()
4269 +#define smp_mb__before_atomic_inc() barrier()
4270 +#define smp_mb__after_atomic_inc() barrier()
4273 +#endif /* !(__ARCH_NIOS2NOMMU_ATOMIC__) */
4276 --- linux/include/asm-nios2nommu/bitops.h
4277 +++ linux/include/asm-nios2nommu/bitops.h
4279 +#ifndef _ASM_NIOS_BITOPS_H_
4280 +#define _ASM_NIOS_BITOPS_H_
4282 +/*--------------------------------------------------------------------
4284 + * include/asm-nios2nommu/bitops.h
4286 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
4288 + * Copyright (C) 2004 Microtronix Datacom Ltd
4290 + * This program is free software; you can redistribute it and/or modify
4291 + * it under the terms of the GNU General Public License as published by
4292 + * the Free Software Foundation; either version 2 of the License, or
4293 + * (at your option) any later version.
4295 + * This program is distributed in the hope that it will be useful,
4296 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4297 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4298 + * GNU General Public License for more details.
4301 + * Jan/20/2004 dgt NiosII
4303 + ---------------------------------------------------------------------*/
4307 +// #include <linux/config.h>
4308 +#include <linux/compiler.h>
4309 +#include <asm/byteorder.h> /* swab32 */
4310 +#include <asm/system.h>
4314 + * Adapted to NIOS from generic bitops.h:
4316 + * For the benefit of those who are trying to port Linux to another
4317 + * architecture, here are some C-language equivalents. You should
4318 + * recode these in the native assembly language, if at all possible.
4319 + * To guarantee atomicity, these routines call cli() and sti() to
4320 + * disable interrupts while they operate. (You have to provide inline
4321 + * routines to cli() and sti().)
4323 + * Also note, these routines assume that you have 32 bit integers.
4324 + * You will have to change this if you are trying to port Linux to the
4325 + * Alpha architecture or to a Cray. :-)
4327 + * C language equivalents written by Theodore Ts'o, 9/26/92
4333 +static inline int ffs(int x)
4339 + if (!(x & 0xffff)) {
4343 + if (!(x & 0xff)) {
4363 + * Generic __ffs().
4365 +static inline int __ffs(int x)
4371 + if (!(x & 0xffff)) {
4375 + if (!(x & 0xff)) {
4395 + * fls: find last bit set.
4397 +#define fls(x) generic_fls(x)
4401 + * Every architecture must define this function. It's the fastest
4402 + * way of searching a 140-bit bitmap where the first 100 bits are
4403 + * unlikely to be set. It's guaranteed that at least one of the 140
4404 + * bits is cleared.
4406 +static inline int sched_find_first_bit(unsigned long *b)
4408 + if (unlikely(b[0]))
4409 + return __ffs(b[0]);
4410 + if (unlikely(b[1]))
4411 + return __ffs(b[1]) + 32;
4412 + if (unlikely(b[2]))
4413 + return __ffs(b[2]) + 64;
4415 + return __ffs(b[3]) + 96;
4416 + return __ffs(b[4]) + 128;
4420 + * ffz = Find First Zero in word. Undefined if no zero exists,
4421 + * so code should check against ~0UL first..
4423 +static __inline__ unsigned long ffz(unsigned long word)
4425 + unsigned long result = 0;
4435 +static __inline__ void set_bit(int nr, volatile unsigned long * addr)
4437 + int * a = (int *) addr;
4439 + unsigned long flags;
4442 + mask = 1 << (nr & 0x1f);
4443 + local_irq_save(flags);
4445 + local_irq_restore(flags);
4448 +static __inline__ void __set_bit(int nr, volatile unsigned long * addr)
4450 + int * a = (int *) addr;
4454 + mask = 1 << (nr & 0x1f);
4459 + * clear_bit() doesn't provide any barrier for the compiler.
4461 +#define smp_mb__before_clear_bit() barrier()
4462 +#define smp_mb__after_clear_bit() barrier()
4464 +static __inline__ void clear_bit(int nr, volatile unsigned long * addr)
4466 + int * a = (int *) addr;
4468 + unsigned long flags;
4471 + mask = 1 << (nr & 0x1f);
4472 + local_irq_save(flags);
4474 + local_irq_restore(flags);
4477 +static __inline__ void __clear_bit(int nr, volatile unsigned long * addr)
4479 + int * a = (int *) addr;
4483 + mask = 1 << (nr & 0x1f);
4487 +static __inline__ void change_bit(int nr, volatile unsigned long * addr)
4490 + unsigned long *ADDR = (unsigned long *) addr;
4493 + mask = 1 << (nr & 31);
4494 + local_irq_save(flags);
4496 + local_irq_restore(flags);
4499 +static __inline__ void __change_bit(int nr, volatile unsigned long * addr)
4502 + unsigned long *ADDR = (unsigned long *) addr;
4505 + mask = 1 << (nr & 31);
4509 +static __inline__ int test_and_set_bit(int nr, volatile unsigned long * addr)
4512 + volatile unsigned int *a = (volatile unsigned int *) addr;
4513 + unsigned long flags;
4516 + mask = 1 << (nr & 0x1f);
4517 + local_irq_save(flags);
4518 + retval = (mask & *a) != 0;
4520 + local_irq_restore(flags);
4525 +static __inline__ int __test_and_set_bit(int nr, volatile unsigned long * addr)
4528 + volatile unsigned int *a = (volatile unsigned int *) addr;
4531 + mask = 1 << (nr & 0x1f);
4532 + retval = (mask & *a) != 0;
4537 +static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * addr)
4540 + volatile unsigned int *a = (volatile unsigned int *) addr;
4541 + unsigned long flags;
4544 + mask = 1 << (nr & 0x1f);
4545 + local_irq_save(flags);
4546 + retval = (mask & *a) != 0;
4548 + local_irq_restore(flags);
4553 +static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long * addr)
4556 + volatile unsigned int *a = (volatile unsigned int *) addr;
4559 + mask = 1 << (nr & 0x1f);
4560 + retval = (mask & *a) != 0;
4565 +static __inline__ int test_and_change_bit(int nr, volatile unsigned long * addr)
4568 + volatile unsigned int *a = (volatile unsigned int *) addr;
4569 + unsigned long flags;
4572 + mask = 1 << (nr & 0x1f);
4573 + local_irq_save(flags);
4574 + retval = (mask & *a) != 0;
4576 + local_irq_restore(flags);
4581 +static __inline__ int __test_and_change_bit(int nr, volatile unsigned long * addr)
4584 + volatile unsigned int *a = (volatile unsigned int *) addr;
4587 + mask = 1 << (nr & 0x1f);
4588 + retval = (mask & *a) != 0;
4594 + * This routine doesn't need to be atomic.
4596 +static __inline__ int __constant_test_bit(int nr, const volatile unsigned long * addr)
4598 + return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
4601 +static __inline__ int __test_bit(int nr, const volatile unsigned long * addr)
4603 + int * a = (int *) addr;
4607 + mask = 1 << (nr & 0x1f);
4608 + return ((mask & *a) != 0);
4611 +#define test_bit(nr,addr) \
4612 +(__builtin_constant_p(nr) ? \
4613 + __constant_test_bit((nr),(unsigned long *)(addr)) : \
4614 + __test_bit((nr),(unsigned long *)(addr)))
4617 +/* find_next_zero_bit() finds the first zero bit in a bit string of length
4618 + * 'size' bits, starting the search at bit 'offset'. This is largely based
4619 + * on Linus's ALPHA routines, which are pretty portable BTW.
4622 +extern __inline__ unsigned long find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
4624 + unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
4625 + unsigned long result = offset & ~31UL;
4626 + unsigned long tmp;
4628 + if (offset >= size)
4634 + tmp |= ~0UL >> (32-offset);
4638 + goto found_middle;
4642 + while (size & ~31UL) {
4643 + if (~(tmp = *(p++)))
4644 + goto found_middle;
4653 + tmp |= ~0UL << size;
4655 + return result + size;
4657 + return result + ffz(tmp);
4661 + * Find next one bit in a bitmap reasonably efficiently.
4663 +extern __inline__ unsigned long find_next_bit(const unsigned long *addr,
4664 + unsigned long size, unsigned long offset)
4666 + unsigned int *p = ((unsigned int *) addr) + (offset >> 5);
4667 + unsigned int result = offset & ~31UL;
4670 + if (offset >= size)
4676 + tmp &= ~0UL << offset;
4680 + goto found_middle;
4684 + while (size >= 32) {
4685 + if ((tmp = *p++) != 0)
4686 + goto found_middle;
4695 + tmp &= ~0UL >> (32 - size);
4696 + if (tmp == 0UL) /* Are any bits set? */
4697 + return result + size; /* Nope. */
4699 + return result + __ffs(tmp);
4703 + * hweightN: returns the hamming weight (i.e. the number
4704 + * of bits set) of a N-bit word
4707 +#define hweight32(x) generic_hweight32(x)
4708 +#define hweight16(x) generic_hweight16(x)
4709 +#define hweight8(x) generic_hweight8(x)
4711 +/* Linus sez that gcc can optimize the following correctly, we'll see if this
4712 + * holds on the Sparc as it does for the ALPHA.
4715 +#define find_first_zero_bit(addr, size) \
4716 + find_next_zero_bit((addr), (size), 0)
4717 +#define find_first_bit(addr, size) \
4718 + find_next_bit((addr), (size), 0)
4720 +/* Now for the ext2 filesystem bit operations and helper routines.
4722 + * Both NIOS and ext2 are little endian, so these are the same as above.
4725 +#define ext2_set_bit test_and_set_bit
4726 +#define ext2_clear_bit test_and_clear_bit
4727 +#define ext2_test_bit test_bit
4729 +#define ext2_set_bit_atomic(lock, nr, addr) \
4732 + spin_lock(lock); \
4733 + ret = ext2_set_bit((nr),(unsigned long *) (addr)); \
4734 + spin_unlock(lock); \
4738 +#define ext2_clear_bit_atomic(lock, nr, addr) \
4741 + spin_lock(lock); \
4742 + ret = ext2_clear_bit((nr),(unsigned long *) (addr)); \
4743 + spin_unlock(lock); \
4747 +#define ext2_find_first_zero_bit find_first_zero_bit
4748 +#define ext2_find_next_zero_bit find_next_zero_bit
4750 +#endif /* _ASM_NIOS_BITOPS_H */
4751 --- linux/include/asm-nios2nommu/bootinfo.h
4752 +++ linux/include/asm-nios2nommu/bootinfo.h
4755 +/* Nothing for nios2nommu */
4756 --- linux/include/asm-nios2nommu/bug.h
4757 +++ linux/include/asm-nios2nommu/bug.h
4759 +#ifndef _NIOS2NOMMU_BUG_H
4760 +#define _NIOS2NOMMU_BUG_H
4762 +/*--------------------------------------------------------------------
4764 + * include/asm-nios2nommu/bug.h
4766 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
4768 + * Copyright (C) 2004 Microtronix Datacom Ltd
4770 + * This program is free software; you can redistribute it and/or modify
4771 + * it under the terms of the GNU General Public License as published by
4772 + * the Free Software Foundation; either version 2 of the License, or
4773 + * (at your option) any later version.
4775 + * This program is distributed in the hope that it will be useful,
4776 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4777 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4778 + * GNU General Public License for more details.
4781 + * Jan/20/2004 dgt NiosII
4783 + ---------------------------------------------------------------------*/
4786 +#define BUG() do { \
4787 + printk("%s(%d): kernel BUG!\n", __FILE__, __LINE__); \
4790 +#define BUG_ON(condition) do { \
4791 + if (unlikely((condition)!=0)) \
4795 +#define PAGE_BUG(page) do { \
4799 +#define WARN_ON(condition) do { \
4800 + if (unlikely((condition)!=0)) { \
4801 + printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
4807 --- linux/include/asm-nios2nommu/bugs.h
4808 +++ linux/include/asm-nios2nommu/bugs.h
4810 +#ifndef __ASM_NIOS_BUGS_H
4811 +#define __ASM_NIOS_BUGS_H
4813 +/*--------------------------------------------------------------------
4815 + * include/asm-nios2nommu/bugs.h
4817 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
4819 + * Copyright (C) 1994 Linus Torvalds
4820 + * Copyright (C) 2004 Microtronix Datacom Ltd
4822 + * This program is free software; you can redistribute it and/or modify
4823 + * it under the terms of the GNU General Public License as published by
4824 + * the Free Software Foundation; either version 2 of the License, or
4825 + * (at your option) any later version.
4827 + * This program is distributed in the hope that it will be useful,
4828 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4829 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4830 + * GNU General Public License for more details.
4833 + * Jan/20/2004 dgt NiosII
4835 + ---------------------------------------------------------------------*/
4839 + * This is included by init/main.c to check for architecture-dependent bugs.
4842 + * void check_bugs(void);
4845 +static void check_bugs(void)
4850 --- linux/include/asm-nios2nommu/byteorder.h
4851 +++ linux/include/asm-nios2nommu/byteorder.h
4853 +#ifndef __ASM_NIOS_BYTEORDER_H
4854 +#define __ASM_NIOS_BYTEORDER_H
4856 +/*--------------------------------------------------------------------
4858 + * include/asm-nios2nommu/byteorder.h
4860 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
4862 + * Copyright (C) 2004 Microtronix Datacom Ltd
4864 + * This program is free software; you can redistribute it and/or modify
4865 + * it under the terms of the GNU General Public License as published by
4866 + * the Free Software Foundation; either version 2 of the License, or
4867 + * (at your option) any later version.
4869 + * This program is distributed in the hope that it will be useful,
4870 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4871 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4872 + * GNU General Public License for more details.
4875 + * Jan/20/2004 dgt NiosII
4877 + ---------------------------------------------------------------------*/
4880 +#include <asm/types.h>
4882 +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
4883 +# define __BYTEORDER_HAS_U64__
4884 +# define __SWAB_64_THRU_32__
4887 +#include <linux/byteorder/little_endian.h>
4891 --- linux/include/asm-nios2nommu/cachectl.h
4892 +++ linux/include/asm-nios2nommu/cachectl.h
4895 + * Copyright (C) 2004 Microtronix Datacom Ltd.
4897 + * All rights reserved.
4899 + * This program is free software; you can redistribute it and/or modify
4900 + * it under the terms of the GNU General Public License as published by
4901 + * the Free Software Foundation; either version 2 of the License, or
4902 + * (at your option) any later version.
4904 + * This program is distributed in the hope that it will be useful, but
4905 + * WITHOUT ANY WARRANTY; without even the implied warranty of
4906 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
4907 + * NON INFRINGEMENT. See the GNU General Public License for more
4910 + * You should have received a copy of the GNU General Public License
4911 + * along with this program; if not, write to the Free Software
4912 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
4916 +#ifndef _NIOS2NOMMU_CACHECTL_H
4917 +#define _NIOS2NOMMU_CACHECTL_H
4919 +/* Definitions for the cacheflush system call. */
4921 +#define FLUSH_SCOPE_LINE 1 /* Flush a cache line */
4922 +#define FLUSH_SCOPE_PAGE 2 /* Flush a page */
4923 +#define FLUSH_SCOPE_ALL 3 /* Flush the whole cache -- superuser only */
4925 +#define FLUSH_CACHE_DATA 1 /* Writeback and flush data cache */
4926 +#define FLUSH_CACHE_INSN 2 /* Flush instruction cache */
4927 +#define FLUSH_CACHE_BOTH 3 /* Flush both caches */
4929 +#endif /* _NIOS2NOMMU_CACHECTL_H */
4930 --- linux/include/asm-nios2nommu/cacheflush.h
4931 +++ linux/include/asm-nios2nommu/cacheflush.h
4933 +#ifndef _NIOS2NOMMU_CACHEFLUSH_H
4934 +#define _NIOS2NOMMU_CACHEFLUSH_H
4937 + * Ported from m68knommu.
4939 + * (C) Copyright 2003, Microtronix Datacom Ltd.
4940 + * (C) Copyright 2000-2002, Greg Ungerer <gerg@snapgear.com>
4942 + * All rights reserved.
4944 + * This program is free software; you can redistribute it and/or modify
4945 + * it under the terms of the GNU General Public License as published by
4946 + * the Free Software Foundation; either version 2 of the License, or
4947 + * (at your option) any later version.
4949 + * This program is distributed in the hope that it will be useful, but
4950 + * WITHOUT ANY WARRANTY; without even the implied warranty of
4951 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
4952 + * NON INFRINGEMENT. See the GNU General Public License for more
4955 + * You should have received a copy of the GNU General Public License
4956 + * along with this program; if not, write to the Free Software
4957 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
4960 +#include <linux/mm.h>
4962 +extern void cache_push (unsigned long vaddr, int len);
4963 +extern void dcache_push (unsigned long vaddr, int len);
4964 +extern void icache_push (unsigned long vaddr, int len);
4965 +extern void cache_push_all (void);
4966 +extern void cache_clear (unsigned long paddr, int len);
4968 +#define flush_cache_all() __flush_cache_all()
4969 +#define flush_cache_mm(mm) do { } while (0)
4970 +#define flush_cache_range(vma, start, end) cache_push(start, end - start)
4971 +#define flush_cache_page(vma, vmaddr) do { } while (0)
4972 +#define flush_dcache_range(start,end) dcache_push(start, end - start)
4973 +#define flush_dcache_page(page) do { } while (0)
4974 +#define flush_dcache_mmap_lock(mapping) do { } while (0)
4975 +#define flush_dcache_mmap_unlock(mapping) do { } while (0)
4976 +#define flush_icache_range(start,end) cache_push(start, end - start)
4977 +#define flush_icache_page(vma,pg) do { } while (0)
4978 +#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
4980 +#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
4981 + memcpy(dst, src, len)
4982 +#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
4983 + memcpy(dst, src, len)
4986 +extern inline void __flush_cache_all(void)
4991 +#endif /* _NIOS2NOMMU_CACHEFLUSH_H */
4992 --- linux/include/asm-nios2nommu/cache.h
4993 +++ linux/include/asm-nios2nommu/cache.h
4996 + * Copyright (C) 2004 Microtronix Datacom Ltd.
4998 + * All rights reserved.
5000 + * This program is free software; you can redistribute it and/or modify
5001 + * it under the terms of the GNU General Public License as published by
5002 + * the Free Software Foundation; either version 2 of the License, or
5003 + * (at your option) any later version.
5005 + * This program is distributed in the hope that it will be useful, but
5006 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5007 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5008 + * NON INFRINGEMENT. See the GNU General Public License for more
5011 + * You should have received a copy of the GNU General Public License
5012 + * along with this program; if not, write to the Free Software
5013 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5016 +#ifndef __ARCH_NIOS2NOMMU_CACHE_H
5017 +#define __ARCH_NIOS2NOMMU_CACHE_H
5019 +#include <asm/nios.h>
5021 +/* bytes per L1 cache line */
5022 +#define L1_CACHE_BYTES nasys_icache_line_size /* this need to be at least 1 */
5025 +#define __cacheline_aligned
5026 +#define ____cacheline_aligned
5029 --- linux/include/asm-nios2nommu/ChangeLog
5030 +++ linux/include/asm-nios2nommu/ChangeLog
5032 +2004-06-29 Ken Hill <khill@microtronix.com>
5034 + * bitops.h (find_next_zero_bit): Fix problem with with masking for found_first
5035 + handling. The masking of the upper bits for size < 32 bits would set all
5036 + the bits to 1. Removing any zero's there may have been.
5038 +2004-06-02 Ken Hill <khill@microtronix.com>
5040 + * processor.h (TASK_SIZE): Change na_sdram_end to nasys_program_mem_end to remove
5041 + dependancy on quartus memory component name.
5043 + * page.h (PAGE_OFFSET): Change na_sdram to nasys_program_mem to remove
5044 + dependancy on quartus memory component name.
5046 --- linux/include/asm-nios2nommu/checksum.h
5047 +++ linux/include/asm-nios2nommu/checksum.h
5049 +#ifndef __NIOS2_CHECKSUM_H
5050 +#define __NIOS2_CHECKSUM_H
5052 +/* checksum.h: IP/UDP/TCP checksum routines on the NIOS.
5054 + * Copyright(C) 1995 Linus Torvalds
5055 + * Copyright(C) 1995 Miguel de Icaza
5056 + * Copyright(C) 1996 David S. Miller
5057 + * Copyright(C) 2001 Ken Hill
5058 + * Copyright(C) 2004 Microtronix Datacom Ltd.
5061 + * Alpha checksum c-code
5062 + * ix86 inline assembly
5065 + * All rights reserved.
5067 + * This program is free software; you can redistribute it and/or modify
5068 + * it under the terms of the GNU General Public License as published by
5069 + * the Free Software Foundation; either version 2 of the License, or
5070 + * (at your option) any later version.
5072 + * This program is distributed in the hope that it will be useful, but
5073 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5074 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5075 + * NON INFRINGEMENT. See the GNU General Public License for more
5078 + * You should have received a copy of the GNU General Public License
5079 + * along with this program; if not, write to the Free Software
5080 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5085 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5088 + * computes the checksum of the TCP/UDP pseudo-header
5089 + * returns a 16-bit checksum, already complemented
5092 +extern inline unsigned short csum_tcpudp_magic(unsigned long saddr,
5093 + unsigned long daddr,
5094 + unsigned short len,
5095 + unsigned short proto,
5099 + __asm__ __volatile__(
5100 +" add %0, %3, %0\n"
5101 +" bgeu %0, %3, 1f\n"
5102 +" addi %0, %0, 1\n"
5103 +"1: add %0, %4, %0\n"
5104 +" bgeu %0, %4, 1f\n"
5105 +" addi %0, %0, 1\n"
5106 +"1: add %0, %5, %0\n"
5107 +" bgeu %0, %5, 1f\n"
5108 +" addi %0, %0, 1\n"
5111 + We need the carry from the addition of 16-bit
5112 + significant addition, so we zap out the low bits
5113 + in one half, zap out the high bits in another,
5114 + shift them both up to the top 16-bits of a word
5115 + and do the carry producing addition, finally
5116 + shift the result back down to the low 16-bits.
5118 + Actually, we can further optimize away two shifts
5119 + because we know the low bits of the original
5120 + value will be added to zero-only bits so cannot
5121 + affect the addition result nor the final carry
5124 +" slli %1,%0, 16\n" /* Need a copy to fold with */
5125 + /* Bring the LOW 16 bits up */
5126 +" add %0, %1, %0\n" /* add and set carry, neat eh? */
5127 +" cmpltu r15, %0, %1\n" /* get remaining carry bit */
5128 +" srli %0, %0, 16\n" /* shift back down the result */
5129 +" add %0, %0, r15\n"
5130 +" nor %0, %0, %0\n" /* negate */
5131 + : "=&r" (sum), "=&r" (saddr)
5132 + : "0" (sum), "1" (saddr), "r" (ntohl(len+proto)), "r" (daddr)
5134 + return ((unsigned short) sum);
5139 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5142 + extern inline unsigned short from32to16(unsigned long x)
5145 + __asm__ __volatile__(
5146 + "add %0, %1, %0\n"
5147 + "cmpltu r15, %0, %1\n"
5148 + "srli %0, %0, 16\n"
5149 + "add %0, %0, r15\n"
5151 + : "r" (x << 16), "0" (x)
5158 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5161 +extern inline unsigned long do_csum(const unsigned char * buff, int len)
5164 + unsigned long result = 0;
5169 + odd = 1 & (unsigned long) buff;
5171 +////result = *buff; // dgt: Big endian
5172 + result = *buff << 8; // dgt: Little endian
5177 + count = len >> 1; /* nr of 16-bit words.. */
5179 + if (2 & (unsigned long) buff) {
5180 + result += *(unsigned short *) buff;
5185 + count >>= 1; /* nr of 32-bit words.. */
5187 + unsigned long carry = 0;
5189 + unsigned long w = *(unsigned long *) buff;
5194 + carry = (w > result);
5197 + result = (result & 0xffff) + (result >> 16);
5200 + result += *(unsigned short *) buff;
5205 + result += *buff; /* This is little machine, byte is right */
5206 + result = from32to16(result);
5208 + result = ((result >> 8) & 0xff) | ((result & 0xff) << 8);
5215 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5218 +/* ihl is always 5 or greater, almost always is 5, iph is always word
5219 + * aligned but can fail to be dword aligned very often.
5222 + extern inline unsigned short ip_fast_csum(const unsigned char *iph, unsigned int ihl)
5227 + __asm__ __volatile__(
5228 +" andi r8, %1, 2\n" /* Remember original alignment */
5229 +" ldw %0, (%1)\n" /* 16 or 32 bit boundary */
5230 +" beq r8, r0, 1f\n" /* Aligned on 32 bit boundary, go */
5231 +" srli %0, %0, 16\n" /* Get correct 16 bits */
5232 +" addi %2, %2, -1\n" /* Take off for 4 bytes, pickup last 2 at end */
5233 +" addi %1, %1, 2\n" /* Adjust pointer to 32 bit boundary */
5236 +" addi %2, %2, -1\n"
5237 +" addi %1, %1, 4\n" /* Bump ptr a long word */
5241 +" add %0, r9, %0\n"
5242 +" bgeu %0, r9, 2f\n"
5243 +" addi %0, %0, 1\n"
5245 +" addi %1, %1, 4\n"
5246 +" addi %2, %2, -1\n"
5248 +" bne %2, r0, 1b\n"
5249 +" beq r8, r0, 1f\n" /* 32 bit boundary time to leave */
5250 +" srli r9, r9, 16\n" /* 16 bit boundary, get correct 16 bits */
5251 +" add %0, r9, %0\n"
5252 +" bgeu %0, r9, 1f\n"
5253 +" addi %0, %0, 1\n"
5255 +" slli %2, %0, 16\n"
5256 +" add %0, %2, %0\n"
5257 +" cmpltu r8, %0, %2\n"
5258 +" srli %0, %0, 16\n"
5259 +" add %0, %0, r8\n"
5260 +" nor %0, %0, %0\n"
5261 + : "=&r" (sum), "=&r" (iph), "=&r" (ihl)
5262 + : "1" (iph), "2" (ihl)
5268 +/*these 2 functions are now in checksum.c */
5269 +unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum);
5270 +unsigned int csum_partial_copy(const char *src, char *dst, int len, int sum);
5272 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5275 + * the same as csum_partial_copy, but copies from user space.
5277 + * here even more important to align src and dst on a 32-bit (or even
5278 + * better 64-bit) boundary
5280 +extern inline unsigned int
5281 +csum_partial_copy_from_user(const char *src, char *dst, int len, int sum, int *csum_err)
5284 + if (csum_err) *csum_err = 0;
5285 + memcpy(dst, src, len);
5286 + return csum_partial(dst, len, sum);
5290 +#define csum_partial_copy_nocheck(src, dst, len, sum) \
5291 + csum_partial_copy ((src), (dst), (len), (sum))
5295 + * this routine is used for miscellaneous IP-like checksums, mainly
5299 +extern inline unsigned short ip_compute_csum(unsigned char * buff, int len)
5302 + return ~from32to16(do_csum(buff,len));
5307 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5310 +#define csum_partial_copy_fromuser(s, d, l, w) \
5311 + csum_partial_copy((char *) (s), (d), (l), (w))
5314 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5318 + * Fold a partial checksum without adding pseudo headers
5320 +extern __inline__ unsigned int csum_fold(unsigned int sum)
5323 + __asm__ __volatile__(
5324 + "add %0, %1, %0\n"
5325 + "cmpltu r8, %0, %1\n"
5326 + "srli %0, %0, 16\n"
5327 + "add %0, %0, r8\n"
5328 + "nor %0, %0, %0\n"
5330 + : "r" (sum << 16), "0" (sum)
5337 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5340 +extern __inline__ unsigned long csum_tcpudp_nofold(unsigned long saddr,
5341 + unsigned long daddr,
5342 + unsigned short len,
5343 + unsigned short proto,
5347 + __asm__ __volatile__(
5348 + "add %0, %1, %0\n"
5349 + "cmpltu r8, %0, %1\n"
5350 + "add %0, %0, r8\n" /* add carry */
5351 + "add %0, %2, %0\n"
5352 + "cmpltu r8, %0, %2\n"
5353 + "add %0, %0, r8\n" /* add carry */
5354 + "add %0, %3, %0\n"
5355 + "cmpltu r8, %0, %3\n"
5356 + "add %0, %0, r8\n" /* add carry */
5357 + : "=r" (sum), "=r" (saddr)
5358 + : "r" (daddr), "r" ( (ntohs(len)<<16) + (proto*256) ),
5368 +#endif /* (__NIOS2_CHECKSUM_H) */
5369 --- linux/include/asm-nios2nommu/cprefix.h
5370 +++ linux/include/asm-nios2nommu/cprefix.h
5372 +/* cprefix.h: This file is included by assembly source which needs
5373 + * to know what the c-label prefixes are. The newer versions
5374 + * of cpp that come with gcc predefine such things to help
5375 + * us out. The reason this stuff is needed is to make
5376 + * solaris compiles of the kernel work.
5378 + * Copyright (C) 2004 Microtronix Datacom Ltd.
5379 + * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
5381 + * All rights reserved.
5383 + * This program is free software; you can redistribute it and/or modify
5384 + * it under the terms of the GNU General Public License as published by
5385 + * the Free Software Foundation; either version 2 of the License, or
5386 + * (at your option) any later version.
5388 + * This program is distributed in the hope that it will be useful, but
5389 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5390 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5391 + * NON INFRINGEMENT. See the GNU General Public License for more
5394 + * You should have received a copy of the GNU General Public License
5395 + * along with this program; if not, write to the Free Software
5396 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5399 +#ifndef __NIOS2_CPREFIX_H
5400 +#define __NIOS2_CPREFIX_H
5402 +#define C_LABEL_PREFIX
5404 +#define CONCAT(a, b) CONCAT2(a, b)
5405 +#define CONCAT2(a, b) a##b
5407 +#define C_LABEL(name) CONCAT(C_LABEL_PREFIX, name)
5409 +#endif /* !(__NIOS2_CPREFIX_H) */
5410 --- linux/include/asm-nios2nommu/cpumask.h
5411 +++ linux/include/asm-nios2nommu/cpumask.h
5414 + * All rights reserved.
5416 + * Copyright (C) 2004, Microtronix Datacom Ltd.
5418 + * This program is free software; you can redistribute it and/or modify
5419 + * it under the terms of the GNU General Public License as published by
5420 + * the Free Software Foundation; either version 2 of the License, or
5421 + * (at your option) any later version.
5423 + * This program is distributed in the hope that it will be useful, but
5424 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5425 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5426 + * NON INFRINGEMENT. See the GNU General Public License for more
5429 + * You should have received a copy of the GNU General Public License
5430 + * along with this program; if not, write to the Free Software
5431 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5435 +#ifndef _ASM_NIOS2NOMMU_CPUMASK_H
5436 +#define _ASM_NIOS2NOMMU_CPUMASK_H
5438 +#include <asm-generic/cpumask.h>
5440 +#endif /* _ASM_NIOS2NOMMU_CPUMASK_H */
5441 --- linux/include/asm-nios2nommu/cputime.h
5442 +++ linux/include/asm-nios2nommu/cputime.h
5446 + * (C) Copyright 2004, Microtronix Datacom Ltd.
5448 + * Taken from m68knommu
5450 + * All rights reserved.
5452 + * This program is free software; you can redistribute it and/or modify
5453 + * it under the terms of the GNU General Public License as published by
5454 + * the Free Software Foundation; either version 2 of the License, or
5455 + * (at your option) any later version.
5457 + * This program is distributed in the hope that it will be useful, but
5458 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5459 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5460 + * NON INFRINGEMENT. See the GNU General Public License for more
5463 + * You should have received a copy of the GNU General Public License
5464 + * along with this program; if not, write to the Free Software
5465 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5469 +#ifndef __NIOS2NOMMU_CPUTIME_H
5470 +#define __NIOS2NOMMU_CPUTIME_H
5472 +#include <asm-generic/cputime.h>
5474 +#endif /* __NIOS@NOMMU_CPUTIME_H */
5475 --- linux/include/asm-nios2nommu/current.h
5476 +++ linux/include/asm-nios2nommu/current.h
5478 +#ifndef _NIOS2NOMMU_CURRENT_H
5479 +#define _NIOS2NOMMU_CURRENT_H
5482 + * (C) Copyright 2000, Lineo, David McCullough <davidm@uclinux.org>
5483 + * (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com)
5484 + * (C) Copyright 2004, Microtronix Datacom Ltd.
5486 + * All rights reserved.
5488 + * This program is free software; you can redistribute it and/or modify
5489 + * it under the terms of the GNU General Public License as published by
5490 + * the Free Software Foundation; either version 2 of the License, or
5491 + * (at your option) any later version.
5493 + * This program is distributed in the hope that it will be useful, but
5494 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5495 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5496 + * NON INFRINGEMENT. See the GNU General Public License for more
5499 + * You should have received a copy of the GNU General Public License
5500 + * along with this program; if not, write to the Free Software
5501 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5505 +#include <linux/thread_info.h>
5507 +struct task_struct;
5509 +static inline struct task_struct *get_current(void)
5511 + return(current_thread_info()->task);
5514 +#define current get_current()
5516 +#endif /* _NIOS2NOMMU_CURRENT_H */
5517 --- linux/include/asm-nios2nommu/delay.h
5518 +++ linux/include/asm-nios2nommu/delay.h
5520 +#ifndef _NIOS_DELAY_H
5521 +#define _NIOS_DELAY_H
5523 +/*--------------------------------------------------------------------
5525 + * include/asm-nios2nommu/delay.h
5527 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
5529 + * Copyright (C) 2004 Microtronix Datacom Ltd
5531 + * This program is free software; you can redistribute it and/or modify
5532 + * it under the terms of the GNU General Public License as published by
5533 + * the Free Software Foundation; either version 2 of the License, or
5534 + * (at your option) any later version.
5536 + * This program is distributed in the hope that it will be useful,
5537 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
5538 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5539 + * GNU General Public License for more details.
5542 + * Jan/20/2004 dgt NiosII
5544 + ---------------------------------------------------------------------*/
5547 +#include <asm/param.h>
5549 +extern __inline__ void __delay(unsigned long loops)
5553 + __asm__ __volatile__(
5555 + " beq %0,zero,2f\n\t"
5556 + " addi %0, %0, -1\n\t"
5560 + : "=r" (dummy) /* Need output for optimizer */
5562 + : "0" (loops) /* %0 Input */
5567 + * Note that 19 * 226 == 4294 ==~ 2^32 / 10^6, so
5568 + * loops = (4294 * usecs * loops_per_jiffy * HZ) / 2^32.
5570 + * The mul instruction gives us loops = (a * b) / 2^32.
5571 + * We choose a = usecs * 19 * HZ and b = loops_per_jiffy * 226
5572 + * because this lets us support a wide range of HZ and
5573 + * loops_per_jiffy values without either a or b overflowing 2^32.
5574 + * Thus we need usecs * HZ <= (2^32 - 1) / 19 = 226050910 and
5575 + * loops_per_jiffy <= (2^32 - 1) / 226 = 19004280
5576 + * (which corresponds to ~3800 bogomips at HZ = 100).
5579 +#define __MAX_UDELAY (226050910UL/HZ) /* maximum udelay argument */
5580 +#define __MAX_NDELAY (4294967295UL/HZ) /* maximum ndelay argument */
5582 +extern unsigned long loops_per_jiffy;
5584 +extern __inline__ void __udelay(unsigned int x)
5586 + unsigned int loops;
5588 + __asm__("mulxuu %0,%1,%2" : "=r" (loops) :
5589 + "r" (x), "r" (loops_per_jiffy * 226));
5593 +extern __inline__ void __ndelay(unsigned int x)
5595 + unsigned int loops;
5597 + __asm__("mulxuu %0,%1,%2" : "=r" (loops) :
5598 + "r" (x), "r" (loops_per_jiffy * 5));
5602 +extern void __bad_udelay(void); /* deliberately undefined */
5603 +extern void __bad_ndelay(void); /* deliberately undefined */
5605 +#define udelay(n) (__builtin_constant_p(n)? \
5606 + ((n) > __MAX_UDELAY? __bad_udelay(): __udelay((n) * (19 * HZ))) : \
5607 + __udelay((n) * (19 * HZ)))
5609 +#define ndelay(n) (__builtin_constant_p(n)? \
5610 + ((n) > __MAX_NDELAY? __bad_ndelay(): __ndelay((n) * HZ)) : \
5611 + __ndelay((n) * HZ))
5613 +#define muldiv(a, b, c) (((a)*(b))/(c))
5615 +#endif /* defined(_NIOS_DELAY_H) */
5616 --- linux/include/asm-nios2nommu/div64.h
5617 +++ linux/include/asm-nios2nommu/div64.h
5619 +#ifndef __ASMNIOS_DIV64_H
5620 +#define __ASMNIOS_DIV64_H
5622 +/*--------------------------------------------------------------------
5624 + * include/asm-nios2nommu/div64.h
5626 + * Derived from m68knommu
5628 + * Copyright (C) 2004 Microtronix Datacom Ltd
5630 + * This program is free software; you can redistribute it and/or modify
5631 + * it under the terms of the GNU General Public License as published by
5632 + * the Free Software Foundation; either version 2 of the License, or
5633 + * (at your option) any later version.
5635 + * This program is distributed in the hope that it will be useful,
5636 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
5637 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5638 + * GNU General Public License for more details.
5641 + * Jan/20/2004 dgt NiosII
5643 + ---------------------------------------------------------------------*/
5646 +#include <asm-generic/div64.h>
5650 --- linux/include/asm-nios2nommu/dma.h
5651 +++ linux/include/asm-nios2nommu/dma.h
5653 +/* $Id: dma.h,v 1.6 2005/04/07 21:00:26 wentao Exp $
5655 + * Copyright 2004 (C) Microtronix Datacom Ltd.
5657 + * All rights reserved.
5659 + * This program is free software; you can redistribute it and/or modify
5660 + * it under the terms of the GNU General Public License as published by
5661 + * the Free Software Foundation; either version 2 of the License, or
5662 + * (at your option) any later version.
5664 + * This program is distributed in the hope that it will be useful, but
5665 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5666 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5667 + * NON INFRINGEMENT. See the GNU General Public License for more
5670 + * You should have received a copy of the GNU General Public License
5671 + * along with this program; if not, write to the Free Software
5672 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5676 +#ifndef _ASM_NIOS2_DMA_H
5677 +#define _ASM_NIOS2_DMA_H
5679 +#include <linux/kernel.h>
5680 +#include <asm/asm-offsets.h>
5682 +#define MAX_DMA_ADDRESS (LINUX_SDRAM_END)
5684 +int request_dma(unsigned int, const char *);
5685 +void free_dma(unsigned int);
5686 +void enable_dma(unsigned int dmanr);
5687 +void disable_dma(unsigned int dmanr);
5688 +void set_dma_count(unsigned int dmanr, unsigned int count);
5689 +int get_dma_residue(unsigned int dmanr);
5690 +void nios2_set_dma_data_width(unsigned int dmanr, unsigned int width);
5692 +void nios2_set_dma_handler(unsigned int dmanr, int (*handler)(void*, int), void* user);
5693 +int nios2_request_dma(const char *);
5695 +void nios2_set_dma_mode(unsigned int dmanr, unsigned int mode);
5696 +void nios2_set_dma_rcon(unsigned int dmanr, unsigned int set);
5697 +void nios2_set_dma_wcon(unsigned int dmanr, unsigned int set);
5698 +void nios2_set_dma_raddr(unsigned int dmanr, unsigned int a);
5699 +void nios2_set_dma_waddr(unsigned int dmanr, unsigned int a);
5701 +static inline unsigned long claim_dma_lock(void)
5705 +static inline void release_dma_lock(unsigned long flags)
5709 +#endif /* !(_ASM_NIOS2_DMA_H) */
5710 --- linux/include/asm-nios2nommu/dma-mapping.h
5711 +++ linux/include/asm-nios2nommu/dma-mapping.h
5714 + * include/asm-nios2nommu/dma-mapping.h
5716 + * This file exists so that #include <dma-mapping.h> doesn't break anything.
5719 +#ifndef _ASM_DMA_MAPPING_H
5720 +#define _ASM_DMA_MAPPING_H
5722 +#include <asm/scatterlist.h>
5723 +#include <linux/mm.h>
5724 +#include <asm/io.h>
5725 +#include <asm/cacheflush.h>
5727 +static inline void *dma_alloc_coherent(struct device *dev, size_t size,
5728 + dma_addr_t *dma_handle, int flag)
5734 +static inline void dma_free_coherent(struct device *dev, size_t size,
5735 + void *vaddr, dma_addr_t dma_handle)
5741 + * dma_map_single - map a single buffer for streaming DMA
5742 + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
5743 + * @cpu_addr: CPU direct mapped address of buffer
5744 + * @size: size of buffer to map
5745 + * @dir: DMA transfer direction
5747 + * Ensure that any data held in the cache is appropriately discarded
5748 + * or written back.
5750 + * The device owns this memory once this call has completed. The CPU
5751 + * can regain ownership by calling dma_unmap_single() or
5752 + * dma_sync_single_for_cpu().
5754 +static inline dma_addr_t
5755 +dma_map_single(struct device *dev, void *cpu_addr, size_t size,
5756 + enum dma_data_direction dir)
5758 + cache_push ((unsigned long)cpu_addr, size);
5759 + return virt_to_bus((unsigned long)cpu_addr);
5763 + * dma_unmap_single - unmap a single buffer previously mapped
5764 + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
5765 + * @handle: DMA address of buffer
5766 + * @size: size of buffer to map
5767 + * @dir: DMA transfer direction
5769 + * Unmap a single streaming mode DMA translation. The handle and size
5770 + * must match what was provided in the previous dma_map_single() call.
5771 + * All other usages are undefined.
5773 + * After this call, reads by the CPU to the buffer are guaranteed to see
5774 + * whatever the device wrote there.
5777 +dma_unmap_single(struct device *dev, dma_addr_t handle, size_t size,
5778 + enum dma_data_direction dir)
5780 + cache_clear((unsigned long)bus_to_virt(handle), size);
5784 + * dma_map_sg - map a set of SG buffers for streaming mode DMA
5785 + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
5786 + * @sg: list of buffers
5787 + * @nents: number of buffers to map
5788 + * @dir: DMA transfer direction
5790 + * Map a set of buffers described by scatterlist in streaming
5791 + * mode for DMA. This is the scatter-gather version of the
5792 + * above dma_map_single interface. Here the scatter gather list
5793 + * elements are each tagged with the appropriate dma address
5794 + * and length. They are obtained via sg_dma_{address,length}(SG).
5796 + * NOTE: An implementation may be able to use a smaller number of
5797 + * DMA address/length pairs than there are SG table elements.
5798 + * (for example via virtual mapping capabilities)
5799 + * The routine returns the number of addr/length pairs actually
5800 + * used, at most nents.
5802 + * Device ownership issues as mentioned above for dma_map_single are
5806 +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
5807 + enum dma_data_direction dir)
5811 + for (i = 0; i < nents; i++, sg++) {
5814 + sg->dma_address = page_to_bus(sg->page) + sg->offset;
5815 + virt = page_address(sg->page) + sg->offset;
5816 + cache_push ((unsigned long)virt, sg->length);
5823 + * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
5824 + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
5825 + * @sg: list of buffers
5826 + * @nents: number of buffers to map
5827 + * @dir: DMA transfer direction
5829 + * Unmap a set of streaming mode DMA translations.
5830 + * Again, CPU read rules concerning calls here are the same as for
5831 + * dma_unmap_single() above.
5834 +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
5835 + enum dma_data_direction dir)
5839 + for (i = 0; i < nents; i++, sg++) {
5841 + virt = page_address(sg->page) + sg->offset;
5842 + cache_clear ((unsigned long)virt, sg->length);
5845 +#endif /* _ASM_DMA_MAPPING_H */
5846 --- linux/include/asm-nios2nommu/elf.h
5847 +++ linux/include/asm-nios2nommu/elf.h
5849 +#ifndef __NIOS2_ELF_H
5850 +#define __NIOS2_ELF_H
5852 +/*--------------------------------------------------------------------
5854 + * include/asm-nios2nommu/elf.h
5856 + * Nio2 ELF relocation types
5858 + * Derived from M68knommu
5860 + * Copyright (C) 2004 Microtronix Datacom Ltd
5862 + * This program is free software; you can redistribute it and/or modify
5863 + * it under the terms of the GNU General Public License as published by
5864 + * the Free Software Foundation; either version 2 of the License, or
5865 + * (at your option) any later version.
5867 + * This program is distributed in the hope that it will be useful,
5868 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
5869 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5870 + * GNU General Public License for more details.
5872 + * Jan/20/2004 dgt NiosII
5873 + * Mar/18/2004 xwt NiosII relocation types added
5875 + ---------------------------------------------------------------------*/
5877 +// #include <linux/config.h>
5878 +#include <asm/ptrace.h>
5879 +#include <asm/user.h>
5881 +#define R_NIOS2_NONE 0
5882 +#define R_NIOS2_S16 1
5883 +#define R_NIOS2_U16 2
5884 +#define R_NIOS2_PCREL16 3
5885 +#define R_NIOS2_CALL26 4
5886 +#define R_NIOS2_IMM5 5
5887 +#define R_NIOS2_CACHE_OPX 6
5888 +#define R_NIOS2_IMM6 7
5889 +#define R_NIOS2_IMM8 8
5890 +#define R_NIOS2_HI16 9
5891 +#define R_NIOS2_LO16 10
5892 +#define R_NIOS2_HIADJ16 11
5893 +#define R_NIOS2_BFD_RELOC_32 12
5894 +#define R_NIOS2_BFD_RELOC_16 13
5895 +#define R_NIOS2_BFD_RELOC_8 14
5896 +#define R_NIOS2_GPREL 15
5897 +#define R_NIOS2_GNU_VTINHERIT 16
5898 +#define R_NIOS2_GNU_VTENTRY 17
5899 +#define R_NIOS2_UJMP 18
5900 +#define R_NIOS2_CJMP 19
5901 +#define R_NIOS2_CALLR 20
5902 +#define R_NIOS2_ALIGN 21
5903 +/* Keep this the last entry. */
5904 +#define R_NIOS2_NUM 22
5906 +typedef unsigned long elf_greg_t;
5908 +#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
5909 +typedef elf_greg_t elf_gregset_t[ELF_NGREG];
5911 +typedef unsigned long elf_fpregset_t;
5914 + * This is used to ensure we don't load something for the wrong architecture.
5916 +#define elf_check_arch(x) \
5917 + ((x)->e_machine == EM_ALTERA_NIOS2)
5920 + * These are used to set parameters in the core dumps.
5922 +#define ELF_CLASS ELFCLASS32
5923 +#define ELF_DATA ELFDATA2LSB
5924 +#define ELF_ARCH EM_ALTERA_NIOS2
5926 +#define ELF_PLAT_INIT(_r, load_addr) _r->a1 = 0
5928 +#define USE_ELF_CORE_DUMP
5929 +#define ELF_EXEC_PAGESIZE 4096
5931 +/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
5932 + use of this is to invoke "./ld.so someprog" to test out a new version of
5933 + the loader. We need to make sure that it is out of the way of the program
5934 + that it will "exec", and that there is sufficient room for the brk. */
5936 +#define ELF_ET_DYN_BASE 0xD0000000UL
5938 +/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is
5939 + now struct_user_regs, they are different) */
5941 +#define ELF_CORE_COPY_REGS(pr_reg, regs) \
5943 + pr_reg[0] = regs->r1; \
5944 + pr_reg[1] = regs->r2; \
5945 + pr_reg[2] = regs->r3; \
5946 + pr_reg[3] = regs->r4; \
5947 + pr_reg[4] = regs->r5; \
5948 + pr_reg[5] = regs->r6; \
5949 + pr_reg[6] = regs->r7; \
5950 + pr_reg[7] = regs->r8; \
5951 + pr_reg[8] = regs->r9; \
5952 + pr_reg[9] = regs->r10; \
5953 + pr_reg[10] = regs->r11; \
5954 + pr_reg[11] = regs->r12; \
5955 + pr_reg[12] = regs->r13; \
5956 + pr_reg[13] = regs->r14; \
5957 + pr_reg[14] = regs->r15; \
5958 + pr_reg[23] = regs->sp; \
5959 + pr_reg[26] = regs->estatus; \
5961 + struct switch_stack *sw = ((struct switch_stack *)regs) - 1; \
5962 + pr_reg[15] = sw->r16; \
5963 + pr_reg[16] = sw->r17; \
5964 + pr_reg[17] = sw->r18; \
5965 + pr_reg[18] = sw->r19; \
5966 + pr_reg[19] = sw->r20; \
5967 + pr_reg[20] = sw->r21; \
5968 + pr_reg[21] = sw->r22; \
5969 + pr_reg[22] = sw->r23; \
5970 + pr_reg[24] = sw->fp; \
5971 + pr_reg[25] = sw->gp; \
5974 +/* This yields a mask that user programs can use to figure out what
5975 + instruction set this cpu supports. */
5977 +#define ELF_HWCAP (0)
5979 +/* This yields a string that ld.so will use to load implementation
5980 + specific libraries for optimization. This is more specific in
5981 + intent than poking at uname or /proc/cpuinfo. */
5983 +#define ELF_PLATFORM (NULL)
5986 +#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
5990 --- linux/include/asm-nios2nommu/entry.h
5991 +++ linux/include/asm-nios2nommu/entry.h
5994 + * Hacked from m68knommu port.
5996 + * Copyright(C) 2004 Microtronix Datacom Ltd.
5998 + * All rights reserved.
6000 + * This program is free software; you can redistribute it and/or modify
6001 + * it under the terms of the GNU General Public License as published by
6002 + * the Free Software Foundation; either version 2 of the License, or
6003 + * (at your option) any later version.
6005 + * This program is distributed in the hope that it will be useful, but
6006 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6007 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6008 + * NON INFRINGEMENT. See the GNU General Public License for more
6011 + * You should have received a copy of the GNU General Public License
6012 + * along with this program; if not, write to the Free Software
6013 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6017 +#ifndef __NIOS2NOMMU_ENTRY_H
6018 +#define __NIOS2NOMMU_ENTRY_H
6020 +#ifdef __ASSEMBLY__
6022 +// #include <linux/config.h>
6023 +#include <asm/setup.h>
6024 +#include <asm/page.h>
6025 +#include <asm/asm-offsets.h>
6028 + * Stack layout in 'ret_from_exception':
6030 + * This allows access to the syscall arguments in registers r4-r8
6047 + * 3C(sp) - orig_r2
6052 + * 50(sp) - estatus
6053 + * 54(sp) - status_extension
6058 +/* process bits for task_struct.flags */
6059 +PF_TRACESYS_OFF = 3
6060 +PF_TRACESYS_BIT = 5
6069 + * This defines the normal kernel pt-regs layout.
6074 + * Standard Nios2 interrupt entry and exit macros.
6075 + * Must be called with interrupts disabled.
6078 + movia r24,status_extension // Read status extension
6080 + andi r24,r24,PS_S_ASM
6081 + bne r24,r0,1f // In supervisor mode, already on kernel stack
6082 + movia r24,_current_thread // Switch to current kernel stack
6083 + ldw r24,0(r24) // using the thread_info
6084 + addi r24,r24,THREAD_SIZE_ASM-PT_REGS_SIZE
6085 + stw sp,PT_SP(r24) // Save user stack before changing
6090 + addi sp,sp,-PT_REGS_SIZE // Backup the kernel stack pointer
6092 +2: stw r1,PT_R1(sp)
6101 + stw r10,PT_R10(sp)
6102 + stw r11,PT_R11(sp)
6103 + stw r12,PT_R12(sp)
6104 + stw r13,PT_R13(sp)
6105 + stw r14,PT_R14(sp)
6106 + stw r15,PT_R15(sp)
6107 + stw r2,PT_ORIG_R2(sp)
6112 + stw r24,PT_ESTATUS(sp)
6113 + movia r24,status_extension // Read status extension
6115 + stw r1,PT_STATUS_EXTENSION(sp) // Store user/supervisor status
6116 + ORI32 r1,r1,PS_S_ASM // Set supervisor mode
6122 + ldw r1,PT_STATUS_EXTENSION(sp) // Restore user/supervisor status
6123 + movia r24,status_extension
6125 + ldw r1,PT_R1(sp) // Restore registers
6134 + ldw r10,PT_R10(sp)
6135 + ldw r11,PT_R11(sp)
6136 + ldw r12,PT_R12(sp)
6137 + ldw r13,PT_R13(sp)
6138 + ldw r14,PT_R14(sp)
6139 + ldw r15,PT_R15(sp)
6143 + ldw r24,PT_ESTATUS(sp)
6146 + ldw sp,PT_SP(sp) // Restore sp last
6149 +.macro SAVE_SWITCH_STACK
6150 + addi sp,sp,-SWITCH_STACK_SIZE
6151 + stw r16,SW_R16(sp)
6152 + stw r17,SW_R17(sp)
6153 + stw r18,SW_R18(sp)
6154 + stw r19,SW_R19(sp)
6155 + stw r20,SW_R20(sp)
6156 + stw r21,SW_R21(sp)
6157 + stw r22,SW_R22(sp)
6158 + stw r23,SW_R23(sp)
6164 +.macro RESTORE_SWITCH_STACK
6165 + ldw r16,SW_R16(sp)
6166 + ldw r17,SW_R17(sp)
6167 + ldw r18,SW_R18(sp)
6168 + ldw r19,SW_R19(sp)
6169 + ldw r20,SW_R20(sp)
6170 + ldw r21,SW_R21(sp)
6171 + ldw r22,SW_R22(sp)
6172 + ldw r23,SW_R23(sp)
6176 + addi sp,sp,SWITCH_STACK_SIZE
6179 +#endif /* __ASSEMBLY__ */
6180 +#endif /* __NIOS2NOMMU_ENTRY_H */
6181 --- linux/include/asm-nios2nommu/errno.h
6182 +++ linux/include/asm-nios2nommu/errno.h
6184 +#ifndef _NIOS2NOMMU_ERRNO_H
6185 +#define _NIOS2NOMMU_ERRNO_H
6187 +#include <asm-generic/errno.h>
6189 +#endif /* _NIOS2NOMMU_ERRNO_H */
6190 --- linux/include/asm-nios2nommu/fcntl.h
6191 +++ linux/include/asm-nios2nommu/fcntl.h
6194 + * This file came from the m68k port.
6196 + * Copyright (C) 2004 Microtronix Datacom Ltd.
6198 + * All rights reserved.
6200 + * This program is free software; you can redistribute it and/or modify
6201 + * it under the terms of the GNU General Public License as published by
6202 + * the Free Software Foundation; either version 2 of the License, or
6203 + * (at your option) any later version.
6205 + * This program is distributed in the hope that it will be useful, but
6206 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6207 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6208 + * NON INFRINGEMENT. See the GNU General Public License for more
6211 + * You should have received a copy of the GNU General Public License
6212 + * along with this program; if not, write to the Free Software
6213 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6216 +#ifndef _NIOS2_FCNTL_H
6217 +#define _NIOS2_FCNTL_H
6219 +/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
6220 + located on an ext2 file system */
6221 +#define O_ACCMODE 0003
6222 +#define O_RDONLY 00
6223 +#define O_WRONLY 01
6225 +#define O_CREAT 0100 /* not fcntl */
6226 +#define O_EXCL 0200 /* not fcntl */
6227 +#define O_NOCTTY 0400 /* not fcntl */
6228 +#define O_TRUNC 01000 /* not fcntl */
6229 +#define O_APPEND 02000
6230 +#define O_NONBLOCK 04000
6231 +#define O_NDELAY O_NONBLOCK
6232 +#define O_SYNC 010000
6233 +#define FASYNC 020000 /* fcntl, for BSD compatibility */
6234 +#define O_DIRECTORY 040000 /* must be a directory */
6235 +#define O_NOFOLLOW 0100000 /* don't follow links */
6236 +#define O_DIRECT 0200000 /* direct disk access hint - currently ignored */
6237 +#define O_LARGEFILE 0400000
6238 +#define O_NOATIME 01000000
6240 +#define F_DUPFD 0 /* dup */
6241 +#define F_GETFD 1 /* get close_on_exec */
6242 +#define F_SETFD 2 /* set/clear close_on_exec */
6243 +#define F_GETFL 3 /* get file->f_flags */
6244 +#define F_SETFL 4 /* set file->f_flags */
6249 +#define F_SETOWN 8 /* for sockets. */
6250 +#define F_GETOWN 9 /* for sockets. */
6251 +#define F_SETSIG 10 /* for sockets. */
6252 +#define F_GETSIG 11 /* for sockets. */
6254 +#define F_GETLK64 12 /* using 'struct flock64' */
6255 +#define F_SETLK64 13
6256 +#define F_SETLKW64 14
6258 +/* for F_[GET|SET]FL */
6259 +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
6261 +/* for posix fcntl() and lockf() */
6266 +/* for old implementation of bsd flock () */
6267 +#define F_EXLCK 4 /* or 3 */
6268 +#define F_SHLCK 8 /* or 4 */
6271 +#define F_INPROGRESS 16
6273 +/* operations for bsd flock(), also used by the kernel implementation */
6274 +#define LOCK_SH 1 /* shared lock */
6275 +#define LOCK_EX 2 /* exclusive lock */
6276 +#define LOCK_NB 4 /* or'd with one of the above to prevent
6278 +#define LOCK_UN 8 /* remove lock */
6280 +#define LOCK_MAND 32 /* This is a mandatory flock */
6281 +#define LOCK_READ 64 /* ... Which allows concurrent read operations */
6282 +#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
6283 +#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
6301 +#define F_LINUX_SPECIFIC_BASE 1024
6302 +#endif /* _NIOS2_FCNTL_H */
6303 --- linux/include/asm-nios2nommu/flat.h
6304 +++ linux/include/asm-nios2nommu/flat.h
6307 + * include/asm-nios2nommu/flat.h -- uClinux bFLT relocations
6309 + * Copyright (C) 2004,05 Microtronix Datacom Ltd
6311 + * This file is subject to the terms and conditions of the GNU General
6312 + * Public License. See the file COPYING in the main directory of this
6313 + * archive for more details.
6315 + * Written by Wentao Xu <wentao@microtronix.com>
6318 +#ifndef __NIOS2_FLAT_H__
6319 +#define __NIOS2_FLAT_H__
6321 +#define flat_reloc_valid(reloc, size) ((reloc) <= (size + 0x8000))
6323 +/* The stack is 64-bit aligned for Nios II, so (sp - 1) shall
6324 + * be 64-bit aligned, where -1 is for argc
6326 +#define flat_stack_align(sp) (sp = (unsigned long *)(((unsigned long)sp - 1) & (-8)))
6328 +/* The uClibc port for Nios II expects the argc is followed by argv and envp */
6329 +#define flat_argvp_envp_on_stack() 1
6331 +#define flat_old_ram_flag(flags) (flags)
6333 +/* We store the type of relocation in the top 4 bits of the `relval.' */
6335 +/* Convert a relocation entry into an address. */
6336 +static inline unsigned long
6337 +flat_get_relocate_addr (unsigned long relval)
6339 + return relval & 0x0fffffff; /* Mask out top 4-bits */
6342 +#define FLAT_NIOS2_RELOC_TYPE(relval) ((relval) >> 28)
6344 +#define FLAT_NIOS2_R_32 0 /* Normal 32-bit reloc */
6345 +#define FLAT_NIOS2_R_HI_LO 1 /* High 16-bits + low 16-bits field */
6346 +#define FLAT_NIOS2_R_HIADJ_LO 2 /* High 16-bits adjust + low 16-bits field */
6347 +#define FLAT_NIOS2_R_CALL26 4 /* Call imm26 */
6349 +/* Extract the address to be relocated from the symbol reference at rp;
6350 + * relval is the raw relocation-table entry from which RP is derived.
6351 + * rp shall always be 32-bit aligned
6353 +static inline unsigned long flat_get_addr_from_rp (unsigned long *rp,
6354 + unsigned long relval,
6355 + unsigned long flags)
6357 + switch (FLAT_NIOS2_RELOC_TYPE(relval))
6359 + case FLAT_NIOS2_R_32:
6360 + /* Simple 32-bit address. The loader expect it in bigger endian */
6361 + return htonl(*rp);
6363 + case FLAT_NIOS2_R_HI_LO:
6364 + /* get the two 16-bit immediate value from instructions, then
6365 + * construct a 32-bit value. Again the loader expect bigger endian
6367 + return htonl ((((rp[0] >> 6) & 0xFFFF) << 16 ) |
6368 + ((rp[1] >> 6) & 0xFFFF));
6370 + case FLAT_NIOS2_R_HIADJ_LO:
6372 + /* get the two 16-bit immediate value from instructions, then
6373 + * construct a 32-bit value. Again the loader expect bigger endian
6375 + unsigned int low, high;
6376 + high = (rp[0] >> 6) & 0xFFFF;
6377 + low = (rp[1] >> 6) & 0xFFFF;
6379 + if ((low >> 15) & 1) high--;
6381 + return htonl ((high << 16 ) | low );
6383 + case FLAT_NIOS2_R_CALL26:
6384 + /* the 26-bit immediate value is actually 28-bit */
6385 + return htonl(((*rp) >> 6) << 2);
6388 + return ~0; /* bogus value */
6392 +/* Insert the address addr into the symbol reference at rp;
6393 + * relval is the raw relocation-table entry from which rp is derived.
6394 + * rp shall always be 32-bit aligned
6396 +static inline void flat_put_addr_at_rp (unsigned long *rp, unsigned long addr,
6397 + unsigned long relval)
6399 + unsigned long exist_val;
6400 + switch (FLAT_NIOS2_RELOC_TYPE (relval)) {
6401 + case FLAT_NIOS2_R_32:
6402 + /* Simple 32-bit address. */
6406 + case FLAT_NIOS2_R_HI_LO:
6407 + exist_val = rp[0];
6408 + rp[0] = ((((exist_val >> 22) << 16) | (addr >> 16)) << 6) | (exist_val & 0x3F);
6409 + exist_val = rp[1];
6410 + rp[1] = ((((exist_val >> 22) << 16) | (addr & 0xFFFF)) << 6) | (exist_val & 0x3F);
6413 + case FLAT_NIOS2_R_HIADJ_LO:
6415 + unsigned int high = (addr >> 16);
6416 + if ((addr >> 15) & 1)
6417 + high = (high + 1) & 0xFFFF;
6418 + exist_val = rp[0];
6419 + rp[0] = ((((exist_val >> 22) << 16) | high) << 6) | (exist_val & 0x3F);
6420 + exist_val = rp[1];
6421 + rp[1] = ((((exist_val >> 22) << 16) | (addr & 0xFFFF)) << 6) | (exist_val & 0x3F);
6424 + case FLAT_NIOS2_R_CALL26:
6425 + /* the opcode of CALL is 0, so just store the value */
6426 + *rp = ((addr >> 2) << 6);
6431 +#endif /* __NIOS2_FLAT_H__ */
6432 --- linux/include/asm-nios2nommu/hardirq.h
6433 +++ linux/include/asm-nios2nommu/hardirq.h
6436 + * Ported from m68knommu
6438 + * Copyright (C) 2003, Microtronix Datacom Ltd.
6439 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6441 + * All rights reserved.
6443 + * This program is free software; you can redistribute it and/or modify
6444 + * it under the terms of the GNU General Public License as published by
6445 + * the Free Software Foundation; either version 2 of the License, or
6446 + * (at your option) any later version.
6448 + * This program is distributed in the hope that it will be useful, but
6449 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6450 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6451 + * NON INFRINGEMENT. See the GNU General Public License for more
6454 + * You should have received a copy of the GNU General Public License
6455 + * along with this program; if not, write to the Free Software
6456 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6459 +#ifndef __NIOS2_HARDIRQ_H
6460 +#define __NIOS2_HARDIRQ_H
6462 +// #include <linux/config.h>
6463 +#include <linux/cache.h>
6464 +#include <linux/threads.h>
6467 + unsigned int __softirq_pending;
6468 +} ____cacheline_aligned irq_cpustat_t;
6470 +#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
6472 +#define HARDIRQ_BITS 8
6475 + * The hardirq mask has to be large enough to have
6476 + * space for potentially all IRQ sources in the system
6477 + * nesting on a single CPU:
6479 +#if (1 << HARDIRQ_BITS) < NR_IRQS
6480 +# error HARDIRQ_BITS is too low!
6484 +# error nios2nommu SMP is not available
6485 +#endif /* CONFIG_SMP */
6487 +#endif /* __NIOS2_HARDIRQ_H */
6488 --- linux/include/asm-nios2nommu/hdreg.h
6489 +++ linux/include/asm-nios2nommu/hdreg.h
6492 + * Copyright (C) 1994-1996 Linus Torvalds & authors
6493 + * Copyright (C) 2002 Wentau Xu (www.microtronix.com)
6494 + * copyright (C) 2004 Microtronix Datacom Ltd.
6496 + * All rights reserved.
6498 + * This program is free software; you can redistribute it and/or modify
6499 + * it under the terms of the GNU General Public License as published by
6500 + * the Free Software Foundation; either version 2 of the License, or
6501 + * (at your option) any later version.
6503 + * This program is distributed in the hope that it will be useful, but
6504 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6505 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6506 + * NON INFRINGEMENT. See the GNU General Public License for more
6509 + * You should have received a copy of the GNU General Public License
6510 + * along with this program; if not, write to the Free Software
6511 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6515 +#ifndef __NIOS2_HDREG_H
6516 +#define __NIOS2_HDREG_H
6518 +typedef unsigned long ide_ioreg_t;
6520 +#endif /* __NIOS2_HDREG_H */
6521 --- linux/include/asm-nios2nommu/hw_irq.h
6522 +++ linux/include/asm-nios2nommu/hw_irq.h
6524 +#ifndef _ASM_HW_IRQ_H
6525 +#define _ASM_HW_IRQ_H
6528 + * linux/include/asm/hw_irq.h
6530 + * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
6532 + * moved some of the old arch/i386/kernel/irq.h to here. VY
6534 + * IRQ/IPI changes taken from work by Thomas Radke
6535 + * <tomsoft@informatik.tu-chemnitz.de>
6539 +#endif /* _ASM_HW_IRQ_H */
6540 --- linux/include/asm-nios2nommu/ide.h
6541 +++ linux/include/asm-nios2nommu/ide.h
6544 + * linux/include/asm-niosnommu2/ide.h
6546 + * Copyright (C) 1994-1996 Linus Torvalds & authors
6547 + * Copyright (C) 2004 Microtronix Datacom Ltd.
6549 + * All rights reserved.
6551 + * This program is free software; you can redistribute it and/or modify
6552 + * it under the terms of the GNU General Public License as published by
6553 + * the Free Software Foundation; either version 2 of the License, or
6554 + * (at your option) any later version.
6556 + * This program is distributed in the hope that it will be useful, but
6557 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6558 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6559 + * NON INFRINGEMENT. See the GNU General Public License for more
6562 + * You should have received a copy of the GNU General Public License
6563 + * along with this program; if not, write to the Free Software
6564 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6568 +#ifndef __ASMNIOS2_IDE_H
6569 +#define __ASMNIOS2_IDE_H
6572 +#undef MAX_HWIFS /* we're going to force it */
6575 +#define MAX_HWIFS 1
6578 +#define IDE_ARCH_OBSOLETE_INIT
6579 +#define IDE_ARCH_OBSOLETE_DEFAULTS
6580 +#define ide_default_io_base(i) ((unsigned long)na_ide_ide)
6581 +#define ide_default_irq(b) (na_ide_ide_irq)
6582 +#define ide_init_default_irq(base) ide_default_irq(base)
6583 +#define ide_default_io_ctl(base) ((base) + (0xE*4))
6585 +#include <asm-generic/ide_iops.h>
6587 +#endif /* __KERNEL__ */
6589 +#endif /* __ASMNIOS2_IDE_H */
6590 --- linux/include/asm-nios2nommu/init.h
6591 +++ linux/include/asm-nios2nommu/init.h
6594 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6596 + * All rights reserved.
6598 + * This program is free software; you can redistribute it and/or modify
6599 + * it under the terms of the GNU General Public License as published by
6600 + * the Free Software Foundation; either version 2 of the License, or
6601 + * (at your option) any later version.
6603 + * This program is distributed in the hope that it will be useful, but
6604 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6605 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6606 + * NON INFRINGEMENT. See the GNU General Public License for more
6609 + * You should have received a copy of the GNU General Public License
6610 + * along with this program; if not, write to the Free Software
6611 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6614 +#error "<asm/init.h> should never be used - use <linux/init.h> instead"
6615 --- linux/include/asm-nios2nommu/ioctl.h
6616 +++ linux/include/asm-nios2nommu/ioctl.h
6618 +/* $Id: ioctl.h,v 1.3 2004/02/12 23:06:40 ken-h Exp $
6620 + * linux/ioctl.h for Linux by H.H. Bergman.
6622 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6624 + * All rights reserved.
6626 + * This program is free software; you can redistribute it and/or modify
6627 + * it under the terms of the GNU General Public License as published by
6628 + * the Free Software Foundation; either version 2 of the License, or
6629 + * (at your option) any later version.
6631 + * This program is distributed in the hope that it will be useful, but
6632 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6633 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6634 + * NON INFRINGEMENT. See the GNU General Public License for more
6637 + * You should have received a copy of the GNU General Public License
6638 + * along with this program; if not, write to the Free Software
6639 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6643 +#ifndef _NIOS2_IOCTL_H
6644 +#define _NIOS2_IOCTL_H
6646 +/* ioctl command encoding: 32 bits total, command in lower 16 bits,
6647 + * size of the parameter structure in the lower 14 bits of the
6649 + * Encoding the size of the parameter structure in the ioctl request
6650 + * is useful for catching programs compiled with old versions
6651 + * and to avoid overwriting user space outside the user buffer area.
6652 + * The highest 2 bits are reserved for indicating the ``access mode''.
6653 + * NOTE: This limits the max parameter size to 16kB -1 !
6657 + * I don't really have any idea about what this should look like, so
6658 + * for the time being, this is heavily based on the PC definitions.
6662 + * The following is for compatibility across the various Linux
6663 + * platforms. The i386 ioctl numbering scheme doesn't really enforce
6664 + * a type field. De facto, however, the top 8 bits of the lower 16
6665 + * bits are indeed used as a type field, so we might just as well make
6666 + * this explicit here. Please be sure to use the decoding macros
6667 + * below from now on.
6669 +#define _IOC_NRBITS 8
6670 +#define _IOC_TYPEBITS 8
6671 +#define _IOC_SIZEBITS 14
6672 +#define _IOC_DIRBITS 2
6674 +#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
6675 +#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
6676 +#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
6677 +#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
6679 +#define _IOC_NRSHIFT 0
6680 +#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
6681 +#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
6682 +#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
6687 +#define _IOC_NONE 0U
6688 +#define _IOC_WRITE 1U
6689 +#define _IOC_READ 2U
6691 +#define _IOC(dir,type,nr,size) \
6692 + (((dir) << _IOC_DIRSHIFT) | \
6693 + ((type) << _IOC_TYPESHIFT) | \
6694 + ((nr) << _IOC_NRSHIFT) | \
6695 + ((size) << _IOC_SIZESHIFT))
6697 +/* used to create numbers */
6698 +#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
6699 +#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
6700 +#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
6701 +#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
6703 +/* used to decode ioctl numbers.. */
6704 +#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
6705 +#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
6706 +#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
6707 +#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
6709 +/* ...and for the drivers/sound files... */
6711 +#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
6712 +#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
6713 +#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
6714 +#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
6715 +#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
6717 +#endif /* _NIOS2_IOCTL_H */
6718 --- linux/include/asm-nios2nommu/ioctls.h
6719 +++ linux/include/asm-nios2nommu/ioctls.h
6722 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6724 + * All rights reserved.
6726 + * This program is free software; you can redistribute it and/or modify
6727 + * it under the terms of the GNU General Public License as published by
6728 + * the Free Software Foundation; either version 2 of the License, or
6729 + * (at your option) any later version.
6731 + * This program is distributed in the hope that it will be useful, but
6732 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6733 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6734 + * NON INFRINGEMENT. See the GNU General Public License for more
6737 + * You should have received a copy of the GNU General Public License
6738 + * along with this program; if not, write to the Free Software
6739 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6743 +#ifndef __ARCH_NIOS2_IOCTLS_H__
6744 +#define __ARCH_NIOS2_IOCTLS_H__
6746 +#include <asm/ioctl.h>
6748 +/* 0x54 is just a magic number to make these relatively unique ('T') */
6750 +#define TCGETS 0x5401
6751 +#define TCSETS 0x5402
6752 +#define TCSETSW 0x5403
6753 +#define TCSETSF 0x5404
6754 +#define TCGETA 0x5405
6755 +#define TCSETA 0x5406
6756 +#define TCSETAW 0x5407
6757 +#define TCSETAF 0x5408
6758 +#define TCSBRK 0x5409
6759 +#define TCXONC 0x540A
6760 +#define TCFLSH 0x540B
6761 +#define TIOCEXCL 0x540C
6762 +#define TIOCNXCL 0x540D
6763 +#define TIOCSCTTY 0x540E
6764 +#define TIOCGPGRP 0x540F
6765 +#define TIOCSPGRP 0x5410
6766 +#define TIOCOUTQ 0x5411
6767 +#define TIOCSTI 0x5412
6768 +#define TIOCGWINSZ 0x5413
6769 +#define TIOCSWINSZ 0x5414
6770 +#define TIOCMGET 0x5415
6771 +#define TIOCMBIS 0x5416
6772 +#define TIOCMBIC 0x5417
6773 +#define TIOCMSET 0x5418
6774 +#define TIOCGSOFTCAR 0x5419
6775 +#define TIOCSSOFTCAR 0x541A
6776 +#define FIONREAD 0x541B
6777 +#define TIOCINQ FIONREAD
6778 +#define TIOCLINUX 0x541C
6779 +#define TIOCCONS 0x541D
6780 +#define TIOCGSERIAL 0x541E
6781 +#define TIOCSSERIAL 0x541F
6782 +#define TIOCPKT 0x5420
6783 +#define FIONBIO 0x5421
6784 +#define TIOCNOTTY 0x5422
6785 +#define TIOCSETD 0x5423
6786 +#define TIOCGETD 0x5424
6787 +#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */
6788 +#define TIOCTTYGSTRUCT 0x5426 /* For debugging only */
6789 +#define TIOCSBRK 0x5427 /* BSD compatibility */
6790 +#define TIOCCBRK 0x5428 /* BSD compatibility */
6791 +#define TIOCGSID 0x5429 /* Return the session ID of FD */
6792 +#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
6793 +#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
6795 +#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */
6796 +#define FIOCLEX 0x5451
6797 +#define FIOASYNC 0x5452
6798 +#define TIOCSERCONFIG 0x5453
6799 +#define TIOCSERGWILD 0x5454
6800 +#define TIOCSERSWILD 0x5455
6801 +#define TIOCGLCKTRMIOS 0x5456
6802 +#define TIOCSLCKTRMIOS 0x5457
6803 +#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
6804 +#define TIOCSERGETLSR 0x5459 /* Get line status register */
6805 +#define TIOCSERGETMULTI 0x545A /* Get multiport config */
6806 +#define TIOCSERSETMULTI 0x545B /* Set multiport config */
6808 +#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
6809 +#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
6810 +#define FIOQSIZE 0x545E
6812 +/* Used for packet mode */
6813 +#define TIOCPKT_DATA 0
6814 +#define TIOCPKT_FLUSHREAD 1
6815 +#define TIOCPKT_FLUSHWRITE 2
6816 +#define TIOCPKT_STOP 4
6817 +#define TIOCPKT_START 8
6818 +#define TIOCPKT_NOSTOP 16
6819 +#define TIOCPKT_DOSTOP 32
6821 +#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
6823 +#endif /* __ARCH_NIOS2_IOCTLS_H__ */
6824 --- linux/include/asm-nios2nommu/io.h
6825 +++ linux/include/asm-nios2nommu/io.h
6828 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6830 + * All rights reserved.
6832 + * This program is free software; you can redistribute it and/or modify
6833 + * it under the terms of the GNU General Public License as published by
6834 + * the Free Software Foundation; either version 2 of the License, or
6835 + * (at your option) any later version.
6837 + * This program is distributed in the hope that it will be useful, but
6838 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6839 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6840 + * NON INFRINGEMENT. See the GNU General Public License for more
6843 + * You should have received a copy of the GNU General Public License
6844 + * along with this program; if not, write to the Free Software
6845 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6849 +#ifndef __NIOS2_IO_H
6850 +#define __NIOS2_IO_H
6854 +#include <linux/kernel.h>
6856 +#include <asm/page.h> /* IO address mapping routines need this */
6857 +#include <asm/system.h>
6858 +#include <asm/unaligned.h>
6860 +extern void insw(unsigned long port, void *dst, unsigned long count);
6861 +extern void outsw(unsigned long port, void *src, unsigned long count);
6862 +extern void insl(unsigned long port, void *dst, unsigned long count);
6863 +extern void outsl(unsigned long port, void *src, unsigned long count);
6867 + * readX/writeX() are used to access memory mapped devices. On some
6868 + * architectures the memory mapped IO stuff needs to be accessed
6869 + * differently. On the Nios architecture, we just read/write the
6870 + * memory location directly.
6873 +#define readb(addr) \
6875 + unsigned char __res;\
6876 + __asm__ __volatile__( \
6877 + "ldbuio %0, 0(%1)" \
6883 +#define readw(addr) \
6885 + unsigned short __res;\
6886 + __asm__ __volatile__( \
6887 + "ldhuio %0, 0(%1)" \
6893 +#define readl(addr) \
6895 + unsigned int __res;\
6896 + __asm__ __volatile__( \
6897 + "ldwio %0, 0(%1)" \
6903 +#define writeb(b,addr) \
6905 + __asm__ __volatile__( \
6906 + "stbio %0, 0(%1)" \
6907 + : : "r"(b), "r" (addr)); \
6910 +#define writew(b,addr) \
6912 + __asm__ __volatile__( \
6913 + "sthio %0, 0(%1)" \
6914 + : : "r"(b), "r" (addr)); \
6917 +#define writel(b,addr) \
6919 + __asm__ __volatile__( \
6920 + "stwio %0, 0(%1)" \
6921 + : : "r"(b), "r" (addr)); \
6924 +#define __raw_readb readb
6925 +#define __raw_readw readw
6926 +#define __raw_readl readl
6927 +#define __raw_writeb writeb
6928 +#define __raw_writew writew
6929 +#define __raw_writel writel
6934 + * make the short names macros so specific devices
6935 + * can override them as required
6938 +#define memset_io(addr,c,len) memset((void *)(((unsigned int)(addr)) | 0x80000000),(c),(len))
6939 +#define memcpy_fromio(to,from,len) memcpy((to),(void *)(((unsigned int)(from)) | 0x80000000),(len))
6940 +#define memcpy_toio(to,from,len) memcpy((void *)(((unsigned int)(to)) | 0x80000000),(from),(len))
6942 +#define inb(addr) readb(addr)
6943 +#define inw(addr) readw(addr)
6944 +#define inl(addr) readl(addr)
6946 +#define outb(x,addr) ((void) writeb(x,addr))
6947 +#define outw(x,addr) ((void) writew(x,addr))
6948 +#define outl(x,addr) ((void) writel(x,addr))
6950 +#define inb_p(addr) inb(addr)
6951 +#define inw_p(addr) inw(addr)
6952 +#define inl_p(addr) inl(addr)
6954 +#define outb_p(x,addr) outb(x,addr)
6955 +#define outw_p(x,addr) outw(x,addr)
6956 +#define outl_p(x,addr) outl(x,addr)
6960 +extern inline void insb(unsigned long port, void *dst, unsigned long count)
6962 + unsigned char *p=(unsigned char*)dst;
6967 +/* See arch/niosnommu/io.c for optimized version */
6968 +extern inline void _insw(unsigned long port, void *dst, unsigned long count)
6970 + unsigned short *p=(unsigned short*)dst;
6975 +/* See arch/niosnommu/kernel/io.c for unaligned destination pointer */
6976 +extern inline void _insl(unsigned long port, void *dst, unsigned long count)
6978 + unsigned long *p=(unsigned long*)dst;
6983 +extern inline void outsb(unsigned long port, void *src, unsigned long count)
6985 + unsigned char *p=(unsigned char*)src;
6987 + outb( *p++, port );
6990 +/* See arch/niosnommu/io.c for optimized version */
6991 +extern inline void _outsw(unsigned long port, void *src, unsigned long count)
6993 + unsigned short *p=(unsigned short*)src;
6995 + outw( *p++, port );
6998 +/* See arch/niosnommu/kernel/io.c for unaligned source pointer */
6999 +extern inline void _outsl(unsigned long port, void *src, unsigned long count)
7001 + unsigned long *p=(unsigned long*)src;
7003 + outl( *p++, port );
7008 +extern inline void mapioaddr(unsigned long physaddr, unsigned long virt_addr,
7009 + int bus, int rdonly)
7014 +//vic - copied from m68knommu
7016 +/* Values for nocacheflag and cmode */
7017 +#define IOMAP_FULL_CACHING 0
7018 +#define IOMAP_NOCACHE_SER 1
7019 +#define IOMAP_NOCACHE_NONSER 2
7020 +#define IOMAP_WRITETHROUGH 3
7022 +extern void *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag);
7023 +extern void __iounmap(void *addr, unsigned long size);
7025 +extern inline void *ioremap(unsigned long physaddr, unsigned long size)
7027 + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
7029 +extern inline void *ioremap_nocache(unsigned long physaddr, unsigned long size)
7031 + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
7033 +extern inline void *ioremap_writethrough(unsigned long physaddr, unsigned long size)
7035 + return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
7037 +extern inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size)
7039 + return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
7042 +extern void iounmap(void *addr);
7045 +#define IO_SPACE_LIMIT 0xffffffff
7047 +#define dma_cache_inv(_start,_size) do { } while (0)
7048 +#define dma_cache_wback(_start,_size) do { } while (0)
7049 +#define dma_cache_wback_inv(_start,_size) do { } while (0)
7051 +/* Pages to physical address... */
7052 +#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
7053 +#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
7055 +#define mm_ptov(vaddr) ((void *) (vaddr))
7056 +#define mm_vtop(vaddr) ((unsigned long) (vaddr))
7057 +#define phys_to_virt(vaddr) ((void *) (vaddr))
7058 +#define virt_to_phys(vaddr) ((unsigned long) (vaddr))
7060 +#define virt_to_bus virt_to_phys
7061 +#define bus_to_virt phys_to_virt
7063 +#endif /* __KERNEL__ */
7065 +#endif /* !(__NIOS2_IO_H) */
7067 --- linux/include/asm-nios2nommu/ipcbuf.h
7068 +++ linux/include/asm-nios2nommu/ipcbuf.h
7070 +#ifndef __NIOS2_IPCBUF_H__
7071 +#define __NIOS2_IPCBUF_H__
7073 +/* Copied from asm-m68k/ipcbuf.h
7074 + * The user_ipc_perm structure for Nios architecture.
7075 + * Note extra padding because this structure is passed back and forth
7076 + * between kernel and user space.
7078 + * Pad space is left for:
7079 + * - 32-bit mode_t and seq
7080 + * - 2 miscellaneous 32-bit values
7082 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7084 + * All rights reserved.
7086 + * This program is free software; you can redistribute it and/or modify
7087 + * it under the terms of the GNU General Public License as published by
7088 + * the Free Software Foundation; either version 2 of the License, or
7089 + * (at your option) any later version.
7091 + * This program is distributed in the hope that it will be useful, but
7092 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7093 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7094 + * NON INFRINGEMENT. See the GNU General Public License for more
7097 + * You should have received a copy of the GNU General Public License
7098 + * along with this program; if not, write to the Free Software
7099 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7105 + __kernel_key_t key;
7106 + __kernel_uid32_t uid;
7107 + __kernel_gid32_t gid;
7108 + __kernel_uid32_t cuid;
7109 + __kernel_gid32_t cgid;
7110 + __kernel_mode_t mode;
7111 + unsigned short __pad1;
7112 + unsigned short seq;
7113 + unsigned short __pad2;
7114 + unsigned long __unused1;
7115 + unsigned long __unused2;
7118 +#endif /* __NIOS2_IPCBUF_H__ */
7119 --- linux/include/asm-nios2nommu/ipc.h
7120 +++ linux/include/asm-nios2nommu/ipc.h
7122 +#ifndef __NIOS2_IPC_H__
7123 +#define __NIOS2_IPC_H__
7125 +/* Copied from sparc version
7126 + * These are used to wrap system calls on the Nios.
7128 + * See arch/niosnommu/kernel/sys_nios.c for ugly details..
7130 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7132 + * All rights reserved.
7134 + * This program is free software; you can redistribute it and/or modify
7135 + * it under the terms of the GNU General Public License as published by
7136 + * the Free Software Foundation; either version 2 of the License, or
7137 + * (at your option) any later version.
7139 + * This program is distributed in the hope that it will be useful, but
7140 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7141 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7142 + * NON INFRINGEMENT. See the GNU General Public License for more
7145 + * You should have received a copy of the GNU General Public License
7146 + * along with this program; if not, write to the Free Software
7147 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7150 +struct ipc_kludge {
7151 + struct msgbuf *msgp;
7167 +/* Used by the DIPC package, try and avoid reusing it */
7170 +#define IPCCALL(version,op) ((version)<<16 | (op))
7173 --- linux/include/asm-nios2nommu/irq.h
7174 +++ linux/include/asm-nios2nommu/irq.h
7177 + * 21Mar2001 1.1 dgt/microtronix
7179 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7181 + * All rights reserved.
7183 + * This program is free software; you can redistribute it and/or modify
7184 + * it under the terms of the GNU General Public License as published by
7185 + * the Free Software Foundation; either version 2 of the License, or
7186 + * (at your option) any later version.
7188 + * This program is distributed in the hope that it will be useful, but
7189 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7190 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7191 + * NON INFRINGEMENT. See the GNU General Public License for more
7194 + * You should have received a copy of the GNU General Public License
7195 + * along with this program; if not, write to the Free Software
7196 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7201 +#ifndef _NIOS2NOMMU_IRQ_H_
7202 +#define _NIOS2NOMMU_IRQ_H_
7204 +extern void disable_irq(unsigned int);
7205 +extern void enable_irq(unsigned int);
7207 +// #include <linux/config.h>
7208 +#include <linux/interrupt.h>
7210 +#define SYS_IRQS 32
7211 +#define NR_IRQS SYS_IRQS
7214 + * Interrupt source definitions
7215 + * General interrupt sources are the level 1-7.
7216 + * Adding an interrupt service routine for one of these sources
7217 + * results in the addition of that routine to a chain of routines.
7218 + * Each one is called in succession. Each individual interrupt
7219 + * service routine should determine if the device associated with
7220 + * that routine requires service.
7223 +#define IRQ01 (1) /* level 1 interrupt */
7224 +#define IRQ02 (2) /* level 2 interrupt */
7225 +#define IRQ03 (3) /* level 3 interrupt */
7226 +#define IRQ04 (4) /* level 4 interrupt */
7227 +#define IRQ05 (5) /* level 5 interrupt */
7228 +#define IRQ06 (6) /* level 6 interrupt */
7229 +#define IRQ07 (7) /* level 7 interrupt */
7230 +#define IRQ08 (8) /* level 8 interrupt */
7231 +#define IRQ09 (9) /* level 9 interrupt */
7232 +#define IRQ0A (10) /* level 10 interrupt */
7233 +#define IRQ0B (11) /* level 11 interrupt */
7234 +#define IRQ0C (12) /* level 12 interrupt */
7235 +#define IRQ0D (13) /* level 13 interrupt */
7236 +#define IRQ0E (14) /* level 14 interrupt */
7237 +#define IRQ0F (15) /* level 15 interrupt */
7238 +#define IRQ10 (16) /* level 16 interrupt */
7239 +#define IRQ12 (17) /* level 17 interrupt */
7240 +#define IRQ13 (18) /* level 18 interrupt */
7241 +#define IRQ14 (19) /* level 19 interrupt */
7242 +#define IRQ15 (20) /* level 20 interrupt */
7243 +#define IRQ16 (21) /* level 21 interrupt */
7244 +#define IRQ17 (22) /* level 22 interrupt */
7245 +#define IRQ18 (23) /* level 23 interrupt */
7246 +#define IRQ19 (24) /* level 24 interrupt */
7247 +#define IRQ1A (25) /* level 25 interrupt */
7248 +#define IRQ1B (26) /* level 26 interrupt */
7249 +#define IRQ1C (27) /* level 27 interrupt */
7250 +#define IRQ1D (28) /* level 28 interrupt */
7251 +#define IRQ1E (29) /* level 29 interrupt */
7252 +#define IRQ1F (30) /* level 30 interrupt */
7253 +#define IRQ20 (31) /* level 31 interrupt */
7254 +#define IRQ21 (32) /* level 32 interrupt */
7256 +#define IRQMAX IRQ21
7259 + * "Generic" interrupt sources
7263 + * Machine specific interrupt sources.
7265 + * Adding an interrupt service routine for a source with this bit
7266 + * set indicates a special machine specific interrupt source.
7267 + * The machine specific files define these sources.
7269 + * Removed, they are not used by any one.
7273 + * various flags for request_irq()
7275 +#define IRQ_FLG_LOCK (0x0001) /* handler is not replaceable */
7276 +#define IRQ_FLG_REPLACE (0x0002) /* replace existing handler */
7277 +#define IRQ_FLG_FAST (0x0004)
7278 +#define IRQ_FLG_SLOW (0x0008)
7279 +#define IRQ_FLG_STD (0x8000) /* internally used */
7282 + * Functions to set and clear the interrupt mask.
7286 + * Use a zero to clean the bit.
7288 +static inline void clrimr(int mask)
7292 + local_irq_save(flags);
7293 + __asm__ __volatile__(
7294 + "rdctl r8, ienable\n"
7296 + "wrctl ienable, r8\n"
7300 + local_irq_restore(flags);
7304 + * Use a one to set the bit.
7306 +static inline void setimr(int mask)
7310 + local_irq_save(flags);
7311 + __asm__ __volatile__(
7312 + "rdctl r8, ienable\n"
7314 + "wrctl ienable, r8\n"
7318 + local_irq_restore(flags);
7322 + * This structure is used to chain together the ISRs for a particular
7323 + * interrupt source (if it supports chaining).
7325 +typedef struct irq_node {
7326 + irqreturn_t (*handler)(int, void *, struct pt_regs *);
7327 + unsigned long flags;
7329 + const char *devname;
7330 + struct irq_node *next;
7334 + * This function returns a new irq_node_t
7336 +extern irq_node_t *new_irq_node(void);
7339 + * This structure has only 4 elements for speed reasons
7341 +typedef struct irq_handler {
7342 + irqreturn_t (*handler)(int, void *, struct pt_regs *);
7343 + unsigned long flags;
7345 + const char *devname;
7348 +/* count of spurious interrupts */
7349 +extern volatile unsigned int num_spurious;
7351 +#define disable_irq_nosync(i) disable_irq(i)
7353 +#ifndef irq_canonicalize
7354 +#define irq_canonicalize(i) (i)
7357 +#endif /* _NIOS2NOMMU_IRQ_H_ */
7358 --- linux/include/asm-nios2nommu/kmap_types.h
7359 +++ linux/include/asm-nios2nommu/kmap_types.h
7362 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7364 + * All rights reserved.
7366 + * This program is free software; you can redistribute it and/or modify
7367 + * it under the terms of the GNU General Public License as published by
7368 + * the Free Software Foundation; either version 2 of the License, or
7369 + * (at your option) any later version.
7371 + * This program is distributed in the hope that it will be useful, but
7372 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7373 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7374 + * NON INFRINGEMENT. See the GNU General Public License for more
7377 + * You should have received a copy of the GNU General Public License
7378 + * along with this program; if not, write to the Free Software
7379 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7383 +#ifndef _ASM_KMAP_TYPES_H
7384 +#define _ASM_KMAP_TYPES_H
7388 + KM_SKB_SUNRPC_DATA,
7389 + KM_SKB_DATA_SOFTIRQ,
7404 --- linux/include/asm-nios2nommu/linkage.h
7405 +++ linux/include/asm-nios2nommu/linkage.h
7408 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7410 + * All rights reserved.
7412 + * This program is free software; you can redistribute it and/or modify
7413 + * it under the terms of the GNU General Public License as published by
7414 + * the Free Software Foundation; either version 2 of the License, or
7415 + * (at your option) any later version.
7417 + * This program is distributed in the hope that it will be useful, but
7418 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7419 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7420 + * NON INFRINGEMENT. See the GNU General Public License for more
7423 + * You should have received a copy of the GNU General Public License
7424 + * along with this program; if not, write to the Free Software
7425 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7429 +#ifndef __ASM_LINKAGE_H
7430 +#define __ASM_LINKAGE_H
7432 +#define __ALIGN .align 3
7433 +#define __ALIGN_STR ".align 3"
7436 --- linux/include/asm-nios2nommu/linux_logo.h
7437 +++ linux/include/asm-nios2nommu/linux_logo.h
7439 +/* $Id: linux_logo.h,v 1.3 2004/02/12 23:06:40 ken-h Exp $
7440 + * include/asm-nios/linux_logo.h: This is a linux logo
7441 + * to be displayed on boot.
7443 + * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
7444 + * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
7445 + * Copyright (C) 2004 Micrtronix Datacom Ltd.
7447 + * You can put anything here, but:
7448 + * LINUX_LOGO_COLORS has to be less than 224
7449 + * image size has to be 80x80
7450 + * values have to start from 0x20
7451 + * (i.e. RGB(linux_logo_red[0],
7452 + * linux_logo_green[0],
7453 + * linux_logo_blue[0]) is color 0x20)
7454 + * BW image has to be 80x80 as well, with MS bit
7456 + * Serial_console ascii image can be any size,
7457 + * but should contain %s to display the version
7459 + * All rights reserved.
7461 + * This program is free software; you can redistribute it and/or modify
7462 + * it under the terms of the GNU General Public License as published by
7463 + * the Free Software Foundation; either version 2 of the License, or
7464 + * (at your option) any later version.
7466 + * This program is distributed in the hope that it will be useful, but
7467 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7468 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7469 + * NON INFRINGEMENT. See the GNU General Public License for more
7472 + * You should have received a copy of the GNU General Public License
7473 + * along with this program; if not, write to the Free Software
7474 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7478 +#include <linux/init.h>
7479 +#include <linux/version.h>
7481 +#define linux_logo_banner "Linux/NIOS2 version " UTS_RELEASE
7483 +#define __HAVE_ARCH_LINUX_LOGO
7484 +#define __HAVE_ARCH_LINUX_LOGO16
7486 +#define LINUX_LOGO_COLORS 221
7488 +#ifdef INCLUDE_LINUX_LOGO_DATA
7490 +unsigned char linux_logo_red[] __initdata = {
7491 + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
7492 + 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
7493 + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
7494 + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
7495 + 0xc3, 0x65, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
7496 + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
7497 + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x76, 0x79,
7498 + 0x62, 0x36, 0x9a, 0xe2, 0xec, 0xe1, 0xb8, 0xd7,
7499 + 0xaf, 0x25, 0xbc, 0xc0, 0xef, 0xea, 0xe8, 0xe8,
7500 + 0xf5, 0xf1, 0xda, 0xd3, 0x79, 0xdb, 0xf4, 0xf6,
7501 + 0xf6, 0xf6, 0xe2, 0x3d, 0xb4, 0xce, 0xe6, 0xee,
7502 + 0xf6, 0x68, 0xd8, 0xec, 0xf5, 0xc6, 0xc8, 0x9c,
7503 + 0x89, 0xd2, 0xee, 0xcb, 0xb9, 0xd2, 0x66, 0x5e,
7504 + 0x8b, 0xbe, 0xa8, 0xd5, 0xca, 0xb6, 0xae, 0x9c,
7505 + 0xc5, 0xbe, 0xbe, 0xca, 0x90, 0xb2, 0x9a, 0xa8,
7506 + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xfe,
7507 + 0xf6, 0xec, 0xfe, 0xd2, 0xea, 0xf5, 0xf2, 0xf2,
7508 + 0xe9, 0xee, 0xf6, 0xf2, 0xee, 0xf6, 0xda, 0xd4,
7509 + 0xfa, 0xca, 0xf2, 0xf6, 0xfe, 0xf2, 0xda, 0xe4,
7510 + 0xf6, 0xdd, 0xf2, 0xee, 0xfa, 0xf0, 0x12, 0x4a,
7511 + 0xd6, 0xf2, 0x8e, 0xf2, 0xf6, 0xf6, 0xb5, 0xf1,
7512 + 0x26, 0x9a, 0xea, 0xf6, 0xe0, 0xd2, 0x16, 0x9a,
7513 + 0x2e, 0xd2, 0x70, 0xd6, 0x46, 0x7c, 0xb4, 0x62,
7514 + 0xda, 0xee, 0xd6, 0xa3, 0x74, 0xa7, 0xa2, 0xe0,
7515 + 0xae, 0xbe, 0xce, 0xe2, 0xa3, 0x8e, 0x6d, 0x8e,
7516 + 0x32, 0xaf, 0x50, 0x9e, 0x5b, 0x8a, 0x98, 0x82,
7517 + 0x7a, 0x82, 0x56, 0x7c, 0x8a, 0x56, 0x5e, 0x86,
7518 + 0x6a, 0x52, 0x59, 0x64, 0x5e,
7521 +unsigned char linux_logo_green[] __initdata = {
7522 + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
7523 + 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
7524 + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
7525 + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
7526 + 0xc3, 0x62, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
7527 + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
7528 + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x62, 0x5c,
7529 + 0x4e, 0x26, 0x72, 0xaa, 0xba, 0xaf, 0x90, 0xae,
7530 + 0x92, 0x1a, 0xa4, 0x85, 0xb6, 0xbe, 0xc3, 0xc8,
7531 + 0xcf, 0xd0, 0xc2, 0xce, 0x57, 0xa2, 0xd6, 0xda,
7532 + 0xda, 0xd7, 0xb8, 0x2a, 0x7b, 0x91, 0xae, 0xca,
7533 + 0xda, 0x45, 0x9e, 0xb2, 0xd7, 0x9b, 0x90, 0x76,
7534 + 0x5c, 0xa2, 0xbe, 0xa6, 0x85, 0x96, 0x4e, 0x46,
7535 + 0x66, 0x92, 0x7a, 0x9a, 0x96, 0x9d, 0x9a, 0x6b,
7536 + 0x8a, 0x8e, 0xb2, 0xca, 0x90, 0xa6, 0x79, 0x7c,
7537 + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xfa,
7538 + 0xea, 0xd7, 0xf6, 0xbc, 0xda, 0xde, 0xda, 0xe6,
7539 + 0xca, 0xd8, 0xea, 0xe0, 0xcc, 0xf2, 0xce, 0xb2,
7540 + 0xee, 0xa2, 0xd6, 0xe6, 0xf6, 0xd7, 0xc5, 0xb8,
7541 + 0xc6, 0xb9, 0xce, 0xde, 0xce, 0xc6, 0x0e, 0x36,
7542 + 0xae, 0xbe, 0x86, 0xba, 0xbe, 0xe6, 0x8e, 0xc4,
7543 + 0x1e, 0x8e, 0xae, 0xba, 0xb2, 0xa6, 0x12, 0x7a,
7544 + 0x20, 0xc6, 0x64, 0xaa, 0x2f, 0x70, 0x85, 0x46,
7545 + 0xce, 0xd6, 0xa6, 0x6e, 0x51, 0x72, 0x92, 0xa6,
7546 + 0x87, 0x96, 0xa2, 0xd6, 0x85, 0x7a, 0x6a, 0x6e,
7547 + 0x22, 0x76, 0x36, 0x76, 0x3c, 0x6e, 0x63, 0x53,
7548 + 0x66, 0x62, 0x42, 0x50, 0x56, 0x42, 0x56, 0x56,
7549 + 0x56, 0x3e, 0x51, 0x52, 0x56,
7552 +unsigned char linux_logo_blue[] __initdata = {
7553 + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
7554 + 0x12, 0x01, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
7555 + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x06, 0x65,
7556 + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
7557 + 0xc3, 0x59, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
7558 + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
7559 + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x2e, 0x08,
7560 + 0x0a, 0x06, 0x0a, 0x0b, 0x0b, 0x0f, 0x0c, 0x0f,
7561 + 0x3d, 0x09, 0x73, 0x09, 0x0d, 0x0a, 0x10, 0x1e,
7562 + 0x2d, 0x13, 0x86, 0xba, 0x19, 0x0a, 0x36, 0x3c,
7563 + 0x26, 0x14, 0x0d, 0x06, 0x07, 0x0a, 0x0b, 0x0f,
7564 + 0x4a, 0x06, 0x0a, 0x0c, 0x2b, 0x0a, 0x0b, 0x0a,
7565 + 0x06, 0x0a, 0x0a, 0x11, 0x0b, 0x0a, 0x0a, 0x1e,
7566 + 0x0f, 0x0d, 0x0a, 0x0b, 0x22, 0x6a, 0x72, 0x0b,
7567 + 0x0b, 0x22, 0x90, 0xca, 0x90, 0x92, 0x3c, 0x2c,
7568 + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xea,
7569 + 0xb6, 0x7c, 0xda, 0x8e, 0xa6, 0x87, 0x66, 0xb6,
7570 + 0x81, 0x6a, 0xc6, 0x9a, 0x5b, 0xd2, 0xb6, 0x6a,
7571 + 0xca, 0x45, 0x92, 0xb2, 0xca, 0x52, 0x8a, 0x3e,
7572 + 0x2e, 0x66, 0x66, 0xae, 0x3e, 0x47, 0x06, 0x0e,
7573 + 0x52, 0x36, 0x6a, 0x0e, 0x0e, 0xbe, 0x2c, 0x0e,
7574 + 0x0a, 0x5a, 0x0d, 0x0e, 0x3e, 0x0a, 0x06, 0x2e,
7575 + 0x06, 0x9e, 0x4e, 0x36, 0x06, 0x58, 0x24, 0x06,
7576 + 0x9e, 0xae, 0x3a, 0x08, 0x08, 0x07, 0x5e, 0x0a,
7577 + 0x32, 0x2e, 0x2a, 0xb2, 0x43, 0x48, 0x5f, 0x2e,
7578 + 0x06, 0x06, 0x07, 0x24, 0x06, 0x32, 0x06, 0x06,
7579 + 0x46, 0x2e, 0x22, 0x06, 0x06, 0x1e, 0x4c, 0x06,
7580 + 0x3a, 0x22, 0x42, 0x34, 0x42,
7583 +unsigned char linux_logo[] __initdata = {
7584 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7585 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7586 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7587 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7588 + 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22,
7589 + 0x22, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20,
7590 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7591 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7592 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7593 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7594 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7595 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7596 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7597 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7598 + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
7599 + 0x26, 0x26, 0x25, 0x28, 0x23, 0x22, 0x21, 0x20,
7600 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7601 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7602 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7603 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7604 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
7605 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7606 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7607 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7608 + 0x21, 0x23, 0x25, 0x2a, 0x2b, 0x2c, 0x2d, 0x2d,
7609 + 0x2d, 0x2e, 0x2c, 0x2b, 0x2a, 0x25, 0x28, 0x22,
7610 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7611 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7612 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7613 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7614 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
7615 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7616 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7617 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
7618 + 0x24, 0x2a, 0x2c, 0x2f, 0x2c, 0x30, 0x30, 0x24,
7619 + 0x25, 0x27, 0x2b, 0x2c, 0x2f, 0x31, 0x32, 0x25,
7620 + 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7621 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7622 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7623 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7624 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
7625 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7626 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7627 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
7628 + 0x33, 0x34, 0x35, 0x21, 0x36, 0x36, 0x36, 0x36,
7629 + 0x36, 0x36, 0x36, 0x36, 0x21, 0x2b, 0x2f, 0x2c,
7630 + 0x30, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7631 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7632 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7633 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7634 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7635 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7636 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7637 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
7638 + 0x2d, 0x27, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7639 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x31,
7640 + 0x2d, 0x32, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
7641 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7642 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7643 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7644 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
7645 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7646 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7647 + 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, 0x2a, 0x34,
7648 + 0x25, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7649 + 0x36, 0x36, 0x36, 0x23, 0x32, 0x27, 0x21, 0x36,
7650 + 0x2a, 0x2d, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
7651 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7652 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7653 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7654 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x29, 0x20,
7655 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7656 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7657 + 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x2c, 0x35,
7658 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7659 + 0x36, 0x36, 0x36, 0x25, 0x2f, 0x37, 0x32, 0x22,
7660 + 0x36, 0x35, 0x31, 0x27, 0x22, 0x20, 0x20, 0x20,
7661 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7662 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7663 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7664 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
7665 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7666 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7667 + 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x22,
7668 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7669 + 0x36, 0x36, 0x36, 0x26, 0x38, 0x38, 0x35, 0x25,
7670 + 0x36, 0x21, 0x2d, 0x2b, 0x24, 0x21, 0x20, 0x20,
7671 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7672 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7673 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7674 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7675 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7676 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7677 + 0x20, 0x20, 0x20, 0x21, 0x24, 0x39, 0x39, 0x36,
7678 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7679 + 0x36, 0x36, 0x36, 0x25, 0x2b, 0x30, 0x28, 0x22,
7680 + 0x36, 0x36, 0x27, 0x34, 0x30, 0x23, 0x20, 0x20,
7681 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7682 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7683 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7684 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
7685 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7686 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7687 + 0x20, 0x20, 0x20, 0x21, 0x26, 0x2d, 0x26, 0x36,
7688 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7689 + 0x36, 0x36, 0x36, 0x22, 0x22, 0x36, 0x36, 0x36,
7690 + 0x36, 0x36, 0x36, 0x2d, 0x33, 0x28, 0x21, 0x20,
7691 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7692 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7693 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7694 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
7695 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7696 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7697 + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x36,
7698 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7699 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7700 + 0x36, 0x36, 0x36, 0x2b, 0x2c, 0x25, 0x21, 0x20,
7701 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7702 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7703 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7704 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
7705 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7706 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7707 + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x36, 0x36,
7708 + 0x36, 0x21, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36,
7709 + 0x36, 0x36, 0x36, 0x21, 0x23, 0x22, 0x36, 0x36,
7710 + 0x36, 0x36, 0x36, 0x28, 0x34, 0x27, 0x22, 0x20,
7711 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7712 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7713 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7714 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
7715 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7716 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7717 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
7718 + 0x21, 0x21, 0x24, 0x27, 0x21, 0x36, 0x36, 0x36,
7719 + 0x36, 0x36, 0x28, 0x27, 0x22, 0x33, 0x24, 0x36,
7720 + 0x36, 0x36, 0x36, 0x22, 0x2f, 0x2a, 0x23, 0x20,
7721 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7722 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7723 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7724 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
7725 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7726 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7727 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
7728 + 0x30, 0x3a, 0x38, 0x24, 0x24, 0x36, 0x36, 0x36,
7729 + 0x23, 0x2f, 0x3b, 0x3c, 0x3d, 0x30, 0x25, 0x21,
7730 + 0x36, 0x36, 0x36, 0x36, 0x2f, 0x32, 0x23, 0x20,
7731 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7732 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7733 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7734 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7735 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7736 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7737 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x23,
7738 + 0x3e, 0x3f, 0x40, 0x3a, 0x22, 0x36, 0x36, 0x21,
7739 + 0x41, 0x42, 0x43, 0x44, 0x45, 0x3e, 0x23, 0x21,
7740 + 0x36, 0x36, 0x36, 0x36, 0x2f, 0x33, 0x28, 0x21,
7741 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7742 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7743 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7744 + 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
7745 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7746 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7747 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x2b,
7748 + 0x44, 0x40, 0x46, 0x47, 0x35, 0x36, 0x36, 0x26,
7749 + 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x2e, 0x36,
7750 + 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
7751 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7752 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7753 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7754 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7755 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7756 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7757 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x34, 0x36, 0x4d,
7758 + 0x4e, 0x25, 0x2f, 0x46, 0x4a, 0x22, 0x23, 0x32,
7759 + 0x4f, 0x50, 0x21, 0x31, 0x51, 0x52, 0x53, 0x36,
7760 + 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
7761 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7762 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7763 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7764 + 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
7765 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7766 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7767 + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x21, 0x3a,
7768 + 0x4d, 0x21, 0x31, 0x54, 0x55, 0x28, 0x30, 0x2b,
7769 + 0x4b, 0x4d, 0x36, 0x23, 0x32, 0x50, 0x3f, 0x36,
7770 + 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
7771 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7772 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7773 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7774 + 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20,
7775 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7776 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7777 + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x38, 0x23, 0x37,
7778 + 0x55, 0x36, 0x28, 0x3a, 0x56, 0x57, 0x57, 0x58,
7779 + 0x3c, 0x4d, 0x36, 0x36, 0x36, 0x40, 0x40, 0x21,
7780 + 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
7781 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7782 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7783 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7784 + 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, 0x29, 0x20,
7785 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7786 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7787 + 0x20, 0x20, 0x20, 0x22, 0x30, 0x51, 0x23, 0x35,
7788 + 0x43, 0x25, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
7789 + 0x5f, 0x60, 0x61, 0x36, 0x31, 0x47, 0x3b, 0x36,
7790 + 0x36, 0x36, 0x36, 0x36, 0x31, 0x2c, 0x25, 0x21,
7791 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7792 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7793 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7794 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7795 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7796 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7797 + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x22,
7798 + 0x40, 0x62, 0x63, 0x5d, 0x64, 0x65, 0x66, 0x67,
7799 + 0x68, 0x69, 0x66, 0x5e, 0x6a, 0x6b, 0x2a, 0x36,
7800 + 0x36, 0x36, 0x36, 0x36, 0x33, 0x2e, 0x26, 0x21,
7801 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7802 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7803 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7804 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7805 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7806 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7807 + 0x20, 0x20, 0x20, 0x22, 0x27, 0x2f, 0x23, 0x36,
7808 + 0x6c, 0x63, 0x6d, 0x64, 0x5c, 0x66, 0x69, 0x6e,
7809 + 0x6f, 0x70, 0x71, 0x69, 0x69, 0x72, 0x6c, 0x36,
7810 + 0x36, 0x36, 0x36, 0x36, 0x33, 0x34, 0x27, 0x22,
7811 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7812 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7813 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7814 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7815 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7816 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7817 + 0x20, 0x20, 0x20, 0x22, 0x27, 0x34, 0x26, 0x73,
7818 + 0x74, 0x75, 0x76, 0x64, 0x65, 0x77, 0x69, 0x78,
7819 + 0x70, 0x71, 0x71, 0x71, 0x72, 0x5f, 0x5e, 0x21,
7820 + 0x36, 0x36, 0x36, 0x36, 0x25, 0x38, 0x2a, 0x23,
7821 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7822 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7823 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7824 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7825 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7826 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7827 + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x33, 0x79,
7828 + 0x63, 0x7a, 0x7b, 0x5c, 0x66, 0x69, 0x6e, 0x7c,
7829 + 0x71, 0x71, 0x69, 0x7d, 0x7e, 0x7a, 0x7f, 0x36,
7830 + 0x36, 0x36, 0x36, 0x36, 0x21, 0x51, 0x2b, 0x28,
7831 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7832 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7833 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7834 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7835 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7836 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7837 + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x32, 0x24,
7838 + 0x80, 0x81, 0x64, 0x82, 0x77, 0x69, 0x71, 0x71,
7839 + 0x69, 0x83, 0x84, 0x85, 0x7a, 0x85, 0x86, 0x36,
7840 + 0x21, 0x2b, 0x23, 0x36, 0x36, 0x39, 0x2e, 0x26,
7841 + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7842 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7843 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7844 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7845 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7846 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7847 + 0x20, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x33, 0x21,
7848 + 0x87, 0x88, 0x89, 0x72, 0x67, 0x66, 0x5f, 0x89,
7849 + 0x8a, 0x63, 0x85, 0x8b, 0x8c, 0x8d, 0x41, 0x36,
7850 + 0x36, 0x2d, 0x3a, 0x35, 0x36, 0x24, 0x51, 0x32,
7851 + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7852 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7853 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7854 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7855 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7856 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7857 + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x33, 0x21,
7858 + 0x55, 0x8e, 0x8f, 0x8a, 0x7d, 0x5e, 0x90, 0x7e,
7859 + 0x75, 0x75, 0x90, 0x62, 0x40, 0x3f, 0x49, 0x23,
7860 + 0x36, 0x24, 0x3a, 0x3a, 0x24, 0x36, 0x2e, 0x31,
7861 + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7862 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7863 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7864 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7865 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7866 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7867 + 0x20, 0x20, 0x21, 0x28, 0x33, 0x37, 0x25, 0x22,
7868 + 0x3b, 0x50, 0x8e, 0x8f, 0x90, 0x7e, 0x90, 0x63,
7869 + 0x74, 0x91, 0x92, 0x42, 0x93, 0x4b, 0x45, 0x2c,
7870 + 0x36, 0x36, 0x33, 0x39, 0x21, 0x36, 0x22, 0x51,
7871 + 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7872 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7873 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7874 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7875 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7876 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7877 + 0x20, 0x20, 0x22, 0x27, 0x2e, 0x2e, 0x36, 0x21,
7878 + 0x94, 0x3f, 0x50, 0x95, 0x96, 0x8f, 0x8f, 0x97,
7879 + 0x8e, 0x42, 0x50, 0x43, 0x47, 0x48, 0x48, 0x98,
7880 + 0x21, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39,
7881 + 0x2e, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
7882 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7883 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7884 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7885 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7886 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7887 + 0x20, 0x22, 0x24, 0x2b, 0x38, 0x28, 0x36, 0x32,
7888 + 0x4c, 0x4b, 0x50, 0x50, 0x50, 0x42, 0x42, 0x50,
7889 + 0x50, 0x40, 0x45, 0x99, 0x48, 0x48, 0x48, 0x48,
7890 + 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x23,
7891 + 0x2f, 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
7892 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7893 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7894 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7895 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7896 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7897 + 0x21, 0x28, 0x32, 0x51, 0x32, 0x28, 0x21, 0x98,
7898 + 0x48, 0x47, 0x9a, 0x50, 0x50, 0x50, 0x50, 0x50,
7899 + 0x9a, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48,
7900 + 0x93, 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7901 + 0x2a, 0x2f, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
7902 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7903 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7904 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7905 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7906 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7907 + 0x23, 0x30, 0x2e, 0x2c, 0x36, 0x21, 0x51, 0x9b,
7908 + 0x48, 0x48, 0x52, 0x3f, 0x50, 0x50, 0x40, 0x4b,
7909 + 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7910 + 0x48, 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7911 + 0x36, 0x2d, 0x31, 0x27, 0x23, 0x21, 0x20, 0x20,
7912 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7913 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7914 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7915 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7916 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
7917 + 0x27, 0x2c, 0x2d, 0x21, 0x36, 0x28, 0x44, 0x48,
7918 + 0x48, 0x48, 0x48, 0x47, 0x46, 0x4f, 0x47, 0x48,
7919 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7920 + 0x48, 0x9c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7921 + 0x36, 0x28, 0x51, 0x39, 0x26, 0x22, 0x20, 0x20,
7922 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7923 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7924 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7925 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7926 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
7927 + 0x35, 0x51, 0x28, 0x36, 0x36, 0x9d, 0x48, 0x48,
7928 + 0x48, 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48,
7929 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7930 + 0x48, 0x4f, 0x28, 0x36, 0x36, 0x36, 0x36, 0x36,
7931 + 0x36, 0x36, 0x28, 0x38, 0x2b, 0x25, 0x22, 0x20,
7932 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7933 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7934 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7935 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7936 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
7937 + 0x51, 0x25, 0x36, 0x36, 0x23, 0x40, 0x9b, 0x48,
7938 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7939 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7940 + 0x9b, 0x99, 0x2b, 0x36, 0x36, 0x36, 0x36, 0x36,
7941 + 0x36, 0x36, 0x36, 0x30, 0x2f, 0x33, 0x24, 0x21,
7942 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7943 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7944 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7945 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7946 + 0x20, 0x20, 0x20, 0x20, 0x21, 0x23, 0x30, 0x34,
7947 + 0x27, 0x36, 0x36, 0x36, 0x2a, 0x40, 0x47, 0x48,
7948 + 0x48, 0x48, 0x48, 0x9b, 0x99, 0x99, 0x9b, 0x48,
7949 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x47, 0x52,
7950 + 0x46, 0x4f, 0x37, 0x21, 0x36, 0x36, 0x36, 0x36,
7951 + 0x36, 0x36, 0x36, 0x36, 0x30, 0x34, 0x2a, 0x23,
7952 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7953 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7954 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7955 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7956 + 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, 0x39, 0x2c,
7957 + 0x36, 0x36, 0x36, 0x21, 0x31, 0x4e, 0x9a, 0x4c,
7958 + 0x47, 0x9b, 0x9b, 0x52, 0x46, 0x4f, 0x52, 0x9b,
7959 + 0x9b, 0x9b, 0x47, 0x4f, 0x45, 0x9a, 0x93, 0x93,
7960 + 0x3f, 0x93, 0x98, 0x28, 0x36, 0x36, 0x36, 0x36,
7961 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, 0x26,
7962 + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7963 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7964 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7965 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7966 + 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x28,
7967 + 0x36, 0x36, 0x36, 0x22, 0x38, 0x98, 0x44, 0x99,
7968 + 0x9b, 0x48, 0x48, 0x9b, 0x4c, 0x48, 0x48, 0x48,
7969 + 0x48, 0x48, 0x48, 0x47, 0x52, 0x46, 0x43, 0x93,
7970 + 0x40, 0x40, 0x43, 0x53, 0x21, 0x23, 0x33, 0x23,
7971 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x2f, 0x32,
7972 + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7973 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7974 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7975 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7976 + 0x20, 0x20, 0x20, 0x21, 0x24, 0x2b, 0x31, 0x36,
7977 + 0x36, 0x22, 0x36, 0x24, 0x9e, 0x4f, 0x9b, 0x48,
7978 + 0x48, 0x48, 0x48, 0x9b, 0x99, 0x9f, 0x52, 0x48,
7979 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47,
7980 + 0x4f, 0x9a, 0x3f, 0x46, 0x38, 0x36, 0x21, 0x30,
7981 + 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c,
7982 + 0x25, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7983 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7984 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7985 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7986 + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2e, 0x33, 0x36,
7987 + 0x25, 0x25, 0x36, 0x4d, 0x52, 0x48, 0x48, 0x48,
7988 + 0x47, 0x9f, 0x48, 0x48, 0x48, 0xa0, 0xa1, 0xa2,
7989 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7990 + 0x48, 0x47, 0x44, 0x93, 0x43, 0x23, 0x36, 0x36,
7991 + 0x26, 0x24, 0x36, 0x36, 0x36, 0x36, 0x28, 0x2f,
7992 + 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7993 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7994 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7995 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7996 + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x51, 0x24, 0x36,
7997 + 0x2a, 0x36, 0x28, 0x44, 0x48, 0x48, 0x48, 0x48,
7998 + 0xa3, 0xa4, 0x48, 0x48, 0x9f, 0xa5, 0xa6, 0x9f,
7999 + 0x48, 0x48, 0x48, 0xa2, 0xa7, 0x47, 0x48, 0x48,
8000 + 0x48, 0x48, 0x9b, 0x4b, 0x44, 0x37, 0x36, 0x23,
8001 + 0x28, 0x30, 0x22, 0x36, 0x36, 0x36, 0x36, 0x2d,
8002 + 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
8003 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8004 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8005 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8006 + 0x20, 0x20, 0x21, 0x28, 0x2b, 0x34, 0x36, 0x25,
8007 + 0x24, 0x36, 0x4a, 0x48, 0x48, 0x48, 0x48, 0x48,
8008 + 0xa8, 0xa1, 0x48, 0x48, 0x9f, 0xa9, 0xa6, 0x9f,
8009 + 0x48, 0x48, 0xaa, 0xa1, 0xa5, 0x9f, 0x48, 0x48,
8010 + 0x48, 0x48, 0x48, 0x9b, 0x52, 0x3f, 0x21, 0x30,
8011 + 0x35, 0x25, 0x30, 0x36, 0x36, 0x36, 0x36, 0x32,
8012 + 0x2d, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
8013 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8014 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8015 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8016 + 0x20, 0x20, 0x22, 0x26, 0x2e, 0x35, 0x36, 0x2a,
8017 + 0x36, 0x24, 0x4f, 0x48, 0x52, 0x52, 0x48, 0x48,
8018 + 0xab, 0xac, 0xa0, 0x48, 0xad, 0xa6, 0xa6, 0x9f,
8019 + 0x48, 0xa2, 0xa9, 0xa6, 0xa2, 0x48, 0x48, 0x48,
8020 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x32, 0x30,
8021 + 0x2a, 0x23, 0x30, 0x23, 0x36, 0x36, 0x36, 0x21,
8022 + 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
8023 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8024 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8025 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8026 + 0x20, 0x21, 0x23, 0x2a, 0x51, 0x28, 0x28, 0x25,
8027 + 0x36, 0x3a, 0x48, 0x48, 0xae, 0xaf, 0x48, 0x48,
8028 + 0xad, 0xac, 0xa1, 0x9f, 0xa2, 0xa9, 0xa9, 0xa2,
8029 + 0x48, 0xab, 0x78, 0xa7, 0x48, 0x48, 0x48, 0x48,
8030 + 0x9f, 0x48, 0x48, 0x48, 0x48, 0x48, 0x38, 0x21,
8031 + 0x36, 0x36, 0x22, 0x27, 0x36, 0x36, 0x36, 0x36,
8032 + 0x2e, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
8033 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8034 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8035 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8036 + 0x20, 0x22, 0x25, 0x2c, 0x34, 0x36, 0x30, 0x21,
8037 + 0x23, 0x43, 0x48, 0x48, 0xb0, 0xb1, 0xb2, 0x9f,
8038 + 0x48, 0xb3, 0xa5, 0xb3, 0xab, 0xa9, 0xa9, 0xb3,
8039 + 0xb4, 0xa9, 0xb5, 0xb0, 0x48, 0x48, 0xa0, 0xa5,
8040 + 0xa1, 0xad, 0x48, 0x48, 0x48, 0x48, 0x94, 0x36,
8041 + 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
8042 + 0x2a, 0x2e, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20,
8043 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8044 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8045 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8046 + 0x21, 0x23, 0x2a, 0x51, 0x25, 0x21, 0x2a, 0x36,
8047 + 0x2e, 0x9b, 0x48, 0x48, 0x48, 0xb6, 0xb7, 0xa4,
8048 + 0xa2, 0xa7, 0xb5, 0x78, 0x6f, 0x6f, 0x6e, 0x6f,
8049 + 0xa9, 0xb5, 0xab, 0x48, 0x9f, 0xab, 0xa9, 0xa1,
8050 + 0xaa, 0x48, 0x48, 0x48, 0x48, 0x48, 0x98, 0x36,
8051 + 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
8052 + 0x22, 0x2f, 0x30, 0x22, 0x20, 0x20, 0x20, 0x20,
8053 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8054 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8055 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8056 + 0x22, 0x25, 0x2c, 0x34, 0x36, 0x24, 0x28, 0x36,
8057 + 0x54, 0x48, 0x48, 0x48, 0x48, 0xa2, 0xa8, 0xa1,
8058 + 0xa5, 0xa6, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f,
8059 + 0x6f, 0x78, 0xa5, 0xa0, 0xa0, 0x78, 0xa6, 0xa2,
8060 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
8061 + 0x36, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x36,
8062 + 0x21, 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20,
8063 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8064 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8065 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
8066 + 0x28, 0x32, 0x2f, 0x28, 0x36, 0x27, 0x22, 0x21,
8067 + 0x43, 0x48, 0x4b, 0xa2, 0x9f, 0x48, 0xa2, 0xa1,
8068 + 0xb8, 0x6e, 0x6e, 0xb5, 0x78, 0x6f, 0x78, 0x78,
8069 + 0x6e, 0x6f, 0x78, 0xb5, 0xa6, 0xa1, 0xa0, 0x48,
8070 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4b, 0x21,
8071 + 0x36, 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36,
8072 + 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
8073 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8074 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8075 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
8076 + 0x25, 0x2c, 0x39, 0x36, 0x36, 0x30, 0x22, 0x25,
8077 + 0x52, 0x48, 0xa3, 0xb1, 0xb6, 0xb3, 0xaa, 0xac,
8078 + 0x68, 0x68, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f,
8079 + 0x78, 0x6f, 0x6f, 0xb5, 0xa6, 0xb4, 0x48, 0x9f,
8080 + 0xb4, 0xb4, 0xa2, 0x9f, 0x48, 0x48, 0x4f, 0x21,
8081 + 0x36, 0x36, 0x22, 0x26, 0x36, 0x36, 0x36, 0x36,
8082 + 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
8083 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8084 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8085 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
8086 + 0x30, 0x2d, 0x21, 0x36, 0x36, 0x32, 0x23, 0x2a,
8087 + 0x47, 0x48, 0xa2, 0xb6, 0xaf, 0xb9, 0xba, 0x68,
8088 + 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x78,
8089 + 0x6f, 0x6f, 0xa6, 0x6f, 0xb5, 0xa0, 0xaa, 0xa6,
8090 + 0xa6, 0xa9, 0xb2, 0xb3, 0x48, 0x48, 0x4c, 0x22,
8091 + 0x36, 0x36, 0x24, 0x23, 0x36, 0x36, 0x36, 0x36,
8092 + 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
8093 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8094 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8095 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
8096 + 0x33, 0x2e, 0x36, 0x36, 0x23, 0x31, 0x27, 0x39,
8097 + 0x9b, 0x48, 0x48, 0x48, 0xb0, 0xb0, 0xba, 0xb8,
8098 + 0x68, 0x68, 0x69, 0x78, 0x6f, 0xb5, 0x6f, 0xb5,
8099 + 0x78, 0x78, 0x78, 0x78, 0x78, 0xa5, 0xbb, 0xa9,
8100 + 0xa5, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x23,
8101 + 0x36, 0x36, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
8102 + 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
8103 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8104 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8105 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
8106 + 0x2b, 0x39, 0x36, 0x36, 0x36, 0x26, 0x32, 0x31,
8107 + 0x9b, 0x48, 0x48, 0x48, 0x48, 0x9f, 0xac, 0x68,
8108 + 0xbc, 0x6e, 0x6e, 0x6e, 0xb5, 0x6f, 0x6e, 0x6f,
8109 + 0x6f, 0x78, 0x78, 0xb5, 0xb5, 0xa5, 0x9f, 0x9f,
8110 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x46, 0x22,
8111 + 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
8112 + 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
8113 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8114 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8115 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
8116 + 0x35, 0x39, 0x36, 0x36, 0x36, 0x36, 0x26, 0x2d,
8117 + 0x9b, 0x48, 0x48, 0xb0, 0xaa, 0xb3, 0xbd, 0xb8,
8118 + 0xb8, 0x68, 0x6e, 0x6e, 0xb5, 0x6f, 0x78, 0x6e,
8119 + 0x78, 0x6f, 0x78, 0x78, 0xb5, 0xa9, 0xa2, 0x48,
8120 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
8121 + 0x24, 0x27, 0xbe, 0x24, 0x25, 0x28, 0x21, 0x36,
8122 + 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
8123 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8124 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8125 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x25,
8126 + 0x39, 0x4d, 0xbf, 0x84, 0x81, 0x57, 0x21, 0x39,
8127 + 0x52, 0x48, 0x48, 0x62, 0xb1, 0xc0, 0xc1, 0xc1,
8128 + 0xb8, 0xb8, 0x68, 0xbc, 0x6e, 0x6e, 0x6e, 0x78,
8129 + 0x78, 0x78, 0x78, 0x6e, 0x78, 0xa9, 0xa0, 0xab,
8130 + 0xb3, 0xa2, 0x48, 0x48, 0x48, 0x48, 0x53, 0x28,
8131 + 0x23, 0x36, 0x36, 0x36, 0x21, 0x28, 0x2c, 0x30,
8132 + 0x21, 0x38, 0x33, 0x28, 0x21, 0x20, 0x20, 0x20,
8133 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8134 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8135 + 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x28, 0x30,
8136 + 0x2d, 0xc2, 0x7a, 0xc3, 0xc4, 0xc4, 0x7f, 0x22,
8137 + 0x51, 0x52, 0x48, 0x48, 0xb0, 0xaa, 0xa8, 0xbd,
8138 + 0x68, 0xb8, 0xb8, 0x68, 0x68, 0x6e, 0x6e, 0x6f,
8139 + 0x6e, 0x6e, 0xb5, 0x6e, 0x78, 0xab, 0xab, 0xb5,
8140 + 0x78, 0xa6, 0xb3, 0xc5, 0xac, 0xac, 0xc6, 0x61,
8141 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x30, 0x32,
8142 + 0x25, 0x4d, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
8143 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8144 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8145 + 0x20, 0x21, 0x23, 0x24, 0x26, 0x30, 0x33, 0x31,
8146 + 0x4d, 0x91, 0x5b, 0xc3, 0xc4, 0xc4, 0xc4, 0x5a,
8147 + 0x21, 0x2e, 0x46, 0x48, 0x48, 0x48, 0xb0, 0x64,
8148 + 0xc1, 0xb8, 0xb8, 0xb8, 0x68, 0x71, 0x6e, 0x6e,
8149 + 0x6f, 0x71, 0x6f, 0x6f, 0xa6, 0xa0, 0x9f, 0xb4,
8150 + 0xb4, 0xa0, 0xa1, 0xb7, 0xc7, 0x69, 0x66, 0xc8,
8151 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x26, 0x25,
8152 + 0x83, 0xc9, 0x2c, 0x25, 0x21, 0x20, 0x20, 0x20,
8153 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8154 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8155 + 0x21, 0x28, 0x30, 0x35, 0x2d, 0x2f, 0x37, 0x4a,
8156 + 0x60, 0x85, 0xca, 0xcb, 0xc4, 0xc4, 0xc4, 0x82,
8157 + 0x86, 0x36, 0x32, 0x3f, 0xa2, 0xa4, 0xa8, 0xa9,
8158 + 0xb8, 0xb8, 0xb8, 0xb8, 0x68, 0x6e, 0x6e, 0x6e,
8159 + 0x6e, 0x71, 0x6f, 0x71, 0xa6, 0xb4, 0x9f, 0x9f,
8160 + 0x48, 0x48, 0x48, 0xcc, 0xc3, 0xc7, 0xcd, 0xce,
8161 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x57,
8162 + 0x77, 0x66, 0x34, 0x27, 0x22, 0x20, 0x20, 0x20,
8163 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8164 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8165 + 0x23, 0x30, 0x31, 0xcf, 0x91, 0x7e, 0x90, 0x90,
8166 + 0x8b, 0x5b, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8167 + 0x5d, 0xd0, 0x36, 0x24, 0xd1, 0xb1, 0xaf, 0xaa,
8168 + 0xba, 0xb8, 0x68, 0x68, 0x68, 0x71, 0x6e, 0x6e,
8169 + 0x6e, 0x6f, 0x6e, 0x78, 0xa1, 0xa9, 0xa1, 0xb0,
8170 + 0x9f, 0x9b, 0x99, 0xcc, 0x64, 0x5c, 0x8b, 0xd0,
8171 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x73, 0x5d,
8172 + 0x82, 0x5c, 0xd2, 0x2a, 0x23, 0x20, 0x20, 0x20,
8173 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8174 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
8175 + 0x24, 0x2b, 0xcf, 0x8b, 0x5b, 0x76, 0x5b, 0x5b,
8176 + 0x7b, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8177 + 0xc7, 0x5e, 0x22, 0x36, 0x21, 0x3a, 0x99, 0x48,
8178 + 0xa2, 0xa8, 0xb7, 0xc1, 0xb8, 0x68, 0x68, 0xbc,
8179 + 0x68, 0x6e, 0xb5, 0xb4, 0xb4, 0xab, 0xb5, 0xa1,
8180 + 0xb0, 0x4f, 0x3f, 0xd3, 0x7b, 0x7b, 0x85, 0x80,
8181 + 0xbe, 0x36, 0x36, 0x36, 0x21, 0xd4, 0x7e, 0x7b,
8182 + 0x64, 0x64, 0xd5, 0x35, 0x24, 0x21, 0x20, 0x20,
8183 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8184 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
8185 + 0x26, 0x31, 0xd6, 0x5b, 0x64, 0xc3, 0xc3, 0xcb,
8186 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8187 + 0xc4, 0x66, 0xd7, 0x36, 0x36, 0x36, 0x2c, 0x4b,
8188 + 0xd8, 0xd9, 0xb3, 0xa8, 0xbd, 0xbd, 0xbd, 0xbd,
8189 + 0xa9, 0xab, 0xb3, 0xa5, 0xa2, 0x9f, 0xa2, 0xa1,
8190 + 0x6a, 0x9a, 0x3f, 0xda, 0x76, 0x76, 0x7a, 0x63,
8191 + 0xdb, 0xdc, 0x86, 0xdc, 0xdd, 0x90, 0x5b, 0x64,
8192 + 0xc3, 0xc3, 0xde, 0x2d, 0x27, 0x23, 0x21, 0x20,
8193 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8194 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
8195 + 0x26, 0x2d, 0x91, 0x5b, 0x64, 0xc4, 0xc4, 0xc4,
8196 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8197 + 0xc4, 0xc7, 0x83, 0xce, 0x36, 0x36, 0x36, 0x30,
8198 + 0xb1, 0xd9, 0x48, 0xa1, 0xb2, 0xb0, 0xb0, 0xb3,
8199 + 0xa2, 0x48, 0xa7, 0xbd, 0xa9, 0xa2, 0x48, 0x9f,
8200 + 0xaa, 0x9a, 0x3f, 0xb1, 0x5b, 0x7b, 0xdf, 0x85,
8201 + 0x7e, 0x90, 0x63, 0x90, 0x85, 0x5b, 0xc3, 0xc4,
8202 + 0xc4, 0xcb, 0x5d, 0xd5, 0x39, 0x26, 0x23, 0x21,
8203 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8204 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
8205 + 0x26, 0x2d, 0xe0, 0xdf, 0x64, 0xc4, 0xc4, 0xc4,
8206 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8207 + 0xc4, 0xc4, 0xc7, 0x88, 0x36, 0x36, 0x36, 0x36,
8208 + 0x2d, 0x9b, 0x48, 0xb9, 0xaf, 0xa2, 0xa2, 0xb9,
8209 + 0xa8, 0x9f, 0x48, 0xa7, 0xb7, 0xd9, 0x48, 0x48,
8210 + 0x9b, 0x45, 0x3f, 0xe1, 0x6d, 0x7b, 0xca, 0xdf,
8211 + 0x7a, 0x8b, 0x8b, 0x7a, 0x5b, 0x64, 0xc4, 0xc4,
8212 + 0xc4, 0xc4, 0xc3, 0xe2, 0x37, 0x35, 0x26, 0x23,
8213 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8214 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
8215 + 0x26, 0x2e, 0xe0, 0x7a, 0x7b, 0xc4, 0xc4, 0xc4,
8216 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8217 + 0xc4, 0xc4, 0xc7, 0x72, 0x73, 0x36, 0x36, 0x36,
8218 + 0x24, 0x52, 0x48, 0xa3, 0xaf, 0x9f, 0x48, 0xb6,
8219 + 0xaf, 0xa2, 0x48, 0x9f, 0xe3, 0xd8, 0x48, 0x48,
8220 + 0x48, 0x46, 0x42, 0xd6, 0x7a, 0x7b, 0x64, 0x7b,
8221 + 0x76, 0x5b, 0x5b, 0x76, 0x7b, 0xc3, 0xc4, 0xc4,
8222 + 0xc4, 0xc4, 0xcb, 0x64, 0xe2, 0x4d, 0x2c, 0x27,
8223 + 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8224 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
8225 + 0x25, 0x31, 0xe4, 0x8b, 0x7b, 0xc4, 0xc4, 0xc4,
8226 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8227 + 0xc4, 0xc4, 0xc4, 0xc7, 0x89, 0xbe, 0x36, 0x36,
8228 + 0x32, 0x47, 0x48, 0x4f, 0xa0, 0x48, 0x48, 0xe3,
8229 + 0x92, 0x9f, 0x48, 0x9f, 0x48, 0x48, 0x48, 0x48,
8230 + 0x48, 0x4b, 0x2f, 0x8f, 0x7a, 0x7b, 0xc3, 0xcb,
8231 + 0xc3, 0x64, 0x64, 0xc3, 0xc3, 0xcb, 0xc4, 0xc4,
8232 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x5d, 0xe5, 0x2c,
8233 + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8234 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
8235 + 0x25, 0x31, 0xe4, 0x85, 0x7b, 0xc4, 0xc4, 0xc4,
8236 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8237 + 0xc4, 0xc4, 0xc4, 0xc4, 0x66, 0x57, 0x27, 0x4d,
8238 + 0x4b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
8239 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
8240 + 0x99, 0x34, 0xbe, 0xdb, 0x7a, 0x7b, 0xc3, 0xc4,
8241 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8242 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xe4,
8243 + 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
8244 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
8245 + 0x26, 0x2d, 0xe4, 0x85, 0x7b, 0xcb, 0xc4, 0xc4,
8246 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8247 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc7, 0x5f, 0x92, 0x48,
8248 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
8249 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x44,
8250 + 0x35, 0x36, 0xce, 0xdd, 0x7a, 0x7b, 0xcb, 0xc4,
8251 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8252 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0xc3, 0xe1,
8253 + 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
8254 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
8255 + 0x30, 0x2f, 0xd6, 0x8b, 0x7b, 0xcb, 0xc4, 0xc4,
8256 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8257 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x66, 0x89, 0x45,
8258 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
8259 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x4e, 0x25,
8260 + 0x36, 0x36, 0x61, 0xdb, 0x6d, 0x64, 0xcb, 0xc4,
8261 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8262 + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x7b, 0xdf, 0xe5,
8263 + 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
8264 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
8265 + 0x33, 0xe6, 0x63, 0xdf, 0xc3, 0xc4, 0xc4, 0xc4,
8266 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8267 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x72, 0x81, 0xe7,
8268 + 0x46, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
8269 + 0x48, 0x48, 0x48, 0x48, 0x3f, 0x2c, 0x36, 0x36,
8270 + 0x36, 0x36, 0xe8, 0x8f, 0x6d, 0x64, 0xcb, 0xc4,
8271 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8272 + 0xc4, 0xc4, 0xc4, 0xc3, 0xca, 0x8b, 0xcf, 0x2c,
8273 + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8274 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
8275 + 0x35, 0x96, 0x75, 0xca, 0xc3, 0xcb, 0xc4, 0xc4,
8276 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8277 + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x7b, 0x81, 0xdb,
8278 + 0x73, 0x3b, 0x44, 0x9b, 0x48, 0x48, 0x48, 0x9b,
8279 + 0x99, 0x43, 0x94, 0x2c, 0x21, 0x36, 0x36, 0x36,
8280 + 0x36, 0x36, 0x73, 0xdb, 0x7a, 0x7b, 0xc4, 0xc4,
8281 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8282 + 0xc4, 0x64, 0x76, 0x7a, 0x91, 0xd5, 0x31, 0x30,
8283 + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8284 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
8285 + 0x39, 0x97, 0x75, 0xdf, 0x7b, 0x64, 0xc3, 0xc3,
8286 + 0xcb, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
8287 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x7b, 0x7a, 0xe9,
8288 + 0xea, 0x36, 0x21, 0x26, 0x2b, 0x39, 0x33, 0x30,
8289 + 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8290 + 0x36, 0x21, 0xea, 0xdd, 0x8b, 0x7b, 0xc4, 0xc4,
8291 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x64, 0x64,
8292 + 0x76, 0x85, 0xe0, 0xd5, 0x34, 0x2b, 0x27, 0x28,
8293 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8294 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
8295 + 0x33, 0xeb, 0x63, 0x7e, 0x7a, 0x6d, 0xdf, 0x5b,
8296 + 0x76, 0x7b, 0x64, 0x64, 0xc3, 0xcb, 0xc4, 0xc4,
8297 + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x76, 0x85, 0xdb,
8298 + 0x79, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8299 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8300 + 0x36, 0x21, 0xec, 0xdd, 0x75, 0x76, 0xc3, 0xc4,
8301 + 0xc4, 0xc4, 0xcb, 0xc3, 0x64, 0x76, 0xdf, 0x8b,
8302 + 0xd6, 0xd5, 0x2f, 0x35, 0x30, 0x24, 0x22, 0x21,
8303 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8304 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
8305 + 0x27, 0x31, 0xed, 0xeb, 0xdd, 0x74, 0x63, 0x90,
8306 + 0x7e, 0x75, 0x8b, 0x6d, 0xdf, 0x76, 0x64, 0xc3,
8307 + 0xcb, 0xcb, 0xcb, 0xcb, 0x64, 0x7a, 0x84, 0xee,
8308 + 0x79, 0xbe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8309 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8310 + 0x36, 0x21, 0xea, 0xee, 0x63, 0x6d, 0x7b, 0x64,
8311 + 0xcb, 0xc3, 0x64, 0x7b, 0xdf, 0x75, 0x63, 0x96,
8312 + 0x38, 0x39, 0x2a, 0x24, 0x23, 0x21, 0x20, 0x20,
8313 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8314 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
8315 + 0x28, 0x27, 0x35, 0x2d, 0x41, 0xd5, 0xe7, 0x8f,
8316 + 0xdb, 0xdd, 0xe9, 0x74, 0x84, 0x90, 0x85, 0x6d,
8317 + 0x5b, 0x7b, 0x7b, 0xca, 0x6d, 0x90, 0xdb, 0xef,
8318 + 0xec, 0x22, 0x36, 0x36, 0x28, 0x30, 0x30, 0x30,
8319 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x25, 0x36,
8320 + 0x36, 0x21, 0xd4, 0x80, 0xe9, 0x7e, 0x6d, 0x76,
8321 + 0xca, 0x76, 0x6d, 0x85, 0x63, 0xdb, 0xd5, 0x34,
8322 + 0x33, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20,
8323 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8324 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8325 + 0x21, 0x23, 0x24, 0x27, 0x2a, 0x35, 0x2e, 0x2f,
8326 + 0x41, 0xf0, 0xf1, 0x6c, 0x80, 0xee, 0xdb, 0x74,
8327 + 0x84, 0x90, 0x75, 0x7e, 0x74, 0x8f, 0xef, 0x79,
8328 + 0xe8, 0x2b, 0x9d, 0x41, 0x2f, 0x34, 0x2d, 0x2d,
8329 + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x34, 0x2f, 0x38,
8330 + 0x4d, 0x37, 0xf2, 0xf3, 0x8f, 0x74, 0x63, 0x7e,
8331 + 0x75, 0x7e, 0x63, 0xe9, 0x88, 0xe6, 0x31, 0x2a,
8332 + 0x24, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8333 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8334 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8335 + 0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26, 0x30,
8336 + 0x33, 0x39, 0x2e, 0x51, 0x41, 0xd2, 0x6c, 0xf3,
8337 + 0x80, 0xee, 0xee, 0xee, 0xf4, 0xf3, 0xd7, 0xf5,
8338 + 0x41, 0x34, 0x35, 0x32, 0x30, 0x27, 0x27, 0x27,
8339 + 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x2a,
8340 + 0x2b, 0x34, 0xf6, 0xec, 0xf7, 0x8f, 0xdd, 0xe9,
8341 + 0xe9, 0xdd, 0xee, 0x6c, 0x41, 0x39, 0x27, 0x28,
8342 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8343 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8344 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8345 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22,
8346 + 0x28, 0x24, 0x26, 0x2a, 0x33, 0x2c, 0x2f, 0x41,
8347 + 0xf8, 0xd7, 0x79, 0x79, 0x79, 0xec, 0xf9, 0x51,
8348 + 0x39, 0x30, 0x24, 0x23, 0x22, 0x22, 0x22, 0x22,
8349 + 0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x23,
8350 + 0x24, 0x2a, 0x31, 0xfa, 0xea, 0x79, 0xf3, 0x80,
8351 + 0xf7, 0xdc, 0xfb, 0x2f, 0x35, 0x26, 0x23, 0x21,
8352 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8353 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8354 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8355 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8356 + 0x20, 0x21, 0x22, 0x23, 0x28, 0x25, 0x30, 0x2b,
8357 + 0x31, 0x2f, 0xf6, 0xfa, 0xfa, 0x2f, 0x2e, 0x33,
8358 + 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
8359 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8360 + 0x21, 0x28, 0x27, 0x35, 0x34, 0xfa, 0xfa, 0xfa,
8361 + 0xfc, 0xf6, 0x2e, 0x33, 0x25, 0x23, 0x21, 0x20,
8362 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8363 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8364 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8365 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8366 + 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x23, 0x28,
8367 + 0x26, 0x30, 0x32, 0x2b, 0x33, 0x2a, 0x26, 0x28,
8368 + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8369 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8370 + 0x20, 0x21, 0x23, 0x25, 0x30, 0x33, 0x35, 0x35,
8371 + 0x2b, 0x2a, 0x26, 0x28, 0x22, 0x20, 0x20, 0x20,
8372 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8373 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8374 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8375 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8376 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
8377 + 0x21, 0x22, 0x23, 0x28, 0x28, 0x23, 0x22, 0x21,
8378 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8379 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8380 + 0x20, 0x20, 0x20, 0x21, 0x23, 0x28, 0x24, 0x24,
8381 + 0x28, 0x23, 0x22, 0x21, 0x20, 0x20, 0x20, 0x20,
8382 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8383 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
8386 +unsigned char linux_logo16[1];
8388 +#endif /* INCLUDE_LINUX_LOGO_DATA */
8390 +#include <linux/linux_logo.h>
8392 --- linux/include/asm-nios2nommu/local.h
8393 +++ linux/include/asm-nios2nommu/local.h
8396 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8398 + * All rights reserved.
8400 + * This program is free software; you can redistribute it and/or modify
8401 + * it under the terms of the GNU General Public License as published by
8402 + * the Free Software Foundation; either version 2 of the License, or
8403 + * (at your option) any later version.
8405 + * This program is distributed in the hope that it will be useful, but
8406 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8407 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8408 + * NON INFRINGEMENT. See the GNU General Public License for more
8411 + * You should have received a copy of the GNU General Public License
8412 + * along with this program; if not, write to the Free Software
8413 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8417 +#ifndef __NIOS2NOMMU_LOCAL_H
8418 +#define __NIOS2NOMMU_LOCAL_H
8420 +#include <asm-generic/local.h>
8422 +#endif /* __NIOS2NOMMU_LOCAL_H */
8423 --- linux/include/asm-nios2nommu/mc146818rtc.h
8424 +++ linux/include/asm-nios2nommu/mc146818rtc.h
8427 + * Machine dependent access functions for RTC registers.
8429 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8431 + * All rights reserved.
8433 + * This program is free software; you can redistribute it and/or modify
8434 + * it under the terms of the GNU General Public License as published by
8435 + * the Free Software Foundation; either version 2 of the License, or
8436 + * (at your option) any later version.
8438 + * This program is distributed in the hope that it will be useful, but
8439 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8440 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8441 + * NON INFRINGEMENT. See the GNU General Public License for more
8444 + * You should have received a copy of the GNU General Public License
8445 + * along with this program; if not, write to the Free Software
8446 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8449 +#ifndef _NIOS2_MC146818RTC_H
8450 +#define _NIOS2_MC146818RTC_H
8452 +/* empty include file to satisfy the include in genrtc.c/ide-geometry.c */
8454 +#endif /* _NIOS2_MC146818RTC_H */
8455 --- linux/include/asm-nios2nommu/mman.h
8456 +++ linux/include/asm-nios2nommu/mman.h
8459 + * Copied from the m68k port.
8461 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8463 + * All rights reserved.
8465 + * This program is free software; you can redistribute it and/or modify
8466 + * it under the terms of the GNU General Public License as published by
8467 + * the Free Software Foundation; either version 2 of the License, or
8468 + * (at your option) any later version.
8470 + * This program is distributed in the hope that it will be useful, but
8471 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8472 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8473 + * NON INFRINGEMENT. See the GNU General Public License for more
8476 + * You should have received a copy of the GNU General Public License
8477 + * along with this program; if not, write to the Free Software
8478 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8482 +#ifndef __NIOS2_MMAN_H__
8483 +#define __NIOS2_MMAN_H__
8485 +#define PROT_READ 0x1 /* page can be read */
8486 +#define PROT_WRITE 0x2 /* page can be written */
8487 +#define PROT_EXEC 0x4 /* page can be executed */
8488 +#define PROT_SEM 0x8 /* page may be used for atomic ops */
8489 +#define PROT_NONE 0x0 /* page can not be accessed */
8490 +#define PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */
8491 +#define PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */
8493 +#define MAP_SHARED 0x01 /* Share changes */
8494 +#define MAP_PRIVATE 0x02 /* Changes are private */
8495 +#define MAP_TYPE 0x0f /* Mask for type of mapping */
8496 +#define MAP_FIXED 0x10 /* Interpret addr exactly */
8497 +#define MAP_ANONYMOUS 0x20 /* don't use a file */
8499 +#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
8500 +#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
8501 +#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
8502 +#define MAP_LOCKED 0x2000 /* pages are locked */
8503 +#define MAP_NORESERVE 0x4000 /* don't check for reservations */
8504 +#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */
8505 +#define MAP_NONBLOCK 0x10000 /* do not block on IO */
8507 +#define MS_ASYNC 1 /* sync memory asynchronously */
8508 +#define MS_INVALIDATE 2 /* invalidate the caches */
8509 +#define MS_SYNC 4 /* synchronous memory sync */
8511 +#define MCL_CURRENT 1 /* lock all current mappings */
8512 +#define MCL_FUTURE 2 /* lock all future mappings */
8514 +#define MADV_NORMAL 0x0 /* default page-in behavior */
8515 +#define MADV_RANDOM 0x1 /* page-in minimum required */
8516 +#define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */
8517 +#define MADV_WILLNEED 0x3 /* pre-fault pages */
8518 +#define MADV_DONTNEED 0x4 /* discard these pages */
8520 +/* compatibility flags */
8521 +#define MAP_ANON MAP_ANONYMOUS
8524 +#endif /* __NIOS2_MMAN_H__ */
8526 --- linux/include/asm-nios2nommu/mmu_context.h
8527 +++ linux/include/asm-nios2nommu/mmu_context.h
8531 + * Taken from the m68knommu.
8533 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8535 + * All rights reserved.
8537 + * This program is free software; you can redistribute it and/or modify
8538 + * it under the terms of the GNU General Public License as published by
8539 + * the Free Software Foundation; either version 2 of the License, or
8540 + * (at your option) any later version.
8542 + * This program is distributed in the hope that it will be useful, but
8543 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8544 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8545 + * NON INFRINGEMENT. See the GNU General Public License for more
8548 + * You should have received a copy of the GNU General Public License
8549 + * along with this program; if not, write to the Free Software
8550 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8554 +#ifndef __NIOS2NOMMU_MMU_CONTEXT_H
8555 +#define __NIOS2NOMMU_MMU_CONTEXT_H
8557 +#include <linux/config.h>
8558 +#include <asm/setup.h>
8559 +#include <asm/page.h>
8560 +#include <asm/pgalloc.h>
8562 +static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
8567 +init_new_context(struct task_struct *tsk, struct mm_struct *mm)
8569 + // mm->context = virt_to_phys(mm->pgd);
8573 +#define destroy_context(mm) do { } while(0)
8575 +static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk)
8579 +#define deactivate_mm(tsk,mm) do { } while (0)
8581 +extern inline void activate_mm(struct mm_struct *prev_mm,
8582 + struct mm_struct *next_mm)
8587 --- linux/include/asm-nios2nommu/mmu.h
8588 +++ linux/include/asm-nios2nommu/mmu.h
8592 + * Taken from the m68knommu.
8594 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8596 + * All rights reserved.
8598 + * This program is free software; you can redistribute it and/or modify
8599 + * it under the terms of the GNU General Public License as published by
8600 + * the Free Software Foundation; either version 2 of the License, or
8601 + * (at your option) any later version.
8603 + * This program is distributed in the hope that it will be useful, but
8604 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8605 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8606 + * NON INFRINGEMENT. See the GNU General Public License for more
8609 + * You should have received a copy of the GNU General Public License
8610 + * along with this program; if not, write to the Free Software
8611 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8615 +#ifndef __NIOS2NOMMU_MMU_H
8616 +#define __NIOS2NOMMU_MMU_H
8618 +/* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
8621 + struct vm_list_struct *vmlist;
8622 + unsigned long end_brk;
8625 +#endif /* __NIOS2NOMMU_MMU_H */
8626 --- linux/include/asm-nios2nommu/module.h
8627 +++ linux/include/asm-nios2nommu/module.h
8629 +#ifndef _NIOS2_MODULE_H
8630 +#define _NIOS2_MODULE_H
8632 +/*--------------------------------------------------------------------
8634 + * include/asm-nios2nommu/module.h
8636 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8638 + * Copyright (C) 2004 Microtronix Datacom Ltd
8640 + * This program is free software; you can redistribute it and/or modify
8641 + * it under the terms of the GNU General Public License as published by
8642 + * the Free Software Foundation; either version 2 of the License, or
8643 + * (at your option) any later version.
8645 + * This program is distributed in the hope that it will be useful,
8646 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8647 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8648 + * GNU General Public License for more details.
8651 + * Jan/20/2004 dgt NiosII
8653 + ---------------------------------------------------------------------*/
8656 +struct mod_arch_specific
8660 +#define Elf_Shdr Elf32_Shdr
8661 +#define Elf_Sym Elf32_Sym
8662 +#define Elf_Ehdr Elf32_Ehdr
8664 +#endif /* _NIOS_MODULE_H */
8665 --- linux/include/asm-nios2nommu/msgbuf.h
8666 +++ linux/include/asm-nios2nommu/msgbuf.h
8669 + * Taken from the m68k.
8671 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8673 + * All rights reserved.
8675 + * This program is free software; you can redistribute it and/or modify
8676 + * it under the terms of the GNU General Public License as published by
8677 + * the Free Software Foundation; either version 2 of the License, or
8678 + * (at your option) any later version.
8680 + * This program is distributed in the hope that it will be useful, but
8681 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8682 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8683 + * NON INFRINGEMENT. See the GNU General Public License for more
8686 + * You should have received a copy of the GNU General Public License
8687 + * along with this program; if not, write to the Free Software
8688 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8692 +#ifndef _NIOS2_MSGBUF_H
8693 +#define _NIOS2_MSGBUF_H
8696 + * The msqid64_ds structure for nios2 architecture.
8697 + * Note extra padding because this structure is passed back and forth
8698 + * between kernel and user space.
8700 + * Pad space is left for:
8701 + * - 64-bit time_t to solve y2038 problem
8702 + * - 2 miscellaneous 32-bit values
8705 +struct msqid64_ds {
8706 + struct ipc64_perm msg_perm;
8707 + __kernel_time_t msg_stime; /* last msgsnd time */
8708 + unsigned long __unused1;
8709 + __kernel_time_t msg_rtime; /* last msgrcv time */
8710 + unsigned long __unused2;
8711 + __kernel_time_t msg_ctime; /* last change time */
8712 + unsigned long __unused3;
8713 + unsigned long msg_cbytes; /* current number of bytes on queue */
8714 + unsigned long msg_qnum; /* number of messages in queue */
8715 + unsigned long msg_qbytes; /* max number of bytes on queue */
8716 + __kernel_pid_t msg_lspid; /* pid of last msgsnd */
8717 + __kernel_pid_t msg_lrpid; /* last receive pid */
8718 + unsigned long __unused4;
8719 + unsigned long __unused5;
8722 +#endif /* _NIOS2_MSGBUF_H */
8724 --- linux/include/asm-nios2nommu/namei.h
8725 +++ linux/include/asm-nios2nommu/namei.h
8728 + * linux/include/asm-nios/namei.h
8729 + * Moved from m68k version
8730 + * Included from linux/fs/namei.c
8732 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8733 + * All rights reserved.
8735 + * This program is free software; you can redistribute it and/or modify
8736 + * it under the terms of the GNU General Public License as published by
8737 + * the Free Software Foundation; either version 2 of the License, or
8738 + * (at your option) any later version.
8740 + * This program is distributed in the hope that it will be useful, but
8741 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8742 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8743 + * NON INFRINGEMENT. See the GNU General Public License for more
8746 + * You should have received a copy of the GNU General Public License
8747 + * along with this program; if not, write to the Free Software
8748 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8752 +#ifndef __NIOS2_NAMEI_H
8753 +#define __NIOS2_NAMEI_H
8755 +/* This dummy routine maybe changed to something useful
8756 + * for /usr/gnemul/ emulation stuff.
8757 + * Look at asm-sparc/namei.h for details.
8760 +#define __emul_prefix() NULL
8763 --- linux/include/asm-nios2nommu/ndma.h
8764 +++ linux/include/asm-nios2nommu/ndma.h
8767 + #define __NDMA_H__
8769 + #ifndef __ASSEMBLY__
8772 +typedef volatile struct
8774 + int np_dmastatus; // status register
8775 + int np_dmareadaddress; // read address
8776 + int np_dmawriteaddress; // write address
8777 + int np_dmalength; // length in bytes
8778 + int np_dmareserved1; // reserved
8779 + int np_dmareserved2; // reserved
8780 + int np_dmacontrol; // control register
8781 + int np_dmareserved3; // control register alternate
8784 +// DMA Register Bits
8787 + np_dmacontrol_byte_bit = 0, // Byte transaction
8788 + np_dmacontrol_hw_bit = 1, // Half-word transaction
8789 + np_dmacontrol_word_bit = 2, // Word transaction
8790 + np_dmacontrol_go_bit = 3, // enable execution
8791 + np_dmacontrol_i_en_bit = 4, // enable interrupt
8792 + np_dmacontrol_reen_bit = 5, // Enable read end-of-packet
8793 + np_dmacontrol_ween_bit = 6, // Enable write end-of-packet
8794 + np_dmacontrol_leen_bit = 7, // Enable length=0 transaction end
8795 + np_dmacontrol_rcon_bit = 8, // Read from a fixed address
8796 + np_dmacontrol_wcon_bit = 9, // Write to a fixed address
8797 + np_dmacontrol_doubleword_bit = 10, // Double-word transaction
8798 + np_dmacontrol_quadword_bit = 11, // Quad-word transaction
8800 + np_dmastatus_done_bit = 0, // 1 when done. Status write clears.
8801 + np_dmastatus_busy_bit = 1, // 1 when busy.
8802 + np_dmastatus_reop_bit = 2, // read-eop received
8803 + np_dmastatus_weop_bit = 3, // write-eop received
8804 + np_dmastatus_len_bit = 4, // requested length transacted
8806 + np_dmacontrol_byte_mask = (1 << 0), // Byte transaction
8807 + np_dmacontrol_hw_mask = (1 << 1), // Half-word transaction
8808 + np_dmacontrol_word_mask = (1 << 2), // Word transaction
8809 + np_dmacontrol_go_mask = (1 << 3), // enable execution
8810 + np_dmacontrol_i_en_mask = (1 << 4), // enable interrupt
8811 + np_dmacontrol_reen_mask = (1 << 5), // Enable read end-of-packet
8812 + np_dmacontrol_ween_mask = (1 << 6), // Enable write end-of-packet
8813 + np_dmacontrol_leen_mask = (1 << 7), // Enable length=0 transaction end
8814 + np_dmacontrol_rcon_mask = (1 << 8), // Read from a fixed address
8815 + np_dmacontrol_wcon_mask = (1 << 9), // Write to a fixed address
8816 + np_dmacontrol_doubleword_mask = (1 << 10), // Double-word transaction
8817 + np_dmacontrol_quadword_mask = (1 << 11), // Quad-word transaction
8819 + np_dmastatus_done_mask = (1 << 0), // 1 when done. Status write clears.
8820 + np_dmastatus_busy_mask = (1 << 1), // 1 when busy.
8821 + np_dmastatus_reop_mask = (1 << 2), // read-eop received
8822 + np_dmastatus_weop_mask = (1 << 3), // write-eop received
8823 + np_dmastatus_len_mask = (1 << 4), // requested length transacted
8826 + #endif /* __ASSEMBLY__ */
8830 --- linux/include/asm-nios2nommu/nios.h
8831 +++ linux/include/asm-nios2nommu/nios.h
8836 +#include "nios2_system.h"
8840 --- linux/include/asm-nios2nommu/page.h
8841 +++ linux/include/asm-nios2nommu/page.h
8844 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8846 + * All rights reserved.
8848 + * This program is free software; you can redistribute it and/or modify
8849 + * it under the terms of the GNU General Public License as published by
8850 + * the Free Software Foundation; either version 2 of the License, or
8851 + * (at your option) any later version.
8853 + * This program is distributed in the hope that it will be useful, but
8854 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8855 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8856 + * NON INFRINGEMENT. See the GNU General Public License for more
8859 + * You should have received a copy of the GNU General Public License
8860 + * along with this program; if not, write to the Free Software
8861 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8865 +#ifndef _NIOS2_PAGE_H
8866 +#define _NIOS2_PAGE_H
8868 +/* copied from m68knommu arch */
8869 +// #include <linux/config.h>
8871 +/* PAGE_SHIFT determines the page size */
8873 +#define PAGE_SHIFT (12)
8874 +#define PAGE_SIZE (1UL << PAGE_SHIFT)
8875 +#define PAGE_MASK (~(PAGE_SIZE-1))
8879 +#include <asm/setup.h>
8881 +#if PAGE_SHIFT < 13
8882 +#define THREAD_SIZE (8192)
8884 +#define THREAD_SIZE PAGE_SIZE
8887 +#ifndef __ASSEMBLY__
8889 +#define get_user_page(vaddr) __get_free_page(GFP_KERNEL)
8890 +#define free_user_page(page, addr) free_page(addr)
8892 +#define clear_page(page) memset((page), 0, PAGE_SIZE)
8893 +#define copy_page(to,from) memcpy((to), (from), PAGE_SIZE)
8895 +#define clear_user_page(page, vaddr, pg) clear_page(page)
8896 +#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
8899 + * These are used to make use of C type-checking..
8901 +typedef struct { unsigned long pte; } pte_t;
8902 +typedef struct { unsigned long pmd[16]; } pmd_t;
8903 +typedef struct { unsigned long pgd; } pgd_t;
8904 +typedef struct { unsigned long pgprot; } pgprot_t;
8906 +#define pte_val(x) ((x).pte)
8907 +#define pmd_val(x) ((&x)->pmd[0])
8908 +#define pgd_val(x) ((x).pgd)
8909 +#define pgprot_val(x) ((x).pgprot)
8911 +#define __pte(x) ((pte_t) { (x) } )
8912 +#define __pmd(x) ((pmd_t) { (x) } )
8913 +#define __pgd(x) ((pgd_t) { (x) } )
8914 +#define __pgprot(x) ((pgprot_t) { (x) } )
8916 +/* to align the pointer to the (next) page boundary */
8917 +#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
8919 +/* Pure 2^n version of get_order */
8920 +extern __inline__ int get_order(unsigned long size)
8924 + size = (size-1) >> (PAGE_SHIFT-1);
8933 +extern unsigned long memory_start;
8934 +extern unsigned long memory_end;
8936 +#endif /* !__ASSEMBLY__ */
8937 +#include <asm/nios.h>
8938 +#define PAGE_OFFSET ((int)(nasys_program_mem))
8940 +#ifndef __ASSEMBLY__
8942 +#define __pa(vaddr) virt_to_phys((void *)vaddr)
8943 +#define __va(paddr) phys_to_virt((unsigned long)paddr)
8945 +#define MAP_NR(addr) (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)
8947 +#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
8948 +#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT)
8950 +#define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT))
8951 +#define page_to_virt(page) ((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)
8952 +#define VALID_PAGE(page) ((page - mem_map) < max_mapnr)
8954 +#define pfn_to_page(pfn) virt_to_page(pfn_to_virt(pfn))
8955 +#define page_to_pfn(page) virt_to_pfn(page_to_virt(page))
8957 +#define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
8958 + ((void *)(kaddr) < (void *)memory_end))
8960 +#ifdef CONFIG_NO_KERNEL_MSG
8961 +#define BUG_PRINT()
8963 +#define BUG_PRINT() printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__)
8966 +#ifdef na_cpu_oci_core
8967 +#define BUG_PANIC() asm volatile ("break") /* drop to debugger */
8969 +// #define BUG_PANIC() while(1)
8970 +#define BUG_PANIC() panic("BUG!")
8973 +#endif /* __ASSEMBLY__ */
8975 +#endif /* __KERNEL__ */
8977 +#endif /* _NIOS2_PAGE_H */
8978 --- linux/include/asm-nios2nommu/param.h
8979 +++ linux/include/asm-nios2nommu/param.h
8981 +#ifndef _NIOS_PARAM_H
8982 +#define _NIOS_PARAM_H
8984 +/*--------------------------------------------------------------------
8986 + * include/asm-nios2nommu/param.h
8988 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8990 + * Copyright (C) 2004 Microtronix Datacom Ltd
8992 + * This program is free software; you can redistribute it and/or modify
8993 + * it under the terms of the GNU General Public License as published by
8994 + * the Free Software Foundation; either version 2 of the License, or
8995 + * (at your option) any later version.
8997 + * This program is distributed in the hope that it will be useful,
8998 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8999 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9000 + * GNU General Public License for more details.
9003 + * Jan/20/2004 dgt NiosII
9005 + ---------------------------------------------------------------------*/
9014 +#define CLOCKS_PER_SEC (USER_HZ)
9017 +#define EXEC_PAGESIZE 4096
9024 +#define NOGROUP (-1)
9027 +#define MAXHOSTNAMELEN 64 /* max length of hostname */
9030 --- linux/include/asm-nios2nommu/pci.h
9031 +++ linux/include/asm-nios2nommu/pci.h
9033 +#ifndef _ASM_NIOS2NOMMU_PCI_H
9034 +#define _ASM_NIOS2NOMMU_PCI_H
9036 +/*--------------------------------------------------------------------
9038 + * include/asm-nios2nommu/pci.h
9040 + * Derived from asm-m68k/pci_m68k.h
9041 + * - m68k specific PCI declarations, by Wout Klaren.
9043 + * Copyright (C) 2004 Microtronix Datacom Ltd
9045 + * This program is free software; you can redistribute it and/or modify
9046 + * it under the terms of the GNU General Public License as published by
9047 + * the Free Software Foundation; either version 2 of the License, or
9048 + * (at your option) any later version.
9050 + * This program is distributed in the hope that it will be useful,
9051 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9052 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9053 + * GNU General Public License for more details.
9056 + * Jan/20/2004 dgt NiosII
9058 + ---------------------------------------------------------------------*/
9061 +#include <asm/scatterlist.h>
9066 + * Structure with hardware dependent information and functions of the
9070 +struct pci_bus_info
9073 + * Resources of the PCI bus.
9076 + struct resource mem_space;
9077 + struct resource io_space;
9080 + * System dependent functions.
9083 + struct pci_ops *m68k_pci_ops;
9085 + void (*fixup)(int pci_modify);
9086 + void (*conf_device)(struct pci_dev *dev);
9089 +#define pcibios_assign_all_busses() 0
9091 +extern inline void pcibios_set_master(struct pci_dev *dev)
9093 + /* No special bus mastering setup handling */
9096 +extern inline void pcibios_penalize_isa_irq(int irq)
9098 + /* We don't do dynamic PCI IRQ allocation */
9101 +/* The PCI address space does equal the physical memory
9102 + * address space. The networking and block device layers use
9103 + * this boolean for bounce buffer decisions.
9105 +#define PCI_DMA_BUS_IS_PHYS (1)
9107 +#endif /* _ASM_NIOS2NOMMU_PCI_H */
9108 --- linux/include/asm-nios2nommu/percpu.h
9109 +++ linux/include/asm-nios2nommu/percpu.h
9111 +#ifndef __ARCH_NIOS2NOMMU_PERCPU__
9112 +#define __ARCH_NIOS2NOMMU_PERCPU__
9114 +/*--------------------------------------------------------------------
9116 + * include/asm-nios2nommu/percpu.h
9118 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9120 + * Copyright (C) 2004 Microtronix Datacom Ltd
9122 + * This program is free software; you can redistribute it and/or modify
9123 + * it under the terms of the GNU General Public License as published by
9124 + * the Free Software Foundation; either version 2 of the License, or
9125 + * (at your option) any later version.
9127 + * This program is distributed in the hope that it will be useful,
9128 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9129 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9130 + * GNU General Public License for more details.
9133 + * Jan/20/2004 dgt NiosII
9135 + ---------------------------------------------------------------------*/
9138 +#include <asm-generic/percpu.h>
9140 +#endif /* __ARCH_NIOS2NOMMU_PERCPU__ */
9141 --- linux/include/asm-nios2nommu/pgalloc.h
9142 +++ linux/include/asm-nios2nommu/pgalloc.h
9144 +#ifndef _NIOS2NOMMU_PGALLOC_H
9145 +#define _NIOS2NOMMU_PGALLOC_H
9147 +/*--------------------------------------------------------------------
9149 + * include/asm-nios2nommu/pgalloc.h
9151 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9153 + * Copyright (C) 2004 Microtronix Datacom Ltd
9155 + * This program is free software; you can redistribute it and/or modify
9156 + * it under the terms of the GNU General Public License as published by
9157 + * the Free Software Foundation; either version 2 of the License, or
9158 + * (at your option) any later version.
9160 + * This program is distributed in the hope that it will be useful,
9161 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9162 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9163 + * GNU General Public License for more details.
9166 + * Jan/20/2004 dgt NiosII
9168 + ---------------------------------------------------------------------*/
9171 +#include <asm/setup.h>
9173 +#define check_pgt_cache() do { } while (0)
9175 +#endif /* _NIOS2NOMMU_PGALLOC_H */
9176 --- linux/include/asm-nios2nommu/pgtable.h
9177 +++ linux/include/asm-nios2nommu/pgtable.h
9179 +#ifndef _NIOS_PGTABLE_H
9180 +#define _NIOS_PGTABLE_H
9182 +/*--------------------------------------------------------------------
9184 + * include/asm-nios2nommu/pgtable.h
9186 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9188 + * Copyright (C) 2004 Microtronix Datacom Ltd
9190 + * This program is free software; you can redistribute it and/or modify
9191 + * it under the terms of the GNU General Public License as published by
9192 + * the Free Software Foundation; either version 2 of the License, or
9193 + * (at your option) any later version.
9195 + * This program is distributed in the hope that it will be useful,
9196 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9197 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9198 + * GNU General Public License for more details.
9201 + * Jan/20/2004 dgt NiosII
9203 + ---------------------------------------------------------------------*/
9205 +#include <asm-generic/4level-fixup.h>
9207 +//vic - this bit copied from m68knommu version
9208 +// #include <linux/config.h>
9209 +#include <asm/setup.h>
9210 +#include <asm/io.h>
9212 +typedef pte_t *pte_addr_t;
9214 +#define pgd_present(pgd) (1) /* pages are always present on NO_MM */
9215 +#define pgd_none(pgd) (0)
9216 +#define pgd_bad(pgd) (0)
9217 +#define pgd_clear(pgdp)
9218 +#define kern_addr_valid(addr) (1)
9219 +#define pmd_offset(a, b) ((void *)0)
9221 +#define PAGE_NONE __pgprot(0) /* these mean nothing to NO_MM */
9222 +#define PAGE_SHARED __pgprot(0) /* these mean nothing to NO_MM */
9223 +#define PAGE_COPY __pgprot(0) /* these mean nothing to NO_MM */
9224 +#define PAGE_READONLY __pgprot(0) /* these mean nothing to NO_MM */
9225 +#define PAGE_KERNEL __pgprot(0) /* these mean nothing to NO_MM */
9226 +//vic - this bit copied from m68knommu version
9228 +extern void paging_init(void);
9229 +#define swapper_pg_dir ((pgd_t *) 0)
9231 +#define __swp_type(x) (0)
9232 +#define __swp_offset(x) (0)
9233 +#define __swp_entry(typ,off) ((swp_entry_t) { ((typ) | ((off) << 7)) })
9234 +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
9235 +#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
9237 +static inline int pte_file(pte_t pte) { return 0; }
9240 + * ZERO_PAGE is a global shared page that is always zero: used
9241 + * for zero-mapped memory areas etc..
9243 +#define ZERO_PAGE(vaddr) (virt_to_page(0))
9245 +extern unsigned int kobjsize(const void *objp);
9246 +extern int is_in_rom(unsigned long);
9249 + * No page table caches to initialise
9251 +#define pgtable_cache_init() do { } while (0)
9252 +#define io_remap_page_range(vma, vaddr, paddr, size, prot) \
9253 + remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
9255 +extern inline void flush_cache_mm(struct mm_struct *mm)
9259 +extern inline void flush_cache_range(struct mm_struct *mm,
9260 + unsigned long start,
9261 + unsigned long end)
9265 +/* Push the page at kernel virtual address and clear the icache */
9266 +extern inline void flush_page_to_ram (unsigned long address)
9270 +/* Push n pages at kernel virtual address and clear the icache */
9271 +extern inline void flush_pages_to_ram (unsigned long address, int n)
9276 + * All 32bit addresses are effectively valid for vmalloc...
9277 + * Sort of meaningless for non-VM targets.
9279 +#define VMALLOC_START 0
9280 +#define VMALLOC_END 0xffffffff
9282 +#endif /* _NIOS_PGTABLE_H */
9283 --- linux/include/asm-nios2nommu/pio_struct.h
9284 +++ linux/include/asm-nios2nommu/pio_struct.h
9289 +typedef volatile struct
9291 + int np_piodata; // read/write, up to 32 bits
9292 + int np_piodirection; // write/readable, up to 32 bits, 1->output bit
9293 + int np_piointerruptmask; // write/readable, up to 32 bits, 1->enable interrupt
9294 + int np_pioedgecapture; // read, up to 32 bits, cleared by any write
9298 +void nr_pio_showhex(int value); // shows low byte on pio named na_seven_seg_pio
9300 --- linux/include/asm-nios2nommu/poll.h
9301 +++ linux/include/asm-nios2nommu/poll.h
9303 +#ifndef __NIOS2_POLL_H
9304 +#define __NIOS2_POLL_H
9306 +/*--------------------------------------------------------------------
9308 + * include/asm-nios2nommu/poll.h
9310 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9312 + * Copyright (C) 2004 Microtronix Datacom Ltd
9314 + * This program is free software; you can redistribute it and/or modify
9315 + * it under the terms of the GNU General Public License as published by
9316 + * the Free Software Foundation; either version 2 of the License, or
9317 + * (at your option) any later version.
9319 + * This program is distributed in the hope that it will be useful,
9320 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9321 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9322 + * GNU General Public License for more details.
9325 + * Jan/20/2004 dgt NiosII
9327 + ---------------------------------------------------------------------*/
9335 +#define POLLNVAL 32
9336 +#define POLLRDNORM 64
9337 +#define POLLWRNORM POLLOUT
9338 +#define POLLRDBAND 128
9339 +#define POLLWRBAND 256
9340 +#define POLLMSG 0x0400
9349 --- linux/include/asm-nios2nommu/posix_types.h
9350 +++ linux/include/asm-nios2nommu/posix_types.h
9352 +#ifndef __ARCH_NIOS2_POSIX_TYPES_H
9353 +#define __ARCH_NIOS2_POSIX_TYPES_H
9355 +/*--------------------------------------------------------------------
9357 + * include/asm-nios2nommu/posix_types.h
9359 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9361 + * Copyright (C) 2004 Microtronix Datacom Ltd
9363 + * This program is free software; you can redistribute it and/or modify
9364 + * it under the terms of the GNU General Public License as published by
9365 + * the Free Software Foundation; either version 2 of the License, or
9366 + * (at your option) any later version.
9368 + * This program is distributed in the hope that it will be useful,
9369 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9370 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9371 + * GNU General Public License for more details.
9374 + * Jan/20/2004 dgt NiosII
9376 + ---------------------------------------------------------------------*/
9380 + * This file is generally used by user-level software, so you need to
9381 + * be a little careful about namespace pollution etc. Also, we cannot
9382 + * assume GCC is being used.
9385 +typedef unsigned long __kernel_ino_t;
9386 +typedef unsigned short __kernel_mode_t;
9387 +typedef unsigned short __kernel_nlink_t;
9388 +typedef long __kernel_off_t;
9389 +typedef int __kernel_pid_t;
9390 +typedef unsigned short __kernel_ipc_pid_t;
9391 +typedef unsigned short __kernel_uid_t;
9392 +typedef unsigned short __kernel_gid_t;
9393 +typedef unsigned int __kernel_size_t;
9394 +typedef int __kernel_ssize_t;
9395 +typedef int __kernel_ptrdiff_t;
9396 +typedef long __kernel_time_t;
9397 +typedef long __kernel_suseconds_t;
9398 +typedef long __kernel_clock_t;
9399 +typedef int __kernel_timer_t;
9400 +typedef int __kernel_clockid_t;
9401 +typedef int __kernel_daddr_t;
9402 +typedef char * __kernel_caddr_t;
9403 +typedef unsigned short __kernel_uid16_t;
9404 +typedef unsigned short __kernel_gid16_t;
9405 +typedef unsigned int __kernel_uid32_t;
9406 +typedef unsigned int __kernel_gid32_t;
9408 +typedef unsigned short __kernel_old_uid_t;
9409 +typedef unsigned short __kernel_old_gid_t;
9410 +typedef unsigned short __kernel_old_dev_t;
9413 +typedef long long __kernel_loff_t;
9417 +#if defined(__KERNEL__) || defined(__USE_ALL)
9419 +#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
9421 +#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
9424 +#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
9427 +#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
9430 +#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
9433 +#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
9436 +#define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp)))
9438 +#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
9441 --- linux/include/asm-nios2nommu/preem_latency.h
9442 +++ linux/include/asm-nios2nommu/preem_latency.h
9444 +#ifndef _ASM_PREEM_LATENCY_H
9445 +#define _ASM_PREEM_LATENCY_H
9447 +/*--------------------------------------------------------------------
9449 + * include/asm-nios2nommu/preem_latency.h
9451 + * timing support for preempt-stats patch
9453 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9455 + * Copyright (C) 2004 Microtronix Datacom Ltd
9457 + * This program is free software; you can redistribute it and/or modify
9458 + * it under the terms of the GNU General Public License as published by
9459 + * the Free Software Foundation; either version 2 of the License, or
9460 + * (at your option) any later version.
9462 + * This program is distributed in the hope that it will be useful,
9463 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9464 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9465 + * GNU General Public License for more details.
9468 + * Jan/20/2004 dgt NiosII
9470 + ---------------------------------------------------------------------*/
9473 +#include <asm/nios.h>
9475 +#define readclock(low) \
9477 + *(volatile unsigned long *)na_Counter_64_bit=1; \
9478 + low=*(volatile unsigned long *)na_Counter_64_bit; \
9480 +#define readclock_init()
9482 +#endif /* _ASM_PREEM_LATENCY_H */
9483 --- linux/include/asm-nios2nommu/processor.h
9484 +++ linux/include/asm-nios2nommu/processor.h
9486 +/*--------------------------------------------------------------------
9488 + * include/asm-nios2nommu/processor.h
9490 + * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu)
9491 + * Copyright (C) 2001 Ken Hill (khill@microtronix.com)
9492 + * Vic Phillips (vic@microtronix.com)
9493 + * Copyright (C) 2004 Microtronix Datacom Ltd
9496 + * include/asm-sparc/processor.h
9498 + * This program is free software; you can redistribute it and/or modify
9499 + * it under the terms of the GNU General Public License as published by
9500 + * the Free Software Foundation; either version 2 of the License, or
9501 + * (at your option) any later version.
9503 + * This program is distributed in the hope that it will be useful,
9504 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9505 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9506 + * GNU General Public License for more details.
9509 + * Jan/20/2004 dgt NiosII
9510 + * Nov/02/2003 dgt Fix task_size
9512 + ---------------------------------------------------------------------*/
9514 +#ifndef __ASM_NIOS_PROCESSOR_H
9515 +#define __ASM_NIOS_PROCESSOR_H
9517 +#define NIOS2_FLAG_KTHREAD 0x00000001 /* task is a kernel thread */
9518 +#define NIOS2_FLAG_COPROC 0x00000002 /* Thread used coprocess */
9519 +#define NIOS2_FLAG_DEBUG 0x00000004 /* task is being debugged */
9521 +#define NIOS2_OP_NOP 0x1883a
9522 +#define NIOS2_OP_BREAK 0x3da03a
9524 +#ifndef __ASSEMBLY__
9527 + * Default implementation of macro that returns current
9528 + * instruction pointer ("program counter").
9530 +#define current_text_addr() ({ __label__ _l; _l: &&_l;})
9532 +#include <linux/a.out.h>
9533 +#include <linux/string.h>
9535 +#include <asm/ptrace.h>
9536 +#include <asm/signal.h>
9537 +#include <asm/segment.h>
9538 +#include <asm/current.h>
9539 +#include <asm/system.h> /* for get_hi_limit */
9545 +#define EISA_bus__is_a_macro /* for versions in ksyms.c */
9547 +#define MCA_bus__is_a_macro /* for versions in ksyms.c */
9550 + * The nios has no problems with write protection
9552 +#define wp_works_ok 1
9553 +#define wp_works_ok__is_a_macro /* for versions in ksyms.c */
9555 +/* Whee, this is STACK_TOP and the lowest kernel address too... */
9557 +#define KERNBASE 0x00000000 /* First address the kernel will eventually be */
9558 +#define TASK_SIZE (KERNBASE)
9559 +#define MAX_USER_ADDR TASK_SIZE
9560 +#define MMAP_SEARCH_START (TASK_SIZE/3)
9563 +#define TASK_SIZE ((unsigned int) nasys_program_mem_end) //...this is better...
9566 + * This decides where the kernel will search for a free chunk of vm
9567 + * space during mmap's. We won't be using it
9569 +#define TASK_UNMAPPED_BASE 0
9571 +/* The Nios processor specific thread struct. */
9572 +struct thread_struct {
9573 + struct pt_regs *kregs;
9575 + /* For signal handling */
9576 + unsigned long sig_address;
9577 + unsigned long sig_desc;
9579 + /* Context switch saved kernel state. */
9580 + unsigned long ksp;
9581 + unsigned long kpsr;
9582 + unsigned long kesr;
9584 + /* Flags are defined below */
9586 + unsigned long flags;
9588 + struct exec core_exec; /* just what it says. */
9591 +#define INIT_MMAP { &init_mm, (0), (0), \
9592 + __pgprot(0x0) , VM_READ | VM_WRITE | VM_EXEC }
9594 +#define INIT_THREAD { \
9596 + .sig_address = 0, \
9601 + .flags = NIOS2_FLAG_KTHREAD, \
9602 + .current_ds = __KERNEL_DS, \
9603 + .core_exec = INIT_EXEC \
9606 +/* Free all resources held by a thread. */
9607 +extern void release_thread(struct task_struct *);
9609 +extern unsigned long thread_saved_pc(struct task_struct *t);
9611 +extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp);
9613 +/* Prepare to copy thread state - unlazy all lazy status */
9614 +#define prepare_to_copy(tsk) do { } while (0)
9616 +extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
9618 +unsigned long get_wchan(struct task_struct *p);
9620 +#define KSTK_EIP(tsk) ((tsk)->thread.kregs->ea)
9621 +#define KSTK_ESP(tsk) ((tsk)->thread.kregs->sp)
9624 +/* Allocation and freeing of basic task resources. */
9626 +//;dgt2;#define alloc_task_struct() ((struct task_struct *) xx..see..linux..fork..xx __get_free_pages(GFP_KERNEL,1))
9627 +//;dgt2;#define get_task_struct(tsk) xx..see..linux..sched.h...atomic_inc(&mem_map[MAP_NR(tsk)].count)
9631 +#define cpu_relax() do { } while (0)
9632 +#endif /* __ASSEMBLY__ */
9633 +#endif /* __ASM_NIOS_PROCESSOR_H */
9634 --- linux/include/asm-nios2nommu/ptrace.h
9635 +++ linux/include/asm-nios2nommu/ptrace.h
9638 + * Taken from the m68k port.
9640 + * Copyright (C) 2004, Microtronix Datacom Ltd.
9642 + * All rights reserved.
9644 + * This program is free software; you can redistribute it and/or modify
9645 + * it under the terms of the GNU General Public License as published by
9646 + * the Free Software Foundation; either version 2 of the License, or
9647 + * (at your option) any later version.
9649 + * This program is distributed in the hope that it will be useful, but
9650 + * WITHOUT ANY WARRANTY; without even the implied warranty of
9651 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
9652 + * NON INFRINGEMENT. See the GNU General Public License for more
9655 + * You should have received a copy of the GNU General Public License
9656 + * along with this program; if not, write to the Free Software
9657 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
9660 +#ifndef _NIOS2NOMMU_PTRACE_H
9661 +#define _NIOS2NOMMU_PTRACE_H
9663 +#ifndef __ASSEMBLY__
9697 +#define PTR_STATUS 32
9698 +#define PTR_ESTATUS 33
9699 +#define PTR_BSTATUS 34
9700 +#define PTR_IENABLE 35
9701 +#define PTR_IPENDING 36
9703 +/* this struct defines the way the registers are stored on the
9704 + stack during a system call.
9706 + There is a fake_regs in setup.c that has to match pt_regs.*/
9711 + unsigned long r10;
9712 + unsigned long r11;
9713 + unsigned long r12;
9714 + unsigned long r13;
9715 + unsigned long r14;
9716 + unsigned long r15;
9724 + unsigned long orig_r2;
9729 + unsigned long estatus;
9730 + unsigned long status_extension;
9736 + * This is the extended stack used by signal handlers and the context
9737 + * switcher: it's pushed after the normal "struct pt_regs".
9739 +struct switch_stack {
9740 + unsigned long r16;
9741 + unsigned long r17;
9742 + unsigned long r18;
9743 + unsigned long r19;
9744 + unsigned long r20;
9745 + unsigned long r21;
9746 + unsigned long r22;
9747 + unsigned long r23;
9753 +/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
9754 +#define PTRACE_GETREGS 12
9755 +#define PTRACE_SETREGS 13
9757 +#define PTRACE_GETFPREGS 14
9758 +#define PTRACE_SETFPREGS 15
9764 +#define PS_S (0x00000001)
9767 +#define PS_T (0x00000002)
9770 +#define user_mode(regs) (!((regs)->status_extension & PS_S))
9771 +#define instruction_pointer(regs) ((regs)->ra)
9772 +#define profile_pc(regs) instruction_pointer(regs)
9773 +extern void show_regs(struct pt_regs *);
9775 +#endif /* __KERNEL__ */
9776 +#endif /* __ASSEMBLY__ */
9777 +#endif /* _NIOS2NOMMU_PTRACE_H */
9778 --- linux/include/asm-nios2nommu/resource.h
9779 +++ linux/include/asm-nios2nommu/resource.h
9781 +#ifndef _NIOS2NOMMU_RESOURCE_H
9782 +#define _NIOS2NOMMU_RESOURCE_H
9784 +/*--------------------------------------------------------------------
9788 + * include/asm-nios2nommu/resource.h
9790 + * Derived from M68knommu
9792 + * Copyright (C) 2004 Microtronix Datacom Ltd
9794 + * This program is free software; you can redistribute it and/or modify
9795 + * it under the terms of the GNU General Public License as published by
9796 + * the Free Software Foundation; either version 2 of the License, or
9797 + * (at your option) any later version.
9799 + * This program is distributed in the hope that it will be useful,
9800 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9801 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9802 + * GNU General Public License for more details.
9805 + * Jan/20/2004 dgt NiosII
9807 + ---------------------------------------------------------------------*/
9810 +#define RLIMIT_CPU 0 /* CPU time in ms */
9811 +#define RLIMIT_FSIZE 1 /* Maximum filesize */
9812 +#define RLIMIT_DATA 2 /* max data size */
9813 +#define RLIMIT_STACK 3 /* max stack size */
9814 +#define RLIMIT_CORE 4 /* max core file size */
9815 +#define RLIMIT_RSS 5 /* max resident set size */
9816 +#define RLIMIT_NPROC 6 /* max number of processes */
9817 +#define RLIMIT_NOFILE 7 /* max number of open files */
9818 +#define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */
9819 +#define RLIMIT_AS 9 /* address space limit */
9820 +#define RLIMIT_LOCKS 10 /* maximum file locks held */
9821 +#define RLIMIT_SIGPENDING 11 /* max number of pending signals */
9822 +#define RLIMIT_MSGQUEUE 12 /* maximum bytes in POSIX mqueues */
9824 +#define RLIM_NLIMITS 13
9827 + * SuS says limits have to be unsigned.
9828 + * Which makes a ton more sense anyway.
9830 +#define RLIM_INFINITY (~0UL)
9834 +#define INIT_RLIMITS \
9836 + { RLIM_INFINITY, RLIM_INFINITY }, \
9837 + { RLIM_INFINITY, RLIM_INFINITY }, \
9838 + { RLIM_INFINITY, RLIM_INFINITY }, \
9839 + { _STK_LIM, RLIM_INFINITY }, \
9840 + { 0, RLIM_INFINITY }, \
9841 + { RLIM_INFINITY, RLIM_INFINITY }, \
9843 + { INR_OPEN, INR_OPEN }, \
9844 + { MLOCK_LIMIT, MLOCK_LIMIT }, \
9845 + { RLIM_INFINITY, RLIM_INFINITY }, \
9846 + { RLIM_INFINITY, RLIM_INFINITY }, \
9847 + { MAX_SIGPENDING, MAX_SIGPENDING }, \
9848 + { MQ_BYTES_MAX, MQ_BYTES_MAX }, \
9851 +#endif /* __KERNEL__ */
9853 +#endif /* _NIOS2NOMMU_RESOURCE_H */
9854 --- linux/include/asm-nios2nommu/rmap.h
9855 +++ linux/include/asm-nios2nommu/rmap.h
9857 +/* Do not need anything here */
9859 --- linux/include/asm-nios2nommu/scatterlist.h
9860 +++ linux/include/asm-nios2nommu/scatterlist.h
9862 +#ifndef _NIOS2NOMMU_SCATTERLIST_H
9863 +#define _NIOS2NOMMU_SCATTERLIST_H
9865 +/*--------------------------------------------------------------------
9867 + * include/asm-nios2nommu/scatterlist.h
9869 + * Derived from M68knommu
9871 + * Copyright (C) 2004 Microtronix Datacom Ltd
9873 + * This program is free software; you can redistribute it and/or modify
9874 + * it under the terms of the GNU General Public License as published by
9875 + * the Free Software Foundation; either version 2 of the License, or
9876 + * (at your option) any later version.
9878 + * This program is distributed in the hope that it will be useful,
9879 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9880 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9881 + * GNU General Public License for more details.
9884 + * Jan/20/2004 dgt NiosII
9886 + ---------------------------------------------------------------------*/
9888 +#include <linux/mm.h>
9890 +struct scatterlist {
9891 + struct page *page;
9892 + unsigned int offset;
9893 + dma_addr_t dma_address;
9894 + unsigned int length;
9897 +#define sg_address(sg) (page_address((sg)->page) + (sg)->offset
9898 +#define sg_dma_address(sg) ((sg)->dma_address)
9899 +#define sg_dma_len(sg) ((sg)->length)
9901 +#define ISA_DMA_THRESHOLD (0xffffffff)
9903 +#endif /* !(_NIOS2NOMMU_SCATTERLIST_H) */
9904 --- linux/include/asm-nios2nommu/sections.h
9905 +++ linux/include/asm-nios2nommu/sections.h
9907 +#ifndef _NIOS2NOMMU_SECTIONS_H
9908 +#define _NIOS2NOMMU_SECTIONS_H
9910 +/*--------------------------------------------------------------------
9912 + * include/asm-nios2nommu/sections.h
9914 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9916 + * Copyright (C) 2004 Microtronix Datacom Ltd
9918 + * This program is free software; you can redistribute it and/or modify
9919 + * it under the terms of the GNU General Public License as published by
9920 + * the Free Software Foundation; either version 2 of the License, or
9921 + * (at your option) any later version.
9923 + * This program is distributed in the hope that it will be useful,
9924 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9925 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9926 + * GNU General Public License for more details.
9929 + * Jan/20/2004 dgt NiosII
9931 + ---------------------------------------------------------------------*/
9934 +#include <asm-generic/sections.h>
9936 +#endif /* _NIOS2NOMMU_SECTIONS_H */
9937 --- linux/include/asm-nios2nommu/segment.h
9938 +++ linux/include/asm-nios2nommu/segment.h
9940 +#ifndef _NIOS2NOMMU_SEGMENT_H
9941 +#define _NIOS2NOMMU_SEGMENT_H
9943 +/*--------------------------------------------------------------------
9945 + * include/asm-nios2nommu/segment.h
9947 + * Derived from M68knommu
9949 + * Copyright (C) 2004 Microtronix Datacom Ltd
9951 + * This program is free software; you can redistribute it and/or modify
9952 + * it under the terms of the GNU General Public License as published by
9953 + * the Free Software Foundation; either version 2 of the License, or
9954 + * (at your option) any later version.
9956 + * This program is distributed in the hope that it will be useful,
9957 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9958 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9959 + * GNU General Public License for more details.
9962 + * Jan/20/2004 dgt NiosII
9964 + ---------------------------------------------------------------------*/
9967 +/* define constants */
9968 +/* Address spaces (FC0-FC2) */
9969 +#define USER_DATA (1)
9971 +#define __USER_DS (USER_DATA)
9973 +#define USER_PROGRAM (2)
9974 +#define SUPER_DATA (5)
9975 +#ifndef __KERNEL_DS
9976 +#define __KERNEL_DS (SUPER_DATA)
9978 +#define SUPER_PROGRAM (6)
9979 +#define CPU_SPACE (7)
9981 +#ifndef __ASSEMBLY__
9984 + unsigned long seg;
9987 +#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
9988 +#define USER_DS MAKE_MM_SEG(__USER_DS)
9989 +#define KERNEL_DS MAKE_MM_SEG(__KERNEL_DS)
9992 + * Get/set the SFC/DFC registers for MOVES instructions
9995 +static inline mm_segment_t get_fs(void)
10000 +static inline mm_segment_t get_ds(void)
10002 + /* return the supervisor data space code */
10003 + return KERNEL_DS;
10006 +static inline void set_fs(mm_segment_t val)
10010 +#define segment_eq(a,b) ((a).seg == (b).seg)
10012 +#endif /* __ASSEMBLY__ */
10014 +#endif /* _NIOS2NOMMU_SEGMENT_H */
10015 --- linux/include/asm-nios2nommu/semaphore.h
10016 +++ linux/include/asm-nios2nommu/semaphore.h
10018 +#ifndef _NIOS2NOMMU_SEMAPHORE_H
10019 +#define _NIOS2NOMMU_SEMAPHORE_H
10021 +/*--------------------------------------------------------------------
10023 + * include/asm-nios2nommu/semaphore.h
10025 + * Interrupt-safe semaphores..
10027 + * Derived from M68knommu
10029 + * (C) Copyright 1996 Linus Torvalds
10030 + * m68k version by Andreas Schwab
10031 + * Copyright (C) 2004 Microtronix Datacom Ltd
10033 + * This program is free software; you can redistribute it and/or modify
10034 + * it under the terms of the GNU General Public License as published by
10035 + * the Free Software Foundation; either version 2 of the License, or
10036 + * (at your option) any later version.
10038 + * This program is distributed in the hope that it will be useful,
10039 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10040 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10041 + * GNU General Public License for more details.
10043 + * Jan/20/2004 dgt NiosII
10045 + ---------------------------------------------------------------------*/
10047 +#define RW_LOCK_BIAS 0x01000000
10049 +#ifndef __ASSEMBLY__
10051 +#include <linux/linkage.h>
10052 +#include <linux/wait.h>
10053 +#include <linux/spinlock.h>
10054 +#include <linux/rwsem.h>
10056 +#include <asm/system.h>
10057 +#include <asm/atomic.h>
10059 +struct semaphore {
10062 + wait_queue_head_t wait;
10065 +#define __SEMAPHORE_INITIALIZER(name, n) \
10067 + .count = ATOMIC_INIT(n), \
10068 + .waking = ATOMIC_INIT(0), \
10069 + .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
10072 +#define __MUTEX_INITIALIZER(name) \
10073 + __SEMAPHORE_INITIALIZER(name,1)
10075 +#define __DECLARE_SEMAPHORE_GENERIC(name,count) \
10076 + struct semaphore name = __SEMAPHORE_INITIALIZER(name,count)
10078 +#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)
10079 +#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)
10081 +extern inline void sema_init (struct semaphore *sem, int val)
10083 + *sem = (struct semaphore)__SEMAPHORE_INITIALIZER(*sem, val);
10086 +static inline void init_MUTEX (struct semaphore *sem)
10088 + sema_init(sem, 1);
10091 +static inline void init_MUTEX_LOCKED (struct semaphore *sem)
10093 + sema_init(sem, 0);
10096 +asmlinkage void __down(struct semaphore * sem);
10097 +asmlinkage int __down_interruptible(struct semaphore * sem);
10098 +asmlinkage int __down_trylock(struct semaphore * sem);
10099 +asmlinkage void __up(struct semaphore * sem);
10101 +asmlinkage void __down_failed(void /* special register calling convention */);
10102 +asmlinkage int __down_failed_interruptible(void /* params in registers */);
10103 +asmlinkage int __down_failed_trylock(void /* params in registers */);
10104 +asmlinkage void __up_wakeup(void /* special register calling convention */);
10106 +extern spinlock_t semaphore_wake_lock;
10109 + * This is ugly, but we want the default case to fall through.
10110 + * "down_failed" is a special asm handler that calls the C
10111 + * routine that actually waits.
10113 +extern inline void down(struct semaphore * sem)
10118 + ...Nios2 has no atomic "decrement memory"....
10120 + if (atomic_dec_return(&sem->count) < 0)
10125 +extern inline int down_interruptible(struct semaphore * sem)
10133 + ...Nios2 has no atomic "decrement memory"....
10135 + if(atomic_dec_return(&sem->count) < 0)
10136 + ret = __down_interruptible(sem);
10141 +extern inline int down_trylock(struct semaphore * sem)
10144 + ...Nios2 has no atomic "decrement memory"....
10148 + if (atomic_dec_return (&sem->count) < 0)
10149 + ret = __down_trylock(sem);
10155 + * Note! This is subtle. We jump to wake people up only if
10156 + * the semaphore was negative (== somebody was waiting on it).
10157 + * The default case (no contention) will result in NO
10158 + * jumps for both down() and up().
10160 +extern inline void up(struct semaphore * sem)
10163 + ...Nios2 has no atomic "increment memory"....
10165 + if (atomic_inc_return(&sem->count) <= 0)
10170 +#endif /* __ASSEMBLY__ */
10173 --- linux/include/asm-nios2nommu/semaphore-helper.h
10174 +++ linux/include/asm-nios2nommu/semaphore-helper.h
10176 +#ifndef _NIOS2NOMMU_SEMAPHORE_HELPER_H
10177 +#define _NIOS2NOMMU_SEMAPHORE_HELPER_H
10179 +/*--------------------------------------------------------------------
10181 + * include/asm-nios2nommu/semaphore.h
10183 + * SMP- and interrupt-safe semaphores helper functions.
10185 + * Derived from M68knommu
10187 + * (C) Copyright 1996 Linus Torvalds
10188 + * m68k version by Andreas Schwab
10189 + * Copyright (C) 2004 Microtronix Datacom Ltd
10191 + * This program is free software; you can redistribute it and/or modify
10192 + * it under the terms of the GNU General Public License as published by
10193 + * the Free Software Foundation; either version 2 of the License, or
10194 + * (at your option) any later version.
10196 + * This program is distributed in the hope that it will be useful,
10197 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10198 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10199 + * GNU General Public License for more details.
10201 + * Jan/20/2004 dgt NiosII
10203 + ---------------------------------------------------------------------*/
10205 +// #include <linux/config.h>
10208 + * These two _must_ execute atomically wrt each other.
10210 +static inline void wake_one_more(struct semaphore * sem)
10212 + atomic_inc(&sem->waking);
10215 +static inline int waking_non_zero(struct semaphore *sem)
10218 + unsigned long flags;
10220 + spin_lock_irqsave(&semaphore_wake_lock, flags);
10222 + if (atomic_read(&sem->waking) > 0) {
10223 + atomic_dec(&sem->waking);
10226 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
10231 + * waking_non_zero_interruptible:
10234 + * -EINTR interrupted
10236 +static inline int waking_non_zero_interruptible(struct semaphore *sem,
10237 + struct task_struct *tsk)
10240 + unsigned long flags;
10242 + spin_lock_irqsave(&semaphore_wake_lock, flags);
10244 + if (atomic_read(&sem->waking) > 0) {
10245 + atomic_dec(&sem->waking);
10247 + } else if (signal_pending(tsk)) {
10248 + atomic_inc(&sem->count);
10251 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
10256 + * waking_non_zero_trylock:
10257 + * 1 failed to lock
10260 +static inline int waking_non_zero_trylock(struct semaphore *sem)
10263 + unsigned long flags;
10265 + spin_lock_irqsave(&semaphore_wake_lock, flags);
10267 + if (atomic_read(&sem->waking) > 0) {
10268 + atomic_dec(&sem->waking);
10271 + atomic_inc(&sem->count);
10272 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
10277 --- linux/include/asm-nios2nommu/sembuf.h
10278 +++ linux/include/asm-nios2nommu/sembuf.h
10280 +#ifndef _NIOS_SEMBUF_H
10281 +#define _NIOS_SEMBUF_H
10283 +/*--------------------------------------------------------------------
10285 + * include/asm-nios2nommu/sembuf.h
10287 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10289 + * Copyright (C) 2004 Microtronix Datacom Ltd
10291 + * This program is free software; you can redistribute it and/or modify
10292 + * it under the terms of the GNU General Public License as published by
10293 + * the Free Software Foundation; either version 2 of the License, or
10294 + * (at your option) any later version.
10296 + * This program is distributed in the hope that it will be useful,
10297 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10298 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10299 + * GNU General Public License for more details.
10302 + * Jan/20/2004 dgt NiosII
10304 + ---------------------------------------------------------------------*/
10308 + * Note extra padding because this structure is passed back and forth
10309 + * between kernel and user space.
10311 + * Pad space is left for:
10312 + * - 64-bit time_t to solve y2038 problem
10313 + * - 2 miscellaneous 32-bit values
10316 +struct semid64_ds {
10317 + struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
10318 + __kernel_time_t sem_otime; /* last semop time */
10319 + unsigned long __unused1;
10320 + __kernel_time_t sem_ctime; /* last change time */
10321 + unsigned long __unused2;
10322 + unsigned long sem_nsems; /* no. of semaphores in array */
10323 + unsigned long __unused3;
10324 + unsigned long __unused4;
10327 +#endif /* _NIOS_SEMBUF_H */
10328 --- linux/include/asm-nios2nommu/setup.h
10329 +++ linux/include/asm-nios2nommu/setup.h
10331 +/* Copied from i386 port.
10332 + * Just a place holder. We don't want to have to test x86 before
10333 + * we include stuff
10335 + * Copyright (C) 2004, Microtronix Datacom Ltd.
10337 + * All rights reserved.
10339 + * This program is free software; you can redistribute it and/or modify
10340 + * it under the terms of the GNU General Public License as published by
10341 + * the Free Software Foundation; either version 2 of the License, or
10342 + * (at your option) any later version.
10344 + * This program is distributed in the hope that it will be useful, but
10345 + * WITHOUT ANY WARRANTY; without even the implied warranty of
10346 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
10347 + * NON INFRINGEMENT. See the GNU General Public License for more
10350 + * You should have received a copy of the GNU General Public License
10351 + * along with this program; if not, write to the Free Software
10352 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
10356 +#ifndef _NIOS2_SETUP_H
10357 +#define _NIOS2_SETUP_H
10359 +#define COMMAND_LINE_SIZE 512
10361 +#endif /* _NIOS2_SETUP_H */
10362 --- linux/include/asm-nios2nommu/shmbuf.h
10363 +++ linux/include/asm-nios2nommu/shmbuf.h
10365 +#ifndef _NIOS_SHMBUF_H
10366 +#define _NIOS_SHMBUF_H
10368 +/*--------------------------------------------------------------------
10370 + * include/asm-nios2nommu/shmbuf.h
10372 + * Derived from m68knommu
10374 + * Copyright (C) 2004 Microtronix Datacom Ltd
10376 + * This program is free software; you can redistribute it and/or modify
10377 + * it under the terms of the GNU General Public License as published by
10378 + * the Free Software Foundation; either version 2 of the License, or
10379 + * (at your option) any later version.
10381 + * This program is distributed in the hope that it will be useful,
10382 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10383 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10384 + * GNU General Public License for more details.
10387 + * Jan/20/2004 dgt NiosII
10389 + ---------------------------------------------------------------------*/
10392 +/* Note extra padding because this structure is passed back and forth
10393 + * between kernel and user space.
10395 + * Pad space is left for:
10396 + * - 64-bit time_t to solve y2038 problem
10397 + * - 2 miscellaneous 32-bit values
10400 +struct shmid64_ds {
10401 + struct ipc64_perm shm_perm; /* operation perms */
10402 + size_t shm_segsz; /* size of segment (bytes) */
10403 + __kernel_time_t shm_atime; /* last attach time */
10404 + unsigned long __unused1;
10405 + __kernel_time_t shm_dtime; /* last detach time */
10406 + unsigned long __unused2;
10407 + __kernel_time_t shm_ctime; /* last change time */
10408 + unsigned long __unused3;
10409 + __kernel_pid_t shm_cpid; /* pid of creator */
10410 + __kernel_pid_t shm_lpid; /* pid of last operator */
10411 + unsigned long shm_nattch; /* no. of current attaches */
10412 + unsigned long __unused4;
10413 + unsigned long __unused5;
10416 +struct shminfo64 {
10417 + unsigned long shmmax;
10418 + unsigned long shmmin;
10419 + unsigned long shmmni;
10420 + unsigned long shmseg;
10421 + unsigned long shmall;
10422 + unsigned long __unused1;
10423 + unsigned long __unused2;
10424 + unsigned long __unused3;
10425 + unsigned long __unused4;
10428 +#endif /* _NIOS_SHMBUF_H */
10429 --- linux/include/asm-nios2nommu/shmparam.h
10430 +++ linux/include/asm-nios2nommu/shmparam.h
10432 +#ifndef __NIOS2NOMMU_SHMPARAM_H__
10433 +#define __NIOS2NOMMU_SHMPARAM_H__
10435 +/*--------------------------------------------------------------------
10437 + * include/asm-nios2nommu/shmparam.h
10439 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10441 + * Copyright (C) 2004 Microtronix Datacom Ltd
10443 + * This program is free software; you can redistribute it and/or modify
10444 + * it under the terms of the GNU General Public License as published by
10445 + * the Free Software Foundation; either version 2 of the License, or
10446 + * (at your option) any later version.
10448 + * This program is distributed in the hope that it will be useful,
10449 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10450 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10451 + * GNU General Public License for more details.
10454 + * Jan/20/2004 dgt NiosII
10456 + ---------------------------------------------------------------------*/
10459 +#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */
10461 +#endif /* __NIOS2NOMMU_SHMPARAM_H__ */
10462 --- linux/include/asm-nios2nommu/sigcontext.h
10463 +++ linux/include/asm-nios2nommu/sigcontext.h
10466 + * Taken from the m68knommu.
10468 + * Copyright (C) 2004, Microtronix Datacom Ltd.
10470 + * All rights reserved.
10472 + * This program is free software; you can redistribute it and/or modify
10473 + * it under the terms of the GNU General Public License as published by
10474 + * the Free Software Foundation; either version 2 of the License, or
10475 + * (at your option) any later version.
10477 + * This program is distributed in the hope that it will be useful, but
10478 + * WITHOUT ANY WARRANTY; without even the implied warranty of
10479 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
10480 + * NON INFRINGEMENT. See the GNU General Public License for more
10483 + * You should have received a copy of the GNU General Public License
10484 + * along with this program; if not, write to the Free Software
10485 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
10489 +#ifndef _ASM_NIOS2NOMMU_SIGCONTEXT_H
10490 +#define _ASM_NIOS2NOMMU_SIGCONTEXT_H
10492 +#include <asm/ptrace.h>
10494 +struct sigcontext {
10495 + struct pt_regs regs;
10496 + unsigned long sc_mask; /* old sigmask */
10500 --- linux/include/asm-nios2nommu/siginfo.h
10501 +++ linux/include/asm-nios2nommu/siginfo.h
10504 + * Copyright (C) 2004, Microtronix Datacom Ltd.
10506 + * All rights reserved.
10508 + * This program is free software; you can redistribute it and/or modify
10509 + * it under the terms of the GNU General Public License as published by
10510 + * the Free Software Foundation; either version 2 of the License, or
10511 + * (at your option) any later version.
10513 + * This program is distributed in the hope that it will be useful, but
10514 + * WITHOUT ANY WARRANTY; without even the implied warranty of
10515 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
10516 + * NON INFRINGEMENT. See the GNU General Public License for more
10519 + * You should have received a copy of the GNU General Public License
10520 + * along with this program; if not, write to the Free Software
10521 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
10525 +#ifndef _NIOS2NOMMU_SIGINFO_H
10526 +#define _NIOS2NOMMU_SIGINFO_H
10528 +#include <asm-generic/siginfo.h>
10531 --- linux/include/asm-nios2nommu/signal.h
10532 +++ linux/include/asm-nios2nommu/signal.h
10535 + * Copyright (C) 2004, Microtronix Datacom Ltd.
10537 + * All rights reserved.
10539 + * This program is free software; you can redistribute it and/or modify
10540 + * it under the terms of the GNU General Public License as published by
10541 + * the Free Software Foundation; either version 2 of the License, or
10542 + * (at your option) any later version.
10544 + * This program is distributed in the hope that it will be useful, but
10545 + * WITHOUT ANY WARRANTY; without even the implied warranty of
10546 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
10547 + * NON INFRINGEMENT. See the GNU General Public License for more
10550 + * You should have received a copy of the GNU General Public License
10551 + * along with this program; if not, write to the Free Software
10552 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
10556 +#ifndef _NIOS2_SIGNAL_H
10557 +#define _NIOS2_SIGNAL_H
10559 +#include <linux/types.h>
10561 +/* Avoid too many header ordering problems. */
10565 +/* Most things should be clean enough to redefine this at will, if care
10566 + is taken to make libc match. */
10569 +#define _NSIG_BPW 32
10570 +#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
10572 +typedef unsigned long old_sigset_t; /* at least 32 bits */
10575 + unsigned long sig[_NSIG_WORDS];
10579 +/* Here we must cater to libcs that poke about in kernel headers. */
10582 +typedef unsigned long sigset_t;
10584 +#endif /* __KERNEL__ */
10596 +#define SIGUSR1 10
10597 +#define SIGSEGV 11
10598 +#define SIGUSR2 12
10599 +#define SIGPIPE 13
10600 +#define SIGALRM 14
10601 +#define SIGTERM 15
10602 +#define SIGSTKFLT 16
10603 +#define SIGCHLD 17
10604 +#define SIGCONT 18
10605 +#define SIGSTOP 19
10606 +#define SIGTSTP 20
10607 +#define SIGTTIN 21
10608 +#define SIGTTOU 22
10610 +#define SIGXCPU 24
10611 +#define SIGXFSZ 25
10612 +#define SIGVTALRM 26
10613 +#define SIGPROF 27
10614 +#define SIGWINCH 28
10616 +#define SIGPOLL SIGIO
10618 +#define SIGLOST 29
10622 +#define SIGUNUSED 31
10624 +/* These should not be considered constants from userland. */
10625 +#define SIGRTMIN 32
10626 +#define SIGRTMAX _NSIG-1
10629 + * SA_FLAGS values:
10631 + * SA_ONSTACK indicates that a registered stack_t will be used.
10632 + * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
10633 + * SA_RESTART flag to get restarting signals (which were the default long ago)
10634 + * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
10635 + * SA_RESETHAND clears the handler when the signal is delivered.
10636 + * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
10637 + * SA_NODEFER prevents the current signal from being masked in the handler.
10639 + * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
10640 + * Unix names RESETHAND and NODEFER respectively.
10642 +#define SA_NOCLDSTOP 0x00000001
10643 +#define SA_NOCLDWAIT 0x00000002 /* not supported yet */
10644 +#define SA_SIGINFO 0x00000004
10645 +#define SA_ONSTACK 0x08000000
10646 +#define SA_RESTART 0x10000000
10647 +#define SA_NODEFER 0x40000000
10648 +#define SA_RESETHAND 0x80000000
10650 +#define SA_NOMASK SA_NODEFER
10651 +#define SA_ONESHOT SA_RESETHAND
10652 +#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
10654 +#define SA_RESTORER 0x04000000
10657 + * sigaltstack controls
10659 +#define SS_ONSTACK 1
10660 +#define SS_DISABLE 2
10662 +#define MINSIGSTKSZ 2048
10663 +#define SIGSTKSZ 8192
10667 + * These values of sa_flags are used only by the kernel as part of the
10668 + * irq handling routines.
10670 + * SA_INTERRUPT is also used by the irq handling routines.
10671 + * SA_SHIRQ is for shared interrupt support on PCI and EISA.
10673 +#define SA_PROBE SA_ONESHOT
10674 +#define SA_SAMPLE_RANDOM SA_RESTART
10675 +#define SA_SHIRQ 0x04000000
10678 +#define SIG_BLOCK 0 /* for blocking signals */
10679 +#define SIG_UNBLOCK 1 /* for unblocking signals */
10680 +#define SIG_SETMASK 2 /* for setting the signal mask */
10682 +/* Type of a signal handler. */
10683 +typedef void (*__sighandler_t)(int);
10685 +#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
10686 +#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
10687 +#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
10690 +struct old_sigaction {
10691 + __sighandler_t sa_handler;
10692 + old_sigset_t sa_mask;
10693 + unsigned long sa_flags;
10694 + void (*sa_restorer)(void);
10697 +struct sigaction {
10698 + __sighandler_t sa_handler;
10699 + unsigned long sa_flags;
10700 + void (*sa_restorer)(void);
10701 + sigset_t sa_mask; /* mask last for extensibility */
10704 +struct k_sigaction {
10705 + struct sigaction sa;
10708 +/* Here we must cater to libcs that poke about in kernel headers. */
10710 +struct sigaction {
10712 + __sighandler_t _sa_handler;
10713 + void (*_sa_sigaction)(int, struct siginfo *, void *);
10715 + sigset_t sa_mask;
10716 + unsigned long sa_flags;
10717 + void (*sa_restorer)(void);
10720 +#define sa_handler _u._sa_handler
10721 +#define sa_sigaction _u._sa_sigaction
10723 +#endif /* __KERNEL__ */
10725 +typedef struct sigaltstack {
10733 +#include <asm/sigcontext.h>
10734 +#undef __HAVE_ARCH_SIG_BITOPS
10736 +#define ptrace_signal_deliver(regs, cookie) do { } while (0)
10738 +#endif /* __KERNEL__ */
10740 +#endif /* _NIOS2_SIGNAL_H */
10741 --- linux/include/asm-nios2nommu/smp.h
10742 +++ linux/include/asm-nios2nommu/smp.h
10744 +#ifndef __ASM_SMP_H
10745 +#define __ASM_SMP_H
10747 +/*--------------------------------------------------------------------
10749 + * include/asm-nios2nommu/smp.h
10751 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10753 + * Copyright (C) 2004 Microtronix Datacom Ltd
10755 + * This program is free software; you can redistribute it and/or modify
10756 + * it under the terms of the GNU General Public License as published by
10757 + * the Free Software Foundation; either version 2 of the License, or
10758 + * (at your option) any later version.
10760 + * This program is distributed in the hope that it will be useful,
10761 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10762 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10763 + * GNU General Public License for more details.
10766 + * Jan/20/2004 dgt NiosII
10768 + ---------------------------------------------------------------------*/
10771 +// #include <linux/config.h>
10774 +#error SMP not supported
10778 --- linux/include/asm-nios2nommu/socket.h
10779 +++ linux/include/asm-nios2nommu/socket.h
10781 +#ifndef _ASM_SOCKET_H
10782 +#define _ASM_SOCKET_H
10784 +/*--------------------------------------------------------------------
10786 + * include/asm-nios2nommu/socket.h
10788 + * Derived from m68knommu
10790 + * Copyright (C) 2004 Microtronix Datacom Ltd
10792 + * This program is free software; you can redistribute it and/or modify
10793 + * it under the terms of the GNU General Public License as published by
10794 + * the Free Software Foundation; either version 2 of the License, or
10795 + * (at your option) any later version.
10797 + * This program is distributed in the hope that it will be useful,
10798 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10799 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10800 + * GNU General Public License for more details.
10803 + * Jan/20/2004 dgt NiosII
10805 + ---------------------------------------------------------------------*/
10808 +#include <asm/sockios.h>
10810 +/* For setsockopt(2) */
10811 +#define SOL_SOCKET 1
10813 +#define SO_DEBUG 1
10814 +#define SO_REUSEADDR 2
10816 +#define SO_ERROR 4
10817 +#define SO_DONTROUTE 5
10818 +#define SO_BROADCAST 6
10819 +#define SO_SNDBUF 7
10820 +#define SO_RCVBUF 8
10821 +#define SO_KEEPALIVE 9
10822 +#define SO_OOBINLINE 10
10823 +#define SO_NO_CHECK 11
10824 +#define SO_PRIORITY 12
10825 +#define SO_LINGER 13
10826 +#define SO_BSDCOMPAT 14
10827 +/* To add :#define SO_REUSEPORT 15 */
10828 +#define SO_PASSCRED 16
10829 +#define SO_PEERCRED 17
10830 +#define SO_RCVLOWAT 18
10831 +#define SO_SNDLOWAT 19
10832 +#define SO_RCVTIMEO 20
10833 +#define SO_SNDTIMEO 21
10835 +/* Security levels - as per NRL IPv6 - don't actually do anything */
10836 +#define SO_SECURITY_AUTHENTICATION 22
10837 +#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
10838 +#define SO_SECURITY_ENCRYPTION_NETWORK 24
10840 +#define SO_BINDTODEVICE 25
10842 +/* Socket filtering */
10843 +#define SO_ATTACH_FILTER 26
10844 +#define SO_DETACH_FILTER 27
10846 +#define SO_PEERNAME 28
10847 +#define SO_TIMESTAMP 29
10848 +#define SCM_TIMESTAMP SO_TIMESTAMP
10850 +#define SO_ACCEPTCONN 30
10852 +#define SO_PEERSEC 31 /* ;dgt2;tmp; */
10854 +#endif /* _ASM_SOCKET_H */
10855 --- linux/include/asm-nios2nommu/sockios.h
10856 +++ linux/include/asm-nios2nommu/sockios.h
10858 +#ifndef _ASM_NIOS_SOCKIOS_H
10859 +#define _ASM_NIOS_SOCKIOS_H
10861 +/*--------------------------------------------------------------------
10863 + * include/asm-nios2nommu/sockios.h
10865 + * Socket-level I/O control calls.
10867 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10869 + * Copyright (C) 2004 Microtronix Datacom Ltd
10871 + * This program is free software; you can redistribute it and/or modify
10872 + * it under the terms of the GNU General Public License as published by
10873 + * the Free Software Foundation; either version 2 of the License, or
10874 + * (at your option) any later version.
10876 + * This program is distributed in the hope that it will be useful,
10877 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10878 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10879 + * GNU General Public License for more details.
10882 + * Jan/20/2004 dgt NiosII
10884 + ---------------------------------------------------------------------*/
10887 +#define FIOSETOWN 0x8901
10888 +#define SIOCSPGRP 0x8902
10889 +#define FIOGETOWN 0x8903
10890 +#define SIOCGPGRP 0x8904
10891 +#define SIOCATMARK 0x8905
10892 +#define SIOCGSTAMP 0x8906 /* Get stamp */
10894 +#endif /* !(_ASM_NIOS_SOCKIOS_H) */
10896 --- linux/include/asm-nios2nommu/spi.h
10897 +++ linux/include/asm-nios2nommu/spi.h
10899 +#ifndef _ASM_SPI_H_
10900 +#define _ASM_SPI_H_ 1
10902 +/*--------------------------------------------------------------------
10904 + * include/asm-nios2nommu/spi.h
10906 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10908 + * Copyright (C) 2004 Microtronix Datacom Ltd
10910 + * This program is free software; you can redistribute it and/or modify
10911 + * it under the terms of the GNU General Public License as published by
10912 + * the Free Software Foundation; either version 2 of the License, or
10913 + * (at your option) any later version.
10915 + * This program is distributed in the hope that it will be useful,
10916 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10917 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10918 + * GNU General Public License for more details.
10921 + * Jan/20/2004 dgt NiosII
10923 + ---------------------------------------------------------------------*/
10926 +#include <asm/nios.h>
10928 +int register_NIOS_SPI( void );
10929 +void unregister_NIOS_SPI( void );
10931 +#if defined(MODULE)
10932 +void cleanup_module( void );
10933 +int init_module( void );
10936 +#if defined(__KERNEL__)
10937 +int spi_reset ( void );
10941 +#define clockCS 0x01
10942 +#define temperatureCS 0x02
10944 +#define clock_read_base 0x00
10945 +#define clock_write_base 0x80
10946 +#define clock_read_control 0x0F
10947 +#define clock_read_trickle 0x11
10949 +#define clock_read_sec 0x00
10950 +#define clock_read_min 0x01
10951 +#define clock_read_hour 0x02
10952 +#define clock_read_day 0x03
10953 +#define clock_read_date 0x04
10954 +#define clock_read_month 0x05
10955 +#define clock_read_year 0x06
10957 +#define clock_write_control 0x8F
10958 +#define clock_write_trickle 0x91
10959 +#define clock_write_sec 0x80
10960 +#define clock_write_min 0x81
10961 +#define clock_write_hour 0x82
10962 +#define clock_write_day 0x83
10963 +#define clock_write_date 0x84
10964 +#define clock_write_month 0x85
10965 +#define clock_write_year 0x86
10967 +#define clock_write_ram_start 0xA0
10968 +#define clock_write_ram_end 0x100
10969 +#define clock_read_ram_start 0x20
10970 +#define clock_read_ram_end 0x80
10973 +#define clock_sec_def 0x11
10974 +#define clock_min_def 0x59
10975 +#define clock_hour_def 0x71
10976 +#define clock_day_def 0x00
10977 +#define clock_date_def 0x20
10978 +#define clock_month_def 0x12
10979 +#define clock_year_def 0x34
10981 +#define temp_read_base 0x00
10982 +#define temp_write_base 0x80
10983 +#define temp_read_control 0x00
10984 +#define temp_write_control 0x80
10985 +#define temp_read_msb 0x02
10986 +#define temp_read_lsb 0x01
10988 +#define MAX_TEMP_VAR 10
10990 +#endif /*_ASM_SPI_H_*/
10991 --- linux/include/asm-nios2nommu/spinlock.h
10992 +++ linux/include/asm-nios2nommu/spinlock.h
10994 +#ifndef __NIOS_SPINLOCK_H
10995 +#define __NIOS_SPINLOCK_H
10997 +/*--------------------------------------------------------------------
10999 + * include/asm-nios2nommu/spinlock.h
11001 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11003 + * Copyright (C) 2004 Microtronix Datacom Ltd
11005 + * This program is free software; you can redistribute it and/or modify
11006 + * it under the terms of the GNU General Public License as published by
11007 + * the Free Software Foundation; either version 2 of the License, or
11008 + * (at your option) any later version.
11010 + * This program is distributed in the hope that it will be useful,
11011 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11012 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11013 + * GNU General Public License for more details.
11016 + * Jan/20/2004 dgt NiosII
11018 + ---------------------------------------------------------------------*/
11021 +#error "Nios doesn't do SMP yet"
11024 --- linux/include/asm-nios2nommu/spi_struct.h
11025 +++ linux/include/asm-nios2nommu/spi_struct.h
11028 +typedef volatile struct
11030 + int np_spirxdata; // Read-only, 1-16 bit
11031 + int np_spitxdata; // Write-only, same width as rxdata
11032 + int np_spistatus; // Read-only, 9-bit
11033 + int np_spicontrol; // Read/Write, 9-bit
11034 + int np_spireserved; // reserved
11035 + int np_spislaveselect; // Read/Write, 1-16 bit, master only
11036 + int np_spiendofpacket; // Read/write, same width as txdata, rxdata.
11039 +// SPI Status Register Bits
11042 + np_spistatus_eop_bit = 9,
11043 + np_spistatus_e_bit = 8,
11044 + np_spistatus_rrdy_bit = 7,
11045 + np_spistatus_trdy_bit = 6,
11046 + np_spistatus_tmt_bit = 5,
11047 + np_spistatus_toe_bit = 4,
11048 + np_spistatus_roe_bit = 3,
11050 + np_spistatus_eop_mask = (1 << 9),
11051 + np_spistatus_e_mask = (1 << 8),
11052 + np_spistatus_rrdy_mask = (1 << 7),
11053 + np_spistatus_trdy_mask = (1 << 6),
11054 + np_spistatus_tmt_mask = (1 << 5),
11055 + np_spistatus_toe_mask = (1 << 4),
11056 + np_spistatus_roe_mask = (1 << 3),
11059 +// SPI Control Register Bits
11062 + np_spicontrol_sso_bit = 10,
11063 + np_spicontrol_ieop_bit = 9,
11064 + np_spicontrol_ie_bit = 8,
11065 + np_spicontrol_irrdy_bit = 7,
11066 + np_spicontrol_itrdy_bit = 6,
11067 + np_spicontrol_itoe_bit = 4,
11068 + np_spicontrol_iroe_bit = 3,
11070 + np_spicontrol_sso_mask = (1 << 10),
11071 + np_spicontrol_ieop_mask = (1 << 9),
11072 + np_spicontrol_ie_mask = (1 << 8),
11073 + np_spicontrol_irrdy_mask = (1 << 7),
11074 + np_spicontrol_itrdy_mask = (1 << 6),
11075 + np_spicontrol_itoe_mask = (1 << 4),
11076 + np_spicontrol_iroe_mask = (1 << 3),
11080 +int nr_spi_rxchar(np_spi *spiBase);
11081 +int nr_spi_txchar(int i, np_spi *spiBase);
11084 --- linux/include/asm-nios2nommu/statfs.h
11085 +++ linux/include/asm-nios2nommu/statfs.h
11087 +#ifndef _NIOS2NOMMU_STATFS_H
11088 +#define _NIOS2NOMMU_STATFS_H
11090 +/*--------------------------------------------------------------------
11092 + * include/asm-nios2nommu/statfs.h
11094 + * Derived from M68knommu
11096 + * Copyright (C) 2004 Microtronix Datacom Ltd
11098 + * This program is free software; you can redistribute it and/or modify
11099 + * it under the terms of the GNU General Public License as published by
11100 + * the Free Software Foundation; either version 2 of the License, or
11101 + * (at your option) any later version.
11103 + * This program is distributed in the hope that it will be useful,
11104 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11105 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11106 + * GNU General Public License for more details.
11109 + * Jan/20/2004 dgt NiosII
11111 + ---------------------------------------------------------------------*/
11114 +#include <asm-generic/statfs.h>
11116 +#endif /* _NIOS2NOMMU_STATFS_H */
11117 --- linux/include/asm-nios2nommu/stat.h
11118 +++ linux/include/asm-nios2nommu/stat.h
11120 +#ifndef _ASMNIOS2NOMMU_STAT_H
11121 +#define _ASMNIOS2NOMMU_STAT_H
11123 +/*--------------------------------------------------------------------
11125 + * include/asm-nios2nommu/stat.h
11127 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11129 + * Copyright (C) 2004 Microtronix Datacom Ltd
11131 + * This program is free software; you can redistribute it and/or modify
11132 + * it under the terms of the GNU General Public License as published by
11133 + * the Free Software Foundation; either version 2 of the License, or
11134 + * (at your option) any later version.
11136 + * This program is distributed in the hope that it will be useful,
11137 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11138 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11139 + * GNU General Public License for more details.
11142 + * Jan/20/2004 dgt NiosII
11144 + ---------------------------------------------------------------------*/
11147 +struct __old_kernel_stat {
11148 + unsigned short st_dev;
11149 + unsigned short st_ino;
11150 + unsigned short st_mode;
11151 + unsigned short st_nlink;
11152 + unsigned short st_uid;
11153 + unsigned short st_gid;
11154 + unsigned short st_rdev;
11155 + unsigned long st_size;
11156 + unsigned long st_atime;
11157 + unsigned long st_mtime;
11158 + unsigned long st_ctime;
11162 + unsigned short st_dev;
11163 + unsigned short __pad1;
11164 + unsigned long st_ino;
11165 + unsigned short st_mode;
11166 + unsigned short st_nlink;
11167 + unsigned short st_uid;
11168 + unsigned short st_gid;
11169 + unsigned short st_rdev;
11170 + unsigned short __pad2;
11171 + unsigned long st_size;
11172 + unsigned long st_blksize;
11173 + unsigned long st_blocks;
11174 + unsigned long st_atime;
11175 + unsigned long __unused1;
11176 + unsigned long st_mtime;
11177 + unsigned long __unused2;
11178 + unsigned long st_ctime;
11179 + unsigned long __unused3;
11180 + unsigned long __unused4;
11181 + unsigned long __unused5;
11184 +/* This matches struct stat64 in glibc2.1, hence the absolutely
11185 + * insane amounts of padding around dev_t's.
11188 + unsigned long long st_dev;
11189 + unsigned char __pad1[4];
11191 +#define STAT64_HAS_BROKEN_ST_INO 1
11192 + unsigned long __st_ino;
11194 + unsigned int st_mode;
11195 + unsigned int st_nlink;
11197 + unsigned long st_uid;
11198 + unsigned long st_gid;
11200 + unsigned long long st_rdev;
11201 + unsigned char __pad3[4];
11203 + long long st_size;
11204 + unsigned long st_blksize;
11206 + unsigned long __pad4; /* future possible st_blocks high bits */
11207 + unsigned long st_blocks; /* Number 512-byte blocks allocated. */
11209 + unsigned long st_atime;
11210 + unsigned long st_atime_nsec;
11212 + unsigned long st_mtime;
11213 + unsigned long st_mtime_nsec;
11215 + unsigned long st_ctime;
11216 + unsigned long st_ctime_nsec;
11218 + unsigned long long st_ino;
11222 --- linux/include/asm-nios2nommu/string.h
11223 +++ linux/include/asm-nios2nommu/string.h
11225 +#ifndef __NIOS_STRING_H__
11226 +#define __NIOS_STRING_H__
11228 +/*--------------------------------------------------------------------
11230 + * include/asm-nios2nommu/string.h
11232 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11234 + * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
11235 + * Copyright (C) 2004 Microtronix Datacom Ltd
11237 + * This program is free software; you can redistribute it and/or modify
11238 + * it under the terms of the GNU General Public License as published by
11239 + * the Free Software Foundation; either version 2 of the License, or
11240 + * (at your option) any later version.
11242 + * This program is distributed in the hope that it will be useful,
11243 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11244 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11245 + * GNU General Public License for more details.
11248 + * Jan/20/2004 dgt NiosII
11250 + ---------------------------------------------------------------------*/
11253 +#ifdef __KERNEL__ /* only set these up for kernel code */
11255 +#define __HAVE_ARCH_MEMMOVE
11256 +void * memmove(void * d, const void * s, size_t count);
11257 +#define __HAVE_ARCH_MEMCPY
11258 +extern void * memcpy(void *d, const void *s, size_t count);
11259 +#define __HAVE_ARCH_MEMSET
11260 +extern void * memset(void * s,int c,size_t count);
11263 +#define __HAVE_ARCH_BCOPY
11264 +#define __HAVE_ARCH_STRLEN
11267 +#endif /* KERNEL */
11269 +#endif /* !(__NIOS_STRING_H__) */
11270 --- linux/include/asm-nios2nommu/system.h
11271 +++ linux/include/asm-nios2nommu/system.h
11274 + * Taken from the m68k.
11276 + * Copyright (C) 2004, Microtronix Datacom Ltd.
11278 + * All rights reserved.
11280 + * This program is free software; you can redistribute it and/or modify
11281 + * it under the terms of the GNU General Public License as published by
11282 + * the Free Software Foundation; either version 2 of the License, or
11283 + * (at your option) any later version.
11285 + * This program is distributed in the hope that it will be useful, but
11286 + * WITHOUT ANY WARRANTY; without even the implied warranty of
11287 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
11288 + * NON INFRINGEMENT. See the GNU General Public License for more
11291 + * You should have received a copy of the GNU General Public License
11292 + * along with this program; if not, write to the Free Software
11293 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
11297 +#ifndef _NIOS2NOMMU_SYSTEM_H
11298 +#define _NIOS2NOMMU_SYSTEM_H
11300 +// #include <linux/config.h> /* get configuration macros */
11301 +#include <linux/linkage.h>
11302 +#include <asm/segment.h>
11303 +#include <asm/entry.h>
11304 +#include <asm/nios.h>
11307 + * switch_to(n) should switch tasks to task ptr, first checking that
11308 + * ptr isn't the current task, in which case it does nothing. This
11309 + * also clears the TS-flag if the task we switched to has used the
11310 + * math co-processor latest.
11315 +asmlinkage void resume(void);
11316 +#define switch_to(prev,next,last) \
11319 + __asm__ __volatile__( \
11322 + "call resume\n" \
11325 + : "r" (prev), "r" (next) \
11326 + : "r4","r5","r7","r8","ra"); \
11327 + (last) = _last; \
11330 +#define local_irq_enable() __asm__ __volatile__ ( \
11331 + "rdctl r8, status\n" \
11332 + "ori r8, r8, 1\n" \
11333 + "wrctl status, r8\n" \
11336 +#define local_irq_disable() __asm__ __volatile__ ( \
11337 + "rdctl r8, status\n" \
11338 + "andi r8, r8, 0xfffe\n" \
11339 + "wrctl status, r8\n" \
11342 +#define local_save_flags(x) __asm__ __volatile__ ( \
11343 + "rdctl r8, status\n" \
11345 + :"=r" (x) : : "r8", "memory")
11347 +#define local_irq_restore(x) __asm__ __volatile__ ( \
11349 + "wrctl status, r8\n" \
11350 + : :"r" (x) : "memory")
11352 +/* For spinlocks etc */
11353 +#define local_irq_save(x) do { local_save_flags(x); local_irq_disable(); } while (0)
11355 +#define irqs_disabled() \
11357 + unsigned long flags; \
11358 + local_save_flags(flags); \
11359 + ((flags & NIOS2_STATUS_PIE_MSK) == 0x0); \
11362 +#define iret() __asm__ __volatile__ ("eret": : :"memory", "ea")
11365 + * Force strict CPU ordering.
11366 + * Not really required on m68k...
11368 +#define nop() asm volatile ("nop"::)
11369 +#define mb() asm volatile ("" : : :"memory")
11370 +#define rmb() asm volatile ("" : : :"memory")
11371 +#define wmb() asm volatile ("" : : :"memory")
11372 +#define set_rmb(var, value) do { xchg(&var, value); } while (0)
11373 +#define set_mb(var, value) set_rmb(var, value)
11374 +#define set_wmb(var, value) do { var = value; wmb(); } while (0)
11377 +#define smp_mb() mb()
11378 +#define smp_rmb() rmb()
11379 +#define smp_wmb() wmb()
11380 +#define smp_read_barrier_depends() read_barrier_depends()
11382 +#define smp_mb() barrier()
11383 +#define smp_rmb() barrier()
11384 +#define smp_wmb() barrier()
11385 +#define smp_read_barrier_depends() do { } while(0)
11388 +#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
11389 +#define tas(ptr) (xchg((ptr),1))
11391 +struct __xchg_dummy { unsigned long a[100]; };
11392 +#define __xg(x) ((volatile struct __xchg_dummy *)(x))
11394 +static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
11396 + unsigned long tmp, flags;
11398 + local_irq_save(flags);
11402 + __asm__ __volatile__( \
11405 + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
11408 + __asm__ __volatile__( \
11411 + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
11414 + __asm__ __volatile__( \
11417 + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
11420 + local_irq_restore(flags);
11425 + * Atomic compare and exchange. Compare OLD with MEM, if identical,
11426 + * store NEW in MEM. Return the initial value in MEM. Success is
11427 + * indicated by comparing RETURN with OLD.
11429 +#define __HAVE_ARCH_CMPXCHG 1
11431 +static __inline__ unsigned long
11432 +cmpxchg(volatile int *p, int old, int new)
11434 + unsigned long flags;
11437 + local_irq_save(flags);
11438 + if ((prev = *p) == old)
11440 + local_irq_restore(flags);
11444 +#endif /* _NIOS2NOMMU_SYSTEM_H */
11445 --- linux/include/asm-nios2nommu/termbits.h
11446 +++ linux/include/asm-nios2nommu/termbits.h
11448 +#ifndef __ARCH_NIOS_TERMBITS_H__
11449 +#define __ARCH_NIOS_TERMBITS_H__
11451 +/*--------------------------------------------------------------------
11453 + * include/asm-nios2nommu/termbits.h
11455 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11457 + * Copyright (C) 2004 Microtronix Datacom Ltd
11459 + * This program is free software; you can redistribute it and/or modify
11460 + * it under the terms of the GNU General Public License as published by
11461 + * the Free Software Foundation; either version 2 of the License, or
11462 + * (at your option) any later version.
11464 + * This program is distributed in the hope that it will be useful,
11465 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11466 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11467 + * GNU General Public License for more details.
11470 + * Jan/20/2004 dgt NiosII
11472 + ---------------------------------------------------------------------*/
11475 +#include <linux/posix_types.h>
11477 +typedef unsigned char cc_t;
11478 +typedef unsigned int speed_t;
11479 +typedef unsigned int tcflag_t;
11483 + tcflag_t c_iflag; /* input mode flags */
11484 + tcflag_t c_oflag; /* output mode flags */
11485 + tcflag_t c_cflag; /* control mode flags */
11486 + tcflag_t c_lflag; /* local mode flags */
11487 + cc_t c_line; /* line discipline */
11488 + cc_t c_cc[NCCS]; /* control characters */
11491 +/* c_cc characters */
11504 +#define VREPRINT 12
11505 +#define VDISCARD 13
11506 +#define VWERASE 14
11511 +/* c_iflag bits */
11512 +#define IGNBRK 0000001
11513 +#define BRKINT 0000002
11514 +#define IGNPAR 0000004
11515 +#define PARMRK 0000010
11516 +#define INPCK 0000020
11517 +#define ISTRIP 0000040
11518 +#define INLCR 0000100
11519 +#define IGNCR 0000200
11520 +#define ICRNL 0000400
11521 +#define IUCLC 0001000
11522 +#define IXON 0002000
11523 +#define IXANY 0004000
11524 +#define IXOFF 0010000
11525 +#define IMAXBEL 0020000
11526 +#define IUTF8 0040000
11528 +/* c_oflag bits */
11529 +#define OPOST 0000001
11530 +#define OLCUC 0000002
11531 +#define ONLCR 0000004
11532 +#define OCRNL 0000010
11533 +#define ONOCR 0000020
11534 +#define ONLRET 0000040
11535 +#define OFILL 0000100
11536 +#define OFDEL 0000200
11537 +#define NLDLY 0000400
11538 +#define NL0 0000000
11539 +#define NL1 0000400
11540 +#define CRDLY 0003000
11541 +#define CR0 0000000
11542 +#define CR1 0001000
11543 +#define CR2 0002000
11544 +#define CR3 0003000
11545 +#define TABDLY 0014000
11546 +#define TAB0 0000000
11547 +#define TAB1 0004000
11548 +#define TAB2 0010000
11549 +#define TAB3 0014000
11550 +#define XTABS 0014000
11551 +#define BSDLY 0020000
11552 +#define BS0 0000000
11553 +#define BS1 0020000
11554 +#define VTDLY 0040000
11555 +#define VT0 0000000
11556 +#define VT1 0040000
11557 +#define FFDLY 0100000
11558 +#define FF0 0000000
11559 +#define FF1 0100000
11561 +/* c_cflag bit meaning */
11562 +#define CBAUD 0010017
11563 +#define B0 0000000 /* hang up */
11564 +#define B50 0000001
11565 +#define B75 0000002
11566 +#define B110 0000003
11567 +#define B134 0000004
11568 +#define B150 0000005
11569 +#define B200 0000006
11570 +#define B300 0000007
11571 +#define B600 0000010
11572 +#define B1200 0000011
11573 +#define B1800 0000012
11574 +#define B2400 0000013
11575 +#define B4800 0000014
11576 +#define B9600 0000015
11577 +#define B19200 0000016
11578 +#define B38400 0000017
11579 +#define EXTA B19200
11580 +#define EXTB B38400
11581 +#define CSIZE 0000060
11582 +#define CS5 0000000
11583 +#define CS6 0000020
11584 +#define CS7 0000040
11585 +#define CS8 0000060
11586 +#define CSTOPB 0000100
11587 +#define CREAD 0000200
11588 +#define PARENB 0000400
11589 +#define PARODD 0001000
11590 +#define HUPCL 0002000
11591 +#define CLOCAL 0004000
11592 +#define CBAUDEX 0010000
11593 +#define B57600 0010001
11594 +#define B115200 0010002
11595 +#define B230400 0010003
11596 +#define B460800 0010004
11597 +#define B500000 0010005
11598 +#define B576000 0010006
11599 +#define B921600 0010007
11600 +#define B1000000 0010010
11601 +#define B1152000 0010011
11602 +#define B1500000 0010012
11603 +#define B2000000 0010013
11604 +#define B2500000 0010014
11605 +#define B3000000 0010015
11606 +#define B3500000 0010016
11607 +#define B4000000 0010017
11608 +#define CIBAUD 002003600000 /* input baud rate (not used) */
11609 +#define CMSPAR 010000000000 /* mark or space (stick) parity */
11610 +#define CRTSCTS 020000000000 /* flow control */
11612 +/* c_lflag bits */
11613 +#define ISIG 0000001
11614 +#define ICANON 0000002
11615 +#define XCASE 0000004
11616 +#define ECHO 0000010
11617 +#define ECHOE 0000020
11618 +#define ECHOK 0000040
11619 +#define ECHONL 0000100
11620 +#define NOFLSH 0000200
11621 +#define TOSTOP 0000400
11622 +#define ECHOCTL 0001000
11623 +#define ECHOPRT 0002000
11624 +#define ECHOKE 0004000
11625 +#define FLUSHO 0010000
11626 +#define PENDIN 0040000
11627 +#define IEXTEN 0100000
11630 +/* tcflow() and TCXONC use these */
11636 +/* tcflush() and TCFLSH use these */
11637 +#define TCIFLUSH 0
11638 +#define TCOFLUSH 1
11639 +#define TCIOFLUSH 2
11641 +/* tcsetattr uses these */
11643 +#define TCSADRAIN 1
11644 +#define TCSAFLUSH 2
11646 +#endif /* __ARCH_NIOS_TERMBITS_H__ */
11647 --- linux/include/asm-nios2nommu/termios.h
11648 +++ linux/include/asm-nios2nommu/termios.h
11650 +#ifndef _NIOS_TERMIOS_H
11651 +#define _NIOS_TERMIOS_H
11653 +/*--------------------------------------------------------------------
11655 + * include/asm-nios2nommu/termios.h
11657 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11659 + * Copyright (C) 2004 Microtronix Datacom Ltd
11661 + * This program is free software; you can redistribute it and/or modify
11662 + * it under the terms of the GNU General Public License as published by
11663 + * the Free Software Foundation; either version 2 of the License, or
11664 + * (at your option) any later version.
11666 + * This program is distributed in the hope that it will be useful,
11667 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11668 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11669 + * GNU General Public License for more details.
11672 + * Jan/20/2004 dgt NiosII
11674 + ---------------------------------------------------------------------*/
11677 +#include <asm/termbits.h>
11678 +#include <asm/ioctls.h>
11681 + unsigned short ws_row;
11682 + unsigned short ws_col;
11683 + unsigned short ws_xpixel;
11684 + unsigned short ws_ypixel;
11689 + unsigned short c_iflag; /* input mode flags */
11690 + unsigned short c_oflag; /* output mode flags */
11691 + unsigned short c_cflag; /* control mode flags */
11692 + unsigned short c_lflag; /* local mode flags */
11693 + unsigned char c_line; /* line discipline */
11694 + unsigned char c_cc[NCC]; /* control characters */
11698 +/* intr=^C quit=^| erase=del kill=^U
11699 + eof=^D vtime=\0 vmin=\1 sxtc=\0
11700 + start=^Q stop=^S susp=^Z eol=\0
11701 + reprint=^R discard=^U werase=^W lnext=^V
11704 +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
11708 +#define TIOCM_LE 0x001
11709 +#define TIOCM_DTR 0x002
11710 +#define TIOCM_RTS 0x004
11711 +#define TIOCM_ST 0x008
11712 +#define TIOCM_SR 0x010
11713 +#define TIOCM_CTS 0x020
11714 +#define TIOCM_CAR 0x040
11715 +#define TIOCM_RNG 0x080
11716 +#define TIOCM_DSR 0x100
11717 +#define TIOCM_CD TIOCM_CAR
11718 +#define TIOCM_RI TIOCM_RNG
11719 +#define TIOCM_OUT1 0x2000
11720 +#define TIOCM_OUT2 0x4000
11721 +#define TIOCM_LOOP 0x8000
11723 +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
11725 +/* line disciplines */
11732 +#define N_X25 6 /* X.25 async */
11734 +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */
11735 +#define N_R3964 9 /* Reserved for Simatic R3964 module */
11736 +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */
11737 +#define N_IRDA 11 /* Linux IrDa - http://irda.sourceforge.net/ */
11738 +#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */
11739 +#define N_HDLC 13 /* synchronous HDLC */
11740 +#define N_SYNC_PPP 14
11741 +#define N_HCI 15 /* Bluetooth HCI UART */
11746 + * Translate a "termio" structure into a "termios". Ugh.
11748 +#define user_termio_to_kernel_termios(termios, termio) \
11750 + unsigned short tmp; \
11751 + get_user(tmp, &(termio)->c_iflag); \
11752 + (termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \
11753 + get_user(tmp, &(termio)->c_oflag); \
11754 + (termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \
11755 + get_user(tmp, &(termio)->c_cflag); \
11756 + (termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \
11757 + get_user(tmp, &(termio)->c_lflag); \
11758 + (termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \
11759 + get_user((termios)->c_line, &(termio)->c_line); \
11760 + copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
11764 + * Translate a "termios" structure into a "termio". Ugh.
11766 +#define kernel_termios_to_user_termio(termio, termios) \
11768 + put_user((termios)->c_iflag, &(termio)->c_iflag); \
11769 + put_user((termios)->c_oflag, &(termio)->c_oflag); \
11770 + put_user((termios)->c_cflag, &(termio)->c_cflag); \
11771 + put_user((termios)->c_lflag, &(termio)->c_lflag); \
11772 + put_user((termios)->c_line, &(termio)->c_line); \
11773 + copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
11776 +#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
11777 +#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
11779 +#endif /* __KERNEL__ */
11781 +#endif /* _NIOS_TERMIOS_H */
11782 --- linux/include/asm-nios2nommu/thread_info.h
11783 +++ linux/include/asm-nios2nommu/thread_info.h
11785 +/* thread_info.h: niosnommu low-level thread information
11786 + * adapted from the m68knommu
11788 + * Copyright (C) 2004 Microtronix Datacom Ltd.
11789 + * Copyright (C) 2002 Microtronix Datacom
11791 + * - Incorporating suggestions made by Linus Torvalds and Dave Miller
11793 + * All rights reserved.
11795 + * This program is free software; you can redistribute it and/or modify
11796 + * it under the terms of the GNU General Public License as published by
11797 + * the Free Software Foundation; either version 2 of the License, or
11798 + * (at your option) any later version.
11800 + * This program is distributed in the hope that it will be useful, but
11801 + * WITHOUT ANY WARRANTY; without even the implied warranty of
11802 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
11803 + * NON INFRINGEMENT. See the GNU General Public License for more
11806 + * You should have received a copy of the GNU General Public License
11807 + * along with this program; if not, write to the Free Software
11808 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
11812 +#ifndef _ASM_THREAD_INFO_H
11813 +#define _ASM_THREAD_INFO_H
11815 +#include <asm/page.h>
11819 +#ifndef __ASSEMBLY__
11822 + * low level task data.
11824 +struct thread_info {
11825 + struct task_struct *task; /* main task structure */
11826 + struct exec_domain *exec_domain; /* execution domain */
11827 + unsigned long flags; /* low level flags */
11828 + int cpu; /* cpu we're on */
11829 + int preempt_count; /* 0 => preemptable, <0 => BUG*/
11830 + struct restart_block restart_block;
11834 + * macros/functions for gaining access to the thread information structure
11836 +#define INIT_THREAD_INFO(tsk) \
11839 + .exec_domain = &default_exec_domain, \
11842 + .preempt_count = 1, \
11843 + .restart_block = { \
11844 + .fn = do_no_restart_syscall, \
11848 +#define init_thread_info (init_thread_union.thread_info)
11849 +#define init_stack (init_thread_union.stack)
11852 +/* how to get the thread information struct from C
11853 + usable only in supervisor mode */
11854 +static inline struct thread_info *current_thread_info(void)
11856 + struct thread_info *ti;
11857 + __asm__ __volatile__(
11859 + "and %0, %0, %1\n"
11861 + : "r" (~(THREAD_SIZE-1))
11866 +/* thread information allocation */
11867 +#define alloc_thread_info(tsk) ((struct thread_info *) \
11868 + __get_free_pages(GFP_KERNEL, 1))
11869 +#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
11870 +#define put_thread_info(ti) put_task_struct((ti)->task)
11872 +#define PREEMPT_ACTIVE 0x4000000
11875 + * thread information flag bit numbers
11877 +#define TIF_SYSCALL_TRACE 0 /* syscall trace active */
11878 +#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */
11879 +#define TIF_SIGPENDING 2 /* signal pending */
11880 +#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
11881 +#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling
11882 + TIF_NEED_RESCHED */
11883 +#define TIF_MEMDIE 5
11885 +/* as above, but as bit values */
11886 +#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
11887 +#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
11888 +#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
11889 +#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
11890 +#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
11892 +#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
11894 +#else /* __ASSEMBLY__ */
11896 +/* how to get the thread information struct from ASM
11897 + usable only in supervisor mode */
11898 +.macro GET_THREAD_INFO reg
11899 +.if THREAD_SIZE & 0xffff0000
11900 + andhi \reg, sp, %hi(~(THREAD_SIZE-1))
11902 + addi \reg, r0, %lo(~(THREAD_SIZE-1))
11903 + and \reg, \reg, sp
11907 +#endif /* __ASSEMBLY__ */
11909 +#endif /* __KERNEL__ */
11911 +#endif /* _ASM_THREAD_INFO_H */
11912 --- linux/include/asm-nios2nommu/timer_struct.h
11913 +++ linux/include/asm-nios2nommu/timer_struct.h
11916 +// ----------------------------------------------
11917 +// Timer Peripheral
11919 +// Timer Registers
11920 +typedef volatile struct
11922 + int np_timerstatus; // read only, 2 bits (any write to clear TO)
11923 + int np_timercontrol; // write/readable, 4 bits
11924 + int np_timerperiodl; // write/readable, 16 bits
11925 + int np_timerperiodh; // write/readable, 16 bits
11926 + int np_timersnapl; // read only, 16 bits
11927 + int np_timersnaph; // read only, 16 bits
11930 +// Timer Register Bits
11933 + np_timerstatus_run_bit = 1, // timer is running
11934 + np_timerstatus_to_bit = 0, // timer has timed out
11936 + np_timercontrol_stop_bit = 3, // stop the timer
11937 + np_timercontrol_start_bit = 2, // start the timer
11938 + np_timercontrol_cont_bit = 1, // continous mode
11939 + np_timercontrol_ito_bit = 0, // enable time out interrupt
11941 + np_timerstatus_run_mask = (1<<1), // timer is running
11942 + np_timerstatus_to_mask = (1<<0), // timer has timed out
11944 + np_timercontrol_stop_mask = (1<<3), // stop the timer
11945 + np_timercontrol_start_mask = (1<<2), // start the timer
11946 + np_timercontrol_cont_mask = (1<<1), // continous mode
11947 + np_timercontrol_ito_mask = (1<<0) // enable time out interrupt
11951 +int nr_timer_milliseconds(void); // Starts on first call, hogs timer1.
11953 --- linux/include/asm-nios2nommu/timex.h
11954 +++ linux/include/asm-nios2nommu/timex.h
11956 +#ifndef _ASMNIOS2NOMMU_TIMEX_H
11957 +#define _ASMNIOS2NOMMU_TIMEX_H
11959 +/*--------------------------------------------------------------------
11961 + * include/asm-nios2nommu/timex.h
11963 + * timex specifications
11965 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11967 + * Copyright (C) 2004 Microtronix Datacom Ltd
11969 + * This program is free software; you can redistribute it and/or modify
11970 + * it under the terms of the GNU General Public License as published by
11971 + * the Free Software Foundation; either version 2 of the License, or
11972 + * (at your option) any later version.
11974 + * This program is distributed in the hope that it will be useful,
11975 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11976 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11977 + * GNU General Public License for more details.
11980 + * Jan/20/2004 dgt NiosII
11982 + ---------------------------------------------------------------------*/
11985 +#include <asm/nios.h>
11988 +#define CLOCK_TICK_RATE nasys_clock_freq /* Underlying HZ */
11990 +#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
11992 +#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
11993 + (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
11994 + << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
11996 +typedef unsigned long cycles_t;
11998 +static inline cycles_t get_cycles(void)
12004 --- linux/include/asm-nios2nommu/tlbflush.h
12005 +++ linux/include/asm-nios2nommu/tlbflush.h
12007 +#ifndef _NIOS2NOMMU_TLBFLUSH_H
12008 +#define _NIOS2NOMMU_TLBFLUSH_H
12010 +/*--------------------------------------------------------------------
12012 + * include/asm-nios2nommu/tlbflush.h
12014 + * Ported from m68knommu.
12016 + * Copyright (C) 2003 Microtronix Datacom Ltd.
12018 + * All rights reserved.
12020 + * This program is free software; you can redistribute it and/or modify
12021 + * it under the terms of the GNU General Public License as published by
12022 + * the Free Software Foundation; either version 2 of the License, or
12023 + * (at your option) any later version.
12025 + * This program is distributed in the hope that it will be useful, but
12026 + * WITHOUT ANY WARRANTY; without even the implied warranty of
12027 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
12028 + * NON INFRINGEMENT. See the GNU General Public License for more
12031 + * You should have received a copy of the GNU General Public License
12032 + * along with this program; if not, write to the Free Software
12033 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
12036 + * Jan/20/2004 dgt NiosII
12038 + ---------------------------------------------------------------------*/
12040 +#include <asm/setup.h>
12043 + * flush all user-space atc entries.
12045 +static inline void __flush_tlb(void)
12050 +static inline void __flush_tlb_one(unsigned long addr)
12055 +#define flush_tlb() __flush_tlb()
12058 + * flush all atc entries (both kernel and user-space entries).
12060 +static inline void flush_tlb_all(void)
12065 +static inline void flush_tlb_mm(struct mm_struct *mm)
12070 +static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
12075 +static inline void flush_tlb_range(struct mm_struct *mm,
12076 + unsigned long start, unsigned long end)
12081 +extern inline void flush_tlb_kernel_page(unsigned long addr)
12086 +extern inline void flush_tlb_pgtables(struct mm_struct *mm,
12087 + unsigned long start, unsigned long end)
12092 +#endif /* _NIOS2NOMMU_TLBFLUSH_H */
12093 --- linux/include/asm-nios2nommu/tlb.h
12094 +++ linux/include/asm-nios2nommu/tlb.h
12096 +#ifndef __NIOS_TLB_H__
12097 +#define __NIOS_TLB_H__
12099 +/*--------------------------------------------------------------------
12101 + * include/asm-nios2nommu/tlb.h
12103 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
12105 + * Copyright (C) 2003 Microtronix Datacom Ltd
12106 + * Copyright (C) 2002 NEC Corporation
12107 + * Copyright (C) 2002 Miles Bader <miles@gnu.org>
12109 + * This program is free software; you can redistribute it and/or modify
12110 + * it under the terms of the GNU General Public License as published by
12111 + * the Free Software Foundation; either version 2 of the License, or
12112 + * (at your option) any later version.
12114 + * This program is distributed in the hope that it will be useful,
12115 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12116 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12117 + * GNU General Public License for more details.
12120 + * Written by Miles Bader <miles@gnu.org>
12121 + * Jan/20/2004 dgt NiosII
12123 + ---------------------------------------------------------------------*/
12125 +#define tlb_flush(tlb) ((void)0)
12127 +#include <asm-generic/tlb.h>
12129 +#endif /* __NIOS_TLB_H__ */
12131 --- linux/include/asm-nios2nommu/topology.h
12132 +++ linux/include/asm-nios2nommu/topology.h
12134 +#ifndef _ASM_NIOS2NOMMU_TOPOLOGY_H
12135 +#define _ASM_NIOS2NOMMU_TOPOLOGY_H
12137 +/*--------------------------------------------------------------------
12139 + * include/asm-nios2nommu/topology.h
12141 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
12143 + * Copyright (C) 2004 Microtronix Datacom Ltd
12145 + * This program is free software; you can redistribute it and/or modify
12146 + * it under the terms of the GNU General Public License as published by
12147 + * the Free Software Foundation; either version 2 of the License, or
12148 + * (at your option) any later version.
12150 + * This program is distributed in the hope that it will be useful,
12151 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12152 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12153 + * GNU General Public License for more details.
12156 + * Jan/20/2004 dgt NiosII
12158 + ---------------------------------------------------------------------*/
12161 +#include <asm-generic/topology.h>
12163 +#endif /* _ASM_NIOS2NOMMU_TOPOLOGY_H */
12164 --- linux/include/asm-nios2nommu/traps.h
12165 +++ linux/include/asm-nios2nommu/traps.h
12168 + * Copyright (C) 2004, Microtronix Datacom Ltd.
12170 + * All rights reserved.
12172 + * This program is free software; you can redistribute it and/or modify
12173 + * it under the terms of the GNU General Public License as published by
12174 + * the Free Software Foundation; either version 2 of the License, or
12175 + * (at your option) any later version.
12177 + * This program is distributed in the hope that it will be useful, but
12178 + * WITHOUT ANY WARRANTY; without even the implied warranty of
12179 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
12180 + * NON INFRINGEMENT. See the GNU General Public License for more
12183 + * You should have received a copy of the GNU General Public License
12184 + * along with this program; if not, write to the Free Software
12185 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
12188 +#ifndef _NIOS2_TRAPS_H
12189 +#define _NIOS2_TRAPS_H
12191 +#define TRAP_ID_SYSCALL 0
12192 +#define TRAP_ID_APPDEBUG 1
12193 +#endif /* !(_NIOS2_TRAPS_H) */
12194 --- linux/include/asm-nios2nommu/types.h
12195 +++ linux/include/asm-nios2nommu/types.h
12197 +#ifndef _NIOS_TYPES_H
12198 +#define _NIOS_TYPES_H
12200 +/*--------------------------------------------------------------------
12202 + * include/asm-nios2nommu/types.h
12204 + * Derived from m68knommu
12206 + * Copyright (C) 2004 Microtronix Datacom Ltd
12208 + * This program is free software; you can redistribute it and/or modify
12209 + * it under the terms of the GNU General Public License as published by
12210 + * the Free Software Foundation; either version 2 of the License, or
12211 + * (at your option) any later version.
12213 + * This program is distributed in the hope that it will be useful,
12214 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12215 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12216 + * GNU General Public License for more details.
12219 + * Jan/20/2004 dgt NiosII
12221 + ---------------------------------------------------------------------*/
12225 + * This file is never included by application software unless
12226 + * explicitly requested (e.g., via linux/types.h) in which case the
12227 + * application is Linux specific so (user-) name space pollution is
12228 + * not a major issue. However, for interoperability, libraries still
12229 + * need to be careful to avoid a name clashes.
12232 +#ifndef __ASSEMBLY__
12234 +typedef unsigned short umode_t;
12237 + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
12238 + * header files exported to user space
12241 +typedef __signed__ char __s8;
12242 +typedef unsigned char __u8;
12244 +typedef __signed__ short __s16;
12245 +typedef unsigned short __u16;
12247 +typedef __signed__ int __s32;
12248 +typedef unsigned int __u32;
12250 +#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
12251 +typedef __signed__ long long __s64;
12252 +typedef unsigned long long __u64;
12255 +#endif /* __ASSEMBLY__ */
12258 + * These aren't exported outside the kernel to avoid name space clashes
12262 +#define BITS_PER_LONG 32
12264 +#ifndef __ASSEMBLY__
12266 +typedef signed char s8;
12267 +typedef unsigned char u8;
12269 +typedef signed short s16;
12270 +typedef unsigned short u16;
12272 +typedef signed int s32;
12273 +typedef unsigned int u32;
12275 +typedef signed long long s64;
12276 +typedef unsigned long long u64;
12278 +/* DMA addresses are always 32-bits wide */
12280 +typedef u32 dma_addr_t;
12281 +typedef u32 dma64_addr_t;
12283 +typedef unsigned short kmem_bufctl_t;
12285 +#endif /* __ASSEMBLY__ */
12287 +#endif /* __KERNEL__ */
12289 +#endif /* _NIOS_TYPES_H */
12290 --- linux/include/asm-nios2nommu/uaccess.h
12291 +++ linux/include/asm-nios2nommu/uaccess.h
12293 +#ifndef __NIOS2NOMMU_UACCESS_H
12294 +#define __NIOS2NOMMU_UACCESS_H
12296 +/*--------------------------------------------------------------------
12298 + * asm-nios2nommu/uaccess.h
12300 + * User space memory access functions
12302 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
12304 + * Copyright (C) 2004 Microtronix Datacom Ltd
12306 + * This program is free software; you can redistribute it and/or modify
12307 + * it under the terms of the GNU General Public License as published by
12308 + * the Free Software Foundation; either version 2 of the License, or
12309 + * (at your option) any later version.
12311 + * This program is distributed in the hope that it will be useful,
12312 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12313 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12314 + * GNU General Public License for more details.
12317 + * Ported from asm-m68knommu/uaccess.h --wentao
12318 + * Jan/20/2004 dgt NiosII
12320 + ---------------------------------------------------------------------*/
12323 +#include <linux/sched.h>
12324 +#include <linux/mm.h>
12325 +#include <asm/segment.h>
12326 +#include <asm/nios.h>
12328 +#define VERIFY_READ 0
12329 +#define VERIFY_WRITE 1
12331 +#define access_ok(type,addr,size) _access_ok((unsigned long)(addr),(size))
12333 +static inline int _access_ok(unsigned long addr, unsigned long size)
12335 + return (((unsigned long)addr < (unsigned long)nasys_program_mem_end) &&
12336 + (((unsigned long)addr >= (unsigned long)nasys_program_mem)));
12339 +extern inline int verify_area(int type, const void * addr, unsigned long size)
12341 + return access_ok(type,addr,size)?0:-EFAULT;
12345 + * The exception table consists of pairs of addresses: the first is the
12346 + * address of an instruction that is allowed to fault, and the second is
12347 + * the address at which the program should continue. No registers are
12348 + * modified, so it is entirely up to the continuation code to figure out
12351 + * All the routines below use bits of fixup code that are out of line
12352 + * with the main instruction path. This means when everything is well,
12353 + * we don't even have to jump over them. Further, they do not intrude
12354 + * on our cache or tlb entries.
12357 +#define ARCH_HAS_SEARCH_EXTABLE
12360 +struct exception_table_entry
12362 + unsigned long insn, fixup;
12365 +/* Returns 0 if exception not found and fixup otherwise. */
12366 +extern unsigned long search_exception_table(unsigned long);
12370 + * These are the main single-value transfer routines. They automatically
12371 + * use the right size if we just have the right pointer type.
12374 +#define put_user(x, ptr) \
12376 + int __pu_err = 0; \
12377 + typeof(*(ptr)) __pu_val = (x); \
12378 + switch (sizeof (*(ptr))) { \
12383 + memcpy(ptr, &__pu_val, sizeof (*(ptr))); \
12386 + __pu_err = __put_user_bad(); \
12391 +#define __put_user(x, ptr) put_user(x, ptr)
12393 +extern int __put_user_bad(void);
12396 + * Tell gcc we read from memory instead of writing: this is because
12397 + * we do not write to any memory gcc knows about, so there are no
12398 + * aliasing issues.
12401 +#define __ptr(x) ((unsigned long *)(x))
12403 +#define get_user(x, ptr) \
12405 + int __gu_err = 0; \
12406 + typeof(*(ptr)) __gu_val = 0; \
12407 + switch (sizeof(*(ptr))) { \
12412 + memcpy(&__gu_val, ptr, sizeof (*(ptr))); \
12416 + __gu_err = __get_user_bad(); \
12419 + (x) = __gu_val; \
12422 +#define __get_user(x, ptr) get_user(x, ptr)
12424 +extern int __get_user_bad(void);
12426 +#define copy_from_user(to, from, n) (memcpy(to, from, n), 0)
12427 +#define copy_to_user(to, from, n) (memcpy(to, from, n), 0)
12429 +#define __copy_from_user(to, from, n) copy_from_user(to, from, n)
12430 +#define __copy_to_user(to, from, n) copy_to_user(to, from, n)
12431 +#define __copy_to_user_inatomic __copy_to_user
12432 +#define __copy_from_user_inatomic __copy_from_user
12434 +#define copy_to_user_ret(to,from,n,retval) ({ if (copy_to_user(to,from,n)) return retval; })
12436 +#define copy_from_user_ret(to,from,n,retval) ({ if (copy_from_user(to,from,n)) return retval; })
12439 + * Copy a null terminated string from userspace.
12442 +static inline long
12443 +strncpy_from_user(char *dst, const char *src, long count)
12446 + strncpy(dst, src, count);
12447 + for (tmp = dst; *tmp && count > 0; tmp++, count--)
12449 + return(tmp - dst); /* DAVIDM should we count a NUL ? check getname */
12453 + * Return the size of a string (including the ending 0)
12455 + * Return 0 on exception, a value greater than N if too long
12457 +static inline long strnlen_user(const char *src, long n)
12459 + return(strlen(src) + 1); /* DAVIDM make safer */
12462 +#define strlen_user(str) strnlen_user(str, 32767)
12468 +static inline unsigned long
12469 +clear_user(void *to, unsigned long n)
12471 + memset(to, 0, n);
12475 +#endif /* _NIOS2NOMMU_UACCESS_H */
12476 --- linux/include/asm-nios2nommu/uart_struct.h
12477 +++ linux/include/asm-nios2nommu/uart_struct.h
12481 +typedef volatile struct
12483 + int np_uartrxdata; // Read-only, 8-bit
12484 + int np_uarttxdata; // Write-only, 8-bit
12485 + int np_uartstatus; // Read-only, 8-bit
12486 + int np_uartcontrol; // Read/Write, 9-bit
12487 + int np_uartdivisor; // Read/Write, 16-bit, optional
12488 + int np_uartendofpacket; // Read/Write, end-of-packet character
12491 +// UART Status Register Bits
12494 + np_uartstatus_eop_bit = 12,
12495 + np_uartstatus_cts_bit = 11,
12496 + np_uartstatus_dcts_bit = 10,
12497 + np_uartstatus_e_bit = 8,
12498 + np_uartstatus_rrdy_bit = 7,
12499 + np_uartstatus_trdy_bit = 6,
12500 + np_uartstatus_tmt_bit = 5,
12501 + np_uartstatus_toe_bit = 4,
12502 + np_uartstatus_roe_bit = 3,
12503 + np_uartstatus_brk_bit = 2,
12504 + np_uartstatus_fe_bit = 1,
12505 + np_uartstatus_pe_bit = 0,
12507 + np_uartstatus_eop_mask = (1<<12),
12508 + np_uartstatus_cts_mask = (1<<11),
12509 + np_uartstatus_dcts_mask = (1<<10),
12510 + np_uartstatus_e_mask = (1<<8),
12511 + np_uartstatus_rrdy_mask = (1<<7),
12512 + np_uartstatus_trdy_mask = (1<<6),
12513 + np_uartstatus_tmt_mask = (1<<5),
12514 + np_uartstatus_toe_mask = (1<<4),
12515 + np_uartstatus_roe_mask = (1<<3),
12516 + np_uartstatus_brk_mask = (1<<2),
12517 + np_uartstatus_fe_mask = (1<<1),
12518 + np_uartstatus_pe_mask = (1<<0)
12521 +// UART Control Register Bits
12524 + np_uartcontrol_ieop_bit = 12,
12525 + np_uartcontrol_rts_bit = 11,
12526 + np_uartcontrol_idcts_bit = 10,
12527 + np_uartcontrol_tbrk_bit = 9,
12528 + np_uartcontrol_ie_bit = 8,
12529 + np_uartcontrol_irrdy_bit = 7,
12530 + np_uartcontrol_itrdy_bit = 6,
12531 + np_uartcontrol_itmt_bit = 5,
12532 + np_uartcontrol_itoe_bit = 4,
12533 + np_uartcontrol_iroe_bit = 3,
12534 + np_uartcontrol_ibrk_bit = 2,
12535 + np_uartcontrol_ife_bit = 1,
12536 + np_uartcontrol_ipe_bit = 0,
12538 + np_uartcontrol_ieop_mask = (1<<12),
12539 + np_uartcontrol_rts_mask = (1<<11),
12540 + np_uartcontrol_idcts_mask = (1<<10),
12541 + np_uartcontrol_tbrk_mask = (1<<9),
12542 + np_uartcontrol_ie_mask = (1<<8),
12543 + np_uartcontrol_irrdy_mask = (1<<7),
12544 + np_uartcontrol_itrdy_mask = (1<<6),
12545 + np_uartcontrol_itmt_mask = (1<<5),
12546 + np_uartcontrol_itoe_mask = (1<<4),
12547 + np_uartcontrol_iroe_mask = (1<<3),
12548 + np_uartcontrol_ibrk_mask = (1<<2),
12549 + np_uartcontrol_ife_mask = (1<<1),
12550 + np_uartcontrol_ipe_mask = (1<<0)
12554 +int nr_uart_rxchar(np_uart *uartBase); // 0 for default UART
12555 +void nr_uart_txcr(void);
12556 +void nr_uart_txchar(int c,np_uart *uartBase); // 0 for default UART
12557 +void nr_uart_txhex(int x); // 16 or 32 bits
12558 +void nr_uart_txhex16(short x);
12559 +void nr_uart_txhex32(long x);
12560 +void nr_uart_txstring(char *s);
12562 --- linux/include/asm-nios2nommu/ucontext.h
12563 +++ linux/include/asm-nios2nommu/ucontext.h
12565 +#ifndef _NIOSKNOMMU_UCONTEXT_H
12566 +#define _NIOSKNOMMU_UCONTEXT_H
12568 +/*--------------------------------------------------------------------
12570 + * include/asm-nios2nommu/ucontext.h
12572 + * Derived from M68knommu
12574 + * Copyright (C) 2004 Microtronix Datacom Ltd
12576 + * This program is free software; you can redistribute it and/or modify
12577 + * it under the terms of the GNU General Public License as published by
12578 + * the Free Software Foundation; either version 2 of the License, or
12579 + * (at your option) any later version.
12581 + * This program is distributed in the hope that it will be useful,
12582 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12583 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12584 + * GNU General Public License for more details.
12587 + * Jan/20/2004 dgt NiosII
12589 + ---------------------------------------------------------------------*/
12592 +typedef int greg_t;
12594 +typedef greg_t gregset_t[NGREG];
12597 +typedef struct fpregset {
12601 + int f_fpregs[8][3];
12607 + int status_extension;
12610 + fpregset_t fpregs;
12614 +#define MCONTEXT_VERSION 2
12617 + unsigned long uc_flags;
12618 + struct ucontext *uc_link;
12619 + stack_t uc_stack;
12620 + struct mcontext uc_mcontext;
12622 + unsigned long uc_filler[80];
12624 + sigset_t uc_sigmask; /* mask last for extensibility */
12628 --- linux/include/asm-nios2nommu/unaligned.h
12629 +++ linux/include/asm-nios2nommu/unaligned.h
12631 +#ifndef __NIOS_UNALIGNED_H
12632 +#define __NIOS_UNALIGNED_H
12634 +/*--------------------------------------------------------------------
12636 + * include/asm-nios2nommu/unaligned.h
12638 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
12640 + * Copyright (C) 2004 Microtronix Datacom Ltd
12642 + * This program is free software; you can redistribute it and/or modify
12643 + * it under the terms of the GNU General Public License as published by
12644 + * the Free Software Foundation; either version 2 of the License, or
12645 + * (at your option) any later version.
12647 + * This program is distributed in the hope that it will be useful,
12648 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12649 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12650 + * GNU General Public License for more details.
12653 + * Jan/20/2004 dgt NiosII
12655 + ---------------------------------------------------------------------*/
12659 + * The nios cannot do unaligned accesses itself.
12662 +#define get_unaligned(ptr) ({ \
12663 + typeof((*(ptr))) x; \
12664 + memcpy(&x, (void*)ptr, sizeof(*(ptr))); \
12668 +#define put_unaligned(val, ptr) ({ \
12669 + typeof((*(ptr))) x = val; \
12670 + memcpy((void*)ptr, &x, sizeof(*(ptr))); \
12673 +#endif /* __NIOS_UNALIGNED_H */
12674 --- linux/include/asm-nios2nommu/unistd.h
12675 +++ linux/include/asm-nios2nommu/unistd.h
12677 +#ifndef _ASM_NIOS_UNISTD_H_
12678 +#define _ASM_NIOS_UNISTD_H_
12680 +/*--------------------------------------------------------------------
12682 + * include/asm-nios2nommu/unistd.h
12684 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
12686 + * Copyright (C) 2004 Microtronix Datacom Ltd
12688 + * This program is free software; you can redistribute it and/or modify
12689 + * it under the terms of the GNU General Public License as published by
12690 + * the Free Software Foundation; either version 2 of the License, or
12691 + * (at your option) any later version.
12693 + * This program is distributed in the hope that it will be useful,
12694 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12695 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12696 + * GNU General Public License for more details.
12699 + * //vic - kernel_thread moved to process.c
12700 + * Jan/20/2004 dgt NiosII
12702 + ---------------------------------------------------------------------*/
12705 +#include <asm/traps.h>
12707 +/* TRAP isr expects the trap# (syscall=#TRAP_ID_SYSCALL) in r2,
12708 + * the syscall # in r3, and arguments in r4, r5, ...
12709 + * Return argument expected in r2.
12712 +#define __NR_restart_syscall 0
12713 +#define __NR_exit 1
12714 +#define __NR_fork 2
12715 +#define __NR_read 3
12716 +#define __NR_write 4
12717 +#define __NR_open 5
12718 +#define __NR_close 6
12719 +#define __NR_waitpid 7
12720 +#define __NR_creat 8
12721 +#define __NR_link 9
12722 +#define __NR_unlink 10
12723 +#define __NR_execve 11
12724 +#define __NR_chdir 12
12725 +#define __NR_time 13
12726 +#define __NR_mknod 14
12727 +#define __NR_chmod 15
12728 +#define __NR_chown 16
12729 +#define __NR_break 17
12730 +#define __NR_oldstat 18
12731 +#define __NR_lseek 19
12732 +#define __NR_getpid 20
12733 +#define __NR_mount 21
12734 +#define __NR_umount 22
12735 +#define __NR_setuid 23
12736 +#define __NR_getuid 24
12737 +#define __NR_stime 25
12738 +#define __NR_ptrace 26
12739 +#define __NR_alarm 27
12740 +#define __NR_oldfstat 28
12741 +#define __NR_pause 29
12742 +#define __NR_utime 30
12743 +#define __NR_stty 31
12744 +#define __NR_gtty 32
12745 +#define __NR_access 33
12746 +#define __NR_nice 34
12747 +#define __NR_ftime 35
12748 +#define __NR_sync 36
12749 +#define __NR_kill 37
12750 +#define __NR_rename 38
12751 +#define __NR_mkdir 39
12752 +#define __NR_rmdir 40
12753 +#define __NR_dup 41
12754 +#define __NR_pipe 42
12755 +#define __NR_times 43
12756 +#define __NR_prof 44
12757 +#define __NR_brk 45
12758 +#define __NR_setgid 46
12759 +#define __NR_getgid 47
12760 +#define __NR_signal 48
12761 +#define __NR_geteuid 49
12762 +#define __NR_getegid 50
12763 +#define __NR_acct 51
12764 +#define __NR_umount2 52 //vic #define __NR_phys 52
12765 +#define __NR_lock 53
12766 +#define __NR_ioctl 54
12767 +#define __NR_fcntl 55
12768 +#define __NR_mpx 56
12769 +#define __NR_setpgid 57
12770 +#define __NR_ulimit 58
12771 +#define __NR_oldolduname 59
12772 +#define __NR_umask 60
12773 +#define __NR_chroot 61
12774 +#define __NR_ustat 62
12775 +#define __NR_dup2 63
12776 +#define __NR_getppid 64
12777 +#define __NR_getpgrp 65
12778 +#define __NR_setsid 66
12779 +#define __NR_sigaction 67
12780 +#define __NR_sgetmask 68
12781 +#define __NR_ssetmask 69
12782 +#define __NR_setreuid 70
12783 +#define __NR_setregid 71
12784 +#define __NR_sigsuspend 72
12785 +#define __NR_sigpending 73
12786 +#define __NR_sethostname 74
12787 +#define __NR_setrlimit 75
12788 +#define __NR_getrlimit 76
12789 +#define __NR_getrusage 77
12790 +#define __NR_gettimeofday 78
12791 +#define __NR_settimeofday 79
12792 +#define __NR_getgroups 80
12793 +#define __NR_setgroups 81
12794 +#define __NR_select 82
12795 +#define __NR_symlink 83
12796 +#define __NR_oldlstat 84
12797 +#define __NR_readlink 85
12798 +#define __NR_uselib 86
12799 +#define __NR_swapon 87
12800 +#define __NR_reboot 88
12801 +#define __NR_readdir 89
12802 +#define __NR_mmap 90
12803 +#define __NR_munmap 91
12804 +#define __NR_truncate 92
12805 +#define __NR_ftruncate 93
12806 +#define __NR_fchmod 94
12807 +#define __NR_fchown 95
12808 +#define __NR_getpriority 96
12809 +#define __NR_setpriority 97
12810 +#define __NR_profil 98
12811 +#define __NR_statfs 99
12812 +#define __NR_fstatfs 100
12813 +#define __NR_ioperm 101
12814 +#define __NR_socketcall 102
12815 +#define __NR_syslog 103
12816 +#define __NR_setitimer 104
12817 +#define __NR_getitimer 105
12818 +#define __NR_stat 106
12819 +#define __NR_lstat 107
12820 +#define __NR_fstat 108
12821 +#define __NR_olduname 109
12822 +#define __NR_iopl /* 110 */ not supported
12823 +#define __NR_vhangup 111
12824 +#define __NR_idle /* 112 */ Obsolete
12825 +#define __NR_vm86 /* 113 */ not supported
12826 +#define __NR_wait4 114
12827 +#define __NR_swapoff 115
12828 +#define __NR_sysinfo 116
12829 +#define __NR_ipc 117
12830 +#define __NR_fsync 118
12831 +#define __NR_sigreturn 119
12832 +#define __NR_clone 120
12833 +#define __NR_setdomainname 121
12834 +#define __NR_uname 122
12835 +#define __NR_cacheflush 123
12836 +#define __NR_adjtimex 124
12837 +#define __NR_mprotect 125
12838 +#define __NR_sigprocmask 126
12839 +#define __NR_create_module 127
12840 +#define __NR_init_module 128
12841 +#define __NR_delete_module 129
12842 +#define __NR_get_kernel_syms 130
12843 +#define __NR_quotactl 131
12844 +#define __NR_getpgid 132
12845 +#define __NR_fchdir 133
12846 +#define __NR_bdflush 134
12847 +#define __NR_sysfs 135
12848 +#define __NR_personality 136
12849 +#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
12850 +#define __NR_setfsuid 138
12851 +#define __NR_setfsgid 139
12852 +#define __NR__llseek 140
12853 +#define __NR_getdents 141
12854 +#define __NR__newselect 142
12855 +#define __NR_flock 143
12856 +#define __NR_msync 144
12857 +#define __NR_readv 145
12858 +#define __NR_writev 146
12859 +#define __NR_getsid 147
12860 +#define __NR_fdatasync 148
12861 +#define __NR__sysctl 149
12862 +#define __NR_mlock 150
12863 +#define __NR_munlock 151
12864 +#define __NR_mlockall 152
12865 +#define __NR_munlockall 153
12866 +#define __NR_sched_setparam 154
12867 +#define __NR_sched_getparam 155
12868 +#define __NR_sched_setscheduler 156
12869 +#define __NR_sched_getscheduler 157
12870 +#define __NR_sched_yield 158
12871 +#define __NR_sched_get_priority_max 159
12872 +#define __NR_sched_get_priority_min 160
12873 +#define __NR_sched_rr_get_interval 161
12874 +#define __NR_nanosleep 162
12875 +#define __NR_mremap 163
12876 +#define __NR_setresuid 164
12877 +#define __NR_getresuid 165
12878 +#define __NR_getpagesize 166
12879 +#define __NR_query_module 167
12880 +#define __NR_poll 168
12881 +#define __NR_nfsservctl 169
12882 +#define __NR_setresgid 170
12883 +#define __NR_getresgid 171
12884 +#define __NR_prctl 172
12885 +#define __NR_rt_sigreturn 173
12886 +#define __NR_rt_sigaction 174
12887 +#define __NR_rt_sigprocmask 175
12888 +#define __NR_rt_sigpending 176
12889 +#define __NR_rt_sigtimedwait 177
12890 +#define __NR_rt_sigqueueinfo 178
12891 +#define __NR_rt_sigsuspend 179
12892 +#define __NR_pread 180
12893 +#define __NR_pwrite 181
12894 +#define __NR_lchown 182
12895 +#define __NR_getcwd 183
12896 +#define __NR_capget 184
12897 +#define __NR_capset 185
12898 +#define __NR_sigaltstack 186
12899 +#define __NR_sendfile 187
12900 +#define __NR_getpmsg 188 /* some people actually want streams */
12901 +#define __NR_putpmsg 189 /* some people actually want streams */
12902 +#define __NR_vfork 190
12903 +#define __NR_ugetrlimit 191
12904 +#define __NR_mmap2 192
12905 +#define __NR_truncate64 193
12906 +#define __NR_ftruncate64 194
12907 +#define __NR_stat64 195
12908 +#define __NR_lstat64 196
12909 +#define __NR_fstat64 197
12910 +#define __NR_chown32 198
12911 +#define __NR_getuid32 199
12912 +#define __NR_getgid32 200
12913 +#define __NR_geteuid32 201
12914 +#define __NR_getegid32 202
12915 +#define __NR_setreuid32 203
12916 +#define __NR_setregid32 204
12917 +#define __NR_getgroups32 205
12918 +#define __NR_setgroups32 206
12919 +#define __NR_fchown32 207
12920 +#define __NR_setresuid32 208
12921 +#define __NR_getresuid32 209
12922 +#define __NR_setresgid32 210
12923 +#define __NR_getresgid32 211
12924 +#define __NR_lchown32 212
12925 +#define __NR_setuid32 213
12926 +#define __NR_setgid32 214
12927 +#define __NR_setfsuid32 215
12928 +#define __NR_setfsgid32 216
12929 +#define __NR_pivot_root 217
12932 +#define __NR_getdents64 220
12933 +#define __NR_gettid 221
12934 +#define __NR_tkill 222
12935 +#define __NR_setxattr 223
12936 +#define __NR_lsetxattr 224
12937 +#define __NR_fsetxattr 225
12938 +#define __NR_getxattr 226
12939 +#define __NR_lgetxattr 227
12940 +#define __NR_fgetxattr 228
12941 +#define __NR_listxattr 229
12942 +#define __NR_llistxattr 230
12943 +#define __NR_flistxattr 231
12944 +#define __NR_removexattr 232
12945 +#define __NR_lremovexattr 233
12946 +#define __NR_fremovexattr 234
12947 +#define __NR_futex 235
12948 +#define __NR_sendfile64 236
12949 +#define __NR_mincore 237
12950 +#define __NR_madvise 238
12951 +#define __NR_fcntl64 239
12952 +#define __NR_readahead 240
12953 +#define __NR_io_setup 241
12954 +#define __NR_io_destroy 242
12955 +#define __NR_io_getevents 243
12956 +#define __NR_io_submit 244
12957 +#define __NR_io_cancel 245
12958 +#define __NR_fadvise64 246
12959 +#define __NR_exit_group 247
12960 +#define __NR_lookup_dcookie 248
12961 +#define __NR_epoll_create 249
12962 +#define __NR_epoll_ctl 250
12963 +#define __NR_epoll_wait 251
12964 +#define __NR_remap_file_pages 252
12965 +#define __NR_set_tid_address 253
12966 +#define __NR_timer_create 254
12967 +#define __NR_timer_settime 255
12968 +#define __NR_timer_gettime 256
12969 +#define __NR_timer_getoverrun 257
12970 +#define __NR_timer_delete 258
12971 +#define __NR_clock_settime 259
12972 +#define __NR_clock_gettime 260
12973 +#define __NR_clock_getres 261
12974 +#define __NR_clock_nanosleep 262
12975 +#define __NR_statfs64 263
12976 +#define __NR_fstatfs64 264
12977 +#define __NR_tgkill 265
12978 +#define __NR_utimes 266
12979 +#define __NR_fadvise64_64 267
12980 +#define __NR_mbind 268
12981 +#define __NR_get_mempolicy 269
12982 +#define __NR_set_mempolicy 270
12983 +#define __NR_mq_open 271
12984 +#define __NR_mq_unlink 272
12985 +#define __NR_mq_timedsend 273
12986 +#define __NR_mq_timedreceive 274
12987 +#define __NR_mq_notify 275
12988 +#define __NR_mq_getsetattr 276
12989 +#define __NR_waitid 277
12990 +#define __NR_sys_setaltroot 278
12991 +#define __NR_add_key 279
12992 +#define __NR_request_key 280
12993 +#define __NR_keyctl 281
12995 +#define NR_syscalls 282
12997 +/* user-visible error numbers are in the range -1 - -122: see
12998 + <asm-nios2nommu/errno.h> */
13000 +#define __syscall_return(type, res) \
13002 + if ((unsigned long)(res) >= (unsigned long)(-125)) { \
13004 + /* avoid using res which is declared to be in \
13005 + register r2; errno might expand to a function \
13006 + call and clobber it. */ \
13008 + int __err = -(res); \
13012 + return (type) (res); \
13015 +#define _syscall0(type,name) \
13020 + __asm__ __volatile__ ( \
13024 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
13025 + " movi r3, %1\n\t" /* __NR_##name */ \
13028 + " mov %0, r2\n\t" /* syscall rtn */ \
13032 + : "=r" (__res) /* %0 */ \
13034 + : "i" (__NR_##name) /* %1 */ \
13035 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
13037 + : "r2" /* Clobbered */ \
13038 + , "r3" /* Clobbered */ \
13041 +__syscall_return(type,__res); \
13044 +//;dgt2;tmp;can we RELY on syscall1 arg a
13045 +//;dgt2;tmp; already being in r4 ?
13046 +#define _syscall1(type,name,atype,a) \
13047 +type name(atype a) \
13051 + __asm__ __volatile__ ( \
13055 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
13056 + " movi r3, %1\n\t" /* __NR_##name */ \
13057 + " mov r4, %3\n\t" /* (long) a */ \
13060 + " mov %0, r2\n\t" /* syscall rtn */ \
13064 + : "=r" (__res) /* %0 */ \
13066 + : "i" (__NR_##name) /* %1 */ \
13067 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
13068 + , "r" ((long) a) /* %3 */ \
13070 + : "r2" /* Clobbered */ \
13071 + , "r3" /* Clobbered */ \
13072 + , "r4" /* Clobbered */ \
13075 +__syscall_return(type,__res); \
13078 +//;dgt2;tmp;can we RELY on syscall2 args a,b
13079 +//;dgt2;tmp; already being in r4,r5 ?
13080 +#define _syscall2(type,name,atype,a,btype,b) \
13081 +type name(atype a,btype b) \
13085 + __asm__ __volatile__ ( \
13089 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
13090 + " movi r3, %1\n\t" /* __NR_##name */ \
13091 + " mov r4, %3\n\t" /* (long) a */ \
13092 + " mov r5, %4\n\t" /* (long) b */ \
13095 + " mov %0, r2\n\t" /* syscall rtn */ \
13099 + : "=r" (__res) /* %0 */ \
13101 + : "i" (__NR_##name) /* %1 */ \
13102 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
13103 + , "r" ((long) a) /* %3 */ \
13104 + , "r" ((long) b) /* %4 */ \
13106 + : "r2" /* Clobbered */ \
13107 + , "r3" /* Clobbered */ \
13108 + , "r4" /* Clobbered */ \
13109 + , "r5" /* Clobbered */ \
13112 +__syscall_return(type,__res); \
13115 +//;dgt2;tmp;can we RELY on syscall3 args a,b,c
13116 +//;dgt2;tmp; already being in r4,r5,r6 ?
13117 +#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
13118 +type name(atype a,btype b,ctype c) \
13122 + __asm__ __volatile__ ( \
13126 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
13127 + " movi r3, %1\n\t" /* __NR_##name */ \
13128 + " mov r4, %3\n\t" /* (long) a */ \
13129 + " mov r5, %4\n\t" /* (long) b */ \
13130 + " mov r6, %5\n\t" /* (long) c */ \
13133 + " mov %0, r2\n\t" /* syscall rtn */ \
13137 + : "=r" (__res) /* %0 */ \
13139 + : "i" (__NR_##name) /* %1 */ \
13140 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
13141 + , "r" ((long) a) /* %3 */ \
13142 + , "r" ((long) b) /* %4 */ \
13143 + , "r" ((long) c) /* %5 */ \
13145 + : "r2" /* Clobbered */ \
13146 + , "r3" /* Clobbered */ \
13147 + , "r4" /* Clobbered */ \
13148 + , "r5" /* Clobbered */ \
13149 + , "r6" /* Clobbered */ \
13152 +__syscall_return(type,__res); \
13155 +//;dgt2;tmp;can we RELY on syscall4 args a,b,c,d
13156 +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
13157 +#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
13158 +type name (atype a, btype b, ctype c, dtype d) \
13162 + __asm__ __volatile__ ( \
13166 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
13167 + " movi r3, %1\n\t" /* __NR_##name */ \
13168 + " mov r4, %3\n\t" /* (long) a */ \
13169 + " mov r5, %4\n\t" /* (long) b */ \
13170 + " mov r6, %5\n\t" /* (long) c */ \
13171 + " mov r7, %6\n\t" /* (long) d */ \
13174 + " mov %0, r2\n\t" /* syscall rtn */ \
13178 + : "=r" (__res) /* %0 */ \
13180 + : "i" (__NR_##name) /* %1 */ \
13181 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
13182 + , "r" ((long) a) /* %3 */ \
13183 + , "r" ((long) b) /* %4 */ \
13184 + , "r" ((long) c) /* %5 */ \
13185 + , "r" ((long) d) /* %6 */ \
13187 + : "r2" /* Clobbered */ \
13188 + , "r3" /* Clobbered */ \
13189 + , "r4" /* Clobbered */ \
13190 + , "r5" /* Clobbered */ \
13191 + , "r6" /* Clobbered */ \
13192 + , "r7" /* Clobbered */ \
13195 +__syscall_return(type,__res); \
13198 +//;dgt2;tmp;can we RELY on syscall5 args a,b,c,d
13199 +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
13200 +#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
13201 +type name (atype a,btype b,ctype c,dtype d,etype e) \
13205 + __asm__ __volatile__ ( \
13209 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
13210 + " movi r3, %1\n\t" /* __NR_##name */ \
13211 + " mov r4, %3\n\t" /* (long) a */ \
13212 + " mov r5, %4\n\t" /* (long) b */ \
13213 + " mov r6, %5\n\t" /* (long) c */ \
13214 + " mov r7, %6\n\t" /* (long) c */ \
13215 + " mov r8, %7\n\t" /* (long) e */ \
13218 + " mov %0, r2\n\t" /* syscall rtn */ \
13222 + : "=r" (__res) /* %0 */ \
13224 + : "i" (__NR_##name) /* %1 */ \
13225 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
13226 + , "r" ((long) a) /* %3 */ \
13227 + , "r" ((long) b) /* %4 */ \
13228 + , "r" ((long) c) /* %5 */ \
13229 + , "r" ((long) d) /* %6 */ \
13230 + , "r" ((long) e) /* %7 */ \
13232 + : "r2" /* Clobbered */ \
13233 + , "r3" /* Clobbered */ \
13234 + , "r4" /* Clobbered */ \
13235 + , "r5" /* Clobbered */ \
13236 + , "r6" /* Clobbered */ \
13237 + , "r7" /* Clobbered */ \
13238 + , "r8" /* Clobbered */ \
13241 +__syscall_return(type,__res); \
13244 +//;dgt2;tmp;can we RELY on syscall6 args a,b,c,d
13245 +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
13246 +#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
13247 +type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \
13251 + __asm__ __volatile__ ( \
13255 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
13256 + " movi r3, %1\n\t" /* __NR_##name */ \
13257 + " mov r4, %3\n\t" /* (long) a */ \
13258 + " mov r5, %4\n\t" /* (long) b */ \
13259 + " mov r6, %5\n\t" /* (long) c */ \
13260 + " mov r7, %6\n\t" /* (long) c */ \
13261 + " mov r8, %7\n\t" /* (long) e */ \
13262 + " mov r9, %8\n\t" /* (long) f */ \
13265 + " mov %0, r2\n\t" /* syscall rtn */ \
13269 + : "=r" (__res) /* %0 */ \
13271 + : "i" (__NR_##name) /* %1 */ \
13272 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
13273 + , "r" ((long) a) /* %3 */ \
13274 + , "r" ((long) b) /* %4 */ \
13275 + , "r" ((long) c) /* %5 */ \
13276 + , "r" ((long) d) /* %6 */ \
13277 + , "r" ((long) e) /* %7 */ \
13278 + , "r" ((long) f) /* %8 */ \
13280 + : "r2" /* Clobbered */ \
13281 + , "r3" /* Clobbered */ \
13282 + , "r4" /* Clobbered */ \
13283 + , "r5" /* Clobbered */ \
13284 + , "r6" /* Clobbered */ \
13285 + , "r7" /* Clobbered */ \
13286 + , "r8" /* Clobbered */ \
13287 + , "r9" /* Clobbered */ \
13290 +__syscall_return(type,__res); \
13294 +#define __ARCH_WANT_IPC_PARSE_VERSION
13295 +#define __ARCH_WANT_OLD_READDIR
13296 +#define __ARCH_WANT_OLD_STAT
13297 +#define __ARCH_WANT_STAT64
13298 +#define __ARCH_WANT_SYS_ALARM
13299 +#define __ARCH_WANT_SYS_GETHOSTNAME
13300 +#define __ARCH_WANT_SYS_PAUSE
13301 +#define __ARCH_WANT_SYS_SGETMASK
13302 +#define __ARCH_WANT_SYS_SIGNAL
13303 +#define __ARCH_WANT_SYS_TIME
13304 +#define __ARCH_WANT_SYS_UTIME
13305 +#define __ARCH_WANT_SYS_WAITPID
13306 +#define __ARCH_WANT_SYS_SOCKETCALL
13307 +#define __ARCH_WANT_SYS_FADVISE64
13308 +#define __ARCH_WANT_SYS_GETPGRP
13309 +#define __ARCH_WANT_SYS_LLSEEK
13310 +#define __ARCH_WANT_SYS_NICE
13311 +#define __ARCH_WANT_SYS_OLD_GETRLIMIT
13312 +#define __ARCH_WANT_SYS_OLDUMOUNT
13313 +#define __ARCH_WANT_SYS_SIGPENDING
13314 +#define __ARCH_WANT_SYS_SIGPROCMASK
13315 +#define __ARCH_WANT_SYS_RT_SIGACTION
13318 +#ifdef __KERNEL_SYSCALLS__
13321 + * we need this inline - forking from kernel space will result
13322 + * in NO COPY ON WRITE (!!!), until an execve is executed. This
13323 + * is no problem, but for the stack. This is handled by not letting
13324 + * main() use the stack at all after fork(). Thus, no function
13325 + * calls - which means inline code for fork too, as otherwise we
13326 + * would use the stack upon exit from 'fork()'.
13328 + * Actually only pause and fork are needed inline, so that there
13329 + * won't be any messing with the stack from main(), but we define
13330 + * some others too.
13332 +#define __NR__exit __NR_exit
13333 +static inline _syscall0(int,pause)
13334 +static inline _syscall0(int,sync)
13335 +static inline _syscall0(pid_t,setsid)
13336 +static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
13337 +static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
13338 +static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
13339 +static inline _syscall1(int,dup,int,fd)
13340 +static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
13341 +static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
13342 +static inline _syscall1(int,close,int,fd)
13343 +static inline _syscall1(int,_exit,int,exitcode)
13344 +static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
13345 +static inline _syscall1(int,delete_module,const char *,name)
13347 +static inline pid_t wait(int * wait_stat)
13349 + return waitpid(-1,wait_stat,0);
13355 + * "Conditional" syscalls
13357 + * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
13358 + * but it doesn't work on all toolchains, so we just do it by hand
13360 +#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
13362 +#endif /* _ASM_NIOS_UNISTD_H_ */
13363 --- linux/include/asm-nios2nommu/user.h
13364 +++ linux/include/asm-nios2nommu/user.h
13366 +#ifndef _NIOS2NOMMU_USER_H
13367 +#define _NIOS2NOMMU_USER_H
13369 +/*--------------------------------------------------------------------
13371 + * include/asm-nios2nommu/user.h
13373 + * Derived from M68knommu
13375 + * Copyright (C) 2004 Microtronix Datacom Ltd
13377 + * This program is free software; you can redistribute it and/or modify
13378 + * it under the terms of the GNU General Public License as published by
13379 + * the Free Software Foundation; either version 2 of the License, or
13380 + * (at your option) any later version.
13382 + * This program is distributed in the hope that it will be useful,
13383 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
13384 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13385 + * GNU General Public License for more details.
13388 + * Jan/20/2004 dgt NiosII
13390 + ---------------------------------------------------------------------*/
13393 +#include <asm/page.h>
13395 +/* Core file format: The core file is written in such a way that gdb
13396 + can understand it and provide useful information to the user (under
13397 + linux we use the 'trad-core' bfd). There are quite a number of
13398 + obstacles to being able to view the contents of the floating point
13399 + registers, and until these are solved you will not be able to view the
13400 + contents of them. Actually, you can read in the core file and look at
13401 + the contents of the user struct to find out what the floating point
13402 + registers contain.
13403 + The actual file contents are as follows:
13404 + UPAGE: 1 page consisting of a user struct that tells gdb what is present
13405 + in the file. Directly after this is a copy of the task_struct, which
13406 + is currently not used by gdb, but it may come in useful at some point.
13407 + All of the registers are stored as part of the upage. The upage should
13408 + always be only one page.
13409 + DATA: The data area is stored. We use current->end_text to
13410 + current->brk to pick up all of the user variables, plus any memory
13411 + that may have been malloced. No attempt is made to determine if a page
13412 + is demand-zero or if a page is totally unused, we just cover the entire
13413 + range. All of the addresses are rounded in such a way that an integral
13414 + number of pages is written.
13415 + STACK: We need the stack information in order to get a meaningful
13416 + backtrace. We need to write the data from (esp) to
13417 + current->start_stack, so we round each of these off in order to be able
13418 + to write an integer number of pages.
13419 + The minimum core file size is 3 pages, or 12288 bytes.
13422 +struct user_m68kfp_struct {
13423 + unsigned long fpregs[8*3]; /* fp0-fp7 registers */
13424 + unsigned long fpcntl[3]; /* fp control regs */
13427 +/* This is needs more work, probably should look like gdb useage */
13428 +struct user_regs_struct {
13429 + long r1,r2,r3,r4,r5,r6,r7,r8;
13430 + long r9,r10,r11,r12,r13,r14,r15;
13431 + long r16,r17,r18,r19,r20,r21,r22,r23;
13438 + long status_extension;
13443 +/* When the kernel dumps core, it starts by dumping the user struct -
13444 + this will be used by gdb to figure out where the data and stack segments
13445 + are within the file, and what virtual addresses to use. */
13447 +/* We start with the registers, to mimic the way that "memory" is returned
13448 + from the ptrace(3,...) function. */
13449 + struct user_regs_struct regs; /* Where the registers are actually stored */
13450 +/* ptrace does not yet supply these. Someday.... */
13451 + int u_fpvalid; /* True if math co-processor being used. */
13452 + /* for this mess. Not yet used. */
13453 + struct user_m68kfp_struct m68kfp; /* Math Co-processor registers. */
13454 +/* The rest of this junk is to help gdb figure out what goes where */
13455 + unsigned long int u_tsize; /* Text segment size (pages). */
13456 + unsigned long int u_dsize; /* Data segment size (pages). */
13457 + unsigned long int u_ssize; /* Stack segment size (pages). */
13458 + unsigned long start_code; /* Starting virtual address of text. */
13459 + unsigned long start_stack; /* Starting virtual address of stack area.
13460 + This is actually the bottom of the stack,
13461 + the top of the stack is always found in the
13463 + long int signal; /* Signal that caused the core dump. */
13464 + int reserved; /* No longer used */
13465 + struct user_regs_struct *u_ar0;
13466 + /* Used by gdb to help find the values for */
13467 + /* the registers. */
13468 + struct user_m68kfp_struct* u_fpstate; /* Math Co-processor pointer. */
13469 + unsigned long magic; /* To uniquely identify a core file */
13470 + char u_comm[32]; /* User command that was responsible */
13472 +#define NBPG PAGE_SIZE
13474 +#define HOST_TEXT_START_ADDR (u.start_code)
13475 +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
13478 --- linux/include/asm-nios2nommu/virtconvert.h
13479 +++ linux/include/asm-nios2nommu/virtconvert.h
13481 +#ifndef __NIOS_VIRT_CONVERT__
13482 +#define __NIOS_VIRT_CONVERT__
13484 +/*--------------------------------------------------------------------
13486 + * include/asm-nios2nommu/virtconvert.h
13488 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
13490 + * Copyright (C) 2004 Microtronix Datacom Ltd
13492 + * This program is free software; you can redistribute it and/or modify
13493 + * it under the terms of the GNU General Public License as published by
13494 + * the Free Software Foundation; either version 2 of the License, or
13495 + * (at your option) any later version.
13497 + * This program is distributed in the hope that it will be useful,
13498 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
13499 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13500 + * GNU General Public License for more details.
13503 + * Jan/20/2004 dgt NiosII
13505 + ---------------------------------------------------------------------*/
13509 + * Macros used for converting between virtual and physical mappings.
13514 +// #include <linux/config.h>
13515 +#include <asm/setup.h>
13516 +#include <asm/page.h>
13518 +#define mm_ptov(vaddr) ((void *) (vaddr))
13519 +#define mm_vtop(vaddr) ((unsigned long) (vaddr))
13520 +#define phys_to_virt(vaddr) ((void *) (vaddr))
13521 +#define virt_to_phys(vaddr) ((unsigned long) (vaddr))
13523 +#define virt_to_bus virt_to_phys
13524 +#define bus_to_virt phys_to_virt
13526 +#endif /*__KERNEL__ */
13527 +#endif /*__NIOS_VIRT_CONVERT__*/