1 --- linux/include/asm-generic/bitops.h
2 +++ linux/include/asm-generic/bitops.h
4 +#ifndef _ASM_GENERIC_BITOPS_H_
5 +#define _ASM_GENERIC_BITOPS_H_
8 + * For the benefit of those who are trying to port Linux to another
9 + * architecture, here are some C-language equivalents. You should
10 + * recode these in the native assembly language, if at all possible.
11 + * To guarantee atomicity, these routines call cli() and sti() to
12 + * disable interrupts while they operate. (You have to provide inline
13 + * routines to cli() and sti().)
15 + * Also note, these routines assume that you have 32 bit longs.
16 + * You will have to change this if you are trying to port Linux to the
17 + * Alpha architecture or to a Cray. :-)
19 + * C language equivalents written by Theodore Ts'o, 9/26/92
22 +extern __inline__ int set_bit(int nr,long * addr)
27 + mask = 1 << (nr & 0x1f);
29 + retval = (mask & *addr) != 0;
35 +extern __inline__ int clear_bit(int nr, long * addr)
40 + mask = 1 << (nr & 0x1f);
42 + retval = (mask & *addr) != 0;
48 +extern __inline__ int test_bit(int nr, const unsigned long * addr)
53 + mask = 1 << (nr & 0x1f);
54 + return ((mask & *addr) != 0);
58 + * fls: find last bit set.
61 +#define fls(x) generic_fls(x)
66 + * ffs: find first bit set. This is defined the same way as
67 + * the libc and compiler builtin ffs routines, therefore
68 + * differs in spirit from the above ffz (man ffs).
71 +#define ffs(x) generic_ffs(x)
74 + * hweightN: returns the hamming weight (i.e. the number
75 + * of bits set) of a N-bit word
78 +#define hweight32(x) generic_hweight32(x)
79 +#define hweight16(x) generic_hweight16(x)
80 +#define hweight8(x) generic_hweight8(x)
82 +#endif /* __KERNEL__ */
84 +#endif /* _ASM_GENERIC_BITOPS_H */
85 --- linux/include/asm-generic/bug.h
86 +++ linux/include/asm-generic/bug.h
88 +#ifndef _ASM_GENERIC_BUG_H
89 +#define _ASM_GENERIC_BUG_H
91 +#include <linux/compiler.h>
92 +// #include <linux/config.h>
94 +#ifndef HAVE_ARCH_BUG
96 + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
101 +#ifndef HAVE_ARCH_PAGE_BUG
102 +#define PAGE_BUG(page) do { \
103 + printk("page BUG for page at %p\n", page); \
108 +#ifndef HAVE_ARCH_BUG_ON
109 +#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
112 +#ifndef HAVE_ARCH_WARN_ON
113 +#define WARN_ON(condition) do { \
114 + if (unlikely((condition)!=0)) { \
115 + printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
122 --- linux/include/asm-generic/cpumask.h
123 +++ linux/include/asm-generic/cpumask.h
125 +#ifndef __ASM_GENERIC_CPUMASK_H
126 +#define __ASM_GENERIC_CPUMASK_H
128 +// #include <linux/config.h>
129 +#include <linux/kernel.h>
130 +#include <linux/threads.h>
131 +#include <linux/types.h>
132 +#include <linux/bitmap.h>
134 +#if NR_CPUS > BITS_PER_LONG && NR_CPUS != 1
135 +#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
139 + unsigned long mask[CPU_ARRAY_SIZE];
142 +typedef struct cpumask cpumask_t;
145 +typedef unsigned long cpumask_t;
149 +#if NR_CPUS > BITS_PER_LONG
150 +#include <asm-generic/cpumask_array.h>
152 +#include <asm-generic/cpumask_arith.h>
155 +#include <asm-generic/cpumask_up.h>
158 +#if NR_CPUS <= 4*BITS_PER_LONG
159 +#include <asm-generic/cpumask_const_value.h>
161 +#include <asm-generic/cpumask_const_reference.h>
164 +#endif /* __ASM_GENERIC_CPUMASK_H */
165 --- linux/include/asm-generic/cpumask_arith.h
166 +++ linux/include/asm-generic/cpumask_arith.h
168 +#ifndef __ASM_GENERIC_CPUMASK_ARITH_H
169 +#define __ASM_GENERIC_CPUMASK_ARITH_H
172 + * Arithmetic type -based cpu bitmaps. A single unsigned long is used
173 + * to contain the whole cpu bitmap.
176 +#define cpu_set(cpu, map) set_bit(cpu, &(map))
177 +#define cpu_clear(cpu, map) clear_bit(cpu, &(map))
178 +#define cpu_isset(cpu, map) test_bit(cpu, &(map))
179 +#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, &(map))
181 +#define cpus_and(dst,src1,src2) do { dst = (src1) & (src2); } while (0)
182 +#define cpus_or(dst,src1,src2) do { dst = (src1) | (src2); } while (0)
183 +#define cpus_clear(map) do { map = 0; } while (0)
184 +#define cpus_complement(map) do { map = ~(map); } while (0)
185 +#define cpus_equal(map1, map2) ((map1) == (map2))
186 +#define cpus_empty(map) ((map) == 0)
187 +#define cpus_addr(map) (&(map))
189 +#if BITS_PER_LONG == 32
190 +#define cpus_weight(map) hweight32(map)
191 +#elif BITS_PER_LONG == 64
192 +#define cpus_weight(map) hweight64(map)
195 +#define cpus_shift_right(dst, src, n) do { dst = (src) >> (n); } while (0)
196 +#define cpus_shift_left(dst, src, n) do { dst = (src) << (n); } while (0)
198 +#define any_online_cpu(map) \
200 + cpumask_t __tmp__; \
201 + cpus_and(__tmp__, map, cpu_online_map); \
202 + __tmp__ ? first_cpu(__tmp__) : NR_CPUS; \
205 +#define CPU_MASK_ALL (~((cpumask_t)0) >> (8*sizeof(cpumask_t) - NR_CPUS))
206 +#define CPU_MASK_NONE ((cpumask_t)0)
208 +/* only ever use this for things that are _never_ used on large boxen */
209 +#define cpus_coerce(map) ((unsigned long)(map))
210 +#define cpus_promote(map) ({ map; })
211 +#define cpumask_of_cpu(cpu) ({ ((cpumask_t)1) << (cpu); })
213 +#define first_cpu(map) __ffs(map)
214 +#define next_cpu(cpu, map) find_next_bit(&(map), NR_CPUS, cpu + 1)
216 +#endif /* __ASM_GENERIC_CPUMASK_ARITH_H */
217 --- linux/include/asm-generic/cpumask_array.h
218 +++ linux/include/asm-generic/cpumask_array.h
220 +#ifndef __ASM_GENERIC_CPUMASK_ARRAY_H
221 +#define __ASM_GENERIC_CPUMASK_ARRAY_H
224 + * Array-based cpu bitmaps. An array of unsigned longs is used to contain
225 + * the bitmap, and then contained in a structure so it may be passed by
229 +#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
231 +#define cpu_set(cpu, map) set_bit(cpu, (map).mask)
232 +#define cpu_clear(cpu, map) clear_bit(cpu, (map).mask)
233 +#define cpu_isset(cpu, map) test_bit(cpu, (map).mask)
234 +#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, (map).mask)
236 +#define cpus_and(dst,src1,src2) bitmap_and((dst).mask,(src1).mask, (src2).mask, NR_CPUS)
237 +#define cpus_or(dst,src1,src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, NR_CPUS)
238 +#define cpus_clear(map) bitmap_clear((map).mask, NR_CPUS)
239 +#define cpus_complement(map) bitmap_complement((map).mask, NR_CPUS)
240 +#define cpus_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, NR_CPUS)
241 +#define cpus_empty(map) bitmap_empty(map.mask, NR_CPUS)
242 +#define cpus_addr(map) ((map).mask)
243 +#define cpus_weight(map) bitmap_weight((map).mask, NR_CPUS)
244 +#define cpus_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, NR_CPUS)
245 +#define cpus_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, NR_CPUS)
246 +#define first_cpu(map) find_first_bit((map).mask, NR_CPUS)
247 +#define next_cpu(cpu, map) find_next_bit((map).mask, NR_CPUS, cpu + 1)
249 +/* only ever use this for things that are _never_ used on large boxen */
250 +#define cpus_coerce(map) ((map).mask[0])
251 +#define cpus_promote(map) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
252 + __cpu_mask.mask[0] = map; \
255 +#define cpumask_of_cpu(cpu) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
256 + cpu_set(cpu, __cpu_mask); \
259 +#define any_online_cpu(map) \
261 + cpumask_t __tmp__; \
262 + cpus_and(__tmp__, map, cpu_online_map); \
263 + find_first_bit(__tmp__.mask, NR_CPUS); \
268 + * um, these need to be usable as static initializers
270 +#define CPU_MASK_ALL { {[0 ... CPU_ARRAY_SIZE-1] = ~0UL} }
271 +#define CPU_MASK_NONE { {[0 ... CPU_ARRAY_SIZE-1] = 0UL} }
273 +#endif /* __ASM_GENERIC_CPUMASK_ARRAY_H */
274 --- linux/include/asm-generic/cpumask_const_reference.h
275 +++ linux/include/asm-generic/cpumask_const_reference.h
277 +#ifndef __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
278 +#define __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
280 +struct cpumask_ref {
281 + const cpumask_t *val;
284 +typedef const struct cpumask_ref cpumask_const_t;
286 +#define mk_cpumask_const(map) ((cpumask_const_t){ &(map) })
287 +#define cpu_isset_const(cpu, map) cpu_isset(cpu, *(map).val)
289 +#define cpus_and_const(dst,src1,src2) cpus_and(dst,*(src1).val,*(src2).val)
290 +#define cpus_or_const(dst,src1,src2) cpus_or(dst,*(src1).val,*(src2).val)
292 +#define cpus_equal_const(map1, map2) cpus_equal(*(map1).val, *(map2).val)
294 +#define cpus_copy_const(map1, map2) bitmap_copy((map1).mask, (map2).val->mask, NR_CPUS)
296 +#define cpus_empty_const(map) cpus_empty(*(map).val)
297 +#define cpus_weight_const(map) cpus_weight(*(map).val)
298 +#define first_cpu_const(map) first_cpu(*(map).val)
299 +#define next_cpu_const(cpu, map) next_cpu(cpu, *(map).val)
301 +/* only ever use this for things that are _never_ used on large boxen */
302 +#define cpus_coerce_const(map) cpus_coerce(*(map).val)
303 +#define any_online_cpu_const(map) any_online_cpu(*(map).val)
305 +#endif /* __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H */
306 --- linux/include/asm-generic/cpumask_const_value.h
307 +++ linux/include/asm-generic/cpumask_const_value.h
309 +#ifndef __ASM_GENERIC_CPUMASK_CONST_VALUE_H
310 +#define __ASM_GENERIC_CPUMASK_CONST_VALUE_H
312 +typedef const cpumask_t cpumask_const_t;
314 +#define mk_cpumask_const(map) (map)
315 +#define cpu_isset_const(cpu, map) cpu_isset(cpu, map)
316 +#define cpus_and_const(dst,src1,src2) cpus_and(dst, src1, src2)
317 +#define cpus_or_const(dst,src1,src2) cpus_or(dst, src1, src2)
318 +#define cpus_equal_const(map1, map2) cpus_equal(map1, map2)
319 +#define cpus_empty_const(map) cpus_empty(map)
320 +#define cpus_copy_const(map1, map2) do { map1 = (cpumask_t)map2; } while (0)
321 +#define cpus_weight_const(map) cpus_weight(map)
322 +#define first_cpu_const(map) first_cpu(map)
323 +#define next_cpu_const(cpu, map) next_cpu(cpu, map)
325 +/* only ever use this for things that are _never_ used on large boxen */
326 +#define cpus_coerce_const(map) cpus_coerce(map)
327 +#define any_online_cpu_const(map) any_online_cpu(map)
329 +#endif /* __ASM_GENERIC_CPUMASK_CONST_VALUE_H */
330 --- linux/include/asm-generic/cpumask_up.h
331 +++ linux/include/asm-generic/cpumask_up.h
333 +#ifndef __ASM_GENERIC_CPUMASK_UP_H
334 +#define __ASM_GENERIC_CPUMASK_UP_H
336 +#define cpus_coerce(map) (map)
338 +#define cpu_set(cpu, map) do { (void)(cpu); cpus_coerce(map) = 1UL; } while (0)
339 +#define cpu_clear(cpu, map) do { (void)(cpu); cpus_coerce(map) = 0UL; } while (0)
340 +#define cpu_isset(cpu, map) ((void)(cpu), cpus_coerce(map) != 0UL)
341 +#define cpu_test_and_set(cpu, map) ((void)(cpu), test_and_set_bit(0, &(map)))
343 +#define cpus_and(dst, src1, src2) \
345 + if (cpus_coerce(src1) && cpus_coerce(src2)) \
346 + cpus_coerce(dst) = 1UL; \
348 + cpus_coerce(dst) = 0UL; \
351 +#define cpus_or(dst, src1, src2) \
353 + if (cpus_coerce(src1) || cpus_coerce(src2)) \
354 + cpus_coerce(dst) = 1UL; \
356 + cpus_coerce(dst) = 0UL; \
359 +#define cpus_clear(map) do { cpus_coerce(map) = 0UL; } while (0)
361 +#define cpus_complement(map) \
363 + cpus_coerce(map) = !cpus_coerce(map); \
366 +#define cpus_equal(map1, map2) (cpus_coerce(map1) == cpus_coerce(map2))
367 +#define cpus_empty(map) (cpus_coerce(map) == 0UL)
368 +#define cpus_addr(map) (&(map))
369 +#define cpus_weight(map) (cpus_coerce(map) ? 1UL : 0UL)
370 +#define cpus_shift_right(d, s, n) do { cpus_coerce(d) = 0UL; } while (0)
371 +#define cpus_shift_left(d, s, n) do { cpus_coerce(d) = 0UL; } while (0)
372 +#define first_cpu(map) (cpus_coerce(map) ? 0 : 1)
373 +#define next_cpu(cpu, map) 1
375 +/* only ever use this for things that are _never_ used on large boxen */
376 +#define cpus_promote(map) \
378 + cpumask_t __tmp__; \
379 + cpus_coerce(__tmp__) = map; \
382 +#define cpumask_of_cpu(cpu) ((void)(cpu), cpus_promote(1))
383 +#define any_online_cpu(map) (cpus_coerce(map) ? 0 : 1)
386 + * um, these need to be usable as static initializers
388 +#define CPU_MASK_ALL 1UL
389 +#define CPU_MASK_NONE 0UL
391 +#endif /* __ASM_GENERIC_CPUMASK_UP_H */
392 --- linux/include/asm-generic/div64.h
393 +++ linux/include/asm-generic/div64.h
395 +#ifndef _ASM_GENERIC_DIV64_H
396 +#define _ASM_GENERIC_DIV64_H
398 + * Copyright (C) 2003 Bernardo Innocenti <bernie@develer.com>
399 + * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h
401 + * The semantics of do_div() are:
403 + * uint32_t do_div(uint64_t *n, uint32_t base)
405 + * uint32_t remainder = *n % base;
407 + * return remainder;
410 + * NOTE: macro parameter n is evaluated multiple times,
411 + * beware of side effects!
414 +#include <linux/types.h>
415 +#include <linux/compiler.h>
417 +#if BITS_PER_LONG == 64
419 +# define do_div(n,base) ({ \
420 + uint32_t __base = (base); \
422 + __rem = ((uint64_t)(n)) % __base; \
423 + (n) = ((uint64_t)(n)) / __base; \
427 +#elif BITS_PER_LONG == 32
429 +extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
431 +/* The unnecessary pointer compare is there
432 + * to check for type safety (n must be 64bit)
434 +# define do_div(n,base) ({ \
435 + uint32_t __base = (base); \
437 + (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \
438 + if (likely(((n) >> 32) == 0)) { \
439 + __rem = (uint32_t)(n) % __base; \
440 + (n) = (uint32_t)(n) / __base; \
442 + __rem = __div64_32(&(n), __base); \
446 +#else /* BITS_PER_LONG == ?? */
448 +# error do_div() does not yet support the C64
450 +#endif /* BITS_PER_LONG */
452 +#endif /* _ASM_GENERIC_DIV64_H */
453 --- linux/include/asm-generic/dma-mapping-broken.h
454 +++ linux/include/asm-generic/dma-mapping-broken.h
456 +#ifndef _ASM_GENERIC_DMA_MAPPING_H
457 +#define _ASM_GENERIC_DMA_MAPPING_H
459 +/* This is used for archs that do not support DMA */
462 +static inline void *
463 +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
471 +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
472 + dma_addr_t dma_handle)
477 +#endif /* _ASM_GENERIC_DMA_MAPPING_H */
478 --- linux/include/asm-generic/dma-mapping.h
479 +++ linux/include/asm-generic/dma-mapping.h
481 +/* Copyright (C) 2002 by James.Bottomley@HansenPartnership.com
483 + * Implements the generic device dma API via the existing pci_ one
484 + * for unconverted architectures
487 +#ifndef _ASM_GENERIC_DMA_MAPPING_H
488 +#define _ASM_GENERIC_DMA_MAPPING_H
490 +// #include <linux/config.h>
494 +/* we implement the API below in terms of the existing PCI one,
496 +#include <linux/pci.h>
497 +/* need struct page definitions */
498 +#include <linux/mm.h>
501 +dma_supported(struct device *dev, u64 mask)
503 + BUG_ON(dev->bus != &pci_bus_type);
505 + return pci_dma_supported(to_pci_dev(dev), mask);
509 +dma_set_mask(struct device *dev, u64 dma_mask)
511 + BUG_ON(dev->bus != &pci_bus_type);
513 + return pci_set_dma_mask(to_pci_dev(dev), dma_mask);
516 +static inline void *
517 +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
520 + BUG_ON(dev->bus != &pci_bus_type);
522 + return pci_alloc_consistent(to_pci_dev(dev), size, dma_handle);
526 +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
527 + dma_addr_t dma_handle)
529 + BUG_ON(dev->bus != &pci_bus_type);
531 + pci_free_consistent(to_pci_dev(dev), size, cpu_addr, dma_handle);
534 +static inline dma_addr_t
535 +dma_map_single(struct device *dev, void *cpu_addr, size_t size,
536 + enum dma_data_direction direction)
538 + BUG_ON(dev->bus != &pci_bus_type);
540 + return pci_map_single(to_pci_dev(dev), cpu_addr, size, (int)direction);
544 +dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
545 + enum dma_data_direction direction)
547 + BUG_ON(dev->bus != &pci_bus_type);
549 + pci_unmap_single(to_pci_dev(dev), dma_addr, size, (int)direction);
552 +static inline dma_addr_t
553 +dma_map_page(struct device *dev, struct page *page,
554 + unsigned long offset, size_t size,
555 + enum dma_data_direction direction)
557 + BUG_ON(dev->bus != &pci_bus_type);
559 + return pci_map_page(to_pci_dev(dev), page, offset, size, (int)direction);
563 +dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
564 + enum dma_data_direction direction)
566 + BUG_ON(dev->bus != &pci_bus_type);
568 + pci_unmap_page(to_pci_dev(dev), dma_address, size, (int)direction);
572 +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
573 + enum dma_data_direction direction)
575 + BUG_ON(dev->bus != &pci_bus_type);
577 + return pci_map_sg(to_pci_dev(dev), sg, nents, (int)direction);
581 +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
582 + enum dma_data_direction direction)
584 + BUG_ON(dev->bus != &pci_bus_type);
586 + pci_unmap_sg(to_pci_dev(dev), sg, nhwentries, (int)direction);
590 +dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size,
591 + enum dma_data_direction direction)
593 + BUG_ON(dev->bus != &pci_bus_type);
595 + pci_dma_sync_single_for_cpu(to_pci_dev(dev), dma_handle,
596 + size, (int)direction);
600 +dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size,
601 + enum dma_data_direction direction)
603 + BUG_ON(dev->bus != &pci_bus_type);
605 + pci_dma_sync_single_for_device(to_pci_dev(dev), dma_handle,
606 + size, (int)direction);
610 +dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
611 + enum dma_data_direction direction)
613 + BUG_ON(dev->bus != &pci_bus_type);
615 + pci_dma_sync_sg_for_cpu(to_pci_dev(dev), sg, nelems, (int)direction);
619 +dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems,
620 + enum dma_data_direction direction)
622 + BUG_ON(dev->bus != &pci_bus_type);
624 + pci_dma_sync_sg_for_device(to_pci_dev(dev), sg, nelems, (int)direction);
628 +dma_mapping_error(dma_addr_t dma_addr)
630 + return pci_dma_mapping_error(dma_addr);
637 +dma_supported(struct device *dev, u64 mask)
643 +dma_set_mask(struct device *dev, u64 dma_mask)
649 +static inline void *
650 +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
658 +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
659 + dma_addr_t dma_handle)
664 +static inline dma_addr_t
665 +dma_map_single(struct device *dev, void *cpu_addr, size_t size,
666 + enum dma_data_direction direction)
673 +dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
674 + enum dma_data_direction direction)
679 +static inline dma_addr_t
680 +dma_map_page(struct device *dev, struct page *page,
681 + unsigned long offset, size_t size,
682 + enum dma_data_direction direction)
689 +dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
690 + enum dma_data_direction direction)
696 +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
697 + enum dma_data_direction direction)
704 +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
705 + enum dma_data_direction direction)
711 +dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size,
712 + enum dma_data_direction direction)
718 +dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size,
719 + enum dma_data_direction direction)
725 +dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
726 + enum dma_data_direction direction)
732 +dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems,
733 + enum dma_data_direction direction)
739 +dma_error(dma_addr_t dma_addr)
746 +/* Now for the API extensions over the pci_ one */
748 +#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
749 +#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
750 +#define dma_is_consistent(d) (1)
753 +dma_get_cache_alignment(void)
755 + /* no easy way to get cache size on all processors, so return
756 + * the maximum possible, to be safe */
757 + return (1 << L1_CACHE_SHIFT_MAX);
761 +dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle,
762 + unsigned long offset, size_t size,
763 + enum dma_data_direction direction)
765 + /* just sync everything, that's all the pci API can do */
766 + dma_sync_single_for_cpu(dev, dma_handle, offset+size, direction);
770 +dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle,
771 + unsigned long offset, size_t size,
772 + enum dma_data_direction direction)
774 + /* just sync everything, that's all the pci API can do */
775 + dma_sync_single_for_device(dev, dma_handle, offset+size, direction);
779 +dma_cache_sync(void *vaddr, size_t size,
780 + enum dma_data_direction direction)
782 + /* could define this in terms of the dma_cache ... operations,
783 + * but if you get this on a platform, you should convert the platform
784 + * to using the generic device DMA API */
790 --- linux/include/asm-generic/errno-base.h
791 +++ linux/include/asm-generic/errno-base.h
793 +#ifndef _ASM_GENERIC_ERRNO_BASE_H
794 +#define _ASM_GENERIC_ERRNO_BASE_H
796 +#define EPERM 1 /* Operation not permitted */
797 +#define ENOENT 2 /* No such file or directory */
798 +#define ESRCH 3 /* No such process */
799 +#define EINTR 4 /* Interrupted system call */
800 +#define EIO 5 /* I/O error */
801 +#define ENXIO 6 /* No such device or address */
802 +#define E2BIG 7 /* Argument list too long */
803 +#define ENOEXEC 8 /* Exec format error */
804 +#define EBADF 9 /* Bad file number */
805 +#define ECHILD 10 /* No child processes */
806 +#define EAGAIN 11 /* Try again */
807 +#define ENOMEM 12 /* Out of memory */
808 +#define EACCES 13 /* Permission denied */
809 +#define EFAULT 14 /* Bad address */
810 +#define ENOTBLK 15 /* Block device required */
811 +#define EBUSY 16 /* Device or resource busy */
812 +#define EEXIST 17 /* File exists */
813 +#define EXDEV 18 /* Cross-device link */
814 +#define ENODEV 19 /* No such device */
815 +#define ENOTDIR 20 /* Not a directory */
816 +#define EISDIR 21 /* Is a directory */
817 +#define EINVAL 22 /* Invalid argument */
818 +#define ENFILE 23 /* File table overflow */
819 +#define EMFILE 24 /* Too many open files */
820 +#define ENOTTY 25 /* Not a typewriter */
821 +#define ETXTBSY 26 /* Text file busy */
822 +#define EFBIG 27 /* File too large */
823 +#define ENOSPC 28 /* No space left on device */
824 +#define ESPIPE 29 /* Illegal seek */
825 +#define EROFS 30 /* Read-only file system */
826 +#define EMLINK 31 /* Too many links */
827 +#define EPIPE 32 /* Broken pipe */
828 +#define EDOM 33 /* Math argument out of domain of func */
829 +#define ERANGE 34 /* Math result not representable */
832 --- linux/include/asm-generic/errno.h
833 +++ linux/include/asm-generic/errno.h
835 +#ifndef _ASM_GENERIC_ERRNO_H
836 +#define _ASM_GENERIC_ERRNO_H
838 +#include <asm-generic/errno-base.h>
840 +#define EDEADLK 35 /* Resource deadlock would occur */
841 +#define ENAMETOOLONG 36 /* File name too long */
842 +#define ENOLCK 37 /* No record locks available */
843 +#define ENOSYS 38 /* Function not implemented */
844 +#define ENOTEMPTY 39 /* Directory not empty */
845 +#define ELOOP 40 /* Too many symbolic links encountered */
846 +#define EWOULDBLOCK EAGAIN /* Operation would block */
847 +#define ENOMSG 42 /* No message of desired type */
848 +#define EIDRM 43 /* Identifier removed */
849 +#define ECHRNG 44 /* Channel number out of range */
850 +#define EL2NSYNC 45 /* Level 2 not synchronized */
851 +#define EL3HLT 46 /* Level 3 halted */
852 +#define EL3RST 47 /* Level 3 reset */
853 +#define ELNRNG 48 /* Link number out of range */
854 +#define EUNATCH 49 /* Protocol driver not attached */
855 +#define ENOCSI 50 /* No CSI structure available */
856 +#define EL2HLT 51 /* Level 2 halted */
857 +#define EBADE 52 /* Invalid exchange */
858 +#define EBADR 53 /* Invalid request descriptor */
859 +#define EXFULL 54 /* Exchange full */
860 +#define ENOANO 55 /* No anode */
861 +#define EBADRQC 56 /* Invalid request code */
862 +#define EBADSLT 57 /* Invalid slot */
864 +#define EDEADLOCK EDEADLK
866 +#define EBFONT 59 /* Bad font file format */
867 +#define ENOSTR 60 /* Device not a stream */
868 +#define ENODATA 61 /* No data available */
869 +#define ETIME 62 /* Timer expired */
870 +#define ENOSR 63 /* Out of streams resources */
871 +#define ENONET 64 /* Machine is not on the network */
872 +#define ENOPKG 65 /* Package not installed */
873 +#define EREMOTE 66 /* Object is remote */
874 +#define ENOLINK 67 /* Link has been severed */
875 +#define EADV 68 /* Advertise error */
876 +#define ESRMNT 69 /* Srmount error */
877 +#define ECOMM 70 /* Communication error on send */
878 +#define EPROTO 71 /* Protocol error */
879 +#define EMULTIHOP 72 /* Multihop attempted */
880 +#define EDOTDOT 73 /* RFS specific error */
881 +#define EBADMSG 74 /* Not a data message */
882 +#define EOVERFLOW 75 /* Value too large for defined data type */
883 +#define ENOTUNIQ 76 /* Name not unique on network */
884 +#define EBADFD 77 /* File descriptor in bad state */
885 +#define EREMCHG 78 /* Remote address changed */
886 +#define ELIBACC 79 /* Can not access a needed shared library */
887 +#define ELIBBAD 80 /* Accessing a corrupted shared library */
888 +#define ELIBSCN 81 /* .lib section in a.out corrupted */
889 +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
890 +#define ELIBEXEC 83 /* Cannot exec a shared library directly */
891 +#define EILSEQ 84 /* Illegal byte sequence */
892 +#define ERESTART 85 /* Interrupted system call should be restarted */
893 +#define ESTRPIPE 86 /* Streams pipe error */
894 +#define EUSERS 87 /* Too many users */
895 +#define ENOTSOCK 88 /* Socket operation on non-socket */
896 +#define EDESTADDRREQ 89 /* Destination address required */
897 +#define EMSGSIZE 90 /* Message too long */
898 +#define EPROTOTYPE 91 /* Protocol wrong type for socket */
899 +#define ENOPROTOOPT 92 /* Protocol not available */
900 +#define EPROTONOSUPPORT 93 /* Protocol not supported */
901 +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
902 +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
903 +#define EPFNOSUPPORT 96 /* Protocol family not supported */
904 +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
905 +#define EADDRINUSE 98 /* Address already in use */
906 +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
907 +#define ENETDOWN 100 /* Network is down */
908 +#define ENETUNREACH 101 /* Network is unreachable */
909 +#define ENETRESET 102 /* Network dropped connection because of reset */
910 +#define ECONNABORTED 103 /* Software caused connection abort */
911 +#define ECONNRESET 104 /* Connection reset by peer */
912 +#define ENOBUFS 105 /* No buffer space available */
913 +#define EISCONN 106 /* Transport endpoint is already connected */
914 +#define ENOTCONN 107 /* Transport endpoint is not connected */
915 +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
916 +#define ETOOMANYREFS 109 /* Too many references: cannot splice */
917 +#define ETIMEDOUT 110 /* Connection timed out */
918 +#define ECONNREFUSED 111 /* Connection refused */
919 +#define EHOSTDOWN 112 /* Host is down */
920 +#define EHOSTUNREACH 113 /* No route to host */
921 +#define EALREADY 114 /* Operation already in progress */
922 +#define EINPROGRESS 115 /* Operation now in progress */
923 +#define ESTALE 116 /* Stale NFS file handle */
924 +#define EUCLEAN 117 /* Structure needs cleaning */
925 +#define ENOTNAM 118 /* Not a XENIX named type file */
926 +#define ENAVAIL 119 /* No XENIX semaphores available */
927 +#define EISNAM 120 /* Is a named type file */
928 +#define EREMOTEIO 121 /* Remote I/O error */
929 +#define EDQUOT 122 /* Quota exceeded */
931 +#define ENOMEDIUM 123 /* No medium found */
932 +#define EMEDIUMTYPE 124 /* Wrong medium type */
935 --- linux/include/asm-generic/hdreg.h
936 +++ linux/include/asm-generic/hdreg.h
938 +#warning <asm/hdreg.h> is obsolete, please do not use it
940 +#ifndef __ASM_GENERIC_HDREG_H
941 +#define __ASM_GENERIC_HDREG_H
943 +typedef unsigned long ide_ioreg_t;
945 +#endif /* __ASM_GENERIC_HDREG_H */
946 --- linux/include/asm-generic/ide_iops.h
947 +++ linux/include/asm-generic/ide_iops.h
949 +/* Generic I/O and MEMIO string operations. */
951 +#define __ide_insw insw
952 +#define __ide_insl insl
953 +#define __ide_outsw outsw
954 +#define __ide_outsl outsl
956 +static __inline__ void __ide_mm_insw(void __iomem *port, void *addr, u32 count)
959 + *(u16 *)addr = readw(port);
964 +static __inline__ void __ide_mm_insl(void __iomem *port, void *addr, u32 count)
967 + *(u32 *)addr = readl(port);
972 +static __inline__ void __ide_mm_outsw(void __iomem *port, void *addr, u32 count)
975 + writew(*(u16 *)addr, port);
980 +static __inline__ void __ide_mm_outsl(void __iomem * port, void *addr, u32 count)
983 + writel(*(u32 *)addr, port);
987 --- linux/include/asm-generic/iomap.h
988 +++ linux/include/asm-generic/iomap.h
990 +#ifndef __GENERIC_IO_H
991 +#define __GENERIC_IO_H
993 +#include <linux/linkage.h>
996 + * These are the "generic" interfaces for doing new-style
997 + * memory-mapped or PIO accesses. Architectures may do
998 + * their own arch-optimized versions, these just act as
999 + * wrappers around the old-style IO register access functions:
1000 + * read[bwl]/write[bwl]/in[bwl]/out[bwl]
1002 + * Don't include this directly, include it from <asm/io.h>.
1006 + * Read/write from/to an (offsettable) iomem cookie. It might be a PIO
1007 + * access or a MMIO access, these functions don't care. The info is
1008 + * encoded in the hardware mapping set up by the mapping functions
1009 + * (or the cookie itself, depending on implementation and hw).
1011 + * The generic routines just encode the PIO/MMIO as part of the
1012 + * cookie, and coldly assume that the MMIO IO mappings are not
1013 + * in the low address range. Architectures for which this is not
1014 + * true can't use this generic implementation.
1016 +extern unsigned int fastcall ioread8(void __iomem *);
1017 +extern unsigned int fastcall ioread16(void __iomem *);
1018 +extern unsigned int fastcall ioread32(void __iomem *);
1020 +extern void fastcall iowrite8(u8, void __iomem *);
1021 +extern void fastcall iowrite16(u16, void __iomem *);
1022 +extern void fastcall iowrite32(u32, void __iomem *);
1025 + * "string" versions of the above. Note that they
1026 + * use native byte ordering for the accesses (on
1027 + * the assumption that IO and memory agree on a
1028 + * byte order, and CPU byteorder is irrelevant).
1030 + * They do _not_ update the port address. If you
1031 + * want MMIO that copies stuff laid out in MMIO
1032 + * memory across multiple ports, use "memcpy_toio()"
1035 +extern void fastcall ioread8_rep(void __iomem *port, void *buf, unsigned long count);
1036 +extern void fastcall ioread16_rep(void __iomem *port, void *buf, unsigned long count);
1037 +extern void fastcall ioread32_rep(void __iomem *port, void *buf, unsigned long count);
1039 +extern void fastcall iowrite8_rep(void __iomem *port, const void *buf, unsigned long count);
1040 +extern void fastcall iowrite16_rep(void __iomem *port, const void *buf, unsigned long count);
1041 +extern void fastcall iowrite32_rep(void __iomem *port, const void *buf, unsigned long count);
1043 +/* Create a virtual mapping cookie for an IO port range */
1044 +extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
1045 +extern void ioport_unmap(void __iomem *);
1047 +/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
1049 +extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
1050 +extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
1053 --- linux/include/asm-generic/local.h
1054 +++ linux/include/asm-generic/local.h
1056 +#ifndef _ASM_GENERIC_LOCAL_H
1057 +#define _ASM_GENERIC_LOCAL_H
1059 +// #include <linux/config.h>
1060 +#include <linux/percpu.h>
1061 +#include <linux/hardirq.h>
1062 +#include <asm/types.h>
1064 +/* An unsigned long type for operations which are atomic for a single
1065 + * CPU. Usually used in combination with per-cpu variables. */
1067 +#if BITS_PER_LONG == 32
1068 +/* Implement in terms of atomics. */
1070 +/* Don't use typedef: don't want them to be mixed with atomic_t's. */
1076 +#define LOCAL_INIT(i) { ATOMIC_INIT(i) }
1078 +#define local_read(l) ((unsigned long)atomic_read(&(l)->a))
1079 +#define local_set(l,i) atomic_set((&(l)->a),(i))
1080 +#define local_inc(l) atomic_inc(&(l)->a)
1081 +#define local_dec(l) atomic_dec(&(l)->a)
1082 +#define local_add(i,l) atomic_add((i),(&(l)->a))
1083 +#define local_sub(i,l) atomic_sub((i),(&(l)->a))
1085 +/* Non-atomic variants, ie. preemption disabled and won't be touched
1086 + * in interrupt, etc. Some archs can optimize this case well. */
1087 +#define __local_inc(l) local_set((l), local_read(l) + 1)
1088 +#define __local_dec(l) local_set((l), local_read(l) - 1)
1089 +#define __local_add(i,l) local_set((l), local_read(l) + (i))
1090 +#define __local_sub(i,l) local_set((l), local_read(l) - (i))
1092 +#else /* ... can't use atomics. */
1093 +/* Implement in terms of three variables.
1094 + Another option would be to use local_irq_save/restore. */
1098 + /* 0 = in hardirq, 1 = in softirq, 2 = usermode. */
1099 + unsigned long v[3];
1102 +#define _LOCAL_VAR(l) ((l)->v[!in_interrupt() + !in_irq()])
1104 +#define LOCAL_INIT(i) { { (i), 0, 0 } }
1106 +static inline unsigned long local_read(local_t *l)
1108 + return l->v[0] + l->v[1] + l->v[2];
1111 +static inline void local_set(local_t *l, unsigned long v)
1114 + l->v[1] = l->v[2] = 0;
1117 +static inline void local_inc(local_t *l)
1119 + preempt_disable();
1124 +static inline void local_dec(local_t *l)
1126 + preempt_disable();
1131 +static inline void local_add(unsigned long v, local_t *l)
1133 + preempt_disable();
1134 + _LOCAL_VAR(l) += v;
1138 +static inline void local_sub(unsigned long v, local_t *l)
1140 + preempt_disable();
1141 + _LOCAL_VAR(l) -= v;
1145 +/* Non-atomic variants, ie. preemption disabled and won't be touched
1146 + * in interrupt, etc. Some archs can optimize this case well. */
1147 +#define __local_inc(l) ((l)->v[0]++)
1148 +#define __local_dec(l) ((l)->v[0]--)
1149 +#define __local_add(i,l) ((l)->v[0] += (i))
1150 +#define __local_sub(i,l) ((l)->v[0] -= (i))
1152 +#endif /* Non-atomic implementation */
1154 +/* Use these for per-cpu local_t variables: on some archs they are
1155 + * much more efficient than these naive implementations. Note they take
1156 + * a variable (eg. mystruct.foo), not an address.
1158 +#define cpu_local_read(v) local_read(&__get_cpu_var(v))
1159 +#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i))
1160 +#define cpu_local_inc(v) local_inc(&__get_cpu_var(v))
1161 +#define cpu_local_dec(v) local_dec(&__get_cpu_var(v))
1162 +#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v))
1163 +#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v))
1165 +/* Non-atomic increments, ie. preemption disabled and won't be touched
1166 + * in interrupt, etc. Some archs can optimize this case well.
1168 +#define __cpu_local_inc(v) __local_inc(&__get_cpu_var(v))
1169 +#define __cpu_local_dec(v) __local_dec(&__get_cpu_var(v))
1170 +#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v))
1171 +#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v))
1173 +#endif /* _ASM_GENERIC_LOCAL_H */
1174 --- linux/include/asm-generic/pci-dma-compat.h
1175 +++ linux/include/asm-generic/pci-dma-compat.h
1177 +/* include this file if the platform implements the dma_ DMA Mapping API
1178 + * and wants to provide the pci_ DMA Mapping API in terms of it */
1180 +#ifndef _ASM_GENERIC_PCI_DMA_COMPAT_H
1181 +#define _ASM_GENERIC_PCI_DMA_COMPAT_H
1183 +#include <linux/dma-mapping.h>
1185 +/* note pci_set_dma_mask isn't here, since it's a public function
1186 + * exported from drivers/pci, use dma_supported instead */
1189 +pci_dma_supported(struct pci_dev *hwdev, u64 mask)
1191 + return dma_supported(hwdev == NULL ? NULL : &hwdev->dev, mask);
1194 +static inline void *
1195 +pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
1196 + dma_addr_t *dma_handle)
1198 + return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC);
1202 +pci_free_consistent(struct pci_dev *hwdev, size_t size,
1203 + void *vaddr, dma_addr_t dma_handle)
1205 + dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, vaddr, dma_handle);
1208 +static inline dma_addr_t
1209 +pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction)
1211 + return dma_map_single(hwdev == NULL ? NULL : &hwdev->dev, ptr, size, (enum dma_data_direction)direction);
1215 +pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
1216 + size_t size, int direction)
1218 + dma_unmap_single(hwdev == NULL ? NULL : &hwdev->dev, dma_addr, size, (enum dma_data_direction)direction);
1221 +static inline dma_addr_t
1222 +pci_map_page(struct pci_dev *hwdev, struct page *page,
1223 + unsigned long offset, size_t size, int direction)
1225 + return dma_map_page(hwdev == NULL ? NULL : &hwdev->dev, page, offset, size, (enum dma_data_direction)direction);
1229 +pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
1230 + size_t size, int direction)
1232 + dma_unmap_page(hwdev == NULL ? NULL : &hwdev->dev, dma_address, size, (enum dma_data_direction)direction);
1236 +pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
1237 + int nents, int direction)
1239 + return dma_map_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction);
1243 +pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
1244 + int nents, int direction)
1246 + dma_unmap_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction);
1250 +pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle,
1251 + size_t size, int direction)
1253 + dma_sync_single_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
1257 +pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle,
1258 + size_t size, int direction)
1260 + dma_sync_single_for_device(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
1264 +pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg,
1265 + int nelems, int direction)
1267 + dma_sync_sg_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
1271 +pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg,
1272 + int nelems, int direction)
1274 + dma_sync_sg_for_device(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
1278 +pci_dma_mapping_error(dma_addr_t dma_addr)
1280 + return dma_mapping_error(dma_addr);
1284 --- linux/include/asm-generic/pci.h
1285 +++ linux/include/asm-generic/pci.h
1288 + * linux/include/asm-generic/pci.h
1290 + * Copyright (C) 2003 Russell King
1292 +#ifndef _ASM_GENERIC_PCI_H
1293 +#define _ASM_GENERIC_PCI_H
1296 + * pcibios_resource_to_bus - convert resource to PCI bus address
1297 + * @dev: device which owns this resource
1298 + * @region: converted bus-centric region (start,end)
1299 + * @res: resource to convert
1301 + * Convert a resource to a PCI device bus address or bus window.
1304 +pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
1305 + struct resource *res)
1307 + region->start = res->start;
1308 + region->end = res->end;
1311 +#define pcibios_scan_all_fns(a, b) 0
1314 --- linux/include/asm-generic/percpu.h
1315 +++ linux/include/asm-generic/percpu.h
1317 +#ifndef _ASM_GENERIC_PERCPU_H_
1318 +#define _ASM_GENERIC_PERCPU_H_
1319 +#include <linux/compiler.h>
1321 +#define __GENERIC_PER_CPU
1324 +extern unsigned long __per_cpu_offset[NR_CPUS];
1326 +/* Separate out the type, so (int[3], foo) works. */
1327 +#define DEFINE_PER_CPU(type, name) \
1328 + __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
1330 +/* var is in discarded region: offset to particular copy we want */
1331 +#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
1332 +#define __get_cpu_var(var) per_cpu(var, smp_processor_id())
1334 +/* A macro to avoid #include hell... */
1335 +#define percpu_modcopy(pcpudst, src, size) \
1337 + unsigned int __i; \
1338 + for (__i = 0; __i < NR_CPUS; __i++) \
1339 + if (cpu_possible(__i)) \
1340 + memcpy((pcpudst)+__per_cpu_offset[__i], \
1345 +#define DEFINE_PER_CPU(type, name) \
1346 + __typeof__(type) per_cpu__##name
1348 +#define per_cpu(var, cpu) (*((void)cpu, &per_cpu__##var))
1349 +#define __get_cpu_var(var) per_cpu__##var
1353 +#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name
1355 +#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
1356 +#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
1358 +#endif /* _ASM_GENERIC_PERCPU_H_ */
1359 --- linux/include/asm-generic/pgtable.h
1360 +++ linux/include/asm-generic/pgtable.h
1362 +#ifndef _ASM_GENERIC_PGTABLE_H
1363 +#define _ASM_GENERIC_PGTABLE_H
1365 +#ifndef __HAVE_ARCH_PTEP_ESTABLISH
1367 + * Establish a new mapping:
1368 + * - flush the old one
1369 + * - update the page tables
1370 + * - inform the TLB about the new one
1372 + * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock.
1374 + * Note: the old pte is known to not be writable, so we don't need to
1375 + * worry about dirty bits etc getting lost.
1377 +#ifndef __HAVE_ARCH_SET_PTE_ATOMIC
1378 +#define ptep_establish(__vma, __address, __ptep, __entry) \
1380 + set_pte(__ptep, __entry); \
1381 + flush_tlb_page(__vma, __address); \
1383 +#else /* __HAVE_ARCH_SET_PTE_ATOMIC */
1384 +#define ptep_establish(__vma, __address, __ptep, __entry) \
1386 + set_pte_atomic(__ptep, __entry); \
1387 + flush_tlb_page(__vma, __address); \
1389 +#endif /* __HAVE_ARCH_SET_PTE_ATOMIC */
1392 +#ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
1394 + * Largely same as above, but only sets the access flags (dirty,
1395 + * accessed, and writable). Furthermore, we know it always gets set
1396 + * to a "more permissive" setting, which allows most architectures
1397 + * to optimize this.
1399 +#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
1401 + set_pte(__ptep, __entry); \
1402 + flush_tlb_page(__vma, __address); \
1406 +#ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
1407 +static inline int ptep_test_and_clear_young(pte_t *ptep)
1409 + pte_t pte = *ptep;
1410 + if (!pte_young(pte))
1412 + set_pte(ptep, pte_mkold(pte));
1417 +#ifndef __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH
1418 +#define ptep_clear_flush_young(__vma, __address, __ptep) \
1420 + int __young = ptep_test_and_clear_young(__ptep); \
1422 + flush_tlb_page(__vma, __address); \
1427 +#ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
1428 +static inline int ptep_test_and_clear_dirty(pte_t *ptep)
1430 + pte_t pte = *ptep;
1431 + if (!pte_dirty(pte))
1433 + set_pte(ptep, pte_mkclean(pte));
1438 +#ifndef __HAVE_ARCH_PTEP_CLEAR_DIRTY_FLUSH
1439 +#define ptep_clear_flush_dirty(__vma, __address, __ptep) \
1441 + int __dirty = ptep_test_and_clear_dirty(__ptep); \
1443 + flush_tlb_page(__vma, __address); \
1448 +#ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR
1449 +static inline pte_t ptep_get_and_clear(pte_t *ptep)
1451 + pte_t pte = *ptep;
1457 +#ifndef __HAVE_ARCH_PTEP_CLEAR_FLUSH
1458 +#define ptep_clear_flush(__vma, __address, __ptep) \
1460 + pte_t __pte = ptep_get_and_clear(__ptep); \
1461 + flush_tlb_page(__vma, __address); \
1466 +#ifndef __HAVE_ARCH_PTEP_SET_WRPROTECT
1467 +static inline void ptep_set_wrprotect(pte_t *ptep)
1469 + pte_t old_pte = *ptep;
1470 + set_pte(ptep, pte_wrprotect(old_pte));
1474 +#ifndef __HAVE_ARCH_PTEP_MKDIRTY
1475 +static inline void ptep_mkdirty(pte_t *ptep)
1477 + pte_t old_pte = *ptep;
1478 + set_pte(ptep, pte_mkdirty(old_pte));
1482 +#ifndef __HAVE_ARCH_PTE_SAME
1483 +#define pte_same(A,B) (pte_val(A) == pte_val(B))
1486 +#ifndef __HAVE_ARCH_PAGE_TEST_AND_CLEAR_DIRTY
1487 +#define page_test_and_clear_dirty(page) (0)
1490 +#ifndef __HAVE_ARCH_PAGE_TEST_AND_CLEAR_YOUNG
1491 +#define page_test_and_clear_young(page) (0)
1494 +#ifndef __HAVE_ARCH_PGD_OFFSET_GATE
1495 +#define pgd_offset_gate(mm, addr) pgd_offset(mm, addr)
1498 +#endif /* _ASM_GENERIC_PGTABLE_H */
1499 --- linux/include/asm-generic/rmap.h
1500 +++ linux/include/asm-generic/rmap.h
1502 +#ifndef _GENERIC_RMAP_H
1503 +#define _GENERIC_RMAP_H
1505 + * linux/include/asm-generic/rmap.h
1507 + * Architecture dependent parts of the reverse mapping code,
1508 + * this version should work for most architectures with a
1509 + * 'normal' page table layout.
1511 + * We use the struct page of the page table page to find out
1512 + * the process and full address of a page table entry:
1513 + * - page->mapping points to the process' mm_struct
1514 + * - page->index has the high bits of the address
1515 + * - the lower bits of the address are calculated from the
1516 + * offset of the page table entry within the page table page
1518 + * For CONFIG_HIGHPTE, we need to represent the address of a pte in a
1519 + * scalar pte_addr_t. The pfn of the pte's page is shifted left by PAGE_SIZE
1520 + * bits and is then ORed with the byte offset of the pte within its page.
1522 + * For CONFIG_HIGHMEM4G, the pte_addr_t is 32 bits. 20 for the pfn, 12 for
1525 + * For CONFIG_HIGHMEM64G, the pte_addr_t is 64 bits. 52 for the pfn, 12 for
1528 +#include <linux/mm.h>
1530 +static inline void pgtable_add_rmap(struct page * page, struct mm_struct * mm, unsigned long address)
1532 +#ifdef BROKEN_PPC_PTE_ALLOC_ONE
1533 + /* OK, so PPC calls pte_alloc() before mem_map[] is setup ... ;( */
1534 + extern int mem_init_done;
1536 + if (!mem_init_done)
1539 + page->mapping = (void *)mm;
1540 + page->index = address & ~((PTRS_PER_PTE * PAGE_SIZE) - 1);
1541 + inc_page_state(nr_page_table_pages);
1544 +static inline void pgtable_remove_rmap(struct page * page)
1546 + page->mapping = NULL;
1548 + dec_page_state(nr_page_table_pages);
1551 +static inline struct mm_struct * ptep_to_mm(pte_t * ptep)
1553 + struct page * page = kmap_atomic_to_page(ptep);
1554 + return (struct mm_struct *) page->mapping;
1557 +static inline unsigned long ptep_to_address(pte_t * ptep)
1559 + struct page * page = kmap_atomic_to_page(ptep);
1560 + unsigned long low_bits;
1561 + low_bits = ((unsigned long)ptep & ~PAGE_MASK) * PTRS_PER_PTE;
1562 + return page->index + low_bits;
1565 +#ifdef CONFIG_HIGHPTE
1566 +static inline pte_addr_t ptep_to_paddr(pte_t *ptep)
1569 + paddr = ((pte_addr_t)page_to_pfn(kmap_atomic_to_page(ptep))) << PAGE_SHIFT;
1570 + return paddr + (pte_addr_t)((unsigned long)ptep & ~PAGE_MASK);
1573 +static inline pte_addr_t ptep_to_paddr(pte_t *ptep)
1575 + return (pte_addr_t)ptep;
1579 +#ifndef CONFIG_HIGHPTE
1580 +static inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr)
1582 + return (pte_t *)pte_paddr;
1585 +static inline void rmap_ptep_unmap(pte_t *pte)
1591 +#endif /* _GENERIC_RMAP_H */
1592 --- linux/include/asm-generic/rtc.h
1593 +++ linux/include/asm-generic/rtc.h
1596 + * inclue/asm-generic/rtc.h
1598 + * Author: Tom Rini <trini@mvista.com>
1601 + * drivers/char/rtc.c
1603 + * Please read the COPYING file for all license details.
1606 +#ifndef __ASM_RTC_H__
1607 +#define __ASM_RTC_H__
1611 +#include <linux/mc146818rtc.h>
1612 +#include <linux/rtc.h>
1613 +#include <linux/bcd.h>
1615 +#define RTC_PIE 0x40 /* periodic interrupt enable */
1616 +#define RTC_AIE 0x20 /* alarm interrupt enable */
1617 +#define RTC_UIE 0x10 /* update-finished interrupt enable */
1619 +/* some dummy definitions */
1620 +#define RTC_BATT_BAD 0x100 /* battery bad */
1621 +#define RTC_SQWE 0x08 /* enable square-wave output */
1622 +#define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */
1623 +#define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */
1624 +#define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */
1627 + * Returns true if a clock update is in progress
1629 +static inline unsigned char rtc_is_updating(void)
1631 + unsigned char uip;
1633 + spin_lock_irq(&rtc_lock);
1634 + uip = (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP);
1635 + spin_unlock_irq(&rtc_lock);
1639 +static inline unsigned int get_rtc_time(struct rtc_time *time)
1641 + unsigned long uip_watchdog = jiffies;
1642 + unsigned char ctrl;
1643 +#ifdef CONFIG_MACH_DECSTATION
1644 + unsigned int real_year;
1648 + * read RTC once any update in progress is done. The update
1649 + * can take just over 2ms. We wait 10 to 20ms. There is no need to
1650 + * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP.
1651 + * If you need to know *exactly* when a second has started, enable
1652 + * periodic update complete interrupts, (via ioctl) and then
1653 + * immediately read /dev/rtc which will block until you get the IRQ.
1654 + * Once the read clears, read the RTC time (again via ioctl). Easy.
1657 + if (rtc_is_updating() != 0)
1658 + while (jiffies - uip_watchdog < 2*HZ/100) {
1664 + * Only the values that we read from the RTC are set. We leave
1665 + * tm_wday, tm_yday and tm_isdst untouched. Even though the
1666 + * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated
1667 + * by the RTC when initially set to a non-zero value.
1669 + spin_lock_irq(&rtc_lock);
1670 + time->tm_sec = CMOS_READ(RTC_SECONDS);
1671 + time->tm_min = CMOS_READ(RTC_MINUTES);
1672 + time->tm_hour = CMOS_READ(RTC_HOURS);
1673 + time->tm_mday = CMOS_READ(RTC_DAY_OF_MONTH);
1674 + time->tm_mon = CMOS_READ(RTC_MONTH);
1675 + time->tm_year = CMOS_READ(RTC_YEAR);
1676 +#ifdef CONFIG_MACH_DECSTATION
1677 + real_year = CMOS_READ(RTC_DEC_YEAR);
1679 + ctrl = CMOS_READ(RTC_CONTROL);
1680 + spin_unlock_irq(&rtc_lock);
1682 + if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
1684 + BCD_TO_BIN(time->tm_sec);
1685 + BCD_TO_BIN(time->tm_min);
1686 + BCD_TO_BIN(time->tm_hour);
1687 + BCD_TO_BIN(time->tm_mday);
1688 + BCD_TO_BIN(time->tm_mon);
1689 + BCD_TO_BIN(time->tm_year);
1692 +#ifdef CONFIG_MACH_DECSTATION
1693 + time->tm_year += real_year - 72;
1697 + * Account for differences between how the RTC uses the values
1698 + * and how they are defined in a struct rtc_time;
1700 + if (time->tm_year <= 69)
1701 + time->tm_year += 100;
1708 +/* Set the current date and time in the real time clock. */
1709 +static inline int set_rtc_time(struct rtc_time *time)
1711 + unsigned char mon, day, hrs, min, sec;
1712 + unsigned char save_control, save_freq_select;
1714 +#ifdef CONFIG_MACH_DECSTATION
1715 + unsigned int real_yrs, leap_yr;
1718 + yrs = time->tm_year;
1719 + mon = time->tm_mon + 1; /* tm_mon starts at zero */
1720 + day = time->tm_mday;
1721 + hrs = time->tm_hour;
1722 + min = time->tm_min;
1723 + sec = time->tm_sec;
1725 + if (yrs > 255) /* They are unsigned */
1728 + spin_lock_irq(&rtc_lock);
1729 +#ifdef CONFIG_MACH_DECSTATION
1731 + leap_yr = ((!((yrs + 1900) % 4) && ((yrs + 1900) % 100)) ||
1732 + !((yrs + 1900) % 400));
1736 + * We want to keep the year set to 73 until March
1737 + * for non-leap years, so that Feb, 29th is handled
1740 + if (!leap_yr && mon < 3) {
1745 + /* These limits and adjustments are independent of
1746 + * whether the chip is in binary mode or not.
1749 + spin_unlock_irq(&rtc_lock);
1756 + if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY)
1757 + || RTC_ALWAYS_BCD) {
1766 + save_control = CMOS_READ(RTC_CONTROL);
1767 + CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL);
1768 + save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
1769 + CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT);
1771 +#ifdef CONFIG_MACH_DECSTATION
1772 + CMOS_WRITE(real_yrs, RTC_DEC_YEAR);
1774 + CMOS_WRITE(yrs, RTC_YEAR);
1775 + CMOS_WRITE(mon, RTC_MONTH);
1776 + CMOS_WRITE(day, RTC_DAY_OF_MONTH);
1777 + CMOS_WRITE(hrs, RTC_HOURS);
1778 + CMOS_WRITE(min, RTC_MINUTES);
1779 + CMOS_WRITE(sec, RTC_SECONDS);
1781 + CMOS_WRITE(save_control, RTC_CONTROL);
1782 + CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
1784 + spin_unlock_irq(&rtc_lock);
1789 +static inline unsigned int get_rtc_ss(void)
1791 + struct rtc_time h;
1797 +static inline int get_rtc_pll(struct rtc_pll_info *pll)
1801 +static inline int set_rtc_pll(struct rtc_pll_info *pll)
1806 +#endif /* __KERNEL__ */
1807 +#endif /* __ASM_RTC_H__ */
1808 --- linux/include/asm-generic/sections.h
1809 +++ linux/include/asm-generic/sections.h
1811 +#ifndef _ASM_GENERIC_SECTIONS_H_
1812 +#define _ASM_GENERIC_SECTIONS_H_
1814 +/* References to section boundaries */
1816 +extern char _text[], _stext[], _etext[];
1817 +extern char _data[], _sdata[], _edata[];
1818 +extern char __bss_start[], __bss_stop[];
1819 +extern char __init_begin[], __init_end[];
1820 +extern char _sinittext[], _einittext[];
1822 +#endif /* _ASM_GENERIC_SECTIONS_H_ */
1823 --- linux/include/asm-generic/siginfo.h
1824 +++ linux/include/asm-generic/siginfo.h
1826 +#ifndef _ASM_GENERIC_SIGINFO_H
1827 +#define _ASM_GENERIC_SIGINFO_H
1829 +#include <linux/compiler.h>
1830 +#include <linux/types.h>
1831 +#include <linux/resource.h>
1833 +typedef union sigval {
1835 + void __user *sival_ptr;
1839 + * This is the size (including padding) of the part of the
1840 + * struct siginfo that is before the union.
1842 +#ifndef __ARCH_SI_PREAMBLE_SIZE
1843 +#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
1846 +#define SI_MAX_SIZE 128
1847 +#ifndef SI_PAD_SIZE
1848 +#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
1851 +#ifndef __ARCH_SI_UID_T
1852 +#define __ARCH_SI_UID_T uid_t
1856 + * The default "si_band" type is "long", as specified by POSIX.
1857 + * However, some architectures want to override this to "int"
1858 + * for historical compatibility reasons, so we allow that.
1860 +#ifndef __ARCH_SI_BAND_T
1861 +#define __ARCH_SI_BAND_T long
1864 +#ifndef HAVE_ARCH_SIGINFO_T
1866 +typedef struct siginfo {
1872 + int _pad[SI_PAD_SIZE];
1876 + pid_t _pid; /* sender's pid */
1877 + __ARCH_SI_UID_T _uid; /* sender's uid */
1880 + /* POSIX.1b timers */
1882 + timer_t _tid; /* timer id */
1883 + int _overrun; /* overrun count */
1884 + char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
1885 + sigval_t _sigval; /* same as below */
1886 + int _sys_private; /* not to be passed to user */
1889 + /* POSIX.1b signals */
1891 + pid_t _pid; /* sender's pid */
1892 + __ARCH_SI_UID_T _uid; /* sender's uid */
1898 + pid_t _pid; /* which child */
1899 + __ARCH_SI_UID_T _uid; /* sender's uid */
1900 + int _status; /* exit code */
1905 + /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
1907 + void __user *_addr; /* faulting insn/memory ref. */
1908 +#ifdef __ARCH_SI_TRAPNO
1909 + int _trapno; /* TRAP # which caused the signal */
1915 + __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
1924 + * How these fields are to be accessed.
1926 +#define si_pid _sifields._kill._pid
1927 +#define si_uid _sifields._kill._uid
1928 +#define si_tid _sifields._timer._tid
1929 +#define si_overrun _sifields._timer._overrun
1930 +#define si_sys_private _sifields._timer._sys_private
1931 +#define si_status _sifields._sigchld._status
1932 +#define si_utime _sifields._sigchld._utime
1933 +#define si_stime _sifields._sigchld._stime
1934 +#define si_value _sifields._rt._sigval
1935 +#define si_int _sifields._rt._sigval.sival_int
1936 +#define si_ptr _sifields._rt._sigval.sival_ptr
1937 +#define si_addr _sifields._sigfault._addr
1938 +#ifdef __ARCH_SI_TRAPNO
1939 +#define si_trapno _sifields._sigfault._trapno
1941 +#define si_band _sifields._sigpoll._band
1942 +#define si_fd _sifields._sigpoll._fd
1945 +#define __SI_MASK 0xffff0000u
1946 +#define __SI_KILL (0 << 16)
1947 +#define __SI_TIMER (1 << 16)
1948 +#define __SI_POLL (2 << 16)
1949 +#define __SI_FAULT (3 << 16)
1950 +#define __SI_CHLD (4 << 16)
1951 +#define __SI_RT (5 << 16)
1952 +#define __SI_MESGQ (6 << 16)
1953 +#define __SI_CODE(T,N) ((T) | ((N) & 0xffff))
1955 +#define __SI_KILL 0
1956 +#define __SI_TIMER 0
1957 +#define __SI_POLL 0
1958 +#define __SI_FAULT 0
1959 +#define __SI_CHLD 0
1961 +#define __SI_MESGQ 0
1962 +#define __SI_CODE(T,N) (N)
1967 + * Digital reserves positive values for kernel-generated signals.
1969 +#define SI_USER 0 /* sent by kill, sigsend, raise */
1970 +#define SI_KERNEL 0x80 /* sent by the kernel from somewhere */
1971 +#define SI_QUEUE -1 /* sent by sigqueue */
1972 +#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
1973 +#define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */
1974 +#define SI_ASYNCIO -4 /* sent by AIO completion */
1975 +#define SI_SIGIO -5 /* sent by queued SIGIO */
1976 +#define SI_TKILL -6 /* sent by tkill system call */
1977 +#define SI_DETHREAD -7 /* sent by execve() killing subsidiary threads */
1979 +#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
1980 +#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
1982 +#ifndef HAVE_ARCH_SI_CODES
1986 +#define ILL_ILLOPC (__SI_FAULT|1) /* illegal opcode */
1987 +#define ILL_ILLOPN (__SI_FAULT|2) /* illegal operand */
1988 +#define ILL_ILLADR (__SI_FAULT|3) /* illegal addressing mode */
1989 +#define ILL_ILLTRP (__SI_FAULT|4) /* illegal trap */
1990 +#define ILL_PRVOPC (__SI_FAULT|5) /* privileged opcode */
1991 +#define ILL_PRVREG (__SI_FAULT|6) /* privileged register */
1992 +#define ILL_COPROC (__SI_FAULT|7) /* coprocessor error */
1993 +#define ILL_BADSTK (__SI_FAULT|8) /* internal stack error */
1999 +#define FPE_INTDIV (__SI_FAULT|1) /* integer divide by zero */
2000 +#define FPE_INTOVF (__SI_FAULT|2) /* integer overflow */
2001 +#define FPE_FLTDIV (__SI_FAULT|3) /* floating point divide by zero */
2002 +#define FPE_FLTOVF (__SI_FAULT|4) /* floating point overflow */
2003 +#define FPE_FLTUND (__SI_FAULT|5) /* floating point underflow */
2004 +#define FPE_FLTRES (__SI_FAULT|6) /* floating point inexact result */
2005 +#define FPE_FLTINV (__SI_FAULT|7) /* floating point invalid operation */
2006 +#define FPE_FLTSUB (__SI_FAULT|8) /* subscript out of range */
2010 + * SIGSEGV si_codes
2012 +#define SEGV_MAPERR (__SI_FAULT|1) /* address not mapped to object */
2013 +#define SEGV_ACCERR (__SI_FAULT|2) /* invalid permissions for mapped object */
2019 +#define BUS_ADRALN (__SI_FAULT|1) /* invalid address alignment */
2020 +#define BUS_ADRERR (__SI_FAULT|2) /* non-existant physical address */
2021 +#define BUS_OBJERR (__SI_FAULT|3) /* object specific hardware error */
2025 + * SIGTRAP si_codes
2027 +#define TRAP_BRKPT (__SI_FAULT|1) /* process breakpoint */
2028 +#define TRAP_TRACE (__SI_FAULT|2) /* process trace trap */
2032 + * SIGCHLD si_codes
2034 +#define CLD_EXITED (__SI_CHLD|1) /* child has exited */
2035 +#define CLD_KILLED (__SI_CHLD|2) /* child was killed */
2036 +#define CLD_DUMPED (__SI_CHLD|3) /* child terminated abnormally */
2037 +#define CLD_TRAPPED (__SI_CHLD|4) /* traced child has trapped */
2038 +#define CLD_STOPPED (__SI_CHLD|5) /* child has stopped */
2039 +#define CLD_CONTINUED (__SI_CHLD|6) /* stopped child has continued */
2043 + * SIGPOLL si_codes
2045 +#define POLL_IN (__SI_POLL|1) /* data input available */
2046 +#define POLL_OUT (__SI_POLL|2) /* output buffers available */
2047 +#define POLL_MSG (__SI_POLL|3) /* input message available */
2048 +#define POLL_ERR (__SI_POLL|4) /* i/o error */
2049 +#define POLL_PRI (__SI_POLL|5) /* high priority input available */
2050 +#define POLL_HUP (__SI_POLL|6) /* device disconnected */
2056 + * sigevent definitions
2058 + * It seems likely that SIGEV_THREAD will have to be handled from
2059 + * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
2060 + * thread manager then catches and does the appropriate nonsense.
2061 + * However, everything is written out here so as to not get lost.
2063 +#define SIGEV_SIGNAL 0 /* notify via signal */
2064 +#define SIGEV_NONE 1 /* other notification: meaningless */
2065 +#define SIGEV_THREAD 2 /* deliver via thread creation */
2066 +#define SIGEV_THREAD_ID 4 /* deliver to thread */
2068 +#define SIGEV_MAX_SIZE 64
2069 +#ifndef SIGEV_PAD_SIZE
2070 +#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
2073 +#ifndef HAVE_ARCH_SIGEVENT_T
2075 +typedef struct sigevent {
2076 + sigval_t sigev_value;
2080 + int _pad[SIGEV_PAD_SIZE];
2084 + void (*_function)(sigval_t);
2085 + void *_attribute; /* really pthread_attr_t */
2092 +#define sigev_notify_function _sigev_un._sigev_thread._function
2093 +#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
2094 +#define sigev_notify_thread_id _sigev_un._tid
2099 +void do_schedule_next_timer(struct siginfo *info);
2101 +#ifndef HAVE_ARCH_COPY_SIGINFO
2103 +#include <linux/string.h>
2105 +static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
2107 + if (from->si_code < 0)
2108 + memcpy(to, from, sizeof(*to));
2110 + /* _sigchld is currently the largest know union member */
2111 + memcpy(to, from, __ARCH_SI_PREAMBLE_SIZE + sizeof(from->_sifields._sigchld));
2116 +extern int copy_siginfo_to_user(struct siginfo __user *to, struct siginfo *from);
2118 +#endif /* __KERNEL__ */
2121 --- linux/include/asm-generic/statfs.h
2122 +++ linux/include/asm-generic/statfs.h
2124 +#ifndef _GENERIC_STATFS_H
2125 +#define _GENERIC_STATFS_H
2127 +#ifndef __KERNEL_STRICT_NAMES
2128 +# include <linux/types.h>
2129 +typedef __kernel_fsid_t fsid_t;
2140 + __kernel_fsid_t f_fsid;
2154 + __kernel_fsid_t f_fsid;
2160 +struct compat_statfs64 {
2168 + __kernel_fsid_t f_fsid;
2175 --- linux/include/asm-generic/tlb.h
2176 +++ linux/include/asm-generic/tlb.h
2178 +/* asm-generic/tlb.h
2180 + * Generic TLB shootdown code
2182 + * Copyright 2001 Red Hat, Inc.
2183 + * Based on code from mm/memory.c Copyright Linus Torvalds and others.
2185 + * This program is free software; you can redistribute it and/or
2186 + * modify it under the terms of the GNU General Public License
2187 + * as published by the Free Software Foundation; either version
2188 + * 2 of the License, or (at your option) any later version.
2190 +#ifndef _ASM_GENERIC__TLB_H
2191 +#define _ASM_GENERIC__TLB_H
2193 +// #include <linux/config.h>
2194 +#include <linux/swap.h>
2195 +#include <asm/pgalloc.h>
2196 +#include <asm/tlbflush.h>
2199 + * For UP we don't need to worry about TLB flush
2200 + * and page free order so much..
2203 + #define FREE_PTE_NR 506
2204 + #define tlb_fast_mode(tlb) ((tlb)->nr == ~0U)
2206 + #define FREE_PTE_NR 1
2207 + #define tlb_fast_mode(tlb) 1
2210 +/* struct mmu_gather is an opaque type used by the mm code for passing around
2211 + * any data needed by arch specific code for tlb_remove_page. This structure
2212 + * can be per-CPU or per-MM as the page table lock is held for the duration of
2215 +struct mmu_gather {
2216 + struct mm_struct *mm;
2217 + unsigned int nr; /* set to ~0U means fast mode */
2218 + unsigned int need_flush;/* Really unmapped some ptes? */
2219 + unsigned int fullmm; /* non-zero means full mm flush */
2220 + unsigned long freed;
2221 + struct page * pages[FREE_PTE_NR];
2224 +/* Users of the generic TLB shootdown code must declare this storage space. */
2225 +DECLARE_PER_CPU(struct mmu_gather, mmu_gathers);
2228 + * Return a pointer to an initialized struct mmu_gather.
2230 +static inline struct mmu_gather *
2231 +tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush)
2233 + struct mmu_gather *tlb = &per_cpu(mmu_gathers, smp_processor_id());
2237 + /* Use fast mode if only one CPU is online */
2238 + tlb->nr = num_online_cpus() > 1 ? 0U : ~0U;
2240 + tlb->fullmm = full_mm_flush;
2247 +tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
2249 + if (!tlb->need_flush)
2251 + tlb->need_flush = 0;
2253 + if (!tlb_fast_mode(tlb)) {
2254 + free_pages_and_swap_cache(tlb->pages, tlb->nr);
2260 + * Called at the end of the shootdown operation to free up any resources
2261 + * that were required. The page table lock is still held at this point.
2264 +tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
2266 + int freed = tlb->freed;
2267 + struct mm_struct *mm = tlb->mm;
2268 + int rss = mm->rss;
2272 + mm->rss = rss - freed;
2273 + tlb_flush_mmu(tlb, start, end);
2275 + /* keep the page table cache within bounds */
2276 + check_pgt_cache();
2279 +static inline unsigned int
2280 +tlb_is_full_mm(struct mmu_gather *tlb)
2282 + return tlb->fullmm;
2286 + * Must perform the equivalent to __free_pte(pte_get_and_clear(ptep)), while
2287 + * handling the additional races in SMP caused by other CPUs caching valid
2288 + * mappings in their TLBs.
2290 +static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
2292 + tlb->need_flush = 1;
2293 + if (tlb_fast_mode(tlb)) {
2294 + free_page_and_swap_cache(page);
2297 + tlb->pages[tlb->nr++] = page;
2298 + if (tlb->nr >= FREE_PTE_NR)
2299 + tlb_flush_mmu(tlb, 0, 0);
2303 + * tlb_remove_tlb_entry - remember a pte unmapping for later tlb invalidation.
2305 + * Record the fact that pte's were really umapped in ->need_flush, so we can
2306 + * later optimise away the tlb invalidate. This helps when userspace is
2307 + * unmapping already-unmapped pages, which happens quite a lot.
2309 +#define tlb_remove_tlb_entry(tlb, ptep, address) \
2311 + tlb->need_flush = 1; \
2312 + __tlb_remove_tlb_entry(tlb, ptep, address); \
2315 +#define pte_free_tlb(tlb, ptep) \
2317 + tlb->need_flush = 1; \
2318 + __pte_free_tlb(tlb, ptep); \
2321 +#define pmd_free_tlb(tlb, pmdp) \
2323 + tlb->need_flush = 1; \
2324 + __pmd_free_tlb(tlb, pmdp); \
2327 +#define tlb_migrate_finish(mm) do {} while (0)
2329 +#endif /* _ASM_GENERIC__TLB_H */
2330 --- linux/include/asm-generic/topology.h
2331 +++ linux/include/asm-generic/topology.h
2334 + * linux/include/asm-generic/topology.h
2336 + * Written by: Matthew Dobson, IBM Corporation
2338 + * Copyright (C) 2002, IBM Corp.
2340 + * All rights reserved.
2342 + * This program is free software; you can redistribute it and/or modify
2343 + * it under the terms of the GNU General Public License as published by
2344 + * the Free Software Foundation; either version 2 of the License, or
2345 + * (at your option) any later version.
2347 + * This program is distributed in the hope that it will be useful, but
2348 + * WITHOUT ANY WARRANTY; without even the implied warranty of
2349 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
2350 + * NON INFRINGEMENT. See the GNU General Public License for more
2353 + * You should have received a copy of the GNU General Public License
2354 + * along with this program; if not, write to the Free Software
2355 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
2357 + * Send feedback to <colpatch@us.ibm.com>
2359 +#ifndef _ASM_GENERIC_TOPOLOGY_H
2360 +#define _ASM_GENERIC_TOPOLOGY_H
2362 +/* Other architectures wishing to use this simple topology API should fill
2363 + in the below functions as appropriate in their own <asm/topology.h> file. */
2364 +#ifndef cpu_to_node
2365 +#define cpu_to_node(cpu) (0)
2367 +#ifndef parent_node
2368 +#define parent_node(node) (0)
2370 +#ifndef node_to_cpumask
2371 +#define node_to_cpumask(node) (cpu_online_map)
2373 +#ifndef node_to_first_cpu
2374 +#define node_to_first_cpu(node) (0)
2376 +#ifndef pcibus_to_cpumask
2377 +#define pcibus_to_cpumask(bus) (cpu_online_map)
2380 +/* Cross-node load balancing interval. */
2381 +#ifndef NODE_BALANCE_RATE
2382 +#define NODE_BALANCE_RATE 10
2385 +#endif /* _ASM_GENERIC_TOPOLOGY_H */
2386 --- linux/include/asm-generic/uaccess.h
2387 +++ linux/include/asm-generic/uaccess.h
2389 +#ifndef _ASM_GENERIC_UACCESS_H_
2390 +#define _ASM_GENERIC_UACCESS_H_
2393 + * This macro should be used instead of __get_user() when accessing
2394 + * values at locations that are not known to be aligned.
2396 +#define __get_user_unaligned(x, ptr) \
2398 + __typeof__ (*(ptr)) __x; \
2399 + __copy_from_user(&__x, (ptr), sizeof(*(ptr))) ? -EFAULT : 0; \
2405 + * This macro should be used instead of __put_user() when accessing
2406 + * values at locations that are not known to be aligned.
2408 +#define __put_user_unaligned(x, ptr) \
2410 + __typeof__ (*(ptr)) __x = (x); \
2411 + __copy_to_user((ptr), &__x, sizeof(*(ptr))) ? -EFAULT : 0; \
2414 +#endif /* _ASM_GENERIC_UACCESS_H */
2415 --- linux/include/asm-generic/unaligned.h
2416 +++ linux/include/asm-generic/unaligned.h
2418 +#ifndef _ASM_GENERIC_UNALIGNED_H_
2419 +#define _ASM_GENERIC_UNALIGNED_H_
2422 + * For the benefit of those who are trying to port Linux to another
2423 + * architecture, here are some C-language equivalents.
2426 +#include <asm/string.h>
2429 +#define get_unaligned(ptr) \
2430 + ({ __typeof__(*(ptr)) __tmp; memcpy(&__tmp, (ptr), sizeof(*(ptr))); __tmp; })
2432 +#define put_unaligned(val, ptr) \
2433 + ({ __typeof__(*(ptr)) __tmp = (val); \
2434 + memcpy((ptr), &__tmp, sizeof(*(ptr))); \
2437 +#endif /* _ASM_GENERIC_UNALIGNED_H */
2438 --- linux/include/asm-generic/vmlinux.lds.h
2439 +++ linux/include/asm-generic/vmlinux.lds.h
2441 +#ifndef LOAD_OFFSET
2442 +#define LOAD_OFFSET 0
2445 +#ifndef VMLINUX_SYMBOL
2446 +#define VMLINUX_SYMBOL(_sym_) _sym_
2450 + .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
2451 + *(.rodata) *(.rodata.*) \
2452 + *(__vermagic) /* Kernel version magic */ \
2455 + .rodata1 : AT(ADDR(.rodata1) - LOAD_OFFSET) { \
2459 + /* PCI quirks */ \
2460 + .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \
2461 + VMLINUX_SYMBOL(__start_pci_fixups_header) = .; \
2462 + *(.pci_fixup_header) \
2463 + VMLINUX_SYMBOL(__end_pci_fixups_header) = .; \
2464 + VMLINUX_SYMBOL(__start_pci_fixups_final) = .; \
2465 + *(.pci_fixup_final) \
2466 + VMLINUX_SYMBOL(__end_pci_fixups_final) = .; \
2469 + /* Kernel symbol table: Normal symbols */ \
2470 + __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \
2471 + VMLINUX_SYMBOL(__start___ksymtab) = .; \
2473 + VMLINUX_SYMBOL(__stop___ksymtab) = .; \
2476 + /* Kernel symbol table: GPL-only symbols */ \
2477 + __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \
2478 + VMLINUX_SYMBOL(__start___ksymtab_gpl) = .; \
2479 + *(__ksymtab_gpl) \
2480 + VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \
2483 + /* Kernel symbol table: Normal symbols */ \
2484 + __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \
2485 + VMLINUX_SYMBOL(__start___kcrctab) = .; \
2487 + VMLINUX_SYMBOL(__stop___kcrctab) = .; \
2490 + /* Kernel symbol table: GPL-only symbols */ \
2491 + __kcrctab_gpl : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) { \
2492 + VMLINUX_SYMBOL(__start___kcrctab_gpl) = .; \
2493 + *(__kcrctab_gpl) \
2494 + VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \
2497 + /* Kernel symbol table: strings */ \
2498 + __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \
2499 + *(__ksymtab_strings) \
2502 + /* Built-in module parameters. */ \
2503 + __param : AT(ADDR(__param) - LOAD_OFFSET) { \
2504 + VMLINUX_SYMBOL(__start___param) = .; \
2506 + VMLINUX_SYMBOL(__stop___param) = .; \
2509 +#define SECURITY_INIT \
2510 + .security_initcall.init : { \
2511 + VMLINUX_SYMBOL(__security_initcall_start) = .; \
2512 + *(.security_initcall.init) \
2513 + VMLINUX_SYMBOL(__security_initcall_end) = .; \
2516 +#define SCHED_TEXT \
2517 + VMLINUX_SYMBOL(__sched_text_start) = .; \
2519 + VMLINUX_SYMBOL(__sched_text_end) = .;
2521 +#define LOCK_TEXT \
2522 + VMLINUX_SYMBOL(__lock_text_start) = .; \
2523 + *(.spinlock.text) \
2524 + VMLINUX_SYMBOL(__lock_text_end) = .;
2525 --- linux/include/asm-generic/xor.h
2526 +++ linux/include/asm-generic/xor.h
2529 + * include/asm-generic/xor.h
2531 + * Generic optimized RAID-5 checksumming functions.
2533 + * This program is free software; you can redistribute it and/or modify
2534 + * it under the terms of the GNU General Public License as published by
2535 + * the Free Software Foundation; either version 2, or (at your option)
2536 + * any later version.
2538 + * You should have received a copy of the GNU General Public License
2539 + * (for example /usr/src/linux/COPYING); if not, write to the Free
2540 + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
2543 +#include <asm/processor.h>
2546 +xor_8regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
2548 + long lines = bytes / (sizeof (long)) / 8;
2561 + } while (--lines > 0);
2565 +xor_8regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2566 + unsigned long *p3)
2568 + long lines = bytes / (sizeof (long)) / 8;
2571 + p1[0] ^= p2[0] ^ p3[0];
2572 + p1[1] ^= p2[1] ^ p3[1];
2573 + p1[2] ^= p2[2] ^ p3[2];
2574 + p1[3] ^= p2[3] ^ p3[3];
2575 + p1[4] ^= p2[4] ^ p3[4];
2576 + p1[5] ^= p2[5] ^ p3[5];
2577 + p1[6] ^= p2[6] ^ p3[6];
2578 + p1[7] ^= p2[7] ^ p3[7];
2582 + } while (--lines > 0);
2586 +xor_8regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2587 + unsigned long *p3, unsigned long *p4)
2589 + long lines = bytes / (sizeof (long)) / 8;
2592 + p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
2593 + p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
2594 + p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
2595 + p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
2596 + p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
2597 + p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
2598 + p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
2599 + p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
2604 + } while (--lines > 0);
2608 +xor_8regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2609 + unsigned long *p3, unsigned long *p4, unsigned long *p5)
2611 + long lines = bytes / (sizeof (long)) / 8;
2614 + p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
2615 + p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
2616 + p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
2617 + p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
2618 + p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
2619 + p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
2620 + p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
2621 + p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
2627 + } while (--lines > 0);
2631 +xor_32regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
2633 + long lines = bytes / (sizeof (long)) / 8;
2636 + register long d0, d1, d2, d3, d4, d5, d6, d7;
2637 + d0 = p1[0]; /* Pull the stuff into registers */
2638 + d1 = p1[1]; /* ... in bursts, if possible. */
2653 + p1[0] = d0; /* Store the result (in bursts) */
2663 + } while (--lines > 0);
2667 +xor_32regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2668 + unsigned long *p3)
2670 + long lines = bytes / (sizeof (long)) / 8;
2673 + register long d0, d1, d2, d3, d4, d5, d6, d7;
2674 + d0 = p1[0]; /* Pull the stuff into registers */
2675 + d1 = p1[1]; /* ... in bursts, if possible. */
2698 + p1[0] = d0; /* Store the result (in bursts) */
2709 + } while (--lines > 0);
2713 +xor_32regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2714 + unsigned long *p3, unsigned long *p4)
2716 + long lines = bytes / (sizeof (long)) / 8;
2719 + register long d0, d1, d2, d3, d4, d5, d6, d7;
2720 + d0 = p1[0]; /* Pull the stuff into registers */
2721 + d1 = p1[1]; /* ... in bursts, if possible. */
2752 + p1[0] = d0; /* Store the result (in bursts) */
2764 + } while (--lines > 0);
2768 +xor_32regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2769 + unsigned long *p3, unsigned long *p4, unsigned long *p5)
2771 + long lines = bytes / (sizeof (long)) / 8;
2774 + register long d0, d1, d2, d3, d4, d5, d6, d7;
2775 + d0 = p1[0]; /* Pull the stuff into registers */
2776 + d1 = p1[1]; /* ... in bursts, if possible. */
2815 + p1[0] = d0; /* Store the result (in bursts) */
2828 + } while (--lines > 0);
2832 +xor_8regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
2834 + long lines = bytes / (sizeof (long)) / 8 - 1;
2852 + } while (--lines > 0);
2858 +xor_8regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2859 + unsigned long *p3)
2861 + long lines = bytes / (sizeof (long)) / 8 - 1;
2871 + p1[0] ^= p2[0] ^ p3[0];
2872 + p1[1] ^= p2[1] ^ p3[1];
2873 + p1[2] ^= p2[2] ^ p3[2];
2874 + p1[3] ^= p2[3] ^ p3[3];
2875 + p1[4] ^= p2[4] ^ p3[4];
2876 + p1[5] ^= p2[5] ^ p3[5];
2877 + p1[6] ^= p2[6] ^ p3[6];
2878 + p1[7] ^= p2[7] ^ p3[7];
2882 + } while (--lines > 0);
2888 +xor_8regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2889 + unsigned long *p3, unsigned long *p4)
2891 + long lines = bytes / (sizeof (long)) / 8 - 1;
2904 + p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
2905 + p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
2906 + p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
2907 + p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
2908 + p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
2909 + p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
2910 + p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
2911 + p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
2916 + } while (--lines > 0);
2922 +xor_8regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
2923 + unsigned long *p3, unsigned long *p4, unsigned long *p5)
2925 + long lines = bytes / (sizeof (long)) / 8 - 1;
2940 + p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
2941 + p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
2942 + p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
2943 + p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
2944 + p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
2945 + p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
2946 + p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
2947 + p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
2953 + } while (--lines > 0);
2959 +xor_32regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
2961 + long lines = bytes / (sizeof (long)) / 8 - 1;
2967 + register long d0, d1, d2, d3, d4, d5, d6, d7;
2972 + d0 = p1[0]; /* Pull the stuff into registers */
2973 + d1 = p1[1]; /* ... in bursts, if possible. */
2988 + p1[0] = d0; /* Store the result (in bursts) */
2998 + } while (--lines > 0);
3004 +xor_32regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3005 + unsigned long *p3)
3007 + long lines = bytes / (sizeof (long)) / 8 - 1;
3014 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3020 + d0 = p1[0]; /* Pull the stuff into registers */
3021 + d1 = p1[1]; /* ... in bursts, if possible. */
3044 + p1[0] = d0; /* Store the result (in bursts) */
3055 + } while (--lines > 0);
3061 +xor_32regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3062 + unsigned long *p3, unsigned long *p4)
3064 + long lines = bytes / (sizeof (long)) / 8 - 1;
3072 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3079 + d0 = p1[0]; /* Pull the stuff into registers */
3080 + d1 = p1[1]; /* ... in bursts, if possible. */
3111 + p1[0] = d0; /* Store the result (in bursts) */
3123 + } while (--lines > 0);
3129 +xor_32regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
3130 + unsigned long *p3, unsigned long *p4, unsigned long *p5)
3132 + long lines = bytes / (sizeof (long)) / 8 - 1;
3141 + register long d0, d1, d2, d3, d4, d5, d6, d7;
3149 + d0 = p1[0]; /* Pull the stuff into registers */
3150 + d1 = p1[1]; /* ... in bursts, if possible. */
3189 + p1[0] = d0; /* Store the result (in bursts) */
3202 + } while (--lines > 0);
3207 +static struct xor_block_template xor_block_8regs = {
3209 + .do_2 = xor_8regs_2,
3210 + .do_3 = xor_8regs_3,
3211 + .do_4 = xor_8regs_4,
3212 + .do_5 = xor_8regs_5,
3215 +static struct xor_block_template xor_block_32regs = {
3217 + .do_2 = xor_32regs_2,
3218 + .do_3 = xor_32regs_3,
3219 + .do_4 = xor_32regs_4,
3220 + .do_5 = xor_32regs_5,
3223 +static struct xor_block_template xor_block_8regs_p = {
3224 + .name = "8regs_prefetch",
3225 + .do_2 = xor_8regs_p_2,
3226 + .do_3 = xor_8regs_p_3,
3227 + .do_4 = xor_8regs_p_4,
3228 + .do_5 = xor_8regs_p_5,
3231 +static struct xor_block_template xor_block_32regs_p = {
3232 + .name = "32regs_prefetch",
3233 + .do_2 = xor_32regs_p_2,
3234 + .do_3 = xor_32regs_p_3,
3235 + .do_4 = xor_32regs_p_4,
3236 + .do_5 = xor_32regs_p_5,
3239 +#define XOR_TRY_TEMPLATES \
3241 + xor_speed(&xor_block_8regs); \
3242 + xor_speed(&xor_block_8regs_p); \
3243 + xor_speed(&xor_block_32regs); \
3244 + xor_speed(&xor_block_32regs_p); \
3246 --- linux/include/asm-nios2nommu/ChangeLog
3247 +++ linux/include/asm-nios2nommu/ChangeLog
3249 +2004-06-29 Ken Hill <khill@microtronix.com>
3251 + * bitops.h (find_next_zero_bit): Fix problem with with masking for found_first
3252 + handling. The masking of the upper bits for size < 32 bits would set all
3253 + the bits to 1. Removing any zero's there may have been.
3255 +2004-06-02 Ken Hill <khill@microtronix.com>
3257 + * processor.h (TASK_SIZE): Change na_sdram_end to nasys_program_mem_end to remove
3258 + dependancy on quartus memory component name.
3260 + * page.h (PAGE_OFFSET): Change na_sdram to nasys_program_mem to remove
3261 + dependancy on quartus memory component name.
3263 --- linux/include/asm-nios2nommu/a.out.h
3264 +++ linux/include/asm-nios2nommu/a.out.h
3266 +/* $Id: a.out.h,v 1.4 2004/03/30 19:35:04 ken-h Exp $ */
3268 + * Copyright (C) 2004 Microtronix Datacom Ltd.
3270 + * All rights reserved.
3272 + * This program is free software; you can redistribute it and/or modify
3273 + * it under the terms of the GNU General Public License as published by
3274 + * the Free Software Foundation; either version 2 of the License, or
3275 + * (at your option) any later version.
3277 + * This program is distributed in the hope that it will be useful, but
3278 + * WITHOUT ANY WARRANTY; without even the implied warranty of
3279 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
3280 + * NON INFRINGEMENT. See the GNU General Public License for more
3283 + * You should have received a copy of the GNU General Public License
3284 + * along with this program; if not, write to the Free Software
3285 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
3288 +#ifndef __NIOS2NOMMU_A_OUT_H__
3289 +#define __NIOS2NOMMU_A_OUT_H__
3291 +#define SPARC_PGSIZE 0x1000 /* Thanks to the sun4 architecture... */
3292 +#define SEGMENT_SIZE SPARC_PGSIZE /* whee... */
3295 + unsigned char a_dynamic:1; /* A __DYNAMIC is in this image */
3296 + unsigned char a_toolversion:7;
3297 + unsigned char a_machtype;
3298 + unsigned short a_info;
3299 + unsigned long a_text; /* length of text, in bytes */
3300 + unsigned long a_data; /* length of data, in bytes */
3301 + unsigned long a_bss; /* length of bss, in bytes */
3302 + unsigned long a_syms; /* length of symbol table, in bytes */
3303 + unsigned long a_entry; /* where program begins */
3304 + unsigned long a_trsize;
3305 + unsigned long a_drsize;
3308 +#define INIT_EXEC { \
3310 + .a_toolversion = 0, \
3311 + .a_machtype = 0, \
3322 +/* Where in the file does the text information begin? */
3323 +#define N_TXTOFF(x) (N_MAGIC(x) == ZMAGIC ? 0 : sizeof (struct exec))
3325 +/* Where do the Symbols start? */
3326 +#define N_SYMOFF(x) (N_TXTOFF(x) + (x).a_text + \
3327 + (x).a_data + (x).a_trsize + \
3330 +/* Where does text segment go in memory after being loaded? */
3331 +#define N_TXTADDR(x) (((N_MAGIC(x) == ZMAGIC) && \
3332 + ((x).a_entry < SPARC_PGSIZE)) ? \
3335 +/* And same for the data segment.. */
3336 +#define N_DATADDR(x) (N_MAGIC(x)==OMAGIC ? \
3337 + (N_TXTADDR(x) + (x).a_text) \
3338 + : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
3340 +#define N_TRSIZE(a) ((a).a_trsize)
3341 +#define N_DRSIZE(a) ((a).a_drsize)
3342 +#define N_SYMSIZE(a) ((a).a_syms)
3346 +#define STACK_TOP TASK_SIZE
3350 +#endif /* __NIOS2NOMMU_A_OUT_H__ */
3351 --- linux/include/asm-nios2nommu/asm-macros.h
3352 +++ linux/include/asm-nios2nommu/asm-macros.h
3355 + * Macro used to simplify coding multi-line assembler.
3356 + * Some of the bit test macro can simplify down to one line
3357 + * depending on the mask value.
3359 + * Copyright (C) 2004 Microtronix Datacom Ltd.
3361 + * All rights reserved.
3363 + * This program is free software; you can redistribute it and/or modify
3364 + * it under the terms of the GNU General Public License as published by
3365 + * the Free Software Foundation; either version 2 of the License, or
3366 + * (at your option) any later version.
3368 + * This program is distributed in the hope that it will be useful, but
3369 + * WITHOUT ANY WARRANTY; without even the implied warranty of
3370 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
3371 + * NON INFRINGEMENT. See the GNU General Public License for more
3374 + * You should have received a copy of the GNU General Public License
3375 + * along with this program; if not, write to the Free Software
3376 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
3381 + * ANDs reg2 with mask and places the result in reg1.
3383 + * You cannnot use the same register for reg1 & reg2.
3386 +.macro ANDI32 reg1,reg2,mask
3387 + .if \mask & 0xffff
3388 + .if \mask & 0xffff0000
3389 + movhi \reg1,%hi(\mask)
3390 + movui \reg1,%lo(\mask)
3391 + and \reg1,\reg1,\reg2
3393 + andi \reg1,\reg2,%lo(\mask)
3396 + andhi \reg1,\reg2,%hi(\mask)
3401 + * ORs reg2 with mask and places the result in reg1.
3403 + * It is safe to use the same register for reg1 & reg2.
3406 +.macro ORI32 reg1,reg2,mask
3407 + .if \mask & 0xffff
3408 + .if \mask & 0xffff0000
3409 + orhi \reg1,\reg2,%hi(\mask)
3410 + ori \reg1,\reg2,%lo(\mask)
3412 + ori \reg1,\reg2,%lo(\mask)
3415 + orhi \reg1,\reg2,%hi(\mask)
3420 + * XORs reg2 with mask and places the result in reg1.
3422 + * It is safe to use the same register for reg1 & reg2.
3425 +.macro XORI32 reg1,reg2,mask
3426 + .if \mask & 0xffff
3427 + .if \mask & 0xffff0000
3428 + xorhi \reg1,\reg2,%hi(\mask)
3429 + xori \reg1,\reg1,%lo(\mask)
3431 + xori \reg1,\reg2,%lo(\mask)
3434 + xorhi \reg1,\reg2,%hi(\mask)
3439 + * This is a support macro for BTBZ & BTBNZ. It checks
3440 + * the bit to make sure it is valid 32 value.
3442 + * It is safe to use the same register for reg1 & reg2.
3445 +.macro BT reg1,reg2,bit
3450 + andi \reg1,\reg2,(1 << \bit)
3452 + andhi \reg1,\reg2,(1 << (\bit - 16))
3458 + * Tests the bit in reg2 and branches to label if the
3459 + * bit is zero. The result of the bit test is stored in reg1.
3461 + * It is safe to use the same register for reg1 & reg2.
3464 +.macro BTBZ reg1,reg2,bit,label
3465 + BT \reg1,\reg2,\bit
3466 + beq \reg1,r0,\label
3470 + * Tests the bit in reg2 and branches to label if the
3471 + * bit is non-zero. The result of the bit test is stored in reg1.
3473 + * It is safe to use the same register for reg1 & reg2.
3476 +.macro BTBNZ reg1,reg2,bit,label
3477 + BT \reg1,\reg2,\bit
3478 + bne \reg1,r0,\label
3482 + * Tests the bit in reg2 and then compliments the bit in reg2.
3483 + * The result of the bit test is stored in reg1.
3485 + * It is NOT safe to use the same register for reg1 & reg2.
3488 +.macro BTC reg1,reg2,bit
3493 + andi \reg1,\reg2,(1 << \bit)
3494 + xori \reg2,\reg2,(1 << \bit)
3496 + andhi \reg1,\reg2,(1 << (\bit - 16))
3497 + xorhi \reg2,\reg2,(1 << (\bit - 16))
3503 + * Tests the bit in reg2 and then sets the bit in reg2.
3504 + * The result of the bit test is stored in reg1.
3506 + * It is NOT safe to use the same register for reg1 & reg2.
3509 +.macro BTS reg1,reg2,bit
3514 + andi \reg1,\reg2,(1 << \bit)
3515 + ori \reg2,\reg2,(1 << \bit)
3517 + andhi \reg1,\reg2,(1 << (\bit - 16))
3518 + orhi \reg2,\reg2,(1 << (\bit - 16))
3524 + * Tests the bit in reg2 and then resets the bit in reg2.
3525 + * The result of the bit test is stored in reg1.
3527 + * It is NOT safe to use the same register for reg1 & reg2.
3530 +.macro BTR reg1,reg2,bit
3535 + andi \reg1,\reg2,(1 << \bit)
3536 + andi \reg2,\reg2,%lo(~(1 << \bit))
3538 + andhi \reg1,\reg2,(1 << (\bit - 16))
3539 + andhi \reg2,\reg2,%lo(~(1 << (\bit - 16)))
3545 + * Tests the bit in reg2 and then compliments the bit in reg2.
3546 + * The result of the bit test is stored in reg1. If the
3547 + * original bit was zero it branches to label.
3549 + * It is NOT safe to use the same register for reg1 & reg2.
3552 +.macro BTCBZ reg1,reg2,bit,label
3553 + BTC \reg1,\reg2,\bit
3554 + beq \reg1,r0,\label
3558 + * Tests the bit in reg2 and then compliments the bit in reg2.
3559 + * The result of the bit test is stored in reg1. If the
3560 + * original bit was non-zero it branches to label.
3562 + * It is NOT safe to use the same register for reg1 & reg2.
3565 +.macro BTCBNZ reg1,reg2,bit,label
3566 + BTC \reg1,\reg2,\bit
3567 + bne \reg1,r0,\label
3571 + * Tests the bit in reg2 and then sets the bit in reg2.
3572 + * The result of the bit test is stored in reg1. If the
3573 + * original bit was zero it branches to label.
3575 + * It is NOT safe to use the same register for reg1 & reg2.
3578 +.macro BTSBZ reg1,reg2,bit,label
3579 + BTS \reg1,\reg2,\bit
3580 + beq \reg1,r0,\label
3584 + * Tests the bit in reg2 and then sets the bit in reg2.
3585 + * The result of the bit test is stored in reg1. If the
3586 + * original bit was non-zero it branches to label.
3588 + * It is NOT safe to use the same register for reg1 & reg2.
3591 +.macro BTSBNZ reg1,reg2,bit,label
3592 + BTS \reg1,\reg2,\bit
3593 + bne \reg1,r0,\label
3597 + * Tests the bit in reg2 and then resets the bit in reg2.
3598 + * The result of the bit test is stored in reg1. If the
3599 + * original bit was zero it branches to label.
3601 + * It is NOT safe to use the same register for reg1 & reg2.
3604 +.macro BTRBZ reg1,reg2,bit,label
3605 + BTR \reg1,\reg2,\bit
3606 + bne \reg1,r0,\label
3610 + * Tests the bit in reg2 and then resets the bit in reg2.
3611 + * The result of the bit test is stored in reg1. If the
3612 + * original bit was non-zero it branches to label.
3614 + * It is NOT safe to use the same register for reg1 & reg2.
3617 +.macro BTRBNZ reg1,reg2,bit,label
3618 + BTR \reg1,\reg2,\bit
3619 + bne \reg1,r0,\label
3623 + * Tests the bits in mask against reg2 stores the result in reg1.
3624 + * If the all the bits in the mask are zero it branches to label.
3626 + * It is safe to use the same register for reg1 & reg2.
3629 +.macro TSTBZ reg1,reg2,mask,label
3630 + ANDI32 \reg1,\reg2,\mask
3631 + beq \reg1,r0,\label
3635 + * Tests the bits in mask against reg2 stores the result in reg1.
3636 + * If the any of the bits in the mask are 1 it branches to label.
3638 + * It is safe to use the same register for reg1 & reg2.
3641 +.macro TSTBNZ reg1,reg2,mask,label
3642 + ANDI32 \reg1,\reg2,\mask
3643 + bne \reg1,r0,\label
3647 + * Pushes reg onto the stack.
3656 + * Pops the top of the stack into reg.
3673 + * The preprocessor macro does not work for
3674 + * the nios2 compiler. Undefine ENTRY and define
3675 + * a real assembler macro.
3678 +#define ENTRY(name) ASM_ENTRY name
3680 +.macro ASM_ENTRY name
3685 --- linux/include/asm-nios2nommu/atomic.h
3686 +++ linux/include/asm-nios2nommu/atomic.h
3688 +//vic - add 'atomic_add/sub_return', 'atomic_add_negative'
3689 +//vic from v850 architecture
3693 + * Copyright (C) 2004 Microtronix Datacom Ltd.
3694 + * Copyright (C) 2001 Vic Phillips (vic@microtronix.com)
3696 + * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
3698 + * All rights reserved.
3700 + * This program is free software; you can redistribute it and/or modify
3701 + * it under the terms of the GNU General Public License as published by
3702 + * the Free Software Foundation; either version 2 of the License, or
3703 + * (at your option) any later version.
3705 + * This program is distributed in the hope that it will be useful, but
3706 + * WITHOUT ANY WARRANTY; without even the implied warranty of
3707 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
3708 + * NON INFRINGEMENT. See the GNU General Public License for more
3711 + * You should have received a copy of the GNU General Public License
3712 + * along with this program; if not, write to the Free Software
3713 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
3717 +#ifndef __ARCH_NIOS2NOMMU_ATOMIC__
3718 +#define __ARCH_NIOS2NOMMU_ATOMIC__
3720 +#include <asm/system.h>
3722 +typedef struct { int counter; } atomic_t;
3723 +#define ATOMIC_INIT(i) { (i) }
3725 +#define atomic_read(v) ((v)->counter)
3726 +#define atomic_set(v, i) (((v)->counter) = i)
3729 +extern __inline__ void atomic_add(int i, atomic_t *v)
3731 + unsigned long flags;
3733 + local_irq_save(flags);
3735 + local_irq_restore(flags);
3738 +extern __inline__ int atomic_add_negative(int i, atomic_t *v)
3740 + unsigned long flags;
3743 + local_irq_save(flags);
3745 + result = (v->counter < 0);
3746 + local_irq_restore(flags);
3750 +extern __inline__ void atomic_sub(int i, atomic_t *v)
3752 + unsigned long flags;
3754 + local_irq_save(flags);
3756 + local_irq_restore(flags);
3759 +extern __inline__ int atomic_sub_and_test(int i, atomic_t *v)
3762 + unsigned long flags;
3764 + local_irq_save(flags);
3766 + result = (v->counter == 0);
3767 + local_irq_restore(flags);
3771 +extern __inline__ void atomic_inc(atomic_t *v)
3773 + unsigned long flags;
3775 + local_irq_save(flags);
3777 + local_irq_restore(flags);
3780 +extern __inline__ int atomic_inc_and_test(atomic_t *v)
3782 + unsigned long flags;
3785 + local_irq_save(flags);
3787 + result = (v->counter == 0);
3788 + local_irq_restore(flags);
3792 +extern __inline__ void atomic_dec(atomic_t *v)
3794 + int i = 1; /* the compiler optimizes better this way */
3795 + unsigned long flags;
3797 + local_irq_save(flags);
3799 + local_irq_restore(flags);
3802 +extern __inline__ int atomic_dec_and_test(atomic_t *v)
3805 + int i = 1; /* the compiler optimizes better this way */
3806 + unsigned long flags;
3808 + local_irq_save(flags);
3810 + result = (v->counter == 0);
3811 + local_irq_restore(flags);
3815 +extern __inline__ int atomic_inc_return(atomic_t *v)
3818 + unsigned long flags;
3820 + local_irq_save(flags);
3821 + result = ++v->counter;
3822 + local_irq_restore(flags);
3826 +extern __inline__ int atomic_dec_return(atomic_t *v)
3829 + int i = 1; /* the compiler optimizes better this way */
3830 + unsigned long flags;
3832 + local_irq_save(flags);
3834 + result = v->counter;
3835 + local_irq_restore(flags);
3839 +extern __inline__ int atomic_add_return (int i, volatile atomic_t *v)
3842 + unsigned long flags;
3844 + local_irq_save(flags);
3845 + res = v->counter + i;
3847 + local_irq_restore(flags);
3852 +static __inline__ int atomic_sub_return (int i, volatile atomic_t *v)
3855 + unsigned long flags;
3857 + local_irq_save(flags);
3858 + res = v->counter - i;
3860 + local_irq_restore(flags);
3865 +#define atomic_dec_return(v) atomic_sub_return(1,(v))
3866 +#define atomic_inc_return(v) atomic_add_return(1,(v))
3868 +/* Atomic operations are already serializing */
3869 +#define smp_mb__before_atomic_dec() barrier()
3870 +#define smp_mb__after_atomic_dec() barrier()
3871 +#define smp_mb__before_atomic_inc() barrier()
3872 +#define smp_mb__after_atomic_inc() barrier()
3875 +#endif /* !(__ARCH_NIOS2NOMMU_ATOMIC__) */
3878 --- linux/include/asm-nios2nommu/bitops.h
3879 +++ linux/include/asm-nios2nommu/bitops.h
3881 +#ifndef _ASM_NIOS_BITOPS_H_
3882 +#define _ASM_NIOS_BITOPS_H_
3884 +/*--------------------------------------------------------------------
3886 + * include/asm-nios2nommu/bitops.h
3888 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
3890 + * Copyright (C) 2004 Microtronix Datacom Ltd
3892 + * This program is free software; you can redistribute it and/or modify
3893 + * it under the terms of the GNU General Public License as published by
3894 + * the Free Software Foundation; either version 2 of the License, or
3895 + * (at your option) any later version.
3897 + * This program is distributed in the hope that it will be useful,
3898 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
3899 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3900 + * GNU General Public License for more details.
3903 + * Jan/20/2004 dgt NiosII
3905 + ---------------------------------------------------------------------*/
3909 +#include <linux/config.h>
3910 +#include <linux/compiler.h>
3911 +#include <asm/byteorder.h> /* swab32 */
3912 +#include <asm/system.h>
3916 + * Adapted to NIOS from generic bitops.h:
3918 + * For the benefit of those who are trying to port Linux to another
3919 + * architecture, here are some C-language equivalents. You should
3920 + * recode these in the native assembly language, if at all possible.
3921 + * To guarantee atomicity, these routines call cli() and sti() to
3922 + * disable interrupts while they operate. (You have to provide inline
3923 + * routines to cli() and sti().)
3925 + * Also note, these routines assume that you have 32 bit integers.
3926 + * You will have to change this if you are trying to port Linux to the
3927 + * Alpha architecture or to a Cray. :-)
3929 + * C language equivalents written by Theodore Ts'o, 9/26/92
3935 +static inline int ffs(int x)
3941 + if (!(x & 0xffff)) {
3945 + if (!(x & 0xff)) {
3965 + * Generic __ffs().
3967 +static inline int __ffs(int x)
3973 + if (!(x & 0xffff)) {
3977 + if (!(x & 0xff)) {
3997 + * fls: find last bit set.
3999 +#define fls(x) generic_fls(x)
4003 + * Every architecture must define this function. It's the fastest
4004 + * way of searching a 140-bit bitmap where the first 100 bits are
4005 + * unlikely to be set. It's guaranteed that at least one of the 140
4006 + * bits is cleared.
4008 +static inline int sched_find_first_bit(unsigned long *b)
4010 + if (unlikely(b[0]))
4011 + return __ffs(b[0]);
4012 + if (unlikely(b[1]))
4013 + return __ffs(b[1]) + 32;
4014 + if (unlikely(b[2]))
4015 + return __ffs(b[2]) + 64;
4017 + return __ffs(b[3]) + 96;
4018 + return __ffs(b[4]) + 128;
4022 + * ffz = Find First Zero in word. Undefined if no zero exists,
4023 + * so code should check against ~0UL first..
4025 +static __inline__ unsigned long ffz(unsigned long word)
4027 + unsigned long result = 0;
4037 +static __inline__ void set_bit(int nr, volatile unsigned long * addr)
4039 + int * a = (int *) addr;
4041 + unsigned long flags;
4044 + mask = 1 << (nr & 0x1f);
4045 + local_irq_save(flags);
4047 + local_irq_restore(flags);
4050 +static __inline__ void __set_bit(int nr, volatile unsigned long * addr)
4052 + int * a = (int *) addr;
4056 + mask = 1 << (nr & 0x1f);
4061 + * clear_bit() doesn't provide any barrier for the compiler.
4063 +#define smp_mb__before_clear_bit() barrier()
4064 +#define smp_mb__after_clear_bit() barrier()
4066 +static __inline__ void clear_bit(int nr, volatile unsigned long * addr)
4068 + int * a = (int *) addr;
4070 + unsigned long flags;
4073 + mask = 1 << (nr & 0x1f);
4074 + local_irq_save(flags);
4076 + local_irq_restore(flags);
4079 +static __inline__ void __clear_bit(int nr, volatile unsigned long * addr)
4081 + int * a = (int *) addr;
4085 + mask = 1 << (nr & 0x1f);
4089 +static __inline__ void change_bit(int nr, volatile unsigned long * addr)
4092 + unsigned long *ADDR = (unsigned long *) addr;
4095 + mask = 1 << (nr & 31);
4096 + local_irq_save(flags);
4098 + local_irq_restore(flags);
4101 +static __inline__ void __change_bit(int nr, volatile unsigned long * addr)
4104 + unsigned long *ADDR = (unsigned long *) addr;
4107 + mask = 1 << (nr & 31);
4111 +static __inline__ int test_and_set_bit(int nr, volatile unsigned long * addr)
4114 + volatile unsigned int *a = (volatile unsigned int *) addr;
4115 + unsigned long flags;
4118 + mask = 1 << (nr & 0x1f);
4119 + local_irq_save(flags);
4120 + retval = (mask & *a) != 0;
4122 + local_irq_restore(flags);
4127 +static __inline__ int __test_and_set_bit(int nr, volatile unsigned long * addr)
4130 + volatile unsigned int *a = (volatile unsigned int *) addr;
4133 + mask = 1 << (nr & 0x1f);
4134 + retval = (mask & *a) != 0;
4139 +static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * addr)
4142 + volatile unsigned int *a = (volatile unsigned int *) addr;
4143 + unsigned long flags;
4146 + mask = 1 << (nr & 0x1f);
4147 + local_irq_save(flags);
4148 + retval = (mask & *a) != 0;
4150 + local_irq_restore(flags);
4155 +static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long * addr)
4158 + volatile unsigned int *a = (volatile unsigned int *) addr;
4161 + mask = 1 << (nr & 0x1f);
4162 + retval = (mask & *a) != 0;
4167 +static __inline__ int test_and_change_bit(int nr, volatile unsigned long * addr)
4170 + volatile unsigned int *a = (volatile unsigned int *) addr;
4171 + unsigned long flags;
4174 + mask = 1 << (nr & 0x1f);
4175 + local_irq_save(flags);
4176 + retval = (mask & *a) != 0;
4178 + local_irq_restore(flags);
4183 +static __inline__ int __test_and_change_bit(int nr, volatile unsigned long * addr)
4186 + volatile unsigned int *a = (volatile unsigned int *) addr;
4189 + mask = 1 << (nr & 0x1f);
4190 + retval = (mask & *a) != 0;
4196 + * This routine doesn't need to be atomic.
4198 +static __inline__ int __constant_test_bit(int nr, const volatile unsigned long * addr)
4200 + return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
4203 +static __inline__ int __test_bit(int nr, const volatile unsigned long * addr)
4205 + int * a = (int *) addr;
4209 + mask = 1 << (nr & 0x1f);
4210 + return ((mask & *a) != 0);
4213 +#define test_bit(nr,addr) \
4214 +(__builtin_constant_p(nr) ? \
4215 + __constant_test_bit((nr),(unsigned long *)(addr)) : \
4216 + __test_bit((nr),(unsigned long *)(addr)))
4219 +/* find_next_zero_bit() finds the first zero bit in a bit string of length
4220 + * 'size' bits, starting the search at bit 'offset'. This is largely based
4221 + * on Linus's ALPHA routines, which are pretty portable BTW.
4224 +extern __inline__ unsigned long find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
4226 + unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
4227 + unsigned long result = offset & ~31UL;
4228 + unsigned long tmp;
4230 + if (offset >= size)
4236 + tmp |= ~0UL >> (32-offset);
4240 + goto found_middle;
4244 + while (size & ~31UL) {
4245 + if (~(tmp = *(p++)))
4246 + goto found_middle;
4255 + tmp |= ~0UL << size;
4257 + return result + size;
4259 + return result + ffz(tmp);
4263 + * Find next one bit in a bitmap reasonably efficiently.
4265 +extern __inline__ unsigned long find_next_bit(const unsigned long *addr,
4266 + unsigned long size, unsigned long offset)
4268 + unsigned int *p = ((unsigned int *) addr) + (offset >> 5);
4269 + unsigned int result = offset & ~31UL;
4272 + if (offset >= size)
4278 + tmp &= ~0UL << offset;
4282 + goto found_middle;
4286 + while (size >= 32) {
4287 + if ((tmp = *p++) != 0)
4288 + goto found_middle;
4297 + tmp &= ~0UL >> (32 - size);
4298 + if (tmp == 0UL) /* Are any bits set? */
4299 + return result + size; /* Nope. */
4301 + return result + __ffs(tmp);
4305 + * hweightN: returns the hamming weight (i.e. the number
4306 + * of bits set) of a N-bit word
4309 +#define hweight32(x) generic_hweight32(x)
4310 +#define hweight16(x) generic_hweight16(x)
4311 +#define hweight8(x) generic_hweight8(x)
4313 +/* Linus sez that gcc can optimize the following correctly, we'll see if this
4314 + * holds on the Sparc as it does for the ALPHA.
4317 +#define find_first_zero_bit(addr, size) \
4318 + find_next_zero_bit((addr), (size), 0)
4319 +#define find_first_bit(addr, size) \
4320 + find_next_bit((addr), (size), 0)
4322 +/* Now for the ext2 filesystem bit operations and helper routines.
4324 + * Both NIOS and ext2 are little endian, so these are the same as above.
4327 +#define ext2_set_bit test_and_set_bit
4328 +#define ext2_clear_bit test_and_clear_bit
4329 +#define ext2_test_bit test_bit
4331 +#define ext2_set_bit_atomic(lock, nr, addr) \
4334 + spin_lock(lock); \
4335 + ret = ext2_set_bit((nr),(unsigned long *) (addr)); \
4336 + spin_unlock(lock); \
4340 +#define ext2_clear_bit_atomic(lock, nr, addr) \
4343 + spin_lock(lock); \
4344 + ret = ext2_clear_bit((nr),(unsigned long *) (addr)); \
4345 + spin_unlock(lock); \
4349 +#define ext2_find_first_zero_bit find_first_zero_bit
4350 +#define ext2_find_next_zero_bit find_next_zero_bit
4352 +#endif /* _ASM_NIOS_BITOPS_H */
4353 --- linux/include/asm-nios2nommu/bootinfo.h
4354 +++ linux/include/asm-nios2nommu/bootinfo.h
4357 +/* Nothing for nios2nommu */
4358 --- linux/include/asm-nios2nommu/bug.h
4359 +++ linux/include/asm-nios2nommu/bug.h
4361 +#ifndef _NIOS2NOMMU_BUG_H
4362 +#define _NIOS2NOMMU_BUG_H
4364 +/*--------------------------------------------------------------------
4366 + * include/asm-nios2nommu/bug.h
4368 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
4370 + * Copyright (C) 2004 Microtronix Datacom Ltd
4372 + * This program is free software; you can redistribute it and/or modify
4373 + * it under the terms of the GNU General Public License as published by
4374 + * the Free Software Foundation; either version 2 of the License, or
4375 + * (at your option) any later version.
4377 + * This program is distributed in the hope that it will be useful,
4378 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4379 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4380 + * GNU General Public License for more details.
4383 + * Jan/20/2004 dgt NiosII
4385 + ---------------------------------------------------------------------*/
4388 +#define BUG() do { \
4389 + printk("%s(%d): kernel BUG!\n", __FILE__, __LINE__); \
4392 +#define BUG_ON(condition) do { \
4393 + if (unlikely((condition)!=0)) \
4397 +#define PAGE_BUG(page) do { \
4401 +#define WARN_ON(condition) do { \
4402 + if (unlikely((condition)!=0)) { \
4403 + printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
4409 --- linux/include/asm-nios2nommu/bugs.h
4410 +++ linux/include/asm-nios2nommu/bugs.h
4412 +#ifndef __ASM_NIOS_BUGS_H
4413 +#define __ASM_NIOS_BUGS_H
4415 +/*--------------------------------------------------------------------
4417 + * include/asm-nios2nommu/bugs.h
4419 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
4421 + * Copyright (C) 1994 Linus Torvalds
4422 + * Copyright (C) 2004 Microtronix Datacom Ltd
4424 + * This program is free software; you can redistribute it and/or modify
4425 + * it under the terms of the GNU General Public License as published by
4426 + * the Free Software Foundation; either version 2 of the License, or
4427 + * (at your option) any later version.
4429 + * This program is distributed in the hope that it will be useful,
4430 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4431 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4432 + * GNU General Public License for more details.
4435 + * Jan/20/2004 dgt NiosII
4437 + ---------------------------------------------------------------------*/
4441 + * This is included by init/main.c to check for architecture-dependent bugs.
4444 + * void check_bugs(void);
4447 +static void check_bugs(void)
4452 --- linux/include/asm-nios2nommu/byteorder.h
4453 +++ linux/include/asm-nios2nommu/byteorder.h
4455 +#ifndef __ASM_NIOS_BYTEORDER_H
4456 +#define __ASM_NIOS_BYTEORDER_H
4458 +/*--------------------------------------------------------------------
4460 + * include/asm-nios2nommu/byteorder.h
4462 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
4464 + * Copyright (C) 2004 Microtronix Datacom Ltd
4466 + * This program is free software; you can redistribute it and/or modify
4467 + * it under the terms of the GNU General Public License as published by
4468 + * the Free Software Foundation; either version 2 of the License, or
4469 + * (at your option) any later version.
4471 + * This program is distributed in the hope that it will be useful,
4472 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4473 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4474 + * GNU General Public License for more details.
4477 + * Jan/20/2004 dgt NiosII
4479 + ---------------------------------------------------------------------*/
4482 +#include <asm/types.h>
4484 +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
4485 +# define __BYTEORDER_HAS_U64__
4486 +# define __SWAB_64_THRU_32__
4489 +#include <linux/byteorder/little_endian.h>
4493 --- linux/include/asm-nios2nommu/cache.h
4494 +++ linux/include/asm-nios2nommu/cache.h
4497 + * Copyright (C) 2004 Microtronix Datacom Ltd.
4499 + * All rights reserved.
4501 + * This program is free software; you can redistribute it and/or modify
4502 + * it under the terms of the GNU General Public License as published by
4503 + * the Free Software Foundation; either version 2 of the License, or
4504 + * (at your option) any later version.
4506 + * This program is distributed in the hope that it will be useful, but
4507 + * WITHOUT ANY WARRANTY; without even the implied warranty of
4508 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
4509 + * NON INFRINGEMENT. See the GNU General Public License for more
4512 + * You should have received a copy of the GNU General Public License
4513 + * along with this program; if not, write to the Free Software
4514 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
4517 +#ifndef __ARCH_NIOS2NOMMU_CACHE_H
4518 +#define __ARCH_NIOS2NOMMU_CACHE_H
4520 +#include <asm/nios.h>
4522 +/* bytes per L1 cache line */
4523 +#define L1_CACHE_BYTES nasys_icache_line_size /* this need to be at least 1 */
4526 +#define __cacheline_aligned
4527 +#define ____cacheline_aligned
4530 --- linux/include/asm-nios2nommu/cachectl.h
4531 +++ linux/include/asm-nios2nommu/cachectl.h
4534 + * Copyright (C) 2004 Microtronix Datacom Ltd.
4536 + * All rights reserved.
4538 + * This program is free software; you can redistribute it and/or modify
4539 + * it under the terms of the GNU General Public License as published by
4540 + * the Free Software Foundation; either version 2 of the License, or
4541 + * (at your option) any later version.
4543 + * This program is distributed in the hope that it will be useful, but
4544 + * WITHOUT ANY WARRANTY; without even the implied warranty of
4545 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
4546 + * NON INFRINGEMENT. See the GNU General Public License for more
4549 + * You should have received a copy of the GNU General Public License
4550 + * along with this program; if not, write to the Free Software
4551 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
4555 +#ifndef _NIOS2NOMMU_CACHECTL_H
4556 +#define _NIOS2NOMMU_CACHECTL_H
4558 +/* Definitions for the cacheflush system call. */
4560 +#define FLUSH_SCOPE_LINE 1 /* Flush a cache line */
4561 +#define FLUSH_SCOPE_PAGE 2 /* Flush a page */
4562 +#define FLUSH_SCOPE_ALL 3 /* Flush the whole cache -- superuser only */
4564 +#define FLUSH_CACHE_DATA 1 /* Writeback and flush data cache */
4565 +#define FLUSH_CACHE_INSN 2 /* Flush instruction cache */
4566 +#define FLUSH_CACHE_BOTH 3 /* Flush both caches */
4568 +#endif /* _NIOS2NOMMU_CACHECTL_H */
4569 --- linux/include/asm-nios2nommu/cacheflush.h
4570 +++ linux/include/asm-nios2nommu/cacheflush.h
4572 +#ifndef _NIOS2NOMMU_CACHEFLUSH_H
4573 +#define _NIOS2NOMMU_CACHEFLUSH_H
4576 + * Ported from m68knommu.
4578 + * (C) Copyright 2003, Microtronix Datacom Ltd.
4579 + * (C) Copyright 2000-2002, Greg Ungerer <gerg@snapgear.com>
4581 + * All rights reserved.
4583 + * This program is free software; you can redistribute it and/or modify
4584 + * it under the terms of the GNU General Public License as published by
4585 + * the Free Software Foundation; either version 2 of the License, or
4586 + * (at your option) any later version.
4588 + * This program is distributed in the hope that it will be useful, but
4589 + * WITHOUT ANY WARRANTY; without even the implied warranty of
4590 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
4591 + * NON INFRINGEMENT. See the GNU General Public License for more
4594 + * You should have received a copy of the GNU General Public License
4595 + * along with this program; if not, write to the Free Software
4596 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
4599 +#include <linux/mm.h>
4601 +extern void cache_push (unsigned long vaddr, int len);
4602 +extern void dcache_push (unsigned long vaddr, int len);
4603 +extern void icache_push (unsigned long vaddr, int len);
4604 +extern void cache_push_all (void);
4606 +#define flush_cache_all() __flush_cache_all()
4607 +#define flush_cache_mm(mm) do { } while (0)
4608 +#define flush_cache_range(vma, start, end) do { } while (0)
4609 +#define flush_cache_page(vma, vmaddr) do { } while (0)
4610 +#define flush_dcache_range(start,end) dcache_push(start, end - start)
4611 +#define flush_dcache_page(page) do { } while (0)
4612 +#define flush_icache_range(start,end) cache_push(start, end - start)
4613 +#define flush_icache_page(vma,pg) do { } while (0)
4614 +#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
4616 +#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
4617 + memcpy(dst, src, len)
4618 +#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
4619 + memcpy(dst, src, len)
4622 +extern inline void __flush_cache_all(void)
4627 +#endif /* _NIOS2NOMMU_CACHEFLUSH_H */
4628 --- linux/include/asm-nios2nommu/checksum.h
4629 +++ linux/include/asm-nios2nommu/checksum.h
4631 +#ifndef __NIOS2_CHECKSUM_H
4632 +#define __NIOS2_CHECKSUM_H
4634 +/* checksum.h: IP/UDP/TCP checksum routines on the NIOS.
4636 + * Copyright(C) 1995 Linus Torvalds
4637 + * Copyright(C) 1995 Miguel de Icaza
4638 + * Copyright(C) 1996 David S. Miller
4639 + * Copyright(C) 2001 Ken Hill
4640 + * Copyright(C) 2004 Microtronix Datacom Ltd.
4643 + * Alpha checksum c-code
4644 + * ix86 inline assembly
4647 + * All rights reserved.
4649 + * This program is free software; you can redistribute it and/or modify
4650 + * it under the terms of the GNU General Public License as published by
4651 + * the Free Software Foundation; either version 2 of the License, or
4652 + * (at your option) any later version.
4654 + * This program is distributed in the hope that it will be useful, but
4655 + * WITHOUT ANY WARRANTY; without even the implied warranty of
4656 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
4657 + * NON INFRINGEMENT. See the GNU General Public License for more
4660 + * You should have received a copy of the GNU General Public License
4661 + * along with this program; if not, write to the Free Software
4662 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
4667 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4670 + * computes the checksum of the TCP/UDP pseudo-header
4671 + * returns a 16-bit checksum, already complemented
4674 +extern inline unsigned short csum_tcpudp_magic(unsigned long saddr,
4675 + unsigned long daddr,
4676 + unsigned short len,
4677 + unsigned short proto,
4681 + __asm__ __volatile__(
4682 +" add %0, %3, %0\n"
4683 +" bgeu %0, %3, 1f\n"
4684 +" addi %0, %0, 1\n"
4685 +"1: add %0, %4, %0\n"
4686 +" bgeu %0, %4, 1f\n"
4687 +" addi %0, %0, 1\n"
4688 +"1: add %0, %5, %0\n"
4689 +" bgeu %0, %5, 1f\n"
4690 +" addi %0, %0, 1\n"
4693 + We need the carry from the addition of 16-bit
4694 + significant addition, so we zap out the low bits
4695 + in one half, zap out the high bits in another,
4696 + shift them both up to the top 16-bits of a word
4697 + and do the carry producing addition, finally
4698 + shift the result back down to the low 16-bits.
4700 + Actually, we can further optimize away two shifts
4701 + because we know the low bits of the original
4702 + value will be added to zero-only bits so cannot
4703 + affect the addition result nor the final carry
4706 +" slli %1,%0, 16\n" /* Need a copy to fold with */
4707 + /* Bring the LOW 16 bits up */
4708 +" add %0, %1, %0\n" /* add and set carry, neat eh? */
4709 +" cmpltu r15, %0, %1\n" /* get remaining carry bit */
4710 +" srli %0, %0, 16\n" /* shift back down the result */
4711 +" add %0, %0, r15\n"
4712 +" nor %0, %0, %0\n" /* negate */
4713 + : "=&r" (sum), "=&r" (saddr)
4714 + : "0" (sum), "1" (saddr), "r" (ntohl(len+proto)), "r" (daddr)
4716 + return ((unsigned short) sum);
4721 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4724 + extern inline unsigned short from32to16(unsigned long x)
4727 + __asm__ __volatile__(
4728 + "add %0, %1, %0\n"
4729 + "cmpltu r15, %0, %1\n"
4730 + "srli %0, %0, 16\n"
4731 + "add %0, %0, r15\n"
4733 + : "r" (x << 16), "0" (x)
4740 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4743 +extern inline unsigned long do_csum(const unsigned char * buff, int len)
4746 + unsigned long result = 0;
4751 + odd = 1 & (unsigned long) buff;
4753 +////result = *buff; // dgt: Big endian
4754 + result = *buff << 8; // dgt: Little endian
4759 + count = len >> 1; /* nr of 16-bit words.. */
4761 + if (2 & (unsigned long) buff) {
4762 + result += *(unsigned short *) buff;
4767 + count >>= 1; /* nr of 32-bit words.. */
4769 + unsigned long carry = 0;
4771 + unsigned long w = *(unsigned long *) buff;
4776 + carry = (w > result);
4779 + result = (result & 0xffff) + (result >> 16);
4782 + result += *(unsigned short *) buff;
4787 + result += *buff; /* This is little machine, byte is right */
4788 + result = from32to16(result);
4790 + result = ((result >> 8) & 0xff) | ((result & 0xff) << 8);
4797 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4800 +/* ihl is always 5 or greater, almost always is 5, iph is always word
4801 + * aligned but can fail to be dword aligned very often.
4804 + extern inline unsigned short ip_fast_csum(const unsigned char *iph, unsigned int ihl)
4809 + __asm__ __volatile__(
4810 +" andi r8, %1, 2\n" /* Remember original alignment */
4811 +" ldw %0, (%1)\n" /* 16 or 32 bit boundary */
4812 +" beq r8, r0, 1f\n" /* Aligned on 32 bit boundary, go */
4813 +" srli %0, %0, 16\n" /* Get correct 16 bits */
4814 +" addi %2, %2, -1\n" /* Take off for 4 bytes, pickup last 2 at end */
4815 +" addi %1, %1, 2\n" /* Adjust pointer to 32 bit boundary */
4818 +" addi %2, %2, -1\n"
4819 +" addi %1, %1, 4\n" /* Bump ptr a long word */
4823 +" add %0, r9, %0\n"
4824 +" bgeu %0, r9, 2f\n"
4825 +" addi %0, %0, 1\n"
4827 +" addi %1, %1, 4\n"
4828 +" addi %2, %2, -1\n"
4830 +" bne %2, r0, 1b\n"
4831 +" beq r8, r0, 1f\n" /* 32 bit boundary time to leave */
4832 +" srli r9, r9, 16\n" /* 16 bit boundary, get correct 16 bits */
4833 +" add %0, r9, %0\n"
4834 +" bgeu %0, r9, 1f\n"
4835 +" addi %0, %0, 1\n"
4837 +" slli %2, %0, 16\n"
4838 +" add %0, %2, %0\n"
4839 +" cmpltu r8, %0, %2\n"
4840 +" srli %0, %0, 16\n"
4841 +" add %0, %0, r8\n"
4842 +" nor %0, %0, %0\n"
4843 + : "=&r" (sum), "=&r" (iph), "=&r" (ihl)
4844 + : "1" (iph), "2" (ihl)
4850 +/*these 2 functions are now in checksum.c */
4851 +unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum);
4852 +unsigned int csum_partial_copy(const char *src, char *dst, int len, int sum);
4854 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4857 + * the same as csum_partial_copy, but copies from user space.
4859 + * here even more important to align src and dst on a 32-bit (or even
4860 + * better 64-bit) boundary
4862 +extern inline unsigned int
4863 +csum_partial_copy_from_user(const char *src, char *dst, int len, int sum, int *csum_err)
4866 + if (csum_err) *csum_err = 0;
4867 + memcpy(dst, src, len);
4868 + return csum_partial(dst, len, sum);
4872 +#define csum_partial_copy_nocheck(src, dst, len, sum) \
4873 + csum_partial_copy ((src), (dst), (len), (sum))
4877 + * this routine is used for miscellaneous IP-like checksums, mainly
4881 +extern inline unsigned short ip_compute_csum(unsigned char * buff, int len)
4884 + return ~from32to16(do_csum(buff,len));
4889 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4892 +#define csum_partial_copy_fromuser(s, d, l, w) \
4893 + csum_partial_copy((char *) (s), (d), (l), (w))
4896 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4900 + * Fold a partial checksum without adding pseudo headers
4902 +extern __inline__ unsigned int csum_fold(unsigned int sum)
4905 + __asm__ __volatile__(
4906 + "add %0, %1, %0\n"
4907 + "cmpltu r8, %0, %1\n"
4908 + "srli %0, %0, 16\n"
4909 + "add %0, %0, r8\n"
4910 + "nor %0, %0, %0\n"
4912 + : "r" (sum << 16), "0" (sum)
4919 +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4922 +extern __inline__ unsigned long csum_tcpudp_nofold(unsigned long saddr,
4923 + unsigned long daddr,
4924 + unsigned short len,
4925 + unsigned short proto,
4929 + __asm__ __volatile__(
4930 + "add %0, %1, %0\n"
4931 + "cmpltu r8, %0, %1\n"
4932 + "add %0, %0, r8\n" /* add carry */
4933 + "add %0, %2, %0\n"
4934 + "cmpltu r8, %0, %2\n"
4935 + "add %0, %0, r8\n" /* add carry */
4936 + "add %0, %3, %0\n"
4937 + "cmpltu r8, %0, %3\n"
4938 + "add %0, %0, r8\n" /* add carry */
4939 + : "=r" (sum), "=r" (saddr)
4940 + : "r" (daddr), "r" ( (ntohs(len)<<16) + (proto*256) ),
4950 +#endif /* (__NIOS2_CHECKSUM_H) */
4951 --- linux/include/asm-nios2nommu/cprefix.h
4952 +++ linux/include/asm-nios2nommu/cprefix.h
4954 +/* cprefix.h: This file is included by assembly source which needs
4955 + * to know what the c-label prefixes are. The newer versions
4956 + * of cpp that come with gcc predefine such things to help
4957 + * us out. The reason this stuff is needed is to make
4958 + * solaris compiles of the kernel work.
4960 + * Copyright (C) 2004 Microtronix Datacom Ltd.
4961 + * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
4963 + * All rights reserved.
4965 + * This program is free software; you can redistribute it and/or modify
4966 + * it under the terms of the GNU General Public License as published by
4967 + * the Free Software Foundation; either version 2 of the License, or
4968 + * (at your option) any later version.
4970 + * This program is distributed in the hope that it will be useful, but
4971 + * WITHOUT ANY WARRANTY; without even the implied warranty of
4972 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
4973 + * NON INFRINGEMENT. See the GNU General Public License for more
4976 + * You should have received a copy of the GNU General Public License
4977 + * along with this program; if not, write to the Free Software
4978 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
4981 +#ifndef __NIOS2_CPREFIX_H
4982 +#define __NIOS2_CPREFIX_H
4984 +#define C_LABEL_PREFIX
4986 +#define CONCAT(a, b) CONCAT2(a, b)
4987 +#define CONCAT2(a, b) a##b
4989 +#define C_LABEL(name) CONCAT(C_LABEL_PREFIX, name)
4991 +#endif /* !(__NIOS2_CPREFIX_H) */
4992 --- linux/include/asm-nios2nommu/cpumask.h
4993 +++ linux/include/asm-nios2nommu/cpumask.h
4996 + * All rights reserved.
4998 + * Copyright (C) 2004, Microtronix Datacom Ltd.
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.
5017 +#ifndef _ASM_NIOS2NOMMU_CPUMASK_H
5018 +#define _ASM_NIOS2NOMMU_CPUMASK_H
5020 +#include <asm-generic/cpumask.h>
5022 +#endif /* _ASM_NIOS2NOMMU_CPUMASK_H */
5023 --- linux/include/asm-nios2nommu/current.h
5024 +++ linux/include/asm-nios2nommu/current.h
5026 +#ifndef _NIOS2NOMMU_CURRENT_H
5027 +#define _NIOS2NOMMU_CURRENT_H
5030 + * (C) Copyright 2000, Lineo, David McCullough <davidm@uclinux.org>
5031 + * (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com)
5032 + * (C) Copyright 2004, Microtronix Datacom Ltd.
5034 + * All rights reserved.
5036 + * This program is free software; you can redistribute it and/or modify
5037 + * it under the terms of the GNU General Public License as published by
5038 + * the Free Software Foundation; either version 2 of the License, or
5039 + * (at your option) any later version.
5041 + * This program is distributed in the hope that it will be useful, but
5042 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5043 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5044 + * NON INFRINGEMENT. See the GNU General Public License for more
5047 + * You should have received a copy of the GNU General Public License
5048 + * along with this program; if not, write to the Free Software
5049 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5053 +#include <linux/thread_info.h>
5055 +struct task_struct;
5057 +static inline struct task_struct *get_current(void)
5059 + return(current_thread_info()->task);
5062 +#define current get_current()
5064 +#endif /* _NIOS2NOMMU_CURRENT_H */
5065 --- linux/include/asm-nios2nommu/delay.h
5066 +++ linux/include/asm-nios2nommu/delay.h
5068 +#ifndef _NIOS_DELAY_H
5069 +#define _NIOS_DELAY_H
5071 +/*--------------------------------------------------------------------
5073 + * include/asm-nios2nommu/delay.h
5075 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
5077 + * Copyright (C) 2004 Microtronix Datacom Ltd
5079 + * This program is free software; you can redistribute it and/or modify
5080 + * it under the terms of the GNU General Public License as published by
5081 + * the Free Software Foundation; either version 2 of the License, or
5082 + * (at your option) any later version.
5084 + * This program is distributed in the hope that it will be useful,
5085 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
5086 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5087 + * GNU General Public License for more details.
5090 + * Jan/20/2004 dgt NiosII
5092 + ---------------------------------------------------------------------*/
5095 +#include <asm/param.h>
5097 +extern __inline__ void __delay(unsigned long loops)
5101 + __asm__ __volatile__(
5103 + " beq %0,zero,2f\n\t"
5104 + " addi %0, %0, -1\n\t"
5108 + : "=r" (dummy) /* Need output for optimizer */
5110 + : "0" (loops) /* %0 Input */
5115 + * Note that 19 * 226 == 4294 ==~ 2^32 / 10^6, so
5116 + * loops = (4294 * usecs * loops_per_jiffy * HZ) / 2^32.
5118 + * The mul instruction gives us loops = (a * b) / 2^32.
5119 + * We choose a = usecs * 19 * HZ and b = loops_per_jiffy * 226
5120 + * because this lets us support a wide range of HZ and
5121 + * loops_per_jiffy values without either a or b overflowing 2^32.
5122 + * Thus we need usecs * HZ <= (2^32 - 1) / 19 = 226050910 and
5123 + * loops_per_jiffy <= (2^32 - 1) / 226 = 19004280
5124 + * (which corresponds to ~3800 bogomips at HZ = 100).
5127 +#define __MAX_UDELAY (226050910UL/HZ) /* maximum udelay argument */
5128 +#define __MAX_NDELAY (4294967295UL/HZ) /* maximum ndelay argument */
5130 +extern unsigned long loops_per_jiffy;
5132 +extern __inline__ void __udelay(unsigned int x)
5134 + unsigned int loops;
5136 + __asm__("mulxuu %0,%1,%2" : "=r" (loops) :
5137 + "r" (x), "r" (loops_per_jiffy * 226));
5141 +extern __inline__ void __ndelay(unsigned int x)
5143 + unsigned int loops;
5145 + __asm__("mulxuu %0,%1,%2" : "=r" (loops) :
5146 + "r" (x), "r" (loops_per_jiffy * 5));
5150 +extern void __bad_udelay(void); /* deliberately undefined */
5151 +extern void __bad_ndelay(void); /* deliberately undefined */
5153 +#define udelay(n) (__builtin_constant_p(n)? \
5154 + ((n) > __MAX_UDELAY? __bad_udelay(): __udelay((n) * (19 * HZ))) : \
5155 + __udelay((n) * (19 * HZ)))
5157 +#define ndelay(n) (__builtin_constant_p(n)? \
5158 + ((n) > __MAX_NDELAY? __bad_ndelay(): __ndelay((n) * HZ)) : \
5159 + __ndelay((n) * HZ))
5161 +#define muldiv(a, b, c) (((a)*(b))/(c))
5163 +#endif /* defined(_NIOS_DELAY_H) */
5164 --- linux/include/asm-nios2nommu/div64.h
5165 +++ linux/include/asm-nios2nommu/div64.h
5167 +#ifndef __ASMNIOS_DIV64_H
5168 +#define __ASMNIOS_DIV64_H
5170 +/*--------------------------------------------------------------------
5172 + * include/asm-nios2nommu/div64.h
5174 + * Derived from m68knommu
5176 + * Copyright (C) 2004 Microtronix Datacom Ltd
5178 + * This program is free software; you can redistribute it and/or modify
5179 + * it under the terms of the GNU General Public License as published by
5180 + * the Free Software Foundation; either version 2 of the License, or
5181 + * (at your option) any later version.
5183 + * This program is distributed in the hope that it will be useful,
5184 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
5185 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5186 + * GNU General Public License for more details.
5189 + * Jan/20/2004 dgt NiosII
5191 + ---------------------------------------------------------------------*/
5194 +#include <asm-generic/div64.h>
5198 --- linux/include/asm-nios2nommu/dma-mapping.h
5199 +++ linux/include/asm-nios2nommu/dma-mapping.h
5202 + * include/asm-s390/dma-mapping.h
5206 + * This file exists so that #include <dma-mapping.h> doesn't break anything.
5209 +#ifndef _ASM_DMA_MAPPING_H
5210 +#define _ASM_DMA_MAPPING_H
5212 +static inline void *dma_alloc_coherent(struct device *dev, size_t size,
5213 + dma_addr_t *dma_handle, int flag)
5219 +static inline void dma_free_coherent(struct device *dev, size_t size,
5220 + void *vaddr, dma_addr_t dma_handle)
5225 +#endif /* _ASM_DMA_MAPPING_H */
5226 --- linux/include/asm-nios2nommu/dma.h
5227 +++ linux/include/asm-nios2nommu/dma.h
5229 +/* $Id: dma.h,v 1.5 2004/03/02 16:05:52 ken-h Exp $
5231 + * Copyright 1995 (C) David S. Miller (davem@caip.rutgers.edu)
5232 + * Copyright 2004 (C) Microtronix Datacom Ltd.
5234 + * All rights reserved.
5236 + * This program is free software; you can redistribute it and/or modify
5237 + * it under the terms of the GNU General Public License as published by
5238 + * the Free Software Foundation; either version 2 of the License, or
5239 + * (at your option) any later version.
5241 + * This program is distributed in the hope that it will be useful, but
5242 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5243 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5244 + * NON INFRINGEMENT. See the GNU General Public License for more
5247 + * You should have received a copy of the GNU General Public License
5248 + * along with this program; if not, write to the Free Software
5249 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5253 +#ifndef _ASM_NIOS2_DMA_H
5254 +#define _ASM_NIOS2_DMA_H
5256 +#include <linux/kernel.h>
5257 +#include <asm/asm-offsets.h>
5259 +#define MAX_DMA_CHANNELS 2
5260 +#define MAX_DMA_ADDRESS (LINUX_SDRAM_START)
5261 +#define DMA_MODE_READ 1
5262 +#define DMA_MODE_WRITE 2
5264 +extern int get_dma_list(char *);
5265 +extern int request_dma(unsigned int, const char *);
5266 +extern void free_dma(unsigned int);
5268 +#endif /* !(_ASM_NIOS2_DMA_H) */
5269 --- linux/include/asm-nios2nommu/elf.h
5270 +++ linux/include/asm-nios2nommu/elf.h
5272 +#ifndef __NIOS2_ELF_H
5273 +#define __NIOS2_ELF_H
5275 +/*--------------------------------------------------------------------
5277 + * include/asm-nios2nommu/elf.h
5279 + * Nio2 ELF relocation types
5281 + * Derived from M68knommu
5283 + * Copyright (C) 2004 Microtronix Datacom Ltd
5285 + * This program is free software; you can redistribute it and/or modify
5286 + * it under the terms of the GNU General Public License as published by
5287 + * the Free Software Foundation; either version 2 of the License, or
5288 + * (at your option) any later version.
5290 + * This program is distributed in the hope that it will be useful,
5291 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
5292 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5293 + * GNU General Public License for more details.
5295 + * Jan/20/2004 dgt NiosII
5296 + * Mar/18/2004 xwt NiosII relocation types added
5298 + ---------------------------------------------------------------------*/
5300 +// #include <linux/config.h>
5301 +#include <asm/ptrace.h>
5302 +#include <asm/user.h>
5304 +#define R_NIOS2_NONE 0
5305 +#define R_NIOS2_S16 1
5306 +#define R_NIOS2_U16 2
5307 +#define R_NIOS2_PCREL16 3
5308 +#define R_NIOS2_CALL26 4
5309 +#define R_NIOS2_IMM5 5
5310 +#define R_NIOS2_CACHE_OPX 6
5311 +#define R_NIOS2_IMM6 7
5312 +#define R_NIOS2_IMM8 8
5313 +#define R_NIOS2_HI16 9
5314 +#define R_NIOS2_LO16 10
5315 +#define R_NIOS2_HIADJ16 11
5316 +#define R_NIOS2_BFD_RELOC_32 12
5317 +#define R_NIOS2_BFD_RELOC_16 13
5318 +#define R_NIOS2_BFD_RELOC_8 14
5319 +#define R_NIOS2_GPREL 15
5320 +#define R_NIOS2_GNU_VTINHERIT 16
5321 +#define R_NIOS2_GNU_VTENTRY 17
5322 +#define R_NIOS2_UJMP 18
5323 +#define R_NIOS2_CJMP 19
5324 +#define R_NIOS2_CALLR 20
5325 +#define R_NIOS2_ALIGN 21
5326 +/* Keep this the last entry. */
5327 +#define R_NIOS2_NUM 22
5329 +typedef unsigned long elf_greg_t;
5331 +#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
5332 +typedef elf_greg_t elf_gregset_t[ELF_NGREG];
5334 +typedef unsigned long elf_fpregset_t;
5337 + * This is used to ensure we don't load something for the wrong architecture.
5339 +#define elf_check_arch(x) \
5340 + ((x)->e_machine == EM_ALTERA_NIOS2)
5343 + * These are used to set parameters in the core dumps.
5345 +#define ELF_CLASS ELFCLASS32
5346 +#define ELF_DATA ELFDATA2LSB
5347 +#define ELF_ARCH EM_ALTERA_NIOS2
5349 +#define ELF_PLAT_INIT(_r, load_addr) _r->a1 = 0
5351 +#define USE_ELF_CORE_DUMP
5352 +#define ELF_EXEC_PAGESIZE 4096
5354 +/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
5355 + use of this is to invoke "./ld.so someprog" to test out a new version of
5356 + the loader. We need to make sure that it is out of the way of the program
5357 + that it will "exec", and that there is sufficient room for the brk. */
5359 +#define ELF_ET_DYN_BASE 0xD0000000UL
5361 +/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is
5362 + now struct_user_regs, they are different) */
5364 +#define ELF_CORE_COPY_REGS(pr_reg, regs) \
5366 + pr_reg[0] = regs->r1; \
5367 + pr_reg[1] = regs->r2; \
5368 + pr_reg[2] = regs->r3; \
5369 + pr_reg[3] = regs->r4; \
5370 + pr_reg[4] = regs->r5; \
5371 + pr_reg[5] = regs->r6; \
5372 + pr_reg[6] = regs->r7; \
5373 + pr_reg[7] = regs->r8; \
5374 + pr_reg[8] = regs->r9; \
5375 + pr_reg[9] = regs->r10; \
5376 + pr_reg[10] = regs->r11; \
5377 + pr_reg[11] = regs->r12; \
5378 + pr_reg[12] = regs->r13; \
5379 + pr_reg[13] = regs->r14; \
5380 + pr_reg[14] = regs->r15; \
5381 + pr_reg[23] = regs->sp; \
5382 + pr_reg[26] = regs->estatus; \
5384 + struct switch_stack *sw = ((struct switch_stack *)regs) - 1; \
5385 + pr_reg[15] = sw->r16; \
5386 + pr_reg[16] = sw->r17; \
5387 + pr_reg[17] = sw->r18; \
5388 + pr_reg[18] = sw->r19; \
5389 + pr_reg[19] = sw->r20; \
5390 + pr_reg[20] = sw->r21; \
5391 + pr_reg[21] = sw->r22; \
5392 + pr_reg[22] = sw->r23; \
5393 + pr_reg[24] = sw->fp; \
5394 + pr_reg[25] = sw->gp; \
5397 +/* This yields a mask that user programs can use to figure out what
5398 + instruction set this cpu supports. */
5400 +#define ELF_HWCAP (0)
5402 +/* This yields a string that ld.so will use to load implementation
5403 + specific libraries for optimization. This is more specific in
5404 + intent than poking at uname or /proc/cpuinfo. */
5406 +#define ELF_PLATFORM (NULL)
5409 +#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
5413 --- linux/include/asm-nios2nommu/entry.h
5414 +++ linux/include/asm-nios2nommu/entry.h
5417 + * Hacked from m68knommu port.
5419 + * Copyright(C) 2004 Microtronix Datacom Ltd.
5421 + * All rights reserved.
5423 + * This program is free software; you can redistribute it and/or modify
5424 + * it under the terms of the GNU General Public License as published by
5425 + * the Free Software Foundation; either version 2 of the License, or
5426 + * (at your option) any later version.
5428 + * This program is distributed in the hope that it will be useful, but
5429 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5430 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5431 + * NON INFRINGEMENT. See the GNU General Public License for more
5434 + * You should have received a copy of the GNU General Public License
5435 + * along with this program; if not, write to the Free Software
5436 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5440 +#ifndef __NIOS2NOMMU_ENTRY_H
5441 +#define __NIOS2NOMMU_ENTRY_H
5443 +#ifdef __ASSEMBLY__
5445 +// #include <linux/config.h>
5446 +#include <asm/setup.h>
5447 +#include <asm/page.h>
5448 +#include <asm/asm-offsets.h>
5451 + * Stack layout in 'ret_from_exception':
5453 + * This allows access to the syscall arguments in registers r4-r8
5470 + * 3C(sp) - orig_r2
5475 + * 50(sp) - estatus
5476 + * 54(sp) - status_extension
5481 +/* process bits for task_struct.flags */
5482 +PF_TRACESYS_OFF = 3
5483 +PF_TRACESYS_BIT = 5
5492 + * This defines the normal kernel pt-regs layout.
5497 + * Standard Nios2 interrupt entry and exit macros.
5498 + * Must be called with interrupts disabled.
5501 + movia r24,status_extension // Read status extension
5503 + andi r24,r24,PS_S_ASM
5504 + bne r24,r0,1f // In supervisor mode, already on kernel stack
5505 + movia r24,_current_thread // Switch to current kernel stack
5506 + ldw r24,0(r24) // using the thread_info
5507 + addi r24,r24,THREAD_SIZE_ASM-PT_REGS_SIZE
5508 + stw sp,PT_SP(r24) // Save user stack before changing
5513 + addi sp,sp,-PT_REGS_SIZE // Backup the kernel stack pointer
5515 +2: stw r1,PT_R1(sp)
5524 + stw r10,PT_R10(sp)
5525 + stw r11,PT_R11(sp)
5526 + stw r12,PT_R12(sp)
5527 + stw r13,PT_R13(sp)
5528 + stw r14,PT_R14(sp)
5529 + stw r15,PT_R15(sp)
5530 + stw r2,PT_ORIG_R2(sp)
5535 + stw r24,PT_ESTATUS(sp)
5536 + movia r24,status_extension // Read status extension
5538 + stw r1,PT_STATUS_EXTENSION(sp) // Store user/supervisor status
5539 + ORI32 r1,r1,PS_S_ASM // Set supervisor mode
5545 + ldw r1,PT_STATUS_EXTENSION(sp) // Restore user/supervisor status
5546 + movia r24,status_extension
5548 + ldw r1,PT_R1(sp) // Restore registers
5557 + ldw r10,PT_R10(sp)
5558 + ldw r11,PT_R11(sp)
5559 + ldw r12,PT_R12(sp)
5560 + ldw r13,PT_R13(sp)
5561 + ldw r14,PT_R14(sp)
5562 + ldw r15,PT_R15(sp)
5566 + ldw r24,PT_ESTATUS(sp)
5569 + ldw sp,PT_SP(sp) // Restore sp last
5572 +.macro SAVE_SWITCH_STACK
5573 + addi sp,sp,-SWITCH_STACK_SIZE
5574 + stw r16,SW_R16(sp)
5575 + stw r17,SW_R17(sp)
5576 + stw r18,SW_R18(sp)
5577 + stw r19,SW_R19(sp)
5578 + stw r20,SW_R20(sp)
5579 + stw r21,SW_R21(sp)
5580 + stw r22,SW_R22(sp)
5581 + stw r23,SW_R23(sp)
5587 +.macro RESTORE_SWITCH_STACK
5588 + ldw r16,SW_R16(sp)
5589 + ldw r17,SW_R17(sp)
5590 + ldw r18,SW_R18(sp)
5591 + ldw r19,SW_R19(sp)
5592 + ldw r20,SW_R20(sp)
5593 + ldw r21,SW_R21(sp)
5594 + ldw r22,SW_R22(sp)
5595 + ldw r23,SW_R23(sp)
5599 + addi sp,sp,SWITCH_STACK_SIZE
5602 +#endif /* __ASSEMBLY__ */
5603 +#endif /* __NIOS2NOMMU_ENTRY_H */
5604 --- linux/include/asm-nios2nommu/errno.h
5605 +++ linux/include/asm-nios2nommu/errno.h
5607 +#ifndef _NIOS2NOMMU_ERRNO_H
5608 +#define _NIOS2NOMMU_ERRNO_H
5610 +#include <asm-generic/errno.h>
5612 +#endif /* _NIOS2NOMMU_ERRNO_H */
5613 --- linux/include/asm-nios2nommu/fcntl.h
5614 +++ linux/include/asm-nios2nommu/fcntl.h
5617 + * This file came from the m68k port.
5619 + * Copyright (C) 2004 Microtronix Datacom Ltd.
5621 + * All rights reserved.
5623 + * This program is free software; you can redistribute it and/or modify
5624 + * it under the terms of the GNU General Public License as published by
5625 + * the Free Software Foundation; either version 2 of the License, or
5626 + * (at your option) any later version.
5628 + * This program is distributed in the hope that it will be useful, but
5629 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5630 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5631 + * NON INFRINGEMENT. See the GNU General Public License for more
5634 + * You should have received a copy of the GNU General Public License
5635 + * along with this program; if not, write to the Free Software
5636 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5639 +#ifndef _NIOS2_FCNTL_H
5640 +#define _NIOS2_FCNTL_H
5642 +/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
5643 + located on an ext2 file system */
5644 +#define O_ACCMODE 0003
5645 +#define O_RDONLY 00
5646 +#define O_WRONLY 01
5648 +#define O_CREAT 0100 /* not fcntl */
5649 +#define O_EXCL 0200 /* not fcntl */
5650 +#define O_NOCTTY 0400 /* not fcntl */
5651 +#define O_TRUNC 01000 /* not fcntl */
5652 +#define O_APPEND 02000
5653 +#define O_NONBLOCK 04000
5654 +#define O_NDELAY O_NONBLOCK
5655 +#define O_SYNC 010000
5656 +#define FASYNC 020000 /* fcntl, for BSD compatibility */
5657 +#define O_DIRECTORY 040000 /* must be a directory */
5658 +#define O_NOFOLLOW 0100000 /* don't follow links */
5659 +#define O_DIRECT 0200000 /* direct disk access hint - currently ignored */
5660 +#define O_LARGEFILE 0400000
5661 +#define O_NOATIME 01000000
5663 +#define F_DUPFD 0 /* dup */
5664 +#define F_GETFD 1 /* get close_on_exec */
5665 +#define F_SETFD 2 /* set/clear close_on_exec */
5666 +#define F_GETFL 3 /* get file->f_flags */
5667 +#define F_SETFL 4 /* set file->f_flags */
5672 +#define F_SETOWN 8 /* for sockets. */
5673 +#define F_GETOWN 9 /* for sockets. */
5674 +#define F_SETSIG 10 /* for sockets. */
5675 +#define F_GETSIG 11 /* for sockets. */
5677 +#define F_GETLK64 12 /* using 'struct flock64' */
5678 +#define F_SETLK64 13
5679 +#define F_SETLKW64 14
5681 +/* for F_[GET|SET]FL */
5682 +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
5684 +/* for posix fcntl() and lockf() */
5689 +/* for old implementation of bsd flock () */
5690 +#define F_EXLCK 4 /* or 3 */
5691 +#define F_SHLCK 8 /* or 4 */
5694 +#define F_INPROGRESS 16
5696 +/* operations for bsd flock(), also used by the kernel implementation */
5697 +#define LOCK_SH 1 /* shared lock */
5698 +#define LOCK_EX 2 /* exclusive lock */
5699 +#define LOCK_NB 4 /* or'd with one of the above to prevent
5701 +#define LOCK_UN 8 /* remove lock */
5703 +#define LOCK_MAND 32 /* This is a mandatory flock */
5704 +#define LOCK_READ 64 /* ... Which allows concurrent read operations */
5705 +#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
5706 +#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
5724 +#define F_LINUX_SPECIFIC_BASE 1024
5725 +#endif /* _NIOS2_FCNTL_H */
5726 --- linux/include/asm-nios2nommu/flat.h
5727 +++ linux/include/asm-nios2nommu/flat.h
5730 + * include/asm-nios2nommu/flat.h -- uClinux bFLT relocations
5732 + * Copyright (C) 2004,05 Microtronix Datacom Ltd
5734 + * This file is subject to the terms and conditions of the GNU General
5735 + * Public License. See the file COPYING in the main directory of this
5736 + * archive for more details.
5738 + * Written by Wentao Xu <wentao@microtronix.com>
5741 +#ifndef __NIOS2_FLAT_H__
5742 +#define __NIOS2_FLAT_H__
5744 +#define flat_reloc_valid(reloc, size) ((reloc) <= (size + 0x8000))
5746 +/* The stack is 64-bit aligned for Nios II, so (sp - 1) shall
5747 + * be 64-bit aligned, where -1 is for argc
5749 +#define flat_stack_align(sp) (sp = (unsigned long *)(((unsigned long)sp - 1) & (-8)))
5751 +/* The uClibc port for Nios II expects the argc is followed by argv and envp */
5752 +#define flat_argvp_envp_on_stack() 1
5754 +#define flat_old_ram_flag(flags) (flags)
5756 +/* We store the type of relocation in the top 4 bits of the `relval.' */
5758 +/* Convert a relocation entry into an address. */
5759 +static inline unsigned long
5760 +flat_get_relocate_addr (unsigned long relval)
5762 + return relval & 0x0fffffff; /* Mask out top 4-bits */
5765 +#define FLAT_NIOS2_RELOC_TYPE(relval) ((relval) >> 28)
5767 +#define FLAT_NIOS2_R_32 0 /* Normal 32-bit reloc */
5768 +#define FLAT_NIOS2_R_HI_LO 1 /* High 16-bits + low 16-bits field */
5769 +#define FLAT_NIOS2_R_HIADJ_LO 2 /* High 16-bits adjust + low 16-bits field */
5770 +#define FLAT_NIOS2_R_CALL26 4 /* Call imm26 */
5772 +/* Extract the address to be relocated from the symbol reference at rp;
5773 + * relval is the raw relocation-table entry from which RP is derived.
5774 + * rp shall always be 32-bit aligned
5776 +static inline unsigned long flat_get_addr_from_rp (unsigned long *rp,
5777 + unsigned long relval,
5778 + unsigned long flags)
5780 + switch (FLAT_NIOS2_RELOC_TYPE(relval))
5782 + case FLAT_NIOS2_R_32:
5783 + /* Simple 32-bit address. The loader expect it in bigger endian */
5784 + return htonl(*rp);
5786 + case FLAT_NIOS2_R_HI_LO:
5787 + /* get the two 16-bit immediate value from instructions, then
5788 + * construct a 32-bit value. Again the loader expect bigger endian
5790 + return htonl ((((rp[0] >> 6) & 0xFFFF) << 16 ) |
5791 + ((rp[1] >> 6) & 0xFFFF));
5793 + case FLAT_NIOS2_R_HIADJ_LO:
5795 + /* get the two 16-bit immediate value from instructions, then
5796 + * construct a 32-bit value. Again the loader expect bigger endian
5798 + unsigned int low, high;
5799 + high = (rp[0] >> 6) & 0xFFFF;
5800 + low = (rp[1] >> 6) & 0xFFFF;
5802 + if ((low >> 15) & 1) high--;
5804 + return htonl ((high << 16 ) | low );
5806 + case FLAT_NIOS2_R_CALL26:
5807 + /* the 26-bit immediate value is actually 28-bit */
5808 + return htonl(((*rp) >> 6) << 2);
5811 + return ~0; /* bogus value */
5815 +/* Insert the address addr into the symbol reference at rp;
5816 + * relval is the raw relocation-table entry from which rp is derived.
5817 + * rp shall always be 32-bit aligned
5819 +static inline void flat_put_addr_at_rp (unsigned long *rp, unsigned long addr,
5820 + unsigned long relval)
5822 + unsigned long exist_val;
5823 + switch (FLAT_NIOS2_RELOC_TYPE (relval)) {
5824 + case FLAT_NIOS2_R_32:
5825 + /* Simple 32-bit address. */
5829 + case FLAT_NIOS2_R_HI_LO:
5830 + exist_val = rp[0];
5831 + rp[0] = ((((exist_val >> 22) << 16) | (addr >> 16)) << 6) | (exist_val & 0x3F);
5832 + exist_val = rp[1];
5833 + rp[1] = ((((exist_val >> 22) << 16) | (addr & 0xFFFF)) << 6) | (exist_val & 0x3F);
5836 + case FLAT_NIOS2_R_HIADJ_LO:
5838 + unsigned int high = (addr >> 16);
5839 + if ((addr >> 15) & 1)
5840 + high = (high + 1) & 0xFFFF;
5841 + exist_val = rp[0];
5842 + rp[0] = ((((exist_val >> 22) << 16) | high) << 6) | (exist_val & 0x3F);
5843 + exist_val = rp[1];
5844 + rp[1] = ((((exist_val >> 22) << 16) | (addr & 0xFFFF)) << 6) | (exist_val & 0x3F);
5847 + case FLAT_NIOS2_R_CALL26:
5848 + /* the opcode of CALL is 0, so just store the value */
5849 + *rp = ((addr >> 2) << 6);
5854 +#endif /* __NIOS2_FLAT_H__ */
5855 --- linux/include/asm-nios2nommu/hardirq.h
5856 +++ linux/include/asm-nios2nommu/hardirq.h
5859 + * Ported from m68knommu
5861 + * Copyright (C) 2003, Microtronix Datacom Ltd.
5862 + * Copyright (C) 2004, Microtronix Datacom Ltd.
5864 + * All rights reserved.
5866 + * This program is free software; you can redistribute it and/or modify
5867 + * it under the terms of the GNU General Public License as published by
5868 + * the Free Software Foundation; either version 2 of the License, or
5869 + * (at your option) any later version.
5871 + * This program is distributed in the hope that it will be useful, but
5872 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5873 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5874 + * NON INFRINGEMENT. See the GNU General Public License for more
5877 + * You should have received a copy of the GNU General Public License
5878 + * along with this program; if not, write to the Free Software
5879 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5882 +#ifndef __NIOS2_HARDIRQ_H
5883 +#define __NIOS2_HARDIRQ_H
5885 +// #include <linux/config.h>
5886 +#include <linux/cache.h>
5887 +#include <linux/threads.h>
5890 + unsigned int __softirq_pending;
5891 + unsigned int __syscall_count;
5892 + struct task_struct * __ksoftirqd_task;
5893 +} ____cacheline_aligned irq_cpustat_t;
5895 +#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
5898 + * We put the hardirq and softirq counter into the preemption
5899 + * counter. The bitmask has the following meaning:
5901 + * - bits 0-7 are the preemption count (max preemption depth: 256)
5902 + * - bits 8-15 are the softirq count (max # of softirqs: 256)
5903 + * - bits 16-23 are the hardirq count (max # of hardirqs: 256)
5905 + * - ( bit 26 is the PREEMPT_ACTIVE flag. )
5907 + * PREEMPT_MASK: 0x000000ff
5908 + * HARDIRQ_MASK: 0x0000ff00
5909 + * SOFTIRQ_MASK: 0x00ff0000
5912 +#define PREEMPT_BITS 8
5913 +#define SOFTIRQ_BITS 8
5914 +#define HARDIRQ_BITS 8
5916 +#define PREEMPT_SHIFT 0
5917 +#define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS)
5918 +#define HARDIRQ_SHIFT (SOFTIRQ_SHIFT + SOFTIRQ_BITS)
5921 + * The hardirq mask has to be large enough to have
5922 + * space for potentially all IRQ sources in the system
5923 + * nesting on a single CPU:
5925 +#if (1 << HARDIRQ_BITS) < NR_IRQS
5926 +# error HARDIRQ_BITS is too low!
5929 +#define irq_enter() (preempt_count() += HARDIRQ_OFFSET)
5930 +#define irq_exit() \
5932 + preempt_count() -= IRQ_EXIT_OFFSET; \
5933 + if (!in_interrupt() && softirq_pending(smp_processor_id())) \
5935 + preempt_enable_no_resched(); \
5939 +# error nios2nommu SMP is not available
5940 +#endif /* CONFIG_SMP */
5942 +#endif /* __NIOS2_HARDIRQ_H */
5943 --- linux/include/asm-nios2nommu/hdreg.h
5944 +++ linux/include/asm-nios2nommu/hdreg.h
5947 + * Copyright (C) 1994-1996 Linus Torvalds & authors
5948 + * Copyright (C) 2002 Wentau Xu (www.microtronix.com)
5949 + * copyright (C) 2004 Microtronix Datacom Ltd.
5951 + * All rights reserved.
5953 + * This program is free software; you can redistribute it and/or modify
5954 + * it under the terms of the GNU General Public License as published by
5955 + * the Free Software Foundation; either version 2 of the License, or
5956 + * (at your option) any later version.
5958 + * This program is distributed in the hope that it will be useful, but
5959 + * WITHOUT ANY WARRANTY; without even the implied warranty of
5960 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
5961 + * NON INFRINGEMENT. See the GNU General Public License for more
5964 + * You should have received a copy of the GNU General Public License
5965 + * along with this program; if not, write to the Free Software
5966 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5970 +#ifndef __NIOS2_HDREG_H
5971 +#define __NIOS2_HDREG_H
5973 +typedef unsigned long ide_ioreg_t;
5975 +#endif /* __NIOS2_HDREG_H */
5976 --- linux/include/asm-nios2nommu/hw_irq.h
5977 +++ linux/include/asm-nios2nommu/hw_irq.h
5979 +#ifndef _ASM_HW_IRQ_H
5980 +#define _ASM_HW_IRQ_H
5983 + * linux/include/asm/hw_irq.h
5985 + * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
5987 + * moved some of the old arch/i386/kernel/irq.h to here. VY
5989 + * IRQ/IPI changes taken from work by Thomas Radke
5990 + * <tomsoft@informatik.tu-chemnitz.de>
5994 +#endif /* _ASM_HW_IRQ_H */
5995 --- linux/include/asm-nios2nommu/ide.h
5996 +++ linux/include/asm-nios2nommu/ide.h
5999 + * linux/include/asm-niosnommu2/ide.h
6001 + * Copyright (C) 1994-1996 Linus Torvalds & authors
6002 + * Copyright (C) 2004 Microtronix Datacom Ltd.
6004 + * All rights reserved.
6006 + * This program is free software; you can redistribute it and/or modify
6007 + * it under the terms of the GNU General Public License as published by
6008 + * the Free Software Foundation; either version 2 of the License, or
6009 + * (at your option) any later version.
6011 + * This program is distributed in the hope that it will be useful, but
6012 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6013 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6014 + * NON INFRINGEMENT. See the GNU General Public License for more
6017 + * You should have received a copy of the GNU General Public License
6018 + * along with this program; if not, write to the Free Software
6019 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6023 +#ifndef __ASMNIOS2_IDE_H
6024 +#define __ASMNIOS2_IDE_H
6027 +#undef MAX_HWIFS /* we're going to force it */
6030 +#define MAX_HWIFS 1
6033 +#define IDE_ARCH_OBSOLETE_INIT
6034 +#define IDE_ARCH_OBSOLETE_DEFAULTS
6035 +#define ide_default_io_base(i) ((unsigned long)na_ide_ide)
6036 +#define ide_default_irq(b) (na_ide_ide_irq)
6037 +#define ide_init_default_irq(base) ide_default_irq(base)
6038 +#define ide_default_io_ctl(base) ((base) + (0xE*4))
6040 +#include <asm-generic/ide_iops.h>
6042 +#endif /* __KERNEL__ */
6044 +#endif /* __ASMNIOS2_IDE_H */
6045 --- linux/include/asm-nios2nommu/init.h
6046 +++ linux/include/asm-nios2nommu/init.h
6049 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6051 + * All rights reserved.
6053 + * This program is free software; you can redistribute it and/or modify
6054 + * it under the terms of the GNU General Public License as published by
6055 + * the Free Software Foundation; either version 2 of the License, or
6056 + * (at your option) any later version.
6058 + * This program is distributed in the hope that it will be useful, but
6059 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6060 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6061 + * NON INFRINGEMENT. See the GNU General Public License for more
6064 + * You should have received a copy of the GNU General Public License
6065 + * along with this program; if not, write to the Free Software
6066 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6069 +#error "<asm/init.h> should never be used - use <linux/init.h> instead"
6070 --- linux/include/asm-nios2nommu/io.h
6071 +++ linux/include/asm-nios2nommu/io.h
6074 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6076 + * All rights reserved.
6078 + * This program is free software; you can redistribute it and/or modify
6079 + * it under the terms of the GNU General Public License as published by
6080 + * the Free Software Foundation; either version 2 of the License, or
6081 + * (at your option) any later version.
6083 + * This program is distributed in the hope that it will be useful, but
6084 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6085 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6086 + * NON INFRINGEMENT. See the GNU General Public License for more
6089 + * You should have received a copy of the GNU General Public License
6090 + * along with this program; if not, write to the Free Software
6091 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6095 +#ifndef __NIOS2_IO_H
6096 +#define __NIOS2_IO_H
6100 +#include <linux/kernel.h>
6102 +#include <asm/page.h> /* IO address mapping routines need this */
6103 +#include <asm/system.h>
6104 +#include <asm/unaligned.h>
6106 +extern void insw(unsigned long port, void *dst, unsigned long count);
6107 +extern void outsw(unsigned long port, void *src, unsigned long count);
6108 +extern void insl(unsigned long port, void *dst, unsigned long count);
6109 +extern void outsl(unsigned long port, void *src, unsigned long count);
6113 + * readX/writeX() are used to access memory mapped devices. On some
6114 + * architectures the memory mapped IO stuff needs to be accessed
6115 + * differently. On the Nios architecture, we just read/write the
6116 + * memory location directly.
6119 +#define readb(addr) \
6121 + unsigned char __res;\
6122 + __asm__ __volatile__( \
6123 + "ldbuio %0, 0(%1)" \
6129 +#define readw(addr) \
6131 + unsigned short __res;\
6132 + __asm__ __volatile__( \
6133 + "ldhuio %0, 0(%1)" \
6139 +#define readl(addr) \
6141 + unsigned int __res;\
6142 + __asm__ __volatile__( \
6143 + "ldwio %0, 0(%1)" \
6149 +#define writeb(b,addr) \
6151 + __asm__ __volatile__( \
6152 + "stbio %0, 0(%1)" \
6153 + : : "r"(b), "r" (addr)); \
6156 +#define writew(b,addr) \
6158 + __asm__ __volatile__( \
6159 + "sthio %0, 0(%1)" \
6160 + : : "r"(b), "r" (addr)); \
6163 +#define writel(b,addr) \
6165 + __asm__ __volatile__( \
6166 + "stwio %0, 0(%1)" \
6167 + : : "r"(b), "r" (addr)); \
6170 +#define __raw_readb readb
6171 +#define __raw_readw readw
6172 +#define __raw_readl readl
6173 +#define __raw_writeb writeb
6174 +#define __raw_writew writew
6175 +#define __raw_writel writel
6179 + * make the short names macros so specific devices
6180 + * can override them as required
6183 +#define memset_io(addr,c,len) memset((void *)(((unsigned int)(addr)) | 0x80000000),(c),(len))
6184 +#define memcpy_fromio(to,from,len) memcpy((to),(void *)(((unsigned int)(from)) | 0x80000000),(len))
6185 +#define memcpy_toio(to,from,len) memcpy((void *)(((unsigned int)(to)) | 0x80000000),(from),(len))
6187 +#define inb(addr) readb(addr)
6188 +#define inw(addr) readw(addr)
6189 +#define inl(addr) readl(addr)
6191 +#define outb(x,addr) ((void) writeb(x,addr))
6192 +#define outw(x,addr) ((void) writew(x,addr))
6193 +#define outl(x,addr) ((void) writel(x,addr))
6195 +#define inb_p(addr) inb(addr)
6196 +#define inw_p(addr) inw(addr)
6197 +#define inl_p(addr) inl(addr)
6199 +#define outb_p(x,addr) outb(x,addr)
6200 +#define outw_p(x,addr) outw(x,addr)
6201 +#define outl_p(x,addr) outl(x,addr)
6205 +extern inline void insb(unsigned long port, void *dst, unsigned long count)
6207 + unsigned char *p=(unsigned char*)dst;
6212 +/* See arch/niosnommu/io.c for optimized version */
6213 +extern inline void _insw(unsigned long port, void *dst, unsigned long count)
6215 + unsigned short *p=(unsigned short*)dst;
6220 +/* See arch/niosnommu/kernel/io.c for unaligned destination pointer */
6221 +extern inline void _insl(unsigned long port, void *dst, unsigned long count)
6223 + unsigned long *p=(unsigned long*)dst;
6228 +extern inline void outsb(unsigned long port, void *src, unsigned long count)
6230 + unsigned char *p=(unsigned char*)src;
6232 + outb( *p++, port );
6235 +/* See arch/niosnommu/io.c for optimized version */
6236 +extern inline void _outsw(unsigned long port, void *src, unsigned long count)
6238 + unsigned short *p=(unsigned short*)src;
6240 + outw( *p++, port );
6243 +/* See arch/niosnommu/kernel/io.c for unaligned source pointer */
6244 +extern inline void _outsl(unsigned long port, void *src, unsigned long count)
6246 + unsigned long *p=(unsigned long*)src;
6248 + outl( *p++, port );
6253 +extern inline void mapioaddr(unsigned long physaddr, unsigned long virt_addr,
6254 + int bus, int rdonly)
6259 +//vic - copied from m68knommu
6261 +/* Values for nocacheflag and cmode */
6262 +#define IOMAP_FULL_CACHING 0
6263 +#define IOMAP_NOCACHE_SER 1
6264 +#define IOMAP_NOCACHE_NONSER 2
6265 +#define IOMAP_WRITETHROUGH 3
6267 +extern void *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag);
6268 +extern void __iounmap(void *addr, unsigned long size);
6270 +extern inline void *ioremap(unsigned long physaddr, unsigned long size)
6272 + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
6274 +extern inline void *ioremap_nocache(unsigned long physaddr, unsigned long size)
6276 + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
6278 +extern inline void *ioremap_writethrough(unsigned long physaddr, unsigned long size)
6280 + return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
6282 +extern inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size)
6284 + return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
6287 +extern void iounmap(void *addr);
6290 +#define IO_SPACE_LIMIT 0xffffffff
6292 +#define dma_cache_inv(_start,_size) do { } while (0)
6293 +#define dma_cache_wback(_start,_size) do { } while (0)
6294 +#define dma_cache_wback_inv(_start,_size) do { } while (0)
6296 +/* Pages to physical address... */
6297 +#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
6298 +#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
6300 +#define mm_ptov(vaddr) ((void *) (vaddr))
6301 +#define mm_vtop(vaddr) ((unsigned long) (vaddr))
6302 +#define phys_to_virt(vaddr) ((void *) (vaddr))
6303 +#define virt_to_phys(vaddr) ((unsigned long) (vaddr))
6305 +#define virt_to_bus virt_to_phys
6306 +#define bus_to_virt phys_to_virt
6308 +#endif /* __KERNEL__ */
6310 +#endif /* !(__NIOS2_IO_H) */
6312 --- linux/include/asm-nios2nommu/ioctl.h
6313 +++ linux/include/asm-nios2nommu/ioctl.h
6315 +/* $Id: ioctl.h,v 1.3 2004/02/12 23:06:40 ken-h Exp $
6317 + * linux/ioctl.h for Linux by H.H. Bergman.
6319 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6321 + * All rights reserved.
6323 + * This program is free software; you can redistribute it and/or modify
6324 + * it under the terms of the GNU General Public License as published by
6325 + * the Free Software Foundation; either version 2 of the License, or
6326 + * (at your option) any later version.
6328 + * This program is distributed in the hope that it will be useful, but
6329 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6330 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6331 + * NON INFRINGEMENT. See the GNU General Public License for more
6334 + * You should have received a copy of the GNU General Public License
6335 + * along with this program; if not, write to the Free Software
6336 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6340 +#ifndef _NIOS2_IOCTL_H
6341 +#define _NIOS2_IOCTL_H
6343 +/* ioctl command encoding: 32 bits total, command in lower 16 bits,
6344 + * size of the parameter structure in the lower 14 bits of the
6346 + * Encoding the size of the parameter structure in the ioctl request
6347 + * is useful for catching programs compiled with old versions
6348 + * and to avoid overwriting user space outside the user buffer area.
6349 + * The highest 2 bits are reserved for indicating the ``access mode''.
6350 + * NOTE: This limits the max parameter size to 16kB -1 !
6354 + * I don't really have any idea about what this should look like, so
6355 + * for the time being, this is heavily based on the PC definitions.
6359 + * The following is for compatibility across the various Linux
6360 + * platforms. The i386 ioctl numbering scheme doesn't really enforce
6361 + * a type field. De facto, however, the top 8 bits of the lower 16
6362 + * bits are indeed used as a type field, so we might just as well make
6363 + * this explicit here. Please be sure to use the decoding macros
6364 + * below from now on.
6366 +#define _IOC_NRBITS 8
6367 +#define _IOC_TYPEBITS 8
6368 +#define _IOC_SIZEBITS 14
6369 +#define _IOC_DIRBITS 2
6371 +#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
6372 +#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
6373 +#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
6374 +#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
6376 +#define _IOC_NRSHIFT 0
6377 +#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
6378 +#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
6379 +#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
6384 +#define _IOC_NONE 0U
6385 +#define _IOC_WRITE 1U
6386 +#define _IOC_READ 2U
6388 +#define _IOC(dir,type,nr,size) \
6389 + (((dir) << _IOC_DIRSHIFT) | \
6390 + ((type) << _IOC_TYPESHIFT) | \
6391 + ((nr) << _IOC_NRSHIFT) | \
6392 + ((size) << _IOC_SIZESHIFT))
6394 +/* used to create numbers */
6395 +#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
6396 +#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
6397 +#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
6398 +#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
6400 +/* used to decode ioctl numbers.. */
6401 +#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
6402 +#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
6403 +#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
6404 +#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
6406 +/* ...and for the drivers/sound files... */
6408 +#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
6409 +#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
6410 +#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
6411 +#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
6412 +#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
6414 +#endif /* _NIOS2_IOCTL_H */
6415 --- linux/include/asm-nios2nommu/ioctls.h
6416 +++ linux/include/asm-nios2nommu/ioctls.h
6419 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6421 + * All rights reserved.
6423 + * This program is free software; you can redistribute it and/or modify
6424 + * it under the terms of the GNU General Public License as published by
6425 + * the Free Software Foundation; either version 2 of the License, or
6426 + * (at your option) any later version.
6428 + * This program is distributed in the hope that it will be useful, but
6429 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6430 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6431 + * NON INFRINGEMENT. See the GNU General Public License for more
6434 + * You should have received a copy of the GNU General Public License
6435 + * along with this program; if not, write to the Free Software
6436 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6440 +#ifndef __ARCH_NIOS2_IOCTLS_H__
6441 +#define __ARCH_NIOS2_IOCTLS_H__
6443 +#include <asm/ioctl.h>
6445 +/* 0x54 is just a magic number to make these relatively unique ('T') */
6447 +#define TCGETS 0x5401
6448 +#define TCSETS 0x5402
6449 +#define TCSETSW 0x5403
6450 +#define TCSETSF 0x5404
6451 +#define TCGETA 0x5405
6452 +#define TCSETA 0x5406
6453 +#define TCSETAW 0x5407
6454 +#define TCSETAF 0x5408
6455 +#define TCSBRK 0x5409
6456 +#define TCXONC 0x540A
6457 +#define TCFLSH 0x540B
6458 +#define TIOCEXCL 0x540C
6459 +#define TIOCNXCL 0x540D
6460 +#define TIOCSCTTY 0x540E
6461 +#define TIOCGPGRP 0x540F
6462 +#define TIOCSPGRP 0x5410
6463 +#define TIOCOUTQ 0x5411
6464 +#define TIOCSTI 0x5412
6465 +#define TIOCGWINSZ 0x5413
6466 +#define TIOCSWINSZ 0x5414
6467 +#define TIOCMGET 0x5415
6468 +#define TIOCMBIS 0x5416
6469 +#define TIOCMBIC 0x5417
6470 +#define TIOCMSET 0x5418
6471 +#define TIOCGSOFTCAR 0x5419
6472 +#define TIOCSSOFTCAR 0x541A
6473 +#define FIONREAD 0x541B
6474 +#define TIOCINQ FIONREAD
6475 +#define TIOCLINUX 0x541C
6476 +#define TIOCCONS 0x541D
6477 +#define TIOCGSERIAL 0x541E
6478 +#define TIOCSSERIAL 0x541F
6479 +#define TIOCPKT 0x5420
6480 +#define FIONBIO 0x5421
6481 +#define TIOCNOTTY 0x5422
6482 +#define TIOCSETD 0x5423
6483 +#define TIOCGETD 0x5424
6484 +#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */
6485 +#define TIOCTTYGSTRUCT 0x5426 /* For debugging only */
6486 +#define TIOCSBRK 0x5427 /* BSD compatibility */
6487 +#define TIOCCBRK 0x5428 /* BSD compatibility */
6488 +#define TIOCGSID 0x5429 /* Return the session ID of FD */
6489 +#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
6490 +#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
6492 +#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */
6493 +#define FIOCLEX 0x5451
6494 +#define FIOASYNC 0x5452
6495 +#define TIOCSERCONFIG 0x5453
6496 +#define TIOCSERGWILD 0x5454
6497 +#define TIOCSERSWILD 0x5455
6498 +#define TIOCGLCKTRMIOS 0x5456
6499 +#define TIOCSLCKTRMIOS 0x5457
6500 +#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
6501 +#define TIOCSERGETLSR 0x5459 /* Get line status register */
6502 +#define TIOCSERGETMULTI 0x545A /* Get multiport config */
6503 +#define TIOCSERSETMULTI 0x545B /* Set multiport config */
6505 +#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
6506 +#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
6507 +#define FIOQSIZE 0x545E
6509 +/* Used for packet mode */
6510 +#define TIOCPKT_DATA 0
6511 +#define TIOCPKT_FLUSHREAD 1
6512 +#define TIOCPKT_FLUSHWRITE 2
6513 +#define TIOCPKT_STOP 4
6514 +#define TIOCPKT_START 8
6515 +#define TIOCPKT_NOSTOP 16
6516 +#define TIOCPKT_DOSTOP 32
6518 +#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
6520 +#endif /* __ARCH_NIOS2_IOCTLS_H__ */
6521 --- linux/include/asm-nios2nommu/ipc.h
6522 +++ linux/include/asm-nios2nommu/ipc.h
6524 +#ifndef __NIOS2_IPC_H__
6525 +#define __NIOS2_IPC_H__
6527 +/* Copied from sparc version
6528 + * These are used to wrap system calls on the Nios.
6530 + * See arch/niosnommu/kernel/sys_nios.c for ugly details..
6532 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6534 + * All rights reserved.
6536 + * This program is free software; you can redistribute it and/or modify
6537 + * it under the terms of the GNU General Public License as published by
6538 + * the Free Software Foundation; either version 2 of the License, or
6539 + * (at your option) any later version.
6541 + * This program is distributed in the hope that it will be useful, but
6542 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6543 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6544 + * NON INFRINGEMENT. See the GNU General Public License for more
6547 + * You should have received a copy of the GNU General Public License
6548 + * along with this program; if not, write to the Free Software
6549 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6552 +struct ipc_kludge {
6553 + struct msgbuf *msgp;
6569 +/* Used by the DIPC package, try and avoid reusing it */
6572 +#define IPCCALL(version,op) ((version)<<16 | (op))
6575 --- linux/include/asm-nios2nommu/ipcbuf.h
6576 +++ linux/include/asm-nios2nommu/ipcbuf.h
6578 +#ifndef __NIOS2_IPCBUF_H__
6579 +#define __NIOS2_IPCBUF_H__
6581 +/* Copied from asm-m68k/ipcbuf.h
6582 + * The user_ipc_perm structure for Nios architecture.
6583 + * Note extra padding because this structure is passed back and forth
6584 + * between kernel and user space.
6586 + * Pad space is left for:
6587 + * - 32-bit mode_t and seq
6588 + * - 2 miscellaneous 32-bit values
6590 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6592 + * All rights reserved.
6594 + * This program is free software; you can redistribute it and/or modify
6595 + * it under the terms of the GNU General Public License as published by
6596 + * the Free Software Foundation; either version 2 of the License, or
6597 + * (at your option) any later version.
6599 + * This program is distributed in the hope that it will be useful, but
6600 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6601 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6602 + * NON INFRINGEMENT. See the GNU General Public License for more
6605 + * You should have received a copy of the GNU General Public License
6606 + * along with this program; if not, write to the Free Software
6607 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6613 + __kernel_key_t key;
6614 + __kernel_uid32_t uid;
6615 + __kernel_gid32_t gid;
6616 + __kernel_uid32_t cuid;
6617 + __kernel_gid32_t cgid;
6618 + __kernel_mode_t mode;
6619 + unsigned short __pad1;
6620 + unsigned short seq;
6621 + unsigned short __pad2;
6622 + unsigned long __unused1;
6623 + unsigned long __unused2;
6626 +#endif /* __NIOS2_IPCBUF_H__ */
6627 --- linux/include/asm-nios2nommu/irq.h
6628 +++ linux/include/asm-nios2nommu/irq.h
6631 + * 21Mar2001 1.1 dgt/microtronix
6633 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6635 + * All rights reserved.
6637 + * This program is free software; you can redistribute it and/or modify
6638 + * it under the terms of the GNU General Public License as published by
6639 + * the Free Software Foundation; either version 2 of the License, or
6640 + * (at your option) any later version.
6642 + * This program is distributed in the hope that it will be useful, but
6643 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6644 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6645 + * NON INFRINGEMENT. See the GNU General Public License for more
6648 + * You should have received a copy of the GNU General Public License
6649 + * along with this program; if not, write to the Free Software
6650 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6655 +#ifndef _NIOS2NOMMU_IRQ_H_
6656 +#define _NIOS2NOMMU_IRQ_H_
6658 +extern void disable_irq(unsigned int);
6659 +extern void enable_irq(unsigned int);
6661 +// #include <linux/config.h>
6662 +#include <linux/interrupt.h>
6664 +#define SYS_IRQS 32
6665 +#define NR_IRQS SYS_IRQS
6668 + * Interrupt source definitions
6669 + * General interrupt sources are the level 1-7.
6670 + * Adding an interrupt service routine for one of these sources
6671 + * results in the addition of that routine to a chain of routines.
6672 + * Each one is called in succession. Each individual interrupt
6673 + * service routine should determine if the device associated with
6674 + * that routine requires service.
6677 +#define IRQ01 (1) /* level 1 interrupt */
6678 +#define IRQ02 (2) /* level 2 interrupt */
6679 +#define IRQ03 (3) /* level 3 interrupt */
6680 +#define IRQ04 (4) /* level 4 interrupt */
6681 +#define IRQ05 (5) /* level 5 interrupt */
6682 +#define IRQ06 (6) /* level 6 interrupt */
6683 +#define IRQ07 (7) /* level 7 interrupt */
6684 +#define IRQ08 (8) /* level 8 interrupt */
6685 +#define IRQ09 (9) /* level 9 interrupt */
6686 +#define IRQ0A (10) /* level 10 interrupt */
6687 +#define IRQ0B (11) /* level 11 interrupt */
6688 +#define IRQ0C (12) /* level 12 interrupt */
6689 +#define IRQ0D (13) /* level 13 interrupt */
6690 +#define IRQ0E (14) /* level 14 interrupt */
6691 +#define IRQ0F (15) /* level 15 interrupt */
6692 +#define IRQ10 (16) /* level 16 interrupt */
6693 +#define IRQ12 (17) /* level 17 interrupt */
6694 +#define IRQ13 (18) /* level 18 interrupt */
6695 +#define IRQ14 (19) /* level 19 interrupt */
6696 +#define IRQ15 (20) /* level 20 interrupt */
6697 +#define IRQ16 (21) /* level 21 interrupt */
6698 +#define IRQ17 (22) /* level 22 interrupt */
6699 +#define IRQ18 (23) /* level 23 interrupt */
6700 +#define IRQ19 (24) /* level 24 interrupt */
6701 +#define IRQ1A (25) /* level 25 interrupt */
6702 +#define IRQ1B (26) /* level 26 interrupt */
6703 +#define IRQ1C (27) /* level 27 interrupt */
6704 +#define IRQ1D (28) /* level 28 interrupt */
6705 +#define IRQ1E (29) /* level 29 interrupt */
6706 +#define IRQ1F (30) /* level 30 interrupt */
6707 +#define IRQ20 (31) /* level 31 interrupt */
6708 +#define IRQ21 (32) /* level 32 interrupt */
6710 +#define IRQMAX IRQ21
6713 + * "Generic" interrupt sources
6717 + * Machine specific interrupt sources.
6719 + * Adding an interrupt service routine for a source with this bit
6720 + * set indicates a special machine specific interrupt source.
6721 + * The machine specific files define these sources.
6723 + * Removed, they are not used by any one.
6727 + * various flags for request_irq()
6729 +#define IRQ_FLG_LOCK (0x0001) /* handler is not replaceable */
6730 +#define IRQ_FLG_REPLACE (0x0002) /* replace existing handler */
6731 +#define IRQ_FLG_FAST (0x0004)
6732 +#define IRQ_FLG_SLOW (0x0008)
6733 +#define IRQ_FLG_STD (0x8000) /* internally used */
6736 + * Functions to set and clear the interrupt mask.
6740 + * Use a zero to clean the bit.
6742 +static inline void clrimr(int mask)
6746 + local_irq_save(flags);
6747 + __asm__ __volatile__(
6748 + "rdctl r8, ienable\n"
6750 + "wrctl ienable, r8\n"
6754 + local_irq_restore(flags);
6758 + * Use a one to set the bit.
6760 +static inline void setimr(int mask)
6764 + local_irq_save(flags);
6765 + __asm__ __volatile__(
6766 + "rdctl r8, ienable\n"
6768 + "wrctl ienable, r8\n"
6772 + local_irq_restore(flags);
6776 + * This structure is used to chain together the ISRs for a particular
6777 + * interrupt source (if it supports chaining).
6779 +typedef struct irq_node {
6780 + irqreturn_t (*handler)(int, void *, struct pt_regs *);
6781 + unsigned long flags;
6783 + const char *devname;
6784 + struct irq_node *next;
6788 + * This function returns a new irq_node_t
6790 +extern irq_node_t *new_irq_node(void);
6793 + * This structure has only 4 elements for speed reasons
6795 +typedef struct irq_handler {
6796 + irqreturn_t (*handler)(int, void *, struct pt_regs *);
6797 + unsigned long flags;
6799 + const char *devname;
6802 +/* count of spurious interrupts */
6803 +extern volatile unsigned int num_spurious;
6805 +#define disable_irq_nosync(i) disable_irq(i)
6807 +#ifndef irq_canonicalize
6808 +#define irq_canonicalize(i) (i)
6811 +#endif /* _NIOS2NOMMU_IRQ_H_ */
6812 --- linux/include/asm-nios2nommu/kmap_types.h
6813 +++ linux/include/asm-nios2nommu/kmap_types.h
6816 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6818 + * All rights reserved.
6820 + * This program is free software; you can redistribute it and/or modify
6821 + * it under the terms of the GNU General Public License as published by
6822 + * the Free Software Foundation; either version 2 of the License, or
6823 + * (at your option) any later version.
6825 + * This program is distributed in the hope that it will be useful, but
6826 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6827 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6828 + * NON INFRINGEMENT. See the GNU General Public License for more
6831 + * You should have received a copy of the GNU General Public License
6832 + * along with this program; if not, write to the Free Software
6833 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6837 +#ifndef _ASM_KMAP_TYPES_H
6838 +#define _ASM_KMAP_TYPES_H
6842 + KM_SKB_SUNRPC_DATA,
6843 + KM_SKB_DATA_SOFTIRQ,
6858 --- linux/include/asm-nios2nommu/linkage.h
6859 +++ linux/include/asm-nios2nommu/linkage.h
6862 + * Copyright (C) 2004, Microtronix Datacom Ltd.
6864 + * All rights reserved.
6866 + * This program is free software; you can redistribute it and/or modify
6867 + * it under the terms of the GNU General Public License as published by
6868 + * the Free Software Foundation; either version 2 of the License, or
6869 + * (at your option) any later version.
6871 + * This program is distributed in the hope that it will be useful, but
6872 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6873 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6874 + * NON INFRINGEMENT. See the GNU General Public License for more
6877 + * You should have received a copy of the GNU General Public License
6878 + * along with this program; if not, write to the Free Software
6879 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6883 +#ifndef __ASM_LINKAGE_H
6884 +#define __ASM_LINKAGE_H
6886 +#define __ALIGN .align 3
6887 +#define __ALIGN_STR ".align 3"
6890 --- linux/include/asm-nios2nommu/linux_logo.h
6891 +++ linux/include/asm-nios2nommu/linux_logo.h
6893 +/* $Id: linux_logo.h,v 1.3 2004/02/12 23:06:40 ken-h Exp $
6894 + * include/asm-nios/linux_logo.h: This is a linux logo
6895 + * to be displayed on boot.
6897 + * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
6898 + * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
6899 + * Copyright (C) 2004 Micrtronix Datacom Ltd.
6901 + * You can put anything here, but:
6902 + * LINUX_LOGO_COLORS has to be less than 224
6903 + * image size has to be 80x80
6904 + * values have to start from 0x20
6905 + * (i.e. RGB(linux_logo_red[0],
6906 + * linux_logo_green[0],
6907 + * linux_logo_blue[0]) is color 0x20)
6908 + * BW image has to be 80x80 as well, with MS bit
6910 + * Serial_console ascii image can be any size,
6911 + * but should contain %s to display the version
6913 + * All rights reserved.
6915 + * This program is free software; you can redistribute it and/or modify
6916 + * it under the terms of the GNU General Public License as published by
6917 + * the Free Software Foundation; either version 2 of the License, or
6918 + * (at your option) any later version.
6920 + * This program is distributed in the hope that it will be useful, but
6921 + * WITHOUT ANY WARRANTY; without even the implied warranty of
6922 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
6923 + * NON INFRINGEMENT. See the GNU General Public License for more
6926 + * You should have received a copy of the GNU General Public License
6927 + * along with this program; if not, write to the Free Software
6928 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6932 +#include <linux/init.h>
6933 +#include <linux/version.h>
6935 +#define linux_logo_banner "Linux/NIOS2 version " UTS_RELEASE
6937 +#define __HAVE_ARCH_LINUX_LOGO
6938 +#define __HAVE_ARCH_LINUX_LOGO16
6940 +#define LINUX_LOGO_COLORS 221
6942 +#ifdef INCLUDE_LINUX_LOGO_DATA
6944 +unsigned char linux_logo_red[] __initdata = {
6945 + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
6946 + 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
6947 + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
6948 + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
6949 + 0xc3, 0x65, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
6950 + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
6951 + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x76, 0x79,
6952 + 0x62, 0x36, 0x9a, 0xe2, 0xec, 0xe1, 0xb8, 0xd7,
6953 + 0xaf, 0x25, 0xbc, 0xc0, 0xef, 0xea, 0xe8, 0xe8,
6954 + 0xf5, 0xf1, 0xda, 0xd3, 0x79, 0xdb, 0xf4, 0xf6,
6955 + 0xf6, 0xf6, 0xe2, 0x3d, 0xb4, 0xce, 0xe6, 0xee,
6956 + 0xf6, 0x68, 0xd8, 0xec, 0xf5, 0xc6, 0xc8, 0x9c,
6957 + 0x89, 0xd2, 0xee, 0xcb, 0xb9, 0xd2, 0x66, 0x5e,
6958 + 0x8b, 0xbe, 0xa8, 0xd5, 0xca, 0xb6, 0xae, 0x9c,
6959 + 0xc5, 0xbe, 0xbe, 0xca, 0x90, 0xb2, 0x9a, 0xa8,
6960 + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xfe,
6961 + 0xf6, 0xec, 0xfe, 0xd2, 0xea, 0xf5, 0xf2, 0xf2,
6962 + 0xe9, 0xee, 0xf6, 0xf2, 0xee, 0xf6, 0xda, 0xd4,
6963 + 0xfa, 0xca, 0xf2, 0xf6, 0xfe, 0xf2, 0xda, 0xe4,
6964 + 0xf6, 0xdd, 0xf2, 0xee, 0xfa, 0xf0, 0x12, 0x4a,
6965 + 0xd6, 0xf2, 0x8e, 0xf2, 0xf6, 0xf6, 0xb5, 0xf1,
6966 + 0x26, 0x9a, 0xea, 0xf6, 0xe0, 0xd2, 0x16, 0x9a,
6967 + 0x2e, 0xd2, 0x70, 0xd6, 0x46, 0x7c, 0xb4, 0x62,
6968 + 0xda, 0xee, 0xd6, 0xa3, 0x74, 0xa7, 0xa2, 0xe0,
6969 + 0xae, 0xbe, 0xce, 0xe2, 0xa3, 0x8e, 0x6d, 0x8e,
6970 + 0x32, 0xaf, 0x50, 0x9e, 0x5b, 0x8a, 0x98, 0x82,
6971 + 0x7a, 0x82, 0x56, 0x7c, 0x8a, 0x56, 0x5e, 0x86,
6972 + 0x6a, 0x52, 0x59, 0x64, 0x5e,
6975 +unsigned char linux_logo_green[] __initdata = {
6976 + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
6977 + 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
6978 + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
6979 + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
6980 + 0xc3, 0x62, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
6981 + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
6982 + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x62, 0x5c,
6983 + 0x4e, 0x26, 0x72, 0xaa, 0xba, 0xaf, 0x90, 0xae,
6984 + 0x92, 0x1a, 0xa4, 0x85, 0xb6, 0xbe, 0xc3, 0xc8,
6985 + 0xcf, 0xd0, 0xc2, 0xce, 0x57, 0xa2, 0xd6, 0xda,
6986 + 0xda, 0xd7, 0xb8, 0x2a, 0x7b, 0x91, 0xae, 0xca,
6987 + 0xda, 0x45, 0x9e, 0xb2, 0xd7, 0x9b, 0x90, 0x76,
6988 + 0x5c, 0xa2, 0xbe, 0xa6, 0x85, 0x96, 0x4e, 0x46,
6989 + 0x66, 0x92, 0x7a, 0x9a, 0x96, 0x9d, 0x9a, 0x6b,
6990 + 0x8a, 0x8e, 0xb2, 0xca, 0x90, 0xa6, 0x79, 0x7c,
6991 + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xfa,
6992 + 0xea, 0xd7, 0xf6, 0xbc, 0xda, 0xde, 0xda, 0xe6,
6993 + 0xca, 0xd8, 0xea, 0xe0, 0xcc, 0xf2, 0xce, 0xb2,
6994 + 0xee, 0xa2, 0xd6, 0xe6, 0xf6, 0xd7, 0xc5, 0xb8,
6995 + 0xc6, 0xb9, 0xce, 0xde, 0xce, 0xc6, 0x0e, 0x36,
6996 + 0xae, 0xbe, 0x86, 0xba, 0xbe, 0xe6, 0x8e, 0xc4,
6997 + 0x1e, 0x8e, 0xae, 0xba, 0xb2, 0xa6, 0x12, 0x7a,
6998 + 0x20, 0xc6, 0x64, 0xaa, 0x2f, 0x70, 0x85, 0x46,
6999 + 0xce, 0xd6, 0xa6, 0x6e, 0x51, 0x72, 0x92, 0xa6,
7000 + 0x87, 0x96, 0xa2, 0xd6, 0x85, 0x7a, 0x6a, 0x6e,
7001 + 0x22, 0x76, 0x36, 0x76, 0x3c, 0x6e, 0x63, 0x53,
7002 + 0x66, 0x62, 0x42, 0x50, 0x56, 0x42, 0x56, 0x56,
7003 + 0x56, 0x3e, 0x51, 0x52, 0x56,
7006 +unsigned char linux_logo_blue[] __initdata = {
7007 + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
7008 + 0x12, 0x01, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
7009 + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x06, 0x65,
7010 + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
7011 + 0xc3, 0x59, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
7012 + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
7013 + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x2e, 0x08,
7014 + 0x0a, 0x06, 0x0a, 0x0b, 0x0b, 0x0f, 0x0c, 0x0f,
7015 + 0x3d, 0x09, 0x73, 0x09, 0x0d, 0x0a, 0x10, 0x1e,
7016 + 0x2d, 0x13, 0x86, 0xba, 0x19, 0x0a, 0x36, 0x3c,
7017 + 0x26, 0x14, 0x0d, 0x06, 0x07, 0x0a, 0x0b, 0x0f,
7018 + 0x4a, 0x06, 0x0a, 0x0c, 0x2b, 0x0a, 0x0b, 0x0a,
7019 + 0x06, 0x0a, 0x0a, 0x11, 0x0b, 0x0a, 0x0a, 0x1e,
7020 + 0x0f, 0x0d, 0x0a, 0x0b, 0x22, 0x6a, 0x72, 0x0b,
7021 + 0x0b, 0x22, 0x90, 0xca, 0x90, 0x92, 0x3c, 0x2c,
7022 + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xea,
7023 + 0xb6, 0x7c, 0xda, 0x8e, 0xa6, 0x87, 0x66, 0xb6,
7024 + 0x81, 0x6a, 0xc6, 0x9a, 0x5b, 0xd2, 0xb6, 0x6a,
7025 + 0xca, 0x45, 0x92, 0xb2, 0xca, 0x52, 0x8a, 0x3e,
7026 + 0x2e, 0x66, 0x66, 0xae, 0x3e, 0x47, 0x06, 0x0e,
7027 + 0x52, 0x36, 0x6a, 0x0e, 0x0e, 0xbe, 0x2c, 0x0e,
7028 + 0x0a, 0x5a, 0x0d, 0x0e, 0x3e, 0x0a, 0x06, 0x2e,
7029 + 0x06, 0x9e, 0x4e, 0x36, 0x06, 0x58, 0x24, 0x06,
7030 + 0x9e, 0xae, 0x3a, 0x08, 0x08, 0x07, 0x5e, 0x0a,
7031 + 0x32, 0x2e, 0x2a, 0xb2, 0x43, 0x48, 0x5f, 0x2e,
7032 + 0x06, 0x06, 0x07, 0x24, 0x06, 0x32, 0x06, 0x06,
7033 + 0x46, 0x2e, 0x22, 0x06, 0x06, 0x1e, 0x4c, 0x06,
7034 + 0x3a, 0x22, 0x42, 0x34, 0x42,
7037 +unsigned char linux_logo[] __initdata = {
7038 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7039 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7040 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7041 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7042 + 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22,
7043 + 0x22, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20,
7044 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7045 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7046 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7047 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7048 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7049 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7050 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7051 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7052 + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
7053 + 0x26, 0x26, 0x25, 0x28, 0x23, 0x22, 0x21, 0x20,
7054 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7055 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7056 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7057 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7058 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
7059 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7060 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7061 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7062 + 0x21, 0x23, 0x25, 0x2a, 0x2b, 0x2c, 0x2d, 0x2d,
7063 + 0x2d, 0x2e, 0x2c, 0x2b, 0x2a, 0x25, 0x28, 0x22,
7064 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7065 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7066 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7067 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7068 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
7069 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7070 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7071 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
7072 + 0x24, 0x2a, 0x2c, 0x2f, 0x2c, 0x30, 0x30, 0x24,
7073 + 0x25, 0x27, 0x2b, 0x2c, 0x2f, 0x31, 0x32, 0x25,
7074 + 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7075 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7076 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7077 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7078 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
7079 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7080 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7081 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
7082 + 0x33, 0x34, 0x35, 0x21, 0x36, 0x36, 0x36, 0x36,
7083 + 0x36, 0x36, 0x36, 0x36, 0x21, 0x2b, 0x2f, 0x2c,
7084 + 0x30, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7085 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7086 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7087 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7088 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7089 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7090 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7091 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
7092 + 0x2d, 0x27, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7093 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x31,
7094 + 0x2d, 0x32, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
7095 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7096 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7097 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7098 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
7099 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7100 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7101 + 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, 0x2a, 0x34,
7102 + 0x25, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7103 + 0x36, 0x36, 0x36, 0x23, 0x32, 0x27, 0x21, 0x36,
7104 + 0x2a, 0x2d, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
7105 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7106 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7107 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7108 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x29, 0x20,
7109 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7110 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7111 + 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x2c, 0x35,
7112 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7113 + 0x36, 0x36, 0x36, 0x25, 0x2f, 0x37, 0x32, 0x22,
7114 + 0x36, 0x35, 0x31, 0x27, 0x22, 0x20, 0x20, 0x20,
7115 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7116 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7117 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7118 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
7119 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7120 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7121 + 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x22,
7122 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7123 + 0x36, 0x36, 0x36, 0x26, 0x38, 0x38, 0x35, 0x25,
7124 + 0x36, 0x21, 0x2d, 0x2b, 0x24, 0x21, 0x20, 0x20,
7125 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7126 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7127 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7128 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7129 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7130 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7131 + 0x20, 0x20, 0x20, 0x21, 0x24, 0x39, 0x39, 0x36,
7132 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7133 + 0x36, 0x36, 0x36, 0x25, 0x2b, 0x30, 0x28, 0x22,
7134 + 0x36, 0x36, 0x27, 0x34, 0x30, 0x23, 0x20, 0x20,
7135 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7136 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7137 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7138 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
7139 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7140 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7141 + 0x20, 0x20, 0x20, 0x21, 0x26, 0x2d, 0x26, 0x36,
7142 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7143 + 0x36, 0x36, 0x36, 0x22, 0x22, 0x36, 0x36, 0x36,
7144 + 0x36, 0x36, 0x36, 0x2d, 0x33, 0x28, 0x21, 0x20,
7145 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7146 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7147 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7148 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
7149 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7150 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7151 + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x36,
7152 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7153 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7154 + 0x36, 0x36, 0x36, 0x2b, 0x2c, 0x25, 0x21, 0x20,
7155 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7156 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7157 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7158 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
7159 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7160 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7161 + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x36, 0x36,
7162 + 0x36, 0x21, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36,
7163 + 0x36, 0x36, 0x36, 0x21, 0x23, 0x22, 0x36, 0x36,
7164 + 0x36, 0x36, 0x36, 0x28, 0x34, 0x27, 0x22, 0x20,
7165 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7166 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7167 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7168 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
7169 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7170 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7171 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
7172 + 0x21, 0x21, 0x24, 0x27, 0x21, 0x36, 0x36, 0x36,
7173 + 0x36, 0x36, 0x28, 0x27, 0x22, 0x33, 0x24, 0x36,
7174 + 0x36, 0x36, 0x36, 0x22, 0x2f, 0x2a, 0x23, 0x20,
7175 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7176 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7177 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7178 + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
7179 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7180 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7181 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
7182 + 0x30, 0x3a, 0x38, 0x24, 0x24, 0x36, 0x36, 0x36,
7183 + 0x23, 0x2f, 0x3b, 0x3c, 0x3d, 0x30, 0x25, 0x21,
7184 + 0x36, 0x36, 0x36, 0x36, 0x2f, 0x32, 0x23, 0x20,
7185 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7186 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7187 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7188 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7189 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7190 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7191 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x23,
7192 + 0x3e, 0x3f, 0x40, 0x3a, 0x22, 0x36, 0x36, 0x21,
7193 + 0x41, 0x42, 0x43, 0x44, 0x45, 0x3e, 0x23, 0x21,
7194 + 0x36, 0x36, 0x36, 0x36, 0x2f, 0x33, 0x28, 0x21,
7195 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7196 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7197 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7198 + 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
7199 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7200 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7201 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x2b,
7202 + 0x44, 0x40, 0x46, 0x47, 0x35, 0x36, 0x36, 0x26,
7203 + 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x2e, 0x36,
7204 + 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
7205 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7206 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7207 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7208 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7209 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7210 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7211 + 0x20, 0x20, 0x20, 0x23, 0x32, 0x34, 0x36, 0x4d,
7212 + 0x4e, 0x25, 0x2f, 0x46, 0x4a, 0x22, 0x23, 0x32,
7213 + 0x4f, 0x50, 0x21, 0x31, 0x51, 0x52, 0x53, 0x36,
7214 + 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
7215 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7216 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7217 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7218 + 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
7219 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7220 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7221 + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x21, 0x3a,
7222 + 0x4d, 0x21, 0x31, 0x54, 0x55, 0x28, 0x30, 0x2b,
7223 + 0x4b, 0x4d, 0x36, 0x23, 0x32, 0x50, 0x3f, 0x36,
7224 + 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
7225 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7226 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7227 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7228 + 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20,
7229 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7230 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7231 + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x38, 0x23, 0x37,
7232 + 0x55, 0x36, 0x28, 0x3a, 0x56, 0x57, 0x57, 0x58,
7233 + 0x3c, 0x4d, 0x36, 0x36, 0x36, 0x40, 0x40, 0x21,
7234 + 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
7235 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7236 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7237 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7238 + 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, 0x29, 0x20,
7239 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7240 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7241 + 0x20, 0x20, 0x20, 0x22, 0x30, 0x51, 0x23, 0x35,
7242 + 0x43, 0x25, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
7243 + 0x5f, 0x60, 0x61, 0x36, 0x31, 0x47, 0x3b, 0x36,
7244 + 0x36, 0x36, 0x36, 0x36, 0x31, 0x2c, 0x25, 0x21,
7245 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7246 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7247 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7248 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7249 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7250 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7251 + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x22,
7252 + 0x40, 0x62, 0x63, 0x5d, 0x64, 0x65, 0x66, 0x67,
7253 + 0x68, 0x69, 0x66, 0x5e, 0x6a, 0x6b, 0x2a, 0x36,
7254 + 0x36, 0x36, 0x36, 0x36, 0x33, 0x2e, 0x26, 0x21,
7255 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7256 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7257 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7258 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7259 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7260 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7261 + 0x20, 0x20, 0x20, 0x22, 0x27, 0x2f, 0x23, 0x36,
7262 + 0x6c, 0x63, 0x6d, 0x64, 0x5c, 0x66, 0x69, 0x6e,
7263 + 0x6f, 0x70, 0x71, 0x69, 0x69, 0x72, 0x6c, 0x36,
7264 + 0x36, 0x36, 0x36, 0x36, 0x33, 0x34, 0x27, 0x22,
7265 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7266 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7267 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7268 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7269 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7270 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7271 + 0x20, 0x20, 0x20, 0x22, 0x27, 0x34, 0x26, 0x73,
7272 + 0x74, 0x75, 0x76, 0x64, 0x65, 0x77, 0x69, 0x78,
7273 + 0x70, 0x71, 0x71, 0x71, 0x72, 0x5f, 0x5e, 0x21,
7274 + 0x36, 0x36, 0x36, 0x36, 0x25, 0x38, 0x2a, 0x23,
7275 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7276 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7277 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7278 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7279 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7280 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7281 + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x33, 0x79,
7282 + 0x63, 0x7a, 0x7b, 0x5c, 0x66, 0x69, 0x6e, 0x7c,
7283 + 0x71, 0x71, 0x69, 0x7d, 0x7e, 0x7a, 0x7f, 0x36,
7284 + 0x36, 0x36, 0x36, 0x36, 0x21, 0x51, 0x2b, 0x28,
7285 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7286 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7287 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7288 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7289 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7290 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7291 + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x32, 0x24,
7292 + 0x80, 0x81, 0x64, 0x82, 0x77, 0x69, 0x71, 0x71,
7293 + 0x69, 0x83, 0x84, 0x85, 0x7a, 0x85, 0x86, 0x36,
7294 + 0x21, 0x2b, 0x23, 0x36, 0x36, 0x39, 0x2e, 0x26,
7295 + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7296 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7297 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7298 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7299 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7300 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7301 + 0x20, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x33, 0x21,
7302 + 0x87, 0x88, 0x89, 0x72, 0x67, 0x66, 0x5f, 0x89,
7303 + 0x8a, 0x63, 0x85, 0x8b, 0x8c, 0x8d, 0x41, 0x36,
7304 + 0x36, 0x2d, 0x3a, 0x35, 0x36, 0x24, 0x51, 0x32,
7305 + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7306 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7307 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7308 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7309 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7310 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7311 + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x33, 0x21,
7312 + 0x55, 0x8e, 0x8f, 0x8a, 0x7d, 0x5e, 0x90, 0x7e,
7313 + 0x75, 0x75, 0x90, 0x62, 0x40, 0x3f, 0x49, 0x23,
7314 + 0x36, 0x24, 0x3a, 0x3a, 0x24, 0x36, 0x2e, 0x31,
7315 + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7316 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7317 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7318 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7319 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7320 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7321 + 0x20, 0x20, 0x21, 0x28, 0x33, 0x37, 0x25, 0x22,
7322 + 0x3b, 0x50, 0x8e, 0x8f, 0x90, 0x7e, 0x90, 0x63,
7323 + 0x74, 0x91, 0x92, 0x42, 0x93, 0x4b, 0x45, 0x2c,
7324 + 0x36, 0x36, 0x33, 0x39, 0x21, 0x36, 0x22, 0x51,
7325 + 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7326 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7327 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7328 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7329 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7330 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7331 + 0x20, 0x20, 0x22, 0x27, 0x2e, 0x2e, 0x36, 0x21,
7332 + 0x94, 0x3f, 0x50, 0x95, 0x96, 0x8f, 0x8f, 0x97,
7333 + 0x8e, 0x42, 0x50, 0x43, 0x47, 0x48, 0x48, 0x98,
7334 + 0x21, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39,
7335 + 0x2e, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
7336 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7337 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7338 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7339 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7340 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7341 + 0x20, 0x22, 0x24, 0x2b, 0x38, 0x28, 0x36, 0x32,
7342 + 0x4c, 0x4b, 0x50, 0x50, 0x50, 0x42, 0x42, 0x50,
7343 + 0x50, 0x40, 0x45, 0x99, 0x48, 0x48, 0x48, 0x48,
7344 + 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x23,
7345 + 0x2f, 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
7346 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7347 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7348 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7349 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7350 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7351 + 0x21, 0x28, 0x32, 0x51, 0x32, 0x28, 0x21, 0x98,
7352 + 0x48, 0x47, 0x9a, 0x50, 0x50, 0x50, 0x50, 0x50,
7353 + 0x9a, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48,
7354 + 0x93, 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7355 + 0x2a, 0x2f, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
7356 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7357 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7358 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7359 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7360 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7361 + 0x23, 0x30, 0x2e, 0x2c, 0x36, 0x21, 0x51, 0x9b,
7362 + 0x48, 0x48, 0x52, 0x3f, 0x50, 0x50, 0x40, 0x4b,
7363 + 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7364 + 0x48, 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7365 + 0x36, 0x2d, 0x31, 0x27, 0x23, 0x21, 0x20, 0x20,
7366 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7367 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7368 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7369 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7370 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
7371 + 0x27, 0x2c, 0x2d, 0x21, 0x36, 0x28, 0x44, 0x48,
7372 + 0x48, 0x48, 0x48, 0x47, 0x46, 0x4f, 0x47, 0x48,
7373 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7374 + 0x48, 0x9c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7375 + 0x36, 0x28, 0x51, 0x39, 0x26, 0x22, 0x20, 0x20,
7376 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7377 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7378 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7379 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7380 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
7381 + 0x35, 0x51, 0x28, 0x36, 0x36, 0x9d, 0x48, 0x48,
7382 + 0x48, 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48,
7383 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7384 + 0x48, 0x4f, 0x28, 0x36, 0x36, 0x36, 0x36, 0x36,
7385 + 0x36, 0x36, 0x28, 0x38, 0x2b, 0x25, 0x22, 0x20,
7386 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7387 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7388 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7389 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7390 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
7391 + 0x51, 0x25, 0x36, 0x36, 0x23, 0x40, 0x9b, 0x48,
7392 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7393 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7394 + 0x9b, 0x99, 0x2b, 0x36, 0x36, 0x36, 0x36, 0x36,
7395 + 0x36, 0x36, 0x36, 0x30, 0x2f, 0x33, 0x24, 0x21,
7396 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7397 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7398 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7399 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7400 + 0x20, 0x20, 0x20, 0x20, 0x21, 0x23, 0x30, 0x34,
7401 + 0x27, 0x36, 0x36, 0x36, 0x2a, 0x40, 0x47, 0x48,
7402 + 0x48, 0x48, 0x48, 0x9b, 0x99, 0x99, 0x9b, 0x48,
7403 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x47, 0x52,
7404 + 0x46, 0x4f, 0x37, 0x21, 0x36, 0x36, 0x36, 0x36,
7405 + 0x36, 0x36, 0x36, 0x36, 0x30, 0x34, 0x2a, 0x23,
7406 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7407 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7408 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7409 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7410 + 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, 0x39, 0x2c,
7411 + 0x36, 0x36, 0x36, 0x21, 0x31, 0x4e, 0x9a, 0x4c,
7412 + 0x47, 0x9b, 0x9b, 0x52, 0x46, 0x4f, 0x52, 0x9b,
7413 + 0x9b, 0x9b, 0x47, 0x4f, 0x45, 0x9a, 0x93, 0x93,
7414 + 0x3f, 0x93, 0x98, 0x28, 0x36, 0x36, 0x36, 0x36,
7415 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, 0x26,
7416 + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7417 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7418 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7419 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7420 + 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x28,
7421 + 0x36, 0x36, 0x36, 0x22, 0x38, 0x98, 0x44, 0x99,
7422 + 0x9b, 0x48, 0x48, 0x9b, 0x4c, 0x48, 0x48, 0x48,
7423 + 0x48, 0x48, 0x48, 0x47, 0x52, 0x46, 0x43, 0x93,
7424 + 0x40, 0x40, 0x43, 0x53, 0x21, 0x23, 0x33, 0x23,
7425 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x2f, 0x32,
7426 + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7427 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7428 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7429 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7430 + 0x20, 0x20, 0x20, 0x21, 0x24, 0x2b, 0x31, 0x36,
7431 + 0x36, 0x22, 0x36, 0x24, 0x9e, 0x4f, 0x9b, 0x48,
7432 + 0x48, 0x48, 0x48, 0x9b, 0x99, 0x9f, 0x52, 0x48,
7433 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47,
7434 + 0x4f, 0x9a, 0x3f, 0x46, 0x38, 0x36, 0x21, 0x30,
7435 + 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c,
7436 + 0x25, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7437 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7438 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7439 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7440 + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2e, 0x33, 0x36,
7441 + 0x25, 0x25, 0x36, 0x4d, 0x52, 0x48, 0x48, 0x48,
7442 + 0x47, 0x9f, 0x48, 0x48, 0x48, 0xa0, 0xa1, 0xa2,
7443 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7444 + 0x48, 0x47, 0x44, 0x93, 0x43, 0x23, 0x36, 0x36,
7445 + 0x26, 0x24, 0x36, 0x36, 0x36, 0x36, 0x28, 0x2f,
7446 + 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7447 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7448 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7449 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7450 + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x51, 0x24, 0x36,
7451 + 0x2a, 0x36, 0x28, 0x44, 0x48, 0x48, 0x48, 0x48,
7452 + 0xa3, 0xa4, 0x48, 0x48, 0x9f, 0xa5, 0xa6, 0x9f,
7453 + 0x48, 0x48, 0x48, 0xa2, 0xa7, 0x47, 0x48, 0x48,
7454 + 0x48, 0x48, 0x9b, 0x4b, 0x44, 0x37, 0x36, 0x23,
7455 + 0x28, 0x30, 0x22, 0x36, 0x36, 0x36, 0x36, 0x2d,
7456 + 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7457 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7458 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7459 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7460 + 0x20, 0x20, 0x21, 0x28, 0x2b, 0x34, 0x36, 0x25,
7461 + 0x24, 0x36, 0x4a, 0x48, 0x48, 0x48, 0x48, 0x48,
7462 + 0xa8, 0xa1, 0x48, 0x48, 0x9f, 0xa9, 0xa6, 0x9f,
7463 + 0x48, 0x48, 0xaa, 0xa1, 0xa5, 0x9f, 0x48, 0x48,
7464 + 0x48, 0x48, 0x48, 0x9b, 0x52, 0x3f, 0x21, 0x30,
7465 + 0x35, 0x25, 0x30, 0x36, 0x36, 0x36, 0x36, 0x32,
7466 + 0x2d, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
7467 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7468 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7469 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7470 + 0x20, 0x20, 0x22, 0x26, 0x2e, 0x35, 0x36, 0x2a,
7471 + 0x36, 0x24, 0x4f, 0x48, 0x52, 0x52, 0x48, 0x48,
7472 + 0xab, 0xac, 0xa0, 0x48, 0xad, 0xa6, 0xa6, 0x9f,
7473 + 0x48, 0xa2, 0xa9, 0xa6, 0xa2, 0x48, 0x48, 0x48,
7474 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x32, 0x30,
7475 + 0x2a, 0x23, 0x30, 0x23, 0x36, 0x36, 0x36, 0x21,
7476 + 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
7477 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7478 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7479 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7480 + 0x20, 0x21, 0x23, 0x2a, 0x51, 0x28, 0x28, 0x25,
7481 + 0x36, 0x3a, 0x48, 0x48, 0xae, 0xaf, 0x48, 0x48,
7482 + 0xad, 0xac, 0xa1, 0x9f, 0xa2, 0xa9, 0xa9, 0xa2,
7483 + 0x48, 0xab, 0x78, 0xa7, 0x48, 0x48, 0x48, 0x48,
7484 + 0x9f, 0x48, 0x48, 0x48, 0x48, 0x48, 0x38, 0x21,
7485 + 0x36, 0x36, 0x22, 0x27, 0x36, 0x36, 0x36, 0x36,
7486 + 0x2e, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
7487 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7488 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7489 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7490 + 0x20, 0x22, 0x25, 0x2c, 0x34, 0x36, 0x30, 0x21,
7491 + 0x23, 0x43, 0x48, 0x48, 0xb0, 0xb1, 0xb2, 0x9f,
7492 + 0x48, 0xb3, 0xa5, 0xb3, 0xab, 0xa9, 0xa9, 0xb3,
7493 + 0xb4, 0xa9, 0xb5, 0xb0, 0x48, 0x48, 0xa0, 0xa5,
7494 + 0xa1, 0xad, 0x48, 0x48, 0x48, 0x48, 0x94, 0x36,
7495 + 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
7496 + 0x2a, 0x2e, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20,
7497 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7498 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7499 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7500 + 0x21, 0x23, 0x2a, 0x51, 0x25, 0x21, 0x2a, 0x36,
7501 + 0x2e, 0x9b, 0x48, 0x48, 0x48, 0xb6, 0xb7, 0xa4,
7502 + 0xa2, 0xa7, 0xb5, 0x78, 0x6f, 0x6f, 0x6e, 0x6f,
7503 + 0xa9, 0xb5, 0xab, 0x48, 0x9f, 0xab, 0xa9, 0xa1,
7504 + 0xaa, 0x48, 0x48, 0x48, 0x48, 0x48, 0x98, 0x36,
7505 + 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
7506 + 0x22, 0x2f, 0x30, 0x22, 0x20, 0x20, 0x20, 0x20,
7507 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7508 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7509 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7510 + 0x22, 0x25, 0x2c, 0x34, 0x36, 0x24, 0x28, 0x36,
7511 + 0x54, 0x48, 0x48, 0x48, 0x48, 0xa2, 0xa8, 0xa1,
7512 + 0xa5, 0xa6, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f,
7513 + 0x6f, 0x78, 0xa5, 0xa0, 0xa0, 0x78, 0xa6, 0xa2,
7514 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
7515 + 0x36, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x36,
7516 + 0x21, 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20,
7517 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7518 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7519 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7520 + 0x28, 0x32, 0x2f, 0x28, 0x36, 0x27, 0x22, 0x21,
7521 + 0x43, 0x48, 0x4b, 0xa2, 0x9f, 0x48, 0xa2, 0xa1,
7522 + 0xb8, 0x6e, 0x6e, 0xb5, 0x78, 0x6f, 0x78, 0x78,
7523 + 0x6e, 0x6f, 0x78, 0xb5, 0xa6, 0xa1, 0xa0, 0x48,
7524 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4b, 0x21,
7525 + 0x36, 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36,
7526 + 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
7527 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7528 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7529 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
7530 + 0x25, 0x2c, 0x39, 0x36, 0x36, 0x30, 0x22, 0x25,
7531 + 0x52, 0x48, 0xa3, 0xb1, 0xb6, 0xb3, 0xaa, 0xac,
7532 + 0x68, 0x68, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f,
7533 + 0x78, 0x6f, 0x6f, 0xb5, 0xa6, 0xb4, 0x48, 0x9f,
7534 + 0xb4, 0xb4, 0xa2, 0x9f, 0x48, 0x48, 0x4f, 0x21,
7535 + 0x36, 0x36, 0x22, 0x26, 0x36, 0x36, 0x36, 0x36,
7536 + 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
7537 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7538 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7539 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
7540 + 0x30, 0x2d, 0x21, 0x36, 0x36, 0x32, 0x23, 0x2a,
7541 + 0x47, 0x48, 0xa2, 0xb6, 0xaf, 0xb9, 0xba, 0x68,
7542 + 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x78,
7543 + 0x6f, 0x6f, 0xa6, 0x6f, 0xb5, 0xa0, 0xaa, 0xa6,
7544 + 0xa6, 0xa9, 0xb2, 0xb3, 0x48, 0x48, 0x4c, 0x22,
7545 + 0x36, 0x36, 0x24, 0x23, 0x36, 0x36, 0x36, 0x36,
7546 + 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
7547 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7548 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7549 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
7550 + 0x33, 0x2e, 0x36, 0x36, 0x23, 0x31, 0x27, 0x39,
7551 + 0x9b, 0x48, 0x48, 0x48, 0xb0, 0xb0, 0xba, 0xb8,
7552 + 0x68, 0x68, 0x69, 0x78, 0x6f, 0xb5, 0x6f, 0xb5,
7553 + 0x78, 0x78, 0x78, 0x78, 0x78, 0xa5, 0xbb, 0xa9,
7554 + 0xa5, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x23,
7555 + 0x36, 0x36, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
7556 + 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
7557 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7558 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7559 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
7560 + 0x2b, 0x39, 0x36, 0x36, 0x36, 0x26, 0x32, 0x31,
7561 + 0x9b, 0x48, 0x48, 0x48, 0x48, 0x9f, 0xac, 0x68,
7562 + 0xbc, 0x6e, 0x6e, 0x6e, 0xb5, 0x6f, 0x6e, 0x6f,
7563 + 0x6f, 0x78, 0x78, 0xb5, 0xb5, 0xa5, 0x9f, 0x9f,
7564 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x46, 0x22,
7565 + 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
7566 + 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
7567 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7568 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7569 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
7570 + 0x35, 0x39, 0x36, 0x36, 0x36, 0x36, 0x26, 0x2d,
7571 + 0x9b, 0x48, 0x48, 0xb0, 0xaa, 0xb3, 0xbd, 0xb8,
7572 + 0xb8, 0x68, 0x6e, 0x6e, 0xb5, 0x6f, 0x78, 0x6e,
7573 + 0x78, 0x6f, 0x78, 0x78, 0xb5, 0xa9, 0xa2, 0x48,
7574 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
7575 + 0x24, 0x27, 0xbe, 0x24, 0x25, 0x28, 0x21, 0x36,
7576 + 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
7577 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7578 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7579 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x25,
7580 + 0x39, 0x4d, 0xbf, 0x84, 0x81, 0x57, 0x21, 0x39,
7581 + 0x52, 0x48, 0x48, 0x62, 0xb1, 0xc0, 0xc1, 0xc1,
7582 + 0xb8, 0xb8, 0x68, 0xbc, 0x6e, 0x6e, 0x6e, 0x78,
7583 + 0x78, 0x78, 0x78, 0x6e, 0x78, 0xa9, 0xa0, 0xab,
7584 + 0xb3, 0xa2, 0x48, 0x48, 0x48, 0x48, 0x53, 0x28,
7585 + 0x23, 0x36, 0x36, 0x36, 0x21, 0x28, 0x2c, 0x30,
7586 + 0x21, 0x38, 0x33, 0x28, 0x21, 0x20, 0x20, 0x20,
7587 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7588 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7589 + 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x28, 0x30,
7590 + 0x2d, 0xc2, 0x7a, 0xc3, 0xc4, 0xc4, 0x7f, 0x22,
7591 + 0x51, 0x52, 0x48, 0x48, 0xb0, 0xaa, 0xa8, 0xbd,
7592 + 0x68, 0xb8, 0xb8, 0x68, 0x68, 0x6e, 0x6e, 0x6f,
7593 + 0x6e, 0x6e, 0xb5, 0x6e, 0x78, 0xab, 0xab, 0xb5,
7594 + 0x78, 0xa6, 0xb3, 0xc5, 0xac, 0xac, 0xc6, 0x61,
7595 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x30, 0x32,
7596 + 0x25, 0x4d, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
7597 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7598 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7599 + 0x20, 0x21, 0x23, 0x24, 0x26, 0x30, 0x33, 0x31,
7600 + 0x4d, 0x91, 0x5b, 0xc3, 0xc4, 0xc4, 0xc4, 0x5a,
7601 + 0x21, 0x2e, 0x46, 0x48, 0x48, 0x48, 0xb0, 0x64,
7602 + 0xc1, 0xb8, 0xb8, 0xb8, 0x68, 0x71, 0x6e, 0x6e,
7603 + 0x6f, 0x71, 0x6f, 0x6f, 0xa6, 0xa0, 0x9f, 0xb4,
7604 + 0xb4, 0xa0, 0xa1, 0xb7, 0xc7, 0x69, 0x66, 0xc8,
7605 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x26, 0x25,
7606 + 0x83, 0xc9, 0x2c, 0x25, 0x21, 0x20, 0x20, 0x20,
7607 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7608 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7609 + 0x21, 0x28, 0x30, 0x35, 0x2d, 0x2f, 0x37, 0x4a,
7610 + 0x60, 0x85, 0xca, 0xcb, 0xc4, 0xc4, 0xc4, 0x82,
7611 + 0x86, 0x36, 0x32, 0x3f, 0xa2, 0xa4, 0xa8, 0xa9,
7612 + 0xb8, 0xb8, 0xb8, 0xb8, 0x68, 0x6e, 0x6e, 0x6e,
7613 + 0x6e, 0x71, 0x6f, 0x71, 0xa6, 0xb4, 0x9f, 0x9f,
7614 + 0x48, 0x48, 0x48, 0xcc, 0xc3, 0xc7, 0xcd, 0xce,
7615 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x57,
7616 + 0x77, 0x66, 0x34, 0x27, 0x22, 0x20, 0x20, 0x20,
7617 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7618 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7619 + 0x23, 0x30, 0x31, 0xcf, 0x91, 0x7e, 0x90, 0x90,
7620 + 0x8b, 0x5b, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7621 + 0x5d, 0xd0, 0x36, 0x24, 0xd1, 0xb1, 0xaf, 0xaa,
7622 + 0xba, 0xb8, 0x68, 0x68, 0x68, 0x71, 0x6e, 0x6e,
7623 + 0x6e, 0x6f, 0x6e, 0x78, 0xa1, 0xa9, 0xa1, 0xb0,
7624 + 0x9f, 0x9b, 0x99, 0xcc, 0x64, 0x5c, 0x8b, 0xd0,
7625 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x73, 0x5d,
7626 + 0x82, 0x5c, 0xd2, 0x2a, 0x23, 0x20, 0x20, 0x20,
7627 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7628 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7629 + 0x24, 0x2b, 0xcf, 0x8b, 0x5b, 0x76, 0x5b, 0x5b,
7630 + 0x7b, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7631 + 0xc7, 0x5e, 0x22, 0x36, 0x21, 0x3a, 0x99, 0x48,
7632 + 0xa2, 0xa8, 0xb7, 0xc1, 0xb8, 0x68, 0x68, 0xbc,
7633 + 0x68, 0x6e, 0xb5, 0xb4, 0xb4, 0xab, 0xb5, 0xa1,
7634 + 0xb0, 0x4f, 0x3f, 0xd3, 0x7b, 0x7b, 0x85, 0x80,
7635 + 0xbe, 0x36, 0x36, 0x36, 0x21, 0xd4, 0x7e, 0x7b,
7636 + 0x64, 0x64, 0xd5, 0x35, 0x24, 0x21, 0x20, 0x20,
7637 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7638 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
7639 + 0x26, 0x31, 0xd6, 0x5b, 0x64, 0xc3, 0xc3, 0xcb,
7640 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7641 + 0xc4, 0x66, 0xd7, 0x36, 0x36, 0x36, 0x2c, 0x4b,
7642 + 0xd8, 0xd9, 0xb3, 0xa8, 0xbd, 0xbd, 0xbd, 0xbd,
7643 + 0xa9, 0xab, 0xb3, 0xa5, 0xa2, 0x9f, 0xa2, 0xa1,
7644 + 0x6a, 0x9a, 0x3f, 0xda, 0x76, 0x76, 0x7a, 0x63,
7645 + 0xdb, 0xdc, 0x86, 0xdc, 0xdd, 0x90, 0x5b, 0x64,
7646 + 0xc3, 0xc3, 0xde, 0x2d, 0x27, 0x23, 0x21, 0x20,
7647 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7648 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7649 + 0x26, 0x2d, 0x91, 0x5b, 0x64, 0xc4, 0xc4, 0xc4,
7650 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7651 + 0xc4, 0xc7, 0x83, 0xce, 0x36, 0x36, 0x36, 0x30,
7652 + 0xb1, 0xd9, 0x48, 0xa1, 0xb2, 0xb0, 0xb0, 0xb3,
7653 + 0xa2, 0x48, 0xa7, 0xbd, 0xa9, 0xa2, 0x48, 0x9f,
7654 + 0xaa, 0x9a, 0x3f, 0xb1, 0x5b, 0x7b, 0xdf, 0x85,
7655 + 0x7e, 0x90, 0x63, 0x90, 0x85, 0x5b, 0xc3, 0xc4,
7656 + 0xc4, 0xcb, 0x5d, 0xd5, 0x39, 0x26, 0x23, 0x21,
7657 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7658 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
7659 + 0x26, 0x2d, 0xe0, 0xdf, 0x64, 0xc4, 0xc4, 0xc4,
7660 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7661 + 0xc4, 0xc4, 0xc7, 0x88, 0x36, 0x36, 0x36, 0x36,
7662 + 0x2d, 0x9b, 0x48, 0xb9, 0xaf, 0xa2, 0xa2, 0xb9,
7663 + 0xa8, 0x9f, 0x48, 0xa7, 0xb7, 0xd9, 0x48, 0x48,
7664 + 0x9b, 0x45, 0x3f, 0xe1, 0x6d, 0x7b, 0xca, 0xdf,
7665 + 0x7a, 0x8b, 0x8b, 0x7a, 0x5b, 0x64, 0xc4, 0xc4,
7666 + 0xc4, 0xc4, 0xc3, 0xe2, 0x37, 0x35, 0x26, 0x23,
7667 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7668 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
7669 + 0x26, 0x2e, 0xe0, 0x7a, 0x7b, 0xc4, 0xc4, 0xc4,
7670 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7671 + 0xc4, 0xc4, 0xc7, 0x72, 0x73, 0x36, 0x36, 0x36,
7672 + 0x24, 0x52, 0x48, 0xa3, 0xaf, 0x9f, 0x48, 0xb6,
7673 + 0xaf, 0xa2, 0x48, 0x9f, 0xe3, 0xd8, 0x48, 0x48,
7674 + 0x48, 0x46, 0x42, 0xd6, 0x7a, 0x7b, 0x64, 0x7b,
7675 + 0x76, 0x5b, 0x5b, 0x76, 0x7b, 0xc3, 0xc4, 0xc4,
7676 + 0xc4, 0xc4, 0xcb, 0x64, 0xe2, 0x4d, 0x2c, 0x27,
7677 + 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7678 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7679 + 0x25, 0x31, 0xe4, 0x8b, 0x7b, 0xc4, 0xc4, 0xc4,
7680 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7681 + 0xc4, 0xc4, 0xc4, 0xc7, 0x89, 0xbe, 0x36, 0x36,
7682 + 0x32, 0x47, 0x48, 0x4f, 0xa0, 0x48, 0x48, 0xe3,
7683 + 0x92, 0x9f, 0x48, 0x9f, 0x48, 0x48, 0x48, 0x48,
7684 + 0x48, 0x4b, 0x2f, 0x8f, 0x7a, 0x7b, 0xc3, 0xcb,
7685 + 0xc3, 0x64, 0x64, 0xc3, 0xc3, 0xcb, 0xc4, 0xc4,
7686 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x5d, 0xe5, 0x2c,
7687 + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7688 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7689 + 0x25, 0x31, 0xe4, 0x85, 0x7b, 0xc4, 0xc4, 0xc4,
7690 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7691 + 0xc4, 0xc4, 0xc4, 0xc4, 0x66, 0x57, 0x27, 0x4d,
7692 + 0x4b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7693 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7694 + 0x99, 0x34, 0xbe, 0xdb, 0x7a, 0x7b, 0xc3, 0xc4,
7695 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7696 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xe4,
7697 + 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7698 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
7699 + 0x26, 0x2d, 0xe4, 0x85, 0x7b, 0xcb, 0xc4, 0xc4,
7700 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7701 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc7, 0x5f, 0x92, 0x48,
7702 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7703 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x44,
7704 + 0x35, 0x36, 0xce, 0xdd, 0x7a, 0x7b, 0xcb, 0xc4,
7705 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7706 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0xc3, 0xe1,
7707 + 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7708 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
7709 + 0x30, 0x2f, 0xd6, 0x8b, 0x7b, 0xcb, 0xc4, 0xc4,
7710 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7711 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x66, 0x89, 0x45,
7712 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7713 + 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x4e, 0x25,
7714 + 0x36, 0x36, 0x61, 0xdb, 0x6d, 0x64, 0xcb, 0xc4,
7715 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7716 + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x7b, 0xdf, 0xe5,
7717 + 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7718 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
7719 + 0x33, 0xe6, 0x63, 0xdf, 0xc3, 0xc4, 0xc4, 0xc4,
7720 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7721 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x72, 0x81, 0xe7,
7722 + 0x46, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
7723 + 0x48, 0x48, 0x48, 0x48, 0x3f, 0x2c, 0x36, 0x36,
7724 + 0x36, 0x36, 0xe8, 0x8f, 0x6d, 0x64, 0xcb, 0xc4,
7725 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7726 + 0xc4, 0xc4, 0xc4, 0xc3, 0xca, 0x8b, 0xcf, 0x2c,
7727 + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7728 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
7729 + 0x35, 0x96, 0x75, 0xca, 0xc3, 0xcb, 0xc4, 0xc4,
7730 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7731 + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x7b, 0x81, 0xdb,
7732 + 0x73, 0x3b, 0x44, 0x9b, 0x48, 0x48, 0x48, 0x9b,
7733 + 0x99, 0x43, 0x94, 0x2c, 0x21, 0x36, 0x36, 0x36,
7734 + 0x36, 0x36, 0x73, 0xdb, 0x7a, 0x7b, 0xc4, 0xc4,
7735 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7736 + 0xc4, 0x64, 0x76, 0x7a, 0x91, 0xd5, 0x31, 0x30,
7737 + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7738 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
7739 + 0x39, 0x97, 0x75, 0xdf, 0x7b, 0x64, 0xc3, 0xc3,
7740 + 0xcb, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
7741 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x7b, 0x7a, 0xe9,
7742 + 0xea, 0x36, 0x21, 0x26, 0x2b, 0x39, 0x33, 0x30,
7743 + 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7744 + 0x36, 0x21, 0xea, 0xdd, 0x8b, 0x7b, 0xc4, 0xc4,
7745 + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x64, 0x64,
7746 + 0x76, 0x85, 0xe0, 0xd5, 0x34, 0x2b, 0x27, 0x28,
7747 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7748 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
7749 + 0x33, 0xeb, 0x63, 0x7e, 0x7a, 0x6d, 0xdf, 0x5b,
7750 + 0x76, 0x7b, 0x64, 0x64, 0xc3, 0xcb, 0xc4, 0xc4,
7751 + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x76, 0x85, 0xdb,
7752 + 0x79, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7753 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7754 + 0x36, 0x21, 0xec, 0xdd, 0x75, 0x76, 0xc3, 0xc4,
7755 + 0xc4, 0xc4, 0xcb, 0xc3, 0x64, 0x76, 0xdf, 0x8b,
7756 + 0xd6, 0xd5, 0x2f, 0x35, 0x30, 0x24, 0x22, 0x21,
7757 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7758 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
7759 + 0x27, 0x31, 0xed, 0xeb, 0xdd, 0x74, 0x63, 0x90,
7760 + 0x7e, 0x75, 0x8b, 0x6d, 0xdf, 0x76, 0x64, 0xc3,
7761 + 0xcb, 0xcb, 0xcb, 0xcb, 0x64, 0x7a, 0x84, 0xee,
7762 + 0x79, 0xbe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7763 + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
7764 + 0x36, 0x21, 0xea, 0xee, 0x63, 0x6d, 0x7b, 0x64,
7765 + 0xcb, 0xc3, 0x64, 0x7b, 0xdf, 0x75, 0x63, 0x96,
7766 + 0x38, 0x39, 0x2a, 0x24, 0x23, 0x21, 0x20, 0x20,
7767 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7768 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7769 + 0x28, 0x27, 0x35, 0x2d, 0x41, 0xd5, 0xe7, 0x8f,
7770 + 0xdb, 0xdd, 0xe9, 0x74, 0x84, 0x90, 0x85, 0x6d,
7771 + 0x5b, 0x7b, 0x7b, 0xca, 0x6d, 0x90, 0xdb, 0xef,
7772 + 0xec, 0x22, 0x36, 0x36, 0x28, 0x30, 0x30, 0x30,
7773 + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x25, 0x36,
7774 + 0x36, 0x21, 0xd4, 0x80, 0xe9, 0x7e, 0x6d, 0x76,
7775 + 0xca, 0x76, 0x6d, 0x85, 0x63, 0xdb, 0xd5, 0x34,
7776 + 0x33, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20,
7777 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7778 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7779 + 0x21, 0x23, 0x24, 0x27, 0x2a, 0x35, 0x2e, 0x2f,
7780 + 0x41, 0xf0, 0xf1, 0x6c, 0x80, 0xee, 0xdb, 0x74,
7781 + 0x84, 0x90, 0x75, 0x7e, 0x74, 0x8f, 0xef, 0x79,
7782 + 0xe8, 0x2b, 0x9d, 0x41, 0x2f, 0x34, 0x2d, 0x2d,
7783 + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x34, 0x2f, 0x38,
7784 + 0x4d, 0x37, 0xf2, 0xf3, 0x8f, 0x74, 0x63, 0x7e,
7785 + 0x75, 0x7e, 0x63, 0xe9, 0x88, 0xe6, 0x31, 0x2a,
7786 + 0x24, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7787 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7788 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7789 + 0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26, 0x30,
7790 + 0x33, 0x39, 0x2e, 0x51, 0x41, 0xd2, 0x6c, 0xf3,
7791 + 0x80, 0xee, 0xee, 0xee, 0xf4, 0xf3, 0xd7, 0xf5,
7792 + 0x41, 0x34, 0x35, 0x32, 0x30, 0x27, 0x27, 0x27,
7793 + 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x2a,
7794 + 0x2b, 0x34, 0xf6, 0xec, 0xf7, 0x8f, 0xdd, 0xe9,
7795 + 0xe9, 0xdd, 0xee, 0x6c, 0x41, 0x39, 0x27, 0x28,
7796 + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7797 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7798 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7799 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22,
7800 + 0x28, 0x24, 0x26, 0x2a, 0x33, 0x2c, 0x2f, 0x41,
7801 + 0xf8, 0xd7, 0x79, 0x79, 0x79, 0xec, 0xf9, 0x51,
7802 + 0x39, 0x30, 0x24, 0x23, 0x22, 0x22, 0x22, 0x22,
7803 + 0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x23,
7804 + 0x24, 0x2a, 0x31, 0xfa, 0xea, 0x79, 0xf3, 0x80,
7805 + 0xf7, 0xdc, 0xfb, 0x2f, 0x35, 0x26, 0x23, 0x21,
7806 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7807 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7808 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7809 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7810 + 0x20, 0x21, 0x22, 0x23, 0x28, 0x25, 0x30, 0x2b,
7811 + 0x31, 0x2f, 0xf6, 0xfa, 0xfa, 0x2f, 0x2e, 0x33,
7812 + 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
7813 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7814 + 0x21, 0x28, 0x27, 0x35, 0x34, 0xfa, 0xfa, 0xfa,
7815 + 0xfc, 0xf6, 0x2e, 0x33, 0x25, 0x23, 0x21, 0x20,
7816 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7817 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7818 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7819 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7820 + 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x23, 0x28,
7821 + 0x26, 0x30, 0x32, 0x2b, 0x33, 0x2a, 0x26, 0x28,
7822 + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7823 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7824 + 0x20, 0x21, 0x23, 0x25, 0x30, 0x33, 0x35, 0x35,
7825 + 0x2b, 0x2a, 0x26, 0x28, 0x22, 0x20, 0x20, 0x20,
7826 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7827 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7828 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7829 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7830 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
7831 + 0x21, 0x22, 0x23, 0x28, 0x28, 0x23, 0x22, 0x21,
7832 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7833 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7834 + 0x20, 0x20, 0x20, 0x21, 0x23, 0x28, 0x24, 0x24,
7835 + 0x28, 0x23, 0x22, 0x21, 0x20, 0x20, 0x20, 0x20,
7836 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7837 + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
7840 +unsigned char linux_logo16[1];
7842 +#endif /* INCLUDE_LINUX_LOGO_DATA */
7844 +#include <linux/linux_logo.h>
7846 --- linux/include/asm-nios2nommu/local.h
7847 +++ linux/include/asm-nios2nommu/local.h
7850 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7852 + * All rights reserved.
7854 + * This program is free software; you can redistribute it and/or modify
7855 + * it under the terms of the GNU General Public License as published by
7856 + * the Free Software Foundation; either version 2 of the License, or
7857 + * (at your option) any later version.
7859 + * This program is distributed in the hope that it will be useful, but
7860 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7861 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7862 + * NON INFRINGEMENT. See the GNU General Public License for more
7865 + * You should have received a copy of the GNU General Public License
7866 + * along with this program; if not, write to the Free Software
7867 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7871 +#ifndef __NIOS2NOMMU_LOCAL_H
7872 +#define __NIOS2NOMMU_LOCAL_H
7874 +#include <asm-generic/local.h>
7876 +#endif /* __NIOS2NOMMU_LOCAL_H */
7877 --- linux/include/asm-nios2nommu/mc146818rtc.h
7878 +++ linux/include/asm-nios2nommu/mc146818rtc.h
7881 + * Machine dependent access functions for RTC registers.
7883 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7885 + * All rights reserved.
7887 + * This program is free software; you can redistribute it and/or modify
7888 + * it under the terms of the GNU General Public License as published by
7889 + * the Free Software Foundation; either version 2 of the License, or
7890 + * (at your option) any later version.
7892 + * This program is distributed in the hope that it will be useful, but
7893 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7894 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7895 + * NON INFRINGEMENT. See the GNU General Public License for more
7898 + * You should have received a copy of the GNU General Public License
7899 + * along with this program; if not, write to the Free Software
7900 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7903 +#ifndef _NIOS2_MC146818RTC_H
7904 +#define _NIOS2_MC146818RTC_H
7906 +/* empty include file to satisfy the include in genrtc.c/ide-geometry.c */
7908 +#endif /* _NIOS2_MC146818RTC_H */
7909 --- linux/include/asm-nios2nommu/mman.h
7910 +++ linux/include/asm-nios2nommu/mman.h
7913 + * Copied from the m68k port.
7915 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7917 + * All rights reserved.
7919 + * This program is free software; you can redistribute it and/or modify
7920 + * it under the terms of the GNU General Public License as published by
7921 + * the Free Software Foundation; either version 2 of the License, or
7922 + * (at your option) any later version.
7924 + * This program is distributed in the hope that it will be useful, but
7925 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7926 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7927 + * NON INFRINGEMENT. See the GNU General Public License for more
7930 + * You should have received a copy of the GNU General Public License
7931 + * along with this program; if not, write to the Free Software
7932 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
7936 +#ifndef __NIOS2_MMAN_H__
7937 +#define __NIOS2_MMAN_H__
7939 +#define PROT_READ 0x1 /* page can be read */
7940 +#define PROT_WRITE 0x2 /* page can be written */
7941 +#define PROT_EXEC 0x4 /* page can be executed */
7942 +#define PROT_SEM 0x8 /* page may be used for atomic ops */
7943 +#define PROT_NONE 0x0 /* page can not be accessed */
7944 +#define PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */
7945 +#define PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */
7947 +#define MAP_SHARED 0x01 /* Share changes */
7948 +#define MAP_PRIVATE 0x02 /* Changes are private */
7949 +#define MAP_TYPE 0x0f /* Mask for type of mapping */
7950 +#define MAP_FIXED 0x10 /* Interpret addr exactly */
7951 +#define MAP_ANONYMOUS 0x20 /* don't use a file */
7953 +#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
7954 +#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
7955 +#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
7956 +#define MAP_LOCKED 0x2000 /* pages are locked */
7957 +#define MAP_NORESERVE 0x4000 /* don't check for reservations */
7958 +#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */
7959 +#define MAP_NONBLOCK 0x10000 /* do not block on IO */
7961 +#define MS_ASYNC 1 /* sync memory asynchronously */
7962 +#define MS_INVALIDATE 2 /* invalidate the caches */
7963 +#define MS_SYNC 4 /* synchronous memory sync */
7965 +#define MCL_CURRENT 1 /* lock all current mappings */
7966 +#define MCL_FUTURE 2 /* lock all future mappings */
7968 +#define MADV_NORMAL 0x0 /* default page-in behavior */
7969 +#define MADV_RANDOM 0x1 /* page-in minimum required */
7970 +#define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */
7971 +#define MADV_WILLNEED 0x3 /* pre-fault pages */
7972 +#define MADV_DONTNEED 0x4 /* discard these pages */
7974 +/* compatibility flags */
7975 +#define MAP_ANON MAP_ANONYMOUS
7978 +#endif /* __NIOS2_MMAN_H__ */
7980 --- linux/include/asm-nios2nommu/mmu.h
7981 +++ linux/include/asm-nios2nommu/mmu.h
7985 + * Taken from the m68knommu.
7987 + * Copyright (C) 2004, Microtronix Datacom Ltd.
7989 + * All rights reserved.
7991 + * This program is free software; you can redistribute it and/or modify
7992 + * it under the terms of the GNU General Public License as published by
7993 + * the Free Software Foundation; either version 2 of the License, or
7994 + * (at your option) any later version.
7996 + * This program is distributed in the hope that it will be useful, but
7997 + * WITHOUT ANY WARRANTY; without even the implied warranty of
7998 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
7999 + * NON INFRINGEMENT. See the GNU General Public License for more
8002 + * You should have received a copy of the GNU General Public License
8003 + * along with this program; if not, write to the Free Software
8004 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8008 +#ifndef __NIOS2NOMMU_MMU_H
8009 +#define __NIOS2NOMMU_MMU_H
8011 +/* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
8013 +struct mm_rblock_struct {
8019 +struct mm_tblock_struct {
8020 + struct mm_rblock_struct *rblock;
8021 + struct mm_tblock_struct *next;
8025 + struct mm_tblock_struct tblock;
8026 + unsigned long end_brk;
8029 +#endif /* __NIOS2NOMMU_MMU_H */
8030 --- linux/include/asm-nios2nommu/mmu_context.h
8031 +++ linux/include/asm-nios2nommu/mmu_context.h
8035 + * Taken from the m68knommu.
8037 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8039 + * All rights reserved.
8041 + * This program is free software; you can redistribute it and/or modify
8042 + * it under the terms of the GNU General Public License as published by
8043 + * the Free Software Foundation; either version 2 of the License, or
8044 + * (at your option) any later version.
8046 + * This program is distributed in the hope that it will be useful, but
8047 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8048 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8049 + * NON INFRINGEMENT. See the GNU General Public License for more
8052 + * You should have received a copy of the GNU General Public License
8053 + * along with this program; if not, write to the Free Software
8054 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8058 +#ifndef __NIOS2NOMMU_MMU_CONTEXT_H
8059 +#define __NIOS2NOMMU_MMU_CONTEXT_H
8061 +// #include <linux/config.h>
8062 +#include <asm/setup.h>
8063 +#include <asm/page.h>
8064 +#include <asm/pgalloc.h>
8066 +static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
8071 +init_new_context(struct task_struct *tsk, struct mm_struct *mm)
8073 + // mm->context = virt_to_phys(mm->pgd);
8077 +#define destroy_context(mm) do { } while(0)
8079 +static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk)
8083 +#define deactivate_mm(tsk,mm) do { } while (0)
8085 +extern inline void activate_mm(struct mm_struct *prev_mm,
8086 + struct mm_struct *next_mm)
8091 --- linux/include/asm-nios2nommu/module.h
8092 +++ linux/include/asm-nios2nommu/module.h
8094 +#ifndef _NIOS2_MODULE_H
8095 +#define _NIOS2_MODULE_H
8097 +/*--------------------------------------------------------------------
8099 + * include/asm-nios2nommu/module.h
8101 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8103 + * Copyright (C) 2004 Microtronix Datacom Ltd
8105 + * This program is free software; you can redistribute it and/or modify
8106 + * it under the terms of the GNU General Public License as published by
8107 + * the Free Software Foundation; either version 2 of the License, or
8108 + * (at your option) any later version.
8110 + * This program is distributed in the hope that it will be useful,
8111 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8112 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8113 + * GNU General Public License for more details.
8116 + * Jan/20/2004 dgt NiosII
8118 + ---------------------------------------------------------------------*/
8121 +struct mod_arch_specific
8125 +#define Elf_Shdr Elf32_Shdr
8126 +#define Elf_Sym Elf32_Sym
8127 +#define Elf_Ehdr Elf32_Ehdr
8129 +#endif /* _NIOS_MODULE_H */
8130 --- linux/include/asm-nios2nommu/msgbuf.h
8131 +++ linux/include/asm-nios2nommu/msgbuf.h
8134 + * Taken from the m68k.
8136 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8138 + * All rights reserved.
8140 + * This program is free software; you can redistribute it and/or modify
8141 + * it under the terms of the GNU General Public License as published by
8142 + * the Free Software Foundation; either version 2 of the License, or
8143 + * (at your option) any later version.
8145 + * This program is distributed in the hope that it will be useful, but
8146 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8147 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8148 + * NON INFRINGEMENT. See the GNU General Public License for more
8151 + * You should have received a copy of the GNU General Public License
8152 + * along with this program; if not, write to the Free Software
8153 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8157 +#ifndef _NIOS2_MSGBUF_H
8158 +#define _NIOS2_MSGBUF_H
8161 + * The msqid64_ds structure for nios2 architecture.
8162 + * Note extra padding because this structure is passed back and forth
8163 + * between kernel and user space.
8165 + * Pad space is left for:
8166 + * - 64-bit time_t to solve y2038 problem
8167 + * - 2 miscellaneous 32-bit values
8170 +struct msqid64_ds {
8171 + struct ipc64_perm msg_perm;
8172 + __kernel_time_t msg_stime; /* last msgsnd time */
8173 + unsigned long __unused1;
8174 + __kernel_time_t msg_rtime; /* last msgrcv time */
8175 + unsigned long __unused2;
8176 + __kernel_time_t msg_ctime; /* last change time */
8177 + unsigned long __unused3;
8178 + unsigned long msg_cbytes; /* current number of bytes on queue */
8179 + unsigned long msg_qnum; /* number of messages in queue */
8180 + unsigned long msg_qbytes; /* max number of bytes on queue */
8181 + __kernel_pid_t msg_lspid; /* pid of last msgsnd */
8182 + __kernel_pid_t msg_lrpid; /* last receive pid */
8183 + unsigned long __unused4;
8184 + unsigned long __unused5;
8187 +#endif /* _NIOS2_MSGBUF_H */
8189 --- linux/include/asm-nios2nommu/namei.h
8190 +++ linux/include/asm-nios2nommu/namei.h
8193 + * linux/include/asm-nios/namei.h
8194 + * Moved from m68k version
8195 + * Included from linux/fs/namei.c
8197 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8198 + * All rights reserved.
8200 + * This program is free software; you can redistribute it and/or modify
8201 + * it under the terms of the GNU General Public License as published by
8202 + * the Free Software Foundation; either version 2 of the License, or
8203 + * (at your option) any later version.
8205 + * This program is distributed in the hope that it will be useful, but
8206 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8207 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8208 + * NON INFRINGEMENT. See the GNU General Public License for more
8211 + * You should have received a copy of the GNU General Public License
8212 + * along with this program; if not, write to the Free Software
8213 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8217 +#ifndef __NIOS2_NAMEI_H
8218 +#define __NIOS2_NAMEI_H
8220 +/* This dummy routine maybe changed to something useful
8221 + * for /usr/gnemul/ emulation stuff.
8222 + * Look at asm-sparc/namei.h for details.
8225 +#define __emul_prefix() NULL
8228 --- linux/include/asm-nios2nommu/ndma.h
8229 +++ linux/include/asm-nios2nommu/ndma.h
8232 + #define __NDMA_H__
8234 + #ifndef __ASSEMBLY__
8237 +typedef volatile struct
8239 + int np_dmastatus; // status register
8240 + int np_dmareadaddress; // read address
8241 + int np_dmawriteaddress; // write address
8242 + int np_dmalength; // length in bytes
8243 + int np_dmareserved1; // reserved
8244 + int np_dmareserved2; // reserved
8245 + int np_dmacontrol; // control register
8246 + int np_dmareserved3; // control register alternate
8249 +// DMA Register Bits
8252 + np_dmacontrol_byte_bit = 0, // Byte transaction
8253 + np_dmacontrol_hw_bit = 1, // Half-word transaction
8254 + np_dmacontrol_word_bit = 2, // Word transaction
8255 + np_dmacontrol_go_bit = 3, // enable execution
8256 + np_dmacontrol_i_en_bit = 4, // enable interrupt
8257 + np_dmacontrol_reen_bit = 5, // Enable read end-of-packet
8258 + np_dmacontrol_ween_bit = 6, // Enable write end-of-packet
8259 + np_dmacontrol_leen_bit = 7, // Enable length=0 transaction end
8260 + np_dmacontrol_rcon_bit = 8, // Read from a fixed address
8261 + np_dmacontrol_wcon_bit = 9, // Write to a fixed address
8262 + np_dmacontrol_doubleword_bit = 10, // Double-word transaction
8263 + np_dmacontrol_quadword_bit = 11, // Quad-word transaction
8265 + np_dmastatus_done_bit = 0, // 1 when done. Status write clears.
8266 + np_dmastatus_busy_bit = 1, // 1 when busy.
8267 + np_dmastatus_reop_bit = 2, // read-eop received
8268 + np_dmastatus_weop_bit = 3, // write-eop received
8269 + np_dmastatus_len_bit = 4, // requested length transacted
8271 + np_dmacontrol_byte_mask = (1 << 0), // Byte transaction
8272 + np_dmacontrol_hw_mask = (1 << 1), // Half-word transaction
8273 + np_dmacontrol_word_mask = (1 << 2), // Word transaction
8274 + np_dmacontrol_go_mask = (1 << 3), // enable execution
8275 + np_dmacontrol_i_en_mask = (1 << 4), // enable interrupt
8276 + np_dmacontrol_reen_mask = (1 << 5), // Enable read end-of-packet
8277 + np_dmacontrol_ween_mask = (1 << 6), // Enable write end-of-packet
8278 + np_dmacontrol_leen_mask = (1 << 7), // Enable length=0 transaction end
8279 + np_dmacontrol_rcon_mask = (1 << 8), // Read from a fixed address
8280 + np_dmacontrol_wcon_mask = (1 << 9), // Write to a fixed address
8281 + np_dmacontrol_doubleword_mask = (1 << 10), // Double-word transaction
8282 + np_dmacontrol_quadword_mask = (1 << 11), // Quad-word transaction
8284 + np_dmastatus_done_mask = (1 << 0), // 1 when done. Status write clears.
8285 + np_dmastatus_busy_mask = (1 << 1), // 1 when busy.
8286 + np_dmastatus_reop_mask = (1 << 2), // read-eop received
8287 + np_dmastatus_weop_mask = (1 << 3), // write-eop received
8288 + np_dmastatus_len_mask = (1 << 4), // requested length transacted
8291 + #endif /* __ASSEMBLY__ */
8295 --- linux/include/asm-nios2nommu/nios.h
8296 +++ linux/include/asm-nios2nommu/nios.h
8301 +#include "nios2_system.h"
8305 --- linux/include/asm-nios2nommu/page.h
8306 +++ linux/include/asm-nios2nommu/page.h
8309 + * Copyright (C) 2004, Microtronix Datacom Ltd.
8311 + * All rights reserved.
8313 + * This program is free software; you can redistribute it and/or modify
8314 + * it under the terms of the GNU General Public License as published by
8315 + * the Free Software Foundation; either version 2 of the License, or
8316 + * (at your option) any later version.
8318 + * This program is distributed in the hope that it will be useful, but
8319 + * WITHOUT ANY WARRANTY; without even the implied warranty of
8320 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
8321 + * NON INFRINGEMENT. See the GNU General Public License for more
8324 + * You should have received a copy of the GNU General Public License
8325 + * along with this program; if not, write to the Free Software
8326 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8330 +#ifndef _NIOS2_PAGE_H
8331 +#define _NIOS2_PAGE_H
8333 +/* copied from m68knommu arch */
8334 +// #include <linux/config.h>
8336 +/* PAGE_SHIFT determines the page size */
8338 +#define PAGE_SHIFT (12)
8339 +#define PAGE_SIZE (1UL << PAGE_SHIFT)
8340 +#define PAGE_MASK (~(PAGE_SIZE-1))
8344 +#include <asm/setup.h>
8346 +#if PAGE_SHIFT < 13
8347 +#define THREAD_SIZE (8192)
8349 +#define THREAD_SIZE PAGE_SIZE
8352 +#ifndef __ASSEMBLY__
8354 +#define get_user_page(vaddr) __get_free_page(GFP_KERNEL)
8355 +#define free_user_page(page, addr) free_page(addr)
8357 +#define clear_page(page) memset((page), 0, PAGE_SIZE)
8358 +#define copy_page(to,from) memcpy((to), (from), PAGE_SIZE)
8360 +#define clear_user_page(page, vaddr, pg) clear_page(page)
8361 +#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
8364 + * These are used to make use of C type-checking..
8366 +typedef struct { unsigned long pte; } pte_t;
8367 +typedef struct { unsigned long pmd[16]; } pmd_t;
8368 +typedef struct { unsigned long pgd; } pgd_t;
8369 +typedef struct { unsigned long pgprot; } pgprot_t;
8371 +#define pte_val(x) ((x).pte)
8372 +#define pmd_val(x) ((&x)->pmd[0])
8373 +#define pgd_val(x) ((x).pgd)
8374 +#define pgprot_val(x) ((x).pgprot)
8376 +#define __pte(x) ((pte_t) { (x) } )
8377 +#define __pmd(x) ((pmd_t) { (x) } )
8378 +#define __pgd(x) ((pgd_t) { (x) } )
8379 +#define __pgprot(x) ((pgprot_t) { (x) } )
8381 +/* to align the pointer to the (next) page boundary */
8382 +#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
8384 +/* Pure 2^n version of get_order */
8385 +extern __inline__ int get_order(unsigned long size)
8389 + size = (size-1) >> (PAGE_SHIFT-1);
8398 +extern unsigned long memory_start;
8399 +extern unsigned long memory_end;
8401 +#endif /* !__ASSEMBLY__ */
8402 +#include <asm/nios.h>
8403 +#define PAGE_OFFSET ((int)(nasys_program_mem))
8405 +#ifndef __ASSEMBLY__
8407 +#define __pa(vaddr) virt_to_phys((void *)vaddr)
8408 +#define __va(paddr) phys_to_virt((unsigned long)paddr)
8410 +#define MAP_NR(addr) (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)
8412 +#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
8413 +#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT)
8415 +#define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT))
8416 +#define page_to_virt(page) ((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)
8417 +#define VALID_PAGE(page) ((page - mem_map) < max_mapnr)
8419 +#define pfn_to_page(pfn) virt_to_page(pfn_to_virt(pfn))
8420 +#define page_to_pfn(page) virt_to_pfn(page_to_virt(page))
8422 +#define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
8423 + ((void *)(kaddr) < (void *)memory_end))
8425 +#ifdef CONFIG_NO_KERNEL_MSG
8426 +#define BUG_PRINT()
8428 +#define BUG_PRINT() printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__)
8431 +#ifdef na_cpu_oci_core
8432 +#define BUG_PANIC() asm volatile ("break") /* drop to debugger */
8434 +// #define BUG_PANIC() while(1)
8435 +#define BUG_PANIC() panic("BUG!")
8438 +#endif /* __ASSEMBLY__ */
8440 +#endif /* __KERNEL__ */
8442 +#endif /* _NIOS2_PAGE_H */
8443 --- linux/include/asm-nios2nommu/param.h
8444 +++ linux/include/asm-nios2nommu/param.h
8446 +#ifndef _NIOS_PARAM_H
8447 +#define _NIOS_PARAM_H
8449 +/*--------------------------------------------------------------------
8451 + * include/asm-nios2nommu/param.h
8453 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8455 + * Copyright (C) 2004 Microtronix Datacom Ltd
8457 + * This program is free software; you can redistribute it and/or modify
8458 + * it under the terms of the GNU General Public License as published by
8459 + * the Free Software Foundation; either version 2 of the License, or
8460 + * (at your option) any later version.
8462 + * This program is distributed in the hope that it will be useful,
8463 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8464 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8465 + * GNU General Public License for more details.
8468 + * Jan/20/2004 dgt NiosII
8470 + ---------------------------------------------------------------------*/
8479 +#define CLOCKS_PER_SEC (USER_HZ)
8482 +#define EXEC_PAGESIZE 4096
8489 +#define NOGROUP (-1)
8492 +#define MAXHOSTNAMELEN 64 /* max length of hostname */
8495 --- linux/include/asm-nios2nommu/pci.h
8496 +++ linux/include/asm-nios2nommu/pci.h
8498 +#ifndef _ASM_NIOS2NOMMU_PCI_H
8499 +#define _ASM_NIOS2NOMMU_PCI_H
8501 +/*--------------------------------------------------------------------
8503 + * include/asm-nios2nommu/pci.h
8505 + * Derived from asm-m68k/pci_m68k.h
8506 + * - m68k specific PCI declarations, by Wout Klaren.
8508 + * Copyright (C) 2004 Microtronix Datacom Ltd
8510 + * This program is free software; you can redistribute it and/or modify
8511 + * it under the terms of the GNU General Public License as published by
8512 + * the Free Software Foundation; either version 2 of the License, or
8513 + * (at your option) any later version.
8515 + * This program is distributed in the hope that it will be useful,
8516 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8517 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8518 + * GNU General Public License for more details.
8521 + * Jan/20/2004 dgt NiosII
8523 + ---------------------------------------------------------------------*/
8526 +#include <asm/scatterlist.h>
8531 + * Structure with hardware dependent information and functions of the
8535 +struct pci_bus_info
8538 + * Resources of the PCI bus.
8541 + struct resource mem_space;
8542 + struct resource io_space;
8545 + * System dependent functions.
8548 + struct pci_ops *m68k_pci_ops;
8550 + void (*fixup)(int pci_modify);
8551 + void (*conf_device)(struct pci_dev *dev);
8554 +#define pcibios_assign_all_busses() 0
8556 +extern inline void pcibios_set_master(struct pci_dev *dev)
8558 + /* No special bus mastering setup handling */
8561 +extern inline void pcibios_penalize_isa_irq(int irq)
8563 + /* We don't do dynamic PCI IRQ allocation */
8566 +/* The PCI address space does equal the physical memory
8567 + * address space. The networking and block device layers use
8568 + * this boolean for bounce buffer decisions.
8570 +#define PCI_DMA_BUS_IS_PHYS (1)
8572 +#endif /* _ASM_NIOS2NOMMU_PCI_H */
8573 --- linux/include/asm-nios2nommu/percpu.h
8574 +++ linux/include/asm-nios2nommu/percpu.h
8576 +#ifndef __ARCH_NIOS2NOMMU_PERCPU__
8577 +#define __ARCH_NIOS2NOMMU_PERCPU__
8579 +/*--------------------------------------------------------------------
8581 + * include/asm-nios2nommu/percpu.h
8583 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8585 + * Copyright (C) 2004 Microtronix Datacom Ltd
8587 + * This program is free software; you can redistribute it and/or modify
8588 + * it under the terms of the GNU General Public License as published by
8589 + * the Free Software Foundation; either version 2 of the License, or
8590 + * (at your option) any later version.
8592 + * This program is distributed in the hope that it will be useful,
8593 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8594 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8595 + * GNU General Public License for more details.
8598 + * Jan/20/2004 dgt NiosII
8600 + ---------------------------------------------------------------------*/
8603 +#include <asm-generic/percpu.h>
8605 +#endif /* __ARCH_NIOS2NOMMU_PERCPU__ */
8606 --- linux/include/asm-nios2nommu/pgalloc.h
8607 +++ linux/include/asm-nios2nommu/pgalloc.h
8609 +#ifndef _NIOS2NOMMU_PGALLOC_H
8610 +#define _NIOS2NOMMU_PGALLOC_H
8612 +/*--------------------------------------------------------------------
8614 + * include/asm-nios2nommu/pgalloc.h
8616 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8618 + * Copyright (C) 2004 Microtronix Datacom Ltd
8620 + * This program is free software; you can redistribute it and/or modify
8621 + * it under the terms of the GNU General Public License as published by
8622 + * the Free Software Foundation; either version 2 of the License, or
8623 + * (at your option) any later version.
8625 + * This program is distributed in the hope that it will be useful,
8626 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8627 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8628 + * GNU General Public License for more details.
8631 + * Jan/20/2004 dgt NiosII
8633 + ---------------------------------------------------------------------*/
8636 +#include <asm/setup.h>
8638 +#define check_pgt_cache() do { } while (0)
8640 +#endif /* _NIOS2NOMMU_PGALLOC_H */
8641 --- linux/include/asm-nios2nommu/pgtable.h
8642 +++ linux/include/asm-nios2nommu/pgtable.h
8644 +#ifndef _NIOS_PGTABLE_H
8645 +#define _NIOS_PGTABLE_H
8647 +/*--------------------------------------------------------------------
8649 + * include/asm-nios2nommu/pgtable.h
8651 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8653 + * Copyright (C) 2004 Microtronix Datacom Ltd
8655 + * This program is free software; you can redistribute it and/or modify
8656 + * it under the terms of the GNU General Public License as published by
8657 + * the Free Software Foundation; either version 2 of the License, or
8658 + * (at your option) any later version.
8660 + * This program is distributed in the hope that it will be useful,
8661 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8662 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8663 + * GNU General Public License for more details.
8666 + * Jan/20/2004 dgt NiosII
8668 + ---------------------------------------------------------------------*/
8671 +//vic - this bit copied from m68knommu version
8672 +// #include <linux/config.h>
8673 +#include <asm/setup.h>
8674 +#include <asm/io.h>
8676 +typedef pte_t *pte_addr_t;
8678 +#define pgd_present(pgd) (1) /* pages are always present on NO_MM */
8679 +#define pgd_none(pgd) (0)
8680 +#define pgd_bad(pgd) (0)
8681 +#define pgd_clear(pgdp)
8682 +#define kern_addr_valid(addr) (1)
8683 +#define pmd_offset(a, b) ((void *)0)
8685 +#define PAGE_NONE __pgprot(0) /* these mean nothing to NO_MM */
8686 +#define PAGE_SHARED __pgprot(0) /* these mean nothing to NO_MM */
8687 +#define PAGE_COPY __pgprot(0) /* these mean nothing to NO_MM */
8688 +#define PAGE_READONLY __pgprot(0) /* these mean nothing to NO_MM */
8689 +#define PAGE_KERNEL __pgprot(0) /* these mean nothing to NO_MM */
8690 +//vic - this bit copied from m68knommu version
8692 +extern void paging_init(void);
8693 +#define swapper_pg_dir ((pgd_t *) 0)
8695 +#define __swp_type(x) (0)
8696 +#define __swp_offset(x) (0)
8697 +#define __swp_entry(typ,off) ((swp_entry_t) { ((typ) | ((off) << 7)) })
8698 +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
8699 +#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
8701 +static inline int pte_file(pte_t pte) { return 0; }
8704 + * ZERO_PAGE is a global shared page that is always zero: used
8705 + * for zero-mapped memory areas etc..
8707 +#define ZERO_PAGE(vaddr) (virt_to_page(0))
8709 +extern unsigned int kobjsize(const void *objp);
8712 + * No page table caches to initialise
8714 +#define pgtable_cache_init() do { } while (0)
8716 +extern inline void flush_cache_mm(struct mm_struct *mm)
8720 +extern inline void flush_cache_range(struct mm_struct *mm,
8721 + unsigned long start,
8722 + unsigned long end)
8726 +/* Push the page at kernel virtual address and clear the icache */
8727 +extern inline void flush_page_to_ram (unsigned long address)
8731 +/* Push n pages at kernel virtual address and clear the icache */
8732 +extern inline void flush_pages_to_ram (unsigned long address, int n)
8737 + * All 32bit addresses are effectively valid for vmalloc...
8738 + * Sort of meaningless for non-VM targets.
8740 +#define VMALLOC_START 0
8741 +#define VMALLOC_END 0xffffffff
8743 +#endif /* _NIOS_PGTABLE_H */
8744 --- linux/include/asm-nios2nommu/pio_struct.h
8745 +++ linux/include/asm-nios2nommu/pio_struct.h
8750 +typedef volatile struct
8752 + int np_piodata; // read/write, up to 32 bits
8753 + int np_piodirection; // write/readable, up to 32 bits, 1->output bit
8754 + int np_piointerruptmask; // write/readable, up to 32 bits, 1->enable interrupt
8755 + int np_pioedgecapture; // read, up to 32 bits, cleared by any write
8759 +void nr_pio_showhex(int value); // shows low byte on pio named na_seven_seg_pio
8761 --- linux/include/asm-nios2nommu/poll.h
8762 +++ linux/include/asm-nios2nommu/poll.h
8764 +#ifndef __NIOS2_POLL_H
8765 +#define __NIOS2_POLL_H
8767 +/*--------------------------------------------------------------------
8769 + * include/asm-nios2nommu/poll.h
8771 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8773 + * Copyright (C) 2004 Microtronix Datacom Ltd
8775 + * This program is free software; you can redistribute it and/or modify
8776 + * it under the terms of the GNU General Public License as published by
8777 + * the Free Software Foundation; either version 2 of the License, or
8778 + * (at your option) any later version.
8780 + * This program is distributed in the hope that it will be useful,
8781 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8782 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8783 + * GNU General Public License for more details.
8786 + * Jan/20/2004 dgt NiosII
8788 + ---------------------------------------------------------------------*/
8796 +#define POLLNVAL 32
8797 +#define POLLRDNORM 64
8798 +#define POLLWRNORM POLLOUT
8799 +#define POLLRDBAND 128
8800 +#define POLLWRBAND 256
8801 +#define POLLMSG 0x0400
8810 --- linux/include/asm-nios2nommu/posix_types.h
8811 +++ linux/include/asm-nios2nommu/posix_types.h
8813 +#ifndef __ARCH_NIOS2_POSIX_TYPES_H
8814 +#define __ARCH_NIOS2_POSIX_TYPES_H
8816 +/*--------------------------------------------------------------------
8818 + * include/asm-nios2nommu/posix_types.h
8820 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8822 + * Copyright (C) 2004 Microtronix Datacom Ltd
8824 + * This program is free software; you can redistribute it and/or modify
8825 + * it under the terms of the GNU General Public License as published by
8826 + * the Free Software Foundation; either version 2 of the License, or
8827 + * (at your option) any later version.
8829 + * This program is distributed in the hope that it will be useful,
8830 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8831 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8832 + * GNU General Public License for more details.
8835 + * Jan/20/2004 dgt NiosII
8837 + ---------------------------------------------------------------------*/
8841 + * This file is generally used by user-level software, so you need to
8842 + * be a little careful about namespace pollution etc. Also, we cannot
8843 + * assume GCC is being used.
8846 +typedef unsigned long __kernel_ino_t;
8847 +typedef unsigned short __kernel_mode_t;
8848 +typedef unsigned short __kernel_nlink_t;
8849 +typedef long __kernel_off_t;
8850 +typedef int __kernel_pid_t;
8851 +typedef unsigned short __kernel_ipc_pid_t;
8852 +typedef unsigned short __kernel_uid_t;
8853 +typedef unsigned short __kernel_gid_t;
8854 +typedef unsigned int __kernel_size_t;
8855 +typedef int __kernel_ssize_t;
8856 +typedef int __kernel_ptrdiff_t;
8857 +typedef long __kernel_time_t;
8858 +typedef long __kernel_suseconds_t;
8859 +typedef long __kernel_clock_t;
8860 +typedef int __kernel_timer_t;
8861 +typedef int __kernel_clockid_t;
8862 +typedef int __kernel_daddr_t;
8863 +typedef char * __kernel_caddr_t;
8864 +typedef unsigned short __kernel_uid16_t;
8865 +typedef unsigned short __kernel_gid16_t;
8866 +typedef unsigned int __kernel_uid32_t;
8867 +typedef unsigned int __kernel_gid32_t;
8869 +typedef unsigned short __kernel_old_uid_t;
8870 +typedef unsigned short __kernel_old_gid_t;
8871 +typedef unsigned short __kernel_old_dev_t;
8874 +typedef long long __kernel_loff_t;
8878 +#if defined(__KERNEL__) || defined(__USE_ALL)
8880 +#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
8882 +#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
8885 +#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
8888 +#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
8891 +#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
8894 +#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
8897 +#define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp)))
8899 +#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
8902 --- linux/include/asm-nios2nommu/preem_latency.h
8903 +++ linux/include/asm-nios2nommu/preem_latency.h
8905 +#ifndef _ASM_PREEM_LATENCY_H
8906 +#define _ASM_PREEM_LATENCY_H
8908 +/*--------------------------------------------------------------------
8910 + * include/asm-nios2nommu/preem_latency.h
8912 + * timing support for preempt-stats patch
8914 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
8916 + * Copyright (C) 2004 Microtronix Datacom Ltd
8918 + * This program is free software; you can redistribute it and/or modify
8919 + * it under the terms of the GNU General Public License as published by
8920 + * the Free Software Foundation; either version 2 of the License, or
8921 + * (at your option) any later version.
8923 + * This program is distributed in the hope that it will be useful,
8924 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8925 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8926 + * GNU General Public License for more details.
8929 + * Jan/20/2004 dgt NiosII
8931 + ---------------------------------------------------------------------*/
8934 +#include <asm/nios.h>
8936 +#define readclock(low) \
8938 + *(volatile unsigned long *)na_Counter_64_bit=1; \
8939 + low=*(volatile unsigned long *)na_Counter_64_bit; \
8941 +#define readclock_init()
8943 +#endif /* _ASM_PREEM_LATENCY_H */
8944 --- linux/include/asm-nios2nommu/processor.h
8945 +++ linux/include/asm-nios2nommu/processor.h
8947 +/*--------------------------------------------------------------------
8949 + * include/asm-nios2nommu/processor.h
8951 + * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu)
8952 + * Copyright (C) 2001 Ken Hill (khill@microtronix.com)
8953 + * Vic Phillips (vic@microtronix.com)
8954 + * Copyright (C) 2004 Microtronix Datacom Ltd
8957 + * include/asm-sparc/processor.h
8959 + * This program is free software; you can redistribute it and/or modify
8960 + * it under the terms of the GNU General Public License as published by
8961 + * the Free Software Foundation; either version 2 of the License, or
8962 + * (at your option) any later version.
8964 + * This program is distributed in the hope that it will be useful,
8965 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8966 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8967 + * GNU General Public License for more details.
8970 + * Jan/20/2004 dgt NiosII
8971 + * Nov/02/2003 dgt Fix task_size
8973 + ---------------------------------------------------------------------*/
8975 +#ifndef __ASM_NIOS_PROCESSOR_H
8976 +#define __ASM_NIOS_PROCESSOR_H
8978 +#define NIOS2_FLAG_KTHREAD 0x00000001 /* task is a kernel thread */
8979 +#define NIOS2_FLAG_COPROC 0x00000002 /* Thread used coprocess */
8980 +#define NIOS2_FLAG_DEBUG 0x00000004 /* task is being debugged */
8982 +#define NIOS2_OP_NOP 0x1883a
8983 +#define NIOS2_OP_BREAK 0x3da03a
8985 +#ifndef __ASSEMBLY__
8988 + * Default implementation of macro that returns current
8989 + * instruction pointer ("program counter").
8991 +#define current_text_addr() ({ __label__ _l; _l: &&_l;})
8993 +#include <linux/a.out.h>
8994 +#include <linux/string.h>
8996 +#include <asm/ptrace.h>
8997 +#include <asm/signal.h>
8998 +#include <asm/segment.h>
8999 +#include <asm/current.h>
9000 +#include <asm/system.h> /* for get_hi_limit */
9006 +#define EISA_bus__is_a_macro /* for versions in ksyms.c */
9008 +#define MCA_bus__is_a_macro /* for versions in ksyms.c */
9011 + * The nios has no problems with write protection
9013 +#define wp_works_ok 1
9014 +#define wp_works_ok__is_a_macro /* for versions in ksyms.c */
9016 +/* Whee, this is STACK_TOP and the lowest kernel address too... */
9018 +#define KERNBASE 0x00000000 /* First address the kernel will eventually be */
9019 +#define TASK_SIZE (KERNBASE)
9020 +#define MAX_USER_ADDR TASK_SIZE
9021 +#define MMAP_SEARCH_START (TASK_SIZE/3)
9024 +#define TASK_SIZE ((unsigned int) nasys_program_mem_end) //...this is better...
9027 + * This decides where the kernel will search for a free chunk of vm
9028 + * space during mmap's. We won't be using it
9030 +#define TASK_UNMAPPED_BASE 0
9032 +/* The Nios processor specific thread struct. */
9033 +struct thread_struct {
9034 + struct pt_regs *kregs;
9036 + /* For signal handling */
9037 + unsigned long sig_address;
9038 + unsigned long sig_desc;
9040 + /* Context switch saved kernel state. */
9041 + unsigned long ksp;
9042 + unsigned long kpsr;
9043 + unsigned long kesr;
9045 + /* Flags are defined below */
9047 + unsigned long flags;
9049 + struct exec core_exec; /* just what it says. */
9052 +#define INIT_MMAP { &init_mm, (0), (0), \
9053 + __pgprot(0x0) , VM_READ | VM_WRITE | VM_EXEC }
9055 +#define INIT_THREAD { \
9057 + .sig_address = 0, \
9062 + .flags = NIOS2_FLAG_KTHREAD, \
9063 + .current_ds = __KERNEL_DS, \
9064 + .core_exec = INIT_EXEC \
9067 +/* Free all resources held by a thread. */
9068 +extern void release_thread(struct task_struct *);
9070 +extern unsigned long thread_saved_pc(struct task_struct *t);
9072 +extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp);
9074 +/* Prepare to copy thread state - unlazy all lazy status */
9075 +#define prepare_to_copy(tsk) do { } while (0)
9077 +extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
9079 +unsigned long get_wchan(struct task_struct *p);
9081 +#define KSTK_EIP(tsk) ((tsk)->thread.kregs->ea)
9082 +#define KSTK_ESP(tsk) ((tsk)->thread.kregs->sp)
9085 +/* Allocation and freeing of basic task resources. */
9087 +//;dgt2;#define alloc_task_struct() ((struct task_struct *) xx..see..linux..fork..xx __get_free_pages(GFP_KERNEL,1))
9088 +//;dgt2;#define get_task_struct(tsk) xx..see..linux..sched.h...atomic_inc(&mem_map[MAP_NR(tsk)].count)
9092 +#define cpu_relax() do { } while (0)
9093 +#endif /* __ASSEMBLY__ */
9094 +#endif /* __ASM_NIOS_PROCESSOR_H */
9095 --- linux/include/asm-nios2nommu/ptrace.h
9096 +++ linux/include/asm-nios2nommu/ptrace.h
9099 + * Taken from the m68k port.
9101 + * Copyright (C) 2004, Microtronix Datacom Ltd.
9103 + * All rights reserved.
9105 + * This program is free software; you can redistribute it and/or modify
9106 + * it under the terms of the GNU General Public License as published by
9107 + * the Free Software Foundation; either version 2 of the License, or
9108 + * (at your option) any later version.
9110 + * This program is distributed in the hope that it will be useful, but
9111 + * WITHOUT ANY WARRANTY; without even the implied warranty of
9112 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
9113 + * NON INFRINGEMENT. See the GNU General Public License for more
9116 + * You should have received a copy of the GNU General Public License
9117 + * along with this program; if not, write to the Free Software
9118 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
9121 +#ifndef _NIOS2NOMMU_PTRACE_H
9122 +#define _NIOS2NOMMU_PTRACE_H
9124 +#ifndef __ASSEMBLY__
9158 +#define PTR_STATUS 32
9159 +#define PTR_ESTATUS 33
9160 +#define PTR_BSTATUS 34
9161 +#define PTR_IENABLE 35
9162 +#define PTR_IPENDING 36
9164 +/* this struct defines the way the registers are stored on the
9165 + stack during a system call.
9167 + There is a fake_regs in setup.c that has to match pt_regs.*/
9172 + unsigned long r10;
9173 + unsigned long r11;
9174 + unsigned long r12;
9175 + unsigned long r13;
9176 + unsigned long r14;
9177 + unsigned long r15;
9185 + unsigned long orig_r2;
9190 + unsigned long estatus;
9191 + unsigned long status_extension;
9197 + * This is the extended stack used by signal handlers and the context
9198 + * switcher: it's pushed after the normal "struct pt_regs".
9200 +struct switch_stack {
9201 + unsigned long r16;
9202 + unsigned long r17;
9203 + unsigned long r18;
9204 + unsigned long r19;
9205 + unsigned long r20;
9206 + unsigned long r21;
9207 + unsigned long r22;
9208 + unsigned long r23;
9214 +/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
9215 +#define PTRACE_GETREGS 12
9216 +#define PTRACE_SETREGS 13
9218 +#define PTRACE_GETFPREGS 14
9219 +#define PTRACE_SETFPREGS 15
9225 +#define PS_S (0x00000001)
9228 +#define PS_T (0x00000002)
9231 +#define user_mode(regs) (!((regs)->status_extension & PS_S))
9232 +#define instruction_pointer(regs) ((regs)->ra)
9233 +#define profile_pc(regs) instruction_pointer(regs)
9234 +extern void show_regs(struct pt_regs *);
9236 +#endif /* __KERNEL__ */
9237 +#endif /* __ASSEMBLY__ */
9238 +#endif /* _NIOS2NOMMU_PTRACE_H */
9239 --- linux/include/asm-nios2nommu/resource.h
9240 +++ linux/include/asm-nios2nommu/resource.h
9242 +#ifndef _NIOS2NOMMU_RESOURCE_H
9243 +#define _NIOS2NOMMU_RESOURCE_H
9245 +/*--------------------------------------------------------------------
9249 + * include/asm-nios2nommu/resource.h
9251 + * Derived from M68knommu
9253 + * Copyright (C) 2004 Microtronix Datacom Ltd
9255 + * This program is free software; you can redistribute it and/or modify
9256 + * it under the terms of the GNU General Public License as published by
9257 + * the Free Software Foundation; either version 2 of the License, or
9258 + * (at your option) any later version.
9260 + * This program is distributed in the hope that it will be useful,
9261 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9262 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9263 + * GNU General Public License for more details.
9266 + * Jan/20/2004 dgt NiosII
9268 + ---------------------------------------------------------------------*/
9271 +#define RLIMIT_CPU 0 /* CPU time in ms */
9272 +#define RLIMIT_FSIZE 1 /* Maximum filesize */
9273 +#define RLIMIT_DATA 2 /* max data size */
9274 +#define RLIMIT_STACK 3 /* max stack size */
9275 +#define RLIMIT_CORE 4 /* max core file size */
9276 +#define RLIMIT_RSS 5 /* max resident set size */
9277 +#define RLIMIT_NPROC 6 /* max number of processes */
9278 +#define RLIMIT_NOFILE 7 /* max number of open files */
9279 +#define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */
9280 +#define RLIMIT_AS 9 /* address space limit */
9281 +#define RLIMIT_LOCKS 10 /* maximum file locks held */
9282 +#define RLIMIT_SIGPENDING 11 /* max number of pending signals */
9283 +#define RLIMIT_MSGQUEUE 12 /* maximum bytes in POSIX mqueues */
9285 +#define RLIM_NLIMITS 13
9288 + * SuS says limits have to be unsigned.
9289 + * Which makes a ton more sense anyway.
9291 +#define RLIM_INFINITY (~0UL)
9295 +#define INIT_RLIMITS \
9297 + { RLIM_INFINITY, RLIM_INFINITY }, \
9298 + { RLIM_INFINITY, RLIM_INFINITY }, \
9299 + { RLIM_INFINITY, RLIM_INFINITY }, \
9300 + { _STK_LIM, RLIM_INFINITY }, \
9301 + { 0, RLIM_INFINITY }, \
9302 + { RLIM_INFINITY, RLIM_INFINITY }, \
9304 + { INR_OPEN, INR_OPEN }, \
9305 + { MLOCK_LIMIT, MLOCK_LIMIT }, \
9306 + { RLIM_INFINITY, RLIM_INFINITY }, \
9307 + { RLIM_INFINITY, RLIM_INFINITY }, \
9308 + { MAX_SIGPENDING, MAX_SIGPENDING }, \
9309 + { MQ_BYTES_MAX, MQ_BYTES_MAX }, \
9312 +#endif /* __KERNEL__ */
9314 +#endif /* _NIOS2NOMMU_RESOURCE_H */
9315 --- linux/include/asm-nios2nommu/rmap.h
9316 +++ linux/include/asm-nios2nommu/rmap.h
9318 +/* Do not need anything here */
9320 --- linux/include/asm-nios2nommu/scatterlist.h
9321 +++ linux/include/asm-nios2nommu/scatterlist.h
9323 +#ifndef _NIOS2NOMMU_SCATTERLIST_H
9324 +#define _NIOS2NOMMU_SCATTERLIST_H
9326 +/*--------------------------------------------------------------------
9328 + * include/asm-nios2nommu/scatterlist.h
9330 + * Derived from M68knommu
9332 + * Copyright (C) 2004 Microtronix Datacom Ltd
9334 + * This program is free software; you can redistribute it and/or modify
9335 + * it under the terms of the GNU General Public License as published by
9336 + * the Free Software Foundation; either version 2 of the License, or
9337 + * (at your option) any later version.
9339 + * This program is distributed in the hope that it will be useful,
9340 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9341 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9342 + * GNU General Public License for more details.
9345 + * Jan/20/2004 dgt NiosII
9347 + ---------------------------------------------------------------------*/
9350 +struct scatterlist {
9351 + struct page *page;
9352 + unsigned int offset;
9353 + dma_addr_t dma_address;
9354 + unsigned int length;
9357 +#define sg_dma_address(sg) ((sg)->dma_address)
9358 +#define sg_dma_len(sg) ((sg)->length)
9360 +#define ISA_DMA_THRESHOLD (0xffffffff)
9362 +#endif /* !(_NIOS2NOMMU_SCATTERLIST_H) */
9363 --- linux/include/asm-nios2nommu/sections.h
9364 +++ linux/include/asm-nios2nommu/sections.h
9366 +#ifndef _NIOS2NOMMU_SECTIONS_H
9367 +#define _NIOS2NOMMU_SECTIONS_H
9369 +/*--------------------------------------------------------------------
9371 + * include/asm-nios2nommu/sections.h
9373 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9375 + * Copyright (C) 2004 Microtronix Datacom Ltd
9377 + * This program is free software; you can redistribute it and/or modify
9378 + * it under the terms of the GNU General Public License as published by
9379 + * the Free Software Foundation; either version 2 of the License, or
9380 + * (at your option) any later version.
9382 + * This program is distributed in the hope that it will be useful,
9383 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9384 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9385 + * GNU General Public License for more details.
9388 + * Jan/20/2004 dgt NiosII
9390 + ---------------------------------------------------------------------*/
9393 +#include <asm-generic/sections.h>
9395 +#endif /* _NIOS2NOMMU_SECTIONS_H */
9396 --- linux/include/asm-nios2nommu/segment.h
9397 +++ linux/include/asm-nios2nommu/segment.h
9399 +#ifndef _NIOS2NOMMU_SEGMENT_H
9400 +#define _NIOS2NOMMU_SEGMENT_H
9402 +/*--------------------------------------------------------------------
9404 + * include/asm-nios2nommu/segment.h
9406 + * Derived from M68knommu
9408 + * Copyright (C) 2004 Microtronix Datacom Ltd
9410 + * This program is free software; you can redistribute it and/or modify
9411 + * it under the terms of the GNU General Public License as published by
9412 + * the Free Software Foundation; either version 2 of the License, or
9413 + * (at your option) any later version.
9415 + * This program is distributed in the hope that it will be useful,
9416 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9417 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9418 + * GNU General Public License for more details.
9421 + * Jan/20/2004 dgt NiosII
9423 + ---------------------------------------------------------------------*/
9426 +/* define constants */
9427 +/* Address spaces (FC0-FC2) */
9428 +#define USER_DATA (1)
9430 +#define __USER_DS (USER_DATA)
9432 +#define USER_PROGRAM (2)
9433 +#define SUPER_DATA (5)
9434 +#ifndef __KERNEL_DS
9435 +#define __KERNEL_DS (SUPER_DATA)
9437 +#define SUPER_PROGRAM (6)
9438 +#define CPU_SPACE (7)
9440 +#ifndef __ASSEMBLY__
9443 + unsigned long seg;
9446 +#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
9447 +#define USER_DS MAKE_MM_SEG(__USER_DS)
9448 +#define KERNEL_DS MAKE_MM_SEG(__KERNEL_DS)
9451 + * Get/set the SFC/DFC registers for MOVES instructions
9454 +static inline mm_segment_t get_fs(void)
9459 +static inline mm_segment_t get_ds(void)
9461 + /* return the supervisor data space code */
9465 +static inline void set_fs(mm_segment_t val)
9469 +#define segment_eq(a,b) ((a).seg == (b).seg)
9471 +#endif /* __ASSEMBLY__ */
9473 +#endif /* _NIOS2NOMMU_SEGMENT_H */
9474 --- linux/include/asm-nios2nommu/semaphore-helper.h
9475 +++ linux/include/asm-nios2nommu/semaphore-helper.h
9477 +#ifndef _NIOS2NOMMU_SEMAPHORE_HELPER_H
9478 +#define _NIOS2NOMMU_SEMAPHORE_HELPER_H
9480 +/*--------------------------------------------------------------------
9482 + * include/asm-nios2nommu/semaphore.h
9484 + * SMP- and interrupt-safe semaphores helper functions.
9486 + * Derived from M68knommu
9488 + * (C) Copyright 1996 Linus Torvalds
9489 + * m68k version by Andreas Schwab
9490 + * Copyright (C) 2004 Microtronix Datacom Ltd
9492 + * This program is free software; you can redistribute it and/or modify
9493 + * it under the terms of the GNU General Public License as published by
9494 + * the Free Software Foundation; either version 2 of the License, or
9495 + * (at your option) any later version.
9497 + * This program is distributed in the hope that it will be useful,
9498 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9499 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9500 + * GNU General Public License for more details.
9502 + * Jan/20/2004 dgt NiosII
9504 + ---------------------------------------------------------------------*/
9506 +// #include <linux/config.h>
9509 + * These two _must_ execute atomically wrt each other.
9511 +static inline void wake_one_more(struct semaphore * sem)
9513 + atomic_inc(&sem->waking);
9516 +static inline int waking_non_zero(struct semaphore *sem)
9519 + unsigned long flags;
9521 + spin_lock_irqsave(&semaphore_wake_lock, flags);
9523 + if (atomic_read(&sem->waking) > 0) {
9524 + atomic_dec(&sem->waking);
9527 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
9532 + * waking_non_zero_interruptible:
9535 + * -EINTR interrupted
9537 +static inline int waking_non_zero_interruptible(struct semaphore *sem,
9538 + struct task_struct *tsk)
9541 + unsigned long flags;
9543 + spin_lock_irqsave(&semaphore_wake_lock, flags);
9545 + if (atomic_read(&sem->waking) > 0) {
9546 + atomic_dec(&sem->waking);
9548 + } else if (signal_pending(tsk)) {
9549 + atomic_inc(&sem->count);
9552 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
9557 + * waking_non_zero_trylock:
9558 + * 1 failed to lock
9561 +static inline int waking_non_zero_trylock(struct semaphore *sem)
9564 + unsigned long flags;
9566 + spin_lock_irqsave(&semaphore_wake_lock, flags);
9568 + if (atomic_read(&sem->waking) > 0) {
9569 + atomic_dec(&sem->waking);
9572 + atomic_inc(&sem->count);
9573 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
9578 --- linux/include/asm-nios2nommu/semaphore.h
9579 +++ linux/include/asm-nios2nommu/semaphore.h
9581 +#ifndef _NIOS2NOMMU_SEMAPHORE_H
9582 +#define _NIOS2NOMMU_SEMAPHORE_H
9584 +/*--------------------------------------------------------------------
9586 + * include/asm-nios2nommu/semaphore.h
9588 + * Interrupt-safe semaphores..
9590 + * Derived from M68knommu
9592 + * (C) Copyright 1996 Linus Torvalds
9593 + * m68k version by Andreas Schwab
9594 + * Copyright (C) 2004 Microtronix Datacom Ltd
9596 + * This program is free software; you can redistribute it and/or modify
9597 + * it under the terms of the GNU General Public License as published by
9598 + * the Free Software Foundation; either version 2 of the License, or
9599 + * (at your option) any later version.
9601 + * This program is distributed in the hope that it will be useful,
9602 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9603 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9604 + * GNU General Public License for more details.
9606 + * Jan/20/2004 dgt NiosII
9608 + ---------------------------------------------------------------------*/
9610 +#define RW_LOCK_BIAS 0x01000000
9612 +#ifndef __ASSEMBLY__
9614 +#include <linux/linkage.h>
9615 +#include <linux/wait.h>
9616 +#include <linux/spinlock.h>
9617 +#include <linux/rwsem.h>
9619 +#include <asm/system.h>
9620 +#include <asm/atomic.h>
9625 + wait_queue_head_t wait;
9628 +#define __SEMAPHORE_INITIALIZER(name, n) \
9630 + .count = ATOMIC_INIT(n), \
9631 + .waking = ATOMIC_INIT(0), \
9632 + .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
9635 +#define __MUTEX_INITIALIZER(name) \
9636 + __SEMAPHORE_INITIALIZER(name,1)
9638 +#define __DECLARE_SEMAPHORE_GENERIC(name,count) \
9639 + struct semaphore name = __SEMAPHORE_INITIALIZER(name,count)
9641 +#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)
9642 +#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)
9644 +extern inline void sema_init (struct semaphore *sem, int val)
9646 + *sem = (struct semaphore)__SEMAPHORE_INITIALIZER(*sem, val);
9649 +static inline void init_MUTEX (struct semaphore *sem)
9651 + sema_init(sem, 1);
9654 +static inline void init_MUTEX_LOCKED (struct semaphore *sem)
9656 + sema_init(sem, 0);
9659 +asmlinkage void __down(struct semaphore * sem);
9660 +asmlinkage int __down_interruptible(struct semaphore * sem);
9661 +asmlinkage int __down_trylock(struct semaphore * sem);
9662 +asmlinkage void __up(struct semaphore * sem);
9664 +asmlinkage void __down_failed(void /* special register calling convention */);
9665 +asmlinkage int __down_failed_interruptible(void /* params in registers */);
9666 +asmlinkage int __down_failed_trylock(void /* params in registers */);
9667 +asmlinkage void __up_wakeup(void /* special register calling convention */);
9669 +extern spinlock_t semaphore_wake_lock;
9672 + * This is ugly, but we want the default case to fall through.
9673 + * "down_failed" is a special asm handler that calls the C
9674 + * routine that actually waits.
9676 +extern inline void down(struct semaphore * sem)
9681 + ...Nios2 has no atomic "decrement memory"....
9683 + if (atomic_dec_return(&sem->count) < 0)
9688 +extern inline int down_interruptible(struct semaphore * sem)
9696 + ...Nios2 has no atomic "decrement memory"....
9698 + if(atomic_dec_return(&sem->count) < 0)
9699 + ret = __down_interruptible(sem);
9704 +extern inline int down_trylock(struct semaphore * sem)
9707 + ...Nios2 has no atomic "decrement memory"....
9711 + if (atomic_dec_return (&sem->count) < 0)
9712 + ret = __down_trylock(sem);
9718 + * Note! This is subtle. We jump to wake people up only if
9719 + * the semaphore was negative (== somebody was waiting on it).
9720 + * The default case (no contention) will result in NO
9721 + * jumps for both down() and up().
9723 +extern inline void up(struct semaphore * sem)
9726 + ...Nios2 has no atomic "increment memory"....
9728 + if (atomic_inc_return(&sem->count) <= 0)
9733 +#endif /* __ASSEMBLY__ */
9736 --- linux/include/asm-nios2nommu/sembuf.h
9737 +++ linux/include/asm-nios2nommu/sembuf.h
9739 +#ifndef _NIOS_SEMBUF_H
9740 +#define _NIOS_SEMBUF_H
9742 +/*--------------------------------------------------------------------
9744 + * include/asm-nios2nommu/sembuf.h
9746 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9748 + * Copyright (C) 2004 Microtronix Datacom Ltd
9750 + * This program is free software; you can redistribute it and/or modify
9751 + * it under the terms of the GNU General Public License as published by
9752 + * the Free Software Foundation; either version 2 of the License, or
9753 + * (at your option) any later version.
9755 + * This program is distributed in the hope that it will be useful,
9756 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9757 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9758 + * GNU General Public License for more details.
9761 + * Jan/20/2004 dgt NiosII
9763 + ---------------------------------------------------------------------*/
9767 + * Note extra padding because this structure is passed back and forth
9768 + * between kernel and user space.
9770 + * Pad space is left for:
9771 + * - 64-bit time_t to solve y2038 problem
9772 + * - 2 miscellaneous 32-bit values
9775 +struct semid64_ds {
9776 + struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
9777 + __kernel_time_t sem_otime; /* last semop time */
9778 + unsigned long __unused1;
9779 + __kernel_time_t sem_ctime; /* last change time */
9780 + unsigned long __unused2;
9781 + unsigned long sem_nsems; /* no. of semaphores in array */
9782 + unsigned long __unused3;
9783 + unsigned long __unused4;
9786 +#endif /* _NIOS_SEMBUF_H */
9787 --- linux/include/asm-nios2nommu/setup.h
9788 +++ linux/include/asm-nios2nommu/setup.h
9790 +/* Copied from i386 port.
9791 + * Just a place holder. We don't want to have to test x86 before
9792 + * we include stuff
9794 + * Copyright (C) 2004, Microtronix Datacom Ltd.
9796 + * All rights reserved.
9798 + * This program is free software; you can redistribute it and/or modify
9799 + * it under the terms of the GNU General Public License as published by
9800 + * the Free Software Foundation; either version 2 of the License, or
9801 + * (at your option) any later version.
9803 + * This program is distributed in the hope that it will be useful, but
9804 + * WITHOUT ANY WARRANTY; without even the implied warranty of
9805 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
9806 + * NON INFRINGEMENT. See the GNU General Public License for more
9809 + * You should have received a copy of the GNU General Public License
9810 + * along with this program; if not, write to the Free Software
9811 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
9815 +#ifndef _NIOS2_SETUP_H
9816 +#define _NIOS2_SETUP_H
9818 +#define COMMAND_LINE_SIZE 512
9820 +#endif /* _NIOS2_SETUP_H */
9821 --- linux/include/asm-nios2nommu/shmbuf.h
9822 +++ linux/include/asm-nios2nommu/shmbuf.h
9824 +#ifndef _NIOS_SHMBUF_H
9825 +#define _NIOS_SHMBUF_H
9827 +/*--------------------------------------------------------------------
9829 + * include/asm-nios2nommu/shmbuf.h
9831 + * Derived from m68knommu
9833 + * Copyright (C) 2004 Microtronix Datacom Ltd
9835 + * This program is free software; you can redistribute it and/or modify
9836 + * it under the terms of the GNU General Public License as published by
9837 + * the Free Software Foundation; either version 2 of the License, or
9838 + * (at your option) any later version.
9840 + * This program is distributed in the hope that it will be useful,
9841 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9842 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9843 + * GNU General Public License for more details.
9846 + * Jan/20/2004 dgt NiosII
9848 + ---------------------------------------------------------------------*/
9851 +/* Note extra padding because this structure is passed back and forth
9852 + * between kernel and user space.
9854 + * Pad space is left for:
9855 + * - 64-bit time_t to solve y2038 problem
9856 + * - 2 miscellaneous 32-bit values
9859 +struct shmid64_ds {
9860 + struct ipc64_perm shm_perm; /* operation perms */
9861 + size_t shm_segsz; /* size of segment (bytes) */
9862 + __kernel_time_t shm_atime; /* last attach time */
9863 + unsigned long __unused1;
9864 + __kernel_time_t shm_dtime; /* last detach time */
9865 + unsigned long __unused2;
9866 + __kernel_time_t shm_ctime; /* last change time */
9867 + unsigned long __unused3;
9868 + __kernel_pid_t shm_cpid; /* pid of creator */
9869 + __kernel_pid_t shm_lpid; /* pid of last operator */
9870 + unsigned long shm_nattch; /* no. of current attaches */
9871 + unsigned long __unused4;
9872 + unsigned long __unused5;
9876 + unsigned long shmmax;
9877 + unsigned long shmmin;
9878 + unsigned long shmmni;
9879 + unsigned long shmseg;
9880 + unsigned long shmall;
9881 + unsigned long __unused1;
9882 + unsigned long __unused2;
9883 + unsigned long __unused3;
9884 + unsigned long __unused4;
9887 +#endif /* _NIOS_SHMBUF_H */
9888 --- linux/include/asm-nios2nommu/shmparam.h
9889 +++ linux/include/asm-nios2nommu/shmparam.h
9891 +#ifndef __NIOS2NOMMU_SHMPARAM_H__
9892 +#define __NIOS2NOMMU_SHMPARAM_H__
9894 +/*--------------------------------------------------------------------
9896 + * include/asm-nios2nommu/shmparam.h
9898 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
9900 + * Copyright (C) 2004 Microtronix Datacom Ltd
9902 + * This program is free software; you can redistribute it and/or modify
9903 + * it under the terms of the GNU General Public License as published by
9904 + * the Free Software Foundation; either version 2 of the License, or
9905 + * (at your option) any later version.
9907 + * This program is distributed in the hope that it will be useful,
9908 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9909 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9910 + * GNU General Public License for more details.
9913 + * Jan/20/2004 dgt NiosII
9915 + ---------------------------------------------------------------------*/
9918 +#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */
9920 +#endif /* __NIOS2NOMMU_SHMPARAM_H__ */
9921 --- linux/include/asm-nios2nommu/sigcontext.h
9922 +++ linux/include/asm-nios2nommu/sigcontext.h
9925 + * Taken from the m68knommu.
9927 + * Copyright (C) 2004, Microtronix Datacom Ltd.
9929 + * All rights reserved.
9931 + * This program is free software; you can redistribute it and/or modify
9932 + * it under the terms of the GNU General Public License as published by
9933 + * the Free Software Foundation; either version 2 of the License, or
9934 + * (at your option) any later version.
9936 + * This program is distributed in the hope that it will be useful, but
9937 + * WITHOUT ANY WARRANTY; without even the implied warranty of
9938 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
9939 + * NON INFRINGEMENT. See the GNU General Public License for more
9942 + * You should have received a copy of the GNU General Public License
9943 + * along with this program; if not, write to the Free Software
9944 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
9948 +#ifndef _ASM_NIOS2NOMMU_SIGCONTEXT_H
9949 +#define _ASM_NIOS2NOMMU_SIGCONTEXT_H
9951 +#include <asm/ptrace.h>
9953 +struct sigcontext {
9954 + struct pt_regs regs;
9955 + unsigned long sc_mask; /* old sigmask */
9959 --- linux/include/asm-nios2nommu/siginfo.h
9960 +++ linux/include/asm-nios2nommu/siginfo.h
9963 + * Copyright (C) 2004, Microtronix Datacom Ltd.
9965 + * All rights reserved.
9967 + * This program is free software; you can redistribute it and/or modify
9968 + * it under the terms of the GNU General Public License as published by
9969 + * the Free Software Foundation; either version 2 of the License, or
9970 + * (at your option) any later version.
9972 + * This program is distributed in the hope that it will be useful, but
9973 + * WITHOUT ANY WARRANTY; without even the implied warranty of
9974 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
9975 + * NON INFRINGEMENT. See the GNU General Public License for more
9978 + * You should have received a copy of the GNU General Public License
9979 + * along with this program; if not, write to the Free Software
9980 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
9984 +#ifndef _NIOS2NOMMU_SIGINFO_H
9985 +#define _NIOS2NOMMU_SIGINFO_H
9987 +#include <asm-generic/siginfo.h>
9990 --- linux/include/asm-nios2nommu/signal.h
9991 +++ linux/include/asm-nios2nommu/signal.h
9994 + * Copyright (C) 2004, Microtronix Datacom Ltd.
9996 + * All rights reserved.
9998 + * This program is free software; you can redistribute it and/or modify
9999 + * it under the terms of the GNU General Public License as published by
10000 + * the Free Software Foundation; either version 2 of the License, or
10001 + * (at your option) any later version.
10003 + * This program is distributed in the hope that it will be useful, but
10004 + * WITHOUT ANY WARRANTY; without even the implied warranty of
10005 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
10006 + * NON INFRINGEMENT. See the GNU General Public License for more
10009 + * You should have received a copy of the GNU General Public License
10010 + * along with this program; if not, write to the Free Software
10011 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
10015 +#ifndef _NIOS2_SIGNAL_H
10016 +#define _NIOS2_SIGNAL_H
10018 +#include <linux/types.h>
10020 +/* Avoid too many header ordering problems. */
10024 +/* Most things should be clean enough to redefine this at will, if care
10025 + is taken to make libc match. */
10028 +#define _NSIG_BPW 32
10029 +#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
10031 +typedef unsigned long old_sigset_t; /* at least 32 bits */
10034 + unsigned long sig[_NSIG_WORDS];
10038 +/* Here we must cater to libcs that poke about in kernel headers. */
10041 +typedef unsigned long sigset_t;
10043 +#endif /* __KERNEL__ */
10055 +#define SIGUSR1 10
10056 +#define SIGSEGV 11
10057 +#define SIGUSR2 12
10058 +#define SIGPIPE 13
10059 +#define SIGALRM 14
10060 +#define SIGTERM 15
10061 +#define SIGSTKFLT 16
10062 +#define SIGCHLD 17
10063 +#define SIGCONT 18
10064 +#define SIGSTOP 19
10065 +#define SIGTSTP 20
10066 +#define SIGTTIN 21
10067 +#define SIGTTOU 22
10069 +#define SIGXCPU 24
10070 +#define SIGXFSZ 25
10071 +#define SIGVTALRM 26
10072 +#define SIGPROF 27
10073 +#define SIGWINCH 28
10075 +#define SIGPOLL SIGIO
10077 +#define SIGLOST 29
10081 +#define SIGUNUSED 31
10083 +/* These should not be considered constants from userland. */
10084 +#define SIGRTMIN 32
10085 +#define SIGRTMAX _NSIG-1
10088 + * SA_FLAGS values:
10090 + * SA_ONSTACK indicates that a registered stack_t will be used.
10091 + * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
10092 + * SA_RESTART flag to get restarting signals (which were the default long ago)
10093 + * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
10094 + * SA_RESETHAND clears the handler when the signal is delivered.
10095 + * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
10096 + * SA_NODEFER prevents the current signal from being masked in the handler.
10098 + * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
10099 + * Unix names RESETHAND and NODEFER respectively.
10101 +#define SA_NOCLDSTOP 0x00000001
10102 +#define SA_NOCLDWAIT 0x00000002 /* not supported yet */
10103 +#define SA_SIGINFO 0x00000004
10104 +#define SA_ONSTACK 0x08000000
10105 +#define SA_RESTART 0x10000000
10106 +#define SA_NODEFER 0x40000000
10107 +#define SA_RESETHAND 0x80000000
10109 +#define SA_NOMASK SA_NODEFER
10110 +#define SA_ONESHOT SA_RESETHAND
10111 +#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
10113 +#define SA_RESTORER 0x04000000
10116 + * sigaltstack controls
10118 +#define SS_ONSTACK 1
10119 +#define SS_DISABLE 2
10121 +#define MINSIGSTKSZ 2048
10122 +#define SIGSTKSZ 8192
10126 + * These values of sa_flags are used only by the kernel as part of the
10127 + * irq handling routines.
10129 + * SA_INTERRUPT is also used by the irq handling routines.
10130 + * SA_SHIRQ is for shared interrupt support on PCI and EISA.
10132 +#define SA_PROBE SA_ONESHOT
10133 +#define SA_SAMPLE_RANDOM SA_RESTART
10134 +#define SA_SHIRQ 0x04000000
10137 +#define SIG_BLOCK 0 /* for blocking signals */
10138 +#define SIG_UNBLOCK 1 /* for unblocking signals */
10139 +#define SIG_SETMASK 2 /* for setting the signal mask */
10141 +/* Type of a signal handler. */
10142 +typedef void (*__sighandler_t)(int);
10144 +#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
10145 +#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
10146 +#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
10149 +struct old_sigaction {
10150 + __sighandler_t sa_handler;
10151 + old_sigset_t sa_mask;
10152 + unsigned long sa_flags;
10153 + void (*sa_restorer)(void);
10156 +struct sigaction {
10157 + __sighandler_t sa_handler;
10158 + unsigned long sa_flags;
10159 + void (*sa_restorer)(void);
10160 + sigset_t sa_mask; /* mask last for extensibility */
10163 +struct k_sigaction {
10164 + struct sigaction sa;
10167 +/* Here we must cater to libcs that poke about in kernel headers. */
10169 +struct sigaction {
10171 + __sighandler_t _sa_handler;
10172 + void (*_sa_sigaction)(int, struct siginfo *, void *);
10174 + sigset_t sa_mask;
10175 + unsigned long sa_flags;
10176 + void (*sa_restorer)(void);
10179 +#define sa_handler _u._sa_handler
10180 +#define sa_sigaction _u._sa_sigaction
10182 +#endif /* __KERNEL__ */
10184 +typedef struct sigaltstack {
10192 +#include <asm/sigcontext.h>
10193 +#undef __HAVE_ARCH_SIG_BITOPS
10195 +#define ptrace_signal_deliver(regs, cookie) do { } while (0)
10197 +#endif /* __KERNEL__ */
10199 +#endif /* _NIOS2_SIGNAL_H */
10200 --- linux/include/asm-nios2nommu/smp.h
10201 +++ linux/include/asm-nios2nommu/smp.h
10203 +#ifndef __ASM_SMP_H
10204 +#define __ASM_SMP_H
10206 +/*--------------------------------------------------------------------
10208 + * include/asm-nios2nommu/smp.h
10210 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10212 + * Copyright (C) 2004 Microtronix Datacom Ltd
10214 + * This program is free software; you can redistribute it and/or modify
10215 + * it under the terms of the GNU General Public License as published by
10216 + * the Free Software Foundation; either version 2 of the License, or
10217 + * (at your option) any later version.
10219 + * This program is distributed in the hope that it will be useful,
10220 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10221 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10222 + * GNU General Public License for more details.
10225 + * Jan/20/2004 dgt NiosII
10227 + ---------------------------------------------------------------------*/
10230 +// #include <linux/config.h>
10233 +#error SMP not supported
10237 --- linux/include/asm-nios2nommu/socket.h
10238 +++ linux/include/asm-nios2nommu/socket.h
10240 +#ifndef _ASM_SOCKET_H
10241 +#define _ASM_SOCKET_H
10243 +/*--------------------------------------------------------------------
10245 + * include/asm-nios2nommu/socket.h
10247 + * Derived from m68knommu
10249 + * Copyright (C) 2004 Microtronix Datacom Ltd
10251 + * This program is free software; you can redistribute it and/or modify
10252 + * it under the terms of the GNU General Public License as published by
10253 + * the Free Software Foundation; either version 2 of the License, or
10254 + * (at your option) any later version.
10256 + * This program is distributed in the hope that it will be useful,
10257 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10258 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10259 + * GNU General Public License for more details.
10262 + * Jan/20/2004 dgt NiosII
10264 + ---------------------------------------------------------------------*/
10267 +#include <asm/sockios.h>
10269 +/* For setsockopt(2) */
10270 +#define SOL_SOCKET 1
10272 +#define SO_DEBUG 1
10273 +#define SO_REUSEADDR 2
10275 +#define SO_ERROR 4
10276 +#define SO_DONTROUTE 5
10277 +#define SO_BROADCAST 6
10278 +#define SO_SNDBUF 7
10279 +#define SO_RCVBUF 8
10280 +#define SO_KEEPALIVE 9
10281 +#define SO_OOBINLINE 10
10282 +#define SO_NO_CHECK 11
10283 +#define SO_PRIORITY 12
10284 +#define SO_LINGER 13
10285 +#define SO_BSDCOMPAT 14
10286 +/* To add :#define SO_REUSEPORT 15 */
10287 +#define SO_PASSCRED 16
10288 +#define SO_PEERCRED 17
10289 +#define SO_RCVLOWAT 18
10290 +#define SO_SNDLOWAT 19
10291 +#define SO_RCVTIMEO 20
10292 +#define SO_SNDTIMEO 21
10294 +/* Security levels - as per NRL IPv6 - don't actually do anything */
10295 +#define SO_SECURITY_AUTHENTICATION 22
10296 +#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
10297 +#define SO_SECURITY_ENCRYPTION_NETWORK 24
10299 +#define SO_BINDTODEVICE 25
10301 +/* Socket filtering */
10302 +#define SO_ATTACH_FILTER 26
10303 +#define SO_DETACH_FILTER 27
10305 +#define SO_PEERNAME 28
10306 +#define SO_TIMESTAMP 29
10307 +#define SCM_TIMESTAMP SO_TIMESTAMP
10309 +#define SO_ACCEPTCONN 30
10311 +#define SO_PEERSEC 31 /* ;dgt2;tmp; */
10313 +#endif /* _ASM_SOCKET_H */
10314 --- linux/include/asm-nios2nommu/sockios.h
10315 +++ linux/include/asm-nios2nommu/sockios.h
10317 +#ifndef _ASM_NIOS_SOCKIOS_H
10318 +#define _ASM_NIOS_SOCKIOS_H
10320 +/*--------------------------------------------------------------------
10322 + * include/asm-nios2nommu/sockios.h
10324 + * Socket-level I/O control calls.
10326 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10328 + * Copyright (C) 2004 Microtronix Datacom Ltd
10330 + * This program is free software; you can redistribute it and/or modify
10331 + * it under the terms of the GNU General Public License as published by
10332 + * the Free Software Foundation; either version 2 of the License, or
10333 + * (at your option) any later version.
10335 + * This program is distributed in the hope that it will be useful,
10336 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10337 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10338 + * GNU General Public License for more details.
10341 + * Jan/20/2004 dgt NiosII
10343 + ---------------------------------------------------------------------*/
10346 +#define FIOSETOWN 0x8901
10347 +#define SIOCSPGRP 0x8902
10348 +#define FIOGETOWN 0x8903
10349 +#define SIOCGPGRP 0x8904
10350 +#define SIOCATMARK 0x8905
10351 +#define SIOCGSTAMP 0x8906 /* Get stamp */
10353 +#endif /* !(_ASM_NIOS_SOCKIOS_H) */
10355 --- linux/include/asm-nios2nommu/spi.h
10356 +++ linux/include/asm-nios2nommu/spi.h
10358 +#ifndef _ASM_SPI_H_
10359 +#define _ASM_SPI_H_ 1
10361 +/*--------------------------------------------------------------------
10363 + * include/asm-nios2nommu/spi.h
10365 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10367 + * Copyright (C) 2004 Microtronix Datacom Ltd
10369 + * This program is free software; you can redistribute it and/or modify
10370 + * it under the terms of the GNU General Public License as published by
10371 + * the Free Software Foundation; either version 2 of the License, or
10372 + * (at your option) any later version.
10374 + * This program is distributed in the hope that it will be useful,
10375 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10376 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10377 + * GNU General Public License for more details.
10380 + * Jan/20/2004 dgt NiosII
10382 + ---------------------------------------------------------------------*/
10385 +#include <asm/nios.h>
10387 +int register_NIOS_SPI( void );
10388 +void unregister_NIOS_SPI( void );
10390 +#if defined(MODULE)
10391 +void cleanup_module( void );
10392 +int init_module( void );
10395 +#if defined(__KERNEL__)
10396 +int spi_reset ( void );
10400 +#define clockCS 0x01
10401 +#define temperatureCS 0x02
10403 +#define clock_read_base 0x00
10404 +#define clock_write_base 0x80
10405 +#define clock_read_control 0x0F
10406 +#define clock_read_trickle 0x11
10408 +#define clock_read_sec 0x00
10409 +#define clock_read_min 0x01
10410 +#define clock_read_hour 0x02
10411 +#define clock_read_day 0x03
10412 +#define clock_read_date 0x04
10413 +#define clock_read_month 0x05
10414 +#define clock_read_year 0x06
10416 +#define clock_write_control 0x8F
10417 +#define clock_write_trickle 0x91
10418 +#define clock_write_sec 0x80
10419 +#define clock_write_min 0x81
10420 +#define clock_write_hour 0x82
10421 +#define clock_write_day 0x83
10422 +#define clock_write_date 0x84
10423 +#define clock_write_month 0x85
10424 +#define clock_write_year 0x86
10426 +#define clock_write_ram_start 0xA0
10427 +#define clock_write_ram_end 0x100
10428 +#define clock_read_ram_start 0x20
10429 +#define clock_read_ram_end 0x80
10432 +#define clock_sec_def 0x11
10433 +#define clock_min_def 0x59
10434 +#define clock_hour_def 0x71
10435 +#define clock_day_def 0x00
10436 +#define clock_date_def 0x20
10437 +#define clock_month_def 0x12
10438 +#define clock_year_def 0x34
10440 +#define temp_read_base 0x00
10441 +#define temp_write_base 0x80
10442 +#define temp_read_control 0x00
10443 +#define temp_write_control 0x80
10444 +#define temp_read_msb 0x02
10445 +#define temp_read_lsb 0x01
10447 +#define MAX_TEMP_VAR 10
10449 +#endif /*_ASM_SPI_H_*/
10450 --- linux/include/asm-nios2nommu/spinlock.h
10451 +++ linux/include/asm-nios2nommu/spinlock.h
10453 +#ifndef __NIOS_SPINLOCK_H
10454 +#define __NIOS_SPINLOCK_H
10456 +/*--------------------------------------------------------------------
10458 + * include/asm-nios2nommu/spinlock.h
10460 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10462 + * Copyright (C) 2004 Microtronix Datacom Ltd
10464 + * This program is free software; you can redistribute it and/or modify
10465 + * it under the terms of the GNU General Public License as published by
10466 + * the Free Software Foundation; either version 2 of the License, or
10467 + * (at your option) any later version.
10469 + * This program is distributed in the hope that it will be useful,
10470 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10471 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10472 + * GNU General Public License for more details.
10475 + * Jan/20/2004 dgt NiosII
10477 + ---------------------------------------------------------------------*/
10480 +#error "Nios doesn't do SMP yet"
10483 --- linux/include/asm-nios2nommu/stat.h
10484 +++ linux/include/asm-nios2nommu/stat.h
10486 +#ifndef _ASMNIOS2NOMMU_STAT_H
10487 +#define _ASMNIOS2NOMMU_STAT_H
10489 +/*--------------------------------------------------------------------
10491 + * include/asm-nios2nommu/stat.h
10493 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10495 + * Copyright (C) 2004 Microtronix Datacom Ltd
10497 + * This program is free software; you can redistribute it and/or modify
10498 + * it under the terms of the GNU General Public License as published by
10499 + * the Free Software Foundation; either version 2 of the License, or
10500 + * (at your option) any later version.
10502 + * This program is distributed in the hope that it will be useful,
10503 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10504 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10505 + * GNU General Public License for more details.
10508 + * Jan/20/2004 dgt NiosII
10510 + ---------------------------------------------------------------------*/
10513 +struct __old_kernel_stat {
10514 + unsigned short st_dev;
10515 + unsigned short st_ino;
10516 + unsigned short st_mode;
10517 + unsigned short st_nlink;
10518 + unsigned short st_uid;
10519 + unsigned short st_gid;
10520 + unsigned short st_rdev;
10521 + unsigned long st_size;
10522 + unsigned long st_atime;
10523 + unsigned long st_mtime;
10524 + unsigned long st_ctime;
10528 + unsigned short st_dev;
10529 + unsigned short __pad1;
10530 + unsigned long st_ino;
10531 + unsigned short st_mode;
10532 + unsigned short st_nlink;
10533 + unsigned short st_uid;
10534 + unsigned short st_gid;
10535 + unsigned short st_rdev;
10536 + unsigned short __pad2;
10537 + unsigned long st_size;
10538 + unsigned long st_blksize;
10539 + unsigned long st_blocks;
10540 + unsigned long st_atime;
10541 + unsigned long __unused1;
10542 + unsigned long st_mtime;
10543 + unsigned long __unused2;
10544 + unsigned long st_ctime;
10545 + unsigned long __unused3;
10546 + unsigned long __unused4;
10547 + unsigned long __unused5;
10550 +/* This matches struct stat64 in glibc2.1, hence the absolutely
10551 + * insane amounts of padding around dev_t's.
10554 + unsigned long long st_dev;
10555 + unsigned char __pad1[4];
10557 +#define STAT64_HAS_BROKEN_ST_INO 1
10558 + unsigned long __st_ino;
10560 + unsigned int st_mode;
10561 + unsigned int st_nlink;
10563 + unsigned long st_uid;
10564 + unsigned long st_gid;
10566 + unsigned long long st_rdev;
10567 + unsigned char __pad3[4];
10569 + long long st_size;
10570 + unsigned long st_blksize;
10572 + unsigned long __pad4; /* future possible st_blocks high bits */
10573 + unsigned long st_blocks; /* Number 512-byte blocks allocated. */
10575 + unsigned long st_atime;
10576 + unsigned long st_atime_nsec;
10578 + unsigned long st_mtime;
10579 + unsigned long st_mtime_nsec;
10581 + unsigned long st_ctime;
10582 + unsigned long st_ctime_nsec;
10584 + unsigned long long st_ino;
10588 --- linux/include/asm-nios2nommu/statfs.h
10589 +++ linux/include/asm-nios2nommu/statfs.h
10591 +#ifndef _NIOS2NOMMU_STATFS_H
10592 +#define _NIOS2NOMMU_STATFS_H
10594 +/*--------------------------------------------------------------------
10596 + * include/asm-nios2nommu/statfs.h
10598 + * Derived from M68knommu
10600 + * Copyright (C) 2004 Microtronix Datacom Ltd
10602 + * This program is free software; you can redistribute it and/or modify
10603 + * it under the terms of the GNU General Public License as published by
10604 + * the Free Software Foundation; either version 2 of the License, or
10605 + * (at your option) any later version.
10607 + * This program is distributed in the hope that it will be useful,
10608 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10609 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10610 + * GNU General Public License for more details.
10613 + * Jan/20/2004 dgt NiosII
10615 + ---------------------------------------------------------------------*/
10618 +#include <asm-generic/statfs.h>
10620 +#endif /* _NIOS2NOMMU_STATFS_H */
10621 --- linux/include/asm-nios2nommu/string.h
10622 +++ linux/include/asm-nios2nommu/string.h
10624 +#ifndef __NIOS_STRING_H__
10625 +#define __NIOS_STRING_H__
10627 +/*--------------------------------------------------------------------
10629 + * include/asm-nios2nommu/string.h
10631 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10633 + * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
10634 + * Copyright (C) 2004 Microtronix Datacom Ltd
10636 + * This program is free software; you can redistribute it and/or modify
10637 + * it under the terms of the GNU General Public License as published by
10638 + * the Free Software Foundation; either version 2 of the License, or
10639 + * (at your option) any later version.
10641 + * This program is distributed in the hope that it will be useful,
10642 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10643 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10644 + * GNU General Public License for more details.
10647 + * Jan/20/2004 dgt NiosII
10649 + ---------------------------------------------------------------------*/
10652 +#ifdef __KERNEL__ /* only set these up for kernel code */
10654 +#define __HAVE_ARCH_MEMMOVE
10655 +void * memmove(void * d, const void * s, size_t count);
10656 +#define __HAVE_ARCH_MEMCPY
10657 +extern void * memcpy(void *d, const void *s, size_t count);
10658 +#define __HAVE_ARCH_MEMSET
10659 +extern void * memset(void * s,int c,size_t count);
10662 +#define __HAVE_ARCH_BCOPY
10663 +#define __HAVE_ARCH_STRLEN
10666 +#endif /* KERNEL */
10668 +#endif /* !(__NIOS_STRING_H__) */
10669 --- linux/include/asm-nios2nommu/system.h
10670 +++ linux/include/asm-nios2nommu/system.h
10673 + * Taken from the m68k.
10675 + * Copyright (C) 2004, Microtronix Datacom Ltd.
10677 + * All rights reserved.
10679 + * This program is free software; you can redistribute it and/or modify
10680 + * it under the terms of the GNU General Public License as published by
10681 + * the Free Software Foundation; either version 2 of the License, or
10682 + * (at your option) any later version.
10684 + * This program is distributed in the hope that it will be useful, but
10685 + * WITHOUT ANY WARRANTY; without even the implied warranty of
10686 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
10687 + * NON INFRINGEMENT. See the GNU General Public License for more
10690 + * You should have received a copy of the GNU General Public License
10691 + * along with this program; if not, write to the Free Software
10692 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
10696 +#ifndef _NIOS2NOMMU_SYSTEM_H
10697 +#define _NIOS2NOMMU_SYSTEM_H
10699 +// #include <linux/config.h> /* get configuration macros */
10700 +#include <linux/linkage.h>
10701 +#include <asm/segment.h>
10702 +#include <asm/entry.h>
10703 +#include <asm/nios.h>
10706 + * switch_to(n) should switch tasks to task ptr, first checking that
10707 + * ptr isn't the current task, in which case it does nothing. This
10708 + * also clears the TS-flag if the task we switched to has used the
10709 + * math co-processor latest.
10714 +asmlinkage void resume(void);
10715 +#define switch_to(prev,next,last) \
10718 + __asm__ __volatile__( \
10721 + "call resume\n" \
10724 + : "r" (prev), "r" (next) \
10725 + : "r4","r5","r7","r8","ra"); \
10726 + (last) = _last; \
10729 +#define local_irq_enable() __asm__ __volatile__ ( \
10730 + "rdctl r8, status\n" \
10731 + "ori r8, r8, 1\n" \
10732 + "wrctl status, r8\n" \
10735 +#define local_irq_disable() __asm__ __volatile__ ( \
10736 + "rdctl r8, status\n" \
10737 + "andi r8, r8, 0xfffe\n" \
10738 + "wrctl status, r8\n" \
10741 +#define local_save_flags(x) __asm__ __volatile__ ( \
10742 + "rdctl r8, status\n" \
10744 + :"=r" (x) : : "r8", "memory")
10746 +#define local_irq_restore(x) __asm__ __volatile__ ( \
10748 + "wrctl status, r8\n" \
10749 + : :"r" (x) : "memory")
10751 +/* For spinlocks etc */
10752 +#define local_irq_save(x) do { local_save_flags(x); local_irq_disable(); } while (0)
10754 +#define irqs_disabled() \
10756 + unsigned long flags; \
10757 + local_save_flags(flags); \
10758 + ((flags & NIOS2_STATUS_PIE_MSK) == 0x0); \
10761 +#define iret() __asm__ __volatile__ ("eret": : :"memory", "ea")
10764 + * Force strict CPU ordering.
10765 + * Not really required on m68k...
10767 +#define nop() asm volatile ("nop"::)
10768 +#define mb() asm volatile ("" : : :"memory")
10769 +#define rmb() asm volatile ("" : : :"memory")
10770 +#define wmb() asm volatile ("" : : :"memory")
10771 +#define set_rmb(var, value) do { xchg(&var, value); } while (0)
10772 +#define set_mb(var, value) set_rmb(var, value)
10773 +#define set_wmb(var, value) do { var = value; wmb(); } while (0)
10776 +#define smp_mb() mb()
10777 +#define smp_rmb() rmb()
10778 +#define smp_wmb() wmb()
10779 +#define smp_read_barrier_depends() read_barrier_depends()
10781 +#define smp_mb() barrier()
10782 +#define smp_rmb() barrier()
10783 +#define smp_wmb() barrier()
10784 +#define smp_read_barrier_depends() do { } while(0)
10787 +#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
10788 +#define tas(ptr) (xchg((ptr),1))
10790 +struct __xchg_dummy { unsigned long a[100]; };
10791 +#define __xg(x) ((volatile struct __xchg_dummy *)(x))
10793 +static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
10795 + unsigned long tmp, flags;
10797 + local_irq_save(flags);
10801 + __asm__ __volatile__( \
10804 + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
10807 + __asm__ __volatile__( \
10810 + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
10813 + __asm__ __volatile__( \
10816 + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
10819 + local_irq_restore(flags);
10824 + * Atomic compare and exchange. Compare OLD with MEM, if identical,
10825 + * store NEW in MEM. Return the initial value in MEM. Success is
10826 + * indicated by comparing RETURN with OLD.
10828 +#define __HAVE_ARCH_CMPXCHG 1
10830 +static __inline__ unsigned long
10831 +cmpxchg(volatile int *p, int old, int new)
10833 + unsigned long flags;
10836 + local_irq_save(flags);
10837 + if ((prev = *p) == old)
10839 + local_irq_restore(flags);
10843 +#endif /* _NIOS2NOMMU_SYSTEM_H */
10844 --- linux/include/asm-nios2nommu/termbits.h
10845 +++ linux/include/asm-nios2nommu/termbits.h
10847 +#ifndef __ARCH_NIOS_TERMBITS_H__
10848 +#define __ARCH_NIOS_TERMBITS_H__
10850 +/*--------------------------------------------------------------------
10852 + * include/asm-nios2nommu/termbits.h
10854 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
10856 + * Copyright (C) 2004 Microtronix Datacom Ltd
10858 + * This program is free software; you can redistribute it and/or modify
10859 + * it under the terms of the GNU General Public License as published by
10860 + * the Free Software Foundation; either version 2 of the License, or
10861 + * (at your option) any later version.
10863 + * This program is distributed in the hope that it will be useful,
10864 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10865 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10866 + * GNU General Public License for more details.
10869 + * Jan/20/2004 dgt NiosII
10871 + ---------------------------------------------------------------------*/
10874 +#include <linux/posix_types.h>
10876 +typedef unsigned char cc_t;
10877 +typedef unsigned int speed_t;
10878 +typedef unsigned int tcflag_t;
10882 + tcflag_t c_iflag; /* input mode flags */
10883 + tcflag_t c_oflag; /* output mode flags */
10884 + tcflag_t c_cflag; /* control mode flags */
10885 + tcflag_t c_lflag; /* local mode flags */
10886 + cc_t c_line; /* line discipline */
10887 + cc_t c_cc[NCCS]; /* control characters */
10890 +/* c_cc characters */
10903 +#define VREPRINT 12
10904 +#define VDISCARD 13
10905 +#define VWERASE 14
10910 +/* c_iflag bits */
10911 +#define IGNBRK 0000001
10912 +#define BRKINT 0000002
10913 +#define IGNPAR 0000004
10914 +#define PARMRK 0000010
10915 +#define INPCK 0000020
10916 +#define ISTRIP 0000040
10917 +#define INLCR 0000100
10918 +#define IGNCR 0000200
10919 +#define ICRNL 0000400
10920 +#define IUCLC 0001000
10921 +#define IXON 0002000
10922 +#define IXANY 0004000
10923 +#define IXOFF 0010000
10924 +#define IMAXBEL 0020000
10925 +#define IUTF8 0040000
10927 +/* c_oflag bits */
10928 +#define OPOST 0000001
10929 +#define OLCUC 0000002
10930 +#define ONLCR 0000004
10931 +#define OCRNL 0000010
10932 +#define ONOCR 0000020
10933 +#define ONLRET 0000040
10934 +#define OFILL 0000100
10935 +#define OFDEL 0000200
10936 +#define NLDLY 0000400
10937 +#define NL0 0000000
10938 +#define NL1 0000400
10939 +#define CRDLY 0003000
10940 +#define CR0 0000000
10941 +#define CR1 0001000
10942 +#define CR2 0002000
10943 +#define CR3 0003000
10944 +#define TABDLY 0014000
10945 +#define TAB0 0000000
10946 +#define TAB1 0004000
10947 +#define TAB2 0010000
10948 +#define TAB3 0014000
10949 +#define XTABS 0014000
10950 +#define BSDLY 0020000
10951 +#define BS0 0000000
10952 +#define BS1 0020000
10953 +#define VTDLY 0040000
10954 +#define VT0 0000000
10955 +#define VT1 0040000
10956 +#define FFDLY 0100000
10957 +#define FF0 0000000
10958 +#define FF1 0100000
10960 +/* c_cflag bit meaning */
10961 +#define CBAUD 0010017
10962 +#define B0 0000000 /* hang up */
10963 +#define B50 0000001
10964 +#define B75 0000002
10965 +#define B110 0000003
10966 +#define B134 0000004
10967 +#define B150 0000005
10968 +#define B200 0000006
10969 +#define B300 0000007
10970 +#define B600 0000010
10971 +#define B1200 0000011
10972 +#define B1800 0000012
10973 +#define B2400 0000013
10974 +#define B4800 0000014
10975 +#define B9600 0000015
10976 +#define B19200 0000016
10977 +#define B38400 0000017
10978 +#define EXTA B19200
10979 +#define EXTB B38400
10980 +#define CSIZE 0000060
10981 +#define CS5 0000000
10982 +#define CS6 0000020
10983 +#define CS7 0000040
10984 +#define CS8 0000060
10985 +#define CSTOPB 0000100
10986 +#define CREAD 0000200
10987 +#define PARENB 0000400
10988 +#define PARODD 0001000
10989 +#define HUPCL 0002000
10990 +#define CLOCAL 0004000
10991 +#define CBAUDEX 0010000
10992 +#define B57600 0010001
10993 +#define B115200 0010002
10994 +#define B230400 0010003
10995 +#define B460800 0010004
10996 +#define B500000 0010005
10997 +#define B576000 0010006
10998 +#define B921600 0010007
10999 +#define B1000000 0010010
11000 +#define B1152000 0010011
11001 +#define B1500000 0010012
11002 +#define B2000000 0010013
11003 +#define B2500000 0010014
11004 +#define B3000000 0010015
11005 +#define B3500000 0010016
11006 +#define B4000000 0010017
11007 +#define CIBAUD 002003600000 /* input baud rate (not used) */
11008 +#define CMSPAR 010000000000 /* mark or space (stick) parity */
11009 +#define CRTSCTS 020000000000 /* flow control */
11011 +/* c_lflag bits */
11012 +#define ISIG 0000001
11013 +#define ICANON 0000002
11014 +#define XCASE 0000004
11015 +#define ECHO 0000010
11016 +#define ECHOE 0000020
11017 +#define ECHOK 0000040
11018 +#define ECHONL 0000100
11019 +#define NOFLSH 0000200
11020 +#define TOSTOP 0000400
11021 +#define ECHOCTL 0001000
11022 +#define ECHOPRT 0002000
11023 +#define ECHOKE 0004000
11024 +#define FLUSHO 0010000
11025 +#define PENDIN 0040000
11026 +#define IEXTEN 0100000
11029 +/* tcflow() and TCXONC use these */
11035 +/* tcflush() and TCFLSH use these */
11036 +#define TCIFLUSH 0
11037 +#define TCOFLUSH 1
11038 +#define TCIOFLUSH 2
11040 +/* tcsetattr uses these */
11042 +#define TCSADRAIN 1
11043 +#define TCSAFLUSH 2
11045 +#endif /* __ARCH_NIOS_TERMBITS_H__ */
11046 --- linux/include/asm-nios2nommu/termios.h
11047 +++ linux/include/asm-nios2nommu/termios.h
11049 +#ifndef _NIOS_TERMIOS_H
11050 +#define _NIOS_TERMIOS_H
11052 +/*--------------------------------------------------------------------
11054 + * include/asm-nios2nommu/termios.h
11056 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11058 + * Copyright (C) 2004 Microtronix Datacom Ltd
11060 + * This program is free software; you can redistribute it and/or modify
11061 + * it under the terms of the GNU General Public License as published by
11062 + * the Free Software Foundation; either version 2 of the License, or
11063 + * (at your option) any later version.
11065 + * This program is distributed in the hope that it will be useful,
11066 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11067 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11068 + * GNU General Public License for more details.
11071 + * Jan/20/2004 dgt NiosII
11073 + ---------------------------------------------------------------------*/
11076 +#include <asm/termbits.h>
11077 +#include <asm/ioctls.h>
11080 + unsigned short ws_row;
11081 + unsigned short ws_col;
11082 + unsigned short ws_xpixel;
11083 + unsigned short ws_ypixel;
11088 + unsigned short c_iflag; /* input mode flags */
11089 + unsigned short c_oflag; /* output mode flags */
11090 + unsigned short c_cflag; /* control mode flags */
11091 + unsigned short c_lflag; /* local mode flags */
11092 + unsigned char c_line; /* line discipline */
11093 + unsigned char c_cc[NCC]; /* control characters */
11097 +/* intr=^C quit=^| erase=del kill=^U
11098 + eof=^D vtime=\0 vmin=\1 sxtc=\0
11099 + start=^Q stop=^S susp=^Z eol=\0
11100 + reprint=^R discard=^U werase=^W lnext=^V
11103 +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
11107 +#define TIOCM_LE 0x001
11108 +#define TIOCM_DTR 0x002
11109 +#define TIOCM_RTS 0x004
11110 +#define TIOCM_ST 0x008
11111 +#define TIOCM_SR 0x010
11112 +#define TIOCM_CTS 0x020
11113 +#define TIOCM_CAR 0x040
11114 +#define TIOCM_RNG 0x080
11115 +#define TIOCM_DSR 0x100
11116 +#define TIOCM_CD TIOCM_CAR
11117 +#define TIOCM_RI TIOCM_RNG
11118 +#define TIOCM_OUT1 0x2000
11119 +#define TIOCM_OUT2 0x4000
11120 +#define TIOCM_LOOP 0x8000
11122 +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
11124 +/* line disciplines */
11131 +#define N_X25 6 /* X.25 async */
11133 +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */
11134 +#define N_R3964 9 /* Reserved for Simatic R3964 module */
11135 +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */
11136 +#define N_IRDA 11 /* Linux IrDa - http://irda.sourceforge.net/ */
11137 +#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */
11138 +#define N_HDLC 13 /* synchronous HDLC */
11139 +#define N_SYNC_PPP 14
11140 +#define N_HCI 15 /* Bluetooth HCI UART */
11145 + * Translate a "termio" structure into a "termios". Ugh.
11147 +#define user_termio_to_kernel_termios(termios, termio) \
11149 + unsigned short tmp; \
11150 + get_user(tmp, &(termio)->c_iflag); \
11151 + (termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \
11152 + get_user(tmp, &(termio)->c_oflag); \
11153 + (termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \
11154 + get_user(tmp, &(termio)->c_cflag); \
11155 + (termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \
11156 + get_user(tmp, &(termio)->c_lflag); \
11157 + (termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \
11158 + get_user((termios)->c_line, &(termio)->c_line); \
11159 + copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
11163 + * Translate a "termios" structure into a "termio". Ugh.
11165 +#define kernel_termios_to_user_termio(termio, termios) \
11167 + put_user((termios)->c_iflag, &(termio)->c_iflag); \
11168 + put_user((termios)->c_oflag, &(termio)->c_oflag); \
11169 + put_user((termios)->c_cflag, &(termio)->c_cflag); \
11170 + put_user((termios)->c_lflag, &(termio)->c_lflag); \
11171 + put_user((termios)->c_line, &(termio)->c_line); \
11172 + copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
11175 +#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
11176 +#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
11178 +#endif /* __KERNEL__ */
11180 +#endif /* _NIOS_TERMIOS_H */
11181 --- linux/include/asm-nios2nommu/thread_info.h
11182 +++ linux/include/asm-nios2nommu/thread_info.h
11184 +/* thread_info.h: niosnommu low-level thread information
11185 + * adapted from the m68knommu
11187 + * Copyright (C) 2004 Microtronix Datacom Ltd.
11188 + * Copyright (C) 2002 Microtronix Datacom
11190 + * - Incorporating suggestions made by Linus Torvalds and Dave Miller
11192 + * All rights reserved.
11194 + * This program is free software; you can redistribute it and/or modify
11195 + * it under the terms of the GNU General Public License as published by
11196 + * the Free Software Foundation; either version 2 of the License, or
11197 + * (at your option) any later version.
11199 + * This program is distributed in the hope that it will be useful, but
11200 + * WITHOUT ANY WARRANTY; without even the implied warranty of
11201 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
11202 + * NON INFRINGEMENT. See the GNU General Public License for more
11205 + * You should have received a copy of the GNU General Public License
11206 + * along with this program; if not, write to the Free Software
11207 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
11211 +#ifndef _ASM_THREAD_INFO_H
11212 +#define _ASM_THREAD_INFO_H
11214 +#include <asm/page.h>
11218 +#ifndef __ASSEMBLY__
11221 + * low level task data.
11223 +struct thread_info {
11224 + struct task_struct *task; /* main task structure */
11225 + struct exec_domain *exec_domain; /* execution domain */
11226 + unsigned long flags; /* low level flags */
11227 + int cpu; /* cpu we're on */
11228 + int preempt_count; /* 0 => preemptable, <0 => BUG*/
11229 + struct restart_block restart_block;
11233 + * macros/functions for gaining access to the thread information structure
11235 +#define INIT_THREAD_INFO(tsk) \
11238 + .exec_domain = &default_exec_domain, \
11241 + .preempt_count = 1, \
11242 + .restart_block = { \
11243 + .fn = do_no_restart_syscall, \
11247 +#define init_thread_info (init_thread_union.thread_info)
11248 +#define init_stack (init_thread_union.stack)
11251 +/* how to get the thread information struct from C
11252 + usable only in supervisor mode */
11253 +static inline struct thread_info *current_thread_info(void)
11255 + struct thread_info *ti;
11256 + __asm__ __volatile__(
11258 + "and %0, %0, %1\n"
11260 + : "r" (~(THREAD_SIZE-1))
11265 +/* thread information allocation */
11266 +#define alloc_thread_info(tsk) ((struct thread_info *) \
11267 + __get_free_pages(GFP_KERNEL, 1))
11268 +#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
11269 +#define put_thread_info(ti) put_task_struct((ti)->task)
11271 +#define PREEMPT_ACTIVE 0x4000000
11274 + * thread information flag bit numbers
11276 +#define TIF_SYSCALL_TRACE 0 /* syscall trace active */
11277 +#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */
11278 +#define TIF_SIGPENDING 2 /* signal pending */
11279 +#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
11280 +#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling
11281 + TIF_NEED_RESCHED */
11283 +/* as above, but as bit values */
11284 +#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
11285 +#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
11286 +#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
11287 +#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
11288 +#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
11290 +#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
11292 +#else /* __ASSEMBLY__ */
11294 +/* how to get the thread information struct from ASM
11295 + usable only in supervisor mode */
11296 +.macro GET_THREAD_INFO reg
11297 +.if THREAD_SIZE & 0xffff0000
11298 + andhi \reg, sp, %hi(~(THREAD_SIZE-1))
11300 + addi \reg, r0, %lo(~(THREAD_SIZE-1))
11301 + and \reg, \reg, sp
11305 +#endif /* __ASSEMBLY__ */
11307 +#endif /* __KERNEL__ */
11309 +#endif /* _ASM_THREAD_INFO_H */
11310 --- linux/include/asm-nios2nommu/timer_struct.h
11311 +++ linux/include/asm-nios2nommu/timer_struct.h
11314 +// ----------------------------------------------
11315 +// Timer Peripheral
11317 +// Timer Registers
11318 +typedef volatile struct
11320 + int np_timerstatus; // read only, 2 bits (any write to clear TO)
11321 + int np_timercontrol; // write/readable, 4 bits
11322 + int np_timerperiodl; // write/readable, 16 bits
11323 + int np_timerperiodh; // write/readable, 16 bits
11324 + int np_timersnapl; // read only, 16 bits
11325 + int np_timersnaph; // read only, 16 bits
11328 +// Timer Register Bits
11331 + np_timerstatus_run_bit = 1, // timer is running
11332 + np_timerstatus_to_bit = 0, // timer has timed out
11334 + np_timercontrol_stop_bit = 3, // stop the timer
11335 + np_timercontrol_start_bit = 2, // start the timer
11336 + np_timercontrol_cont_bit = 1, // continous mode
11337 + np_timercontrol_ito_bit = 0, // enable time out interrupt
11339 + np_timerstatus_run_mask = (1<<1), // timer is running
11340 + np_timerstatus_to_mask = (1<<0), // timer has timed out
11342 + np_timercontrol_stop_mask = (1<<3), // stop the timer
11343 + np_timercontrol_start_mask = (1<<2), // start the timer
11344 + np_timercontrol_cont_mask = (1<<1), // continous mode
11345 + np_timercontrol_ito_mask = (1<<0) // enable time out interrupt
11349 +int nr_timer_milliseconds(void); // Starts on first call, hogs timer1.
11351 --- linux/include/asm-nios2nommu/timex.h
11352 +++ linux/include/asm-nios2nommu/timex.h
11354 +#ifndef _ASMNIOS2NOMMU_TIMEX_H
11355 +#define _ASMNIOS2NOMMU_TIMEX_H
11357 +/*--------------------------------------------------------------------
11359 + * include/asm-nios2nommu/timex.h
11361 + * timex specifications
11363 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11365 + * Copyright (C) 2004 Microtronix Datacom Ltd
11367 + * This program is free software; you can redistribute it and/or modify
11368 + * it under the terms of the GNU General Public License as published by
11369 + * the Free Software Foundation; either version 2 of the License, or
11370 + * (at your option) any later version.
11372 + * This program is distributed in the hope that it will be useful,
11373 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11374 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11375 + * GNU General Public License for more details.
11378 + * Jan/20/2004 dgt NiosII
11380 + ---------------------------------------------------------------------*/
11383 +#include <asm/nios.h>
11386 +#define CLOCK_TICK_RATE nasys_clock_freq /* Underlying HZ */
11388 +#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
11390 +#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
11391 + (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
11392 + << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
11394 +typedef unsigned long cycles_t;
11396 +static inline cycles_t get_cycles(void)
11402 --- linux/include/asm-nios2nommu/tlb.h
11403 +++ linux/include/asm-nios2nommu/tlb.h
11405 +#ifndef __NIOS_TLB_H__
11406 +#define __NIOS_TLB_H__
11408 +/*--------------------------------------------------------------------
11410 + * include/asm-nios2nommu/tlb.h
11412 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11414 + * Copyright (C) 2003 Microtronix Datacom Ltd
11415 + * Copyright (C) 2002 NEC Corporation
11416 + * Copyright (C) 2002 Miles Bader <miles@gnu.org>
11418 + * This program is free software; you can redistribute it and/or modify
11419 + * it under the terms of the GNU General Public License as published by
11420 + * the Free Software Foundation; either version 2 of the License, or
11421 + * (at your option) any later version.
11423 + * This program is distributed in the hope that it will be useful,
11424 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11425 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11426 + * GNU General Public License for more details.
11429 + * Written by Miles Bader <miles@gnu.org>
11430 + * Jan/20/2004 dgt NiosII
11432 + ---------------------------------------------------------------------*/
11434 +#define tlb_flush(tlb) ((void)0)
11436 +#include <asm-generic/tlb.h>
11438 +#endif /* __NIOS_TLB_H__ */
11440 --- linux/include/asm-nios2nommu/tlbflush.h
11441 +++ linux/include/asm-nios2nommu/tlbflush.h
11443 +#ifndef _NIOS2NOMMU_TLBFLUSH_H
11444 +#define _NIOS2NOMMU_TLBFLUSH_H
11446 +/*--------------------------------------------------------------------
11448 + * include/asm-nios2nommu/tlbflush.h
11450 + * Ported from m68knommu.
11452 + * Copyright (C) 2003 Microtronix Datacom Ltd.
11454 + * All rights reserved.
11456 + * This program is free software; you can redistribute it and/or modify
11457 + * it under the terms of the GNU General Public License as published by
11458 + * the Free Software Foundation; either version 2 of the License, or
11459 + * (at your option) any later version.
11461 + * This program is distributed in the hope that it will be useful, but
11462 + * WITHOUT ANY WARRANTY; without even the implied warranty of
11463 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
11464 + * NON INFRINGEMENT. See the GNU General Public License for more
11467 + * You should have received a copy of the GNU General Public License
11468 + * along with this program; if not, write to the Free Software
11469 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
11472 + * Jan/20/2004 dgt NiosII
11474 + ---------------------------------------------------------------------*/
11476 +#include <asm/setup.h>
11479 + * flush all user-space atc entries.
11481 +static inline void __flush_tlb(void)
11486 +static inline void __flush_tlb_one(unsigned long addr)
11491 +#define flush_tlb() __flush_tlb()
11494 + * flush all atc entries (both kernel and user-space entries).
11496 +static inline void flush_tlb_all(void)
11501 +static inline void flush_tlb_mm(struct mm_struct *mm)
11506 +static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
11511 +static inline void flush_tlb_range(struct mm_struct *mm,
11512 + unsigned long start, unsigned long end)
11517 +extern inline void flush_tlb_kernel_page(unsigned long addr)
11522 +extern inline void flush_tlb_pgtables(struct mm_struct *mm,
11523 + unsigned long start, unsigned long end)
11528 +#endif /* _NIOS2NOMMU_TLBFLUSH_H */
11529 --- linux/include/asm-nios2nommu/topology.h
11530 +++ linux/include/asm-nios2nommu/topology.h
11532 +#ifndef _ASM_NIOS2NOMMU_TOPOLOGY_H
11533 +#define _ASM_NIOS2NOMMU_TOPOLOGY_H
11535 +/*--------------------------------------------------------------------
11537 + * include/asm-nios2nommu/topology.h
11539 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11541 + * Copyright (C) 2004 Microtronix Datacom Ltd
11543 + * This program is free software; you can redistribute it and/or modify
11544 + * it under the terms of the GNU General Public License as published by
11545 + * the Free Software Foundation; either version 2 of the License, or
11546 + * (at your option) any later version.
11548 + * This program is distributed in the hope that it will be useful,
11549 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11550 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11551 + * GNU General Public License for more details.
11554 + * Jan/20/2004 dgt NiosII
11556 + ---------------------------------------------------------------------*/
11559 +#include <asm-generic/topology.h>
11561 +#endif /* _ASM_NIOS2NOMMU_TOPOLOGY_H */
11562 --- linux/include/asm-nios2nommu/traps.h
11563 +++ linux/include/asm-nios2nommu/traps.h
11566 + * Copyright (C) 2004, Microtronix Datacom Ltd.
11568 + * All rights reserved.
11570 + * This program is free software; you can redistribute it and/or modify
11571 + * it under the terms of the GNU General Public License as published by
11572 + * the Free Software Foundation; either version 2 of the License, or
11573 + * (at your option) any later version.
11575 + * This program is distributed in the hope that it will be useful, but
11576 + * WITHOUT ANY WARRANTY; without even the implied warranty of
11577 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
11578 + * NON INFRINGEMENT. See the GNU General Public License for more
11581 + * You should have received a copy of the GNU General Public License
11582 + * along with this program; if not, write to the Free Software
11583 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
11586 +#ifndef _NIOS2_TRAPS_H
11587 +#define _NIOS2_TRAPS_H
11589 +#define TRAP_ID_SYSCALL 0
11590 +#define TRAP_ID_APPDEBUG 1
11591 +#endif /* !(_NIOS2_TRAPS_H) */
11592 --- linux/include/asm-nios2nommu/types.h
11593 +++ linux/include/asm-nios2nommu/types.h
11595 +#ifndef _NIOS_TYPES_H
11596 +#define _NIOS_TYPES_H
11598 +/*--------------------------------------------------------------------
11600 + * include/asm-nios2nommu/types.h
11602 + * Derived from m68knommu
11604 + * Copyright (C) 2004 Microtronix Datacom Ltd
11606 + * This program is free software; you can redistribute it and/or modify
11607 + * it under the terms of the GNU General Public License as published by
11608 + * the Free Software Foundation; either version 2 of the License, or
11609 + * (at your option) any later version.
11611 + * This program is distributed in the hope that it will be useful,
11612 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11613 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11614 + * GNU General Public License for more details.
11617 + * Jan/20/2004 dgt NiosII
11619 + ---------------------------------------------------------------------*/
11623 + * This file is never included by application software unless
11624 + * explicitly requested (e.g., via linux/types.h) in which case the
11625 + * application is Linux specific so (user-) name space pollution is
11626 + * not a major issue. However, for interoperability, libraries still
11627 + * need to be careful to avoid a name clashes.
11630 +#ifndef __ASSEMBLY__
11632 +typedef unsigned short umode_t;
11635 + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
11636 + * header files exported to user space
11639 +typedef __signed__ char __s8;
11640 +typedef unsigned char __u8;
11642 +typedef __signed__ short __s16;
11643 +typedef unsigned short __u16;
11645 +typedef __signed__ int __s32;
11646 +typedef unsigned int __u32;
11648 +#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
11649 +typedef __signed__ long long __s64;
11650 +typedef unsigned long long __u64;
11653 +#endif /* __ASSEMBLY__ */
11656 + * These aren't exported outside the kernel to avoid name space clashes
11660 +#define BITS_PER_LONG 32
11662 +#ifndef __ASSEMBLY__
11664 +typedef signed char s8;
11665 +typedef unsigned char u8;
11667 +typedef signed short s16;
11668 +typedef unsigned short u16;
11670 +typedef signed int s32;
11671 +typedef unsigned int u32;
11673 +typedef signed long long s64;
11674 +typedef unsigned long long u64;
11676 +/* DMA addresses are always 32-bits wide */
11678 +typedef u32 dma_addr_t;
11679 +typedef u32 dma64_addr_t;
11681 +typedef unsigned short kmem_bufctl_t;
11683 +#endif /* __ASSEMBLY__ */
11685 +#endif /* __KERNEL__ */
11687 +#endif /* _NIOS_TYPES_H */
11688 --- linux/include/asm-nios2nommu/uaccess.h
11689 +++ linux/include/asm-nios2nommu/uaccess.h
11691 +#ifndef __NIOS2NOMMU_UACCESS_H
11692 +#define __NIOS2NOMMU_UACCESS_H
11694 +/*--------------------------------------------------------------------
11696 + * asm-nios2nommu/uaccess.h
11698 + * User space memory access functions
11700 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
11702 + * Copyright (C) 2004 Microtronix Datacom Ltd
11704 + * This program is free software; you can redistribute it and/or modify
11705 + * it under the terms of the GNU General Public License as published by
11706 + * the Free Software Foundation; either version 2 of the License, or
11707 + * (at your option) any later version.
11709 + * This program is distributed in the hope that it will be useful,
11710 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11711 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11712 + * GNU General Public License for more details.
11715 + * Ported from asm-m68knommu/uaccess.h --wentao
11716 + * Jan/20/2004 dgt NiosII
11718 + ---------------------------------------------------------------------*/
11721 +#include <linux/sched.h>
11722 +#include <linux/mm.h>
11723 +#include <asm/segment.h>
11724 +#include <asm/nios.h>
11726 +#define VERIFY_READ 0
11727 +#define VERIFY_WRITE 1
11729 +#define access_ok(type,addr,size) _access_ok((unsigned long)(addr),(size))
11731 +static inline int _access_ok(unsigned long addr, unsigned long size)
11733 + return (((unsigned long)addr < (unsigned long)nasys_program_mem_end) &&
11734 + (((unsigned long)addr >= (unsigned long)nasys_program_mem)));
11737 +extern inline int verify_area(int type, const void * addr, unsigned long size)
11739 + return access_ok(type,addr,size)?0:-EFAULT;
11743 + * The exception table consists of pairs of addresses: the first is the
11744 + * address of an instruction that is allowed to fault, and the second is
11745 + * the address at which the program should continue. No registers are
11746 + * modified, so it is entirely up to the continuation code to figure out
11749 + * All the routines below use bits of fixup code that are out of line
11750 + * with the main instruction path. This means when everything is well,
11751 + * we don't even have to jump over them. Further, they do not intrude
11752 + * on our cache or tlb entries.
11755 +#define ARCH_HAS_SEARCH_EXTABLE
11758 +struct exception_table_entry
11760 + unsigned long insn, fixup;
11763 +/* Returns 0 if exception not found and fixup otherwise. */
11764 +extern unsigned long search_exception_table(unsigned long);
11768 + * These are the main single-value transfer routines. They automatically
11769 + * use the right size if we just have the right pointer type.
11772 +#define put_user(x, ptr) \
11774 + int __pu_err = 0; \
11775 + typeof(*(ptr)) __pu_val = (x); \
11776 + switch (sizeof (*(ptr))) { \
11781 + memcpy(ptr, &__pu_val, sizeof (*(ptr))); \
11784 + __pu_err = __put_user_bad(); \
11789 +#define __put_user(x, ptr) put_user(x, ptr)
11791 +extern int __put_user_bad(void);
11794 + * Tell gcc we read from memory instead of writing: this is because
11795 + * we do not write to any memory gcc knows about, so there are no
11796 + * aliasing issues.
11799 +#define __ptr(x) ((unsigned long *)(x))
11801 +#define get_user(x, ptr) \
11803 + int __gu_err = 0; \
11804 + typeof(*(ptr)) __gu_val = 0; \
11805 + switch (sizeof(*(ptr))) { \
11810 + memcpy(&__gu_val, ptr, sizeof (*(ptr))); \
11814 + __gu_err = __get_user_bad(); \
11817 + (x) = __gu_val; \
11820 +#define __get_user(x, ptr) get_user(x, ptr)
11822 +extern int __get_user_bad(void);
11824 +#define copy_from_user(to, from, n) (memcpy(to, from, n), 0)
11825 +#define copy_to_user(to, from, n) (memcpy(to, from, n), 0)
11827 +#define __copy_from_user(to, from, n) copy_from_user(to, from, n)
11828 +#define __copy_to_user(to, from, n) copy_to_user(to, from, n)
11829 +#define __copy_to_user_inatomic __copy_to_user
11830 +#define __copy_from_user_inatomic __copy_from_user
11832 +#define copy_to_user_ret(to,from,n,retval) ({ if (copy_to_user(to,from,n)) return retval; })
11834 +#define copy_from_user_ret(to,from,n,retval) ({ if (copy_from_user(to,from,n)) return retval; })
11837 + * Copy a null terminated string from userspace.
11840 +static inline long
11841 +strncpy_from_user(char *dst, const char *src, long count)
11844 + strncpy(dst, src, count);
11845 + for (tmp = dst; *tmp && count > 0; tmp++, count--)
11847 + return(tmp - dst); /* DAVIDM should we count a NUL ? check getname */
11851 + * Return the size of a string (including the ending 0)
11853 + * Return 0 on exception, a value greater than N if too long
11855 +static inline long strnlen_user(const char *src, long n)
11857 + return(strlen(src) + 1); /* DAVIDM make safer */
11860 +#define strlen_user(str) strnlen_user(str, 32767)
11866 +static inline unsigned long
11867 +clear_user(void *to, unsigned long n)
11869 + memset(to, 0, n);
11873 +#endif /* _NIOS2NOMMU_UACCESS_H */
11874 --- linux/include/asm-nios2nommu/uart_struct.h
11875 +++ linux/include/asm-nios2nommu/uart_struct.h
11879 +typedef volatile struct
11881 + int np_uartrxdata; // Read-only, 8-bit
11882 + int np_uarttxdata; // Write-only, 8-bit
11883 + int np_uartstatus; // Read-only, 8-bit
11884 + int np_uartcontrol; // Read/Write, 9-bit
11885 + int np_uartdivisor; // Read/Write, 16-bit, optional
11886 + int np_uartendofpacket; // Read/Write, end-of-packet character
11889 +// UART Status Register Bits
11892 + np_uartstatus_eop_bit = 12,
11893 + np_uartstatus_cts_bit = 11,
11894 + np_uartstatus_dcts_bit = 10,
11895 + np_uartstatus_e_bit = 8,
11896 + np_uartstatus_rrdy_bit = 7,
11897 + np_uartstatus_trdy_bit = 6,
11898 + np_uartstatus_tmt_bit = 5,
11899 + np_uartstatus_toe_bit = 4,
11900 + np_uartstatus_roe_bit = 3,
11901 + np_uartstatus_brk_bit = 2,
11902 + np_uartstatus_fe_bit = 1,
11903 + np_uartstatus_pe_bit = 0,
11905 + np_uartstatus_eop_mask = (1<<12),
11906 + np_uartstatus_cts_mask = (1<<11),
11907 + np_uartstatus_dcts_mask = (1<<10),
11908 + np_uartstatus_e_mask = (1<<8),
11909 + np_uartstatus_rrdy_mask = (1<<7),
11910 + np_uartstatus_trdy_mask = (1<<6),
11911 + np_uartstatus_tmt_mask = (1<<5),
11912 + np_uartstatus_toe_mask = (1<<4),
11913 + np_uartstatus_roe_mask = (1<<3),
11914 + np_uartstatus_brk_mask = (1<<2),
11915 + np_uartstatus_fe_mask = (1<<1),
11916 + np_uartstatus_pe_mask = (1<<0)
11919 +// UART Control Register Bits
11922 + np_uartcontrol_ieop_bit = 12,
11923 + np_uartcontrol_rts_bit = 11,
11924 + np_uartcontrol_idcts_bit = 10,
11925 + np_uartcontrol_tbrk_bit = 9,
11926 + np_uartcontrol_ie_bit = 8,
11927 + np_uartcontrol_irrdy_bit = 7,
11928 + np_uartcontrol_itrdy_bit = 6,
11929 + np_uartcontrol_itmt_bit = 5,
11930 + np_uartcontrol_itoe_bit = 4,
11931 + np_uartcontrol_iroe_bit = 3,
11932 + np_uartcontrol_ibrk_bit = 2,
11933 + np_uartcontrol_ife_bit = 1,
11934 + np_uartcontrol_ipe_bit = 0,
11936 + np_uartcontrol_ieop_mask = (1<<12),
11937 + np_uartcontrol_rts_mask = (1<<11),
11938 + np_uartcontrol_idcts_mask = (1<<10),
11939 + np_uartcontrol_tbrk_mask = (1<<9),
11940 + np_uartcontrol_ie_mask = (1<<8),
11941 + np_uartcontrol_irrdy_mask = (1<<7),
11942 + np_uartcontrol_itrdy_mask = (1<<6),
11943 + np_uartcontrol_itmt_mask = (1<<5),
11944 + np_uartcontrol_itoe_mask = (1<<4),
11945 + np_uartcontrol_iroe_mask = (1<<3),
11946 + np_uartcontrol_ibrk_mask = (1<<2),
11947 + np_uartcontrol_ife_mask = (1<<1),
11948 + np_uartcontrol_ipe_mask = (1<<0)
11952 +int nr_uart_rxchar(np_uart *uartBase); // 0 for default UART
11953 +void nr_uart_txcr(void);
11954 +void nr_uart_txchar(int c,np_uart *uartBase); // 0 for default UART
11955 +void nr_uart_txhex(int x); // 16 or 32 bits
11956 +void nr_uart_txhex16(short x);
11957 +void nr_uart_txhex32(long x);
11958 +void nr_uart_txstring(char *s);
11960 --- linux/include/asm-nios2nommu/ucontext.h
11961 +++ linux/include/asm-nios2nommu/ucontext.h
11963 +#ifndef _NIOSKNOMMU_UCONTEXT_H
11964 +#define _NIOSKNOMMU_UCONTEXT_H
11966 +/*--------------------------------------------------------------------
11968 + * include/asm-nios2nommu/ucontext.h
11970 + * Derived from M68knommu
11972 + * Copyright (C) 2004 Microtronix Datacom Ltd
11974 + * This program is free software; you can redistribute it and/or modify
11975 + * it under the terms of the GNU General Public License as published by
11976 + * the Free Software Foundation; either version 2 of the License, or
11977 + * (at your option) any later version.
11979 + * This program is distributed in the hope that it will be useful,
11980 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11981 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11982 + * GNU General Public License for more details.
11985 + * Jan/20/2004 dgt NiosII
11987 + ---------------------------------------------------------------------*/
11990 +typedef int greg_t;
11992 +typedef greg_t gregset_t[NGREG];
11995 +typedef struct fpregset {
11999 + int f_fpregs[8][3];
12005 + int status_extension;
12008 + fpregset_t fpregs;
12012 +#define MCONTEXT_VERSION 2
12015 + unsigned long uc_flags;
12016 + struct ucontext *uc_link;
12017 + stack_t uc_stack;
12018 + struct mcontext uc_mcontext;
12020 + unsigned long uc_filler[80];
12022 + sigset_t uc_sigmask; /* mask last for extensibility */
12026 --- linux/include/asm-nios2nommu/unaligned.h
12027 +++ linux/include/asm-nios2nommu/unaligned.h
12029 +#ifndef __NIOS_UNALIGNED_H
12030 +#define __NIOS_UNALIGNED_H
12032 +/*--------------------------------------------------------------------
12034 + * include/asm-nios2nommu/unaligned.h
12036 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
12038 + * Copyright (C) 2004 Microtronix Datacom Ltd
12040 + * This program is free software; you can redistribute it and/or modify
12041 + * it under the terms of the GNU General Public License as published by
12042 + * the Free Software Foundation; either version 2 of the License, or
12043 + * (at your option) any later version.
12045 + * This program is distributed in the hope that it will be useful,
12046 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12047 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12048 + * GNU General Public License for more details.
12051 + * Jan/20/2004 dgt NiosII
12053 + ---------------------------------------------------------------------*/
12057 + * The nios cannot do unaligned accesses itself.
12060 +#define get_unaligned(ptr) ({ \
12061 + typeof((*(ptr))) x; \
12062 + memcpy(&x, (void*)ptr, sizeof(*(ptr))); \
12066 +#define put_unaligned(val, ptr) ({ \
12067 + typeof((*(ptr))) x = val; \
12068 + memcpy((void*)ptr, &x, sizeof(*(ptr))); \
12071 +#endif /* __NIOS_UNALIGNED_H */
12072 --- linux/include/asm-nios2nommu/unistd.h
12073 +++ linux/include/asm-nios2nommu/unistd.h
12075 +#ifndef _ASM_NIOS_UNISTD_H_
12076 +#define _ASM_NIOS_UNISTD_H_
12078 +/*--------------------------------------------------------------------
12080 + * include/asm-nios2nommu/unistd.h
12082 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
12084 + * Copyright (C) 2004 Microtronix Datacom Ltd
12086 + * This program is free software; you can redistribute it and/or modify
12087 + * it under the terms of the GNU General Public License as published by
12088 + * the Free Software Foundation; either version 2 of the License, or
12089 + * (at your option) any later version.
12091 + * This program is distributed in the hope that it will be useful,
12092 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12093 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12094 + * GNU General Public License for more details.
12097 + * //vic - kernel_thread moved to process.c
12098 + * Jan/20/2004 dgt NiosII
12100 + ---------------------------------------------------------------------*/
12103 +#include <asm/traps.h>
12105 +/* TRAP isr expects the trap# (syscall=#TRAP_ID_SYSCALL) in r2,
12106 + * the syscall # in r3, and arguments in r4, r5, ...
12107 + * Return argument expected in r2.
12110 +#define __NR_restart_syscall 0
12111 +#define __NR_exit 1
12112 +#define __NR_fork 2
12113 +#define __NR_read 3
12114 +#define __NR_write 4
12115 +#define __NR_open 5
12116 +#define __NR_close 6
12117 +#define __NR_waitpid 7
12118 +#define __NR_creat 8
12119 +#define __NR_link 9
12120 +#define __NR_unlink 10
12121 +#define __NR_execve 11
12122 +#define __NR_chdir 12
12123 +#define __NR_time 13
12124 +#define __NR_mknod 14
12125 +#define __NR_chmod 15
12126 +#define __NR_chown 16
12127 +#define __NR_break 17
12128 +#define __NR_oldstat 18
12129 +#define __NR_lseek 19
12130 +#define __NR_getpid 20
12131 +#define __NR_mount 21
12132 +#define __NR_umount 22
12133 +#define __NR_setuid 23
12134 +#define __NR_getuid 24
12135 +#define __NR_stime 25
12136 +#define __NR_ptrace 26
12137 +#define __NR_alarm 27
12138 +#define __NR_oldfstat 28
12139 +#define __NR_pause 29
12140 +#define __NR_utime 30
12141 +#define __NR_stty 31
12142 +#define __NR_gtty 32
12143 +#define __NR_access 33
12144 +#define __NR_nice 34
12145 +#define __NR_ftime 35
12146 +#define __NR_sync 36
12147 +#define __NR_kill 37
12148 +#define __NR_rename 38
12149 +#define __NR_mkdir 39
12150 +#define __NR_rmdir 40
12151 +#define __NR_dup 41
12152 +#define __NR_pipe 42
12153 +#define __NR_times 43
12154 +#define __NR_prof 44
12155 +#define __NR_brk 45
12156 +#define __NR_setgid 46
12157 +#define __NR_getgid 47
12158 +#define __NR_signal 48
12159 +#define __NR_geteuid 49
12160 +#define __NR_getegid 50
12161 +#define __NR_acct 51
12162 +#define __NR_umount2 52 //vic #define __NR_phys 52
12163 +#define __NR_lock 53
12164 +#define __NR_ioctl 54
12165 +#define __NR_fcntl 55
12166 +#define __NR_mpx 56
12167 +#define __NR_setpgid 57
12168 +#define __NR_ulimit 58
12169 +#define __NR_oldolduname 59
12170 +#define __NR_umask 60
12171 +#define __NR_chroot 61
12172 +#define __NR_ustat 62
12173 +#define __NR_dup2 63
12174 +#define __NR_getppid 64
12175 +#define __NR_getpgrp 65
12176 +#define __NR_setsid 66
12177 +#define __NR_sigaction 67
12178 +#define __NR_sgetmask 68
12179 +#define __NR_ssetmask 69
12180 +#define __NR_setreuid 70
12181 +#define __NR_setregid 71
12182 +#define __NR_sigsuspend 72
12183 +#define __NR_sigpending 73
12184 +#define __NR_sethostname 74
12185 +#define __NR_setrlimit 75
12186 +#define __NR_getrlimit 76
12187 +#define __NR_getrusage 77
12188 +#define __NR_gettimeofday 78
12189 +#define __NR_settimeofday 79
12190 +#define __NR_getgroups 80
12191 +#define __NR_setgroups 81
12192 +#define __NR_select 82
12193 +#define __NR_symlink 83
12194 +#define __NR_oldlstat 84
12195 +#define __NR_readlink 85
12196 +#define __NR_uselib 86
12197 +#define __NR_swapon 87
12198 +#define __NR_reboot 88
12199 +#define __NR_readdir 89
12200 +#define __NR_mmap 90
12201 +#define __NR_munmap 91
12202 +#define __NR_truncate 92
12203 +#define __NR_ftruncate 93
12204 +#define __NR_fchmod 94
12205 +#define __NR_fchown 95
12206 +#define __NR_getpriority 96
12207 +#define __NR_setpriority 97
12208 +#define __NR_profil 98
12209 +#define __NR_statfs 99
12210 +#define __NR_fstatfs 100
12211 +#define __NR_ioperm 101
12212 +#define __NR_socketcall 102
12213 +#define __NR_syslog 103
12214 +#define __NR_setitimer 104
12215 +#define __NR_getitimer 105
12216 +#define __NR_stat 106
12217 +#define __NR_lstat 107
12218 +#define __NR_fstat 108
12219 +#define __NR_olduname 109
12220 +#define __NR_iopl /* 110 */ not supported
12221 +#define __NR_vhangup 111
12222 +#define __NR_idle /* 112 */ Obsolete
12223 +#define __NR_vm86 /* 113 */ not supported
12224 +#define __NR_wait4 114
12225 +#define __NR_swapoff 115
12226 +#define __NR_sysinfo 116
12227 +#define __NR_ipc 117
12228 +#define __NR_fsync 118
12229 +#define __NR_sigreturn 119
12230 +#define __NR_clone 120
12231 +#define __NR_setdomainname 121
12232 +#define __NR_uname 122
12233 +#define __NR_cacheflush 123
12234 +#define __NR_adjtimex 124
12235 +#define __NR_mprotect 125
12236 +#define __NR_sigprocmask 126
12237 +#define __NR_create_module 127
12238 +#define __NR_init_module 128
12239 +#define __NR_delete_module 129
12240 +#define __NR_get_kernel_syms 130
12241 +#define __NR_quotactl 131
12242 +#define __NR_getpgid 132
12243 +#define __NR_fchdir 133
12244 +#define __NR_bdflush 134
12245 +#define __NR_sysfs 135
12246 +#define __NR_personality 136
12247 +#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
12248 +#define __NR_setfsuid 138
12249 +#define __NR_setfsgid 139
12250 +#define __NR__llseek 140
12251 +#define __NR_getdents 141
12252 +#define __NR__newselect 142
12253 +#define __NR_flock 143
12254 +#define __NR_msync 144
12255 +#define __NR_readv 145
12256 +#define __NR_writev 146
12257 +#define __NR_getsid 147
12258 +#define __NR_fdatasync 148
12259 +#define __NR__sysctl 149
12260 +#define __NR_mlock 150
12261 +#define __NR_munlock 151
12262 +#define __NR_mlockall 152
12263 +#define __NR_munlockall 153
12264 +#define __NR_sched_setparam 154
12265 +#define __NR_sched_getparam 155
12266 +#define __NR_sched_setscheduler 156
12267 +#define __NR_sched_getscheduler 157
12268 +#define __NR_sched_yield 158
12269 +#define __NR_sched_get_priority_max 159
12270 +#define __NR_sched_get_priority_min 160
12271 +#define __NR_sched_rr_get_interval 161
12272 +#define __NR_nanosleep 162
12273 +#define __NR_mremap 163
12274 +#define __NR_setresuid 164
12275 +#define __NR_getresuid 165
12276 +#define __NR_getpagesize 166
12277 +#define __NR_query_module 167
12278 +#define __NR_poll 168
12279 +#define __NR_nfsservctl 169
12280 +#define __NR_setresgid 170
12281 +#define __NR_getresgid 171
12282 +#define __NR_prctl 172
12283 +#define __NR_rt_sigreturn 173
12284 +#define __NR_rt_sigaction 174
12285 +#define __NR_rt_sigprocmask 175
12286 +#define __NR_rt_sigpending 176
12287 +#define __NR_rt_sigtimedwait 177
12288 +#define __NR_rt_sigqueueinfo 178
12289 +#define __NR_rt_sigsuspend 179
12290 +#define __NR_pread 180
12291 +#define __NR_pwrite 181
12292 +#define __NR_lchown 182
12293 +#define __NR_getcwd 183
12294 +#define __NR_capget 184
12295 +#define __NR_capset 185
12296 +#define __NR_sigaltstack 186
12297 +#define __NR_sendfile 187
12298 +#define __NR_getpmsg 188 /* some people actually want streams */
12299 +#define __NR_putpmsg 189 /* some people actually want streams */
12300 +#define __NR_vfork 190
12301 +#define __NR_ugetrlimit 191
12302 +#define __NR_mmap2 192
12303 +#define __NR_truncate64 193
12304 +#define __NR_ftruncate64 194
12305 +#define __NR_stat64 195
12306 +#define __NR_lstat64 196
12307 +#define __NR_fstat64 197
12308 +#define __NR_chown32 198
12309 +#define __NR_getuid32 199
12310 +#define __NR_getgid32 200
12311 +#define __NR_geteuid32 201
12312 +#define __NR_getegid32 202
12313 +#define __NR_setreuid32 203
12314 +#define __NR_setregid32 204
12315 +#define __NR_getgroups32 205
12316 +#define __NR_setgroups32 206
12317 +#define __NR_fchown32 207
12318 +#define __NR_setresuid32 208
12319 +#define __NR_getresuid32 209
12320 +#define __NR_setresgid32 210
12321 +#define __NR_getresgid32 211
12322 +#define __NR_lchown32 212
12323 +#define __NR_setuid32 213
12324 +#define __NR_setgid32 214
12325 +#define __NR_setfsuid32 215
12326 +#define __NR_setfsgid32 216
12327 +#define __NR_pivot_root 217
12330 +#define __NR_getdents64 220
12331 +#define __NR_gettid 221
12332 +#define __NR_tkill 222
12333 +#define __NR_setxattr 223
12334 +#define __NR_lsetxattr 224
12335 +#define __NR_fsetxattr 225
12336 +#define __NR_getxattr 226
12337 +#define __NR_lgetxattr 227
12338 +#define __NR_fgetxattr 228
12339 +#define __NR_listxattr 229
12340 +#define __NR_llistxattr 230
12341 +#define __NR_flistxattr 231
12342 +#define __NR_removexattr 232
12343 +#define __NR_lremovexattr 233
12344 +#define __NR_fremovexattr 234
12345 +#define __NR_futex 235
12346 +#define __NR_sendfile64 236
12347 +#define __NR_mincore 237
12348 +#define __NR_madvise 238
12349 +#define __NR_fcntl64 239
12350 +#define __NR_readahead 240
12351 +#define __NR_io_setup 241
12352 +#define __NR_io_destroy 242
12353 +#define __NR_io_getevents 243
12354 +#define __NR_io_submit 244
12355 +#define __NR_io_cancel 245
12356 +#define __NR_fadvise64 246
12357 +#define __NR_exit_group 247
12358 +#define __NR_lookup_dcookie 248
12359 +#define __NR_epoll_create 249
12360 +#define __NR_epoll_ctl 250
12361 +#define __NR_epoll_wait 251
12362 +#define __NR_remap_file_pages 252
12363 +#define __NR_set_tid_address 253
12364 +#define __NR_timer_create 254
12365 +#define __NR_timer_settime 255
12366 +#define __NR_timer_gettime 256
12367 +#define __NR_timer_getoverrun 257
12368 +#define __NR_timer_delete 258
12369 +#define __NR_clock_settime 259
12370 +#define __NR_clock_gettime 260
12371 +#define __NR_clock_getres 261
12372 +#define __NR_clock_nanosleep 262
12373 +#define __NR_statfs64 263
12374 +#define __NR_fstatfs64 264
12375 +#define __NR_tgkill 265
12376 +#define __NR_utimes 266
12377 +#define __NR_fadvise64_64 267
12378 +#define __NR_mbind 268
12379 +#define __NR_get_mempolicy 269
12380 +#define __NR_set_mempolicy 270
12381 +#define __NR_mq_open 271
12382 +#define __NR_mq_unlink 272
12383 +#define __NR_mq_timedsend 273
12384 +#define __NR_mq_timedreceive 274
12385 +#define __NR_mq_notify 275
12386 +#define __NR_mq_getsetattr 276
12387 +#define __NR_waitid 277
12388 +#define __NR_sys_setaltroot 278
12389 +#define __NR_add_key 279
12390 +#define __NR_request_key 280
12391 +#define __NR_keyctl 281
12393 +#define NR_syscalls 282
12395 +/* user-visible error numbers are in the range -1 - -122: see
12396 + <asm-nios2nommu/errno.h> */
12398 +#define __syscall_return(type, res) \
12400 + if ((unsigned long)(res) >= (unsigned long)(-125)) { \
12402 + /* avoid using res which is declared to be in \
12403 + register r2; errno might expand to a function \
12404 + call and clobber it. */ \
12406 + int __err = -(res); \
12410 + return (type) (res); \
12413 +#define _syscall0(type,name) \
12418 + __asm__ __volatile__ ( \
12422 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
12423 + " movi r3, %1\n\t" /* __NR_##name */ \
12426 + " mov %0, r2\n\t" /* syscall rtn */ \
12430 + : "=r" (__res) /* %0 */ \
12432 + : "i" (__NR_##name) /* %1 */ \
12433 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
12435 + : "r2" /* Clobbered */ \
12436 + , "r3" /* Clobbered */ \
12439 +__syscall_return(type,__res); \
12442 +//;dgt2;tmp;can we RELY on syscall1 arg a
12443 +//;dgt2;tmp; already being in r4 ?
12444 +#define _syscall1(type,name,atype,a) \
12445 +type name(atype a) \
12449 + __asm__ __volatile__ ( \
12453 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
12454 + " movi r3, %1\n\t" /* __NR_##name */ \
12455 + " mov r4, %3\n\t" /* (long) a */ \
12458 + " mov %0, r2\n\t" /* syscall rtn */ \
12462 + : "=r" (__res) /* %0 */ \
12464 + : "i" (__NR_##name) /* %1 */ \
12465 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
12466 + , "r" ((long) a) /* %3 */ \
12468 + : "r2" /* Clobbered */ \
12469 + , "r3" /* Clobbered */ \
12470 + , "r4" /* Clobbered */ \
12473 +__syscall_return(type,__res); \
12476 +//;dgt2;tmp;can we RELY on syscall2 args a,b
12477 +//;dgt2;tmp; already being in r4,r5 ?
12478 +#define _syscall2(type,name,atype,a,btype,b) \
12479 +type name(atype a,btype b) \
12483 + __asm__ __volatile__ ( \
12487 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
12488 + " movi r3, %1\n\t" /* __NR_##name */ \
12489 + " mov r4, %3\n\t" /* (long) a */ \
12490 + " mov r5, %4\n\t" /* (long) b */ \
12493 + " mov %0, r2\n\t" /* syscall rtn */ \
12497 + : "=r" (__res) /* %0 */ \
12499 + : "i" (__NR_##name) /* %1 */ \
12500 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
12501 + , "r" ((long) a) /* %3 */ \
12502 + , "r" ((long) b) /* %4 */ \
12504 + : "r2" /* Clobbered */ \
12505 + , "r3" /* Clobbered */ \
12506 + , "r4" /* Clobbered */ \
12507 + , "r5" /* Clobbered */ \
12510 +__syscall_return(type,__res); \
12513 +//;dgt2;tmp;can we RELY on syscall3 args a,b,c
12514 +//;dgt2;tmp; already being in r4,r5,r6 ?
12515 +#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
12516 +type name(atype a,btype b,ctype c) \
12520 + __asm__ __volatile__ ( \
12524 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
12525 + " movi r3, %1\n\t" /* __NR_##name */ \
12526 + " mov r4, %3\n\t" /* (long) a */ \
12527 + " mov r5, %4\n\t" /* (long) b */ \
12528 + " mov r6, %5\n\t" /* (long) c */ \
12531 + " mov %0, r2\n\t" /* syscall rtn */ \
12535 + : "=r" (__res) /* %0 */ \
12537 + : "i" (__NR_##name) /* %1 */ \
12538 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
12539 + , "r" ((long) a) /* %3 */ \
12540 + , "r" ((long) b) /* %4 */ \
12541 + , "r" ((long) c) /* %5 */ \
12543 + : "r2" /* Clobbered */ \
12544 + , "r3" /* Clobbered */ \
12545 + , "r4" /* Clobbered */ \
12546 + , "r5" /* Clobbered */ \
12547 + , "r6" /* Clobbered */ \
12550 +__syscall_return(type,__res); \
12553 +//;dgt2;tmp;can we RELY on syscall4 args a,b,c,d
12554 +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
12555 +#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
12556 +type name (atype a, btype b, ctype c, dtype d) \
12560 + __asm__ __volatile__ ( \
12564 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
12565 + " movi r3, %1\n\t" /* __NR_##name */ \
12566 + " mov r4, %3\n\t" /* (long) a */ \
12567 + " mov r5, %4\n\t" /* (long) b */ \
12568 + " mov r6, %5\n\t" /* (long) c */ \
12569 + " mov r7, %6\n\t" /* (long) d */ \
12572 + " mov %0, r2\n\t" /* syscall rtn */ \
12576 + : "=r" (__res) /* %0 */ \
12578 + : "i" (__NR_##name) /* %1 */ \
12579 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
12580 + , "r" ((long) a) /* %3 */ \
12581 + , "r" ((long) b) /* %4 */ \
12582 + , "r" ((long) c) /* %5 */ \
12583 + , "r" ((long) d) /* %6 */ \
12585 + : "r2" /* Clobbered */ \
12586 + , "r3" /* Clobbered */ \
12587 + , "r4" /* Clobbered */ \
12588 + , "r5" /* Clobbered */ \
12589 + , "r6" /* Clobbered */ \
12590 + , "r7" /* Clobbered */ \
12593 +__syscall_return(type,__res); \
12596 +//;dgt2;tmp;can we RELY on syscall5 args a,b,c,d
12597 +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
12598 +#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
12599 +type name (atype a,btype b,ctype c,dtype d,etype e) \
12603 + __asm__ __volatile__ ( \
12607 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
12608 + " movi r3, %1\n\t" /* __NR_##name */ \
12609 + " mov r4, %3\n\t" /* (long) a */ \
12610 + " mov r5, %4\n\t" /* (long) b */ \
12611 + " mov r6, %5\n\t" /* (long) c */ \
12612 + " mov r7, %6\n\t" /* (long) c */ \
12613 + " mov r8, %7\n\t" /* (long) e */ \
12616 + " mov %0, r2\n\t" /* syscall rtn */ \
12620 + : "=r" (__res) /* %0 */ \
12622 + : "i" (__NR_##name) /* %1 */ \
12623 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
12624 + , "r" ((long) a) /* %3 */ \
12625 + , "r" ((long) b) /* %4 */ \
12626 + , "r" ((long) c) /* %5 */ \
12627 + , "r" ((long) d) /* %6 */ \
12628 + , "r" ((long) e) /* %7 */ \
12630 + : "r2" /* Clobbered */ \
12631 + , "r3" /* Clobbered */ \
12632 + , "r4" /* Clobbered */ \
12633 + , "r5" /* Clobbered */ \
12634 + , "r6" /* Clobbered */ \
12635 + , "r7" /* Clobbered */ \
12636 + , "r8" /* Clobbered */ \
12639 +__syscall_return(type,__res); \
12642 +//;dgt2;tmp;can we RELY on syscall6 args a,b,c,d
12643 +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
12644 +#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
12645 +type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \
12649 + __asm__ __volatile__ ( \
12653 + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
12654 + " movi r3, %1\n\t" /* __NR_##name */ \
12655 + " mov r4, %3\n\t" /* (long) a */ \
12656 + " mov r5, %4\n\t" /* (long) b */ \
12657 + " mov r6, %5\n\t" /* (long) c */ \
12658 + " mov r7, %6\n\t" /* (long) c */ \
12659 + " mov r8, %7\n\t" /* (long) e */ \
12660 + " mov r9, %8\n\t" /* (long) f */ \
12663 + " mov %0, r2\n\t" /* syscall rtn */ \
12667 + : "=r" (__res) /* %0 */ \
12669 + : "i" (__NR_##name) /* %1 */ \
12670 + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
12671 + , "r" ((long) a) /* %3 */ \
12672 + , "r" ((long) b) /* %4 */ \
12673 + , "r" ((long) c) /* %5 */ \
12674 + , "r" ((long) d) /* %6 */ \
12675 + , "r" ((long) e) /* %7 */ \
12676 + , "r" ((long) f) /* %8 */ \
12678 + : "r2" /* Clobbered */ \
12679 + , "r3" /* Clobbered */ \
12680 + , "r4" /* Clobbered */ \
12681 + , "r5" /* Clobbered */ \
12682 + , "r6" /* Clobbered */ \
12683 + , "r7" /* Clobbered */ \
12684 + , "r8" /* Clobbered */ \
12685 + , "r9" /* Clobbered */ \
12688 +__syscall_return(type,__res); \
12692 +#define __ARCH_WANT_IPC_PARSE_VERSION
12693 +#define __ARCH_WANT_OLD_READDIR
12694 +#define __ARCH_WANT_OLD_STAT
12695 +#define __ARCH_WANT_STAT64
12696 +#define __ARCH_WANT_SYS_ALARM
12697 +#define __ARCH_WANT_SYS_GETHOSTNAME
12698 +#define __ARCH_WANT_SYS_PAUSE
12699 +#define __ARCH_WANT_SYS_SGETMASK
12700 +#define __ARCH_WANT_SYS_SIGNAL
12701 +#define __ARCH_WANT_SYS_TIME
12702 +#define __ARCH_WANT_SYS_UTIME
12703 +#define __ARCH_WANT_SYS_WAITPID
12704 +#define __ARCH_WANT_SYS_SOCKETCALL
12705 +#define __ARCH_WANT_SYS_FADVISE64
12706 +#define __ARCH_WANT_SYS_GETPGRP
12707 +#define __ARCH_WANT_SYS_LLSEEK
12708 +#define __ARCH_WANT_SYS_NICE
12709 +#define __ARCH_WANT_SYS_OLD_GETRLIMIT
12710 +#define __ARCH_WANT_SYS_OLDUMOUNT
12711 +#define __ARCH_WANT_SYS_SIGPENDING
12712 +#define __ARCH_WANT_SYS_SIGPROCMASK
12713 +#define __ARCH_WANT_SYS_RT_SIGACTION
12716 +#ifdef __KERNEL_SYSCALLS__
12719 + * we need this inline - forking from kernel space will result
12720 + * in NO COPY ON WRITE (!!!), until an execve is executed. This
12721 + * is no problem, but for the stack. This is handled by not letting
12722 + * main() use the stack at all after fork(). Thus, no function
12723 + * calls - which means inline code for fork too, as otherwise we
12724 + * would use the stack upon exit from 'fork()'.
12726 + * Actually only pause and fork are needed inline, so that there
12727 + * won't be any messing with the stack from main(), but we define
12728 + * some others too.
12730 +#define __NR__exit __NR_exit
12731 +static inline _syscall0(int,pause)
12732 +static inline _syscall0(int,sync)
12733 +static inline _syscall0(pid_t,setsid)
12734 +static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
12735 +static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
12736 +static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
12737 +static inline _syscall1(int,dup,int,fd)
12738 +static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
12739 +static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
12740 +static inline _syscall1(int,close,int,fd)
12741 +static inline _syscall1(int,_exit,int,exitcode)
12742 +static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
12743 +static inline _syscall1(int,delete_module,const char *,name)
12745 +static inline pid_t wait(int * wait_stat)
12747 + return waitpid(-1,wait_stat,0);
12753 + * "Conditional" syscalls
12755 + * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
12756 + * but it doesn't work on all toolchains, so we just do it by hand
12758 +#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
12760 +#endif /* _ASM_NIOS_UNISTD_H_ */
12761 --- linux/include/asm-nios2nommu/user.h
12762 +++ linux/include/asm-nios2nommu/user.h
12764 +#ifndef _NIOS2NOMMU_USER_H
12765 +#define _NIOS2NOMMU_USER_H
12767 +/*--------------------------------------------------------------------
12769 + * include/asm-nios2nommu/user.h
12771 + * Derived from M68knommu
12773 + * Copyright (C) 2004 Microtronix Datacom Ltd
12775 + * This program is free software; you can redistribute it and/or modify
12776 + * it under the terms of the GNU General Public License as published by
12777 + * the Free Software Foundation; either version 2 of the License, or
12778 + * (at your option) any later version.
12780 + * This program is distributed in the hope that it will be useful,
12781 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12782 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12783 + * GNU General Public License for more details.
12786 + * Jan/20/2004 dgt NiosII
12788 + ---------------------------------------------------------------------*/
12791 +#include <asm/page.h>
12793 +/* Core file format: The core file is written in such a way that gdb
12794 + can understand it and provide useful information to the user (under
12795 + linux we use the 'trad-core' bfd). There are quite a number of
12796 + obstacles to being able to view the contents of the floating point
12797 + registers, and until these are solved you will not be able to view the
12798 + contents of them. Actually, you can read in the core file and look at
12799 + the contents of the user struct to find out what the floating point
12800 + registers contain.
12801 + The actual file contents are as follows:
12802 + UPAGE: 1 page consisting of a user struct that tells gdb what is present
12803 + in the file. Directly after this is a copy of the task_struct, which
12804 + is currently not used by gdb, but it may come in useful at some point.
12805 + All of the registers are stored as part of the upage. The upage should
12806 + always be only one page.
12807 + DATA: The data area is stored. We use current->end_text to
12808 + current->brk to pick up all of the user variables, plus any memory
12809 + that may have been malloced. No attempt is made to determine if a page
12810 + is demand-zero or if a page is totally unused, we just cover the entire
12811 + range. All of the addresses are rounded in such a way that an integral
12812 + number of pages is written.
12813 + STACK: We need the stack information in order to get a meaningful
12814 + backtrace. We need to write the data from (esp) to
12815 + current->start_stack, so we round each of these off in order to be able
12816 + to write an integer number of pages.
12817 + The minimum core file size is 3 pages, or 12288 bytes.
12820 +struct user_m68kfp_struct {
12821 + unsigned long fpregs[8*3]; /* fp0-fp7 registers */
12822 + unsigned long fpcntl[3]; /* fp control regs */
12825 +/* This is needs more work, probably should look like gdb useage */
12826 +struct user_regs_struct {
12827 + long r1,r2,r3,r4,r5,r6,r7,r8;
12828 + long r9,r10,r11,r12,r13,r14,r15;
12829 + long r16,r17,r18,r19,r20,r21,r22,r23;
12836 + long status_extension;
12841 +/* When the kernel dumps core, it starts by dumping the user struct -
12842 + this will be used by gdb to figure out where the data and stack segments
12843 + are within the file, and what virtual addresses to use. */
12845 +/* We start with the registers, to mimic the way that "memory" is returned
12846 + from the ptrace(3,...) function. */
12847 + struct user_regs_struct regs; /* Where the registers are actually stored */
12848 +/* ptrace does not yet supply these. Someday.... */
12849 + int u_fpvalid; /* True if math co-processor being used. */
12850 + /* for this mess. Not yet used. */
12851 + struct user_m68kfp_struct m68kfp; /* Math Co-processor registers. */
12852 +/* The rest of this junk is to help gdb figure out what goes where */
12853 + unsigned long int u_tsize; /* Text segment size (pages). */
12854 + unsigned long int u_dsize; /* Data segment size (pages). */
12855 + unsigned long int u_ssize; /* Stack segment size (pages). */
12856 + unsigned long start_code; /* Starting virtual address of text. */
12857 + unsigned long start_stack; /* Starting virtual address of stack area.
12858 + This is actually the bottom of the stack,
12859 + the top of the stack is always found in the
12861 + long int signal; /* Signal that caused the core dump. */
12862 + int reserved; /* No longer used */
12863 + struct user_regs_struct *u_ar0;
12864 + /* Used by gdb to help find the values for */
12865 + /* the registers. */
12866 + struct user_m68kfp_struct* u_fpstate; /* Math Co-processor pointer. */
12867 + unsigned long magic; /* To uniquely identify a core file */
12868 + char u_comm[32]; /* User command that was responsible */
12870 +#define NBPG PAGE_SIZE
12872 +#define HOST_TEXT_START_ADDR (u.start_code)
12873 +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
12876 --- linux/include/asm-nios2nommu/virtconvert.h
12877 +++ linux/include/asm-nios2nommu/virtconvert.h
12879 +#ifndef __NIOS_VIRT_CONVERT__
12880 +#define __NIOS_VIRT_CONVERT__
12882 +/*--------------------------------------------------------------------
12884 + * include/asm-nios2nommu/virtconvert.h
12886 + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
12888 + * Copyright (C) 2004 Microtronix Datacom Ltd
12890 + * This program is free software; you can redistribute it and/or modify
12891 + * it under the terms of the GNU General Public License as published by
12892 + * the Free Software Foundation; either version 2 of the License, or
12893 + * (at your option) any later version.
12895 + * This program is distributed in the hope that it will be useful,
12896 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12897 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12898 + * GNU General Public License for more details.
12901 + * Jan/20/2004 dgt NiosII
12903 + ---------------------------------------------------------------------*/
12907 + * Macros used for converting between virtual and physical mappings.
12912 +// #include <linux/config.h>
12913 +#include <asm/setup.h>
12914 +#include <asm/page.h>
12916 +#define mm_ptov(vaddr) ((void *) (vaddr))
12917 +#define mm_vtop(vaddr) ((unsigned long) (vaddr))
12918 +#define phys_to_virt(vaddr) ((void *) (vaddr))
12919 +#define virt_to_phys(vaddr) ((unsigned long) (vaddr))
12921 +#define virt_to_bus virt_to_phys
12922 +#define bus_to_virt phys_to_virt
12924 +#endif /*__KERNEL__ */
12925 +#endif /*__NIOS_VIRT_CONVERT__*/