switch ixp4xx and ubicom32 to 2.6.30, get rid of 2.6.28 files
[openwrt/staging/yousong.git] / toolchain / kernel-headers / patches-2.6.28 / 100-ubicom_headers.patch
1 diff -ruN linux-2.6.28.10_o/arch/ubicom32/configs/IP5160EVAL_defconfig linux-2.6.28.10/arch/ubicom32/configs/IP5160EVAL_defconfig
2 --- linux-2.6.28.10_o/arch/ubicom32/configs/IP5160EVAL_defconfig 1970-01-01 02:00:00.000000000 +0200
3 +++ linux-2.6.28.10/arch/ubicom32/configs/IP5160EVAL_defconfig 2009-08-12 13:08:37.000000000 +0300
4 @@ -0,0 +1,524 @@
5 +#
6 +# Automatically generated make config: don't edit
7 +# Linux kernel version: 2.6.28.10
8 +#
9 +CONFIG_RAMBASE=0x40000000
10 +CONFIG_UBICOM32=y
11 +CONFIG_RAMKERNEL=y
12 +CONFIG_CPU_BIG_ENDIAN=y
13 +CONFIG_FORCE_MAX_ZONEORDER=14
14 +CONFIG_HAVE_CLK=y
15 +# CONFIG_MMU is not set
16 +# CONFIG_FPU is not set
17 +CONFIG_ZONE_DMA=y
18 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
19 +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
20 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
21 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
22 +CONFIG_GENERIC_FIND_NEXT_BIT=y
23 +CONFIG_GENERIC_GPIO=y
24 +CONFIG_GPIOLIB=y
25 +CONFIG_GENERIC_HWEIGHT=y
26 +CONFIG_GENERIC_HARDIRQS=y
27 +CONFIG_STACKTRACE_SUPPORT=y
28 +CONFIG_LOCKDEP_SUPPORT=y
29 +CONFIG_GENERIC_CALIBRATE_DELAY=y
30 +CONFIG_GENERIC_TIME=y
31 +CONFIG_TIME_LOW_RES=y
32 +CONFIG_GENERIC_CLOCKEVENTS=y
33 +CONFIG_NO_IOPORT=y
34 +CONFIG_ARCH_SUPPORTS_AOUT=y
35 +CONFIG_IRQ_PER_CPU=y
36 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
37 +
38 +#
39 +# Processor type and features
40 +#
41 +CONFIG_BRD_32MB=y
42 +
43 +#
44 +# Processor type will be selected by Board
45 +#
46 +CONFIG_UBICOM32_V3=y
47 +
48 +#
49 +# Board
50 +#
51 +# CONFIG_NOBOARD is not set
52 +# CONFIG_IP5170DPF is not set
53 +# CONFIG_IP5160DEV is not set
54 +CONFIG_IP5160EVAL=y
55 +# CONFIG_IP7145DPF is not set
56 +# CONFIG_IP7160RGW is not set
57 +# CONFIG_IP7160BRINGUP is not set
58 +# CONFIG_IP7160DPF is not set
59 +# CONFIG_IP7500MODULE is not set
60 +# CONFIG_IP7500AV is not set
61 +# CONFIG_IP7500MEDIA is not set
62 +
63 +#
64 +# Kernel Options
65 +#
66 +# CONFIG_SMP is not set
67 +CONFIG_TIMER_EXTRA_ALLOC=0
68 +# CONFIG_IRQSTACKS is not set
69 +CONFIG_UBICOM32_OCM_MODULES=y
70 +CONFIG_OCM_MODULES_RESERVATION=41
71 +CONFIG_OCM_MODULES_MAY_CONSUME_REMAINING_CODESPACE=y
72 +CONFIG_HZ=1000
73 +
74 +#
75 +# RAM configuration
76 +#
77 +CONFIG_RAMSIZE=0x02000000
78 +CONFIG_KERNELBASE=0x40400000
79 +
80 +#
81 +# Build options
82 +#
83 +CONFIG_LINKER_RELAXATION=y
84 +
85 +#
86 +# Driver options
87 +#
88 +
89 +#
90 +# PCI Bus
91 +#
92 +# CONFIG_PCI is not set
93 +# CONFIG_ARCH_SUPPORTS_MSI is not set
94 +
95 +#
96 +# Input devices
97 +#
98 +# CONFIG_UBICOM_INPUT is not set
99 +# CONFIG_UBICOM_INPUT_I2C is not set
100 +CONFIG_UBICOM_SWITCH=y
101 +
102 +#
103 +# Misc devices
104 +#
105 +# CONFIG_UBICOM_HID is not set
106 +CONFIG_CMDLINE_BOOL=y
107 +CONFIG_CMDLINE="console=ttyUM0"
108 +# CONFIG_CMDLINE_OVERRIDE is not set
109 +
110 +#
111 +# Kernel hacking
112 +#
113 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
114 +CONFIG_PROTECT_KERNEL=y
115 +# CONFIG_NO_KERNEL_MSG is not set
116 +# CONFIG_EARLY_PRINTK is not set
117 +# CONFIG_STOP_ON_TRAP is not set
118 +# CONFIG_STOP_ON_BUG is not set
119 +# CONFIG_DEBUG_IRQMEASURE is not set
120 +# CONFIG_DEBUG_PCIMEASURE is not set
121 +# CONFIG_ACCESS_OK_CHECKS_ENABLED is not set
122 +CONFIG_UNALIGNED_ACCESS_ENABLED=y
123 +# CONFIG_UNALIGNED_ACCESS_USERSPACE_ONLY is not set
124 +# CONFIG_UNALIGNED_ACCESS_DISABLED is not set
125 +# CONFIG_DEBUG_STACKOVERFLOW is not set
126 +# CONFIG_DEBUG_STACK_USAGE is not set
127 +# CONFIG_PRINTK_TIME is not set
128 +CONFIG_ENABLE_WARN_DEPRECATED=y
129 +CONFIG_ENABLE_MUST_CHECK=y
130 +CONFIG_FRAME_WARN=1024
131 +# CONFIG_MAGIC_SYSRQ is not set
132 +# CONFIG_UNUSED_SYMBOLS is not set
133 +# CONFIG_HEADERS_CHECK is not set
134 +CONFIG_DEBUG_KERNEL=y
135 +# CONFIG_DEBUG_SHIRQ is not set
136 +CONFIG_DETECT_SOFTLOCKUP=y
137 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
138 +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
139 +CONFIG_SCHED_DEBUG=y
140 +# CONFIG_SCHEDSTATS is not set
141 +# CONFIG_TIMER_STATS is not set
142 +# CONFIG_DEBUG_OBJECTS is not set
143 +# CONFIG_DEBUG_SLAB is not set
144 +# CONFIG_DEBUG_SPINLOCK is not set
145 +# CONFIG_DEBUG_MUTEXES is not set
146 +# CONFIG_DEBUG_LOCK_ALLOC is not set
147 +# CONFIG_PROVE_LOCKING is not set
148 +# CONFIG_LOCK_STAT is not set
149 +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
150 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
151 +# CONFIG_DEBUG_KOBJECT is not set
152 +CONFIG_DEBUG_INFO=y
153 +# CONFIG_DEBUG_VM is not set
154 +# CONFIG_DEBUG_WRITECOUNT is not set
155 +# CONFIG_DEBUG_MEMORY_INIT is not set
156 +# CONFIG_DEBUG_LIST is not set
157 +# CONFIG_DEBUG_SG is not set
158 +# CONFIG_FRAME_POINTER is not set
159 +# CONFIG_BOOT_PRINTK_DELAY is not set
160 +# CONFIG_RCU_TORTURE_TEST is not set
161 +# CONFIG_RCU_CPU_STALL_DETECTOR is not set
162 +# CONFIG_BACKTRACE_SELF_TEST is not set
163 +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
164 +# CONFIG_FAULT_INJECTION is not set
165 +# CONFIG_SYSCTL_SYSCALL_CHECK is not set
166 +
167 +#
168 +# Tracers
169 +#
170 +# CONFIG_IRQSOFF_TRACER is not set
171 +# CONFIG_SCHED_TRACER is not set
172 +# CONFIG_CONTEXT_SWITCH_TRACER is not set
173 +# CONFIG_BOOT_TRACER is not set
174 +# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
175 +# CONFIG_SAMPLES is not set
176 +
177 +#
178 +# Executable file formats
179 +#
180 +CONFIG_BINFMT_ELF_FDPIC=y
181 +CONFIG_BINFMT_FLAT=y
182 +# CONFIG_BINFMT_ZFLAT is not set
183 +# CONFIG_BINFMT_SHARED_FLAT is not set
184 +# CONFIG_HAVE_AOUT is not set
185 +# CONFIG_BINFMT_MISC is not set
186 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
187 +
188 +#
189 +# General setup
190 +#
191 +CONFIG_EXPERIMENTAL=y
192 +CONFIG_BROKEN_ON_SMP=y
193 +CONFIG_INIT_ENV_ARG_LIMIT=32
194 +CONFIG_LOCALVERSION=""
195 +CONFIG_LOCALVERSION_AUTO=y
196 +# CONFIG_SYSVIPC is not set
197 +# CONFIG_BSD_PROCESS_ACCT is not set
198 +# CONFIG_IKCONFIG is not set
199 +CONFIG_LOG_BUF_SHIFT=14
200 +# CONFIG_CGROUPS is not set
201 +# CONFIG_GROUP_SCHED is not set
202 +# CONFIG_RELAY is not set
203 +# CONFIG_NAMESPACES is not set
204 +CONFIG_BLK_DEV_INITRD=y
205 +CONFIG_INITRAMFS_SOURCE=""
206 +CONFIG_INITRAMFS_ROOT_UID=0
207 +CONFIG_INITRAMFS_ROOT_GID=0
208 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
209 +CONFIG_SYSCTL=y
210 +CONFIG_EMBEDDED=y
211 +CONFIG_SYSCTL_SYSCALL=y
212 +# CONFIG_KALLSYMS is not set
213 +# CONFIG_HOTPLUG is not set
214 +CONFIG_PRINTK=y
215 +CONFIG_BUG=y
216 +# CONFIG_ELF_CORE is not set
217 +CONFIG_BASE_FULL=y
218 +# CONFIG_FUTEX is not set
219 +# CONFIG_EPOLL is not set
220 +# CONFIG_SIGNALFD is not set
221 +# CONFIG_TIMERFD is not set
222 +# CONFIG_EVENTFD is not set
223 +CONFIG_AIO=y
224 +# CONFIG_VM_EVENT_COUNTERS is not set
225 +# CONFIG_COMPAT_BRK is not set
226 +CONFIG_SLAB=y
227 +# CONFIG_SLUB is not set
228 +# CONFIG_SLOB is not set
229 +# CONFIG_PROFILING is not set
230 +# CONFIG_MARKERS is not set
231 +CONFIG_HAVE_OPROFILE=y
232 +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
233 +CONFIG_SLABINFO=y
234 +CONFIG_TINY_SHMEM=y
235 +CONFIG_BASE_SMALL=0
236 +# CONFIG_MODULES is not set
237 +CONFIG_BLOCK=y
238 +# CONFIG_LBD is not set
239 +# CONFIG_LSF is not set
240 +# CONFIG_BLK_DEV_BSG is not set
241 +# CONFIG_BLK_DEV_INTEGRITY is not set
242 +
243 +#
244 +# IO Schedulers
245 +#
246 +CONFIG_IOSCHED_NOOP=y
247 +# CONFIG_IOSCHED_AS is not set
248 +# CONFIG_IOSCHED_DEADLINE is not set
249 +# CONFIG_IOSCHED_CFQ is not set
250 +# CONFIG_DEFAULT_AS is not set
251 +# CONFIG_DEFAULT_DEADLINE is not set
252 +# CONFIG_DEFAULT_CFQ is not set
253 +CONFIG_DEFAULT_NOOP=y
254 +CONFIG_DEFAULT_IOSCHED="noop"
255 +CONFIG_CLASSIC_RCU=y
256 +CONFIG_PREEMPT_NONE=y
257 +# CONFIG_PREEMPT_VOLUNTARY is not set
258 +# CONFIG_PREEMPT is not set
259 +# CONFIG_NO_HZ is not set
260 +# CONFIG_HIGH_RES_TIMERS is not set
261 +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
262 +CONFIG_SELECT_MEMORY_MODEL=y
263 +CONFIG_FLATMEM_MANUAL=y
264 +# CONFIG_DISCONTIGMEM_MANUAL is not set
265 +# CONFIG_SPARSEMEM_MANUAL is not set
266 +CONFIG_FLATMEM=y
267 +CONFIG_FLAT_NODE_MEM_MAP=y
268 +CONFIG_PAGEFLAGS_EXTENDED=y
269 +CONFIG_SPLIT_PTLOCK_CPUS=4
270 +# CONFIG_RESOURCES_64BIT is not set
271 +# CONFIG_PHYS_ADDR_T_64BIT is not set
272 +CONFIG_ZONE_DMA_FLAG=1
273 +CONFIG_VIRT_TO_BUS=y
274 +# CONFIG_NET is not set
275 +
276 +#
277 +# Device Drivers
278 +#
279 +
280 +#
281 +# Generic Driver Options
282 +#
283 +CONFIG_STANDALONE=y
284 +CONFIG_PREVENT_FIRMWARE_BUILD=y
285 +CONFIG_DEBUG_DRIVER=y
286 +CONFIG_DEBUG_DEVRES=y
287 +# CONFIG_SYS_HYPERVISOR is not set
288 +# CONFIG_MTD is not set
289 +# CONFIG_PARPORT is not set
290 +CONFIG_BLK_DEV=y
291 +# CONFIG_BLK_DEV_COW_COMMON is not set
292 +# CONFIG_BLK_DEV_LOOP is not set
293 +CONFIG_BLK_DEV_RAM=y
294 +CONFIG_BLK_DEV_RAM_COUNT=16
295 +CONFIG_BLK_DEV_RAM_SIZE=4096
296 +# CONFIG_BLK_DEV_XIP is not set
297 +# CONFIG_CDROM_PKTCDVD is not set
298 +# CONFIG_MISC_DEVICES is not set
299 +
300 +#
301 +# SCSI device support
302 +#
303 +# CONFIG_RAID_ATTRS is not set
304 +# CONFIG_SCSI is not set
305 +# CONFIG_SCSI_DMA is not set
306 +# CONFIG_SCSI_NETLINK is not set
307 +# CONFIG_ATA is not set
308 +# CONFIG_MD is not set
309 +# CONFIG_PHONE is not set
310 +
311 +#
312 +# Input device support
313 +#
314 +# CONFIG_INPUT is not set
315 +
316 +#
317 +# Hardware I/O ports
318 +#
319 +# CONFIG_SERIO is not set
320 +# CONFIG_GAMEPORT is not set
321 +
322 +#
323 +# Character devices
324 +#
325 +# CONFIG_VT is not set
326 +CONFIG_DEVKMEM=y
327 +# CONFIG_SERIAL_NONSTANDARD is not set
328 +
329 +#
330 +# Serial drivers
331 +#
332 +# CONFIG_SERIAL_8250 is not set
333 +
334 +#
335 +# Non-8250 serial port support
336 +#
337 +CONFIG_SERIAL_UBI32_SERDES=y
338 +CONFIG_SERIAL_UBI32_SERDES_CONSOLE=y
339 +# CONFIG_SERIAL_UBI32_MAILBOX is not set
340 +CONFIG_SERIAL_CORE=y
341 +CONFIG_SERIAL_CORE_CONSOLE=y
342 +# CONFIG_UNIX98_PTYS is not set
343 +CONFIG_LEGACY_PTYS=y
344 +CONFIG_LEGACY_PTY_COUNT=256
345 +# CONFIG_IPMI_HANDLER is not set
346 +# CONFIG_HW_RANDOM is not set
347 +# CONFIG_RTC is not set
348 +# CONFIG_GEN_RTC is not set
349 +# CONFIG_R3964 is not set
350 +# CONFIG_RAW_DRIVER is not set
351 +# CONFIG_TCG_TPM is not set
352 +# CONFIG_I2C is not set
353 +# CONFIG_SPI is not set
354 +# CONFIG_DEBUG_GPIO is not set
355 +
356 +#
357 +# Memory mapped GPIO expanders:
358 +#
359 +
360 +#
361 +# I2C GPIO expanders:
362 +#
363 +
364 +#
365 +# PCI GPIO expanders:
366 +#
367 +
368 +#
369 +# SPI GPIO expanders:
370 +#
371 +# CONFIG_W1 is not set
372 +# CONFIG_POWER_SUPPLY is not set
373 +# CONFIG_HWMON is not set
374 +# CONFIG_THERMAL is not set
375 +# CONFIG_THERMAL_HWMON is not set
376 +# CONFIG_WATCHDOG is not set
377 +CONFIG_SSB_POSSIBLE=y
378 +
379 +#
380 +# Sonics Silicon Backplane
381 +#
382 +# CONFIG_SSB is not set
383 +
384 +#
385 +# Multifunction device drivers
386 +#
387 +# CONFIG_MFD_CORE is not set
388 +# CONFIG_MFD_SM501 is not set
389 +# CONFIG_HTC_PASIC3 is not set
390 +# CONFIG_MFD_TMIO is not set
391 +# CONFIG_REGULATOR is not set
392 +
393 +#
394 +# Multimedia devices
395 +#
396 +
397 +#
398 +# Multimedia core support
399 +#
400 +# CONFIG_VIDEO_DEV is not set
401 +# CONFIG_VIDEO_MEDIA is not set
402 +
403 +#
404 +# Multimedia drivers
405 +#
406 +# CONFIG_DAB is not set
407 +
408 +#
409 +# Graphics support
410 +#
411 +# CONFIG_VGASTATE is not set
412 +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
413 +# CONFIG_FB is not set
414 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
415 +
416 +#
417 +# Display device support
418 +#
419 +# CONFIG_DISPLAY_SUPPORT is not set
420 +# CONFIG_SOUND is not set
421 +# CONFIG_USB_SUPPORT is not set
422 +# CONFIG_MMC is not set
423 +# CONFIG_MEMSTICK is not set
424 +# CONFIG_NEW_LEDS is not set
425 +# CONFIG_ACCESSIBILITY is not set
426 +# CONFIG_RTC_CLASS is not set
427 +# CONFIG_DMADEVICES is not set
428 +# CONFIG_UIO is not set
429 +# CONFIG_STAGING is not set
430 +
431 +#
432 +# File systems
433 +#
434 +# CONFIG_EXT2_FS is not set
435 +# CONFIG_EXT3_FS is not set
436 +# CONFIG_EXT4_FS is not set
437 +# CONFIG_REISERFS_FS is not set
438 +# CONFIG_JFS_FS is not set
439 +# CONFIG_FS_POSIX_ACL is not set
440 +CONFIG_FILE_LOCKING=y
441 +# CONFIG_XFS_FS is not set
442 +# CONFIG_DNOTIFY is not set
443 +# CONFIG_INOTIFY is not set
444 +# CONFIG_QUOTA is not set
445 +# CONFIG_AUTOFS_FS is not set
446 +# CONFIG_AUTOFS4_FS is not set
447 +# CONFIG_FUSE_FS is not set
448 +
449 +#
450 +# CD-ROM/DVD Filesystems
451 +#
452 +# CONFIG_ISO9660_FS is not set
453 +# CONFIG_UDF_FS is not set
454 +
455 +#
456 +# DOS/FAT/NT Filesystems
457 +#
458 +# CONFIG_MSDOS_FS is not set
459 +# CONFIG_VFAT_FS is not set
460 +# CONFIG_NTFS_FS is not set
461 +
462 +#
463 +# Pseudo filesystems
464 +#
465 +CONFIG_PROC_FS=y
466 +CONFIG_PROC_SYSCTL=y
467 +# CONFIG_SYSFS is not set
468 +# CONFIG_TMPFS is not set
469 +# CONFIG_HUGETLB_PAGE is not set
470 +
471 +#
472 +# Layered filesystems
473 +#
474 +# CONFIG_UNION_FS is not set
475 +
476 +#
477 +# Miscellaneous filesystems
478 +#
479 +# CONFIG_ADFS_FS is not set
480 +# CONFIG_AFFS_FS is not set
481 +# CONFIG_HFS_FS is not set
482 +# CONFIG_HFSPLUS_FS is not set
483 +# CONFIG_BEFS_FS is not set
484 +# CONFIG_BFS_FS is not set
485 +# CONFIG_EFS_FS is not set
486 +# CONFIG_CRAMFS is not set
487 +# CONFIG_VXFS_FS is not set
488 +# CONFIG_MINIX_FS is not set
489 +# CONFIG_OMFS_FS is not set
490 +# CONFIG_HPFS_FS is not set
491 +# CONFIG_QNX4FS_FS is not set
492 +CONFIG_ROMFS_FS=y
493 +# CONFIG_SYSV_FS is not set
494 +# CONFIG_UFS_FS is not set
495 +
496 +#
497 +# Partition Types
498 +#
499 +# CONFIG_PARTITION_ADVANCED is not set
500 +CONFIG_MSDOS_PARTITION=y
501 +# CONFIG_NLS is not set
502 +
503 +#
504 +# Security options
505 +#
506 +# CONFIG_KEYS is not set
507 +# CONFIG_SECURITYFS is not set
508 +# CONFIG_SECURITY_FILE_CAPABILITIES is not set
509 +# CONFIG_CRYPTO is not set
510 +
511 +#
512 +# OCF Configuration
513 +#
514 +# CONFIG_OCF_OCF is not set
515 +
516 +#
517 +# Library routines
518 +#
519 +CONFIG_BITREVERSE=y
520 +# CONFIG_CRC_CCITT is not set
521 +# CONFIG_CRC16 is not set
522 +# CONFIG_CRC_T10DIF is not set
523 +# CONFIG_CRC_ITU_T is not set
524 +CONFIG_CRC32=y
525 +# CONFIG_CRC7 is not set
526 +# CONFIG_LIBCRC32C is not set
527 +CONFIG_HAS_IOMEM=y
528 +CONFIG_HAS_DMA=y
529 diff -ruN linux-2.6.28.10_o/arch/ubicom32/configs/IP7160RGW_defconfig linux-2.6.28.10/arch/ubicom32/configs/IP7160RGW_defconfig
530 --- linux-2.6.28.10_o/arch/ubicom32/configs/IP7160RGW_defconfig 1970-01-01 02:00:00.000000000 +0200
531 +++ linux-2.6.28.10/arch/ubicom32/configs/IP7160RGW_defconfig 2009-08-12 13:08:37.000000000 +0300
532 @@ -0,0 +1,1301 @@
533 +#
534 +# Automatically generated make config: don't edit
535 +# Linux kernel version: 2.6.28.10
536 +#
537 +CONFIG_RAMBASE=0x40000000
538 +CONFIG_UBICOM32=y
539 +CONFIG_RAMKERNEL=y
540 +CONFIG_CPU_BIG_ENDIAN=y
541 +CONFIG_FORCE_MAX_ZONEORDER=14
542 +CONFIG_HAVE_CLK=y
543 +# CONFIG_MMU is not set
544 +# CONFIG_FPU is not set
545 +CONFIG_ZONE_DMA=y
546 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
547 +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
548 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
549 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
550 +CONFIG_GENERIC_FIND_NEXT_BIT=y
551 +CONFIG_GENERIC_GPIO=y
552 +CONFIG_GPIOLIB=y
553 +CONFIG_GENERIC_HWEIGHT=y
554 +CONFIG_GENERIC_HARDIRQS=y
555 +CONFIG_STACKTRACE_SUPPORT=y
556 +CONFIG_LOCKDEP_SUPPORT=y
557 +CONFIG_GENERIC_CALIBRATE_DELAY=y
558 +CONFIG_GENERIC_TIME=y
559 +CONFIG_TIME_LOW_RES=y
560 +CONFIG_GENERIC_CLOCKEVENTS=y
561 +CONFIG_NO_IOPORT=y
562 +CONFIG_ARCH_SUPPORTS_AOUT=y
563 +CONFIG_IRQ_PER_CPU=y
564 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
565 +
566 +#
567 +# Processor type and features
568 +#
569 +CONFIG_BRD_64MB=y
570 +
571 +#
572 +# Processor type will be selected by Board
573 +#
574 +CONFIG_UBICOM32_V4=y
575 +
576 +#
577 +# Board
578 +#
579 +# CONFIG_NOBOARD is not set
580 +# CONFIG_IP5170DPF is not set
581 +# CONFIG_IP5160DEV is not set
582 +# CONFIG_IP5160EVAL is not set
583 +# CONFIG_IP7145DPF is not set
584 +CONFIG_IP7160RGW=y
585 +# CONFIG_IP7160BRINGUP is not set
586 +# CONFIG_IP7160DPF is not set
587 +# CONFIG_IP7500MODULE is not set
588 +# CONFIG_IP7500AV is not set
589 +# CONFIG_IP7500MEDIA is not set
590 +
591 +#
592 +# Kernel Options
593 +#
594 +# CONFIG_SMP is not set
595 +CONFIG_TIMER_EXTRA_ALLOC=0
596 +# CONFIG_IRQSTACKS is not set
597 +CONFIG_UBICOM32_OCM_MODULES=y
598 +CONFIG_OCM_MODULES_RESERVATION=41
599 +CONFIG_OCM_MODULES_MAY_CONSUME_REMAINING_CODESPACE=y
600 +CONFIG_HZ=100
601 +
602 +#
603 +# RAM configuration
604 +#
605 +CONFIG_RAMSIZE=0x04000000
606 +CONFIG_KERNELBASE=0x40400000
607 +
608 +#
609 +# Build options
610 +#
611 +# CONFIG_LINKER_RELAXATION is not set
612 +
613 +#
614 +# Driver options
615 +#
616 +
617 +#
618 +# PCI Bus
619 +#
620 +CONFIG_PCI=y
621 +# CONFIG_ARCH_SUPPORTS_MSI is not set
622 +# CONFIG_PCI_LEGACY is not set
623 +# CONFIG_PCI_DEBUG is not set
624 +CONFIG_PCI_DEV0_IDSEL=0x001000000
625 +CONFIG_PCI_DEV1_IDSEL=0x002000000
626 +
627 +#
628 +# Input devices
629 +#
630 +CONFIG_UBICOM_INPUT=y
631 +# CONFIG_UBICOM_INPUT_I2C is not set
632 +CONFIG_UBICOM_SWITCH=y
633 +CONFIG_UBICOM_SWITCH_BCM539X=y
634 +
635 +#
636 +# Misc devices
637 +#
638 +# CONFIG_UBICOM_HID is not set
639 +CONFIG_CMDLINE_BOOL=y
640 +CONFIG_CMDLINE="console=ttyUM0 console=ttyUS0 serdes=0x02004000,61,250000000"
641 +# CONFIG_CMDLINE_OVERRIDE is not set
642 +
643 +#
644 +# Kernel hacking
645 +#
646 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
647 +CONFIG_PROTECT_KERNEL=y
648 +# CONFIG_NO_KERNEL_MSG is not set
649 +CONFIG_EARLY_PRINTK=y
650 +# CONFIG_STOP_ON_TRAP is not set
651 +# CONFIG_STOP_ON_BUG is not set
652 +# CONFIG_DEBUG_IRQMEASURE is not set
653 +# CONFIG_DEBUG_PCIMEASURE is not set
654 +# CONFIG_ACCESS_OK_CHECKS_ENABLED is not set
655 +CONFIG_UNALIGNED_ACCESS_ENABLED=y
656 +# CONFIG_UNALIGNED_ACCESS_USERSPACE_ONLY is not set
657 +# CONFIG_UNALIGNED_ACCESS_DISABLED is not set
658 +# CONFIG_DEBUG_STACKOVERFLOW is not set
659 +# CONFIG_DEBUG_STACK_USAGE is not set
660 +CONFIG_PRINTK_TIME=y
661 +CONFIG_ENABLE_WARN_DEPRECATED=y
662 +CONFIG_ENABLE_MUST_CHECK=y
663 +CONFIG_FRAME_WARN=1024
664 +# CONFIG_MAGIC_SYSRQ is not set
665 +# CONFIG_UNUSED_SYMBOLS is not set
666 +# CONFIG_DEBUG_FS is not set
667 +# CONFIG_HEADERS_CHECK is not set
668 +CONFIG_DEBUG_KERNEL=y
669 +# CONFIG_DEBUG_SHIRQ is not set
670 +# CONFIG_DETECT_SOFTLOCKUP is not set
671 +# CONFIG_SCHED_DEBUG is not set
672 +# CONFIG_SCHEDSTATS is not set
673 +# CONFIG_TIMER_STATS is not set
674 +# CONFIG_DEBUG_OBJECTS is not set
675 +# CONFIG_DEBUG_SLAB is not set
676 +# CONFIG_DEBUG_SPINLOCK is not set
677 +# CONFIG_DEBUG_MUTEXES is not set
678 +# CONFIG_DEBUG_LOCK_ALLOC is not set
679 +# CONFIG_PROVE_LOCKING is not set
680 +# CONFIG_LOCK_STAT is not set
681 +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
682 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
683 +# CONFIG_DEBUG_KOBJECT is not set
684 +CONFIG_DEBUG_INFO=y
685 +# CONFIG_DEBUG_VM is not set
686 +# CONFIG_DEBUG_WRITECOUNT is not set
687 +# CONFIG_DEBUG_MEMORY_INIT is not set
688 +# CONFIG_DEBUG_LIST is not set
689 +# CONFIG_DEBUG_SG is not set
690 +# CONFIG_FRAME_POINTER is not set
691 +# CONFIG_BOOT_PRINTK_DELAY is not set
692 +# CONFIG_RCU_TORTURE_TEST is not set
693 +# CONFIG_RCU_CPU_STALL_DETECTOR is not set
694 +# CONFIG_BACKTRACE_SELF_TEST is not set
695 +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
696 +# CONFIG_FAULT_INJECTION is not set
697 +# CONFIG_SYSCTL_SYSCALL_CHECK is not set
698 +
699 +#
700 +# Tracers
701 +#
702 +# CONFIG_IRQSOFF_TRACER is not set
703 +# CONFIG_SCHED_TRACER is not set
704 +# CONFIG_CONTEXT_SWITCH_TRACER is not set
705 +# CONFIG_BOOT_TRACER is not set
706 +# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
707 +# CONFIG_SAMPLES is not set
708 +
709 +#
710 +# Executable file formats
711 +#
712 +CONFIG_BINFMT_ELF_FDPIC=y
713 +CONFIG_BINFMT_FLAT=y
714 +CONFIG_BINFMT_ZFLAT=y
715 +# CONFIG_BINFMT_SHARED_FLAT is not set
716 +# CONFIG_HAVE_AOUT is not set
717 +# CONFIG_BINFMT_MISC is not set
718 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
719 +
720 +#
721 +# General setup
722 +#
723 +CONFIG_EXPERIMENTAL=y
724 +CONFIG_BROKEN_ON_SMP=y
725 +CONFIG_INIT_ENV_ARG_LIMIT=32
726 +CONFIG_LOCALVERSION=""
727 +# CONFIG_LOCALVERSION_AUTO is not set
728 +CONFIG_SYSVIPC=y
729 +CONFIG_SYSVIPC_SYSCTL=y
730 +# CONFIG_POSIX_MQUEUE is not set
731 +# CONFIG_BSD_PROCESS_ACCT is not set
732 +# CONFIG_TASKSTATS is not set
733 +# CONFIG_AUDIT is not set
734 +# CONFIG_IKCONFIG is not set
735 +CONFIG_LOG_BUF_SHIFT=14
736 +# CONFIG_CGROUPS is not set
737 +# CONFIG_GROUP_SCHED is not set
738 +CONFIG_SYSFS_DEPRECATED=y
739 +CONFIG_SYSFS_DEPRECATED_V2=y
740 +# CONFIG_RELAY is not set
741 +# CONFIG_NAMESPACES is not set
742 +CONFIG_BLK_DEV_INITRD=y
743 +CONFIG_INITRAMFS_SOURCE=""
744 +CONFIG_INITRAMFS_ROOT_UID=0
745 +CONFIG_INITRAMFS_ROOT_GID=0
746 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
747 +CONFIG_SYSCTL=y
748 +CONFIG_EMBEDDED=y
749 +CONFIG_SYSCTL_SYSCALL=y
750 +# CONFIG_KALLSYMS is not set
751 +# CONFIG_HOTPLUG is not set
752 +CONFIG_PRINTK=y
753 +CONFIG_BUG=y
754 +# CONFIG_ELF_CORE is not set
755 +CONFIG_BASE_FULL=y
756 +# CONFIG_FUTEX is not set
757 +# CONFIG_EPOLL is not set
758 +# CONFIG_SIGNALFD is not set
759 +# CONFIG_TIMERFD is not set
760 +# CONFIG_EVENTFD is not set
761 +CONFIG_AIO=y
762 +# CONFIG_VM_EVENT_COUNTERS is not set
763 +CONFIG_PCI_QUIRKS=y
764 +# CONFIG_COMPAT_BRK is not set
765 +CONFIG_SLAB=y
766 +# CONFIG_SLUB is not set
767 +# CONFIG_SLOB is not set
768 +# CONFIG_PROFILING is not set
769 +# CONFIG_MARKERS is not set
770 +CONFIG_HAVE_OPROFILE=y
771 +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
772 +CONFIG_SLABINFO=y
773 +CONFIG_TINY_SHMEM=y
774 +CONFIG_BASE_SMALL=0
775 +CONFIG_MODULES=y
776 +CONFIG_MODULE_FORCE_LOAD=y
777 +# CONFIG_MODULE_UNLOAD is not set
778 +# CONFIG_MODVERSIONS is not set
779 +# CONFIG_MODULE_SRCVERSION_ALL is not set
780 +CONFIG_KMOD=y
781 +CONFIG_BLOCK=y
782 +# CONFIG_LBD is not set
783 +# CONFIG_BLK_DEV_IO_TRACE is not set
784 +# CONFIG_LSF is not set
785 +# CONFIG_BLK_DEV_BSG is not set
786 +# CONFIG_BLK_DEV_INTEGRITY is not set
787 +
788 +#
789 +# IO Schedulers
790 +#
791 +CONFIG_IOSCHED_NOOP=y
792 +# CONFIG_IOSCHED_AS is not set
793 +# CONFIG_IOSCHED_DEADLINE is not set
794 +# CONFIG_IOSCHED_CFQ is not set
795 +# CONFIG_DEFAULT_AS is not set
796 +# CONFIG_DEFAULT_DEADLINE is not set
797 +# CONFIG_DEFAULT_CFQ is not set
798 +CONFIG_DEFAULT_NOOP=y
799 +CONFIG_DEFAULT_IOSCHED="noop"
800 +CONFIG_CLASSIC_RCU=y
801 +CONFIG_PREEMPT_NONE=y
802 +# CONFIG_PREEMPT_VOLUNTARY is not set
803 +# CONFIG_PREEMPT is not set
804 +CONFIG_TICK_ONESHOT=y
805 +CONFIG_NO_HZ=y
806 +CONFIG_HIGH_RES_TIMERS=y
807 +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
808 +CONFIG_SELECT_MEMORY_MODEL=y
809 +CONFIG_FLATMEM_MANUAL=y
810 +# CONFIG_DISCONTIGMEM_MANUAL is not set
811 +# CONFIG_SPARSEMEM_MANUAL is not set
812 +CONFIG_FLATMEM=y
813 +CONFIG_FLAT_NODE_MEM_MAP=y
814 +CONFIG_PAGEFLAGS_EXTENDED=y
815 +CONFIG_SPLIT_PTLOCK_CPUS=4
816 +# CONFIG_RESOURCES_64BIT is not set
817 +# CONFIG_PHYS_ADDR_T_64BIT is not set
818 +CONFIG_ZONE_DMA_FLAG=1
819 +CONFIG_VIRT_TO_BUS=y
820 +CONFIG_NET=y
821 +
822 +#
823 +# Networking options
824 +#
825 +CONFIG_PACKET=y
826 +# CONFIG_PACKET_MMAP is not set
827 +CONFIG_UNIX=y
828 +# CONFIG_NET_KEY is not set
829 +CONFIG_INET=y
830 +CONFIG_IP_MULTICAST=y
831 +CONFIG_IP_ADVANCED_ROUTER=y
832 +CONFIG_ASK_IP_FIB_HASH=y
833 +# CONFIG_IP_FIB_TRIE is not set
834 +CONFIG_IP_FIB_HASH=y
835 +# CONFIG_IP_MULTIPLE_TABLES is not set
836 +# CONFIG_IP_ROUTE_MULTIPATH is not set
837 +CONFIG_IP_ROUTE_VERBOSE=y
838 +CONFIG_IP_PNP=y
839 +CONFIG_IP_PNP_DHCP=y
840 +CONFIG_IP_PNP_BOOTP=y
841 +CONFIG_IP_PNP_RARP=y
842 +CONFIG_NET_IPIP=y
843 +CONFIG_NET_IPGRE=y
844 +# CONFIG_NET_IPGRE_BROADCAST is not set
845 +# CONFIG_IP_MROUTE is not set
846 +# CONFIG_ARPD is not set
847 +# CONFIG_SYN_COOKIES is not set
848 +# CONFIG_INET_AH is not set
849 +# CONFIG_INET_ESP is not set
850 +# CONFIG_INET_IPCOMP is not set
851 +# CONFIG_INET_XFRM_TUNNEL is not set
852 +CONFIG_INET_TUNNEL=y
853 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
854 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
855 +# CONFIG_INET_XFRM_MODE_BEET is not set
856 +# CONFIG_INET_LRO is not set
857 +CONFIG_INET_DIAG=y
858 +CONFIG_INET_TCP_DIAG=y
859 +# CONFIG_TCP_CONG_ADVANCED is not set
860 +CONFIG_TCP_CONG_CUBIC=y
861 +CONFIG_DEFAULT_TCP_CONG="cubic"
862 +# CONFIG_TCP_MD5SIG is not set
863 +# CONFIG_IPV6 is not set
864 +# CONFIG_NETWORK_SECMARK is not set
865 +CONFIG_NETFILTER=y
866 +# CONFIG_NETFILTER_DEBUG is not set
867 +CONFIG_NETFILTER_ADVANCED=y
868 +# CONFIG_BRIDGE_NETFILTER is not set
869 +
870 +#
871 +# Core Netfilter Configuration
872 +#
873 +# CONFIG_NETFILTER_NETLINK_QUEUE is not set
874 +# CONFIG_NETFILTER_NETLINK_LOG is not set
875 +CONFIG_NF_CONNTRACK=y
876 +# CONFIG_NF_CT_ACCT is not set
877 +# CONFIG_NF_CONNTRACK_MARK is not set
878 +# CONFIG_NF_CONNTRACK_EVENTS is not set
879 +# CONFIG_NF_CT_PROTO_DCCP is not set
880 +CONFIG_NF_CT_PROTO_GRE=y
881 +# CONFIG_NF_CT_PROTO_SCTP is not set
882 +# CONFIG_NF_CT_PROTO_UDPLITE is not set
883 +# CONFIG_NF_CONNTRACK_AMANDA is not set
884 +# CONFIG_NF_CONNTRACK_FTP is not set
885 +# CONFIG_NF_CONNTRACK_H323 is not set
886 +# CONFIG_NF_CONNTRACK_IRC is not set
887 +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
888 +CONFIG_NF_CONNTRACK_PPTP=y
889 +# CONFIG_NF_CONNTRACK_SANE is not set
890 +# CONFIG_NF_CONNTRACK_SIP is not set
891 +# CONFIG_NF_CONNTRACK_TFTP is not set
892 +# CONFIG_NF_CT_NETLINK is not set
893 +# CONFIG_NETFILTER_TPROXY is not set
894 +CONFIG_NETFILTER_XTABLES=y
895 +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
896 +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
897 +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
898 +# CONFIG_NETFILTER_XT_TARGET_MARK is not set
899 +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
900 +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
901 +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
902 +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
903 +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
904 +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
905 +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
906 +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
907 +# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
908 +# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
909 +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
910 +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
911 +CONFIG_NETFILTER_XT_MATCH_ESP=y
912 +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
913 +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
914 +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
915 +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
916 +CONFIG_NETFILTER_XT_MATCH_LIMIT=y
917 +CONFIG_NETFILTER_XT_MATCH_MAC=y
918 +# CONFIG_NETFILTER_XT_MATCH_MARK is not set
919 +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
920 +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
921 +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
922 +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
923 +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
924 +# CONFIG_NETFILTER_XT_MATCH_REALM is not set
925 +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
926 +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
927 +CONFIG_NETFILTER_XT_MATCH_STATE=y
928 +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
929 +CONFIG_NETFILTER_XT_MATCH_STRING=y
930 +CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
931 +# CONFIG_NETFILTER_XT_MATCH_TIME is not set
932 +# CONFIG_NETFILTER_XT_MATCH_U32 is not set
933 +# CONFIG_IP_VS is not set
934 +
935 +#
936 +# IP: Netfilter Configuration
937 +#
938 +CONFIG_NF_DEFRAG_IPV4=y
939 +CONFIG_NF_CONNTRACK_IPV4=y
940 +CONFIG_NF_CONNTRACK_PROC_COMPAT=y
941 +# CONFIG_IP_NF_QUEUE is not set
942 +CONFIG_IP_NF_IPTABLES=y
943 +# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
944 +CONFIG_IP_NF_MATCH_AH=y
945 +# CONFIG_IP_NF_MATCH_ECN is not set
946 +CONFIG_IP_NF_MATCH_TTL=y
947 +CONFIG_IP_NF_FILTER=y
948 +CONFIG_IP_NF_TARGET_REJECT=y
949 +CONFIG_IP_NF_TARGET_LOG=y
950 +# CONFIG_IP_NF_TARGET_ULOG is not set
951 +# CONFIG_NF_QOS_UBICOM_STREAMENGINE_DEFAULT_CLASSIFIER is not set
952 +CONFIG_NF_NAT=y
953 +CONFIG_NF_NAT_NEEDED=y
954 +CONFIG_IP_NF_TARGET_MASQUERADE=y
955 +CONFIG_IP_NF_TARGET_NETMAP=y
956 +CONFIG_IP_NF_TARGET_REDIRECT=y
957 +CONFIG_NF_NAT_SNMP_BASIC=y
958 +CONFIG_NF_NAT_PROTO_GRE=y
959 +# CONFIG_NF_NAT_FTP is not set
960 +# CONFIG_NF_NAT_IRC is not set
961 +# CONFIG_NF_NAT_TFTP is not set
962 +# CONFIG_NF_NAT_AMANDA is not set
963 +CONFIG_NF_NAT_PPTP=y
964 +# CONFIG_NF_NAT_H323 is not set
965 +# CONFIG_NF_NAT_SIP is not set
966 +CONFIG_IP_NF_MANGLE=y
967 +# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
968 +# CONFIG_IP_NF_TARGET_ECN is not set
969 +CONFIG_IP_NF_TARGET_TTL=y
970 +# CONFIG_IP_NF_RAW is not set
971 +# CONFIG_IP_NF_ARPTABLES is not set
972 +# CONFIG_IP_DCCP is not set
973 +# CONFIG_IP_SCTP is not set
974 +# CONFIG_TIPC is not set
975 +# CONFIG_ATM is not set
976 +CONFIG_STP=y
977 +CONFIG_BRIDGE=y
978 +# CONFIG_NET_DSA is not set
979 +CONFIG_VLAN_8021Q=y
980 +# CONFIG_VLAN_8021Q_GVRP is not set
981 +# CONFIG_DECNET is not set
982 +CONFIG_LLC=y
983 +# CONFIG_LLC2 is not set
984 +# CONFIG_IPX is not set
985 +# CONFIG_ATALK is not set
986 +# CONFIG_X25 is not set
987 +# CONFIG_LAPB is not set
988 +# CONFIG_ECONET is not set
989 +# CONFIG_WAN_ROUTER is not set
990 +# CONFIG_NET_SCHED is not set
991 +
992 +#
993 +# Network testing
994 +#
995 +# CONFIG_NET_PKTGEN is not set
996 +# CONFIG_HAMRADIO is not set
997 +# CONFIG_CAN is not set
998 +# CONFIG_IRDA is not set
999 +# CONFIG_BT is not set
1000 +# CONFIG_AF_RXRPC is not set
1001 +# CONFIG_PHONET is not set
1002 +CONFIG_WIRELESS=y
1003 +# CONFIG_CFG80211 is not set
1004 +# CONFIG_WIRELESS_OLD_REGULATORY is not set
1005 +CONFIG_WIRELESS_EXT=y
1006 +CONFIG_WIRELESS_EXT_SYSFS=y
1007 +# CONFIG_MAC80211 is not set
1008 +# CONFIG_IEEE80211 is not set
1009 +# CONFIG_RFKILL is not set
1010 +# CONFIG_NET_9P is not set
1011 +
1012 +#
1013 +# Device Drivers
1014 +#
1015 +
1016 +#
1017 +# Generic Driver Options
1018 +#
1019 +CONFIG_STANDALONE=y
1020 +CONFIG_PREVENT_FIRMWARE_BUILD=y
1021 +# CONFIG_DEBUG_DRIVER is not set
1022 +# CONFIG_DEBUG_DEVRES is not set
1023 +# CONFIG_SYS_HYPERVISOR is not set
1024 +# CONFIG_CONNECTOR is not set
1025 +CONFIG_MTD=y
1026 +# CONFIG_MTD_DEBUG is not set
1027 +# CONFIG_MTD_CONCAT is not set
1028 +CONFIG_MTD_PARTITIONS=y
1029 +# CONFIG_MTD_REDBOOT_PARTS is not set
1030 +CONFIG_MTD_CMDLINE_PARTS=y
1031 +# CONFIG_MTD_AR7_PARTS is not set
1032 +
1033 +#
1034 +# User Modules And Translation Layers
1035 +#
1036 +CONFIG_MTD_CHAR=y
1037 +CONFIG_MTD_BLKDEVS=y
1038 +CONFIG_MTD_BLOCK=y
1039 +# CONFIG_FTL is not set
1040 +# CONFIG_NFTL is not set
1041 +# CONFIG_INFTL is not set
1042 +# CONFIG_RFD_FTL is not set
1043 +# CONFIG_SSFDC is not set
1044 +# CONFIG_MTD_OOPS is not set
1045 +
1046 +#
1047 +# RAM/ROM/Flash chip drivers
1048 +#
1049 +# CONFIG_MTD_CFI is not set
1050 +# CONFIG_MTD_JEDECPROBE is not set
1051 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
1052 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
1053 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
1054 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
1055 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
1056 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
1057 +CONFIG_MTD_CFI_I1=y
1058 +CONFIG_MTD_CFI_I2=y
1059 +# CONFIG_MTD_CFI_I4 is not set
1060 +# CONFIG_MTD_CFI_I8 is not set
1061 +# CONFIG_MTD_RAM is not set
1062 +# CONFIG_MTD_ROM is not set
1063 +# CONFIG_MTD_ABSENT is not set
1064 +
1065 +#
1066 +# Mapping drivers for chip access
1067 +#
1068 +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
1069 +# CONFIG_MTD_INTEL_VR_NOR is not set
1070 +# CONFIG_MTD_PLATRAM is not set
1071 +
1072 +#
1073 +# Self-contained MTD device drivers
1074 +#
1075 +# CONFIG_MTD_PMC551 is not set
1076 +# CONFIG_MTD_DATAFLASH is not set
1077 +# CONFIG_MTD_M25P80 is not set
1078 +CONFIG_MTD_UBI32_M25P80=y
1079 +# CONFIG_MTD_SLRAM is not set
1080 +# CONFIG_MTD_PHRAM is not set
1081 +# CONFIG_MTD_MTDRAM is not set
1082 +# CONFIG_MTD_BLOCK2MTD is not set
1083 +
1084 +#
1085 +# Disk-On-Chip Device Drivers
1086 +#
1087 +# CONFIG_MTD_DOC2000 is not set
1088 +# CONFIG_MTD_DOC2001 is not set
1089 +# CONFIG_MTD_DOC2001PLUS is not set
1090 +# CONFIG_MTD_NAND is not set
1091 +# CONFIG_MTD_ONENAND is not set
1092 +
1093 +#
1094 +# UBI - Unsorted block images
1095 +#
1096 +# CONFIG_MTD_UBI is not set
1097 +# CONFIG_PARPORT is not set
1098 +CONFIG_BLK_DEV=y
1099 +# CONFIG_BLK_CPQ_DA is not set
1100 +# CONFIG_BLK_CPQ_CISS_DA is not set
1101 +# CONFIG_BLK_DEV_DAC960 is not set
1102 +# CONFIG_BLK_DEV_UMEM is not set
1103 +# CONFIG_BLK_DEV_COW_COMMON is not set
1104 +# CONFIG_BLK_DEV_LOOP is not set
1105 +# CONFIG_BLK_DEV_NBD is not set
1106 +# CONFIG_BLK_DEV_SX8 is not set
1107 +# CONFIG_BLK_DEV_UB is not set
1108 +CONFIG_BLK_DEV_RAM=y
1109 +CONFIG_BLK_DEV_RAM_COUNT=16
1110 +CONFIG_BLK_DEV_RAM_SIZE=4096
1111 +# CONFIG_BLK_DEV_XIP is not set
1112 +# CONFIG_CDROM_PKTCDVD is not set
1113 +# CONFIG_ATA_OVER_ETH is not set
1114 +# CONFIG_MISC_DEVICES is not set
1115 +
1116 +#
1117 +# SCSI device support
1118 +#
1119 +# CONFIG_RAID_ATTRS is not set
1120 +CONFIG_SCSI=y
1121 +CONFIG_SCSI_DMA=y
1122 +# CONFIG_SCSI_TGT is not set
1123 +# CONFIG_SCSI_NETLINK is not set
1124 +CONFIG_SCSI_PROC_FS=y
1125 +
1126 +#
1127 +# SCSI support type (disk, tape, CD-ROM)
1128 +#
1129 +CONFIG_BLK_DEV_SD=y
1130 +# CONFIG_CHR_DEV_ST is not set
1131 +# CONFIG_CHR_DEV_OSST is not set
1132 +# CONFIG_BLK_DEV_SR is not set
1133 +CONFIG_CHR_DEV_SG=y
1134 +# CONFIG_CHR_DEV_SCH is not set
1135 +
1136 +#
1137 +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
1138 +#
1139 +CONFIG_SCSI_MULTI_LUN=y
1140 +# CONFIG_SCSI_CONSTANTS is not set
1141 +# CONFIG_SCSI_LOGGING is not set
1142 +# CONFIG_SCSI_SCAN_ASYNC is not set
1143 +CONFIG_SCSI_WAIT_SCAN=m
1144 +
1145 +#
1146 +# SCSI Transports
1147 +#
1148 +# CONFIG_SCSI_SPI_ATTRS is not set
1149 +# CONFIG_SCSI_FC_ATTRS is not set
1150 +# CONFIG_SCSI_ISCSI_ATTRS is not set
1151 +# CONFIG_SCSI_SAS_LIBSAS is not set
1152 +# CONFIG_SCSI_SRP_ATTRS is not set
1153 +# CONFIG_SCSI_LOWLEVEL is not set
1154 +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
1155 +# CONFIG_SCSI_DH is not set
1156 +# CONFIG_ATA is not set
1157 +# CONFIG_MD is not set
1158 +# CONFIG_FUSION is not set
1159 +
1160 +#
1161 +# IEEE 1394 (FireWire) support
1162 +#
1163 +
1164 +#
1165 +# Enable only one of the two stacks, unless you know what you are doing
1166 +#
1167 +# CONFIG_FIREWIRE is not set
1168 +# CONFIG_IEEE1394 is not set
1169 +# CONFIG_I2O is not set
1170 +CONFIG_NETDEVICES=y
1171 +# CONFIG_DUMMY is not set
1172 +# CONFIG_BONDING is not set
1173 +# CONFIG_MACVLAN is not set
1174 +# CONFIG_EQUALIZER is not set
1175 +# CONFIG_TUN is not set
1176 +# CONFIG_VETH is not set
1177 +# CONFIG_ARCNET is not set
1178 +# CONFIG_NET_ETHERNET is not set
1179 +CONFIG_MII=y
1180 +CONFIG_NETDEV_1000=y
1181 +# CONFIG_ACENIC is not set
1182 +# CONFIG_DL2K is not set
1183 +# CONFIG_E1000 is not set
1184 +# CONFIG_E1000E is not set
1185 +# CONFIG_IP1000 is not set
1186 +# CONFIG_IGB is not set
1187 +# CONFIG_NS83820 is not set
1188 +# CONFIG_HAMACHI is not set
1189 +# CONFIG_YELLOWFIN is not set
1190 +# CONFIG_R8169 is not set
1191 +# CONFIG_SIS190 is not set
1192 +# CONFIG_SKGE is not set
1193 +# CONFIG_SKY2 is not set
1194 +# CONFIG_VIA_VELOCITY is not set
1195 +# CONFIG_TIGON3 is not set
1196 +# CONFIG_BNX2 is not set
1197 +# CONFIG_QLA3XXX is not set
1198 +# CONFIG_ATL1 is not set
1199 +# CONFIG_ATL1E is not set
1200 +# CONFIG_JME is not set
1201 +CONFIG_UBICOM32_GMAC=y
1202 +CONFIG_UBICOM32_NAPI=y
1203 +CONFIG_UBICOM32_OCM_FOR_SKB=y
1204 +# CONFIG_NETDEV_10000 is not set
1205 +# CONFIG_TR is not set
1206 +
1207 +#
1208 +# Wireless LAN
1209 +#
1210 +# CONFIG_WLAN_PRE80211 is not set
1211 +# CONFIG_WLAN_80211 is not set
1212 +# CONFIG_IWLWIFI_LEDS is not set
1213 +
1214 +#
1215 +# USB Network Adapters
1216 +#
1217 +# CONFIG_USB_CATC is not set
1218 +# CONFIG_USB_KAWETH is not set
1219 +# CONFIG_USB_PEGASUS is not set
1220 +# CONFIG_USB_RTL8150 is not set
1221 +CONFIG_USB_USBNET=y
1222 +CONFIG_USB_NET_AX8817X=y
1223 +CONFIG_USB_NET_CDCETHER=y
1224 +# CONFIG_USB_NET_DM9601 is not set
1225 +# CONFIG_USB_NET_SMSC95XX is not set
1226 +# CONFIG_USB_NET_GL620A is not set
1227 +# CONFIG_USB_NET_NET1080 is not set
1228 +# CONFIG_USB_NET_PLUSB is not set
1229 +# CONFIG_USB_NET_MCS7830 is not set
1230 +# CONFIG_USB_NET_RNDIS_HOST is not set
1231 +# CONFIG_USB_NET_CDC_SUBSET is not set
1232 +# CONFIG_USB_NET_ZAURUS is not set
1233 +# CONFIG_WAN is not set
1234 +# CONFIG_FDDI is not set
1235 +# CONFIG_HIPPI is not set
1236 +CONFIG_PPP=y
1237 +# CONFIG_PPP_MULTILINK is not set
1238 +# CONFIG_PPP_FILTER is not set
1239 +CONFIG_PPP_ASYNC=y
1240 +# CONFIG_PPP_SYNC_TTY is not set
1241 +# CONFIG_PPP_DEFLATE is not set
1242 +# CONFIG_PPP_BSDCOMP is not set
1243 +# CONFIG_PPP_MPPE is not set
1244 +# CONFIG_PPPOE is not set
1245 +# CONFIG_PPPOL2TP is not set
1246 +# CONFIG_SLIP is not set
1247 +CONFIG_SLHC=y
1248 +# CONFIG_NET_FC is not set
1249 +# CONFIG_NETCONSOLE is not set
1250 +# CONFIG_NETPOLL is not set
1251 +# CONFIG_NET_POLL_CONTROLLER is not set
1252 +# CONFIG_ISDN is not set
1253 +# CONFIG_PHONE is not set
1254 +
1255 +#
1256 +# Input device support
1257 +#
1258 +CONFIG_INPUT=y
1259 +# CONFIG_INPUT_FF_MEMLESS is not set
1260 +CONFIG_INPUT_POLLDEV=y
1261 +
1262 +#
1263 +# Userland interfaces
1264 +#
1265 +# CONFIG_INPUT_MOUSEDEV is not set
1266 +# CONFIG_INPUT_JOYDEV is not set
1267 +# CONFIG_INPUT_EVDEV is not set
1268 +# CONFIG_INPUT_EVBUG is not set
1269 +
1270 +#
1271 +# Input Device Drivers
1272 +#
1273 +# CONFIG_INPUT_KEYBOARD is not set
1274 +# CONFIG_INPUT_MOUSE is not set
1275 +# CONFIG_INPUT_JOYSTICK is not set
1276 +# CONFIG_INPUT_TABLET is not set
1277 +# CONFIG_INPUT_TOUCHSCREEN is not set
1278 +# CONFIG_INPUT_MISC is not set
1279 +
1280 +#
1281 +# Hardware I/O ports
1282 +#
1283 +# CONFIG_SERIO is not set
1284 +# CONFIG_GAMEPORT is not set
1285 +
1286 +#
1287 +# Character devices
1288 +#
1289 +# CONFIG_VT is not set
1290 +CONFIG_DEVKMEM=y
1291 +# CONFIG_SERIAL_NONSTANDARD is not set
1292 +# CONFIG_NOZOMI is not set
1293 +
1294 +#
1295 +# Serial drivers
1296 +#
1297 +# CONFIG_SERIAL_8250 is not set
1298 +
1299 +#
1300 +# Non-8250 serial port support
1301 +#
1302 +# CONFIG_SERIAL_UBI32_SERDES is not set
1303 +CONFIG_SERIAL_UBI32_MAILBOX=y
1304 +CONFIG_SERIAL_UBI32_MAILBOX_CONSOLE=y
1305 +CONFIG_SERIAL_CORE=y
1306 +CONFIG_SERIAL_CORE_CONSOLE=y
1307 +# CONFIG_SERIAL_JSM is not set
1308 +CONFIG_UNIX98_PTYS=y
1309 +CONFIG_LEGACY_PTYS=y
1310 +CONFIG_LEGACY_PTY_COUNT=256
1311 +# CONFIG_IPMI_HANDLER is not set
1312 +CONFIG_HW_RANDOM=y
1313 +CONFIG_HW_RANDOM_UBICOM32=y
1314 +# CONFIG_RTC is not set
1315 +# CONFIG_GEN_RTC is not set
1316 +# CONFIG_R3964 is not set
1317 +# CONFIG_APPLICOM is not set
1318 +# CONFIG_RAW_DRIVER is not set
1319 +# CONFIG_TCG_TPM is not set
1320 +CONFIG_DEVPORT=y
1321 +# CONFIG_I2C is not set
1322 +CONFIG_SPI=y
1323 +# CONFIG_SPI_DEBUG is not set
1324 +CONFIG_SPI_MASTER=y
1325 +
1326 +#
1327 +# SPI Master Controller Drivers
1328 +#
1329 +CONFIG_SPI_BITBANG=y
1330 +CONFIG_SPI_UBICOM32_GPIO=y
1331 +
1332 +#
1333 +# SPI Protocol Masters
1334 +#
1335 +# CONFIG_SPI_AT25 is not set
1336 +# CONFIG_SPI_SPIDEV is not set
1337 +# CONFIG_SPI_TLE62X0 is not set
1338 +# CONFIG_DEBUG_GPIO is not set
1339 +# CONFIG_GPIO_SYSFS is not set
1340 +
1341 +#
1342 +# Memory mapped GPIO expanders:
1343 +#
1344 +
1345 +#
1346 +# I2C GPIO expanders:
1347 +#
1348 +
1349 +#
1350 +# PCI GPIO expanders:
1351 +#
1352 +# CONFIG_GPIO_BT8XX is not set
1353 +
1354 +#
1355 +# SPI GPIO expanders:
1356 +#
1357 +# CONFIG_GPIO_MAX7301 is not set
1358 +# CONFIG_GPIO_MCP23S08 is not set
1359 +# CONFIG_W1 is not set
1360 +# CONFIG_POWER_SUPPLY is not set
1361 +# CONFIG_HWMON is not set
1362 +# CONFIG_THERMAL is not set
1363 +# CONFIG_THERMAL_HWMON is not set
1364 +CONFIG_WATCHDOG=y
1365 +# CONFIG_WATCHDOG_NOWAYOUT is not set
1366 +
1367 +#
1368 +# Watchdog Device Drivers
1369 +#
1370 +# CONFIG_SOFT_WATCHDOG is not set
1371 +# CONFIG_ALIM7101_WDT is not set
1372 +CONFIG_UBI32_WDT=y
1373 +
1374 +#
1375 +# PCI-based Watchdog Cards
1376 +#
1377 +# CONFIG_PCIPCWATCHDOG is not set
1378 +# CONFIG_WDTPCI is not set
1379 +
1380 +#
1381 +# USB-based Watchdog Cards
1382 +#
1383 +# CONFIG_USBPCWATCHDOG is not set
1384 +CONFIG_SSB_POSSIBLE=y
1385 +
1386 +#
1387 +# Sonics Silicon Backplane
1388 +#
1389 +# CONFIG_SSB is not set
1390 +
1391 +#
1392 +# Multifunction device drivers
1393 +#
1394 +# CONFIG_MFD_CORE is not set
1395 +# CONFIG_MFD_SM501 is not set
1396 +# CONFIG_HTC_PASIC3 is not set
1397 +# CONFIG_MFD_TMIO is not set
1398 +# CONFIG_REGULATOR is not set
1399 +
1400 +#
1401 +# Multimedia devices
1402 +#
1403 +
1404 +#
1405 +# Multimedia core support
1406 +#
1407 +# CONFIG_VIDEO_DEV is not set
1408 +# CONFIG_DVB_CORE is not set
1409 +# CONFIG_VIDEO_MEDIA is not set
1410 +
1411 +#
1412 +# Multimedia drivers
1413 +#
1414 +# CONFIG_DAB is not set
1415 +
1416 +#
1417 +# Graphics support
1418 +#
1419 +# CONFIG_VGASTATE is not set
1420 +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
1421 +# CONFIG_FB is not set
1422 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1423 +
1424 +#
1425 +# Display device support
1426 +#
1427 +# CONFIG_DISPLAY_SUPPORT is not set
1428 +# CONFIG_SOUND is not set
1429 +# CONFIG_HID_SUPPORT is not set
1430 +CONFIG_USB_SUPPORT=y
1431 +CONFIG_USB_ARCH_HAS_HCD=y
1432 +CONFIG_USB_ARCH_HAS_OHCI=y
1433 +CONFIG_USB_ARCH_HAS_EHCI=y
1434 +CONFIG_USB=y
1435 +# CONFIG_USB_DEBUG is not set
1436 +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
1437 +
1438 +#
1439 +# Miscellaneous USB options
1440 +#
1441 +CONFIG_USB_DEVICEFS=y
1442 +# CONFIG_USB_DEVICE_CLASS is not set
1443 +# CONFIG_USB_DYNAMIC_MINORS is not set
1444 +# CONFIG_USB_OTG is not set
1445 +# CONFIG_USB_OTG_WHITELIST is not set
1446 +# CONFIG_USB_OTG_BLACKLIST_HUB is not set
1447 +# CONFIG_USB_MON is not set
1448 +# CONFIG_USB_WUSB is not set
1449 +# CONFIG_USB_WUSB_CBAF is not set
1450 +
1451 +#
1452 +# USB Host Controller Drivers
1453 +#
1454 +# CONFIG_USB_C67X00_HCD is not set
1455 +# CONFIG_USB_EHCI_HCD is not set
1456 +# CONFIG_USB_ISP116X_HCD is not set
1457 +# CONFIG_USB_ISP1760_HCD is not set
1458 +# CONFIG_USB_OHCI_HCD is not set
1459 +# CONFIG_USB_UHCI_HCD is not set
1460 +# CONFIG_USB_SL811_HCD is not set
1461 +# CONFIG_USB_R8A66597_HCD is not set
1462 +# CONFIG_USB_WHCI_HCD is not set
1463 +# CONFIG_USB_HWA_HCD is not set
1464 +CONFIG_USB_MUSB_HDRC=y
1465 +# CONFIG_USB_TUSB6010 is not set
1466 +CONFIG_USB_MUSB_HOST=y
1467 +# CONFIG_USB_MUSB_PERIPHERAL is not set
1468 +# CONFIG_USB_MUSB_OTG is not set
1469 +CONFIG_USB_MUSB_HDRC_HCD=y
1470 +CONFIG_MUSB_PIO_ONLY=y
1471 +# CONFIG_USB_MUSB_DEBUG is not set
1472 +
1473 +#
1474 +# USB Device Class drivers
1475 +#
1476 +# CONFIG_USB_ACM is not set
1477 +# CONFIG_USB_PRINTER is not set
1478 +# CONFIG_USB_WDM is not set
1479 +# CONFIG_USB_TMC is not set
1480 +
1481 +#
1482 +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
1483 +#
1484 +
1485 +#
1486 +# see USB_STORAGE Help for more information
1487 +#
1488 +CONFIG_USB_STORAGE=y
1489 +# CONFIG_USB_STORAGE_DEBUG is not set
1490 +# CONFIG_USB_STORAGE_DATAFAB is not set
1491 +# CONFIG_USB_STORAGE_FREECOM is not set
1492 +# CONFIG_USB_STORAGE_ISD200 is not set
1493 +# CONFIG_USB_STORAGE_DPCM is not set
1494 +# CONFIG_USB_STORAGE_USBAT is not set
1495 +# CONFIG_USB_STORAGE_SDDR09 is not set
1496 +# CONFIG_USB_STORAGE_SDDR55 is not set
1497 +# CONFIG_USB_STORAGE_JUMPSHOT is not set
1498 +# CONFIG_USB_STORAGE_ALAUDA is not set
1499 +# CONFIG_USB_STORAGE_ONETOUCH is not set
1500 +# CONFIG_USB_STORAGE_KARMA is not set
1501 +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
1502 +CONFIG_USB_LIBUSUAL=y
1503 +
1504 +#
1505 +# USB Imaging devices
1506 +#
1507 +# CONFIG_USB_MDC800 is not set
1508 +# CONFIG_USB_MICROTEK is not set
1509 +
1510 +#
1511 +# USB port drivers
1512 +#
1513 +# CONFIG_USB_SERIAL is not set
1514 +
1515 +#
1516 +# USB Miscellaneous drivers
1517 +#
1518 +# CONFIG_USB_EMI62 is not set
1519 +# CONFIG_USB_EMI26 is not set
1520 +# CONFIG_USB_ADUTUX is not set
1521 +# CONFIG_USB_SEVSEG is not set
1522 +# CONFIG_USB_RIO500 is not set
1523 +# CONFIG_USB_LEGOTOWER is not set
1524 +# CONFIG_USB_LCD is not set
1525 +# CONFIG_USB_BERRY_CHARGE is not set
1526 +# CONFIG_USB_LED is not set
1527 +# CONFIG_USB_CYPRESS_CY7C63 is not set
1528 +# CONFIG_USB_CYTHERM is not set
1529 +# CONFIG_USB_PHIDGET is not set
1530 +# CONFIG_USB_IDMOUSE is not set
1531 +# CONFIG_USB_FTDI_ELAN is not set
1532 +# CONFIG_USB_APPLEDISPLAY is not set
1533 +# CONFIG_USB_LD is not set
1534 +# CONFIG_USB_TRANCEVIBRATOR is not set
1535 +# CONFIG_USB_IOWARRIOR is not set
1536 +# CONFIG_USB_TEST is not set
1537 +# CONFIG_USB_ISIGHTFW is not set
1538 +# CONFIG_USB_VST is not set
1539 +# CONFIG_USB_GADGET is not set
1540 +# CONFIG_UWB is not set
1541 +# CONFIG_MMC is not set
1542 +# CONFIG_MEMSTICK is not set
1543 +CONFIG_NEW_LEDS=y
1544 +CONFIG_LEDS_CLASS=y
1545 +
1546 +#
1547 +# LED drivers
1548 +#
1549 +CONFIG_LEDS_GPIO=y
1550 +
1551 +#
1552 +# LED Triggers
1553 +#
1554 +# CONFIG_LEDS_TRIGGERS is not set
1555 +# CONFIG_ACCESSIBILITY is not set
1556 +# CONFIG_INFINIBAND is not set
1557 +# CONFIG_RTC_CLASS is not set
1558 +# CONFIG_DMADEVICES is not set
1559 +# CONFIG_UIO is not set
1560 +# CONFIG_STAGING is not set
1561 +
1562 +#
1563 +# File systems
1564 +#
1565 +# CONFIG_EXT2_FS is not set
1566 +# CONFIG_EXT3_FS is not set
1567 +# CONFIG_EXT4_FS is not set
1568 +# CONFIG_REISERFS_FS is not set
1569 +# CONFIG_JFS_FS is not set
1570 +# CONFIG_FS_POSIX_ACL is not set
1571 +CONFIG_FILE_LOCKING=y
1572 +# CONFIG_XFS_FS is not set
1573 +# CONFIG_OCFS2_FS is not set
1574 +# CONFIG_DNOTIFY is not set
1575 +# CONFIG_INOTIFY is not set
1576 +# CONFIG_QUOTA is not set
1577 +CONFIG_AUTOFS_FS=y
1578 +# CONFIG_AUTOFS4_FS is not set
1579 +# CONFIG_FUSE_FS is not set
1580 +
1581 +#
1582 +# CD-ROM/DVD Filesystems
1583 +#
1584 +# CONFIG_ISO9660_FS is not set
1585 +# CONFIG_UDF_FS is not set
1586 +
1587 +#
1588 +# DOS/FAT/NT Filesystems
1589 +#
1590 +CONFIG_FAT_FS=y
1591 +CONFIG_MSDOS_FS=y
1592 +CONFIG_VFAT_FS=y
1593 +CONFIG_FAT_DEFAULT_CODEPAGE=437
1594 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1595 +# CONFIG_NTFS_FS is not set
1596 +
1597 +#
1598 +# Pseudo filesystems
1599 +#
1600 +CONFIG_PROC_FS=y
1601 +CONFIG_PROC_SYSCTL=y
1602 +CONFIG_SYSFS=y
1603 +# CONFIG_TMPFS is not set
1604 +# CONFIG_HUGETLB_PAGE is not set
1605 +# CONFIG_CONFIGFS_FS is not set
1606 +
1607 +#
1608 +# Layered filesystems
1609 +#
1610 +CONFIG_UNION_FS=y
1611 +# CONFIG_UNION_FS_XATTR is not set
1612 +# CONFIG_UNION_FS_DEBUG is not set
1613 +
1614 +#
1615 +# Miscellaneous filesystems
1616 +#
1617 +# CONFIG_ADFS_FS is not set
1618 +# CONFIG_AFFS_FS is not set
1619 +# CONFIG_HFS_FS is not set
1620 +# CONFIG_HFSPLUS_FS is not set
1621 +# CONFIG_BEFS_FS is not set
1622 +# CONFIG_BFS_FS is not set
1623 +# CONFIG_EFS_FS is not set
1624 +CONFIG_JFFS2_FS=y
1625 +CONFIG_JFFS2_FS_DEBUG=0
1626 +CONFIG_JFFS2_FS_WRITEBUFFER=y
1627 +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1628 +# CONFIG_JFFS2_SUMMARY is not set
1629 +# CONFIG_JFFS2_FS_XATTR is not set
1630 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1631 +CONFIG_JFFS2_ZLIB=y
1632 +# CONFIG_JFFS2_LZO is not set
1633 +CONFIG_JFFS2_RTIME=y
1634 +# CONFIG_JFFS2_RUBIN is not set
1635 +# CONFIG_CRAMFS is not set
1636 +# CONFIG_VXFS_FS is not set
1637 +# CONFIG_MINIX_FS is not set
1638 +# CONFIG_OMFS_FS is not set
1639 +# CONFIG_HPFS_FS is not set
1640 +# CONFIG_QNX4FS_FS is not set
1641 +CONFIG_ROMFS_FS=y
1642 +# CONFIG_SYSV_FS is not set
1643 +# CONFIG_UFS_FS is not set
1644 +# CONFIG_NETWORK_FILESYSTEMS is not set
1645 +
1646 +#
1647 +# Partition Types
1648 +#
1649 +CONFIG_PARTITION_ADVANCED=y
1650 +# CONFIG_ACORN_PARTITION is not set
1651 +# CONFIG_OSF_PARTITION is not set
1652 +# CONFIG_AMIGA_PARTITION is not set
1653 +# CONFIG_ATARI_PARTITION is not set
1654 +# CONFIG_MAC_PARTITION is not set
1655 +CONFIG_MSDOS_PARTITION=y
1656 +# CONFIG_BSD_DISKLABEL is not set
1657 +# CONFIG_MINIX_SUBPARTITION is not set
1658 +# CONFIG_SOLARIS_X86_PARTITION is not set
1659 +# CONFIG_UNIXWARE_DISKLABEL is not set
1660 +CONFIG_LDM_PARTITION=y
1661 +CONFIG_LDM_DEBUG=y
1662 +# CONFIG_SGI_PARTITION is not set
1663 +# CONFIG_ULTRIX_PARTITION is not set
1664 +# CONFIG_SUN_PARTITION is not set
1665 +# CONFIG_KARMA_PARTITION is not set
1666 +# CONFIG_EFI_PARTITION is not set
1667 +# CONFIG_SYSV68_PARTITION is not set
1668 +CONFIG_NLS=y
1669 +CONFIG_NLS_DEFAULT="iso8859-1"
1670 +CONFIG_NLS_CODEPAGE_437=y
1671 +# CONFIG_NLS_CODEPAGE_737 is not set
1672 +# CONFIG_NLS_CODEPAGE_775 is not set
1673 +# CONFIG_NLS_CODEPAGE_850 is not set
1674 +# CONFIG_NLS_CODEPAGE_852 is not set
1675 +# CONFIG_NLS_CODEPAGE_855 is not set
1676 +# CONFIG_NLS_CODEPAGE_857 is not set
1677 +# CONFIG_NLS_CODEPAGE_860 is not set
1678 +# CONFIG_NLS_CODEPAGE_861 is not set
1679 +# CONFIG_NLS_CODEPAGE_862 is not set
1680 +# CONFIG_NLS_CODEPAGE_863 is not set
1681 +# CONFIG_NLS_CODEPAGE_864 is not set
1682 +# CONFIG_NLS_CODEPAGE_865 is not set
1683 +# CONFIG_NLS_CODEPAGE_866 is not set
1684 +# CONFIG_NLS_CODEPAGE_869 is not set
1685 +# CONFIG_NLS_CODEPAGE_936 is not set
1686 +# CONFIG_NLS_CODEPAGE_950 is not set
1687 +# CONFIG_NLS_CODEPAGE_932 is not set
1688 +# CONFIG_NLS_CODEPAGE_949 is not set
1689 +# CONFIG_NLS_CODEPAGE_874 is not set
1690 +# CONFIG_NLS_ISO8859_8 is not set
1691 +# CONFIG_NLS_CODEPAGE_1250 is not set
1692 +# CONFIG_NLS_CODEPAGE_1251 is not set
1693 +CONFIG_NLS_ASCII=y
1694 +CONFIG_NLS_ISO8859_1=y
1695 +# CONFIG_NLS_ISO8859_2 is not set
1696 +# CONFIG_NLS_ISO8859_3 is not set
1697 +# CONFIG_NLS_ISO8859_4 is not set
1698 +# CONFIG_NLS_ISO8859_5 is not set
1699 +# CONFIG_NLS_ISO8859_6 is not set
1700 +# CONFIG_NLS_ISO8859_7 is not set
1701 +# CONFIG_NLS_ISO8859_9 is not set
1702 +# CONFIG_NLS_ISO8859_13 is not set
1703 +# CONFIG_NLS_ISO8859_14 is not set
1704 +CONFIG_NLS_ISO8859_15=y
1705 +# CONFIG_NLS_KOI8_R is not set
1706 +# CONFIG_NLS_KOI8_U is not set
1707 +CONFIG_NLS_UTF8=y
1708 +# CONFIG_DLM is not set
1709 +
1710 +#
1711 +# Security options
1712 +#
1713 +# CONFIG_KEYS is not set
1714 +# CONFIG_SECURITY is not set
1715 +# CONFIG_SECURITYFS is not set
1716 +# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1717 +CONFIG_CRYPTO=y
1718 +
1719 +#
1720 +# Crypto core or helper
1721 +#
1722 +# CONFIG_CRYPTO_FIPS is not set
1723 +CONFIG_CRYPTO_ALGAPI=y
1724 +CONFIG_CRYPTO_ALGAPI2=y
1725 +CONFIG_CRYPTO_AEAD2=y
1726 +CONFIG_CRYPTO_BLKCIPHER=y
1727 +CONFIG_CRYPTO_BLKCIPHER2=y
1728 +CONFIG_CRYPTO_HASH2=y
1729 +CONFIG_CRYPTO_RNG2=y
1730 +CONFIG_CRYPTO_MANAGER=y
1731 +CONFIG_CRYPTO_MANAGER2=y
1732 +# CONFIG_CRYPTO_GF128MUL is not set
1733 +# CONFIG_CRYPTO_NULL is not set
1734 +# CONFIG_CRYPTO_CRYPTD is not set
1735 +# CONFIG_CRYPTO_AUTHENC is not set
1736 +# CONFIG_CRYPTO_TEST is not set
1737 +
1738 +#
1739 +# Authenticated Encryption with Associated Data
1740 +#
1741 +# CONFIG_CRYPTO_CCM is not set
1742 +# CONFIG_CRYPTO_GCM is not set
1743 +# CONFIG_CRYPTO_SEQIV is not set
1744 +
1745 +#
1746 +# Block modes
1747 +#
1748 +# CONFIG_CRYPTO_CBC is not set
1749 +# CONFIG_CRYPTO_CTR is not set
1750 +# CONFIG_CRYPTO_CTS is not set
1751 +CONFIG_CRYPTO_ECB=y
1752 +# CONFIG_CRYPTO_LRW is not set
1753 +# CONFIG_CRYPTO_PCBC is not set
1754 +# CONFIG_CRYPTO_XTS is not set
1755 +
1756 +#
1757 +# Hash modes
1758 +#
1759 +# CONFIG_CRYPTO_HMAC is not set
1760 +# CONFIG_CRYPTO_XCBC is not set
1761 +
1762 +#
1763 +# Digest
1764 +#
1765 +# CONFIG_CRYPTO_CRC32C is not set
1766 +# CONFIG_CRYPTO_MD4 is not set
1767 +# CONFIG_CRYPTO_MD5 is not set
1768 +# CONFIG_CRYPTO_MICHAEL_MIC is not set
1769 +# CONFIG_CRYPTO_RMD128 is not set
1770 +# CONFIG_CRYPTO_RMD160 is not set
1771 +# CONFIG_CRYPTO_RMD256 is not set
1772 +# CONFIG_CRYPTO_RMD320 is not set
1773 +# CONFIG_CRYPTO_SHA1 is not set
1774 +# CONFIG_CRYPTO_SHA256 is not set
1775 +# CONFIG_CRYPTO_SHA512 is not set
1776 +# CONFIG_CRYPTO_TGR192 is not set
1777 +# CONFIG_CRYPTO_WP512 is not set
1778 +
1779 +#
1780 +# Ciphers
1781 +#
1782 +CONFIG_CRYPTO_AES=y
1783 +# CONFIG_CRYPTO_ANUBIS is not set
1784 +CONFIG_CRYPTO_ARC4=y
1785 +# CONFIG_CRYPTO_BLOWFISH is not set
1786 +# CONFIG_CRYPTO_CAMELLIA is not set
1787 +# CONFIG_CRYPTO_CAST5 is not set
1788 +# CONFIG_CRYPTO_CAST6 is not set
1789 +# CONFIG_CRYPTO_DES is not set
1790 +# CONFIG_CRYPTO_FCRYPT is not set
1791 +# CONFIG_CRYPTO_KHAZAD is not set
1792 +# CONFIG_CRYPTO_SALSA20 is not set
1793 +# CONFIG_CRYPTO_SEED is not set
1794 +# CONFIG_CRYPTO_SERPENT is not set
1795 +# CONFIG_CRYPTO_TEA is not set
1796 +# CONFIG_CRYPTO_TWOFISH is not set
1797 +
1798 +#
1799 +# Compression
1800 +#
1801 +# CONFIG_CRYPTO_DEFLATE is not set
1802 +# CONFIG_CRYPTO_LZO is not set
1803 +
1804 +#
1805 +# Random Number Generation
1806 +#
1807 +# CONFIG_CRYPTO_ANSI_CPRNG is not set
1808 +# CONFIG_CRYPTO_HW is not set
1809 +
1810 +#
1811 +# OCF Configuration
1812 +#
1813 +# CONFIG_OCF_OCF is not set
1814 +
1815 +#
1816 +# Library routines
1817 +#
1818 +CONFIG_BITREVERSE=y
1819 +CONFIG_CRC_CCITT=y
1820 +# CONFIG_CRC16 is not set
1821 +# CONFIG_CRC_T10DIF is not set
1822 +# CONFIG_CRC_ITU_T is not set
1823 +CONFIG_CRC32=y
1824 +# CONFIG_CRC7 is not set
1825 +# CONFIG_LIBCRC32C is not set
1826 +CONFIG_ZLIB_INFLATE=y
1827 +CONFIG_ZLIB_DEFLATE=y
1828 +CONFIG_TEXTSEARCH=y
1829 +CONFIG_TEXTSEARCH_KMP=y
1830 +CONFIG_TEXTSEARCH_BM=y
1831 +CONFIG_TEXTSEARCH_FSM=y
1832 +CONFIG_HAS_IOMEM=y
1833 +CONFIG_HAS_DMA=y
1834 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/a.out.h linux-2.6.28.10/arch/ubicom32/include/asm/a.out.h
1835 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/a.out.h 1970-01-01 02:00:00.000000000 +0200
1836 +++ linux-2.6.28.10/arch/ubicom32/include/asm/a.out.h 2009-08-06 10:31:02.000000000 +0300
1837 @@ -0,0 +1,47 @@
1838 +/*
1839 + * arch/ubicom32/include/asm/a.out.h
1840 + * Definitions for Ubicom32 a.out executable format.
1841 + *
1842 + * (C) Copyright 2009, Ubicom, Inc.
1843 + *
1844 + * This file is part of the Ubicom32 Linux Kernel Port.
1845 + *
1846 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
1847 + * it and/or modify it under the terms of the GNU General Public License
1848 + * as published by the Free Software Foundation, either version 2 of the
1849 + * License, or (at your option) any later version.
1850 + *
1851 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
1852 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
1853 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
1854 + * the GNU General Public License for more details.
1855 + *
1856 + * You should have received a copy of the GNU General Public License
1857 + * along with the Ubicom32 Linux Kernel Port. If not,
1858 + * see <http://www.gnu.org/licenses/>.
1859 + *
1860 + * Ubicom32 implementation derived from (with many thanks):
1861 + * arch/m68knommu
1862 + * arch/blackfin
1863 + * arch/parisc
1864 + */
1865 +#ifndef _ASM_UBICOM32_A_OUT_H
1866 +#define _ASM_UBICOM32_A_OUT_H
1867 +
1868 +struct exec
1869 +{
1870 + unsigned long a_info; /* Use macros N_MAGIC, etc for access */
1871 + unsigned a_text; /* length of text, in bytes */
1872 + unsigned a_data; /* length of data, in bytes */
1873 + unsigned a_bss; /* length of uninitialized data area for file, in bytes */
1874 + unsigned a_syms; /* length of symbol table data in file, in bytes */
1875 + unsigned a_entry; /* start address */
1876 + unsigned a_trsize; /* length of relocation info for text, in bytes */
1877 + unsigned a_drsize; /* length of relocation info for data, in bytes */
1878 +};
1879 +
1880 +#define N_TRSIZE(a) ((a).a_trsize)
1881 +#define N_DRSIZE(a) ((a).a_drsize)
1882 +#define N_SYMSIZE(a) ((a).a_syms)
1883 +
1884 +#endif /* _ASM_UBICOM32_A_OUT_H */
1885 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/atomic.h linux-2.6.28.10/arch/ubicom32/include/asm/atomic.h
1886 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/atomic.h 1970-01-01 02:00:00.000000000 +0200
1887 +++ linux-2.6.28.10/arch/ubicom32/include/asm/atomic.h 2009-08-06 10:31:02.000000000 +0300
1888 @@ -0,0 +1,352 @@
1889 +/*
1890 + * arch/ubicom32/include/asm/atomic.h
1891 + * Atomic operations definitions for Ubicom32 architecture.
1892 + *
1893 + * (C) Copyright 2009, Ubicom, Inc.
1894 + *
1895 + * This file is part of the Ubicom32 Linux Kernel Port.
1896 + *
1897 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
1898 + * it and/or modify it under the terms of the GNU General Public License
1899 + * as published by the Free Software Foundation, either version 2 of the
1900 + * License, or (at your option) any later version.
1901 + *
1902 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
1903 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
1904 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
1905 + * the GNU General Public License for more details.
1906 + *
1907 + * You should have received a copy of the GNU General Public License
1908 + * along with the Ubicom32 Linux Kernel Port. If not,
1909 + * see <http://www.gnu.org/licenses/>.
1910 + *
1911 + * Ubicom32 implementation derived from (with many thanks):
1912 + * arch/m68knommu
1913 + * arch/blackfin
1914 + * arch/parisc
1915 + */
1916 +#ifndef _ASM_UBICOM32_ATOMIC_H
1917 +#define _ASM_UBICOM32_ATOMIC_H
1918 +
1919 +#include <asm/system.h>
1920 +#include <asm/ubicom32-common.h>
1921 +#include <asm/types.h>
1922 +
1923 +/*
1924 + * Most instructions on the Ubicom32 processor are atomic in that they
1925 + * execute in one clock cycle. However, Linux has several operations
1926 + * (e.g. compare and swap) which will require more than a single instruction
1927 + * to perform. To achieve this, the Ubicom32 processor uses a single
1928 + * global bit in a scratchpad register as a critical section lock. All
1929 + * atomic operations acquire this lock.
1930 + *
1931 + * NOTE: To AVOID DEADLOCK(s), the atomic lock must only be used for atomic
1932 + * operations or by the ldsr to avoid disabling a thread performing an atomic
1933 + * operation.
1934 + *
1935 + * Do not attempt to disable interrupts while holding the atomic operations
1936 + * lock or you will DEADLOCK the system.
1937 + */
1938 +
1939 +typedef struct {
1940 + volatile int counter;
1941 +} atomic_t;
1942 +
1943 +#define ATOMIC_INIT(i) { (i) }
1944 +
1945 +/*
1946 + * __atomic_add()
1947 + * Add i to v and return the result.
1948 + */
1949 +static inline void __atomic_add(int i, atomic_t *v)
1950 +{
1951 + atomic_t *vt = v;
1952 +
1953 + __atomic_lock_acquire();
1954 + vt->counter += i;
1955 + __atomic_lock_release();
1956 +}
1957 +
1958 +/*
1959 + * __atomic_sub()
1960 + * Subtract i from v and return the result.
1961 + */
1962 +static inline void __atomic_sub(int i, atomic_t *v)
1963 +{
1964 + atomic_t *vt = v;
1965 +
1966 + __atomic_lock_acquire();
1967 + vt->counter -= i;
1968 + __atomic_lock_release();
1969 +}
1970 +
1971 +/*
1972 + * __atomic_add_return()
1973 + * Add i to v and return the result.
1974 + *
1975 + * The implementation here looks rather odd because we appear to be doing
1976 + * the addition twice. In fact that's exactly what we're doing but with
1977 + * the ubicom32 instruction set we can do the inner load and add with two
1978 + * instructions whereas generating both the atomic result and the "ret"
1979 + * result requires three instructions. The second add is generally only as
1980 + * costly as a move instruction and in cases where we compare the result
1981 + * with a constant the compiler can fold two constant values and do a
1982 + * single instruction, thus saving an instruction overall!
1983 + *
1984 + * At the worst we save one instruction inside the atomic lock.
1985 + */
1986 +static inline int __atomic_add_return(int i, atomic_t *v)
1987 +{
1988 + int ret;
1989 + atomic_t *vt = v;
1990 +
1991 + __atomic_lock_acquire();
1992 + ret = vt->counter;
1993 + vt->counter = ret + i;
1994 + __atomic_lock_release();
1995 +
1996 + return ret + i;
1997 +}
1998 +
1999 +/*
2000 + * __atomic_sub_return()
2001 + * Subtract i from v and return the result.
2002 + *
2003 + * The implementation here looks rather odd because we appear to be doing
2004 + * the subtraction twice. In fact that's exactly what we're doing but with
2005 + * the ubicom32 instruction set we can do the inner load and sub with two
2006 + * instructions whereas generating both the atomic result and the "ret"
2007 + * result requires three instructions. The second sub is generally only as
2008 + * costly as a move instruction and in cases where we compare the result
2009 + * with a constant the compiler can fold two constant values and do a
2010 + * single instruction, thus saving an instruction overall!
2011 + *
2012 + * At the worst we save one instruction inside the atomic lock.
2013 + */
2014 +static inline int __atomic_sub_return(int i, atomic_t *v)
2015 +{
2016 + int ret;
2017 + atomic_t *vt = v;
2018 +
2019 + __atomic_lock_acquire();
2020 + ret = vt->counter;
2021 + vt->counter = ret - i;
2022 + __atomic_lock_release();
2023 +
2024 + return ret - i;
2025 +}
2026 +
2027 +/*
2028 + * PUBLIC API FOR ATOMIC!
2029 + */
2030 +#define atomic_add(i,v) (__atomic_add( ((int)i),(v)))
2031 +#define atomic_sub(i,v) (__atomic_sub( ((int)i),(v)))
2032 +#define atomic_inc(v) (__atomic_add( 1,(v)))
2033 +#define atomic_dec(v) (__atomic_sub( 1,(v)))
2034 +#define atomic_add_return(i,v) (__atomic_add_return( ((int)i),(v)))
2035 +#define atomic_sub_return(i,v) (__atomic_sub_return( ((int)i),(v)))
2036 +#define atomic_inc_return(v) (__atomic_add_return( 1,(v)))
2037 +#define atomic_dec_return(v) (__atomic_sub_return( 1,(v)))
2038 +#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
2039 +#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
2040 +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0)
2041 +#define atomic_sub_and_test(i,v) (atomic_sub_return((i),(v)) == 0)
2042 +
2043 +/*
2044 + * atomic_read()
2045 + * Acquire the atomic lock and read the variable.
2046 + */
2047 +static inline int atomic_read(const atomic_t *v)
2048 +{
2049 + int ret;
2050 + const atomic_t *vt = v;
2051 +
2052 + __atomic_lock_acquire();
2053 + ret = vt->counter;
2054 + __atomic_lock_release();
2055 +
2056 + return ret;
2057 +}
2058 +
2059 +/*
2060 + * atomic_set()
2061 + * Acquire the atomic lock and set the variable.
2062 + */
2063 +static inline void atomic_set(atomic_t *v, int i)
2064 +{
2065 + atomic_t *vt = v;
2066 +
2067 + __atomic_lock_acquire();
2068 + vt->counter = i;
2069 + __atomic_lock_release();
2070 +}
2071 +
2072 +/*
2073 + * atomic_cmpxchg
2074 + * Acquire the atomic lock and exchange if current == old.
2075 + */
2076 +static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
2077 +{
2078 + int prev;
2079 + atomic_t *vt = v;
2080 +
2081 + __atomic_lock_acquire();
2082 + prev = vt->counter;
2083 + if (prev == old) {
2084 + vt->counter = new;
2085 + }
2086 + __atomic_lock_release();
2087 +
2088 + return prev;
2089 +}
2090 +
2091 +/*
2092 + * atomic_xchg()
2093 + * Acquire the atomic lock and exchange values.
2094 + */
2095 +static inline int atomic_xchg(atomic_t *v, int new)
2096 +{
2097 + int prev;
2098 + atomic_t *vt = v;
2099 +
2100 + __atomic_lock_acquire();
2101 + prev = vt->counter;
2102 + vt->counter = new;
2103 + __atomic_lock_release();
2104 +
2105 + return prev;
2106 +}
2107 +
2108 +/*
2109 + * atomic_add_unless()
2110 + * Acquire the atomic lock and add a unless the value is u.
2111 + */
2112 +static inline int atomic_add_unless(atomic_t *v, int a, int u)
2113 +{
2114 + int prev;
2115 + atomic_t *vt = v;
2116 +
2117 + __atomic_lock_acquire();
2118 + prev = vt->counter;
2119 + if (prev != u) {
2120 + vt->counter += a;
2121 + __atomic_lock_release();
2122 + return 1;
2123 + }
2124 +
2125 + __atomic_lock_release();
2126 + return 0;
2127 +}
2128 +
2129 +#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
2130 +
2131 +#include <asm-generic/atomic.h>
2132 +
2133 +/*
2134 + * The following is not a real function. The compiler should remove the function
2135 + * call as long as the user does not pass in a size that __xchg and __cmpxchg
2136 + * are not prepared for. If the user does pass in an unknown size, the user
2137 + * will get a link time error.
2138 + *
2139 + * The no return is to prevent a compiler error that can occur when dealing with
2140 + * uninitialized variables. Given that the function doesn't exist there is no
2141 + * net effect (and if it did it would not return).
2142 + */
2143 +extern void __xchg_called_with_bad_pointer(void) __attribute__((noreturn));
2144 +
2145 +/*
2146 + * __xchg()
2147 + * Xchange *ptr for x atomically.
2148 + *
2149 + * Must be both locally atomic and atomic on SMP. Ubicom32 does not have an
2150 + * atomic exchange instruction so we use the global atomic_lock.
2151 + */
2152 +static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size)
2153 +{
2154 + unsigned long ret;
2155 +
2156 + __atomic_lock_acquire();
2157 +
2158 + switch (size) {
2159 + case 1:
2160 + ret = *(volatile unsigned char *)ptr;
2161 + *(volatile unsigned char *)ptr = x;
2162 + break;
2163 +
2164 + case 2:
2165 + ret = *(volatile unsigned short *)ptr;
2166 + *(volatile unsigned short *)ptr = x;
2167 + break;
2168 +
2169 + case 4:
2170 + ret = *(volatile unsigned int *)ptr;
2171 + *(volatile unsigned int *)ptr = x;
2172 + break;
2173 +
2174 + default:
2175 + __xchg_called_with_bad_pointer();
2176 + break;
2177 + }
2178 + __atomic_lock_release();
2179 + return ret;
2180 +}
2181 +
2182 +#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
2183 +
2184 +/*
2185 + * __cmpxchg()
2186 + * Compare and Xchange *ptr for x atomically.
2187 + *
2188 + * Must be both locally atomic and atomic on SMP. Ubicom32 does not have an
2189 + * atomic exchange instruction so we use the global atomic_lock.
2190 + */
2191 +static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, unsigned long next, int size)
2192 +{
2193 + unsigned long prev;
2194 +
2195 + __atomic_lock_acquire();
2196 + switch (size) {
2197 + case 1:
2198 + prev = *(u8 *)ptr;
2199 + if (prev == old) {
2200 + *(u8 *)ptr = (u8)next;
2201 + }
2202 + break;
2203 +
2204 + case 2:
2205 + prev = *(u16 *)ptr;
2206 + if (prev == old) {
2207 + *(u16 *)ptr = (u16)next;
2208 + }
2209 + break;
2210 +
2211 + case 4:
2212 + prev = *(u32 *)ptr;
2213 + if (prev == old) {
2214 + *(u32 *)ptr = (u32)next;
2215 + }
2216 + break;
2217 +
2218 + default:
2219 + __xchg_called_with_bad_pointer();
2220 + break;
2221 + }
2222 + __atomic_lock_release();
2223 + return prev;
2224 +}
2225 +
2226 +/*
2227 + * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make
2228 + * them available.
2229 + */
2230 +#define cmpxchg_local(ptr, o, n) \
2231 + ((__typeof__(*(ptr)))__cmpxchg((ptr), (unsigned long)(o), (unsigned long)(n), sizeof(*(ptr))))
2232 +
2233 +#define cmpxchg(ptr, o, n) __cmpxchg((ptr), (o), (n), sizeof(*(ptr)))
2234 +
2235 +#define smp_mb__before_atomic_inc() asm volatile ("" : : : "memory")
2236 +#define smp_mb__after_atomic_inc() asm volatile ("" : : : "memory")
2237 +#define smp_mb__before_atomic_dec() asm volatile ("" : : : "memory")
2238 +#define smp_mb__after_atomic_dec() asm volatile ("" : : : "memory")
2239 +
2240 +#endif /* _ASM_UBICOM32_ATOMIC_H */
2241 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/audio_tio.h linux-2.6.28.10/arch/ubicom32/include/asm/audio_tio.h
2242 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/audio_tio.h 1970-01-01 02:00:00.000000000 +0200
2243 +++ linux-2.6.28.10/arch/ubicom32/include/asm/audio_tio.h 2009-08-06 10:31:02.000000000 +0300
2244 @@ -0,0 +1,124 @@
2245 +/*
2246 + * arch/ubicom32/include/asm/audio_tio.h
2247 + * AudioTIO include file
2248 + *
2249 + * (C) Copyright 2009, Ubicom, Inc.
2250 + *
2251 + * This file is part of the Ubicom32 Linux Kernel Port.
2252 + *
2253 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2254 + * it and/or modify it under the terms of the GNU General Public License
2255 + * as published by the Free Software Foundation, either version 2 of the
2256 + * License, or (at your option) any later version.
2257 + *
2258 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2259 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2260 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2261 + * the GNU General Public License for more details.
2262 + *
2263 + * You should have received a copy of the GNU General Public License
2264 + * along with the Ubicom32 Linux Kernel Port. If not,
2265 + * see <http://www.gnu.org/licenses/>.
2266 + */
2267 +
2268 +#ifndef _AUDIO_TIO_H
2269 +#define _AUDIO_TIO_H
2270 +
2271 +#include <asm/devtree.h>
2272 +#include <asm/ubi32-pcm.h>
2273 +
2274 +#define UBI32_AUDIO_INT_FLAG_MORE_SAMPLES 0x00000001
2275 +#define UBI32_AUDIO_INT_FLAG_COMMAND 0x00000002
2276 +
2277 +/*
2278 + * Commands the Primary OS sends to the audio device
2279 + */
2280 +enum ubi32_audio_command {
2281 + UBI32_AUDIO_CMD_NONE,
2282 + UBI32_AUDIO_CMD_START,
2283 + UBI32_AUDIO_CMD_STOP,
2284 + UBI32_AUDIO_CMD_PAUSE,
2285 + UBI32_AUDIO_CMD_RESUME,
2286 + UBI32_AUDIO_CMD_MUTE,
2287 + UBI32_AUDIO_CMD_UNMUTE,
2288 + UBI32_AUDIO_CMD_SETUP,
2289 + UBI32_AUDIO_CMD_ENABLE,
2290 + UBI32_AUDIO_CMD_DISABLE,
2291 +};
2292 +
2293 +/*
2294 + * Flag bits passed in the registers
2295 + */
2296 +#define UBI32_CMD_SETUP_FLAG_LE (1 << 0) /* Use Little Endian Mode */
2297 +
2298 +/*
2299 + * Status bits that audio device can set to indicate reason
2300 + * for interrupting the Primary OS
2301 + */
2302 +#define UBI32_AUDIO_STATUS_PLAY_DMA0_REQUEST (1 << 0) /* Audio device needs samples in DMA0 for playback */
2303 +#define UBI32_AUDIO_STATUS_PLAY_DMA1_REQUEST (1 << 1) /* Audio device needs samples in DMA1 for playback */
2304 +
2305 +struct ubi32_audio_dma {
2306 + /*
2307 + * NOTE: The active flag shall only be SET by the producer and CLEARED
2308 + * by the consumer, NEVER the other way around. For playback, the
2309 + * Primary OS sets this flag and ipAudioTIO clears it.
2310 + *
2311 + * The producer shall not modify the ptr or ctr fields when the transfer
2312 + * is marked as active, as these are used by the consumer to do the
2313 + * transfer.
2314 + */
2315 + volatile uint32_t active; /* Nonzero if data in ptr/ctr ready to be transferred */
2316 + //volatile u32_t active; /* Nonzero if data in ptr/ctr ready to be transferred */
2317 + volatile void *ptr; /* Pointer to data to be transferred */
2318 + volatile uint32_t ctr; /* Counter: number of data units to transfer */
2319 + //volatile u32_t ctr; /* Counter: number of data units to transfer */
2320 +};
2321 +
2322 +#define AUDIOTIONODE_CAP_BE (1 << 0)
2323 +#define AUDIOTIONODE_CAP_LE (1 << 1)
2324 +
2325 +/*
2326 + * Resource indices used to access IRQs via platform_get_resource
2327 + */
2328 +#define AUDIOTIO_MEM_RESOURCE 0
2329 +#define AUDIOTIO_TX_IRQ_RESOURCE 0
2330 +#define AUDIOTIO_RX_IRQ_RESOURCE 1
2331 +
2332 +#define AUDIOTIONODE_VERSION 5
2333 +struct audiotionode {
2334 + struct devtree_node dn;
2335 + uint32_t version; /* Version of this node */
2336 + struct audiotioregs *regs;
2337 +};
2338 +
2339 +#define AUDIOTIOREGS_VERSION 3
2340 +struct audiotioregs {
2341 + uint32_t version;
2342 + uint32_t caps; /* Capabilities of the driver */
2343 + u32_t *sample_rates; /* Sample Rates supported by this driver */
2344 + u32_t n_sample_rates; /* Number of sample rates supported by this driver */
2345 + u32_t channel_mask; /* The channel configs supported by this driver (bit 1 = 1 channel, etc) */
2346 + volatile uint32_t int_flags; /* Reason for interrupting audio device */
2347 + volatile enum ubi32_audio_command command; /* Command from Primary OS */
2348 + volatile uint32_t flags; /* Flag bits for this command */
2349 + volatile uint32_t channels; /* Number of channels in stream */
2350 + volatile uint32_t sample_rate; /* Sample rate */
2351 + volatile uint32_t status; /* Status bits sent from AudioTIO to Primary OS */
2352 + volatile void *current_read_pos; /* Position of next sample to be removed from Primary OS sample buffer */
2353 +
2354 + /*
2355 + * These are the transfer requests. They are used in alternating
2356 + * order so that when ipAudioTIO is processing one request, the
2357 + * Primary OS can fill in the other one.
2358 + *
2359 + * NOTE: The active bit shall always be SET by the producer and
2360 + * CLEARED by the consumer, NEVER the other way around.
2361 + */
2362 + struct ubi32_audio_dma playback_xfer_requests[2];
2363 +};
2364 +
2365 +extern struct platform_device * __init audio_tio_alloc(const char *driver_name, const char *node_name, int priv_size);
2366 +
2367 +#define audio_tio_priv(pdev) (((struct ubi32pcm_platform_data *)(((struct platform_device *)(pdev))->dev.platform_data))->priv_data)
2368 +#endif
2369 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/auxvec.h linux-2.6.28.10/arch/ubicom32/include/asm/auxvec.h
2370 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/auxvec.h 1970-01-01 02:00:00.000000000 +0200
2371 +++ linux-2.6.28.10/arch/ubicom32/include/asm/auxvec.h 2009-08-06 10:31:02.000000000 +0300
2372 @@ -0,0 +1,32 @@
2373 +/*
2374 + * arch/ubicom32/include/asm/auxvec.h
2375 + * Symbolic values for the entries in the auxiliary table
2376 + * put on the initial stack.
2377 + *
2378 + * (C) Copyright 2009, Ubicom, Inc.
2379 + *
2380 + * This file is part of the Ubicom32 Linux Kernel Port.
2381 + *
2382 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2383 + * it and/or modify it under the terms of the GNU General Public License
2384 + * as published by the Free Software Foundation, either version 2 of the
2385 + * License, or (at your option) any later version.
2386 + *
2387 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2388 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2389 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2390 + * the GNU General Public License for more details.
2391 + *
2392 + * You should have received a copy of the GNU General Public License
2393 + * along with the Ubicom32 Linux Kernel Port. If not,
2394 + * see <http://www.gnu.org/licenses/>.
2395 + *
2396 + * Ubicom32 implementation derived from (with many thanks):
2397 + * arch/m68knommu
2398 + * arch/blackfin
2399 + * arch/parisc
2400 + */
2401 +#ifndef _ASM_UBICOM32_AUXVEC_H
2402 +#define _ASM_UBICOM32_AUXVEC_H
2403 +
2404 +#endif /* _ASM_UBICOM32_AUXVEC_H */
2405 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bitops.h linux-2.6.28.10/arch/ubicom32/include/asm/bitops.h
2406 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bitops.h 1970-01-01 02:00:00.000000000 +0200
2407 +++ linux-2.6.28.10/arch/ubicom32/include/asm/bitops.h 2009-08-06 10:31:02.000000000 +0300
2408 @@ -0,0 +1,171 @@
2409 +/*
2410 + * arch/ubicom32/include/asm/bitops.h
2411 + * Bit manipulation definitions for Ubicom32 architecture.
2412 + *
2413 + * (C) Copyright 2009, Ubicom, Inc.
2414 + *
2415 + * This file is part of the Ubicom32 Linux Kernel Port.
2416 + *
2417 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2418 + * it and/or modify it under the terms of the GNU General Public License
2419 + * as published by the Free Software Foundation, either version 2 of the
2420 + * License, or (at your option) any later version.
2421 + *
2422 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2423 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2424 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2425 + * the GNU General Public License for more details.
2426 + *
2427 + * You should have received a copy of the GNU General Public License
2428 + * along with the Ubicom32 Linux Kernel Port. If not,
2429 + * see <http://www.gnu.org/licenses/>.
2430 + *
2431 + * Ubicom32 implementation derived from (with many thanks):
2432 + * arch/m68knommu
2433 + * arch/blackfin
2434 + * arch/parisc
2435 + */
2436 +#ifndef _ASM_UBICOM32_BITOPS_H
2437 +#define _ASM_UBICOM32_BITOPS_H
2438 +
2439 +/*
2440 + * Copyright 1992, Linus Torvalds.
2441 + */
2442 +
2443 +#include <linux/compiler.h>
2444 +#include <asm/byteorder.h> /* swab32 */
2445 +
2446 +#ifdef __KERNEL__
2447 +
2448 +#ifndef _LINUX_BITOPS_H
2449 +#error only <linux/bitops.h> can be included directly
2450 +#endif
2451 +
2452 +#include <asm-generic/bitops/ffs.h>
2453 +#include <asm-generic/bitops/__ffs.h>
2454 +
2455 +#include <asm-generic/bitops/sched.h>
2456 +#include <asm-generic/bitops/ffz.h>
2457 +
2458 +#include <asm/ubicom32-common.h>
2459 +
2460 +static inline void set_bit(int bit, volatile unsigned long *p)
2461 +{
2462 + unsigned long mask = 1UL << (bit & 31);
2463 +
2464 + p += bit >> 5;
2465 +
2466 + __atomic_lock_acquire();
2467 + *p |= mask;
2468 + __atomic_lock_release();
2469 +}
2470 +
2471 +static inline void clear_bit(int bit, volatile unsigned long *p)
2472 +{
2473 + unsigned long mask = 1UL << (bit & 31);
2474 +
2475 + p += bit >> 5;
2476 +
2477 + __atomic_lock_acquire();
2478 + *p &= ~mask;
2479 + __atomic_lock_release();
2480 +}
2481 +
2482 +/*
2483 + * clear_bit() doesn't provide any barrier for the compiler.
2484 + */
2485 +#define smp_mb__before_clear_bit() barrier()
2486 +#define smp_mb__after_clear_bit() barrier()
2487 +
2488 +static inline void change_bit(int bit, volatile unsigned long *p)
2489 +{
2490 + unsigned long mask = 1UL << (bit & 31);
2491 +
2492 + p += bit >> 5;
2493 +
2494 + __atomic_lock_acquire();
2495 + *p ^= mask;
2496 + __atomic_lock_release();
2497 +}
2498 +
2499 +static inline int test_and_set_bit(int bit, volatile unsigned long *p)
2500 +{
2501 + unsigned int res;
2502 + unsigned long mask = 1UL << (bit & 31);
2503 +
2504 + p += bit >> 5;
2505 +
2506 + __atomic_lock_acquire();
2507 + res = *p;
2508 + *p = res | mask;
2509 + __atomic_lock_release();
2510 +
2511 + return res & mask;
2512 +}
2513 +
2514 +static inline int test_and_clear_bit(int bit, volatile unsigned long *p)
2515 +{
2516 + unsigned int res;
2517 + unsigned long mask = 1UL << (bit & 31);
2518 +
2519 + p += bit >> 5;
2520 +
2521 + __atomic_lock_acquire();
2522 + res = *p;
2523 + *p = res & ~mask;
2524 + __atomic_lock_release();
2525 +
2526 + return res & mask;
2527 +}
2528 +
2529 +static inline int test_and_change_bit(int bit, volatile unsigned long *p)
2530 +{
2531 + unsigned int res;
2532 + unsigned long mask = 1UL << (bit & 31);
2533 +
2534 + p += bit >> 5;
2535 +
2536 + __atomic_lock_acquire();
2537 + res = *p;
2538 + *p = res ^ mask;
2539 + __atomic_lock_release();
2540 +
2541 + return res & mask;
2542 +}
2543 +
2544 +#include <asm-generic/bitops/non-atomic.h>
2545 +
2546 +/*
2547 + * This routine doesn't need to be atomic.
2548 + */
2549 +static inline int __constant_test_bit(int nr, const volatile unsigned long *addr)
2550 +{
2551 + return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
2552 +}
2553 +
2554 +static inline int __test_bit(int nr, const volatile unsigned long *addr)
2555 +{
2556 + int * a = (int *) addr;
2557 + int mask;
2558 +
2559 + a += nr >> 5;
2560 + mask = 1 << (nr & 0x1f);
2561 + return ((mask & *a) != 0);
2562 +}
2563 +
2564 +#define test_bit(nr,addr) (__builtin_constant_p(nr) ? __constant_test_bit((nr),(addr)) : __test_bit((nr),(addr)))
2565 +
2566 +#include <asm-generic/bitops/find.h>
2567 +#include <asm-generic/bitops/hweight.h>
2568 +#include <asm-generic/bitops/lock.h>
2569 +
2570 +#include <asm-generic/bitops/ext2-non-atomic.h>
2571 +#include <asm-generic/bitops/ext2-atomic.h>
2572 +#include <asm-generic/bitops/minix.h>
2573 +
2574 +#endif /* __KERNEL__ */
2575 +
2576 +#include <asm-generic/bitops/fls.h>
2577 +#include <asm-generic/bitops/fls64.h>
2578 +
2579 +#endif /* _ASM_UBICOM32_BITOPS_H */
2580 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/board.h linux-2.6.28.10/arch/ubicom32/include/asm/board.h
2581 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/board.h 1970-01-01 02:00:00.000000000 +0200
2582 +++ linux-2.6.28.10/arch/ubicom32/include/asm/board.h 2009-08-06 10:31:02.000000000 +0300
2583 @@ -0,0 +1,34 @@
2584 +/*
2585 + * arch/ubicom32/include/asm/board.h
2586 + * Board init and revision definitions for Ubicom32 architecture.
2587 + *
2588 + * (C) Copyright 2009, Ubicom, Inc.
2589 + *
2590 + * This file is part of the Ubicom32 Linux Kernel Port.
2591 + *
2592 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2593 + * it and/or modify it under the terms of the GNU General Public License
2594 + * as published by the Free Software Foundation, either version 2 of the
2595 + * License, or (at your option) any later version.
2596 + *
2597 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2598 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2599 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2600 + * the GNU General Public License for more details.
2601 + *
2602 + * You should have received a copy of the GNU General Public License
2603 + * along with the Ubicom32 Linux Kernel Port. If not,
2604 + * see <http://www.gnu.org/licenses/>.
2605 + *
2606 + * Ubicom32 implementation derived from (with many thanks):
2607 + * arch/m68knommu
2608 + * arch/blackfin
2609 + * arch/parisc
2610 + */
2611 +#ifndef _ASM_UBICOM32_BOARD_H
2612 +#define _ASM_UBICOM32_BOARD_H
2613 +
2614 +extern const char *board_get_revision(void);
2615 +extern void __init board_init(void);
2616 +
2617 +#endif /* _ASM_UBICOM32_BOARD_H */
2618 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bootargs.h linux-2.6.28.10/arch/ubicom32/include/asm/bootargs.h
2619 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bootargs.h 1970-01-01 02:00:00.000000000 +0200
2620 +++ linux-2.6.28.10/arch/ubicom32/include/asm/bootargs.h 2009-08-06 10:31:02.000000000 +0300
2621 @@ -0,0 +1,34 @@
2622 +/*
2623 + * arch/ubicom32/include/asm/bootargs.h
2624 + * Kernel command line via the devtree API.
2625 + *
2626 + * (C) Copyright 2009, Ubicom, Inc.
2627 + *
2628 + * This file is part of the Ubicom32 Linux Kernel Port.
2629 + *
2630 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2631 + * it and/or modify it under the terms of the GNU General Public License
2632 + * as published by the Free Software Foundation, either version 2 of the
2633 + * License, or (at your option) any later version.
2634 + *
2635 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2636 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2637 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2638 + * the GNU General Public License for more details.
2639 + *
2640 + * You should have received a copy of the GNU General Public License
2641 + * along with the Ubicom32 Linux Kernel Port. If not,
2642 + * see <http://www.gnu.org/licenses/>.
2643 + *
2644 + * Ubicom32 implementation derived from (with many thanks):
2645 + * arch/m68knommu
2646 + * arch/blackfin
2647 + * arch/parisc
2648 + */
2649 +#ifndef _ASM_UBICOM32_BOOTARGS_H
2650 +#define _ASM_UBICOM32_BOOTARGS_H
2651 +
2652 +extern const char *bootargs_get_cmdline(void);
2653 +extern void __init bootargs_init(void);
2654 +
2655 +#endif /* _ASM_UBICOM32_BOOTARGS_H */
2656 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bootinfo.h linux-2.6.28.10/arch/ubicom32/include/asm/bootinfo.h
2657 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bootinfo.h 1970-01-01 02:00:00.000000000 +0200
2658 +++ linux-2.6.28.10/arch/ubicom32/include/asm/bootinfo.h 2009-08-06 10:31:02.000000000 +0300
2659 @@ -0,0 +1,34 @@
2660 +/*
2661 + * arch/ubicom32/include/asm/bootinfo.h
2662 + * Definitions of firmware boot parameters passed to the kernel.
2663 + *
2664 + * (C) Copyright 2009, Ubicom, Inc.
2665 + *
2666 + * This file is part of the Ubicom32 Linux Kernel Port.
2667 + *
2668 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2669 + * it and/or modify it under the terms of the GNU General Public License
2670 + * as published by the Free Software Foundation, either version 2 of the
2671 + * License, or (at your option) any later version.
2672 + *
2673 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2674 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2675 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2676 + * the GNU General Public License for more details.
2677 + *
2678 + * You should have received a copy of the GNU General Public License
2679 + * along with the Ubicom32 Linux Kernel Port. If not,
2680 + * see <http://www.gnu.org/licenses/>.
2681 + *
2682 + * Ubicom32 implementation derived from (with many thanks):
2683 + * arch/m68knommu
2684 + * arch/blackfin
2685 + * arch/parisc
2686 + */
2687 +
2688 +#ifndef _ASM_UBICOM32_BOOTINFO_H
2689 +#define _ASM_UBICOM32_BOOTINFO_H
2690 +
2691 +/* Nothing for ubicom32 */
2692 +
2693 +#endif /* _ASM_UBICOM32_BOOTINFO_H */
2694 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bug.h linux-2.6.28.10/arch/ubicom32/include/asm/bug.h
2695 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bug.h 1970-01-01 02:00:00.000000000 +0200
2696 +++ linux-2.6.28.10/arch/ubicom32/include/asm/bug.h 2009-08-06 10:31:02.000000000 +0300
2697 @@ -0,0 +1,53 @@
2698 +/*
2699 + * arch/ubicom32/include/asm/bug.h
2700 + * Generic bug.h for Ubicom32 architecture.
2701 + *
2702 + * (C) Copyright 2009, Ubicom, Inc.
2703 + *
2704 + * This file is part of the Ubicom32 Linux Kernel Port.
2705 + *
2706 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2707 + * it and/or modify it under the terms of the GNU General Public License
2708 + * as published by the Free Software Foundation, either version 2 of the
2709 + * License, or (at your option) any later version.
2710 + *
2711 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2712 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2713 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2714 + * the GNU General Public License for more details.
2715 + *
2716 + * You should have received a copy of the GNU General Public License
2717 + * along with the Ubicom32 Linux Kernel Port. If not,
2718 + * see <http://www.gnu.org/licenses/>.
2719 + *
2720 + * Ubicom32 implementation derived from (with many thanks):
2721 + * arch/m68knommu
2722 + * arch/blackfin
2723 + * arch/parisc
2724 + */
2725 +#ifndef _ASM_UBICOM32_BUG_H
2726 +#define _ASM_UBICOM32_BUG_H
2727 +
2728 +#include <linux/kernel.h>
2729 +#include <asm/thread.h>
2730 +
2731 +#if defined(CONFIG_STOP_ON_BUG)
2732 +/*
2733 + * __BUG_ON()
2734 + * Stall all threads to enable debugging.
2735 + */
2736 +static inline void __BUG_ON(unsigned long c)
2737 +{
2738 + if (unlikely(c)) {
2739 + THREAD_STALL;
2740 + }
2741 + return;
2742 +}
2743 +
2744 +#define BUG_ON(c) __BUG_ON((unsigned long)(c))
2745 +#define HAVE_ARCH_BUG_ON
2746 +#endif
2747 +
2748 +#include <asm-generic/bug.h>
2749 +
2750 +#endif /* _ASM_UBICOM32_BUG_H */
2751 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bugs.h linux-2.6.28.10/arch/ubicom32/include/asm/bugs.h
2752 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bugs.h 1970-01-01 02:00:00.000000000 +0200
2753 +++ linux-2.6.28.10/arch/ubicom32/include/asm/bugs.h 2009-08-06 10:31:02.000000000 +0300
2754 @@ -0,0 +1,44 @@
2755 +/*
2756 + * arch/ubicom32/include/asm/bugs.h
2757 + * Definition of check_bugs() for Ubicom32 architecture.
2758 + *
2759 + * (C) Copyright 2009, Ubicom, Inc.
2760 + * Copyright (C) 1994 Linus Torvalds
2761 + *
2762 + * This file is part of the Ubicom32 Linux Kernel Port.
2763 + *
2764 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2765 + * it and/or modify it under the terms of the GNU General Public License
2766 + * as published by the Free Software Foundation, either version 2 of the
2767 + * License, or (at your option) any later version.
2768 + *
2769 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2770 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2771 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2772 + * the GNU General Public License for more details.
2773 + *
2774 + * You should have received a copy of the GNU General Public License
2775 + * along with the Ubicom32 Linux Kernel Port. If not,
2776 + * see <http://www.gnu.org/licenses/>.
2777 + *
2778 + * Ubicom32 implementation derived from (with many thanks):
2779 + * arch/m68knommu
2780 + * arch/blackfin
2781 + * arch/parisc
2782 + */
2783 +
2784 +/*
2785 + * This is included by init/main.c to check for architecture-dependent bugs.
2786 + *
2787 + * Needs:
2788 + * void check_bugs(void);
2789 + */
2790 +
2791 +#ifndef _ASM_UBICOM32_BUGS_H
2792 +#define _ASM_UBICOM32_BUGS_H
2793 +
2794 +static void check_bugs(void)
2795 +{
2796 +}
2797 +
2798 +#endif /* _ASM_UBICOM32_BUGS_H */
2799 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/byteorder.h linux-2.6.28.10/arch/ubicom32/include/asm/byteorder.h
2800 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/byteorder.h 1970-01-01 02:00:00.000000000 +0200
2801 +++ linux-2.6.28.10/arch/ubicom32/include/asm/byteorder.h 2009-08-06 10:31:02.000000000 +0300
2802 @@ -0,0 +1,48 @@
2803 +/*
2804 + * arch/ubicom32/include/asm/byteorder.h
2805 + * Byte order swapping utility routines.
2806 + *
2807 + * (C) Copyright 2009, Ubicom, Inc.
2808 + *
2809 + * This file is part of the Ubicom32 Linux Kernel Port.
2810 + *
2811 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2812 + * it and/or modify it under the terms of the GNU General Public License
2813 + * as published by the Free Software Foundation, either version 2 of the
2814 + * License, or (at your option) any later version.
2815 + *
2816 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2817 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2818 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2819 + * the GNU General Public License for more details.
2820 + *
2821 + * You should have received a copy of the GNU General Public License
2822 + * along with the Ubicom32 Linux Kernel Port. If not,
2823 + * see <http://www.gnu.org/licenses/>.
2824 + *
2825 + * Ubicom32 implementation derived from (with many thanks):
2826 + * arch/m68knommu
2827 + * arch/blackfin
2828 + * arch/parisc
2829 + */
2830 +#ifndef _ASM_UBICOM32_BYTEORDER_H
2831 +#define _ASM_UBICOM32_BYTEORDER_H
2832 +
2833 +#include <linux/types.h>
2834 +
2835 +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
2836 +# define __BYTEORDER_HAS_U64__
2837 +# define __SWAB_64_THRU_32__
2838 +#endif
2839 +
2840 +#if defined(IP7000) || defined(IP7000_REV2)
2841 +
2842 +#define __arch__swab16 __builtin_ubicom32_swapb_2
2843 +#define __arch__swab32 __builtin_ubicom32_swapb_4
2844 +
2845 +#endif /* IP7000 */
2846 +
2847 +#include <linux/byteorder/big_endian.h>
2848 +
2849 +#endif /* _ASM_UBICOM32_BYTEORDER_H */
2850 +
2851 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cachectl.h linux-2.6.28.10/arch/ubicom32/include/asm/cachectl.h
2852 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cachectl.h 1970-01-01 02:00:00.000000000 +0200
2853 +++ linux-2.6.28.10/arch/ubicom32/include/asm/cachectl.h 2009-08-06 10:31:02.000000000 +0300
2854 @@ -0,0 +1,39 @@
2855 +/*
2856 + * arch/ubicom32/include/asm/cachectl.h
2857 + * Ubicom32 cache control definitions.
2858 + *
2859 + * (C) Copyright 2009, Ubicom, Inc.
2860 + *
2861 + * This file is part of the Ubicom32 Linux Kernel Port.
2862 + *
2863 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2864 + * it and/or modify it under the terms of the GNU General Public License
2865 + * as published by the Free Software Foundation, either version 2 of the
2866 + * License, or (at your option) any later version.
2867 + *
2868 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2869 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2870 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2871 + * the GNU General Public License for more details.
2872 + *
2873 + * You should have received a copy of the GNU General Public License
2874 + * along with the Ubicom32 Linux Kernel Port. If not,
2875 + * see <http://www.gnu.org/licenses/>.
2876 + *
2877 + * Ubicom32 implementation derived from (with many thanks):
2878 + * arch/m68knommu
2879 + * arch/blackfin
2880 + * arch/parisc
2881 + */
2882 +#ifndef _ASM_UBICOM32_CACHECTL_H
2883 +#define _ASM_UBICOM32_CACHECTL_H
2884 +
2885 +#include <asm/ip5000.h>
2886 +
2887 +/*
2888 + * mem_cache_control()
2889 + * Special cache control operation
2890 + */
2891 +extern void mem_cache_control(unsigned long cc, unsigned long begin_addr, unsigned long end_addr, unsigned long op);
2892 +
2893 +#endif /* _ASM_UBICOM32_CACHECTL_H */
2894 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cacheflush.h linux-2.6.28.10/arch/ubicom32/include/asm/cacheflush.h
2895 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cacheflush.h 1970-01-01 02:00:00.000000000 +0200
2896 +++ linux-2.6.28.10/arch/ubicom32/include/asm/cacheflush.h 2009-08-06 10:31:02.000000000 +0300
2897 @@ -0,0 +1,104 @@
2898 +/*
2899 + * arch/ubicom32/include/asm/cacheflush.h
2900 + * Cache flushing definitions for Ubicom32 architecture.
2901 + *
2902 + * (C) Copyright 2009, Ubicom, Inc.
2903 + *
2904 + * This file is part of the Ubicom32 Linux Kernel Port.
2905 + *
2906 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
2907 + * it and/or modify it under the terms of the GNU General Public License
2908 + * as published by the Free Software Foundation, either version 2 of the
2909 + * License, or (at your option) any later version.
2910 + *
2911 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
2912 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
2913 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2914 + * the GNU General Public License for more details.
2915 + *
2916 + * You should have received a copy of the GNU General Public License
2917 + * along with the Ubicom32 Linux Kernel Port. If not,
2918 + * see <http://www.gnu.org/licenses/>.
2919 + *
2920 + * Ubicom32 implementation derived from (with many thanks):
2921 + * arch/m68knommu
2922 + * arch/blackfin
2923 + * arch/parisc
2924 + */
2925 +#ifndef _ASM_UBICOM32_CACHEFLUSH_H
2926 +#define _ASM_UBICOM32_CACHEFLUSH_H
2927 +
2928 +/*
2929 + * (C) Copyright 2000-2004, Greg Ungerer <gerg@snapgear.com>
2930 + */
2931 +#include <linux/mm.h>
2932 +#include <asm/cachectl.h>
2933 +#include <asm/ip5000.h>
2934 +
2935 +#define flush_cache_all() __flush_cache_all()
2936 +#define flush_cache_mm(mm) do { } while (0)
2937 +#define flush_cache_dup_mm(mm) do { } while (0)
2938 +#define flush_cache_range(vma, start, end) __flush_cache_all()
2939 +#define flush_cache_page(vma, vmaddr) do { } while (0)
2940 +#define flush_dcache_page(page) do { } while (0)
2941 +#define flush_dcache_mmap_lock(mapping) do { } while (0)
2942 +#define flush_dcache_mmap_unlock(mapping) do { } while (0)
2943 +
2944 +#define flush_dcache_range(start, end) \
2945 +do { \
2946 + /* Flush the data cache and invalidate the I cache. */ \
2947 + local_irq_disable(); \
2948 + mem_cache_control(DCCR_BASE, start, end, CCR_CTRL_FLUSH_ADDR); \
2949 + mem_cache_control(ICCR_BASE, start, end, CCR_CTRL_INV_ADDR); \
2950 + local_irq_enable(); \
2951 +} while (0)
2952 +
2953 +#define flush_icache_range(start, end) \
2954 +do { \
2955 + /* Flush the data cache and invalidate the I cache. */ \
2956 + local_irq_disable(); \
2957 + mem_cache_control(DCCR_BASE, start, end, CCR_CTRL_FLUSH_ADDR); \
2958 + mem_cache_control(ICCR_BASE, start, end, CCR_CTRL_INV_ADDR); \
2959 + local_irq_enable(); \
2960 +} while (0)
2961 +
2962 +#define flush_icache_page(vma,pg) do { } while (0)
2963 +#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
2964 +#define flush_cache_vmap(start, end) do { } while (0)
2965 +#define flush_cache_vunmap(start, end) do { } while (0)
2966 +
2967 +#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
2968 + memcpy(dst, src, len)
2969 +#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
2970 + memcpy(dst, src, len)
2971 +
2972 +/*
2973 + * Cache handling for IP5000
2974 + */
2975 +extern inline void mem_cache_invalidate_all(unsigned long cc)
2976 +{
2977 + asm volatile (
2978 + " bset "D(CCR_CTRL)"(%0), "D(CCR_CTRL)"(%0), #"D(CCR_CTRL_RESET)" \n\t"
2979 + " nop \n\t"
2980 + " bclr "D(CCR_CTRL)"(%0), "D(CCR_CTRL)"(%0), #"D(CCR_CTRL_RESET)" \n\t"
2981 + " pipe_flush 0 \n\t"
2982 + :
2983 + : "a"(cc)
2984 + : "cc"
2985 + );
2986 +}
2987 +
2988 +static inline void __flush_cache_all(void)
2989 +{
2990 + /*
2991 + * Flush Icache
2992 + */
2993 + mem_cache_invalidate_all(ICCR_BASE);
2994 +
2995 + /*
2996 + * Flush Dcache
2997 + */
2998 + mem_cache_invalidate_all(DCCR_BASE);
2999 +}
3000 +
3001 +#endif /* _ASM_UBICOM32_CACHEFLUSH_H */
3002 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cache.h linux-2.6.28.10/arch/ubicom32/include/asm/cache.h
3003 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cache.h 1970-01-01 02:00:00.000000000 +0200
3004 +++ linux-2.6.28.10/arch/ubicom32/include/asm/cache.h 2009-08-06 10:31:02.000000000 +0300
3005 @@ -0,0 +1,40 @@
3006 +/*
3007 + * arch/ubicom32/include/asm/cache.h
3008 + * Cache line definitions for Ubicom32 architecture.
3009 + *
3010 + * (C) Copyright 2009, Ubicom, Inc.
3011 + *
3012 + * This file is part of the Ubicom32 Linux Kernel Port.
3013 + *
3014 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3015 + * it and/or modify it under the terms of the GNU General Public License
3016 + * as published by the Free Software Foundation, either version 2 of the
3017 + * License, or (at your option) any later version.
3018 + *
3019 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3020 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3021 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3022 + * the GNU General Public License for more details.
3023 + *
3024 + * You should have received a copy of the GNU General Public License
3025 + * along with the Ubicom32 Linux Kernel Port. If not,
3026 + * see <http://www.gnu.org/licenses/>.
3027 + *
3028 + * Ubicom32 implementation derived from (with many thanks):
3029 + * arch/m68knommu
3030 + * arch/blackfin
3031 + * arch/parisc
3032 + */
3033 +#ifndef _ASM_UBICOM32_CACHE_H
3034 +#define _ASM_UBICOM32_CACHE_H
3035 +
3036 +/*
3037 + * bytes per L1 cache line
3038 + */
3039 +#define L1_CACHE_SHIFT 5
3040 +#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
3041 +
3042 +#define __cacheline_aligned
3043 +#define ____cacheline_aligned
3044 +
3045 +#endif /* _ASM_UBICOM32_CACHE_H */
3046 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/checksum.h linux-2.6.28.10/arch/ubicom32/include/asm/checksum.h
3047 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/checksum.h 1970-01-01 02:00:00.000000000 +0200
3048 +++ linux-2.6.28.10/arch/ubicom32/include/asm/checksum.h 2009-08-06 10:31:02.000000000 +0300
3049 @@ -0,0 +1,149 @@
3050 +/*
3051 + * arch/ubicom32/include/asm/checksum.h
3052 + * Checksum utilities for Ubicom32 architecture.
3053 + *
3054 + * (C) Copyright 2009, Ubicom, Inc.
3055 + *
3056 + * This file is part of the Ubicom32 Linux Kernel Port.
3057 + *
3058 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3059 + * it and/or modify it under the terms of the GNU General Public License
3060 + * as published by the Free Software Foundation, either version 2 of the
3061 + * License, or (at your option) any later version.
3062 + *
3063 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3064 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3065 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3066 + * the GNU General Public License for more details.
3067 + *
3068 + * You should have received a copy of the GNU General Public License
3069 + * along with the Ubicom32 Linux Kernel Port. If not,
3070 + * see <http://www.gnu.org/licenses/>.
3071 + *
3072 + * Ubicom32 implementation derived from (with many thanks):
3073 + * arch/m68knommu
3074 + * arch/blackfin
3075 + * arch/parisc
3076 + */
3077 +#ifndef _ASM_UBICOM32_CHECKSUM_H
3078 +#define _ASM_UBICOM32_CHECKSUM_H
3079 +
3080 +#include <linux/in6.h>
3081 +
3082 +/*
3083 + * computes the checksum of a memory block at buff, length len,
3084 + * and adds in "sum" (32-bit)
3085 + *
3086 + * returns a 32-bit number suitable for feeding into itself
3087 + * or csum_tcpudp_magic
3088 + *
3089 + * this function must be called with even lengths, except
3090 + * for the last fragment, which may be odd
3091 + *
3092 + * it's best to have buff aligned on a 32-bit boundary
3093 + */
3094 +__wsum csum_partial(const void *buff, int len, __wsum sum);
3095 +
3096 +/*
3097 + * the same as csum_partial, but copies from src while it
3098 + * checksums
3099 + *
3100 + * here even more important to align src and dst on a 32-bit (or even
3101 + * better 64-bit) boundary
3102 + */
3103 +
3104 +__wsum csum_partial_copy_nocheck(const void *src, void *dst,
3105 + int len, __wsum sum);
3106 +
3107 +
3108 +/*
3109 + * the same as csum_partial_copy, but copies from user space.
3110 + *
3111 + * here even more important to align src and dst on a 32-bit (or even
3112 + * better 64-bit) boundary
3113 + */
3114 +
3115 +extern __wsum csum_partial_copy_from_user(const void __user *src,
3116 + void *dst, int len, __wsum sum, int *csum_err);
3117 +
3118 +__sum16 ip_fast_csum(const void *iph, unsigned int ihl);
3119 +
3120 +/*
3121 + * Fold a partial checksum
3122 + */
3123 +
3124 +static inline __sum16 csum_fold(__wsum sum)
3125 +{
3126 + asm volatile (
3127 + " lsr.4 d15, %0, #16 \n\t"
3128 + " bfextu %0, %0, #16 \n\t"
3129 + " add.4 %0, d15, %0 \n\t"
3130 + " lsr.4 d15, %0, #16 \n\t"
3131 + " bfextu %0, %0, #16 \n\t"
3132 + " add.4 %0, d15, %0 \n\t"
3133 + : "=&d" (sum)
3134 + : "0"(sum)
3135 + : "d15"
3136 + );
3137 + return (__force __sum16)~sum;
3138 +}
3139 +
3140 +
3141 +/*
3142 + * computes the checksum of the TCP/UDP pseudo-header
3143 + * returns a 16-bit checksum, already complemented
3144 + */
3145 +
3146 +static inline __wsum
3147 +csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len,
3148 + unsigned short proto, __wsum sum)
3149 +{
3150 + asm volatile (
3151 + " add.4 %0, %2, %0 \n\t"
3152 + " addc %0, %3, %0 \n\t"
3153 + " addc %0, %4, %0 \n\t"
3154 + " addc %0, %5, %0 \n\t"
3155 + " addc %0, #0, %0 \n\t"
3156 + : "=&d" (sum)
3157 + : "0"(sum), "r" (saddr), "r" (daddr), "r" (len), "r"(proto)
3158 + );
3159 + return sum;
3160 +}
3161 +
3162 +static inline __sum16
3163 +csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len,
3164 + unsigned short proto, __wsum sum)
3165 +{
3166 + return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum));
3167 +}
3168 +
3169 +/*
3170 + * this routine is used for miscellaneous IP-like checksums, mainly
3171 + * in icmp.c
3172 + */
3173 +extern __sum16 ip_compute_csum(const void *buff, int len);
3174 +
3175 +#define _HAVE_ARCH_IPV6_CSUM
3176 +
3177 +static __inline__ __sum16
3178 +csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr,
3179 + __u32 len, unsigned short proto, __wsum sum)
3180 +{
3181 + asm volatile (
3182 + " add.4 %0, 0(%2), %0 \n\t"
3183 + " addc %0, 4(%2), %0 \n\t"
3184 + " addc %0, 8(%2), %0 \n\t"
3185 + " addc %0, 12(%2), %0 \n\t"
3186 + " addc %0, 0(%3), %0 \n\t"
3187 + " addc %0, 4(%3), %0 \n\t"
3188 + " addc %0, 8(%3), %0 \n\t"
3189 + " addc %0, 12(%3), %0 \n\t"
3190 + " addc %0, %4, %0 \n\t"
3191 + " addc %0, #0, %0 \n\t"
3192 + : "=&d" (sum)
3193 + : "0" (sum), "a" (saddr), "a" (daddr), "d" (len + proto)
3194 + );
3195 + return csum_fold(sum);
3196 +}
3197 +
3198 +#endif /* _ASM_UBICOM32_CHECKSUM_H */
3199 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cpu.h linux-2.6.28.10/arch/ubicom32/include/asm/cpu.h
3200 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cpu.h 1970-01-01 02:00:00.000000000 +0200
3201 +++ linux-2.6.28.10/arch/ubicom32/include/asm/cpu.h 2009-08-06 10:31:02.000000000 +0300
3202 @@ -0,0 +1,45 @@
3203 +/*
3204 + * arch/ubicom32/include/asm/cpu.h
3205 + * CPU definitions for Ubicom32 architecture.
3206 + *
3207 + * (C) Copyright 2009, Ubicom, Inc.
3208 + * Copyright (C) 2004-2005 ARM Ltd.
3209 + *
3210 + * This file is part of the Ubicom32 Linux Kernel Port.
3211 + *
3212 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3213 + * it and/or modify it under the terms of the GNU General Public License
3214 + * as published by the Free Software Foundation, either version 2 of the
3215 + * License, or (at your option) any later version.
3216 + *
3217 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3218 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3219 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3220 + * the GNU General Public License for more details.
3221 + *
3222 + * You should have received a copy of the GNU General Public License
3223 + * along with the Ubicom32 Linux Kernel Port. If not,
3224 + * see <http://www.gnu.org/licenses/>.
3225 + *
3226 + * Ubicom32 implementation derived from (with many thanks):
3227 + * arch/m68knommu
3228 + * arch/blackfin
3229 + * arch/parisc
3230 + */
3231 +#ifndef _ASM_UBICOM32_CPU_H
3232 +#define _ASM_UBICOM32_CPU_H
3233 +
3234 +#include <linux/percpu.h>
3235 +
3236 +struct cpuinfo_ubicom32 {
3237 + unsigned long tid; /* Hardware thread number */
3238 +
3239 +#ifdef CONFIG_SMP
3240 + volatile unsigned long ipi_pending; /* Bit map of operations to execute */
3241 + unsigned long ipi_count; /* Number of IPI(s) taken on this cpu */
3242 +#endif
3243 +};
3244 +
3245 +DECLARE_PER_CPU(struct cpuinfo_ubicom32, cpu_data);
3246 +
3247 +#endif /* _ASM_UBICOM32_CPU_H */
3248 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cputime.h linux-2.6.28.10/arch/ubicom32/include/asm/cputime.h
3249 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cputime.h 1970-01-01 02:00:00.000000000 +0200
3250 +++ linux-2.6.28.10/arch/ubicom32/include/asm/cputime.h 2009-08-06 10:31:02.000000000 +0300
3251 @@ -0,0 +1,33 @@
3252 +/*
3253 + * arch/ubicom32/include/asm/cputime.h
3254 + * Generic cputime.h for Ubicom32 architecture.
3255 + *
3256 + * (C) Copyright 2009, Ubicom, Inc.
3257 + *
3258 + * This file is part of the Ubicom32 Linux Kernel Port.
3259 + *
3260 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3261 + * it and/or modify it under the terms of the GNU General Public License
3262 + * as published by the Free Software Foundation, either version 2 of the
3263 + * License, or (at your option) any later version.
3264 + *
3265 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3266 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3267 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3268 + * the GNU General Public License for more details.
3269 + *
3270 + * You should have received a copy of the GNU General Public License
3271 + * along with the Ubicom32 Linux Kernel Port. If not,
3272 + * see <http://www.gnu.org/licenses/>.
3273 + *
3274 + * Ubicom32 implementation derived from (with many thanks):
3275 + * arch/m68knommu
3276 + * arch/blackfin
3277 + * arch/parisc
3278 + */
3279 +#ifndef _ASM_UBICOM32_CPUTIME_H
3280 +#define _ASM_UBICOM32_CPUTIME_H
3281 +
3282 +#include <asm-generic/cputime.h>
3283 +
3284 +#endif /* _ASM_UBICOM32_CPUTIME_H */
3285 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/current.h linux-2.6.28.10/arch/ubicom32/include/asm/current.h
3286 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/current.h 1970-01-01 02:00:00.000000000 +0200
3287 +++ linux-2.6.28.10/arch/ubicom32/include/asm/current.h 2009-08-06 10:31:02.000000000 +0300
3288 @@ -0,0 +1,44 @@
3289 +/*
3290 + * arch/ubicom32/include/asm/current.h
3291 + * Definition of get_current() for Ubicom32 architecture.
3292 + *
3293 + * (C) Copyright 2009, Ubicom, Inc.
3294 + * (C) Copyright 2000, Lineo, David McCullough <davidm@uclinux.org>
3295 + * (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com)
3296 + *
3297 + * This file is part of the Ubicom32 Linux Kernel Port.
3298 + *
3299 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3300 + * it and/or modify it under the terms of the GNU General Public License
3301 + * as published by the Free Software Foundation, either version 2 of the
3302 + * License, or (at your option) any later version.
3303 + *
3304 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3305 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3306 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3307 + * the GNU General Public License for more details.
3308 + *
3309 + * You should have received a copy of the GNU General Public License
3310 + * along with the Ubicom32 Linux Kernel Port. If not,
3311 + * see <http://www.gnu.org/licenses/>.
3312 + *
3313 + * Ubicom32 implementation derived from (with many thanks):
3314 + * arch/m68knommu
3315 + * arch/blackfin
3316 + * arch/parisc
3317 + */
3318 +#ifndef _ASM_UBICOM32_CURRENT_H
3319 +#define _ASM_UBICOM32_CURRENT_H
3320 +
3321 +#include <linux/thread_info.h>
3322 +
3323 +struct task_struct;
3324 +
3325 +static inline struct task_struct *get_current(void)
3326 +{
3327 + return(current_thread_info()->task);
3328 +}
3329 +
3330 +#define current get_current()
3331 +
3332 +#endif /* _ASM_UBICOM32_CURRENT_H */
3333 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/delay.h linux-2.6.28.10/arch/ubicom32/include/asm/delay.h
3334 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/delay.h 1970-01-01 02:00:00.000000000 +0200
3335 +++ linux-2.6.28.10/arch/ubicom32/include/asm/delay.h 2009-08-06 10:31:02.000000000 +0300
3336 @@ -0,0 +1,75 @@
3337 +/*
3338 + * arch/ubicom32/include/asm/delay.h
3339 + * Definition of delay routines for Ubicom32 architecture.
3340 + *
3341 + * (C) Copyright 2009, Ubicom, Inc.
3342 + *
3343 + * This file is part of the Ubicom32 Linux Kernel Port.
3344 + *
3345 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3346 + * it and/or modify it under the terms of the GNU General Public License
3347 + * as published by the Free Software Foundation, either version 2 of the
3348 + * License, or (at your option) any later version.
3349 + *
3350 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3351 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3352 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3353 + * the GNU General Public License for more details.
3354 + *
3355 + * You should have received a copy of the GNU General Public License
3356 + * along with the Ubicom32 Linux Kernel Port. If not,
3357 + * see <http://www.gnu.org/licenses/>.
3358 + *
3359 + * Ubicom32 implementation derived from (with many thanks):
3360 + * arch/m68knommu
3361 + * arch/blackfin
3362 + * arch/parisc
3363 + */
3364 +#ifndef _ASM_UBICOM32_DELAY_H
3365 +#define _ASM_UBICOM32_DELAY_H
3366 +
3367 +#include <asm/param.h>
3368 +#include <asm/ip5000.h>
3369 +
3370 +static inline void __delay(unsigned long loops)
3371 +{
3372 + if (loops == 0) {
3373 + return;
3374 + }
3375 +
3376 + asm volatile (
3377 + "1: add.4 %0, #-1, %0 \n\t"
3378 + " jmpne.t 1b \n\t"
3379 + : "+d" (loops)
3380 + );
3381 +}
3382 +
3383 +/*
3384 + * Ubicom32 processor uses fixed 12MHz external OSC.
3385 + * So we use that as reference to count 12 cycles/us
3386 + */
3387 +
3388 +extern unsigned long loops_per_jiffy;
3389 +
3390 +static inline void _udelay(unsigned long usecs)
3391 +{
3392 +#if defined(CONFIG_UBICOM32_V4) || defined(CONFIG_UBICOM32_V3)
3393 + asm volatile (
3394 + " add.4 d15, 0(%0), %1 \n\t"
3395 + " sub.4 #0, 0(%0), d15 \n\t"
3396 + " jmpmi.w.f .-4 \n\t"
3397 + :
3398 + : "a"(TIMER_BASE + TIMER_MPTVAL), "d"(usecs * (12000000/1000000))
3399 + : "d15"
3400 + );
3401 +#else
3402 + BUG();
3403 +#endif
3404 +}
3405 +
3406 +/*
3407 + * Moved the udelay() function into library code, no longer inlined.
3408 + */
3409 +extern void udelay(unsigned long usecs);
3410 +
3411 +#endif /* _ASM_UBICOM32_DELAY_H */
3412 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/device.h linux-2.6.28.10/arch/ubicom32/include/asm/device.h
3413 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/device.h 1970-01-01 02:00:00.000000000 +0200
3414 +++ linux-2.6.28.10/arch/ubicom32/include/asm/device.h 2009-08-06 10:31:02.000000000 +0300
3415 @@ -0,0 +1,35 @@
3416 +/*
3417 + * arch/ubicom32/include/asm/device.h
3418 + * Generic device.h for Ubicom32 architecture.
3419 + *
3420 + * Used for arch specific extensions to struct device
3421 + *
3422 + * (C) Copyright 2009, Ubicom, Inc.
3423 + *
3424 + * This file is part of the Ubicom32 Linux Kernel Port.
3425 + *
3426 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3427 + * it and/or modify it under the terms of the GNU General Public License
3428 + * as published by the Free Software Foundation, either version 2 of the
3429 + * License, or (at your option) any later version.
3430 + *
3431 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3432 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3433 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3434 + * the GNU General Public License for more details.
3435 + *
3436 + * You should have received a copy of the GNU General Public License
3437 + * along with the Ubicom32 Linux Kernel Port. If not,
3438 + * see <http://www.gnu.org/licenses/>.
3439 + *
3440 + * Ubicom32 implementation derived from (with many thanks):
3441 + * arch/m68knommu
3442 + * arch/blackfin
3443 + * arch/parisc
3444 + */
3445 +#ifndef _ASM_UBICOM32_DEVICE_H
3446 +#define _ASM_UBICOM32_DEVICE_H
3447 +
3448 +#include <asm-generic/device.h>
3449 +
3450 +#endif /* _ASM_UBICOM32_DEVICE_H */
3451 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/devtree.h linux-2.6.28.10/arch/ubicom32/include/asm/devtree.h
3452 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/devtree.h 1970-01-01 02:00:00.000000000 +0200
3453 +++ linux-2.6.28.10/arch/ubicom32/include/asm/devtree.h 2009-08-06 10:31:02.000000000 +0300
3454 @@ -0,0 +1,52 @@
3455 +/*
3456 + * arch/ubicom32/include/asm/devtree.h
3457 + * Device Tree Header File (Shared between ultra and the Host OS)
3458 + *
3459 + * (C) Copyright 2009, Ubicom, Inc.
3460 + *
3461 + * This file is part of the Ubicom32 Linux Kernel Port.
3462 + *
3463 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3464 + * it and/or modify it under the terms of the GNU General Public License
3465 + * as published by the Free Software Foundation, either version 2 of the
3466 + * License, or (at your option) any later version.
3467 + *
3468 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3469 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3470 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3471 + * the GNU General Public License for more details.
3472 + *
3473 + * You should have received a copy of the GNU General Public License
3474 + * along with the Ubicom32 Linux Kernel Port. If not,
3475 + * see <http://www.gnu.org/licenses/>.
3476 + *
3477 + * Ubicom32 implementation derived from (with many thanks):
3478 + * arch/m68knommu
3479 + * arch/blackfin
3480 + * arch/parisc
3481 + */
3482 +
3483 +#ifndef _ASM_UBICOM32_DEVTREE_H
3484 +#define _ASM_UBICOM32_DEVTREE_H
3485 +
3486 +#define DEVTREE_MAX_NAME 32
3487 +#define DEVTREE_IRQ_NONE 0xff
3488 +#define DEVTREE_IRQ_DONTCARE 0xff
3489 +#define DEVTREE_NODE_MAGIC 0x10203040
3490 +
3491 +struct devtree_node {
3492 + struct devtree_node *next;
3493 + unsigned char sendirq;
3494 + unsigned char recvirq;
3495 + char name[DEVTREE_MAX_NAME];
3496 + unsigned int magic;
3497 +};
3498 +
3499 +extern struct devtree_node *devtree;
3500 +extern struct devtree_node *devtree_find_by_irq(uint8_t sendirq, uint8_t recvirq);
3501 +extern struct devtree_node *devtree_find_node(const char *str);
3502 +extern struct devtree_node *devtree_find_next(struct devtree_node **cur);
3503 +extern int devtree_irq(struct devtree_node *dn, unsigned char *sendirq, unsigned char *recvirq);
3504 +extern void devtree_print(void);
3505 +
3506 +#endif /* _ASM_UBICOM32_DEVTREE_H */
3507 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/div64.h linux-2.6.28.10/arch/ubicom32/include/asm/div64.h
3508 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/div64.h 1970-01-01 02:00:00.000000000 +0200
3509 +++ linux-2.6.28.10/arch/ubicom32/include/asm/div64.h 2009-08-06 10:31:02.000000000 +0300
3510 @@ -0,0 +1,33 @@
3511 +/*
3512 + * arch/ubicom32/include/asm/div64.h
3513 + * Generic div64.h for Ubicom32 architecture.
3514 + *
3515 + * (C) Copyright 2009, Ubicom, Inc.
3516 + *
3517 + * This file is part of the Ubicom32 Linux Kernel Port.
3518 + *
3519 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3520 + * it and/or modify it under the terms of the GNU General Public License
3521 + * as published by the Free Software Foundation, either version 2 of the
3522 + * License, or (at your option) any later version.
3523 + *
3524 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3525 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3526 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3527 + * the GNU General Public License for more details.
3528 + *
3529 + * You should have received a copy of the GNU General Public License
3530 + * along with the Ubicom32 Linux Kernel Port. If not,
3531 + * see <http://www.gnu.org/licenses/>.
3532 + *
3533 + * Ubicom32 implementation derived from (with many thanks):
3534 + * arch/m68knommu
3535 + * arch/blackfin
3536 + * arch/parisc
3537 + */
3538 +#ifndef _ASM_UBICOM32_DIV64_H
3539 +#define _ASM_UBICOM32_DIV64_H
3540 +
3541 +#include <asm-generic/div64.h>
3542 +
3543 +#endif /* _ASM_UBICOM32_DIV64_H */
3544 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/dma.h linux-2.6.28.10/arch/ubicom32/include/asm/dma.h
3545 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/dma.h 1970-01-01 02:00:00.000000000 +0200
3546 +++ linux-2.6.28.10/arch/ubicom32/include/asm/dma.h 2009-08-06 10:31:02.000000000 +0300
3547 @@ -0,0 +1,34 @@
3548 +/*
3549 + * arch/ubicom32/include/asm/dma.h
3550 + * DMA definitions for Ubicom32 architecture.
3551 + *
3552 + * (C) Copyright 2009, Ubicom, Inc.
3553 + *
3554 + * This file is part of the Ubicom32 Linux Kernel Port.
3555 + *
3556 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3557 + * it and/or modify it under the terms of the GNU General Public License
3558 + * as published by the Free Software Foundation, either version 2 of the
3559 + * License, or (at your option) any later version.
3560 + *
3561 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3562 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3563 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3564 + * the GNU General Public License for more details.
3565 + *
3566 + * You should have received a copy of the GNU General Public License
3567 + * along with the Ubicom32 Linux Kernel Port. If not,
3568 + * see <http://www.gnu.org/licenses/>.
3569 + *
3570 + * Ubicom32 implementation derived from (with many thanks):
3571 + * arch/m68knommu
3572 + * arch/blackfin
3573 + * arch/parisc
3574 + */
3575 +#ifndef _ASM_UBICOM32_DMA_H
3576 +#define _ASM_UBICOM32_DMA_H
3577 +
3578 +/* Nothing so far */
3579 +#define MAX_DMA_ADDRESS 0x00 /* This is quite suspicious */
3580 +
3581 +#endif /* _ASM_UBICOM32_DMA_H */
3582 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/dma-mapping.h linux-2.6.28.10/arch/ubicom32/include/asm/dma-mapping.h
3583 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/dma-mapping.h 1970-01-01 02:00:00.000000000 +0200
3584 +++ linux-2.6.28.10/arch/ubicom32/include/asm/dma-mapping.h 2009-08-06 10:31:02.000000000 +0300
3585 @@ -0,0 +1,34 @@
3586 +/*
3587 + * arch/ubicom32/include/asm/dma-mapping.h
3588 + * Generic dma-mapping.h for Ubicom32 architecture.
3589 + *
3590 + * (C) Copyright 2009, Ubicom, Inc.
3591 + *
3592 + * This file is part of the Ubicom32 Linux Kernel Port.
3593 + *
3594 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3595 + * it and/or modify it under the terms of the GNU General Public License
3596 + * as published by the Free Software Foundation, either version 2 of the
3597 + * License, or (at your option) any later version.
3598 + *
3599 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3600 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3601 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3602 + * the GNU General Public License for more details.
3603 + *
3604 + * You should have received a copy of the GNU General Public License
3605 + * along with the Ubicom32 Linux Kernel Port. If not,
3606 + * see <http://www.gnu.org/licenses/>.
3607 + *
3608 + * Ubicom32 implementation derived from (with many thanks):
3609 + * arch/m68knommu
3610 + * arch/blackfin
3611 + * arch/parisc
3612 + */
3613 +#ifndef _ASM_UBICOM32_DMA_MAPPING_H
3614 +#define _ASM_UBICOM32_DMA_MAPPING_H
3615 +
3616 +#include <linux/scatterlist.h>
3617 +#include <asm-generic/dma-mapping.h>
3618 +
3619 +#endif /* _ASM_UBICOM32_DMA_MAPPING_H */
3620 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/elf.h linux-2.6.28.10/arch/ubicom32/include/asm/elf.h
3621 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/elf.h 1970-01-01 02:00:00.000000000 +0200
3622 +++ linux-2.6.28.10/arch/ubicom32/include/asm/elf.h 2009-08-18 22:35:42.571202890 +0300
3623 @@ -0,0 +1,167 @@
3624 +/*
3625 + * arch/ubicom32/include/asm/elf.h
3626 + * Definitions for elf executable format for Ubicom32 architecture.
3627 + *
3628 + * (C) Copyright 2009, Ubicom, Inc.
3629 + *
3630 + * This file is part of the Ubicom32 Linux Kernel Port.
3631 + *
3632 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3633 + * it and/or modify it under the terms of the GNU General Public License
3634 + * as published by the Free Software Foundation, either version 2 of the
3635 + * License, or (at your option) any later version.
3636 + *
3637 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3638 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3639 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3640 + * the GNU General Public License for more details.
3641 + *
3642 + * You should have received a copy of the GNU General Public License
3643 + * along with the Ubicom32 Linux Kernel Port. If not,
3644 + * see <http://www.gnu.org/licenses/>.
3645 + *
3646 + * Ubicom32 implementation derived from (with many thanks):
3647 + * arch/m68knommu
3648 + * arch/blackfin
3649 + * arch/parisc
3650 + */
3651 +#ifndef _ASM_UBICOM32_ELF_H
3652 +#define _ASM_UBICOM32_ELF_H
3653 +
3654 +/*
3655 + * ELF register definitions..
3656 + */
3657 +
3658 +#include <asm/ptrace.h>
3659 +#include <asm/user.h>
3660 +
3661 +/*
3662 + * Processor specific flags for the ELF header e_flags field.
3663 + */
3664 +#define EF_UBICOM32_V3 0x00000001 /* -fmarch=ubicom32v3 */
3665 +#define EF_UBICOM32_V4 0x00000002 /* -fmarch=ubicom32v4 */
3666 +#define EF_UBICOM32_PIC 0x80000000 /* -fpic */
3667 +#define EF_UBICOM32_FDPIC 0x40000000 /* -mfdpic */
3668 +
3669 +/*
3670 + * Ubicom32 ELF relocation types
3671 + */
3672 +#define R_UBICOM32_NONE 0
3673 +#define R_UBICOM32_16 1
3674 +#define R_UBICOM32_32 2
3675 +#define R_UBICOM32_LO16 3
3676 +#define R_UBICOM32_HI16 4
3677 +#define R_UBICOM32_21_PCREL 5
3678 +#define R_UBICOM32_24_PCREL 6
3679 +#define R_UBICOM32_HI24 7
3680 +#define R_UBICOM32_LO7_S 8
3681 +#define R_UBICOM32_LO7_2_S 9
3682 +#define R_UBICOM32_LO7_4_S 10
3683 +#define R_UBICOM32_LO7_D 11
3684 +#define R_UBICOM32_LO7_2_D 12
3685 +#define R_UBICOM32_LO7_4_D 13
3686 +#define R_UBICOM32_32_HARVARD 14
3687 +#define R_UBICOM32_LO7_CALLI 15
3688 +#define R_UBICOM32_LO16_CALLI 16
3689 +#define R_UBICOM32_GOT_HI24 17
3690 +#define R_UBICOM32_GOT_LO7_S 18
3691 +#define R_UBICOM32_GOT_LO7_2_S 19
3692 +#define R_UBICOM32_GOT_LO7_4_S 20
3693 +#define R_UBICOM32_GOT_LO7_D 21
3694 +#define R_UBICOM32_GOT_LO7_2_D 22
3695 +#define R_UBICOM32_GOT_LO7_4_D 23
3696 +#define R_UBICOM32_FUNCDESC_GOT_HI24 24
3697 +#define R_UBICOM32_FUNCDESC_GOT_LO7_S 25
3698 +#define R_UBICOM32_FUNCDESC_GOT_LO7_2_S 26
3699 +#define R_UBICOM32_FUNCDESC_GOT_LO7_4_S 27
3700 +#define R_UBICOM32_FUNCDESC_GOT_LO7_D 28
3701 +#define R_UBICOM32_FUNCDESC_GOT_LO7_2_D 29
3702 +#define R_UBICOM32_FUNCDESC_GOT_LO7_4_D 30
3703 +#define R_UBICOM32_GOT_LO7_CALLI 31
3704 +#define R_UBICOM32_FUNCDESC_GOT_LO7_CALLI 32
3705 +#define R_UBICOM32_FUNCDESC_VALUE 33
3706 +#define R_UBICOM32_FUNCDESC 34
3707 +#define R_UBICOM32_GOTOFFSET_LO 35
3708 +#define R_UBICOM32_GOTOFFSET_HI 36
3709 +#define R_UBICOM32_FUNCDESC_GOTOFFSET_LO 37
3710 +#define R_UBICOM32_FUNCDESC_GOTOFFSET_HI 38
3711 +#define R_UBICOM32_GNU_VTINHERIT 200
3712 +#define R_UBICOM32_GNU_VTENTRY 201
3713 +
3714 +typedef unsigned long elf_greg_t;
3715 +
3716 +#define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t))
3717 +typedef elf_greg_t elf_gregset_t[ELF_NGREG];
3718 +
3719 +typedef struct user_ubicom32fp_struct elf_fpregset_t;
3720 +
3721 +/*
3722 + * This is used to ensure we don't load something for the wrong architecture.
3723 + */
3724 +#define elf_check_arch(x) ((x)->e_machine == EM_UBICOM32)
3725 +
3726 +#define elf_check_fdpic(x) ((x)->e_flags & EF_UBICOM32_FDPIC)
3727 +
3728 +#define elf_check_const_displacement(x) ((x)->e_flags & EF_UBICOM32_PIC)
3729 +
3730 +/*
3731 + * These are used to set parameters in the core dumps.
3732 + */
3733 +#define ELF_CLASS ELFCLASS32
3734 +#define ELF_DATA ELFDATA2MSB
3735 +#define ELF_ARCH EM_UBICOM32
3736 +
3737 +/* For SVR4/m68k the function pointer to be registered with `atexit' is
3738 + passed in %a1. Although my copy of the ABI has no such statement, it
3739 + is actually used on ASV. */
3740 +#define ELF_PLAT_INIT(_r, load_addr) _r->a1 = 0
3741 +
3742 +#define ELF_FDPIC_PLAT_INIT(_regs, _exec_map_addr, _interp_map_addr, \
3743 + _dynamic_addr) \
3744 + do { \
3745 + _regs->dn[1] = _exec_map_addr; \
3746 + _regs->dn[2] = _interp_map_addr; \
3747 + _regs->dn[3] = _dynamic_addr; \
3748 + _regs->an[1] = 0; /* dl_fini will be set by ldso */ \
3749 + } while (0)
3750 +
3751 +#define USE_ELF_CORE_DUMP
3752 +#define ELF_EXEC_PAGESIZE 4096
3753 +
3754 +#ifdef __KERNEL__
3755 +#ifdef CONFIG_UBICOM32_V4
3756 +#define ELF_FDPIC_CORE_EFLAGS (EF_UBICOM32_FDPIC | EF_UBICOM32_V4)
3757 +#elif defined CONFIG_UBICOM32_V3
3758 +#define ELF_FDPIC_CORE_EFLAGS (EF_UBICOM32_FDPIC | EF_UBICOM32_V3)
3759 +#else
3760 +#error Unknown/Unsupported ubicom32 architecture.
3761 +#endif
3762 +#endif
3763 +
3764 +/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
3765 + use of this is to invoke "./ld.so someprog" to test out a new version of
3766 + the loader. We need to make sure that it is out of the way of the program
3767 + that it will "exec", and that there is sufficient room for the brk. */
3768 +
3769 +#define ELF_ET_DYN_BASE 0xD0000000UL
3770 +
3771 +/*
3772 + * For Ubicom32, the elf_gregset_t and struct pt_regs are the same size
3773 + * data structure so a copy is performed instead of providing the
3774 + * ELF_CORE_COPY_REGS macro.
3775 + */
3776 +
3777 +/* This yields a mask that user programs can use to figure out what
3778 + instruction set this cpu supports. */
3779 +
3780 +#define ELF_HWCAP (0)
3781 +
3782 +/* This yields a string that ld.so will use to load implementation
3783 + specific libraries for optimization. This is more specific in
3784 + intent than poking at uname or /proc/cpuinfo. */
3785 +
3786 +#define ELF_PLATFORM (NULL)
3787 +
3788 +#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
3789 +
3790 +#endif /* _ASM_UBICOM32_ELF_H */
3791 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/emergency-restart.h linux-2.6.28.10/arch/ubicom32/include/asm/emergency-restart.h
3792 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/emergency-restart.h 1970-01-01 02:00:00.000000000 +0200
3793 +++ linux-2.6.28.10/arch/ubicom32/include/asm/emergency-restart.h 2009-08-06 10:31:02.000000000 +0300
3794 @@ -0,0 +1,33 @@
3795 +/*
3796 + * arch/ubicom32/include/asm/emergency-restart.h
3797 + * Generic emergency-restart.h for Ubicom32 architecture.
3798 + *
3799 + * (C) Copyright 2009, Ubicom, Inc.
3800 + *
3801 + * This file is part of the Ubicom32 Linux Kernel Port.
3802 + *
3803 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3804 + * it and/or modify it under the terms of the GNU General Public License
3805 + * as published by the Free Software Foundation, either version 2 of the
3806 + * License, or (at your option) any later version.
3807 + *
3808 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3809 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3810 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3811 + * the GNU General Public License for more details.
3812 + *
3813 + * You should have received a copy of the GNU General Public License
3814 + * along with the Ubicom32 Linux Kernel Port. If not,
3815 + * see <http://www.gnu.org/licenses/>.
3816 + *
3817 + * Ubicom32 implementation derived from (with many thanks):
3818 + * arch/m68knommu
3819 + * arch/blackfin
3820 + * arch/parisc
3821 + */
3822 +#ifndef _ASM_UBICOM32_EMERGENCY_RESTART_H
3823 +#define _ASM_UBICOM32_EMERGENCY_RESTART_H
3824 +
3825 +#include <asm-generic/emergency-restart.h>
3826 +
3827 +#endif /* _ASM_UBICOM32_EMERGENCY_RESTART_H */
3828 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/entry.h linux-2.6.28.10/arch/ubicom32/include/asm/entry.h
3829 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/entry.h 1970-01-01 02:00:00.000000000 +0200
3830 +++ linux-2.6.28.10/arch/ubicom32/include/asm/entry.h 2009-08-06 10:31:02.000000000 +0300
3831 @@ -0,0 +1,34 @@
3832 +/*
3833 + * arch/ubicom32/include/asm/entry.h
3834 + * Entry register/stack definitions for Ubicom32 architecture.
3835 + *
3836 + * (C) Copyright 2009, Ubicom, Inc.
3837 + *
3838 + * This file is part of the Ubicom32 Linux Kernel Port.
3839 + *
3840 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3841 + * it and/or modify it under the terms of the GNU General Public License
3842 + * as published by the Free Software Foundation, either version 2 of the
3843 + * License, or (at your option) any later version.
3844 + *
3845 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3846 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3847 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3848 + * the GNU General Public License for more details.
3849 + *
3850 + * You should have received a copy of the GNU General Public License
3851 + * along with the Ubicom32 Linux Kernel Port. If not,
3852 + * see <http://www.gnu.org/licenses/>.
3853 + *
3854 + * Ubicom32 implementation derived from (with many thanks):
3855 + * arch/m68knommu
3856 + * arch/blackfin
3857 + * arch/parisc
3858 + */
3859 +#ifndef _ASM_UBICOM32_ENTRY_H
3860 +#define _ASM_UBICOM32_ENTRY_H
3861 +
3862 +#include <asm/setup.h>
3863 +#include <asm/page.h>
3864 +
3865 +#endif /* _ASM_UBICOM32_ENTRY_H */
3866 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/errno.h linux-2.6.28.10/arch/ubicom32/include/asm/errno.h
3867 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/errno.h 1970-01-01 02:00:00.000000000 +0200
3868 +++ linux-2.6.28.10/arch/ubicom32/include/asm/errno.h 2009-08-06 10:31:02.000000000 +0300
3869 @@ -0,0 +1,33 @@
3870 +/*
3871 + * arch/ubicom32/include/asm/errno.h
3872 + * Generic errno.h for Ubicom32 architecture.
3873 + *
3874 + * (C) Copyright 2009, Ubicom, Inc.
3875 + *
3876 + * This file is part of the Ubicom32 Linux Kernel Port.
3877 + *
3878 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3879 + * it and/or modify it under the terms of the GNU General Public License
3880 + * as published by the Free Software Foundation, either version 2 of the
3881 + * License, or (at your option) any later version.
3882 + *
3883 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3884 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3885 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3886 + * the GNU General Public License for more details.
3887 + *
3888 + * You should have received a copy of the GNU General Public License
3889 + * along with the Ubicom32 Linux Kernel Port. If not,
3890 + * see <http://www.gnu.org/licenses/>.
3891 + *
3892 + * Ubicom32 implementation derived from (with many thanks):
3893 + * arch/m68knommu
3894 + * arch/blackfin
3895 + * arch/parisc
3896 + */
3897 +#ifndef _ASM_UBICOM32_ERRNO_H
3898 +#define _ASM_UBICOM32_ERRNO_H
3899 +
3900 +#include <asm-generic/errno.h>
3901 +
3902 +#endif /* _ASM_UBICOM32_ERRNO_H */
3903 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/fb.h linux-2.6.28.10/arch/ubicom32/include/asm/fb.h
3904 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/fb.h 1970-01-01 02:00:00.000000000 +0200
3905 +++ linux-2.6.28.10/arch/ubicom32/include/asm/fb.h 2009-08-06 10:31:02.000000000 +0300
3906 @@ -0,0 +1,39 @@
3907 +/*
3908 + * arch/ubicom32/include/asm/fb.h
3909 + * Definition of fb_is_primary_device() for Ubicom32 architecture.
3910 + *
3911 + * (C) Copyright 2009, Ubicom, Inc.
3912 + *
3913 + * This file is part of the Ubicom32 Linux Kernel Port.
3914 + *
3915 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3916 + * it and/or modify it under the terms of the GNU General Public License
3917 + * as published by the Free Software Foundation, either version 2 of the
3918 + * License, or (at your option) any later version.
3919 + *
3920 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3921 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3922 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3923 + * the GNU General Public License for more details.
3924 + *
3925 + * You should have received a copy of the GNU General Public License
3926 + * along with the Ubicom32 Linux Kernel Port. If not,
3927 + * see <http://www.gnu.org/licenses/>.
3928 + *
3929 + * Ubicom32 implementation derived from (with many thanks):
3930 + * arch/m68knommu
3931 + * arch/blackfin
3932 + * arch/parisc
3933 + */
3934 +#ifndef _ASM_UBICOM32_FB_H
3935 +#define _ASM_UBICOM32_FB_H
3936 +#include <linux/fb.h>
3937 +
3938 +#define fb_pgprotect(...) do {} while (0)
3939 +
3940 +static inline int fb_is_primary_device(struct fb_info *info)
3941 +{
3942 + return 0;
3943 +}
3944 +
3945 +#endif /* _ASM_UBICOM32_FB_H */
3946 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/fcntl.h linux-2.6.28.10/arch/ubicom32/include/asm/fcntl.h
3947 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/fcntl.h 1970-01-01 02:00:00.000000000 +0200
3948 +++ linux-2.6.28.10/arch/ubicom32/include/asm/fcntl.h 2009-08-06 10:31:02.000000000 +0300
3949 @@ -0,0 +1,38 @@
3950 +/*
3951 + * arch/ubicom32/include/asm/fcntl.h
3952 + * File control bit definitions for Ubicom32 architecture.
3953 + *
3954 + * (C) Copyright 2009, Ubicom, Inc.
3955 + *
3956 + * This file is part of the Ubicom32 Linux Kernel Port.
3957 + *
3958 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
3959 + * it and/or modify it under the terms of the GNU General Public License
3960 + * as published by the Free Software Foundation, either version 2 of the
3961 + * License, or (at your option) any later version.
3962 + *
3963 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
3964 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
3965 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
3966 + * the GNU General Public License for more details.
3967 + *
3968 + * You should have received a copy of the GNU General Public License
3969 + * along with the Ubicom32 Linux Kernel Port. If not,
3970 + * see <http://www.gnu.org/licenses/>.
3971 + *
3972 + * Ubicom32 implementation derived from (with many thanks):
3973 + * arch/m68knommu
3974 + * arch/blackfin
3975 + * arch/parisc
3976 + */
3977 +#ifndef _ASM_UBICOM32_FCNTL_H
3978 +#define _ASM_UBICOM32_FCNTL_H
3979 +
3980 +#define O_DIRECTORY 040000 /* must be a directory */
3981 +#define O_NOFOLLOW 0100000 /* don't follow links */
3982 +#define O_DIRECT 0200000 /* direct disk access hint - currently ignored */
3983 +#define O_LARGEFILE 0400000
3984 +
3985 +#include <asm-generic/fcntl.h>
3986 +
3987 +#endif /* _ASM_UBICOM32_FCNTL_H */
3988 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/flat.h linux-2.6.28.10/arch/ubicom32/include/asm/flat.h
3989 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/flat.h 1970-01-01 02:00:00.000000000 +0200
3990 +++ linux-2.6.28.10/arch/ubicom32/include/asm/flat.h 2009-08-06 10:31:02.000000000 +0300
3991 @@ -0,0 +1,73 @@
3992 +/*
3993 + * arch/ubicom32/include/asm/flat.h
3994 + * Definitions to support flat-format executables.
3995 + *
3996 + * (C) Copyright 2009, Ubicom, Inc.
3997 + *
3998 + * This file is part of the Ubicom32 Linux Kernel Port.
3999 + *
4000 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4001 + * it and/or modify it under the terms of the GNU General Public License
4002 + * as published by the Free Software Foundation, either version 2 of the
4003 + * License, or (at your option) any later version.
4004 + *
4005 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4006 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4007 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4008 + * the GNU General Public License for more details.
4009 + *
4010 + * You should have received a copy of the GNU General Public License
4011 + * along with the Ubicom32 Linux Kernel Port. If not,
4012 + * see <http://www.gnu.org/licenses/>.
4013 + *
4014 + * Ubicom32 implementation derived from (with many thanks):
4015 + * arch/m68knommu
4016 + * arch/blackfin
4017 + * arch/parisc
4018 + */
4019 +
4020 +#ifndef _ASM_UBICOM32_FLAT_H
4021 +#define _ASM_UBICOM32_FLAT_H
4022 +
4023 +#define ARCH_FLAT_ALIGN 0x80
4024 +#define ARCH_FLAT_ALIGN_TEXT 1
4025 +
4026 +#define R_UBICOM32_32 2
4027 +#define R_UBICOM32_HI24 7
4028 +#define R_UBICOM32_LO7_S 8
4029 +#define R_UBICOM32_LO7_2_S 9
4030 +#define R_UBICOM32_LO7_4_S 10
4031 +#define R_UBICOM32_LO7_D 11
4032 +#define R_UBICOM32_LO7_2_D 12
4033 +#define R_UBICOM32_LO7_4_D 13
4034 +#define R_UBICOM32_LO7_CALLI 15
4035 +#define R_UBICOM32_LO16_CALLI 16
4036 +
4037 +extern void ubicom32_flat_put_addr_at_rp(unsigned long *rp, u32_t val, u32_t rval, unsigned long *p);
4038 +extern unsigned long ubicom32_flat_get_addr_from_rp(unsigned long *rp, u32_t relval, u32_t flags, unsigned long *p);
4039 +
4040 +#define flat_stack_align(sp) /* nothing needed */
4041 +#define flat_argvp_envp_on_stack() 1
4042 +#define flat_old_ram_flag(flags) (flags)
4043 +#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
4044 +#define flat_get_addr_from_rp(rp, relval, flags, p) (ubicom32_flat_get_addr_from_rp(rp, relval,flags, p))
4045 +#define flat_put_addr_at_rp(rp, val, relval) do {ubicom32_flat_put_addr_at_rp(rp, val, relval, &persistent);} while(0)
4046 +#define flat_get_relocate_addr(rel) ((persistent) ? (persistent & 0x07ffffff) : (rel & 0x07ffffff))
4047 +
4048 +static inline int flat_set_persistent(unsigned int relval, unsigned long *p)
4049 +{
4050 + if (*p) {
4051 + return 0;
4052 + } else {
4053 + if ((relval >> 27) != R_UBICOM32_32) {
4054 + /*
4055 + * Something other than UBICOM32_32. The next entry has the relocation.
4056 + */
4057 + *p = relval;
4058 + return 1;
4059 + }
4060 + }
4061 + return 0;
4062 +}
4063 +
4064 +#endif /* _ASM_UBICOM32_FLAT_H */
4065 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/fpu.h linux-2.6.28.10/arch/ubicom32/include/asm/fpu.h
4066 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/fpu.h 1970-01-01 02:00:00.000000000 +0200
4067 +++ linux-2.6.28.10/arch/ubicom32/include/asm/fpu.h 2009-08-06 10:31:02.000000000 +0300
4068 @@ -0,0 +1,37 @@
4069 +/*
4070 + * arch/ubicom32/include/asm/fpu.h
4071 + * Floating point state definitions for Ubicom32 architecture.
4072 + *
4073 + * (C) Copyright 2009, Ubicom, Inc.
4074 + *
4075 + * This file is part of the Ubicom32 Linux Kernel Port.
4076 + *
4077 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4078 + * it and/or modify it under the terms of the GNU General Public License
4079 + * as published by the Free Software Foundation, either version 2 of the
4080 + * License, or (at your option) any later version.
4081 + *
4082 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4083 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4084 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4085 + * the GNU General Public License for more details.
4086 + *
4087 + * You should have received a copy of the GNU General Public License
4088 + * along with the Ubicom32 Linux Kernel Port. If not,
4089 + * see <http://www.gnu.org/licenses/>.
4090 + *
4091 + * Ubicom32 implementation derived from (with many thanks):
4092 + * arch/m68knommu
4093 + * arch/blackfin
4094 + * arch/parisc
4095 + */
4096 +#ifndef _ASM_UBICOM32_FPU_H
4097 +#define _ASM_UBICOM32_FPU_H
4098 +
4099 +/*
4100 + * MAX floating point unit state size (FSAVE/FRESTORE)
4101 + */
4102 +/* No FP unit present then... */
4103 +#define FPSTATESIZE (2) /* dummy size */
4104 +
4105 +#endif /* _ASM_UBICOM32_FPU_H */
4106 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/futex.h linux-2.6.28.10/arch/ubicom32/include/asm/futex.h
4107 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/futex.h 1970-01-01 02:00:00.000000000 +0200
4108 +++ linux-2.6.28.10/arch/ubicom32/include/asm/futex.h 2009-08-06 10:31:02.000000000 +0300
4109 @@ -0,0 +1,33 @@
4110 +/*
4111 + * arch/ubicom32/include/asm/futex.h
4112 + * Generic futex.h for Ubicom32 architecture.
4113 + *
4114 + * (C) Copyright 2009, Ubicom, Inc.
4115 + *
4116 + * This file is part of the Ubicom32 Linux Kernel Port.
4117 + *
4118 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4119 + * it and/or modify it under the terms of the GNU General Public License
4120 + * as published by the Free Software Foundation, either version 2 of the
4121 + * License, or (at your option) any later version.
4122 + *
4123 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4124 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4125 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4126 + * the GNU General Public License for more details.
4127 + *
4128 + * You should have received a copy of the GNU General Public License
4129 + * along with the Ubicom32 Linux Kernel Port. If not,
4130 + * see <http://www.gnu.org/licenses/>.
4131 + *
4132 + * Ubicom32 implementation derived from (with many thanks):
4133 + * arch/m68knommu
4134 + * arch/blackfin
4135 + * arch/parisc
4136 + */
4137 +#ifndef _ASM_UBICOM32_FUTEX_H
4138 +#define _ASM_UBICOM32_FUTEX_H
4139 +
4140 +#include <asm-generic/futex.h>
4141 +
4142 +#endif /* _ASM_UBICOM32_FUTEX_H */
4143 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/gpio.h linux-2.6.28.10/arch/ubicom32/include/asm/gpio.h
4144 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/gpio.h 1970-01-01 02:00:00.000000000 +0200
4145 +++ linux-2.6.28.10/arch/ubicom32/include/asm/gpio.h 2009-08-12 13:08:37.000000000 +0300
4146 @@ -0,0 +1,451 @@
4147 +/*
4148 + * arch/ubicom32/include/asm/gpio.h
4149 + * Definitions for GPIO operations on Ubicom32 architecture.
4150 + *
4151 + * (C) Copyright 2009, Ubicom, Inc.
4152 + *
4153 + * This file is part of the Ubicom32 Linux Kernel Port.
4154 + *
4155 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4156 + * it and/or modify it under the terms of the GNU General Public License
4157 + * as published by the Free Software Foundation, either version 2 of the
4158 + * License, or (at your option) any later version.
4159 + *
4160 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4161 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4162 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4163 + * the GNU General Public License for more details.
4164 + *
4165 + * You should have received a copy of the GNU General Public License
4166 + * along with the Ubicom32 Linux Kernel Port. If not,
4167 + * see <http://www.gnu.org/licenses/>.
4168 + *
4169 + * Ubicom32 implementation derived from (with many thanks):
4170 + * arch/m68knommu
4171 + * arch/blackfin
4172 + * arch/parisc
4173 + */
4174 +#ifndef _ASM_UBICOM32_GPIO_H
4175 +#define _ASM_UBICOM32_GPIO_H
4176 +
4177 +#include <linux/compiler.h>
4178 +#include <asm/irq.h>
4179 +
4180 +#include <asm/ip5000.h>
4181 +
4182 +#define ARCH_NR_GPIOS 512
4183 +#define MAX_UBICOM_ONCHIP_GPIO (9 * 32)
4184 +
4185 +/*
4186 + * Macros for manipulating GPIO numbers
4187 + */
4188 +#define gpio_bit(gn) (1 << (gn & 0x1f))
4189 +#define gpio_bank(gn) (gn >> 5)
4190 +
4191 +#define gpio_pin_index(gn) (gn & 0x1f)
4192 +#define gpio_port_index(gn) (gn >> 5)
4193 +
4194 +#define GPIO_RA_0 ((32 * 0) + 0)
4195 +#define GPIO_RA_1 ((32 * 0) + 1)
4196 +#define GPIO_RA_2 ((32 * 0) + 2)
4197 +#define GPIO_RA_3 ((32 * 0) + 3)
4198 +#define GPIO_RA_4 ((32 * 0) + 4)
4199 +#define GPIO_RA_5 ((32 * 0) + 5)
4200 +#define GPIO_RA_6 ((32 * 0) + 6)
4201 +#define GPIO_RA_7 ((32 * 0) + 7)
4202 +
4203 +#define GPIO_RB_0 ((32 * 1) + 0)
4204 +#define GPIO_RB_1 ((32 * 1) + 1)
4205 +#define GPIO_RB_2 ((32 * 1) + 2)
4206 +#define GPIO_RB_3 ((32 * 1) + 3)
4207 +#define GPIO_RB_4 ((32 * 1) + 4)
4208 +#define GPIO_RB_5 ((32 * 1) + 5)
4209 +#define GPIO_RB_6 ((32 * 1) + 6)
4210 +#define GPIO_RB_7 ((32 * 1) + 7)
4211 +#define GPIO_RB_8 ((32 * 1) + 8)
4212 +#define GPIO_RB_9 ((32 * 1) + 9)
4213 +#define GPIO_RB_10 ((32 * 1) + 10)
4214 +#define GPIO_RB_11 ((32 * 1) + 11)
4215 +#define GPIO_RB_12 ((32 * 1) + 12)
4216 +#define GPIO_RB_13 ((32 * 1) + 13)
4217 +#define GPIO_RB_14 ((32 * 1) + 14)
4218 +#define GPIO_RB_15 ((32 * 1) + 15)
4219 +#define GPIO_RB_16 ((32 * 1) + 16)
4220 +#define GPIO_RB_17 ((32 * 1) + 17)
4221 +#define GPIO_RB_18 ((32 * 1) + 18)
4222 +#define GPIO_RB_19 ((32 * 1) + 19)
4223 +
4224 +#define GPIO_RC_0 ((32 * 2) + 0)
4225 +#define GPIO_RC_1 ((32 * 2) + 1)
4226 +#define GPIO_RC_2 ((32 * 2) + 2)
4227 +#define GPIO_RC_3 ((32 * 2) + 3)
4228 +#define GPIO_RC_4 ((32 * 2) + 4)
4229 +#define GPIO_RC_5 ((32 * 2) + 5)
4230 +#define GPIO_RC_6 ((32 * 2) + 6)
4231 +#define GPIO_RC_7 ((32 * 2) + 7)
4232 +#define GPIO_RC_8 ((32 * 2) + 8)
4233 +#define GPIO_RC_9 ((32 * 2) + 9)
4234 +#define GPIO_RC_10 ((32 * 2) + 10)
4235 +#define GPIO_RC_11 ((32 * 2) + 11)
4236 +#define GPIO_RC_12 ((32 * 2) + 12)
4237 +#define GPIO_RC_13 ((32 * 2) + 13)
4238 +#define GPIO_RC_14 ((32 * 2) + 14)
4239 +#define GPIO_RC_15 ((32 * 2) + 15)
4240 +#define GPIO_RC_16 ((32 * 2) + 16)
4241 +#define GPIO_RC_17 ((32 * 2) + 17)
4242 +#define GPIO_RC_18 ((32 * 2) + 18)
4243 +#define GPIO_RC_19 ((32 * 2) + 19)
4244 +#define GPIO_RC_20 ((32 * 2) + 20)
4245 +#define GPIO_RC_21 ((32 * 2) + 21)
4246 +#define GPIO_RC_22 ((32 * 2) + 22)
4247 +#define GPIO_RC_23 ((32 * 2) + 23)
4248 +#define GPIO_RC_24 ((32 * 2) + 24)
4249 +#define GPIO_RC_25 ((32 * 2) + 25)
4250 +#define GPIO_RC_26 ((32 * 2) + 26)
4251 +#define GPIO_RC_27 ((32 * 2) + 27)
4252 +#define GPIO_RC_28 ((32 * 2) + 28)
4253 +#define GPIO_RC_29 ((32 * 2) + 29)
4254 +#define GPIO_RC_30 ((32 * 2) + 30)
4255 +#define GPIO_RC_31 ((32 * 2) + 31)
4256 +
4257 +#define GPIO_RD_0 ((32 * 3) + 0)
4258 +#define GPIO_RD_1 ((32 * 3) + 1)
4259 +#define GPIO_RD_2 ((32 * 3) + 2)
4260 +#define GPIO_RD_3 ((32 * 3) + 3)
4261 +#define GPIO_RD_4 ((32 * 3) + 4)
4262 +#define GPIO_RD_5 ((32 * 3) + 5)
4263 +#define GPIO_RD_6 ((32 * 3) + 6)
4264 +#define GPIO_RD_7 ((32 * 3) + 7)
4265 +#define GPIO_RD_8 ((32 * 3) + 8)
4266 +#define GPIO_RD_9 ((32 * 3) + 9)
4267 +#define GPIO_RD_10 ((32 * 3) + 10)
4268 +#define GPIO_RD_11 ((32 * 3) + 11)
4269 +
4270 +#define GPIO_RE_0 ((32 * 4) + 0)
4271 +#define GPIO_RE_1 ((32 * 4) + 1)
4272 +#define GPIO_RE_2 ((32 * 4) + 2)
4273 +#define GPIO_RE_3 ((32 * 4) + 3)
4274 +#define GPIO_RE_4 ((32 * 4) + 4)
4275 +#define GPIO_RE_5 ((32 * 4) + 5)
4276 +#define GPIO_RE_6 ((32 * 4) + 6)
4277 +#define GPIO_RE_7 ((32 * 4) + 7)
4278 +
4279 +#define GPIO_RF_0 ((32 * 5) + 0)
4280 +#define GPIO_RF_1 ((32 * 5) + 1)
4281 +#define GPIO_RF_2 ((32 * 5) + 2)
4282 +#define GPIO_RF_3 ((32 * 5) + 3)
4283 +#define GPIO_RF_4 ((32 * 5) + 4)
4284 +#define GPIO_RF_5 ((32 * 5) + 5)
4285 +#define GPIO_RF_6 ((32 * 5) + 6)
4286 +#define GPIO_RF_7 ((32 * 5) + 7)
4287 +#define GPIO_RF_8 ((32 * 5) + 8)
4288 +#define GPIO_RF_9 ((32 * 5) + 9)
4289 +#define GPIO_RF_10 ((32 * 5) + 10)
4290 +#define GPIO_RF_11 ((32 * 5) + 11)
4291 +#define GPIO_RF_12 ((32 * 5) + 12)
4292 +#define GPIO_RF_13 ((32 * 5) + 13)
4293 +#define GPIO_RF_14 ((32 * 5) + 14)
4294 +#define GPIO_RF_15 ((32 * 5) + 15)
4295 +
4296 +#define GPIO_RG_0 ((32 * 6) + 0)
4297 +#define GPIO_RG_1 ((32 * 6) + 1)
4298 +#define GPIO_RG_2 ((32 * 6) + 2)
4299 +#define GPIO_RG_3 ((32 * 6) + 3)
4300 +#define GPIO_RG_4 ((32 * 6) + 4)
4301 +#define GPIO_RG_5 ((32 * 6) + 5)
4302 +#define GPIO_RG_6 ((32 * 6) + 6)
4303 +#define GPIO_RG_7 ((32 * 6) + 7)
4304 +#define GPIO_RG_8 ((32 * 6) + 8)
4305 +#define GPIO_RG_9 ((32 * 6) + 9)
4306 +#define GPIO_RG_10 ((32 * 6) + 10)
4307 +#define GPIO_RG_11 ((32 * 6) + 11)
4308 +#define GPIO_RG_12 ((32 * 6) + 12)
4309 +#define GPIO_RG_13 ((32 * 6) + 13)
4310 +#define GPIO_RG_14 ((32 * 6) + 14)
4311 +#define GPIO_RG_15 ((32 * 6) + 15)
4312 +#define GPIO_RG_16 ((32 * 6) + 16)
4313 +#define GPIO_RG_17 ((32 * 6) + 17)
4314 +#define GPIO_RG_18 ((32 * 6) + 18)
4315 +#define GPIO_RG_19 ((32 * 6) + 19)
4316 +#define GPIO_RG_20 ((32 * 6) + 20)
4317 +#define GPIO_RG_21 ((32 * 6) + 21)
4318 +#define GPIO_RG_22 ((32 * 6) + 22)
4319 +#define GPIO_RG_23 ((32 * 6) + 23)
4320 +#define GPIO_RG_24 ((32 * 6) + 24)
4321 +#define GPIO_RG_25 ((32 * 6) + 25)
4322 +#define GPIO_RG_26 ((32 * 6) + 26)
4323 +#define GPIO_RG_27 ((32 * 6) + 27)
4324 +#define GPIO_RG_28 ((32 * 6) + 28)
4325 +#define GPIO_RG_29 ((32 * 6) + 29)
4326 +#define GPIO_RG_30 ((32 * 6) + 30)
4327 +#define GPIO_RG_31 ((32 * 6) + 31)
4328 +
4329 +#define GPIO_RH_0 ((32 * 7) + 0)
4330 +#define GPIO_RH_1 ((32 * 7) + 1)
4331 +#define GPIO_RH_2 ((32 * 7) + 2)
4332 +#define GPIO_RH_3 ((32 * 7) + 3)
4333 +#define GPIO_RH_4 ((32 * 7) + 4)
4334 +#define GPIO_RH_5 ((32 * 7) + 5)
4335 +#define GPIO_RH_6 ((32 * 7) + 6)
4336 +#define GPIO_RH_7 ((32 * 7) + 7)
4337 +#define GPIO_RH_8 ((32 * 7) + 8)
4338 +#define GPIO_RH_9 ((32 * 7) + 9)
4339 +
4340 +#define GPIO_RI_0 ((32 * 8) + 0)
4341 +#define GPIO_RI_1 ((32 * 8) + 1)
4342 +#define GPIO_RI_2 ((32 * 8) + 2)
4343 +#define GPIO_RI_3 ((32 * 8) + 3)
4344 +#define GPIO_RI_4 ((32 * 8) + 4)
4345 +#define GPIO_RI_5 ((32 * 8) + 5)
4346 +#define GPIO_RI_6 ((32 * 8) + 6)
4347 +#define GPIO_RI_7 ((32 * 8) + 7)
4348 +#define GPIO_RI_8 ((32 * 8) + 8)
4349 +#define GPIO_RI_9 ((32 * 8) + 9)
4350 +#define GPIO_RI_10 ((32 * 8) + 10)
4351 +#define GPIO_RI_11 ((32 * 8) + 11)
4352 +#define GPIO_RI_12 ((32 * 8) + 12)
4353 +#define GPIO_RI_13 ((32 * 8) + 13)
4354 +
4355 +/*
4356 + * The following section defines extra GPIO available to some boards.
4357 + * These GPIO are generally external to the processor (i.e. SPI/I2C
4358 + * expander chips).
4359 + *
4360 + * Note that these defines show all possible GPIO available, however,
4361 + * depending on the actual board configuration, some GPIO are not
4362 + * available for use.
4363 + */
4364 +#ifdef CONFIG_IP7500MEDIA
4365 +/*
4366 + * U15
4367 + */
4368 +#define IP7500MEDIA_U15_BASE (32 * 10)
4369 +#define IP7500MEDIA_IO0 (IP7500MEDIA_U15_BASE + 0)
4370 +#define IP7500MEDIA_IO1 (IP7500MEDIA_U15_BASE + 1)
4371 +#define IP7500MEDIA_IO2 (IP7500MEDIA_U15_BASE + 2)
4372 +#define IP7500MEDIA_IO3 (IP7500MEDIA_U15_BASE + 3)
4373 +#define IP7500MEDIA_IO4 (IP7500MEDIA_U15_BASE + 4)
4374 +#define IP7500MEDIA_IO5 (IP7500MEDIA_U15_BASE + 5)
4375 +#define IP7500MEDIA_IO6 (IP7500MEDIA_U15_BASE + 6)
4376 +#define IP7500MEDIA_IO7 (IP7500MEDIA_U15_BASE + 7)
4377 +
4378 +/*
4379 + * U16
4380 + */
4381 +#define IP7500MEDIA_U16_BASE (32 * 11)
4382 +#define IP7500MEDIA_IO8 (IP7500MEDIA_U16_BASE + 0)
4383 +#define IP7500MEDIA_IO9 (IP7500MEDIA_U16_BASE + 1)
4384 +#define IP7500MEDIA_IO10 (IP7500MEDIA_U16_BASE + 2)
4385 +#define IP7500MEDIA_IO11 (IP7500MEDIA_U16_BASE + 3)
4386 +#define IP7500MEDIA_IO12 (IP7500MEDIA_U16_BASE + 4)
4387 +#define IP7500MEDIA_IO13 (IP7500MEDIA_U16_BASE + 5)
4388 +#define IP7500MEDIA_IO14 (IP7500MEDIA_U16_BASE + 6)
4389 +#define IP7500MEDIA_IO15 (IP7500MEDIA_U16_BASE + 7)
4390 +
4391 +/*
4392 + * U17
4393 + */
4394 +#define IP7500MEDIA_U17_BASE (32 * 12)
4395 +#define IP7500MEDIA_IO16 (IP7500MEDIA_U17_BASE + 0)
4396 +#define IP7500MEDIA_IO17 (IP7500MEDIA_U17_BASE + 1)
4397 +#define IP7500MEDIA_IO18 (IP7500MEDIA_U17_BASE + 2)
4398 +#define IP7500MEDIA_IO19 (IP7500MEDIA_U17_BASE + 3)
4399 +#define IP7500MEDIA_IO20 (IP7500MEDIA_U17_BASE + 4)
4400 +#define IP7500MEDIA_IO21 (IP7500MEDIA_U17_BASE + 5)
4401 +#define IP7500MEDIA_IO22 (IP7500MEDIA_U17_BASE + 6)
4402 +#define IP7500MEDIA_IO23 (IP7500MEDIA_U17_BASE + 7)
4403 +
4404 +/*
4405 + * U18
4406 + */
4407 +#define IP7500MEDIA_U18_BASE (32 * 13)
4408 +#define IP7500MEDIA_IO24 (IP7500MEDIA_U18_BASE + 0)
4409 +#define IP7500MEDIA_IO25 (IP7500MEDIA_U18_BASE + 1)
4410 +#define IP7500MEDIA_IO26 (IP7500MEDIA_U18_BASE + 2)
4411 +#define IP7500MEDIA_IO27 (IP7500MEDIA_U18_BASE + 3)
4412 +#define IP7500MEDIA_IO28 (IP7500MEDIA_U18_BASE + 4)
4413 +#define IP7500MEDIA_IO29 (IP7500MEDIA_U18_BASE + 5)
4414 +#define IP7500MEDIA_IO30 (IP7500MEDIA_U18_BASE + 6)
4415 +#define IP7500MEDIA_IO31 (IP7500MEDIA_U18_BASE + 7)
4416 +#endif
4417 +
4418 +#ifdef CONFIG_IP7145DPF
4419 +/*
4420 + * U48
4421 + */
4422 +#define IP7145DPF_U48_BASE (32 * 10)
4423 +#define IP7145DPF_IO0 (IP7145DPF_U48_BASE + 0)
4424 +#define IP7145DPF_IO1 (IP7145DPF_U48_BASE + 1)
4425 +#define IP7145DPF_IO2 (IP7145DPF_U48_BASE + 2)
4426 +#define IP7145DPF_IO3 (IP7145DPF_U48_BASE + 3)
4427 +#define IP7145DPF_IO4 (IP7145DPF_U48_BASE + 4)
4428 +#define IP7145DPF_IO5 (IP7145DPF_U48_BASE + 5)
4429 +#define IP7145DPF_IO6 (IP7145DPF_U48_BASE + 6)
4430 +#define IP7145DPF_IO7 (IP7145DPF_U48_BASE + 7)
4431 +
4432 +/*
4433 + * U72
4434 + */
4435 +#define IP7145DPF_U72_BASE (32 * 11)
4436 +#define IP7145DPF_IOB0 (IP7145DPF_U72_BASE + 0)
4437 +#define IP7145DPF_IOB1 (IP7145DPF_U72_BASE + 1)
4438 +#define IP7145DPF_IOB2 (IP7145DPF_U72_BASE + 2)
4439 +#define IP7145DPF_IOB3 (IP7145DPF_U72_BASE + 3)
4440 +#define IP7145DPF_IOB4 (IP7145DPF_U72_BASE + 4)
4441 +#define IP7145DPF_IOB5 (IP7145DPF_U72_BASE + 5)
4442 +#define IP7145DPF_IOB6 (IP7145DPF_U72_BASE + 6)
4443 +#define IP7145DPF_IOB7 (IP7145DPF_U72_BASE + 7)
4444 +#endif
4445 +
4446 +#include <asm-generic/gpio.h>
4447 +
4448 +/*
4449 + * The following macros bypass gpiolib to generate direct references
4450 + * to the port registers. These assume, minimally, that either
4451 + * gpio_direction_input() or gpio_direction_output() have already been
4452 + * called to setup the pin direction and to enable the pin function to
4453 + * be gpio. These macros generate the hardware port address based on
4454 + * the assumption that all ports are 32 bits wide (even though we know
4455 + * they are not). This is so we can efficiently turn pin numbers into
4456 + * port addresses without a lookup.
4457 + *
4458 + * These operations must be done in one instruction to prevent clobbering
4459 + * other thread's accesses to the same port.
4460 + */
4461 +#define UBICOM32_GPIO_ENABLE(pin) \
4462 + do { \
4463 + asm volatile ("or.4 (%[port]), (%[port]), %[mask]\n\t" \
4464 + : \
4465 + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_mask), \
4466 + [mask] "d" (gpio_bit(pin)) \
4467 + : "cc", "memory" \
4468 + ); \
4469 + } while (0);
4470 +
4471 +#define UBICOM32_GPIO_DISABLE(pin) \
4472 + do { \
4473 + asm volatile ("and.4 (%[port]), (%[port]), %[mask]\n\t" \
4474 + : \
4475 + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_mask), \
4476 + [mask] "d" (~gpio_bit(pin)) \
4477 + : "cc", "memory" \
4478 + ); \
4479 + } while (0);
4480 +
4481 +#define UBICOM32_GPIO_SET_PIN_INPUT(pin) \
4482 + do { \
4483 + asm volatile ("and.4 (%[port]), (%[port]), %[mask]\n\t" \
4484 + : \
4485 + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_ctl), \
4486 + [mask] "d" (~gpio_bit(pin)) \
4487 + : "cc", "memory" \
4488 + ); \
4489 + } while (0);
4490 +
4491 +#define UBICOM32_GPIO_SET_PIN_OUTPUT(pin) \
4492 + do { \
4493 + asm volatile ("or.4 (%[port]), (%[port]), %[mask]\n\t" \
4494 + : \
4495 + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_ctl), \
4496 + [mask] "d" (gpio_bit(pin)) \
4497 + : "cc", "memory" \
4498 + ); \
4499 + } while (0);
4500 +
4501 +#define UBICOM32_GPIO_SET_PIN_TOGGLE(pin) \
4502 + do { \
4503 + asm volatile ("xor.4 (%[port]), (%[port]), %[mask]\n\t" \
4504 + : \
4505 + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_out), \
4506 + [mask] "d" (gpio_bit(pin)) \
4507 + : "cc", "memory" \
4508 + ); \
4509 + } while (0);
4510 +
4511 +#define UBICOM32_GPIO_SET_PIN_HIGH(pin) \
4512 + do { \
4513 + asm volatile ("or.4 (%[port]), (%[port]), %[mask]\n\t" \
4514 + : \
4515 + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_out), \
4516 + [mask] "d" (gpio_bit(pin)) \
4517 + : "cc", "memory" \
4518 + ); \
4519 + } while (0);
4520 +
4521 +#define UBICOM32_GPIO_SET_PIN_LOW(pin) \
4522 + do { \
4523 + asm volatile ("and.4 (%[port]), (%[port]), %[mask]\n\t" \
4524 + : \
4525 + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_out), \
4526 + [mask] "d" (~gpio_bit(pin)) \
4527 + : "cc", "memory" \
4528 + ); \
4529 + } while (0);
4530 +
4531 +#define UBICOM32_GPIO_SET_PIN(pin, val) \
4532 + if ( val ) { \
4533 + UBICOM32_GPIO_SET_PIN_HIGH(pin); \
4534 + } else { \
4535 + UBICOM32_GPIO_SET_PIN_LOW(pin); \
4536 + }
4537 +
4538 +#define UBICOM32_GPIO_GET_PIN(pin) \
4539 + (0 != (UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_in \
4540 + & gpio_bit(pin)))
4541 +
4542 +
4543 +static inline int gpio_get_value(unsigned gpio)
4544 +{
4545 + if (gpio <= MAX_UBICOM_ONCHIP_GPIO)
4546 + return UBICOM32_GPIO_GET_PIN(gpio);
4547 + else
4548 + return __gpio_get_value(gpio);
4549 +}
4550 +
4551 +static inline void gpio_set_value(unsigned gpio, int value)
4552 +{
4553 + if (gpio <= MAX_UBICOM_ONCHIP_GPIO)
4554 + {
4555 + UBICOM32_GPIO_SET_PIN(gpio, value);
4556 + }
4557 + else
4558 + {
4559 + __gpio_set_value(gpio, value);
4560 + }
4561 +}
4562 +
4563 +static inline int gpio_cansleep(unsigned gpio)
4564 +{
4565 + return __gpio_cansleep(gpio);
4566 +}
4567 +
4568 +static inline int gpio_to_irq(unsigned gpio)
4569 +{
4570 +#if defined(IP5000) || defined(IP5000_REV2)
4571 + if ((gpio >= GPIO_RA_4) && (gpio <= GPIO_RA_6))
4572 + return 25;
4573 + else
4574 + return -ENXIO;
4575 +
4576 +#elif defined(IP7000) || defined(IP7000_REV2)
4577 + if ((gpio >= GPIO_RA_4) && (gpio <= GPIO_RA_6))
4578 + return 44 + (gpio - GPIO_RA_4);
4579 + else
4580 + return -ENXIO;
4581 +
4582 +#else
4583 + return -ENXIO;
4584 +
4585 +#endif
4586 +}
4587 +
4588 +static inline int irq_to_gpio(unsigned gpio)
4589 +{
4590 + return -ENXIO;
4591 +}
4592 +
4593 +extern struct ubicom32_io_port *ubi_gpio_get_port(unsigned gpio);
4594 +
4595 +extern int __init ubi_gpio_init(void);
4596 +
4597 +#endif /* _ASM_UBICOM32_GPIO_H */
4598 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/hardirq.h linux-2.6.28.10/arch/ubicom32/include/asm/hardirq.h
4599 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/hardirq.h 1970-01-01 02:00:00.000000000 +0200
4600 +++ linux-2.6.28.10/arch/ubicom32/include/asm/hardirq.h 2009-08-06 10:31:02.000000000 +0300
4601 @@ -0,0 +1,55 @@
4602 +/*
4603 + * arch/ubicom32/include/asm/hardirq.h
4604 + * Definition of ack_bad_irq() for Ubicom32 architecture.
4605 + *
4606 + * (C) Copyright 2009, Ubicom, Inc.
4607 + * Copyright (C) 1997, 98, 99, 2000, 01, 05 Ralf Baechle (ralf@linux-mips.org)
4608 + * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
4609 + * Copyright (C) 2001 MIPS Technologies, Inc.
4610 + *
4611 + * This file is part of the Ubicom32 Linux Kernel Port.
4612 + *
4613 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4614 + * it and/or modify it under the terms of the GNU General Public License
4615 + * as published by the Free Software Foundation, either version 2 of the
4616 + * License, or (at your option) any later version.
4617 + *
4618 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4619 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4620 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4621 + * the GNU General Public License for more details.
4622 + *
4623 + * You should have received a copy of the GNU General Public License
4624 + * along with the Ubicom32 Linux Kernel Port. If not,
4625 + * see <http://www.gnu.org/licenses/>.
4626 + *
4627 + * Ubicom32 implementation derived from (with many thanks):
4628 + * arch/m68knommu
4629 + * arch/blackfin
4630 + * arch/parisc
4631 + */
4632 +#ifndef _ASM_UBICOM32_HARDIRQ_H
4633 +#define _ASM_UBICOM32_HARDIRQ_H
4634 +
4635 +#include <linux/threads.h>
4636 +#include <linux/irq.h>
4637 +
4638 +/*
4639 + * The hardirq mask has to be large enough to have space
4640 + * for potentially all IRQ sources in the system nesting
4641 + * on a single CPU. For Ubicom32, we have 64 IRQ sources.
4642 + */
4643 +#define HARDIRQ_BITS 6
4644 +#if (1 << HARDIRQ_BITS) < NR_IRQS
4645 +# error HARDIRQ_BITS is too low!
4646 +#endif
4647 +
4648 +typedef struct {
4649 + unsigned int __softirq_pending;
4650 +} ____cacheline_aligned irq_cpustat_t;
4651 +
4652 +#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
4653 +
4654 +extern void ack_bad_irq(unsigned int irq);
4655 +
4656 +#endif /* _ASM_UBICOM32_HARDIRQ_H */
4657 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/hw_irq.h linux-2.6.28.10/arch/ubicom32/include/asm/hw_irq.h
4658 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/hw_irq.h 1970-01-01 02:00:00.000000000 +0200
4659 +++ linux-2.6.28.10/arch/ubicom32/include/asm/hw_irq.h 2009-08-06 10:31:02.000000000 +0300
4660 @@ -0,0 +1,31 @@
4661 +/*
4662 + * arch/ubicom32/include/asm/hw_irq.h
4663 + * Ubicom32 architecture APIC support.
4664 + *
4665 + * (C) Copyright 2009, Ubicom, Inc.
4666 + *
4667 + * This file is part of the Ubicom32 Linux Kernel Port.
4668 + *
4669 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4670 + * it and/or modify it under the terms of the GNU General Public License
4671 + * as published by the Free Software Foundation, either version 2 of the
4672 + * License, or (at your option) any later version.
4673 + *
4674 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4675 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4676 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4677 + * the GNU General Public License for more details.
4678 + *
4679 + * You should have received a copy of the GNU General Public License
4680 + * along with the Ubicom32 Linux Kernel Port. If not,
4681 + * see <http://www.gnu.org/licenses/>.
4682 + *
4683 + * Ubicom32 implementation derived from (with many thanks):
4684 + * arch/m68knommu
4685 + * arch/blackfin
4686 + * arch/parisc
4687 + */
4688 +#ifndef _ASM_UBICOM32_HW_IRQ_H
4689 +#define _ASM_UBICOM32_HW_IRQ_H
4690 +
4691 +#endif /* _ASM_UBICOM32_HW_IRQ_H */
4692 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ioctl.h linux-2.6.28.10/arch/ubicom32/include/asm/ioctl.h
4693 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ioctl.h 1970-01-01 02:00:00.000000000 +0200
4694 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ioctl.h 2009-08-06 10:31:02.000000000 +0300
4695 @@ -0,0 +1,33 @@
4696 +/*
4697 + * arch/ubicom32/include/asm/ioctl.h
4698 + * Generic ioctl.h for Ubicom32 architecture.
4699 + *
4700 + * (C) Copyright 2009, Ubicom, Inc.
4701 + *
4702 + * This file is part of the Ubicom32 Linux Kernel Port.
4703 + *
4704 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4705 + * it and/or modify it under the terms of the GNU General Public License
4706 + * as published by the Free Software Foundation, either version 2 of the
4707 + * License, or (at your option) any later version.
4708 + *
4709 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4710 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4711 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4712 + * the GNU General Public License for more details.
4713 + *
4714 + * You should have received a copy of the GNU General Public License
4715 + * along with the Ubicom32 Linux Kernel Port. If not,
4716 + * see <http://www.gnu.org/licenses/>.
4717 + *
4718 + * Ubicom32 implementation derived from (with many thanks):
4719 + * arch/m68knommu
4720 + * arch/blackfin
4721 + * arch/parisc
4722 + */
4723 +#ifndef _ASM_UBICOM32_IOCTL_H
4724 +#define _ASM_UBICOM32_IOCTL_H
4725 +
4726 +#include <asm-generic/ioctl.h>
4727 +
4728 +#endif /* _ASM_UBICOM32_IOCTL_H */
4729 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ioctls.h linux-2.6.28.10/arch/ubicom32/include/asm/ioctls.h
4730 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ioctls.h 1970-01-01 02:00:00.000000000 +0200
4731 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ioctls.h 2009-08-06 10:31:02.000000000 +0300
4732 @@ -0,0 +1,111 @@
4733 +/*
4734 + * arch/ubicom32/include/asm/ioctls.h
4735 + * Definitions of ioctls for Ubicom32 architecture.
4736 + *
4737 + * (C) Copyright 2009, Ubicom, Inc.
4738 + *
4739 + * This file is part of the Ubicom32 Linux Kernel Port.
4740 + *
4741 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4742 + * it and/or modify it under the terms of the GNU General Public License
4743 + * as published by the Free Software Foundation, either version 2 of the
4744 + * License, or (at your option) any later version.
4745 + *
4746 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4747 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4748 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4749 + * the GNU General Public License for more details.
4750 + *
4751 + * You should have received a copy of the GNU General Public License
4752 + * along with the Ubicom32 Linux Kernel Port. If not,
4753 + * see <http://www.gnu.org/licenses/>.
4754 + *
4755 + * Ubicom32 implementation derived from (with many thanks):
4756 + * arch/m68knommu
4757 + * arch/blackfin
4758 + * arch/parisc
4759 + */
4760 +#ifndef _ASM_UBICOM32_IOCTLS_H
4761 +#define _ASM_UBICOM32_IOCTLS_H
4762 +
4763 +#include <asm/ioctl.h>
4764 +
4765 +/* 0x54 is just a magic number to make these relatively unique ('T') */
4766 +
4767 +#define TCGETS 0x5401
4768 +#define TCSETS 0x5402
4769 +#define TCSETSW 0x5403
4770 +#define TCSETSF 0x5404
4771 +#define TCGETA 0x5405
4772 +#define TCSETA 0x5406
4773 +#define TCSETAW 0x5407
4774 +#define TCSETAF 0x5408
4775 +#define TCSBRK 0x5409
4776 +#define TCXONC 0x540A
4777 +#define TCFLSH 0x540B
4778 +#define TIOCEXCL 0x540C
4779 +#define TIOCNXCL 0x540D
4780 +#define TIOCSCTTY 0x540E
4781 +#define TIOCGPGRP 0x540F
4782 +#define TIOCSPGRP 0x5410
4783 +#define TIOCOUTQ 0x5411
4784 +#define TIOCSTI 0x5412
4785 +#define TIOCGWINSZ 0x5413
4786 +#define TIOCSWINSZ 0x5414
4787 +#define TIOCMGET 0x5415
4788 +#define TIOCMBIS 0x5416
4789 +#define TIOCMBIC 0x5417
4790 +#define TIOCMSET 0x5418
4791 +#define TIOCGSOFTCAR 0x5419
4792 +#define TIOCSSOFTCAR 0x541A
4793 +#define FIONREAD 0x541B
4794 +#define TIOCINQ FIONREAD
4795 +#define TIOCLINUX 0x541C
4796 +#define TIOCCONS 0x541D
4797 +#define TIOCGSERIAL 0x541E
4798 +#define TIOCSSERIAL 0x541F
4799 +#define TIOCPKT 0x5420
4800 +#define FIONBIO 0x5421
4801 +#define TIOCNOTTY 0x5422
4802 +#define TIOCSETD 0x5423
4803 +#define TIOCGETD 0x5424
4804 +#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */
4805 +#define TIOCSBRK 0x5427 /* BSD compatibility */
4806 +#define TIOCCBRK 0x5428 /* BSD compatibility */
4807 +#define TIOCGSID 0x5429 /* Return the session ID of FD */
4808 +#define TCGETS2 _IOR('T',0x2A, struct termios2)
4809 +#define TCSETS2 _IOW('T',0x2B, struct termios2)
4810 +#define TCSETSW2 _IOW('T',0x2C, struct termios2)
4811 +#define TCSETSF2 _IOW('T',0x2D, struct termios2)
4812 +#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
4813 +#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
4814 +
4815 +#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */
4816 +#define FIOCLEX 0x5451
4817 +#define FIOASYNC 0x5452
4818 +#define TIOCSERCONFIG 0x5453
4819 +#define TIOCSERGWILD 0x5454
4820 +#define TIOCSERSWILD 0x5455
4821 +#define TIOCGLCKTRMIOS 0x5456
4822 +#define TIOCSLCKTRMIOS 0x5457
4823 +#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
4824 +#define TIOCSERGETLSR 0x5459 /* Get line status register */
4825 +#define TIOCSERGETMULTI 0x545A /* Get multiport config */
4826 +#define TIOCSERSETMULTI 0x545B /* Set multiport config */
4827 +
4828 +#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
4829 +#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
4830 +#define FIOQSIZE 0x545E
4831 +
4832 +/* Used for packet mode */
4833 +#define TIOCPKT_DATA 0
4834 +#define TIOCPKT_FLUSHREAD 1
4835 +#define TIOCPKT_FLUSHWRITE 2
4836 +#define TIOCPKT_STOP 4
4837 +#define TIOCPKT_START 8
4838 +#define TIOCPKT_NOSTOP 16
4839 +#define TIOCPKT_DOSTOP 32
4840 +
4841 +#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
4842 +
4843 +#endif /* _ASM_UBICOM32_IOCTLS_H */
4844 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/io.h linux-2.6.28.10/arch/ubicom32/include/asm/io.h
4845 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/io.h 1970-01-01 02:00:00.000000000 +0200
4846 +++ linux-2.6.28.10/arch/ubicom32/include/asm/io.h 2009-08-06 10:31:02.000000000 +0300
4847 @@ -0,0 +1,313 @@
4848 +/*
4849 + * arch/ubicom32/include/asm/io.h
4850 + * I/O memory accessor functions for Ubicom32 architecture.
4851 + *
4852 + * (C) Copyright 2009, Ubicom, Inc.
4853 + *
4854 + * This file is part of the Ubicom32 Linux Kernel Port.
4855 + *
4856 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
4857 + * it and/or modify it under the terms of the GNU General Public License
4858 + * as published by the Free Software Foundation, either version 2 of the
4859 + * License, or (at your option) any later version.
4860 + *
4861 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
4862 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
4863 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4864 + * the GNU General Public License for more details.
4865 + *
4866 + * You should have received a copy of the GNU General Public License
4867 + * along with the Ubicom32 Linux Kernel Port. If not,
4868 + * see <http://www.gnu.org/licenses/>.
4869 + *
4870 + * Ubicom32 implementation derived from (with many thanks):
4871 + * arch/m68knommu
4872 + * arch/blackfin
4873 + * arch/parisc
4874 + */
4875 +#ifndef _ASM_UBICOM32_IO_H
4876 +#define _ASM_UBICOM32_IO_H
4877 +
4878 +#ifdef __KERNEL__
4879 +#include <linux/string.h>
4880 +#include <linux/compiler.h>
4881 +
4882 +static inline unsigned short _swapw(volatile unsigned short v)
4883 +{
4884 + return ((v << 8) | (v >> 8));
4885 +}
4886 +
4887 +static inline unsigned int _swapl(volatile unsigned long v)
4888 +{
4889 + return ((v << 24) | ((v & 0xff00) << 8) | ((v & 0xff0000) >> 8) | (v >> 24));
4890 +}
4891 +
4892 +#ifndef CONFIG_PCI
4893 +#define readb(addr) \
4894 + ({ unsigned char __v = (*(volatile unsigned char *) (addr)); __v; })
4895 +#define readw(addr) \
4896 + ({ unsigned short __v = (*(volatile unsigned short *) (addr)); __v; })
4897 +#define readl(addr) \
4898 + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
4899 +
4900 +#define writeb(b,addr) (void)((*(volatile unsigned char *) (addr)) = (b))
4901 +#define writew(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b))
4902 +#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
4903 +#else /*CONFIG_PCI */
4904 +
4905 +#define PCI_CPU_REG_BASE (0x00000000UL) /* taking lower 2GB space */
4906 +#define PCI_DEV_REG_BASE (0x80000000UL)
4907 +
4908 +#if PCI_CPU_REG_BASE > PCI_DEV_REG_BASE
4909 +#define IS_PCI_ADDRESS(x) (((unsigned int)(x)&(PCI_CPU_REG_BASE)) == 0)
4910 +#else
4911 +#define IS_PCI_ADDRESS(x) ((unsigned int)(x)&(PCI_DEV_REG_BASE))
4912 +#endif
4913 +
4914 +extern unsigned int ubi32_pci_read_u32(const volatile void __iomem *addr);
4915 +extern unsigned short ubi32_pci_read_u16(const volatile void __iomem *addr);
4916 +extern unsigned char ubi32_pci_read_u8(const volatile void __iomem *addr);
4917 +extern void ubi32_pci_write_u32(unsigned int val, const volatile void __iomem *addr);
4918 +extern void ubi32_pci_write_u16(unsigned short val, const volatile void __iomem *addr);
4919 +extern void ubi32_pci_write_u8(unsigned char val, const volatile void __iomem *addr);
4920 +
4921 +static inline unsigned char readb(const volatile void __iomem *addr)
4922 +{
4923 + if (IS_PCI_ADDRESS(addr))
4924 + return ubi32_pci_read_u8(addr);
4925 + else
4926 + return (unsigned char)(*(volatile unsigned char *)addr);
4927 +}
4928 +static inline unsigned short readw(const volatile void __iomem *addr)
4929 +{
4930 + if (IS_PCI_ADDRESS(addr))
4931 + return ubi32_pci_read_u16(addr);
4932 + else
4933 + return (unsigned short)(*(volatile unsigned short *)addr);
4934 +}
4935 +
4936 +static inline unsigned int readl(const volatile void __iomem *addr)
4937 +{
4938 + if (IS_PCI_ADDRESS(addr))
4939 + return ubi32_pci_read_u32(addr);
4940 + else
4941 + return (unsigned int)(*(volatile unsigned int *)addr);
4942 +}
4943 +
4944 +static inline void writel(unsigned int val, volatile void __iomem *addr)
4945 +{
4946 + if (IS_PCI_ADDRESS(addr))
4947 + ubi32_pci_write_u32(val, addr);
4948 + else
4949 + *(volatile unsigned int *)addr = val;
4950 +}
4951 +
4952 +static inline void writew(unsigned short val, volatile void __iomem *addr)
4953 +{
4954 + if (IS_PCI_ADDRESS(addr))
4955 + ubi32_pci_write_u16(val, addr);
4956 + else
4957 + *(volatile unsigned short *)addr = val;
4958 +}
4959 +
4960 +static inline void writeb(unsigned char val, volatile void __iomem *addr)
4961 +{
4962 + if (IS_PCI_ADDRESS(addr))
4963 + ubi32_pci_write_u8(val, addr);
4964 + else
4965 + *(volatile unsigned char *)addr = val;
4966 +}
4967 +#endif
4968 +
4969 +#define readb_relaxed(addr) readb(addr)
4970 +#define readw_relaxed(addr) readw(addr)
4971 +#define readl_relaxed(addr) readl(addr)
4972 +
4973 +
4974 +#define __raw_readb readb
4975 +#define __raw_readw readw
4976 +#define __raw_readl readl
4977 +#define __raw_writeb writeb
4978 +#define __raw_writew writew
4979 +#define __raw_writel writel
4980 +
4981 +static inline void io_outsb(unsigned int addr, const void *buf, int len)
4982 +{
4983 + volatile unsigned char *ap = (volatile unsigned char *) addr;
4984 + unsigned char *bp = (unsigned char *) buf;
4985 + while (len--)
4986 + *ap = *bp++;
4987 +}
4988 +
4989 +static inline void io_outsw(unsigned int addr, const void *buf, int len)
4990 +{
4991 + volatile unsigned short *ap = (volatile unsigned short *) addr;
4992 + unsigned short *bp = (unsigned short *) buf;
4993 + while (len--)
4994 + *ap = _swapw(*bp++);
4995 +}
4996 +
4997 +static inline void io_outsl(unsigned int addr, const void *buf, int len)
4998 +{
4999 + volatile unsigned int *ap = (volatile unsigned int *) addr;
5000 + unsigned int *bp = (unsigned int *) buf;
5001 + while (len--)
5002 + *ap = _swapl(*bp++);
5003 +}
5004 +
5005 +static inline void io_insb(unsigned int addr, void *buf, int len)
5006 +{
5007 + volatile unsigned char *ap = (volatile unsigned char *) addr;
5008 + unsigned char *bp = (unsigned char *) buf;
5009 + while (len--)
5010 + *bp++ = *ap;
5011 +}
5012 +
5013 +static inline void io_insw(unsigned int addr, void *buf, int len)
5014 +{
5015 + volatile unsigned short *ap = (volatile unsigned short *) addr;
5016 + unsigned short *bp = (unsigned short *) buf;
5017 + while (len--)
5018 + *bp++ = _swapw(*ap);
5019 +}
5020 +
5021 +static inline void io_insl(unsigned int addr, void *buf, int len)
5022 +{
5023 + volatile unsigned int *ap = (volatile unsigned int *) addr;
5024 + unsigned int *bp = (unsigned int *) buf;
5025 + while (len--)
5026 + *bp++ = _swapl(*ap);
5027 +}
5028 +
5029 +#define mmiowb()
5030 +
5031 +/*
5032 + * make the short names macros so specific devices
5033 + * can override them as required
5034 + */
5035 +#ifndef CONFIG_PCI
5036 +#define memset_io(a,b,c) memset((void *)(a),(b),(c))
5037 +#define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c))
5038 +#define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c))
5039 +#else
5040 +extern void memcpy_fromio(void *to, const volatile void __iomem *from, unsigned len);
5041 +extern void memcpy_toio(volatile void __iomem *to, const void *from, unsigned len);
5042 +extern void memset_io(volatile void __iomem *addr, int val, size_t count);
5043 +#endif
5044 +
5045 +#define inb(addr) readb(addr)
5046 +#define inw(addr) readw(addr)
5047 +#define inl(addr) readl(addr)
5048 +#define outb(x,addr) ((void) writeb(x,addr))
5049 +#define outw(x,addr) ((void) writew(x,addr))
5050 +#define outl(x,addr) ((void) writel(x,addr))
5051 +
5052 +#define inb_p(addr) inb(addr)
5053 +#define inw_p(addr) inw(addr)
5054 +#define inl_p(addr) inl(addr)
5055 +#define outb_p(x,addr) outb(x,addr)
5056 +#define outw_p(x,addr) outw(x,addr)
5057 +#define outl_p(x,addr) outl(x,addr)
5058 +
5059 +#define outsb(a,b,l) io_outsb(a,b,l)
5060 +#define outsw(a,b,l) io_outsw(a,b,l)
5061 +#define outsl(a,b,l) io_outsl(a,b,l)
5062 +
5063 +#define insb(a,b,l) io_insb(a,b,l)
5064 +#define insw(a,b,l) io_insw(a,b,l)
5065 +#define insl(a,b,l) io_insl(a,b,l)
5066 +
5067 +#ifndef CONFIG_PCI
5068 +#define ioread8_rep(a,d,c) insb(a,d,c)
5069 +#define ioread16_rep(a,d,c) insw(a,d,c)
5070 +#define ioread32_rep(a,d,c) insl(a,d,c)
5071 +#define iowrite8_rep(a,s,c) outsb(a,s,c)
5072 +#define iowrite16_rep(a,s,c) outsw(a,s,c)
5073 +#define iowrite32_rep(a,s,c) outsl(a,s,c)
5074 +#else
5075 +extern void ioread8_rep(void __iomem *port, void *buf, unsigned long count);
5076 +extern void ioread16_rep(void __iomem *port, void *buf, unsigned long count);
5077 +extern void ioread32_rep(void __iomem *port, void *buf, unsigned long count);
5078 +extern void iowrite8_rep(void __iomem *port, const void *buf, unsigned long count);
5079 +extern void iowrite16_rep(void __iomem *port, const void *buf, unsigned long count);
5080 +extern void iowrite32_rep(void __iomem *port, const void *buf, unsigned long count);
5081 +#endif
5082 +
5083 +
5084 +#ifndef CONFIG_PCI
5085 +#define ioread8(X) readb(X)
5086 +#define ioread16(X) readw(X)
5087 +#define ioread32(X) readl(X)
5088 +#define iowrite8(val,X) writeb(val,X)
5089 +#define iowrite16(val,X) writew(val,X)
5090 +#define iowrite32(val,X) writel(val,X)
5091 +#else /*CONFIG_PCI */
5092 +extern unsigned char ioread8(void __iomem *addr);
5093 +extern unsigned short ioread16(void __iomem *addr);
5094 +extern unsigned int ioread32(void __iomem *addr);
5095 +extern void iowrite8(unsigned char val, void __iomem *addr);
5096 +extern void iowrite16(unsigned short val, void __iomem *addr);
5097 +extern void iowrite32(unsigned int val, void __iomem *addr);
5098 +#endif /* CONFIG_PCI */
5099 +
5100 +#define IO_SPACE_LIMIT 0xffff
5101 +
5102 +/* Values for nocacheflag and cmode */
5103 +#define IOMAP_FULL_CACHING 0
5104 +#define IOMAP_NOCACHE_SER 1
5105 +#define IOMAP_NOCACHE_NONSER 2
5106 +#define IOMAP_WRITETHROUGH 3
5107 +
5108 +extern void *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag);
5109 +extern void __iounmap(void *addr, unsigned long size);
5110 +
5111 +static inline void *ioremap(unsigned long physaddr, unsigned long size)
5112 +{
5113 + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
5114 +}
5115 +static inline void *ioremap_nocache(unsigned long physaddr, unsigned long size)
5116 +{
5117 + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
5118 +}
5119 +static inline void *ioremap_writethrough(unsigned long physaddr, unsigned long size)
5120 +{
5121 + return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
5122 +}
5123 +static inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size)
5124 +{
5125 + return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
5126 +}
5127 +
5128 +extern void iounmap(void *addr);
5129 +
5130 +#define ioport_map(port, nr) ((void __iomem*)(port))
5131 +#define ioport_unmap(addr)
5132 +
5133 +
5134 +/* Pages to physical address... */
5135 +#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
5136 +#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
5137 +
5138 +/*
5139 + * Macros used for converting between virtual and physical mappings.
5140 + */
5141 +#define phys_to_virt(vaddr) ((void *) (vaddr))
5142 +#define virt_to_phys(vaddr) ((unsigned long) (vaddr))
5143 +
5144 +#define virt_to_bus virt_to_phys
5145 +#define bus_to_virt phys_to_virt
5146 +
5147 +/*
5148 + * Convert a physical pointer to a virtual kernel pointer for /dev/mem
5149 + * access
5150 + */
5151 +#define xlate_dev_mem_ptr(p) __va(p)
5152 +
5153 +/*
5154 + * Convert a virtual cached pointer to an uncached pointer
5155 + */
5156 +#define xlate_dev_kmem_ptr(p) p
5157 +
5158 +#endif /* __KERNEL__ */
5159 +
5160 +#endif /* _ASM_UBICOM32_IO_H */
5161 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ip5000-asm.h linux-2.6.28.10/arch/ubicom32/include/asm/ip5000-asm.h
5162 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ip5000-asm.h 1970-01-01 02:00:00.000000000 +0200
5163 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ip5000-asm.h 2009-08-12 13:08:37.000000000 +0300
5164 @@ -0,0 +1,156 @@
5165 +/*
5166 + * arch/ubicom32/include/asm/ip5000-asm.h
5167 + * Instruction macros for the IP5000.
5168 + *
5169 + * (C) Copyright 2009, Ubicom, Inc.
5170 + *
5171 + * This file is part of the Ubicom32 Linux Kernel Port.
5172 + *
5173 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
5174 + * it and/or modify it under the terms of the GNU General Public License
5175 + * as published by the Free Software Foundation, either version 2 of the
5176 + * License, or (at your option) any later version.
5177 + *
5178 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
5179 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
5180 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
5181 + * the GNU General Public License for more details.
5182 + *
5183 + * You should have received a copy of the GNU General Public License
5184 + * along with the Ubicom32 Linux Kernel Port. If not,
5185 + * see <http://www.gnu.org/licenses/>.
5186 + *
5187 + * Ubicom32 implementation derived from (with many thanks):
5188 + * arch/m68knommu
5189 + * arch/blackfin
5190 + * arch/parisc
5191 + */
5192 +
5193 +#ifndef _ASM_UBICOM32_IP5000_ASM_H
5194 +#define _ASM_UBICOM32_IP5000_ASM_H
5195 +
5196 +#if !defined(__LINKER__)
5197 +
5198 +#if defined(__ASSEMBLY__)
5199 +.macro cycles quant
5200 +.if (\quant) == 1
5201 + nop
5202 +.else
5203 +.if (((\quant) + 3) / 8) > 0
5204 +.rept (((\quant) + 3) / 8)
5205 + jmpt.f .+4
5206 +.endr
5207 +.endif
5208 +.if ((((\quant) + 3) % 8) / 4) > 0
5209 + jmpt.t .+4
5210 +.endif
5211 +.endif
5212 +.endm
5213 +#else
5214 +/*
5215 + * Same macro as above just in C inline asm
5216 + */
5217 +asm (" \n\
5218 +.macro cycles quant \n\
5219 +.if (\\quant) == 1 \n\
5220 + nop \n\
5221 +.else \n\
5222 +.if (((\\quant) + 3) / 8) > 0 \n\
5223 +.rept (((\\quant) + 3) / 8) \n\
5224 + jmpt.f .+4 \n\
5225 +.endr \n\
5226 +.endif \n\
5227 +.if ((((\\quant) + 3) % 8) / 4) > 0 \n\
5228 + jmpt.t .+4 \n\
5229 +.endif \n\
5230 +.endif \n\
5231 +.endm \n\
5232 +");
5233 +#endif
5234 +
5235 +
5236 +#if defined(__ASSEMBLY__)
5237 +.macro pipe_flush cyc
5238 + cycles 11 - (\cyc)
5239 +.endm
5240 +#else
5241 +/*
5242 + * Same macro as above just in C inline asm
5243 + */
5244 +asm (" \n\
5245 +.macro pipe_flush cyc \n\
5246 + cycles 11 - (\\cyc) \n\
5247 +.endm \n\
5248 +");
5249 +
5250 +#endif
5251 +
5252 +#if defined(__ASSEMBLY__)
5253 +.macro setcsr_flush cyc
5254 + cycles 5 - (\cyc)
5255 +.endm
5256 +#else
5257 +/*
5258 + * Same macro as above just in C inline asm
5259 + */
5260 +asm (" \n\
5261 +.macro setcsr_flush cyc \n\
5262 + cycles 5 - (\\cyc) \n\
5263 +.endm \n\
5264 +");
5265 +#endif
5266 +
5267 +/*
5268 + * Macros for prefetch (using miss-aligned memory write)
5269 + */
5270 +#if defined(__ASSEMBLY__)
5271 +
5272 +.macro pre_fetch_macro thread_num, Ascratch, Aaddress length
5273 + bclr MT_TRAP_EN, MT_TRAP_EN, #(\thread_num)
5274 + bset \Ascratch, \Aaddress, #0 ; force a miss-aligned address
5275 + jmpt.t .+4 ; delay for both address setup and trap disable
5276 + move.4 (\Ascratch), #0
5277 + .if (\length > 32)
5278 + move.4 32(\Ascratch), #0
5279 + .endif
5280 + .if (\length > 64)
5281 + move.4 64(\Ascratch), #0
5282 + .endif
5283 + .if (\length > 96)
5284 + move.4 96(\Ascratch), #0
5285 + .endif
5286 + .if (\length > 128)
5287 + invalid_instruction ; maximum pre-fetch size is 4 cache lines
5288 + .endif
5289 + bset MT_TRAP_EN, MT_TRAP_EN, #(\thread_num)
5290 +.endm
5291 +
5292 +#else
5293 +/*
5294 + * Same macro as above just in C inline asm
5295 + */
5296 +asm (" \n\
5297 +.macro pre_fetch_macro thread_num, Ascratch, Aaddress length \n\
5298 + bclr MT_TRAP_EN, MT_TRAP_EN, #(\thread_num) \n\
5299 + bset \\Ascratch, \\Aaddress, #0 ; force a miss-aligned address \n\
5300 + jmpt.t .+4 ; delay for both address setup and trap disable \n\
5301 + move.4 (\\Ascratch), #0 \n\
5302 + .if (\\length > 32) \n\
5303 + move.4 32(\\Ascratch), #0 \n\
5304 + .endif \n\
5305 + .if (\\length > 64) \n\
5306 + move.4 64(\\Ascratch), #0 \n\
5307 + .endif \n\
5308 + .if (\\length > 96) \n\
5309 + move.4 96(\\Ascratch), #0 \n\
5310 + .endif \n\
5311 + .if (\\length > 128) \n\
5312 + invalid_instruction ; maximum pre-fetch size is 4 cache lines \n\
5313 + .endif \n\
5314 + bset MT_TRAP_EN, MT_TRAP_EN, #(\\thread_num) \n\
5315 +.endm \n\
5316 +");
5317 +#endif
5318 +
5319 +#endif /* !defined(__LINKER__) */
5320 +#endif /* defined _ASM_UBICOM32_IP5000_ASM_H */
5321 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ip5000.h linux-2.6.28.10/arch/ubicom32/include/asm/ip5000.h
5322 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ip5000.h 1970-01-01 02:00:00.000000000 +0200
5323 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ip5000.h 2009-08-12 13:08:37.000000000 +0300
5324 @@ -0,0 +1,860 @@
5325 +/*
5326 + * arch/ubicom32/include/asm/ip5000.h
5327 + * Specific details for the Ubicom IP5000 processor.
5328 + *
5329 + * (C) Copyright 2009, Ubicom, Inc.
5330 + *
5331 + * This file is part of the Ubicom32 Linux Kernel Port.
5332 + *
5333 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
5334 + * it and/or modify it under the terms of the GNU General Public License
5335 + * as published by the Free Software Foundation, either version 2 of the
5336 + * License, or (at your option) any later version.
5337 + *
5338 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
5339 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
5340 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
5341 + * the GNU General Public License for more details.
5342 + *
5343 + * You should have received a copy of the GNU General Public License
5344 + * along with the Ubicom32 Linux Kernel Port. If not,
5345 + * see <http://www.gnu.org/licenses/>.
5346 + *
5347 + * Ubicom32 implementation derived from (with many thanks):
5348 + * arch/m68knommu
5349 + * arch/blackfin
5350 + * arch/parisc
5351 + */
5352 +
5353 +#ifndef _ASM_UBICOM32_IP5000_H
5354 +#define _ASM_UBICOM32_IP5000_H
5355 +
5356 +/*
5357 + * Inline assembly define
5358 + */
5359 +#define S(arg) #arg
5360 +#define D(arg) S(arg)
5361 +
5362 +/*
5363 + * Assembler include file
5364 + */
5365 +#include <asm/ip5000-asm.h>
5366 +
5367 +/*
5368 + * Timing
5369 + */
5370 +#define JMPT_PENALTY 3
5371 +#define JMPF_PENALTY 7
5372 +#define RET_PENALTY 7
5373 +
5374 +/*
5375 + * Threads
5376 + */
5377 +#if defined(IP5000) || defined(IP5000_REV2)
5378 +#define THREAD_COUNT 10
5379 +#elif defined(IP7000) || defined(IP7000_REV2)
5380 +#define THREAD_COUNT 12
5381 +#else
5382 +#error "Unknown IP5K silicon"
5383 +#endif
5384 +
5385 +/*
5386 + * Arch
5387 + */
5388 +#if defined(IP5000) || defined(IP5000_REV2)
5389 +#define UBICOM32_ARCH_VERSION 3
5390 +#elif defined(IP7000) || defined(IP7000_REV2)
5391 +#define UBICOM32_ARCH_VERSION 4
5392 +#else
5393 +#error "Unknown IP5K silicon"
5394 +#endif
5395 +
5396 +/*
5397 + * Memory Size
5398 + */
5399 +#define OCM_SECTOR_SIZE 0x00008000 /* 32K */
5400 +
5401 +#if defined(IP5000) || defined(IP5000_REV2)
5402 +#define OCMSIZE 0x00030000 /* 192K on-chip RAM for both program and data */
5403 +#elif defined(IP7000) || defined(IP7000_REV2)
5404 +#define OCMSIZE 0x0003C000 /* 240K on-chip RAM for both program and data */
5405 +#else
5406 +#error "Unknown IP5K silicon"
5407 +#endif
5408 +
5409 +#define OCMSTART 0x3ffc0000 /* alias from 0x03000000 for easy jump to/from SDRAM */
5410 +#define OCMEND (OCMSTART + OCMSIZE)
5411 +#define SDRAMSTART 0x40000000
5412 +#define FLASHSTART 0x60000000
5413 +
5414 +/*
5415 + * Registers
5416 + */
5417 +#define ROSR_INT (1 << 0)
5418 +
5419 +/* Interrupts */
5420 +#define INT_CHIP(reg, bit) (((reg) << 5) | (bit))
5421 +#define INT_REG(interrupt) (((interrupt) >> 5) * 4)
5422 +#define INT_SET(interrupt) 0x0114 + INT_REG(interrupt)
5423 +#define INT_CLR(interrupt) 0x0124 + INT_REG(interrupt)
5424 +#define INT_STAT(interrupt) 0x0104 + INT_REG(interrupt)
5425 +#define INT_MASK(interrupt) 0x00C0 + INT_REG(interrupt)
5426 +#define INT_BIT(interrupt) ((interrupt) & 0x1F)
5427 +#define INT_BIT_MASK(interrupt) (1 << INT_BIT(interrupt))
5428 +
5429 +/*
5430 + * The LOCK_INT and THREAD_INT are used to wake up corresponding thread. They are sharing
5431 + * the same set of SW interrupt resource.
5432 + *
5433 + * LOCK_INT(n): One SW INT per NRT thread that can participate lock operation.
5434 + * The threads that can participate lock are application threads and DSR thread.
5435 + * (Lock locks - numbers are hard-coded in lock.h)
5436 + * THREAD_INT(n): One SW INT per HRT thread for wake up trigger.
5437 + */
5438 +#define LOCK_INT(thread) INT_CHIP(0, (thread))
5439 +#define THREAD_INT(thread) INT_CHIP(0, (thread))
5440 +
5441 +/*
5442 + * The SYSTEM_INT and DSR_INT are sharing the same set of SW interrupt resource.
5443 + *
5444 + * SYSTEM_INT(n): One SW INT per NRT threads (application threads) as system queue interrupt,
5445 + * and for DSR as self-trigger interrupt.
5446 + * (The application threads include at least thread 0)
5447 + * DSR_INT(n): One SW INT per HRT thread to request DSR service.
5448 + */
5449 +#define SYSTEM_INT(thread) INT_CHIP(0, THREAD_COUNT + (thread))
5450 +#define DSR_INT(thread) INT_CHIP(0, THREAD_COUNT + (thread))
5451 +
5452 +/* GLOBAL_CTRL */
5453 +#define GLOBAL_CTRL_TRAP_RST_EN (1 << 9)
5454 +#define GLOBAL_CTRL_AERROR_RST_EN (1 << 8)
5455 +#define GLOBAL_CTRL_MT_MIN_DELAY(x) ((x) << 3)
5456 +#define GLOBAL_CTRL_HRT_BANK_SELECT (1 << 2)
5457 +#define GLOBAL_CTRL_INT_EN (1 << 0)
5458 +
5459 +/*
5460 + * HRT Tables
5461 + */
5462 +#define HRT_TABLE0_BASE 0x0800
5463 +#define HRT_TABLE1_BASE 0x0900
5464 +#define HRT_TABLE_SIZE 64
5465 +
5466 +/*
5467 + * Break Point Trap Register
5468 + */
5469 +#define ASYNCERROR_INT INT_CHIP(0, 31)
5470 +#define BREAKPOINT_INT INT_CHIP(1, 31)
5471 +
5472 +/*
5473 + * Port interrupts
5474 + * The non-existing FIFO INTs are mapped to INT2 for the ports.
5475 + */
5476 +#define IO_PORT_PTR_TO_NUM(port) (((port) & 0x0000ffff) >> 12)
5477 +#define RX_FIFO_INT(port) \
5478 + ((IO_PORT_PTR_TO_NUM(port) == 0) ? INT_CHIP(0, 25) : \
5479 + ((IO_PORT_PTR_TO_NUM(port) == 1) ? INT_CHIP(0, 26) : \
5480 + ((IO_PORT_PTR_TO_NUM(port) == 2) ? INT_CHIP(0, 29) : \
5481 + ((IO_PORT_PTR_TO_NUM(port) == 3) ? INT_CHIP(1, 24) : \
5482 + ((IO_PORT_PTR_TO_NUM(port) == 4) ? INT_CHIP(1, 27) : \
5483 + ((IO_PORT_PTR_TO_NUM(port) == 5) ? INT_CHIP(1, 16) : \
5484 + ((IO_PORT_PTR_TO_NUM(port) == 6) ? INT_CHIP(1, 19) : \
5485 + ((IO_PORT_PTR_TO_NUM(port) == 7) ? INT_CHIP(1, 20) : \
5486 + ((IO_PORT_PTR_TO_NUM(port) == 8) ? INT_CHIP(1, 21) : \
5487 + INT_CHIP(1, 15))))))))))
5488 +#define TX_FIFO_INT(port) \
5489 + ((IO_PORT_PTR_TO_NUM(port) == 0) ? INT_CHIP(0, 24) : \
5490 + ((IO_PORT_PTR_TO_NUM(port) == 1) ? INT_CHIP(0, 27) : \
5491 + ((IO_PORT_PTR_TO_NUM(port) == 2) ? INT_CHIP(0, 29) : \
5492 + ((IO_PORT_PTR_TO_NUM(port) == 3) ? INT_CHIP(1, 25) : \
5493 + ((IO_PORT_PTR_TO_NUM(port) == 4) ? INT_CHIP(1, 28) : \
5494 + ((IO_PORT_PTR_TO_NUM(port) == 5) ? INT_CHIP(1, 17) : \
5495 + ((IO_PORT_PTR_TO_NUM(port) == 6) ? INT_CHIP(1, 19) : \
5496 + ((IO_PORT_PTR_TO_NUM(port) == 7) ? INT_CHIP(1, 20) : \
5497 + ((IO_PORT_PTR_TO_NUM(port) == 8) ? INT_CHIP(1, 22) : \
5498 + INT_CHIP(1, 15))))))))))
5499 +#define PORT_OTHER_INT(port) \
5500 + ((IO_PORT_PTR_TO_NUM(port) == 0) ? INT_CHIP(0, 25) : \
5501 + ((IO_PORT_PTR_TO_NUM(port) == 1) ? INT_CHIP(0, 28) : \
5502 + ((IO_PORT_PTR_TO_NUM(port) == 2) ? INT_CHIP(0, 29) : \
5503 + ((IO_PORT_PTR_TO_NUM(port) == 3) ? INT_CHIP(1, 26) : \
5504 + ((IO_PORT_PTR_TO_NUM(port) == 4) ? INT_CHIP(1, 29) : \
5505 + ((IO_PORT_PTR_TO_NUM(port) == 5) ? INT_CHIP(1, 18) : \
5506 + ((IO_PORT_PTR_TO_NUM(port) == 6) ? INT_CHIP(1, 19) : \
5507 + ((IO_PORT_PTR_TO_NUM(port) == 7) ? INT_CHIP(1, 20) : \
5508 + ((IO_PORT_PTR_TO_NUM(port) == 8) ? INT_CHIP(1, 23) : \
5509 + INT_CHIP(1, 15))))))))))
5510 +
5511 +/*
5512 + * On Chip Peripherals Base.
5513 + */
5514 +#define OCP_BASE 0x01000000
5515 +#define OCP_GENERAL 0x000
5516 +#define OCP_TIMERS 0x100
5517 +#define OCP_TRNG 0x200 /* True Random Number Generator Control Reigsters */
5518 +#define OCP_DEBUG 0x300
5519 +#define OCP_SECURITY 0x400
5520 +#define OCP_ICCR 0x500 /* I-Cache Control Registers */
5521 +#define OCP_DCCR 0x600 /* D-Cache Control Registers */
5522 +#define OCP_OCMC 0x700 /* On Chip Memory Control Registers */
5523 +#define OCP_STATISTICS 0x800 /* Statistics Counters */
5524 +#define OCP_MTEST 0x900 /* Memory Test Registers */
5525 +#define OCP_MCFG 0xa00 /* Memory Configuration Registers -- IP7000 only */
5526 +#define OCP_DEBUG_INST 0x000 /* Up to 16M */
5527 +
5528 +/*
5529 + * General Configuration Registers (PLL)
5530 + */
5531 +#define GENERAL_CFG_BASE (OCP_BASE + OCP_GENERAL)
5532 +#define GEN_CLK_CORE_CFG 0x00
5533 +#define GEN_CLK_IO_CFG 0x04
5534 +#define GEN_CLK_DDR_CFG 0x08
5535 +#define GEN_CLK_DDRDS_CFG 0x0c
5536 +#define GEN_CLK_SLIP_CLR 0x10
5537 +#define GEN_CLK_SLIP_START 0x14
5538 +#define GEN_CLK_SERDES_SEL 0x18 /* IP7000 only */
5539 +#define GEN_CLK_DDR_CFG2 0x1c /* IP7000 only */
5540 +#define GEN_DDR_CAL_CTRL 0x30 /* IP5000 only */
5541 +#define GEN_DDR_CAL_STAT 0x34 /* IP5000 only */
5542 +#define GEN_USB_DFT_CTRL 0x38 /* IP5000 only */
5543 +#define GEN_USB_DFT_STAT 0x3c /* IP5000 only */
5544 +#define GEN_USB_PHY_CFG 0x40 /* IP7000 only */
5545 +#define GEN_USB_PHY_TEST 0x44 /* IP7000 only */
5546 +#define GEN_USB_PHY_STAT 0x48 /* IP7000 only */
5547 +#define GEN_SW_RESET 0x80
5548 +#define GEN_RESET_REASON 0x84
5549 +#define GEN_BOND_CFG 0x88
5550 +#define GEN_IO_PU_CFG 0x8c
5551 +#define GEN_MEM_RM_CFG 0x90
5552 +#define GEN_IO_CONFIG 0x94
5553 +
5554 +#define GEN_CLK_PLL_SECURITY_BIT_NO 31
5555 +#define GEN_CLK_PLL_SECURITY (1 << GEN_CLK_PLL_SECURITY_BIT_NO)
5556 +#define GEN_CLK_PLL_ENSAT (1 << 30)
5557 +#define GEN_CLK_PLL_FASTEN (1 << 29)
5558 +#define GEN_CLK_PLL_NR(v) (((v) - 1) << 23)
5559 +#define GEN_CLK_PLL_NF(v) (((v) - 1) << 11)
5560 +#define GEN_CLK_PLL_OD(v) (((v) - 1) << 8)
5561 +#define GEN_CLK_PLL_RESET (1 << 7)
5562 +#define GEN_CLK_PLL_BYPASS (1 << 6)
5563 +#define GEN_CLK_PLL_POWERDOWN (1 << 5)
5564 +#define GEN_CLK_PLL_SELECT (1 << 4)
5565 +
5566 +#define GEN_GET_CLK_PLL_NR(v) ((((v) >> 23) & 0x003f) + 1)
5567 +#define GEN_GET_CLK_PLL_NF(v) ((((v) >> 11) & 0x0fff) + 1)
5568 +#define GEN_GET_CLK_PLL_OD(v) ((((v) >> 8) & 0x7) + 1)
5569 +
5570 +
5571 +#define RESET_FLAG_DST_MEM_ERROR (1 << 18)
5572 +#define RESET_FLAG_SRC1_MEM_ERROR (1 << 17)
5573 +#define RESET_FLAG_WRITE_ADDR (1 << 16)
5574 +#define RESET_FLAG_DST_SYNC_ERROR (1 << 15)
5575 +#define RESET_FLAG_SRC1_SYNC_ERROR (1 << 14)
5576 +#define RESET_FLAG_DST_ALGN_ERROR (1 << 13)
5577 +#define RESET_FLAG_SRC1_ALGN_ERROR (1 << 12)
5578 +#define RESET_FLAG_DST_ADDR_ERROR (1 << 11)
5579 +#define RESET_FLAG_SRC1_ADDR_ERROR (1 << 10)
5580 +#define RESET_FLAG_ILLEGAL_INST (1 << 9)
5581 +#define RESET_FLAG_INST_SYNC_ERROR (1 << 8)
5582 +#define RESET_FLAG_INST_ADDR_ERROR (1 << 7)
5583 +#define RESET_FLAG_DATA_PORT_ERROR (1 << 6)
5584 +#define RESET_FLAG_INST_PORT_ERROR (1 << 5)
5585 +#define RESET_FLAG_SW_RESET (1 << 4)
5586 +#define RESET_FLAG_DEBUG (1 << 3)
5587 +#define RESET_FLAG_WATCHDOG (1 << 2)
5588 +#define RESET_FLAG_POWER_ON (1 << 1)
5589 +#define RESET_FLAG_EXTERNAL (1 << 0)
5590 +
5591 +/*
5592 + * Timer block
5593 + */
5594 +#define TIMER_BASE (OCP_BASE + OCP_TIMERS)
5595 +#define TIMER_MPTVAL 0x00
5596 +#define TIMER_RTCOM 0x04
5597 +#define TIMER_TKEY 0x08
5598 +#define TIMER_WDCOM 0x0c
5599 +#define TIMER_WDCFG 0x10
5600 +#define TIMER_SYSVAL 0x14
5601 +#define TIMER_SYSCOM(tmr) (0x18 + (tmr) * 4)
5602 +#define TIMER_TRN_CFG 0x100
5603 +#define TIMER_TRN 0x104
5604 +
5605 +#define TIMER_COUNT 10
5606 +#define TIMER_INT(tmr) INT_CHIP(1, (tmr))
5607 +#define TIMER_TKEYVAL 0xa1b2c3d4
5608 +#define TIMER_WATCHDOG_DISABLE 0x4d3c2b1a
5609 +#define TIMER_TRN_CFG_ENABLE_OSC 0x00000007
5610 +
5611 +#ifndef __ASSEMBLY__
5612 +/*
5613 + * ubicom32_io_timer
5614 + */
5615 +struct ubicom32_io_timer {
5616 + volatile u32_t mptval;
5617 + volatile u32_t rtcom;
5618 + volatile u32_t tkey;
5619 + volatile u32_t wdcom;
5620 + volatile u32_t wdcfg;
5621 + volatile u32_t sysval;
5622 + volatile u32_t syscom[TIMER_COUNT];
5623 + volatile u32_t reserved[64 - 6 - TIMER_COUNT]; // skip all the way to OCP-TRNG section
5624 + volatile u32_t rsgcfg;
5625 + volatile u32_t trn;
5626 +};
5627 +
5628 +#define UBICOM32_IO_TIMER ((struct ubicom32_io_timer *)TIMER_BASE)
5629 +#endif
5630 +
5631 +#define UBICOM32_VECTOR_TO_TIMER_INDEX(vector) (vector - TIMER_INT(0))
5632 +
5633 +/*
5634 + * OCP-Debug Module (Mailbox)
5635 + */
5636 +#define ISD_MAILBOX_BASE (OCP_BASE + OCP_DEBUG)
5637 +#define ISD_MAILBOX_IN 0x00
5638 +#define ISD_MAILBOX_OUT 0x04
5639 +#define ISD_MAILBOX_STATUS 0x08
5640 +
5641 +#define ISD_MAILBOX_INT INT_CHIP(1, 30)
5642 +
5643 +#define ISD_MAILBOX_STATUS_IN_FULL (1 << 31)
5644 +#define ISD_MAILBOX_STATUS_IN_EMPTY (1 << 30)
5645 +#define ISD_MAILBOX_STATUS_OUT_FULL (1 << 29)
5646 +#define ISD_MAILBOX_STATUS_OUT_EMPTY (1 << 28)
5647 +
5648 +/*
5649 + * OCP-Security
5650 + */
5651 +#define SECURITY_BASE (OCP_BASE + OCP_SECURITY)
5652 +#define SECURITY_BASE_EFFECTIVE_ADDRESS (SECURITY_BASE >> 7) // To load the base address in a single instruction
5653 +#define SECURITY_CTRL 0x00
5654 +#define SECURITY_CTRL_BYTE_OFFSET(x) ((x) << 16)
5655 +#define SECURITY_CTRL_KEY_SIZE(x) ((x) << 8)
5656 +#define SECURITY_CTRL_HASH_ALG_NONE (0 << 4)
5657 +#define SECURITY_CTRL_HASH_ALG_MD5 (1 << 4)
5658 +#define SECURITY_CTRL_HASH_ALG_SHA1 (2 << 4)
5659 +#define SECURITY_CTRL_CBC (1 << 3)
5660 +#define SECURITY_CTRL_CIPHER_ALG_AES (0 << 1)
5661 +#define SECURITY_CTRL_CIPHER_ALG_NONE (1 << 1)
5662 +#define SECURITY_CTRL_CIPHER_ALG_DES (2 << 1)
5663 +#define SECURITY_CTRL_CIPHER_ALG_3DES (3 << 1)
5664 +#define SECURITY_CTRL_ENCIPHER (1 << 0)
5665 +#define SECURITY_CTRL_DECIPHER (0 << 0)
5666 +#define SECURITY_STAT 0x04
5667 +#define SECURITY_STAT_BUSY (1 << 0)
5668 +#define SECURITY_KEY_VALUE(x) (0x10 + (x) * 4)
5669 +#define SECURITY_KEY_IN(x) (0x30 + (x) * 4)
5670 +#define SECURITY_KEY_OUT(x) (0x50 + (x) * 4)
5671 +#define SECURITY_KEY_HASH(x) (0x70 + (x) * 4)
5672 +
5673 +/*
5674 + * OCP-ICCR
5675 + */
5676 +#define ICCR_BASE (OCP_BASE + OCP_ICCR)
5677 +#define ICACHE_TOTAL_SIZE 16384 /* in bytes */
5678 +
5679 +/*
5680 + * OCP-DCCR
5681 + */
5682 +#define DCCR_BASE (OCP_BASE + OCP_DCCR)
5683 +#if defined(IP5000) || defined(IP5000_REV2)
5684 +#define DCACHE_TOTAL_SIZE 8192 /* in bytes */
5685 +#elif defined(IP7000) || defined(IP7000_REV2)
5686 +#define DCACHE_TOTAL_SIZE 16384 /* in bytes */
5687 +#endif
5688 +
5689 +#if defined(IP5000) || defined(IP5000_REV2) || defined(IP7000) || defined(IP7000_REV2)
5690 +#define DCACHE_WRITE_QUEUE_LENGTH 6
5691 +#else
5692 +#error "Unknown IP5K silicon"
5693 +#endif
5694 +
5695 +#define CACHE_LINE_SIZE 32 /* in bytes */
5696 +
5697 +#define CCR_ADDR 0x00
5698 +#define CCR_RDD 0x04
5699 +#define CCR_WRD 0x08
5700 +#define CCR_STAT 0x0c
5701 +#define CCR_CTRL 0x10
5702 +
5703 +#define CCR_STAT_MCBE 0
5704 +#define CCR_STAT_WIDEL 1 /* D-cache only */
5705 +
5706 +#define CCR_CTRL_DONE 0
5707 +#define CCR_CTRL_RESET 2
5708 +#define CCR_CTRL_VALID 3
5709 +#define CCR_CTRL_RD_DATA (1 << 4)
5710 +#define CCR_CTRL_RD_TAG (2 << 4)
5711 +#define CCR_CTRL_WR_DATA (3 << 4)
5712 +#define CCR_CTRL_WR_TAG (4 << 4)
5713 +#define CCR_CTRL_INV_INDEX (5 << 4)
5714 +#define CCR_CTRL_INV_ADDR (6 << 4)
5715 +#define CCR_CTRL_FLUSH_INDEX (7 << 4) /* D-cache only */
5716 +#define CCR_CTRL_FLUSH_INV_INDEX (8 << 4) /* D-cache only */
5717 +#define CCR_CTRL_FLUSH_ADDR (9 << 4) /* D-cache only */
5718 +#define CCR_CTRL_FLUSH_INV_ADDR (10 << 4) /* D-cache only */
5719 +
5720 +/*
5721 + * OCP-OCMC
5722 + */
5723 +#define OCMC_BASE (OCP_BASE + OCP_OCMC)
5724 +#define OCMC_BANK_MASK 0x00
5725 +#define OCMC_BIST_CNTL 0x04 /* IP5000 only */
5726 +#define OCMC_BIST_STAT 0x08 /* IP5000 only */
5727 +
5728 +#define OCMC_BANK_PROG(n) ((1<<(n))-1)
5729 +
5730 +#define OCMC_BIST_WRCK (1 << 7)
5731 +#define OCMC_BIST_RESET (1 << 5)
5732 +#define OCMC_BIST_SMART (1 << 4)
5733 +#define OCMC_BIST_RUN (1 << 3)
5734 +#define OCMC_BIST_REPAIR (1 << 2)
5735 +
5736 +#define OCMC_BIST_READY (1 << 3)
5737 +#define OCMC_BIST_FAIL (1 << 2)
5738 +
5739 +/*
5740 + * OCP-STATISTICS
5741 + */
5742 +#define STATISTICS_BASE (OCP_BASE + OCP_STATISTICS)
5743 +#define STAT_COUNTER_CTRL(n) ((n)*8)
5744 +#define STAT_COUNTER(n) ((n)*8 + 4)
5745 +
5746 +#define STAT_EVENT_MP_INST 0
5747 +#define STAT_EVENT_OCM_ACCESS 4
5748 +#define STAT_EVENT_OCM_REQ 5
5749 +#define STAT_EVENT_IC_REQ_INVAL 13
5750 +#define STAT_EVENT_IC_MISS_INVAL 14
5751 +#define STAT_EVENT_IC_REQ_INVAL_NACK 15
5752 +#define STAT_EVENT_IC_REQ_VAL 16
5753 +#define STAT_EVENT_IC_MISS_VAL 17
5754 +#define STAT_EVENT_IC_REQ_VAL_NACK 18
5755 +#define STAT_EVENT_IC_MISS_Q 19
5756 +#define STAT_EVENT_DC_RD_REQ 20
5757 +#define STAT_EVENT_DC_RD_MISS 21
5758 +#define STAT_EVENT_DC_WR_REQ 22
5759 +#define STAT_EVENT_DC_WR_MISS 23
5760 +#define STAT_EVENT_DC_MISS_Q 24
5761 +#define STAT_EVENT_DC_WB_FULL 25
5762 +#define STAT_EVENT_DC_REQ_NACK 26
5763 +#define STAT_EVENT_DC_CORE_REQ 27
5764 +#define STAT_EVENT_DC_MISS 28
5765 +#define STAT_EVENT_DC_EVICT 29
5766 +#define STAT_EVENT_TRUE 30
5767 +#define STAT_EVENT_FALSE 31
5768 +
5769 +/*
5770 + * OCP_MTEST
5771 + */
5772 +#define MTEST_BASE (OCP_BASE + OCP_MTEST)
5773 +#define MTEST_ADDR 0x00
5774 +#define MTEST_WR 0x04
5775 +#define MTEST_RD 0x08
5776 +#define MTEST_CTRL 0x0c
5777 +
5778 +/*
5779 + * OCP_MCFG (IP7000 only)
5780 + */
5781 +#define MCFG_BASE (OCP_BASE + OCP_MCFG)
5782 +#define MCFG_CTRL 0x00
5783 +#define MCFG_WCFG 0x04
5784 +#define MCFG_RCFG 0x08
5785 +
5786 +/*
5787 + * Port registers
5788 + */
5789 +#define IO_BASE 0x02000000
5790 +#define RA (IO_BASE + 0x00000000)
5791 +#define RB (IO_BASE + 0x00001000)
5792 +#define RC (IO_BASE + 0x00002000)
5793 +#define RD (IO_BASE + 0x00003000)
5794 +#define RE (IO_BASE + 0x00004000)
5795 +#define RF (IO_BASE + 0x00005000)
5796 +#define RG (IO_BASE + 0x00006000)
5797 +#define RH (IO_BASE + 0x00007000)
5798 +#define RI (IO_BASE + 0x00008000)
5799 +#define RJ (IO_BASE + 0x00009000)
5800 +#define RLATCH (IO_BASE + 0x00ff0000) // For latched output only
5801 +#define IO_PORT_BR_OFFSET 0x00000800
5802 +
5803 +/*
5804 + * General I/O Register Map (per port)
5805 + */
5806 +#define IO_FUNC 0x00
5807 +#define IO_GPIO_CTL 0x04
5808 +#define IO_GPIO_OUT 0x08
5809 +#define IO_GPIO_IN 0x0C
5810 +#define IO_INT_STATUS 0x10
5811 +#define IO_INT_MASK 0x14
5812 +#define IO_INT_SET 0x18
5813 +#define IO_INT_CLR 0x1C
5814 +#define IO_TX_FIFO 0x20
5815 +#define IO_TX_FIFO_HI 0x24
5816 +#define IO_RX_FIFO 0x28
5817 +#define IO_RX_FIFO_HI 0x2c
5818 +#define IO_CTL0 0x30
5819 +#define IO_CTL1 0x34
5820 +#define IO_CTL2 0x38
5821 +#define IO_STATUS0 0x3c
5822 +#define IO_STATUS1 0x40
5823 +#define IO_STATUS2 0x44
5824 +#define IO_FIFO_WATER 0x48
5825 +#define IO_FIFO_LEVEL 0x4c
5826 +#define IO_GPIO_MASK 0x50
5827 +
5828 +#define IO_FUNC_FUNCTION_RESET(func) ((1 << ((func) - 1)) << 4) /* Function 0 doesn't need reset */
5829 +#define IO_FUNC_RX_FIFO (1 << 3)
5830 +#define IO_FUNC_SELECT(func) ((func) << 0)
5831 +
5832 +/*
5833 + * External interrupt pins.
5834 + */
5835 +#define EXT_INT_IO_BIT(pin) ((pin) + 5) // Interrupt pin number -> I/O INT bit
5836 +#define EXT_INT_RISING_EDGE(pin) (0x2 << (2*(pin) + 7))
5837 +#define EXT_INT_FALLING_EDGE(pin) (0x1 << (2*(pin) + 7))
5838 +
5839 +/*
5840 + * Flash
5841 + */
5842 +#define IO_XFL_BASE RA
5843 +
5844 +#define IO_XFL_INT_START (1 << 16)
5845 +#define IO_XFL_INT_ERR (1 << 8)
5846 +#define IO_XFL_INT_DONE (1 << 0)
5847 +
5848 +#define IO_XFL_CTL0_MASK (0xffe07fff)
5849 +#define IO_XFL_CTL0_RD_CMD(cmd) (((cmd) & 0xff) << 24)
5850 +#define IO_XFL_CTL0_RD_DUMMY(n) (((n) & 0x7) << 21)
5851 +#define IO_XFL_CTL0_CLK_WIDTH(core_cycles) ((((core_cycles) + 1) & 0x7e) << 8) /* must be even number */
5852 +#define IO_XFL_CTL0_CE_WAIT(spi_cycles) (((spi_cycles) & 0x3f) << 2)
5853 +#define IO_XFL_CTL0_MCB_LOCK (1 << 1)
5854 +#define IO_XFL_CTL0_ENABLE (1 << 0)
5855 +#define IO_XFL_CTL0_FAST_VALUE(div, wait) (IO_XFL_CTL0_RD_CMD(0xb) | IO_XFL_CTL0_RD_DUMMY(1) | IO_XFL_CTL0_CLK_WIDTH(div) | IO_XFL_CTL0_CE_WAIT(wait) | IO_XFL_CTL0_ENABLE)
5856 +#define IO_XFL_CTL0_VALUE(div, wait) (IO_XFL_CTL0_RD_CMD(3) | IO_XFL_CTL0_CLK_WIDTH(div) | IO_XFL_CTL0_CE_WAIT(wait) | IO_XFL_CTL0_ENABLE)
5857 +
5858 +#define IO_XFL_CTL1_MASK (0xc0003fff)
5859 +#define IO_XFL_CTL1_FC_INST(inst) (((inst) & 0x3) << 30)
5860 +#define IO_XFL_CTL1_FC_DATA(n) (((n) & 0x3ff) << 4)
5861 +#define IO_XFL_CTL1_FC_DUMMY(n) (((n) & 0x7) << 1)
5862 +#define IO_XFL_CTL1_FC_ADDR (1 << 0)
5863 +
5864 +#define IO_XFL_CTL2_FC_CMD(cmd) (((cmd) & 0xff) << 24)
5865 +#define IO_XFL_CTL2_FC_ADDR(addr) ((addr) & 0x00ffffff) /* Only up to 24 bits */
5866 +
5867 +#define IO_XFL_STATUS0_MCB_ACTIVE (1 << 0)
5868 +#define IO_XFL_STATUS0_IOPCS_ACTIVE (1 << 1)
5869 +
5870 +/*
5871 + * SDRAM
5872 + */
5873 +#define IO_SDRAM_DATA_BASE RG
5874 +#define IO_SDRAM_CNTL_BASE RH
5875 +
5876 +#define IO_SDRAM_CTRL0_EN_REF (1 << 0)
5877 +
5878 +/*
5879 + * Port function code (common fucntion codes for all I/O ports)
5880 + */
5881 +#define IO_PORTX_FUNC_GPIO 0x00
5882 +#define IO_PORTX_FUNC_XFL 0x01
5883 +#define IO_PORTX_FUNC_PCI 0x01
5884 +#define IO_PORTX_FUNC_SERDES 0x01
5885 +#define IO_PORTX_FUNC_GMII 0x01
5886 +#define IO_PORTX_FUNC_DDR 0x01
5887 +#define IO_PORTX_FUNC_PCIX 0x01
5888 +#define IO_PORTX_FUNC_USB2_0 0x01
5889 +#define IO_PORTX_FUNC_GPIO_INT_CLK 0x02
5890 +#define IO_PORTX_FUNC_PLIO 0x02
5891 +#define IO_PORTX_FUNC_GPIO_INT 0x03
5892 +#define IO_PORTX_FUNC_MII 0x03
5893 +
5894 +/*
5895 + * Port 0
5896 + */
5897 +#define IO_PORT0_FUNC_GPIO IO_PORTX_FUNC_GPIO
5898 +#define IO_PORT0_FUNC_XFL_INT_CLK IO_PORTX_FUNC_XFL // Default mode after reset
5899 +#define IO_PORT0_FUNC_GPIO_INT_CLK IO_PORTX_FUNC_GPIO_INT_CLK
5900 +#define IO_PORT0_FUNC_GPIO_INT IO_PORTX_FUNC_GPIO_INT
5901 +
5902 +/*
5903 + * Port 1
5904 + */
5905 +#define IO_PORT1_FUNC_GPIO IO_PORTX_FUNC_GPIO
5906 +#define IO_PORT1_FUNC_PCI IO_PORTX_FUNC_PCI // PCI control
5907 +#define IO_PORT1_FUNC_MII IO_PORTX_FUNC_MII // port 4 MII extension
5908 +
5909 +/*
5910 + * Port 2
5911 + */
5912 +#define IO_PORT2_FUNC_GPIO IO_PORTX_FUNC_GPIO
5913 +#define IO_PORT2_FUNC_PCI IO_PORTX_FUNC_PCI // PCI data I/O
5914 +#define IO_PORT2_FUNC_PLIO IO_PORTX_FUNC_PLIO // Extended LM
5915 +
5916 +/*
5917 + * Port 3
5918 + */
5919 +#define IO_PORT3_FUNC_GPIO IO_PORTX_FUNC_GPIO
5920 +#define IO_PORT3_FUNC_SERDES IO_PORTX_FUNC_SERDES
5921 +#define IO_PORT3_FUNC_PLIO IO_PORTX_FUNC_PLIO
5922 +
5923 +/*
5924 + * Port 4
5925 + */
5926 +#define IO_PORT4_FUNC_GPIO IO_PORTX_FUNC_GPIO
5927 +#define IO_PORT4_FUNC_SERDES IO_PORTX_FUNC_SERDES
5928 +#define IO_PORT4_FUNC_PLIO IO_PORTX_FUNC_PLIO // Extended LM
5929 +#define IO_PORT4_FUNC_MII IO_PORTX_FUNC_MII
5930 +
5931 +/*
5932 + * Port 5
5933 + */
5934 +#define IO_PORT5_FUNC_GPIO IO_PORTX_FUNC_GPIO
5935 +#define IO_PORT5_FUNC_GMII IO_PORTX_FUNC_GMII
5936 +
5937 +/*
5938 + * Port 6
5939 + */
5940 +#define IO_PORT6_FUNC_GPIO IO_PORTX_FUNC_GPIO
5941 +#define IO_PORT6_FUNC_DDR IO_PORTX_FUNC_DDR
5942 +
5943 +/*
5944 + * Port 7
5945 + */
5946 +#define IO_PORT7_FUNC_GPIO IO_PORTX_FUNC_GPIO
5947 +#define IO_PORT7_FUNC_DDR IO_PORTX_FUNC_DDR
5948 +
5949 +/*
5950 + * Port 8
5951 + */
5952 +#define IO_PORT8_FUNC_GPIO IO_PORTX_FUNC_GPIO
5953 +#define IO_PORT8_FUNC_PCIX IO_PORTX_FUNC_PCIX
5954 +#define IO_PORT8_FUNC_PLIO IO_PORTX_FUNC_PLIO // Extended LM
5955 +#define IO_PORT8_FUNC_MII IO_PORTX_FUNC_MII // port 4 MII extension
5956 +
5957 +/*
5958 + * Port 9
5959 + */
5960 +#define IO_PORT9_FUNC_USB2_0 IO_PORTX_FUNC_USB2_0
5961 +
5962 +/*
5963 + * FIFO
5964 + */
5965 +#define IO_PORTX_INT_FIFO_TX_RESET (1 << 31)
5966 +#define IO_PORTX_INT_FIFO_RX_RESET (1 << 30)
5967 +#define IO_PORTX_INT_FIFO_TX_UF (1 << 15)
5968 +#define IO_PORTX_INT_FIFO_TX_WM (1 << 14)
5969 +#define IO_PORTX_INT_FIFO_RX_OF (1 << 13)
5970 +#define IO_PORTX_INT_FIFO_RX_WM (1 << 12)
5971 +
5972 +#define IO_PORTX_FUNC_FIFO_TX_WM(n) ((n) << 16)
5973 +#define IO_PORTX_FUNC_FIFO_RX_WM(n) ((n) << 0)
5974 +
5975 +/*
5976 + * MII
5977 + */
5978 +#define IO_PORTX_INT_MII_TX_ERR_SEND (1 << 18)
5979 +#define IO_PORTX_INT_MII_TX_HALT (1 << 17)
5980 +#define IO_PORTX_INT_MII_TX_START (1 << 16)
5981 +#define IO_PORTX_INT_MII_THRESHOLD (1 << 8)
5982 +#define IO_PORTX_INT_MII_RX_EOP (1 << 7)
5983 +#define IO_PORTX_INT_MII_RX_SFD (1 << 6)
5984 +#define IO_PORTX_INT_MII_RX_ERR (1 << 5)
5985 +#define IO_PORTX_INT_MII_TX_EOP (1 << 4)
5986 +#define IO_PORTX_INT_MII_COL (1 << 3)
5987 +#define IO_PORTX_INT_MII_CRS (1 << 2)
5988 +#define IO_PORTX_INT_MII_ODD_NIB_ERR (1 << 1)
5989 +#define IO_PORTX_INT_MII_FALSE_CARRIER (1 << 0)
5990 +
5991 +/*
5992 + * SerDes
5993 + */
5994 +#define IO_PORTX_INT_SERDES_TXBUF_VALID (1 << 16)
5995 +#define IO_PORTX_INT_SERDES_RXERR (1 << 7)
5996 +#define IO_PORTX_INT_SERDES_RXEOP (1 << 6)
5997 +#define IO_PORTX_INT_SERDES_SYND (1 << 5)
5998 +#define IO_PORTX_INT_SERDES_TXBE (1 << 4)
5999 +#define IO_PORTX_INT_SERDES_TXEOP (1 << 3)
6000 +#define IO_PORTX_INT_SERDES_SXLP (1 << 2)
6001 +#define IO_PORTX_INT_SERDES_RXBF (1 << 1)
6002 +#define IO_PORTX_INT_SERDES_RXCRS (1 << 0)
6003 +
6004 +#ifndef __ASSEMBLY__
6005 +struct ubicom32_io_port {
6006 + volatile u32_t function;
6007 + volatile u32_t gpio_ctl;
6008 + volatile u32_t gpio_out;
6009 + volatile u32_t gpio_in;
6010 + volatile u32_t int_status;
6011 + volatile u32_t int_mask;
6012 + volatile u32_t int_set;
6013 + volatile u32_t int_clr;
6014 + volatile u32_t tx_fifo;
6015 + volatile u32_t tx_fifo_hi;
6016 + volatile u32_t rx_fifo;
6017 + volatile u32_t rx_fifo_hi;
6018 + volatile u32_t ctl0;
6019 + volatile u32_t ctl1;
6020 + volatile u32_t ctl2;
6021 + volatile u32_t status0;
6022 + volatile u32_t status1;
6023 + volatile u32_t status2;
6024 + volatile u32_t fifo_watermark;
6025 + volatile u32_t fifo_level;
6026 + volatile u32_t gpio_mask;
6027 +};
6028 +
6029 +#define UBICOM32_IO_PORT(port) ((struct ubicom32_io_port *)((port)))
6030 +#endif
6031 +
6032 +#ifndef __ASSEMBLY__
6033 +/*
6034 + * ubicom32_set_interrupt()
6035 + */
6036 +extern inline void ubicom32_set_interrupt(u8_t interrupt)
6037 +{
6038 + u32_t ibit = INT_BIT_MASK(interrupt);
6039 +
6040 + if (INT_REG(interrupt) == INT_REG(INT_CHIP(0, 0))) {
6041 + asm volatile (
6042 + "move.4 "D(INT_SET(INT_CHIP(0, 0)))", %0\n\t"
6043 + :
6044 + : "r" (ibit)
6045 + );
6046 +
6047 + return;
6048 + }
6049 +
6050 + asm volatile (
6051 + "move.4 "D(INT_SET(INT_CHIP(1, 0)))", %0\n\t"
6052 + :
6053 + : "r" (ibit)
6054 + );
6055 +}
6056 +
6057 +/*
6058 + * ubicom32_clear_interrupt()
6059 + */
6060 +extern inline void ubicom32_clear_interrupt(u8_t interrupt)
6061 +{
6062 + u32_t ibit = INT_BIT_MASK(interrupt);
6063 +
6064 + if (INT_REG(interrupt) == INT_REG(INT_CHIP(0, 0))) {
6065 + asm volatile (
6066 + "move.4 "D(INT_CLR(INT_CHIP(0, 0)))", %0\n\t"
6067 + :
6068 + : "r" (ibit)
6069 + );
6070 +
6071 + return;
6072 + }
6073 +
6074 + asm volatile (
6075 + "move.4 "D(INT_CLR(INT_CHIP(1, 0)))", %0\n\t"
6076 + :
6077 + : "r" (ibit)
6078 + );
6079 +}
6080 +
6081 +/*
6082 + * ubicom32_enable_interrupt()
6083 + */
6084 +extern inline void ubicom32_enable_interrupt(u8_t interrupt)
6085 +{
6086 + u32_t ibit = INT_BIT_MASK(interrupt);
6087 +
6088 + if (INT_REG(interrupt) == INT_REG(INT_CHIP(0, 0))) {
6089 + asm volatile (
6090 + "or.4 "D(INT_MASK(INT_CHIP(0, 0)))", "D(INT_MASK(INT_CHIP(0, 0)))", %0\n\t"
6091 + :
6092 + : "d" (ibit)
6093 + );
6094 +
6095 + return;
6096 + }
6097 +
6098 + asm volatile (
6099 + "or.4 "D(INT_MASK(INT_CHIP(1, 0)))", "D(INT_MASK(INT_CHIP(1, 0)))", %0\n\t"
6100 + :
6101 + : "d" (ibit)
6102 + );
6103 +}
6104 +
6105 +/*
6106 + * ubicom32_disable_interrupt()
6107 + */
6108 +extern inline void ubicom32_disable_interrupt(u8_t interrupt)
6109 +{
6110 + u32_t ibit = ~INT_BIT_MASK(interrupt);
6111 +
6112 + if (INT_REG(interrupt) == INT_REG(INT_CHIP(0, 0))) {
6113 + asm volatile (
6114 + "and.4 "D(INT_MASK(INT_CHIP(0, 0)))", "D(INT_MASK(INT_CHIP(0, 0)))", %0\n\t"
6115 + :
6116 + : "d" (ibit)
6117 + );
6118 +
6119 + return;
6120 + }
6121 +
6122 + asm volatile (
6123 + "and.4 "D(INT_MASK(INT_CHIP(1, 0)))", "D(INT_MASK(INT_CHIP(1, 0)))", %0\n\t"
6124 + :
6125 + : "d" (ibit)
6126 + );
6127 +}
6128 +
6129 +/*
6130 + * ubicom32_enable_global_interrupts()
6131 + */
6132 +extern inline void ubicom32_enable_global_interrupts(void)
6133 +{
6134 + asm volatile(
6135 + "bset GLOBAL_CTRL, GLOBAL_CTRL, #%bit("D(GLOBAL_CTRL_INT_EN)")"
6136 + );
6137 +}
6138 +
6139 +/*
6140 + * ubicom32_disable_global_interrupts()
6141 + */
6142 +extern inline void ubicom32_disable_global_interrupts(void)
6143 +{
6144 + asm volatile(
6145 + "bclr GLOBAL_CTRL, GLOBAL_CTRL, #%bit("D(GLOBAL_CTRL_INT_EN)")"
6146 + );
6147 +}
6148 +
6149 +/*
6150 + * ubicom32_get_reset_reason()
6151 + */
6152 +extern inline u32_t ubicom32_get_reset_reason(void)
6153 +{
6154 + return *(u32_t *)(GENERAL_CFG_BASE + GEN_RESET_REASON);
6155 +}
6156 +
6157 +/*
6158 + * ubicom32_read_reg()
6159 + */
6160 +extern inline u32_t ubicom32_read_reg(volatile void *reg)
6161 +{
6162 + u32_t v;
6163 + asm volatile (
6164 + "move.4 %[dest], %[src] \n\t"
6165 + : [dest] "=r" (v)
6166 + : [src] "m" (*(u32_t *)reg)
6167 + );
6168 + return v;
6169 +}
6170 +
6171 +/*
6172 + * ubicom32_write_reg()
6173 + */
6174 +extern inline void ubicom32_write_reg(volatile void *reg, u32_t v)
6175 +{
6176 + asm volatile (
6177 + "move.4 %[dest], %[src] \n\t"
6178 + :
6179 + : [src] "r" (v), [dest] "m" (*(u32_t *)reg)
6180 + );
6181 +}
6182 +
6183 +#endif /* __ASSEMBLY__ */
6184 +#endif /* _ASM_UBICOM32_IP5000_H */
6185 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ipcbuf.h linux-2.6.28.10/arch/ubicom32/include/asm/ipcbuf.h
6186 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ipcbuf.h 1970-01-01 02:00:00.000000000 +0200
6187 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ipcbuf.h 2009-08-06 10:31:02.000000000 +0300
6188 @@ -0,0 +1,55 @@
6189 +/*
6190 + * arch/ubicom32/include/asm/ipcbuf.h
6191 + * Definition of ipc64_perm struct for Ubicom32 architecture.
6192 + *
6193 + * (C) Copyright 2009, Ubicom, Inc.
6194 + *
6195 + * This file is part of the Ubicom32 Linux Kernel Port.
6196 + *
6197 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6198 + * it and/or modify it under the terms of the GNU General Public License
6199 + * as published by the Free Software Foundation, either version 2 of the
6200 + * License, or (at your option) any later version.
6201 + *
6202 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6203 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6204 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6205 + * the GNU General Public License for more details.
6206 + *
6207 + * You should have received a copy of the GNU General Public License
6208 + * along with the Ubicom32 Linux Kernel Port. If not,
6209 + * see <http://www.gnu.org/licenses/>.
6210 + *
6211 + * Ubicom32 implementation derived from (with many thanks):
6212 + * arch/m68knommu
6213 + * arch/blackfin
6214 + * arch/parisc
6215 + */
6216 +#ifndef _ASM_UBICOM32_IPCBUF_H
6217 +#define _ASM_UBICOM32_IPCBUF_H
6218 +
6219 +/*
6220 + * The user_ipc_perm structure for m68k architecture.
6221 + * Note extra padding because this structure is passed back and forth
6222 + * between kernel and user space.
6223 + *
6224 + * Pad space is left for:
6225 + * - 32-bit mode_t and seq
6226 + * - 2 miscellaneous 32-bit values
6227 + */
6228 +struct ipc64_perm
6229 +{
6230 + __kernel_key_t key;
6231 + __kernel_uid32_t uid;
6232 + __kernel_gid32_t gid;
6233 + __kernel_uid32_t cuid;
6234 + __kernel_gid32_t cgid;
6235 + __kernel_mode_t mode;
6236 + unsigned short __pad1;
6237 + unsigned short seq;
6238 + unsigned short __pad2;
6239 + unsigned long __unused1;
6240 + unsigned long __unused2;
6241 +};
6242 +
6243 +#endif /* _ASM_UBICOM32_IPCBUF_H */
6244 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/irqflags.h linux-2.6.28.10/arch/ubicom32/include/asm/irqflags.h
6245 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/irqflags.h 1970-01-01 02:00:00.000000000 +0200
6246 +++ linux-2.6.28.10/arch/ubicom32/include/asm/irqflags.h 2009-08-06 10:31:02.000000000 +0300
6247 @@ -0,0 +1,94 @@
6248 +/*
6249 + * arch/ubicom32/include/asm/irqflags.h
6250 + * Raw implementation of local IRQ functions.
6251 + *
6252 + * (C) Copyright 2009, Ubicom, Inc.
6253 + *
6254 + * This file is part of the Ubicom32 Linux Kernel Port.
6255 + *
6256 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6257 + * it and/or modify it under the terms of the GNU General Public License
6258 + * as published by the Free Software Foundation, either version 2 of the
6259 + * License, or (at your option) any later version.
6260 + *
6261 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6262 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6263 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6264 + * the GNU General Public License for more details.
6265 + *
6266 + * You should have received a copy of the GNU General Public License
6267 + * along with the Ubicom32 Linux Kernel Port. If not,
6268 + * see <http://www.gnu.org/licenses/>.
6269 + *
6270 + * Ubicom32 implementation derived from (with many thanks):
6271 + * arch/m68knommu
6272 + * arch/blackfin
6273 + * arch/parisc
6274 + */
6275 +#ifndef _ASM_UBICOM32_IRQFLAGS_H
6276 +#define _ASM_UBICOM32_IRQFLAGS_H
6277 +
6278 +#include <linux/thread_info.h>
6279 +#include <asm/ubicom32-common.h>
6280 +#include <asm/smp.h>
6281 +#include <asm/ldsr.h>
6282 +
6283 +#if defined(CONFIG_PREEMPT)
6284 +#error Not supported by Ubicom32 irq handling, yet!
6285 +#endif
6286 +
6287 +/*
6288 + * raw_local_irq_enable()
6289 + * Enable interrupts for this thread.
6290 + */
6291 +static inline void raw_local_irq_enable(void)
6292 +{
6293 + ldsr_local_irq_enable();
6294 +}
6295 +
6296 +/*
6297 + * raw_local_irq_disable()
6298 + * Disable interrupts for this thread.
6299 + */
6300 +static inline void raw_local_irq_disable(void)
6301 +{
6302 + ldsr_local_irq_disable();
6303 +}
6304 +
6305 +/*
6306 + * raw_local_save_flags()
6307 + * Get the current IRQ state.
6308 + */
6309 +#define raw_local_save_flags(flags) \
6310 +do { \
6311 + (flags) = ldsr_local_irq_is_disabled(); \
6312 +} while (0)
6313 +
6314 +/*
6315 + * raw_local_irq_save()
6316 + * Save the current interrupt state and disable interrupts.
6317 + */
6318 +#define raw_local_irq_save(flags) \
6319 +do { \
6320 + (flags) = ldsr_local_irq_save(); \
6321 +} while (0)
6322 +
6323 +/*
6324 + * raw_local_irq_restore()
6325 + * Restore the IRQ state back to flags.
6326 + */
6327 +static inline void raw_local_irq_restore(unsigned long flags)
6328 +{
6329 + ldsr_local_irq_restore(flags);
6330 +}
6331 +
6332 +/*
6333 + * raw_irqs_disabled_flags()
6334 + * Return true if the flags indicate that IRQ(s) are disabled.
6335 + */
6336 +static inline int raw_irqs_disabled_flags(unsigned long flags)
6337 +{
6338 + return (flags);
6339 +}
6340 +
6341 +#endif /* _ASM_UBICOM32_IRQFLAGS_H */
6342 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/irq.h linux-2.6.28.10/arch/ubicom32/include/asm/irq.h
6343 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/irq.h 1970-01-01 02:00:00.000000000 +0200
6344 +++ linux-2.6.28.10/arch/ubicom32/include/asm/irq.h 2009-08-06 10:31:02.000000000 +0300
6345 @@ -0,0 +1,45 @@
6346 +/*
6347 + * arch/ubicom32/include/asm/irq.h
6348 + * IRQ definitions for Ubicom32 architecture.
6349 + *
6350 + * (C) Copyright 2009, Ubicom, Inc.
6351 + *
6352 + * This file is part of the Ubicom32 Linux Kernel Port.
6353 + *
6354 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6355 + * it and/or modify it under the terms of the GNU General Public License
6356 + * as published by the Free Software Foundation, either version 2 of the
6357 + * License, or (at your option) any later version.
6358 + *
6359 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6360 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6361 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6362 + * the GNU General Public License for more details.
6363 + *
6364 + * You should have received a copy of the GNU General Public License
6365 + * along with the Ubicom32 Linux Kernel Port. If not,
6366 + * see <http://www.gnu.org/licenses/>.
6367 + *
6368 + * Ubicom32 implementation derived from (with many thanks):
6369 + * arch/m68knommu
6370 + * arch/blackfin
6371 + * arch/parisc
6372 + */
6373 +#ifndef _ASM_UBICOM32_IRQ_H
6374 +#define _ASM_UBICOM32_IRQ_H
6375 +
6376 +#include <asm/irqflags.h>
6377 +
6378 +/*
6379 + * We setup the IRQS to cover the full range of interrupt registers in
6380 + * processor.
6381 + */
6382 +#define NR_IRQS 64
6383 +
6384 +#define irq_canonicalize(irq) (irq)
6385 +
6386 +extern int irq_soft_alloc(unsigned int *soft);
6387 +extern void ack_bad_irq(unsigned int irq);
6388 +extern void do_IRQ(int irq, struct pt_regs *fp);
6389 +
6390 +#endif /* _ASM_UBICOM32_IRQ_H */
6391 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/irq_regs.h linux-2.6.28.10/arch/ubicom32/include/asm/irq_regs.h
6392 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/irq_regs.h 1970-01-01 02:00:00.000000000 +0200
6393 +++ linux-2.6.28.10/arch/ubicom32/include/asm/irq_regs.h 2009-08-06 10:31:02.000000000 +0300
6394 @@ -0,0 +1,33 @@
6395 +/*
6396 + * arch/ubicom32/include/asm/irq_regs.h
6397 + * Generic irq_regs.h for Ubicom32 architecture.
6398 + *
6399 + * (C) Copyright 2009, Ubicom, Inc.
6400 + *
6401 + * This file is part of the Ubicom32 Linux Kernel Port.
6402 + *
6403 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6404 + * it and/or modify it under the terms of the GNU General Public License
6405 + * as published by the Free Software Foundation, either version 2 of the
6406 + * License, or (at your option) any later version.
6407 + *
6408 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6409 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6410 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6411 + * the GNU General Public License for more details.
6412 + *
6413 + * You should have received a copy of the GNU General Public License
6414 + * along with the Ubicom32 Linux Kernel Port. If not,
6415 + * see <http://www.gnu.org/licenses/>.
6416 + *
6417 + * Ubicom32 implementation derived from (with many thanks):
6418 + * arch/m68knommu
6419 + * arch/blackfin
6420 + * arch/parisc
6421 + */
6422 +#ifndef _ASM_UBICOM32_IRQ_REGS_H
6423 +#define _ASM_UBICOM32_IRQ_REGS_H
6424 +
6425 +#include <asm-generic/irq_regs.h>
6426 +
6427 +#endif /* _ASM_UBICOM32_IRQ_REGS_H */
6428 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/Kbuild linux-2.6.28.10/arch/ubicom32/include/asm/Kbuild
6429 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/Kbuild 1970-01-01 02:00:00.000000000 +0200
6430 +++ linux-2.6.28.10/arch/ubicom32/include/asm/Kbuild 2009-08-06 10:31:02.000000000 +0300
6431 @@ -0,0 +1 @@
6432 +include include/asm-generic/Kbuild.asm
6433 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/kdebug.h linux-2.6.28.10/arch/ubicom32/include/asm/kdebug.h
6434 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/kdebug.h 1970-01-01 02:00:00.000000000 +0200
6435 +++ linux-2.6.28.10/arch/ubicom32/include/asm/kdebug.h 2009-08-06 10:31:02.000000000 +0300
6436 @@ -0,0 +1,33 @@
6437 +/*
6438 + * arch/ubicom32/include/asm/kdebug.h
6439 + * Generic kdebug.h for Ubicom32 architecture.
6440 + *
6441 + * (C) Copyright 2009, Ubicom, Inc.
6442 + *
6443 + * This file is part of the Ubicom32 Linux Kernel Port.
6444 + *
6445 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6446 + * it and/or modify it under the terms of the GNU General Public License
6447 + * as published by the Free Software Foundation, either version 2 of the
6448 + * License, or (at your option) any later version.
6449 + *
6450 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6451 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6452 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6453 + * the GNU General Public License for more details.
6454 + *
6455 + * You should have received a copy of the GNU General Public License
6456 + * along with the Ubicom32 Linux Kernel Port. If not,
6457 + * see <http://www.gnu.org/licenses/>.
6458 + *
6459 + * Ubicom32 implementation derived from (with many thanks):
6460 + * arch/m68knommu
6461 + * arch/blackfin
6462 + * arch/parisc
6463 + */
6464 +#ifndef _ASM_UBICOM32_KDEBUG_H
6465 +#define _ASM_UBICOM32_KDEBUG_H
6466 +
6467 +#include <asm-generic/kdebug.h>
6468 +
6469 +#endif /* _ASM_UBICOM32_KDEBUG_H */
6470 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/kmap_types.h linux-2.6.28.10/arch/ubicom32/include/asm/kmap_types.h
6471 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/kmap_types.h 1970-01-01 02:00:00.000000000 +0200
6472 +++ linux-2.6.28.10/arch/ubicom32/include/asm/kmap_types.h 2009-08-06 10:31:02.000000000 +0300
6473 @@ -0,0 +1,48 @@
6474 +/*
6475 + * arch/ubicom32/include/asm/kmap_types.h
6476 + * Definition of km_type's for Ubicom32 architecture.
6477 + *
6478 + * (C) Copyright 2009, Ubicom, Inc.
6479 + *
6480 + * This file is part of the Ubicom32 Linux Kernel Port.
6481 + *
6482 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6483 + * it and/or modify it under the terms of the GNU General Public License
6484 + * as published by the Free Software Foundation, either version 2 of the
6485 + * License, or (at your option) any later version.
6486 + *
6487 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6488 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6489 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6490 + * the GNU General Public License for more details.
6491 + *
6492 + * You should have received a copy of the GNU General Public License
6493 + * along with the Ubicom32 Linux Kernel Port. If not,
6494 + * see <http://www.gnu.org/licenses/>.
6495 + *
6496 + * Ubicom32 implementation derived from (with many thanks):
6497 + * arch/m68knommu
6498 + * arch/blackfin
6499 + * arch/parisc
6500 + */
6501 +#ifndef _ASM_UBICOM32_KMAP_TYPES_H
6502 +#define _ASM_UBICOM32_KMAP_TYPES_H
6503 +
6504 +enum km_type {
6505 + KM_BOUNCE_READ,
6506 + KM_SKB_SUNRPC_DATA,
6507 + KM_SKB_DATA_SOFTIRQ,
6508 + KM_USER0,
6509 + KM_USER1,
6510 + KM_BIO_SRC_IRQ,
6511 + KM_BIO_DST_IRQ,
6512 + KM_PTE0,
6513 + KM_PTE1,
6514 + KM_IRQ0,
6515 + KM_IRQ1,
6516 + KM_SOFTIRQ0,
6517 + KM_SOFTIRQ1,
6518 + KM_TYPE_NR
6519 +};
6520 +
6521 +#endif /* _ASM_UBICOM32_KMAP_TYPES_H */
6522 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ldsr.h linux-2.6.28.10/arch/ubicom32/include/asm/ldsr.h
6523 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ldsr.h 1970-01-01 02:00:00.000000000 +0200
6524 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ldsr.h 2009-08-06 10:31:02.000000000 +0300
6525 @@ -0,0 +1,186 @@
6526 +/*
6527 + * arch/ubicom32/include/asm/ldsr.h
6528 + * Ubicom32 LDSR interface definitions.
6529 + *
6530 + * (C) Copyright 2009, Ubicom, Inc.
6531 + *
6532 + * This file is part of the Ubicom32 Linux Kernel Port.
6533 + *
6534 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6535 + * it and/or modify it under the terms of the GNU General Public License
6536 + * as published by the Free Software Foundation, either version 2 of the
6537 + * License, or (at your option) any later version.
6538 + *
6539 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6540 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6541 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6542 + * the GNU General Public License for more details.
6543 + *
6544 + * You should have received a copy of the GNU General Public License
6545 + * along with the Ubicom32 Linux Kernel Port. If not,
6546 + * see <http://www.gnu.org/licenses/>.
6547 + *
6548 + * Ubicom32 implementation derived from (with many thanks):
6549 + * arch/m68knommu
6550 + * arch/blackfin
6551 + * arch/parisc
6552 + */
6553 +#ifndef _ASM_UBICOM32_LDSR_H
6554 +#define _ASM_UBICOM32_LDSR_H
6555 +
6556 +#include <asm/ubicom32-common.h>
6557 +#include <asm/types.h>
6558 +#include <asm/thread.h>
6559 +
6560 +extern unsigned int ldsr_soft_irq_mask;
6561 +
6562 +/*
6563 + * ldsr_local_irq_is_disabled()
6564 + * Test if interrupts are disabled for this thread?
6565 + */
6566 +static inline int ldsr_local_irq_is_disabled(void)
6567 +{
6568 + int ret;
6569 + thread_t self = thread_get_self();
6570 + unsigned int mask = (1 << self);
6571 +
6572 + asm volatile (
6573 + " and.4 %0, scratchpad1, %1 \n\t"
6574 + : "=r" (ret)
6575 + : "d" (mask)
6576 + : "cc"
6577 + );
6578 +
6579 + /*
6580 + * We return a simple 1 == disabled, 0 == enabled
6581 + * losing which tid this is for, because Linux
6582 + * can restore interrupts on a different thread.
6583 + */
6584 + return ret >> self;
6585 +}
6586 +
6587 +/*
6588 + * ldsr_local_irq_save()
6589 + * Get the current interrupt state and disable interrupts.
6590 + */
6591 +static inline unsigned int ldsr_local_irq_save(void)
6592 +{
6593 + int ret;
6594 + thread_t self = thread_get_self();
6595 + unsigned int mask = (1 << self);
6596 +
6597 + /*
6598 + * Ensure the compiler can not optimize out the code
6599 + * (volatile) and that it does not "cache" values around
6600 + * the interrupt state change (memory). This ensures
6601 + * that interrupt changes are treated as a critical
6602 + * section.
6603 + */
6604 + asm volatile (
6605 + " and.4 %0, scratchpad1, %1 \n\t"
6606 + " or.4 scratchpad1, scratchpad1, %1 \n\t"
6607 + : "=&r" (ret)
6608 + : "d" (mask)
6609 + : "cc", "memory"
6610 + );
6611 +
6612 + /*
6613 + * We return a simple 1 == disabled, 0 == enabled
6614 + * losing which tid this is for, because Linux
6615 + * can restore interrupts on a different thread.
6616 + */
6617 + return ret >> self;
6618 +}
6619 +
6620 +/*
6621 + * ldsr_local_irq_restore()
6622 + * Restore this cpu's interrupt enable/disable state.
6623 + *
6624 + * Note: flags is either 0 or 1.
6625 + */
6626 +static inline void ldsr_local_irq_restore(unsigned int flags)
6627 +{
6628 + unsigned int temp;
6629 + thread_t self = thread_get_self();
6630 + unsigned int mask = (1 << self);
6631 + flags = (flags << self);
6632 +
6633 + /*
6634 + * Ensure the compiler can not optimize out the code
6635 + * (volatile) and that it does not "cache" values around
6636 + * the interrupt state change (memory). This ensures
6637 + * that interrupt changes are treated as a critical
6638 + * section.
6639 + *
6640 + * Atomic change to our bit in scratchpad1 without
6641 + * causing any temporary glitch in the value and
6642 + * without effecting other values. Also this uses
6643 + * no branches so no penalties.
6644 + */
6645 + asm volatile (
6646 + " xor.4 %0, scratchpad1, %1 \n\t"
6647 + " and.4 %0, %2, %0 \n\t"
6648 + " xor.4 scratchpad1, scratchpad1, %0 \n\t"
6649 + " move.4 int_set0, %3 \n\t"
6650 + : "=&d"(temp)
6651 + : "d"(flags), "r"(mask), "r"(ldsr_soft_irq_mask)
6652 + : "cc", "memory"
6653 + );
6654 +}
6655 +
6656 +/*
6657 + * ldsr_local_irq_disable_interrupt()
6658 + * Disable ints for this thread.
6659 + */
6660 +static inline void ldsr_local_irq_disable(void)
6661 +{
6662 + unsigned int mask = (1 << thread_get_self());
6663 +
6664 + /*
6665 + * Ensure the compiler can not optimize out the code
6666 + * (volatile) and that it does not "cache" values around
6667 + * the interrupt state change (memory). This ensures
6668 + * that interrupt changes are treated as a critical
6669 + * section.
6670 + */
6671 + asm volatile (
6672 + " or.4 scratchpad1, scratchpad1, %0 \n\t"
6673 + :
6674 + : "d" (mask)
6675 + : "cc", "memory"
6676 + );
6677 +}
6678 +
6679 +/*
6680 + * ldsr_local_irq_enable_interrupt
6681 + * Enable ints for this thread.
6682 + */
6683 +static inline void ldsr_local_irq_enable(void)
6684 +{
6685 + unsigned int mask = (1 << thread_get_self());
6686 +
6687 + /*
6688 + * Ensure the compiler can not optimize out the code
6689 + * (volatile) and that it does not "cache" values around
6690 + * the interrupt state change (memory). This ensures
6691 + * that interrupt changes are treated as a critical
6692 + * section.
6693 + */
6694 + asm volatile (
6695 + " and.4 scratchpad1, scratchpad1, %0 \n\t"
6696 + " move.4 int_set0, %1 \n\t"
6697 + :
6698 + : "d" (~mask), "r" (ldsr_soft_irq_mask)
6699 + : "cc", "memory"
6700 + );
6701 +}
6702 +
6703 +extern void ldsr_init(void);
6704 +extern void ldsr_set_trap_irq(unsigned int irq);
6705 +extern void ldsr_mask_vector(unsigned int vector);
6706 +extern void ldsr_unmask_vector(unsigned int vector);
6707 +extern void ldsr_enable_vector(unsigned int vector);
6708 +extern void ldsr_disable_vector(unsigned int vector);
6709 +extern thread_t ldsr_get_threadid(void);
6710 +
6711 +#endif /* _ASM_UBICOM32_LDSR_H */
6712 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/linkage.h linux-2.6.28.10/arch/ubicom32/include/asm/linkage.h
6713 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/linkage.h 1970-01-01 02:00:00.000000000 +0200
6714 +++ linux-2.6.28.10/arch/ubicom32/include/asm/linkage.h 2009-08-06 10:31:02.000000000 +0300
6715 @@ -0,0 +1,34 @@
6716 +/*
6717 + * arch/ubicom32/include/asm/linkage.h
6718 + * Definition of Ubicom32 architecture specific linkage types.
6719 + *
6720 + * (C) Copyright 2009, Ubicom, Inc.
6721 + *
6722 + * This file is part of the Ubicom32 Linux Kernel Port.
6723 + *
6724 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6725 + * it and/or modify it under the terms of the GNU General Public License
6726 + * as published by the Free Software Foundation, either version 2 of the
6727 + * License, or (at your option) any later version.
6728 + *
6729 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6730 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6731 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6732 + * the GNU General Public License for more details.
6733 + *
6734 + * You should have received a copy of the GNU General Public License
6735 + * along with the Ubicom32 Linux Kernel Port. If not,
6736 + * see <http://www.gnu.org/licenses/>.
6737 + *
6738 + * Ubicom32 implementation derived from (with many thanks):
6739 + * arch/m68knommu
6740 + * arch/blackfin
6741 + * arch/parisc
6742 + */
6743 +#ifndef _ASM_UBICOM32_LINKAGE_H
6744 +#define _ASM_UBICOM32_LINKAGE_H
6745 +
6746 +#define __ocm_text __section(.ocm_text)
6747 +#define __ocm_data __section(.ocm_data)
6748 +
6749 +#endif /* _ASM_UBICOM32_LINKAGE_H */
6750 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/local.h linux-2.6.28.10/arch/ubicom32/include/asm/local.h
6751 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/local.h 1970-01-01 02:00:00.000000000 +0200
6752 +++ linux-2.6.28.10/arch/ubicom32/include/asm/local.h 2009-08-06 10:31:02.000000000 +0300
6753 @@ -0,0 +1,33 @@
6754 +/*
6755 + * arch/ubicom32/include/asm/local.h
6756 + * Generic local.h for Ubicom32 architecture.
6757 + *
6758 + * (C) Copyright 2009, Ubicom, Inc.
6759 + *
6760 + * This file is part of the Ubicom32 Linux Kernel Port.
6761 + *
6762 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6763 + * it and/or modify it under the terms of the GNU General Public License
6764 + * as published by the Free Software Foundation, either version 2 of the
6765 + * License, or (at your option) any later version.
6766 + *
6767 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6768 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6769 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6770 + * the GNU General Public License for more details.
6771 + *
6772 + * You should have received a copy of the GNU General Public License
6773 + * along with the Ubicom32 Linux Kernel Port. If not,
6774 + * see <http://www.gnu.org/licenses/>.
6775 + *
6776 + * Ubicom32 implementation derived from (with many thanks):
6777 + * arch/m68knommu
6778 + * arch/blackfin
6779 + * arch/parisc
6780 + */
6781 +#ifndef _ASM_UBICOM32_LOCAL_H
6782 +#define _ASM_UBICOM32_LOCAL_H
6783 +
6784 +#include <asm-generic/local.h>
6785 +
6786 +#endif /* _ASM_UBICOM32_LOCAL_H */
6787 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/machdep.h linux-2.6.28.10/arch/ubicom32/include/asm/machdep.h
6788 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/machdep.h 1970-01-01 02:00:00.000000000 +0200
6789 +++ linux-2.6.28.10/arch/ubicom32/include/asm/machdep.h 2009-08-06 10:31:02.000000000 +0300
6790 @@ -0,0 +1,43 @@
6791 +/*
6792 + * arch/ubicom32/include/asm/machdep.h
6793 + * Machine dependent utility routines.
6794 + *
6795 + * (C) Copyright 2009, Ubicom, Inc.
6796 + *
6797 + * This file is part of the Ubicom32 Linux Kernel Port.
6798 + *
6799 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6800 + * it and/or modify it under the terms of the GNU General Public License
6801 + * as published by the Free Software Foundation, either version 2 of the
6802 + * License, or (at your option) any later version.
6803 + *
6804 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6805 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6806 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6807 + * the GNU General Public License for more details.
6808 + *
6809 + * You should have received a copy of the GNU General Public License
6810 + * along with the Ubicom32 Linux Kernel Port. If not,
6811 + * see <http://www.gnu.org/licenses/>.
6812 + *
6813 + * Ubicom32 implementation derived from (with many thanks):
6814 + * arch/m68knommu
6815 + * arch/blackfin
6816 + * arch/parisc
6817 + */
6818 +#ifndef _ASM_UBICOM32_MACHDEP_H
6819 +#define _ASM_UBICOM32_MACHDEP_H
6820 +
6821 +#include <linux/interrupt.h>
6822 +
6823 +/* Hardware clock functions */
6824 +extern unsigned long hw_timer_offset(void);
6825 +
6826 +/* machine dependent power off functions */
6827 +extern void (*mach_reset)(void);
6828 +extern void (*mach_halt)(void);
6829 +extern void (*mach_power_off)(void);
6830 +
6831 +extern void config_BSP(char *command, int len);
6832 +
6833 +#endif /* _ASM_UBICOM32_MACHDEP_H */
6834 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mc146818rtc.h linux-2.6.28.10/arch/ubicom32/include/asm/mc146818rtc.h
6835 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mc146818rtc.h 1970-01-01 02:00:00.000000000 +0200
6836 +++ linux-2.6.28.10/arch/ubicom32/include/asm/mc146818rtc.h 2009-08-06 10:31:02.000000000 +0300
6837 @@ -0,0 +1,36 @@
6838 +/*
6839 + * arch/ubicom32/include/asm/mc146818rtc.h
6840 + * Generic mc146818rtc.h for Ubicom32 architecture.
6841 + *
6842 + * (C) Copyright 2009, Ubicom, Inc.
6843 + *
6844 + * This file is part of the Ubicom32 Linux Kernel Port.
6845 + *
6846 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6847 + * it and/or modify it under the terms of the GNU General Public License
6848 + * as published by the Free Software Foundation, either version 2 of the
6849 + * License, or (at your option) any later version.
6850 + *
6851 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6852 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6853 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6854 + * the GNU General Public License for more details.
6855 + *
6856 + * You should have received a copy of the GNU General Public License
6857 + * along with the Ubicom32 Linux Kernel Port. If not,
6858 + * see <http://www.gnu.org/licenses/>.
6859 + *
6860 + * Ubicom32 implementation derived from (with many thanks):
6861 + * arch/m68knommu
6862 + * arch/blackfin
6863 + * arch/parisc
6864 + */
6865 +/*
6866 + * Machine dependent access functions for RTC registers.
6867 + */
6868 +#ifndef _ASM_UBICOM32_MC146818RTC_H
6869 +#define _ASM_UBICOM32_MC146818RTC_H
6870 +
6871 +/* empty include file to satisfy the include in genrtc.c/ide-geometry.c */
6872 +
6873 +#endif /* _ASM_UBICOM32_MC146818RTC_H */
6874 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mman.h linux-2.6.28.10/arch/ubicom32/include/asm/mman.h
6875 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mman.h 1970-01-01 02:00:00.000000000 +0200
6876 +++ linux-2.6.28.10/arch/ubicom32/include/asm/mman.h 2009-08-06 10:31:02.000000000 +0300
6877 @@ -0,0 +1,44 @@
6878 +/*
6879 + * arch/ubicom32/include/asm/mman.h
6880 + * Memory mapping definitions for Ubicom32 architecture.
6881 + *
6882 + * (C) Copyright 2009, Ubicom, Inc.
6883 + *
6884 + * This file is part of the Ubicom32 Linux Kernel Port.
6885 + *
6886 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6887 + * it and/or modify it under the terms of the GNU General Public License
6888 + * as published by the Free Software Foundation, either version 2 of the
6889 + * License, or (at your option) any later version.
6890 + *
6891 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6892 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6893 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6894 + * the GNU General Public License for more details.
6895 + *
6896 + * You should have received a copy of the GNU General Public License
6897 + * along with the Ubicom32 Linux Kernel Port. If not,
6898 + * see <http://www.gnu.org/licenses/>.
6899 + *
6900 + * Ubicom32 implementation derived from (with many thanks):
6901 + * arch/m68knommu
6902 + * arch/blackfin
6903 + * arch/parisc
6904 + */
6905 +#ifndef _ASM_UBICOM32_MMAN_H
6906 +#define _ASM_UBICOM32_MMAN_H
6907 +
6908 +#include <asm-generic/mman.h>
6909 +
6910 +#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
6911 +#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
6912 +#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
6913 +#define MAP_LOCKED 0x2000 /* pages are locked */
6914 +#define MAP_NORESERVE 0x4000 /* don't check for reservations */
6915 +#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */
6916 +#define MAP_NONBLOCK 0x10000 /* do not block on IO */
6917 +
6918 +#define MCL_CURRENT 1 /* lock all current mappings */
6919 +#define MCL_FUTURE 2 /* lock all future mappings */
6920 +
6921 +#endif /* _ASM_UBICOM32_MMAN_H */
6922 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mmu_context.h linux-2.6.28.10/arch/ubicom32/include/asm/mmu_context.h
6923 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mmu_context.h 1970-01-01 02:00:00.000000000 +0200
6924 +++ linux-2.6.28.10/arch/ubicom32/include/asm/mmu_context.h 2009-08-06 10:31:02.000000000 +0300
6925 @@ -0,0 +1,60 @@
6926 +/*
6927 + * arch/ubicom32/include/asm/mmu_context.h
6928 + * MMU context definitions for Ubicom32 architecture.
6929 + *
6930 + * (C) Copyright 2009, Ubicom, Inc.
6931 + * Copyright (C) 2004, Microtronix Datacom Ltd., All rights reserved.
6932 + *
6933 + * This file is part of the Ubicom32 Linux Kernel Port.
6934 + *
6935 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
6936 + * it and/or modify it under the terms of the GNU General Public License
6937 + * as published by the Free Software Foundation, either version 2 of the
6938 + * License, or (at your option) any later version.
6939 + *
6940 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
6941 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
6942 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
6943 + * the GNU General Public License for more details.
6944 + *
6945 + * You should have received a copy of the GNU General Public License
6946 + * along with the Ubicom32 Linux Kernel Port. If not,
6947 + * see <http://www.gnu.org/licenses/>.
6948 + *
6949 + * Ubicom32 implementation derived from (with many thanks):
6950 + * arch/m68knommu
6951 + * arch/blackfin
6952 + * arch/parisc
6953 + */
6954 +
6955 +#ifndef _ASM_UBICOM32_MMU_CONTEXT_H
6956 +#define _ASM_UBICOM32_MMU_CONTEXT_H
6957 +
6958 +#include <asm/setup.h>
6959 +#include <asm/page.h>
6960 +#include <asm/pgalloc.h>
6961 +
6962 +static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
6963 +{
6964 +}
6965 +
6966 +extern inline int
6967 +init_new_context(struct task_struct *tsk, struct mm_struct *mm)
6968 +{
6969 + // mm->context = virt_to_phys(mm->pgd);
6970 + return(0);
6971 +}
6972 +
6973 +#define destroy_context(mm) do { } while(0)
6974 +
6975 +static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk)
6976 +{
6977 +}
6978 +
6979 +#define deactivate_mm(tsk,mm) do { } while (0)
6980 +
6981 +extern inline void activate_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm)
6982 +{
6983 +}
6984 +
6985 +#endif /* _ASM_UBICOM32_MMU_CONTEXT_H */
6986 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mmu.h linux-2.6.28.10/arch/ubicom32/include/asm/mmu.h
6987 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mmu.h 1970-01-01 02:00:00.000000000 +0200
6988 +++ linux-2.6.28.10/arch/ubicom32/include/asm/mmu.h 2009-08-06 10:31:02.000000000 +0300
6989 @@ -0,0 +1,41 @@
6990 +/*
6991 + * arch/ubicom32/include/asm/mmu.h
6992 + * Definition of mm_context_t struct for Ubicom32 architecture.
6993 + *
6994 + * (C) Copyright 2009, Ubicom, Inc.
6995 + * Copyright (C) 2002, David McCullough <davidm@snapgear.com>
6996 + *
6997 + * This file is part of the Ubicom32 Linux Kernel Port.
6998 + *
6999 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7000 + * it and/or modify it under the terms of the GNU General Public License
7001 + * as published by the Free Software Foundation, either version 2 of the
7002 + * License, or (at your option) any later version.
7003 + *
7004 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7005 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7006 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7007 + * the GNU General Public License for more details.
7008 + *
7009 + * You should have received a copy of the GNU General Public License
7010 + * along with the Ubicom32 Linux Kernel Port. If not,
7011 + * see <http://www.gnu.org/licenses/>.
7012 + *
7013 + * Ubicom32 implementation derived from (with many thanks):
7014 + * arch/m68knommu
7015 + * arch/blackfin
7016 + * arch/parisc
7017 + */
7018 +#ifndef _ASM_UBICOM32_MMU_H
7019 +#define _ASM_UBICOM32_MMU_H
7020 +
7021 +typedef struct {
7022 + struct vm_list_struct *vmlist;
7023 + unsigned long end_brk;
7024 +#ifdef CONFIG_BINFMT_ELF_FDPIC
7025 + unsigned long exec_fdpic_loadmap;
7026 + unsigned long interp_fdpic_loadmap;
7027 +#endif
7028 +} mm_context_t;
7029 +
7030 +#endif /* _ASM_UBICOM32_MMU_H */
7031 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/module.h linux-2.6.28.10/arch/ubicom32/include/asm/module.h
7032 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/module.h 1970-01-01 02:00:00.000000000 +0200
7033 +++ linux-2.6.28.10/arch/ubicom32/include/asm/module.h 2009-08-12 13:08:37.000000000 +0300
7034 @@ -0,0 +1,44 @@
7035 +/*
7036 + * arch/ubicom32/include/asm/module.h
7037 + * Ubicom32 architecture specific module definitions.
7038 + *
7039 + * (C) Copyright 2009, Ubicom, Inc.
7040 + *
7041 + * This file is part of the Ubicom32 Linux Kernel Port.
7042 + *
7043 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7044 + * it and/or modify it under the terms of the GNU General Public License
7045 + * as published by the Free Software Foundation, either version 2 of the
7046 + * License, or (at your option) any later version.
7047 + *
7048 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7049 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7050 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7051 + * the GNU General Public License for more details.
7052 + *
7053 + * You should have received a copy of the GNU General Public License
7054 + * along with the Ubicom32 Linux Kernel Port. If not,
7055 + * see <http://www.gnu.org/licenses/>.
7056 + *
7057 + * Ubicom32 implementation derived from (with many thanks):
7058 + * arch/m68knommu
7059 + * arch/blackfin
7060 + * arch/parisc
7061 + */
7062 +#ifndef _ASM_UBICOM32_MODULE_H
7063 +#define _ASM_UBICOM32_MODULE_H
7064 +
7065 +struct mod_arch_specific {
7066 + void *ocm_inst;
7067 + int ocm_inst_size;
7068 +};
7069 +
7070 +#define Elf_Shdr Elf32_Shdr
7071 +#define Elf_Sym Elf32_Sym
7072 +#define Elf_Ehdr Elf32_Ehdr
7073 +
7074 +#define ARCH_PROC_MODULES_EXTRA(m,mod) \
7075 + seq_printf(m, " OCM(%d bytes @ 0x%p)", \
7076 + (mod)->arch.ocm_inst_size, (mod)->arch.ocm_inst)
7077 +
7078 +#endif /* _ASM_UBICOM32_MODULE_H */
7079 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/msgbuf.h linux-2.6.28.10/arch/ubicom32/include/asm/msgbuf.h
7080 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/msgbuf.h 1970-01-01 02:00:00.000000000 +0200
7081 +++ linux-2.6.28.10/arch/ubicom32/include/asm/msgbuf.h 2009-08-06 10:31:02.000000000 +0300
7082 @@ -0,0 +1,58 @@
7083 +/*
7084 + * arch/ubicom32/include/asm/msgbuf.h
7085 + * Definition of msqid64_ds struct for Ubicom32 architecture.
7086 + *
7087 + * (C) Copyright 2009, Ubicom, Inc.
7088 + *
7089 + * This file is part of the Ubicom32 Linux Kernel Port.
7090 + *
7091 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7092 + * it and/or modify it under the terms of the GNU General Public License
7093 + * as published by the Free Software Foundation, either version 2 of the
7094 + * License, or (at your option) any later version.
7095 + *
7096 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7097 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7098 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7099 + * the GNU General Public License for more details.
7100 + *
7101 + * You should have received a copy of the GNU General Public License
7102 + * along with the Ubicom32 Linux Kernel Port. If not,
7103 + * see <http://www.gnu.org/licenses/>.
7104 + *
7105 + * Ubicom32 implementation derived from (with many thanks):
7106 + * arch/m68knommu
7107 + * arch/blackfin
7108 + * arch/parisc
7109 + */
7110 +#ifndef _ASM_UBICOM32_MSGBUF_H
7111 +#define _ASM_UBICOM32_MSGBUF_H
7112 +
7113 +/*
7114 + * The msqid64_ds structure for ubicom32 architecture.
7115 + * Note extra padding because this structure is passed back and forth
7116 + * between kernel and user space.
7117 + *
7118 + * Pad space is left for:
7119 + * - 64-bit time_t to solve y2038 problem
7120 + * - 2 miscellaneous 32-bit values
7121 + */
7122 +
7123 +struct msqid64_ds {
7124 + struct ipc64_perm msg_perm;
7125 + __kernel_time_t msg_stime; /* last msgsnd time */
7126 + unsigned long __unused1;
7127 + __kernel_time_t msg_rtime; /* last msgrcv time */
7128 + unsigned long __unused2;
7129 + __kernel_time_t msg_ctime; /* last change time */
7130 + unsigned long __unused3;
7131 + unsigned long msg_cbytes; /* current number of bytes on queue */
7132 + unsigned long msg_qnum; /* number of messages in queue */
7133 + unsigned long msg_qbytes; /* max number of bytes on queue */
7134 + __kernel_pid_t msg_lspid; /* pid of last msgsnd */
7135 + __kernel_pid_t msg_lrpid; /* last receive pid */
7136 + unsigned long __unused4;
7137 + unsigned long __unused5;
7138 +};
7139 +
7140 +#endif /* _ASM_UBICOM32_MSGBUF_H */
7141 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mutex.h linux-2.6.28.10/arch/ubicom32/include/asm/mutex.h
7142 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mutex.h 1970-01-01 02:00:00.000000000 +0200
7143 +++ linux-2.6.28.10/arch/ubicom32/include/asm/mutex.h 2009-08-06 10:31:02.000000000 +0300
7144 @@ -0,0 +1,41 @@
7145 +/*
7146 + * arch/ubicom32/include/asm/mutex.h
7147 + * Generic mutex.h for Ubicom32 architecture.
7148 + *
7149 + * (C) Copyright 2009, Ubicom, Inc.
7150 + *
7151 + * This file is part of the Ubicom32 Linux Kernel Port.
7152 + *
7153 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7154 + * it and/or modify it under the terms of the GNU General Public License
7155 + * as published by the Free Software Foundation, either version 2 of the
7156 + * License, or (at your option) any later version.
7157 + *
7158 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7159 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7160 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7161 + * the GNU General Public License for more details.
7162 + *
7163 + * You should have received a copy of the GNU General Public License
7164 + * along with the Ubicom32 Linux Kernel Port. If not,
7165 + * see <http://www.gnu.org/licenses/>.
7166 + *
7167 + * Ubicom32 implementation derived from (with many thanks):
7168 + * arch/m68knommu
7169 + * arch/blackfin
7170 + * arch/parisc
7171 + */
7172 +/*
7173 + * Pull in the generic implementation for the mutex fastpath.
7174 + *
7175 + * TODO: implement optimized primitives instead, or leave the generic
7176 + * implementation in place, or pick the atomic_xchg() based generic
7177 + * implementation. (see asm-generic/mutex-xchg.h for details)
7178 + */
7179 +
7180 +#ifndef _ASM_UBICOM32_MUTEX_H
7181 +#define _ASM_UBICOM32_MUTEX_H
7182 +
7183 +#include <asm-generic/mutex-dec.h>
7184 +
7185 +#endif /* _ASM_UBICOM32_MUTEX_H */
7186 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/namei.h linux-2.6.28.10/arch/ubicom32/include/asm/namei.h
7187 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/namei.h 1970-01-01 02:00:00.000000000 +0200
7188 +++ linux-2.6.28.10/arch/ubicom32/include/asm/namei.h 2009-08-06 10:31:02.000000000 +0300
7189 @@ -0,0 +1,38 @@
7190 +/*
7191 + * arch/ubicom32/include/asm/namei.h
7192 + * Definition of __emul_prefix() for Ubicom32 architecture.
7193 + *
7194 + * (C) Copyright 2009, Ubicom, Inc.
7195 + *
7196 + * This file is part of the Ubicom32 Linux Kernel Port.
7197 + *
7198 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7199 + * it and/or modify it under the terms of the GNU General Public License
7200 + * as published by the Free Software Foundation, either version 2 of the
7201 + * License, or (at your option) any later version.
7202 + *
7203 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7204 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7205 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7206 + * the GNU General Public License for more details.
7207 + *
7208 + * You should have received a copy of the GNU General Public License
7209 + * along with the Ubicom32 Linux Kernel Port. If not,
7210 + * see <http://www.gnu.org/licenses/>.
7211 + *
7212 + * Ubicom32 implementation derived from (with many thanks):
7213 + * arch/m68knommu
7214 + * arch/blackfin
7215 + * arch/parisc
7216 + */
7217 +#ifndef _ASM_UBICOM32_NAMEI_H
7218 +#define _ASM_UBICOM32_NAMEI_H
7219 +
7220 +/* This dummy routine maybe changed to something useful
7221 + * for /usr/gnemul/ emulation stuff.
7222 + * Look at asm-sparc/namei.h for details.
7223 + */
7224 +
7225 +#define __emul_prefix() NULL
7226 +
7227 +#endif /* _ASM_UBICOM32_NAMEI_H */
7228 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm-alloc.h linux-2.6.28.10/arch/ubicom32/include/asm/ocm-alloc.h
7229 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm-alloc.h 1970-01-01 02:00:00.000000000 +0200
7230 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ocm-alloc.h 2009-08-12 13:08:37.000000000 +0300
7231 @@ -0,0 +1,36 @@
7232 +/*
7233 + * arch/ubicom32/include/asm/ocm-alloc.h
7234 + * Ubicom32 architecture specific ocm definitions.
7235 + *
7236 + * (C) Copyright 2009, Ubicom, Inc.
7237 + *
7238 + * This file is part of the Ubicom32 Linux Kernel Port.
7239 + *
7240 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7241 + * it and/or modify it under the terms of the GNU General Public License
7242 + * as published by the Free Software Foundation, either version 2 of the
7243 + * License, or (at your option) any later version.
7244 + *
7245 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7246 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7247 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7248 + * the GNU General Public License for more details.
7249 + *
7250 + * You should have received a copy of the GNU General Public License
7251 + * along with the Ubicom32 Linux Kernel Port. If not,
7252 + * see <http://www.gnu.org/licenses/>.
7253 + *
7254 + * Ubicom32 implementation derived from (with many thanks):
7255 + * arch/m68knommu
7256 + * arch/blackfin
7257 + * arch/parisc
7258 + */
7259 +#ifndef _ASM_UBICOM32_OCM_ALLOC_H
7260 +#define _ASM_UBICOM32_OCM_ALLOC_H
7261 +
7262 +
7263 +extern void *ocm_inst_alloc(size_t size, pid_t pid);
7264 +extern int ocm_free(const void *ptr);
7265 +extern int ocm_inst_free(const void *ptr);
7266 +
7267 +#endif /* _ASM_UBICOM32_OCM_ALLOC_H */
7268 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm_size.h linux-2.6.28.10/arch/ubicom32/include/asm/ocm_size.h
7269 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm_size.h 1970-01-01 02:00:00.000000000 +0200
7270 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ocm_size.h 2009-08-06 11:15:34.000000000 +0300
7271 @@ -0,0 +1,2 @@
7272 +#define APP_OCM_CODE_SIZE (0x3ffc2e00-0x3ffc0000)
7273 +#define APP_OCM_DATA_SIZE (0x3ffd3500-0x3ffc8000)
7274 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm_text.lds.inc linux-2.6.28.10/arch/ubicom32/include/asm/ocm_text.lds.inc
7275 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm_text.lds.inc 1970-01-01 02:00:00.000000000 +0200
7276 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ocm_text.lds.inc 2009-08-06 10:31:02.000000000 +0300
7277 @@ -0,0 +1,175 @@
7278 +/*
7279 + * arch/ubicom32/include/asm/ocm_text.lds.inc
7280 + * <TODO: Replace with short file description>
7281 + *
7282 + * (C) Copyright 2009, Ubicom, Inc.
7283 + *
7284 + * This file is part of the Ubicom32 Linux Kernel Port.
7285 + *
7286 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7287 + * it and/or modify it under the terms of the GNU General Public License
7288 + * as published by the Free Software Foundation, either version 2 of the
7289 + * License, or (at your option) any later version.
7290 + *
7291 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7292 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7293 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7294 + * the GNU General Public License for more details.
7295 + *
7296 + * You should have received a copy of the GNU General Public License
7297 + * along with the Ubicom32 Linux Kernel Port. If not,
7298 + * see <http://www.gnu.org/licenses/>.
7299 + *
7300 + * Ubicom32 implementation derived from (with many thanks):
7301 + * arch/m68knommu
7302 + * arch/blackfin
7303 + * arch/parisc
7304 + */
7305 +*(.text.do_csum)
7306 +*(.text.tcp_packet)
7307 +*(.text.ipt_do_table)
7308 +*(.text.nf_conntrack_in)
7309 +*(.text.ip_forward)
7310 +*(.text.dev_queue_xmit)
7311 +*(.text.netif_receive_skb)
7312 +*(.text.ip_route_input)
7313 +*(.text.ip_finish_output)
7314 +*(.text.nf_iterate)
7315 +*(.text.__hash_conntrack)
7316 +*(.text.memset)
7317 +*(.text.memcpy)
7318 +*(.text.ip_rcv)
7319 +*(.text.__nf_conntrack_find)
7320 +*(.text.dev_hard_start_xmit)
7321 +*(.text.vlan_dev_hard_start_xmit)
7322 +*(.text.vlan_dev_hard_header)
7323 +*(.text.__nf_ct_refresh_acct)
7324 +*(.text.tcp_error)
7325 +*(.text.pfifo_fast_enqueue)
7326 +*(.text.ipv4_confirm)
7327 +*(.text.ip_output)
7328 +*(.text.neigh_connected_output)
7329 +*(.text.nf_hook_slow)
7330 +*(.text.nf_nat_packet)
7331 +*(.text.local_bh_enable)
7332 +*(.text.pfifo_fast_dequeue)
7333 +*(.text.ubi32_eth_receive)
7334 +*(.text.nf_nat_fn)
7335 +*(.text.skb_checksum)
7336 +*(.text.memmove)
7337 +*(.text.ubi32_eth_tx_done)
7338 +*(.text.eth_header)
7339 +*(.text.skb_release_data)
7340 +*(.text.nf_conntrack_find_get)
7341 +*(.text.process_backlog)
7342 +*(.text.vlan_skb_recv)
7343 +*(.text.ip_rcv_finish)
7344 +*(.text.__qdisc_run)
7345 +*(.text.skb_push)
7346 +*(.text.eth_type_trans)
7347 +*(.text.__alloc_skb)
7348 +*(.text.netif_rx)
7349 +*(.text.nf_ip_checksum)
7350 +*(.text.__skb_checksum_complete_head)
7351 +*(.text.ipv4_conntrack_defrag)
7352 +*(.text.tcp_pkt_to_tuple)
7353 +*(.text.kfree)
7354 +*(.text.tcp_manip_pkt)
7355 +*(.text.skb_put)
7356 +*(.text.nf_ct_get_tuple)
7357 +*(.text.__kmalloc)
7358 +*(.text.ubi32_eth_start_xmit)
7359 +*(.text.free_block)
7360 +*(.text.ipt_hook)
7361 +*(.text.kmem_cache_free)
7362 +*(.text.skb_pull_rcsum)
7363 +*(.text.cache_alloc_refill)
7364 +*(.text.skb_release_head_state)
7365 +*(.text.manip_pkt)
7366 +*(.text.ip_sabotage_in)
7367 +*(.text.ip_forward_finish)
7368 +*(.text.kmem_cache_alloc)
7369 +*(.text.local_bh_disable)
7370 +*(.text.ipv4_pkt_to_tuple)
7371 +*(.text.inet_proto_csum_replace4)
7372 +*(.text.__nf_ct_l4proto_find)
7373 +*(.text.csum_partial)
7374 +*(.text.neigh_resolve_output)
7375 +*(.text.__kfree_skb)
7376 +*(.text.kfree_skb)
7377 +*(.text.__find_vlan_dev)
7378 +*(.text.ldsr_ctxsw_thread)
7379 +*(.text.__do_IRQ)
7380 +*(.text.skb_pull)
7381 +*(.text.ipv4_invert_tuple)
7382 +*(.text.nf_ct_invert_tuplepr)
7383 +*(.text.skb_make_writable)
7384 +*(.text.ipv4_get_l4proto)
7385 +*(.text.handle_IRQ_event)
7386 +*(.text.net_rx_action)
7387 +*(.text.__do_softirq)
7388 +*(.text.nf_nat_in)
7389 +*(.text.note_interrupt)
7390 +*(.text.ipv4_conntrack_in)
7391 +*(.text.dst_release)
7392 +*(.text.tasklet_action)
7393 +*(.text.nf_nat_out)
7394 +*(.text.nf_ct_invert_tuple)
7395 +*(.text.do_IRQ)
7396 +*(.text.__tasklet_schedule)
7397 +*(.text.__skb_checksum_complete)
7398 +*(.text.ubi32_eth_interrupt)
7399 +*(.text.dev_kfree_skb_any)
7400 +*(.text.ret_from_interrupt_to_kernel)
7401 +*(.text.preemptive_context_save)
7402 +*(.text.irq_ack_vector)
7403 +*(.text.update_wall_time)
7404 +*(.text.ldsr_thread)
7405 +*(.text.irq_exit)
7406 +*(.text.ubi32_eth_do_tasklet)
7407 +*(.text.__napi_schedule)
7408 +*(.text.idle_cpu)
7409 +*(.text.run_timer_softirq)
7410 +*(.text.ldsr_mask_vector)
7411 +*(.text.irq_enter)
7412 +*(.text.ldsr_get_lsb)
7413 +*(.text.ldsr_unmask_vector)
7414 +*(.text.ip_fast_csum)
7415 +*(.text.hrtimer_run_queues)
7416 +*(.text.tcp_invert_tuple)
7417 +*(.text.T___705)
7418 +*(.text.run_posix_cpu_timers)
7419 +*(.text.free_hot_cold_page)
7420 +*(.text.lock_timer_base)
7421 +*(.text.calc_delta_mine)
7422 +*(.text.slab_destroy)
7423 +*(.text.rcu_pending)
7424 +*(.text.scheduler_tick)
7425 +*(.text.hrtimer_run_pending)
7426 +*(.text.do_softirq)
7427 +*(.text.del_timer)
7428 +*(.text.irq_end_vector)
7429 +*(.text.pci_read_u32)
7430 +*(.text.udivmodsi4)
7431 +*(.text.memcmp)
7432 +*(.text.memset)
7433 +*(.text.__slab_alloc)
7434 +*(.text.br_handle_frame)
7435 +*(.text.br_fdb_update)
7436 +*(.text.__br_fdb_get)
7437 +*(.text.br_forward)
7438 +*(.text.br_handle_frame_finish)
7439 +*(.text.pci_write_u32)
7440 +*(.text.kmem_freepages)
7441 +*(.text.br_dev_queue_push_xmit)
7442 +*(.text.ioread32)
7443 +*(.text.next_zones_zonelist)
7444 +*(.text.ubi32_pci_read_u32)
7445 +*(.text.zone_watermark_ok)
7446 +*(.text.__rmqueue_smallest)
7447 +*(.text.ubi32_eth_napi_poll)
7448 +*(.text.ubi32_pci_write_u32)
7449 +*(.text.ubi32_pci_read_u32)
7450 +*(.text._local_bh_enable)
7451 +*(.text._local_bh_disable)
7452 +*(.text.get_slab)
7453 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/page.h linux-2.6.28.10/arch/ubicom32/include/asm/page.h
7454 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/page.h 1970-01-01 02:00:00.000000000 +0200
7455 +++ linux-2.6.28.10/arch/ubicom32/include/asm/page.h 2009-08-06 10:31:02.000000000 +0300
7456 @@ -0,0 +1,106 @@
7457 +/*
7458 + * arch/ubicom32/include/asm/page.h
7459 + * Memory page related operations and definitions.
7460 + *
7461 + * (C) Copyright 2009, Ubicom, Inc.
7462 + *
7463 + * This file is part of the Ubicom32 Linux Kernel Port.
7464 + *
7465 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7466 + * it and/or modify it under the terms of the GNU General Public License
7467 + * as published by the Free Software Foundation, either version 2 of the
7468 + * License, or (at your option) any later version.
7469 + *
7470 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7471 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7472 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7473 + * the GNU General Public License for more details.
7474 + *
7475 + * You should have received a copy of the GNU General Public License
7476 + * along with the Ubicom32 Linux Kernel Port. If not,
7477 + * see <http://www.gnu.org/licenses/>.
7478 + *
7479 + * Ubicom32 implementation derived from (with many thanks):
7480 + * arch/m68knommu
7481 + * arch/blackfin
7482 + * arch/parisc
7483 + */
7484 +#ifndef _ASM_UBICOM32_PAGE_H
7485 +#define _ASM_UBICOM32_PAGE_H
7486 +
7487 +/* PAGE_SHIFT determines the page size */
7488 +
7489 +#define PAGE_SHIFT 12
7490 +#define PAGE_SIZE (1 << PAGE_SHIFT)
7491 +#define PAGE_MASK (~(PAGE_SIZE-1))
7492 +
7493 +#include <asm/setup.h>
7494 +
7495 +#ifndef __ASSEMBLY__
7496 +
7497 +#define get_user_page(vaddr) __get_free_page(GFP_KERNEL)
7498 +#define free_user_page(page, addr) free_page(addr)
7499 +
7500 +#define clear_page(page) memset((page), 0, PAGE_SIZE)
7501 +#define copy_page(to,from) memcpy((to), (from), PAGE_SIZE)
7502 +
7503 +#define clear_user_page(page, vaddr, pg) clear_page(page)
7504 +#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
7505 +
7506 +#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
7507 + alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
7508 +#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
7509 +
7510 +/*
7511 + * These are used to make use of C type-checking..
7512 + */
7513 +typedef struct { unsigned long pte; } pte_t;
7514 +typedef struct { unsigned long pmd[16]; } pmd_t;
7515 +typedef struct { unsigned long pgd; } pgd_t;
7516 +typedef struct { unsigned long pgprot; } pgprot_t;
7517 +typedef struct page *pgtable_t;
7518 +
7519 +#define pte_val(x) ((x).pte)
7520 +#define pmd_val(x) ((&x)->pmd[0])
7521 +#define pgd_val(x) ((x).pgd)
7522 +#define pgprot_val(x) ((x).pgprot)
7523 +
7524 +#define __pte(x) ((pte_t) { (x) } )
7525 +#define __pmd(x) ((pmd_t) { (x) } )
7526 +#define __pgd(x) ((pgd_t) { (x) } )
7527 +#define __pgprot(x) ((pgprot_t) { (x) } )
7528 +
7529 +extern unsigned long memory_start;
7530 +extern unsigned long memory_end;
7531 +
7532 +#endif /* !__ASSEMBLY__ */
7533 +
7534 +#include <asm/page_offset.h>
7535 +
7536 +#define PAGE_OFFSET (PAGE_OFFSET_RAW)
7537 +
7538 +#ifndef __ASSEMBLY__
7539 +
7540 +#define __pa(vaddr) virt_to_phys((void *)(vaddr))
7541 +#define __va(paddr) phys_to_virt((unsigned long)(paddr))
7542 +
7543 +#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
7544 +#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT)
7545 +
7546 +#define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT))
7547 +#define page_to_virt(page) ((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)
7548 +
7549 +#define pfn_to_page(pfn) virt_to_page(pfn_to_virt(pfn))
7550 +#define page_to_pfn(page) virt_to_pfn(page_to_virt(page))
7551 +#define pfn_valid(pfn) ((pfn) < max_mapnr)
7552 +
7553 +#define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
7554 + ((void *)(kaddr) < (void *)memory_end))
7555 +
7556 +#endif /* __ASSEMBLY__ */
7557 +
7558 +#ifdef __KERNEL__
7559 +#include <asm-generic/page.h>
7560 +#endif
7561 +
7562 +#endif /* _ASM_UBICOM32_PAGE_H */
7563 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/page_offset.h linux-2.6.28.10/arch/ubicom32/include/asm/page_offset.h
7564 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/page_offset.h 1970-01-01 02:00:00.000000000 +0200
7565 +++ linux-2.6.28.10/arch/ubicom32/include/asm/page_offset.h 2009-08-06 10:31:02.000000000 +0300
7566 @@ -0,0 +1,35 @@
7567 +/*
7568 + * arch/ubicom32/include/asm/page_offset.h
7569 + * Definition of PAGE_OFFSET_RAW for Ubicom32 architecture.
7570 + *
7571 + * (C) Copyright 2009, Ubicom, Inc.
7572 + *
7573 + * This file is part of the Ubicom32 Linux Kernel Port.
7574 + *
7575 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7576 + * it and/or modify it under the terms of the GNU General Public License
7577 + * as published by the Free Software Foundation, either version 2 of the
7578 + * License, or (at your option) any later version.
7579 + *
7580 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7581 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7582 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7583 + * the GNU General Public License for more details.
7584 + *
7585 + * You should have received a copy of the GNU General Public License
7586 + * along with the Ubicom32 Linux Kernel Port. If not,
7587 + * see <http://www.gnu.org/licenses/>.
7588 + *
7589 + * Ubicom32 implementation derived from (with many thanks):
7590 + * arch/m68knommu
7591 + * arch/blackfin
7592 + * arch/parisc
7593 + */
7594 +
7595 +#ifndef _ASM_UBICOM32_PAGE_OFFSET_H
7596 +#define _ASM_UBICOM32_PAGE_OFFSET_H
7597 +
7598 +/* This handles the memory map.. */
7599 +#define PAGE_OFFSET_RAW 0x3ffc0000
7600 +
7601 +#endif /* _ASM_UBICOM32_PAGE_OFFSET_H */
7602 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/param.h linux-2.6.28.10/arch/ubicom32/include/asm/param.h
7603 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/param.h 1970-01-01 02:00:00.000000000 +0200
7604 +++ linux-2.6.28.10/arch/ubicom32/include/asm/param.h 2009-08-06 10:31:02.000000000 +0300
7605 @@ -0,0 +1,49 @@
7606 +/*
7607 + * arch/ubicom32/include/asm/param.h
7608 + * Definition of miscellaneous constants, including HZ.
7609 + *
7610 + * (C) Copyright 2009, Ubicom, Inc.
7611 + *
7612 + * This file is part of the Ubicom32 Linux Kernel Port.
7613 + *
7614 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7615 + * it and/or modify it under the terms of the GNU General Public License
7616 + * as published by the Free Software Foundation, either version 2 of the
7617 + * License, or (at your option) any later version.
7618 + *
7619 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7620 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7621 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7622 + * the GNU General Public License for more details.
7623 + *
7624 + * You should have received a copy of the GNU General Public License
7625 + * along with the Ubicom32 Linux Kernel Port. If not,
7626 + * see <http://www.gnu.org/licenses/>.
7627 + *
7628 + * Ubicom32 implementation derived from (with many thanks):
7629 + * arch/m68knommu
7630 + * arch/blackfin
7631 + * arch/parisc
7632 + */
7633 +#ifndef _ASM_UBICOM32_PARAM_H
7634 +#define _ASM_UBICOM32_PARAM_H
7635 +
7636 +#ifdef __KERNEL__
7637 +#define HZ CONFIG_HZ
7638 +#define USER_HZ HZ
7639 +#define CLOCKS_PER_SEC (USER_HZ)
7640 +#endif
7641 +
7642 +#ifndef HZ
7643 +#define HZ 100
7644 +#endif
7645 +
7646 +#define EXEC_PAGESIZE 4096
7647 +
7648 +#ifndef NOGROUP
7649 +#define NOGROUP (-1)
7650 +#endif
7651 +
7652 +#define MAXHOSTNAMELEN 64 /* max length of hostname */
7653 +
7654 +#endif /* _ASM_UBICOM32_PARAM_H */
7655 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/pci.h linux-2.6.28.10/arch/ubicom32/include/asm/pci.h
7656 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/pci.h 1970-01-01 02:00:00.000000000 +0200
7657 +++ linux-2.6.28.10/arch/ubicom32/include/asm/pci.h 2009-08-06 10:31:02.000000000 +0300
7658 @@ -0,0 +1,210 @@
7659 +/*
7660 + * arch/ubicom32/include/asm/pci.h
7661 + * Definitions of PCI operations for Ubicom32 architecture.
7662 + *
7663 + * (C) Copyright 2009, Ubicom, Inc.
7664 + *
7665 + * This file is part of the Ubicom32 Linux Kernel Port.
7666 + *
7667 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7668 + * it and/or modify it under the terms of the GNU General Public License
7669 + * as published by the Free Software Foundation, either version 2 of the
7670 + * License, or (at your option) any later version.
7671 + *
7672 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7673 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7674 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7675 + * the GNU General Public License for more details.
7676 + *
7677 + * You should have received a copy of the GNU General Public License
7678 + * along with the Ubicom32 Linux Kernel Port. If not,
7679 + * see <http://www.gnu.org/licenses/>.
7680 + *
7681 + * Ubicom32 implementation derived from (with many thanks):
7682 + * arch/m68knommu
7683 + * arch/blackfin
7684 + * arch/parisc
7685 + */
7686 +#ifndef _ASM_UBICOM32_PCI_H
7687 +#define _ASM_UBICOM32_PCI_H
7688 +
7689 +#include <asm/io.h>
7690 +
7691 +/* The PCI address space does equal the physical memory
7692 + * address space. The networking and block device layers use
7693 + * this boolean for bounce buffer decisions.
7694 + */
7695 +#define PCI_DMA_BUS_IS_PHYS (1)
7696 +
7697 +
7698 +
7699 +/*
7700 + * Perform a master read/write to the PCI bus.
7701 + * These functions return a PCI_RESP_xxx code.
7702 + */
7703 +extern u8 pci_read_u32(u8 pci_cmd, u32 address, u32 *data);
7704 +extern u8 pci_write_u32(u8 pci_cmd, u32 address, u32 data);
7705 +extern u8 pci_read_u16(u8 pci_cmd, u32 address, u16 *data);
7706 +extern u8 pci_write_u16(u8 pci_cmd, u32 address, u16 data);
7707 +extern u8 pci_read_u8(u8 pci_cmd, u32 address, u8 *data);
7708 +extern u8 pci_write_u8(u8 pci_cmd, u32 address, u8 data);
7709 +
7710 +
7711 +#define PCIBIOS_MIN_IO 0x100
7712 +#define PCIBIOS_MIN_MEM 0x10000000
7713 +
7714 +#define pcibios_assign_all_busses() 0
7715 +#define pcibios_scan_all_fns(a, b) 0
7716 +extern void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
7717 + struct resource *res);
7718 +
7719 +extern void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
7720 + struct pci_bus_region *region);
7721 +
7722 +struct pci_sys_data;
7723 +struct pci_bus;
7724 +
7725 +struct hw_pci {
7726 + struct list_head buses;
7727 + int nr_controllers;
7728 + int (*setup)(int nr, struct pci_sys_data *);
7729 + struct pci_bus *(*scan)(int nr, struct pci_sys_data *);
7730 + void (*preinit)(void);
7731 + void (*postinit)(void);
7732 + u8 (*swizzle)(struct pci_dev *dev, u8 *pin);
7733 + int (*map_irq)(struct pci_dev *dev, u8 slot, u8 pin);
7734 +};
7735 +
7736 +/*
7737 + * Per-controller structure
7738 + */
7739 +struct pci_sys_data {
7740 + struct list_head node;
7741 + int busnr; /* primary bus number */
7742 + u64 mem_offset; /* bus->cpu memory mapping offset */
7743 + unsigned long io_offset; /* bus->cpu IO mapping offset */
7744 + struct pci_bus *bus; /* PCI bus */
7745 + struct resource *resource[3]; /* Primary PCI bus resources */
7746 + /* Bridge swizzling */
7747 + u8 (*swizzle)(struct pci_dev *, u8 *);
7748 + /* IRQ mapping */
7749 + int (*map_irq)(struct pci_dev *, u8, u8);
7750 + struct hw_pci *hw;
7751 +};
7752 +
7753 +static inline struct resource *
7754 +pcibios_select_root(struct pci_dev *pdev, struct resource *res)
7755 +{
7756 + struct resource *root = NULL;
7757 +
7758 + if (res->flags & IORESOURCE_IO)
7759 + root = &ioport_resource;
7760 + if (res->flags & IORESOURCE_MEM)
7761 + root = &iomem_resource;
7762 +
7763 + return root;
7764 +}
7765 +
7766 +static inline void pcibios_set_master(struct pci_dev *dev)
7767 +{
7768 + /* No special bus mastering setup handling */
7769 +}
7770 +#define HAVE_ARCH_PCI_SET_DMA_MAX_SEGMENT_SIZE 1
7771 +#define HAVE_ARCH_PCI_SET_DMA_SEGMENT_BOUNDARY 1
7772 +
7773 +#ifdef CONFIG_PCI
7774 +static inline void * pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
7775 + dma_addr_t *dma_handle)
7776 +{
7777 + void *vaddr = kmalloc(size, GFP_KERNEL);
7778 + if(vaddr != NULL) {
7779 + *dma_handle = virt_to_phys(vaddr);
7780 + }
7781 + return vaddr;
7782 +}
7783 +
7784 +static inline int pci_dma_supported(struct pci_dev *hwdev, dma_addr_t mask)
7785 +{
7786 + return 1;
7787 +}
7788 +
7789 +static inline void pci_free_consistent(struct pci_dev *hwdev, size_t size,
7790 + void *cpu_addr, dma_addr_t dma_handle)
7791 +{
7792 + kfree(cpu_addr);
7793 + return;
7794 +}
7795 +
7796 +static inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr,
7797 + size_t size, int direction)
7798 +{
7799 + return virt_to_phys(ptr);
7800 +}
7801 +
7802 +static inline void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
7803 + size_t size, int direction)
7804 +{
7805 + return;
7806 +}
7807 +
7808 +static inline dma_addr_t
7809 +pci_map_page(struct pci_dev *hwdev, struct page *page,
7810 + unsigned long offset, size_t size, int direction)
7811 +{
7812 + return pci_map_single(hwdev, page_address(page) + offset, size, (int)direction);
7813 +}
7814 +
7815 +static inline void
7816 +pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
7817 + size_t size, int direction)
7818 +{
7819 + pci_unmap_single(hwdev, dma_address, size, direction);
7820 +}
7821 +
7822 +static inline int
7823 +pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
7824 + int nents, int direction)
7825 +{
7826 + return nents;
7827 +}
7828 +
7829 +static inline void
7830 +pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
7831 + int nents, int direction)
7832 +{
7833 +}
7834 +
7835 +static inline void
7836 +pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg,
7837 + int nelems, int direction)
7838 +{
7839 +}
7840 +
7841 +static inline void
7842 +pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg,
7843 + int nelems, int direction)
7844 +{
7845 +}
7846 +
7847 +static inline void
7848 +pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle,
7849 + size_t size, int direction)
7850 +{
7851 +}
7852 +
7853 +static inline void
7854 +pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle,
7855 + size_t size, int direction)
7856 +{
7857 +}
7858 +
7859 +static inline int
7860 +pci_dma_mapping_error(struct pci_dev *hwdev, dma_addr_t dma_addr)
7861 +{
7862 + return dma_addr == 0;
7863 +}
7864 +extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
7865 +extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
7866 +#endif
7867 +
7868 +#endif /* _ASM_UBICOM32_PCI_H */
7869 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/percpu.h linux-2.6.28.10/arch/ubicom32/include/asm/percpu.h
7870 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/percpu.h 1970-01-01 02:00:00.000000000 +0200
7871 +++ linux-2.6.28.10/arch/ubicom32/include/asm/percpu.h 2009-08-06 10:31:02.000000000 +0300
7872 @@ -0,0 +1,33 @@
7873 +/*
7874 + * arch/ubicom32/include/asm/percpu.h
7875 + * Generic percpu.h for the Ubicom32 architecture.
7876 + *
7877 + * (C) Copyright 2009, Ubicom, Inc.
7878 + *
7879 + * This file is part of the Ubicom32 Linux Kernel Port.
7880 + *
7881 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7882 + * it and/or modify it under the terms of the GNU General Public License
7883 + * as published by the Free Software Foundation, either version 2 of the
7884 + * License, or (at your option) any later version.
7885 + *
7886 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7887 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7888 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7889 + * the GNU General Public License for more details.
7890 + *
7891 + * You should have received a copy of the GNU General Public License
7892 + * along with the Ubicom32 Linux Kernel Port. If not,
7893 + * see <http://www.gnu.org/licenses/>.
7894 + *
7895 + * Ubicom32 implementation derived from (with many thanks):
7896 + * arch/m68knommu
7897 + * arch/blackfin
7898 + * arch/parisc
7899 + */
7900 +#ifndef _ASM_UBICOM32_PERCPU_H
7901 +#define _ASM_UBICOM32_PERCPU_H
7902 +
7903 +#include <asm-generic/percpu.h>
7904 +
7905 +#endif /* _ASM_UBICOM32_PERCPU_H */
7906 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/pgalloc.h linux-2.6.28.10/arch/ubicom32/include/asm/pgalloc.h
7907 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/pgalloc.h 1970-01-01 02:00:00.000000000 +0200
7908 +++ linux-2.6.28.10/arch/ubicom32/include/asm/pgalloc.h 2009-08-06 10:31:02.000000000 +0300
7909 @@ -0,0 +1,36 @@
7910 +/*
7911 + * arch/ubicom32/include/asm/pgalloc.h
7912 + * Page table allocation definitions.
7913 + *
7914 + * (C) Copyright 2009, Ubicom, Inc.
7915 + *
7916 + * This file is part of the Ubicom32 Linux Kernel Port.
7917 + *
7918 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7919 + * it and/or modify it under the terms of the GNU General Public License
7920 + * as published by the Free Software Foundation, either version 2 of the
7921 + * License, or (at your option) any later version.
7922 + *
7923 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7924 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7925 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7926 + * the GNU General Public License for more details.
7927 + *
7928 + * You should have received a copy of the GNU General Public License
7929 + * along with the Ubicom32 Linux Kernel Port. If not,
7930 + * see <http://www.gnu.org/licenses/>.
7931 + *
7932 + * Ubicom32 implementation derived from (with many thanks):
7933 + * arch/m68knommu
7934 + * arch/blackfin
7935 + * arch/parisc
7936 + */
7937 +#ifndef _ASM_UBICOM32_PGALLOC_H
7938 +#define _ASM_UBICOM32_PGALLOC_H
7939 +
7940 +#include <linux/mm.h>
7941 +#include <asm/setup.h>
7942 +
7943 +#define check_pgt_cache() do { } while (0)
7944 +
7945 +#endif /* _ASM_UBICOM32_PGALLOC_H */
7946 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/pgtable.h linux-2.6.28.10/arch/ubicom32/include/asm/pgtable.h
7947 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/pgtable.h 1970-01-01 02:00:00.000000000 +0200
7948 +++ linux-2.6.28.10/arch/ubicom32/include/asm/pgtable.h 2009-08-06 10:31:02.000000000 +0300
7949 @@ -0,0 +1,124 @@
7950 +/*
7951 + * arch/ubicom32/include/asm/pgtable.h
7952 + * Ubicom32 pseudo page table definitions and operations.
7953 + *
7954 + * (C) Copyright 2009, Ubicom, Inc.
7955 + * Copyright (C) 2004 Microtronix Datacom Ltd
7956 + *
7957 + * This file is part of the Ubicom32 Linux Kernel Port.
7958 + *
7959 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
7960 + * it and/or modify it under the terms of the GNU General Public License
7961 + * as published by the Free Software Foundation, either version 2 of the
7962 + * License, or (at your option) any later version.
7963 + *
7964 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
7965 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
7966 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
7967 + * the GNU General Public License for more details.
7968 + *
7969 + * You should have received a copy of the GNU General Public License
7970 + * along with the Ubicom32 Linux Kernel Port. If not,
7971 + * see <http://www.gnu.org/licenses/>.
7972 + *
7973 + * Ubicom32 implementation derived from (with many thanks):
7974 + * arch/m68knommu
7975 + * arch/blackfin
7976 + * arch/parisc
7977 + * and various works, Alpha, ix86, M68K, Sparc, ...et al
7978 + */
7979 +#ifndef _ASM_UBICOM32_PGTABLE_H
7980 +#define _ASM_UBICOM32_PGTABLE_H
7981 +
7982 +#include <asm-generic/4level-fixup.h>
7983 +
7984 +//vic - this bit copied from m68knommu version
7985 +#include <asm/setup.h>
7986 +#include <asm/io.h>
7987 +#include <linux/sched.h>
7988 +
7989 +typedef pte_t *pte_addr_t;
7990 +
7991 +#define pgd_present(pgd) (1) /* pages are always present on NO_MM */
7992 +#define pgd_none(pgd) (0)
7993 +#define pgd_bad(pgd) (0)
7994 +#define pgd_clear(pgdp)
7995 +#define kern_addr_valid(addr) (1)
7996 +#define pmd_offset(a, b) ((void *)0)
7997 +
7998 +#define PAGE_NONE __pgprot(0) /* these mean nothing to NO_MM */
7999 +#define PAGE_SHARED __pgprot(0) /* these mean nothing to NO_MM */
8000 +#define PAGE_COPY __pgprot(0) /* these mean nothing to NO_MM */
8001 +#define PAGE_READONLY __pgprot(0) /* these mean nothing to NO_MM */
8002 +#define PAGE_KERNEL __pgprot(0) /* these mean nothing to NO_MM */
8003 +//vic - this bit copied from m68knommu version
8004 +
8005 +extern void paging_init(void);
8006 +#define swapper_pg_dir ((pgd_t *) 0)
8007 +
8008 +#define __swp_type(x) (0)
8009 +#define __swp_offset(x) (0)
8010 +#define __swp_entry(typ,off) ((swp_entry_t) { ((typ) | ((off) << 7)) })
8011 +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
8012 +#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
8013 +
8014 +/*
8015 + * pgprot_noncached() is only for infiniband pci support, and a real
8016 + * implementation for RAM would be more complicated.
8017 + */
8018 +#define pgprot_noncached(prot) (prot)
8019 +
8020 +static inline int pte_file(pte_t pte) { return 0; }
8021 +
8022 +/*
8023 + * ZERO_PAGE is a global shared page that is always zero: used
8024 + * for zero-mapped memory areas etc..
8025 + */
8026 +#define ZERO_PAGE(vaddr) (virt_to_page(0))
8027 +
8028 +extern unsigned int kobjsize(const void *objp);
8029 +extern int is_in_rom(unsigned long);
8030 +
8031 +/*
8032 + * No page table caches to initialise
8033 + */
8034 +#define pgtable_cache_init() do { } while (0)
8035 +
8036 +#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
8037 + remap_pfn_range(vma, vaddr, pfn, size, prot)
8038 +
8039 +extern inline void flush_cache_mm(struct mm_struct *mm)
8040 +{
8041 +}
8042 +
8043 +extern inline void flush_cache_range(struct mm_struct *mm,
8044 + unsigned long start,
8045 + unsigned long end)
8046 +{
8047 +}
8048 +
8049 +/* Push the page at kernel virtual address and clear the icache */
8050 +extern inline void flush_page_to_ram (unsigned long address)
8051 +{
8052 +}
8053 +
8054 +/* Push n pages at kernel virtual address and clear the icache */
8055 +extern inline void flush_pages_to_ram (unsigned long address, int n)
8056 +{
8057 +}
8058 +
8059 +/*
8060 + * All 32bit addresses are effectively valid for vmalloc...
8061 + * Sort of meaningless for non-VM targets.
8062 + */
8063 +#define VMALLOC_START 0
8064 +#define VMALLOC_END 0xffffffff
8065 +
8066 +#define arch_enter_lazy_mmu_mode() do {} while (0)
8067 +#define arch_leave_lazy_mmu_mode() do {} while (0)
8068 +#define arch_flush_lazy_mmu_mode() do {} while (0)
8069 +#define arch_enter_lazy_cpu_mode() do {} while (0)
8070 +#define arch_leave_lazy_cpu_mode() do {} while (0)
8071 +#define arch_flush_lazy_cpu_mode() do {} while (0)
8072 +
8073 +#endif /* _ASM_UBICOM32_PGTABLE_H */
8074 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/poll.h linux-2.6.28.10/arch/ubicom32/include/asm/poll.h
8075 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/poll.h 1970-01-01 02:00:00.000000000 +0200
8076 +++ linux-2.6.28.10/arch/ubicom32/include/asm/poll.h 2009-08-06 10:31:02.000000000 +0300
8077 @@ -0,0 +1,36 @@
8078 +/*
8079 + * arch/ubicom32/include/asm/poll.h
8080 + * Ubicom32 specific poll() related flags definitions.
8081 + *
8082 + * (C) Copyright 2009, Ubicom, Inc.
8083 + *
8084 + * This file is part of the Ubicom32 Linux Kernel Port.
8085 + *
8086 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8087 + * it and/or modify it under the terms of the GNU General Public License
8088 + * as published by the Free Software Foundation, either version 2 of the
8089 + * License, or (at your option) any later version.
8090 + *
8091 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8092 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8093 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8094 + * the GNU General Public License for more details.
8095 + *
8096 + * You should have received a copy of the GNU General Public License
8097 + * along with the Ubicom32 Linux Kernel Port. If not,
8098 + * see <http://www.gnu.org/licenses/>.
8099 + *
8100 + * Ubicom32 implementation derived from (with many thanks):
8101 + * arch/m68knommu
8102 + * arch/blackfin
8103 + * arch/parisc
8104 + */
8105 +#ifndef _ASM_UBICOM32_POLL_H
8106 +#define _ASM_UBICOM32_POLL_H
8107 +
8108 +#define POLLWRNORM POLLOUT
8109 +#define POLLWRBAND 0x0100
8110 +
8111 +#include <asm-generic/poll.h>
8112 +
8113 +#endif /* _ASM_UBICOM32_POLL_H */
8114 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/posix_types.h linux-2.6.28.10/arch/ubicom32/include/asm/posix_types.h
8115 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/posix_types.h 1970-01-01 02:00:00.000000000 +0200
8116 +++ linux-2.6.28.10/arch/ubicom32/include/asm/posix_types.h 2009-08-06 10:31:02.000000000 +0300
8117 @@ -0,0 +1,93 @@
8118 +/*
8119 + * arch/ubicom32/include/asm/posix_types.h
8120 + * Ubicom32 architecture posix types.
8121 + *
8122 + * (C) Copyright 2009, Ubicom, Inc.
8123 + * Copyright (C) 2004 Microtronix Datacom Ltd
8124 + *
8125 + * This file is part of the Ubicom32 Linux Kernel Port.
8126 + *
8127 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8128 + * it and/or modify it under the terms of the GNU General Public License
8129 + * as published by the Free Software Foundation, either version 2 of the
8130 + * License, or (at your option) any later version.
8131 + *
8132 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8133 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8134 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8135 + * the GNU General Public License for more details.
8136 + *
8137 + * You should have received a copy of the GNU General Public License
8138 + * along with the Ubicom32 Linux Kernel Port. If not,
8139 + * see <http://www.gnu.org/licenses/>.
8140 + *
8141 + * Ubicom32 implementation derived from (with many thanks):
8142 + * arch/m68knommu
8143 + * arch/blackfin
8144 + * arch/parisc
8145 + */
8146 +#ifndef __ARCH_UBICOM32_POSIX_TYPES_H
8147 +#define __ARCH_UBICOM32_POSIX_TYPES_H
8148 +
8149 +/*
8150 + * This file is generally used by user-level software, so you need to
8151 + * be a little careful about namespace pollution etc. Also, we cannot
8152 + * assume GCC is being used.
8153 + */
8154 +
8155 +typedef unsigned long __kernel_ino_t;
8156 +typedef unsigned short __kernel_mode_t;
8157 +typedef unsigned short __kernel_nlink_t;
8158 +typedef long __kernel_off_t;
8159 +typedef int __kernel_pid_t;
8160 +typedef unsigned short __kernel_ipc_pid_t;
8161 +typedef unsigned short __kernel_uid_t;
8162 +typedef unsigned short __kernel_gid_t;
8163 +typedef unsigned int __kernel_size_t;
8164 +typedef int __kernel_ssize_t;
8165 +typedef int __kernel_ptrdiff_t;
8166 +typedef long __kernel_time_t;
8167 +typedef long __kernel_suseconds_t;
8168 +typedef long __kernel_clock_t;
8169 +typedef int __kernel_timer_t;
8170 +typedef int __kernel_clockid_t;
8171 +typedef int __kernel_daddr_t;
8172 +typedef char * __kernel_caddr_t;
8173 +typedef unsigned short __kernel_uid16_t;
8174 +typedef unsigned short __kernel_gid16_t;
8175 +typedef unsigned int __kernel_uid32_t;
8176 +typedef unsigned int __kernel_gid32_t;
8177 +
8178 +typedef unsigned short __kernel_old_uid_t;
8179 +typedef unsigned short __kernel_old_gid_t;
8180 +typedef unsigned short __kernel_old_dev_t;
8181 +
8182 +#ifdef __GNUC__
8183 +typedef long long __kernel_loff_t;
8184 +#endif
8185 +
8186 +typedef struct {
8187 +#if defined(__KERNEL__) || defined(__USE_ALL)
8188 + int val[2];
8189 +#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
8190 + int __val[2];
8191 +#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
8192 +} __kernel_fsid_t;
8193 +
8194 +#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
8195 +
8196 +#undef __FD_SET
8197 +#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
8198 +
8199 +#undef __FD_CLR
8200 +#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
8201 +
8202 +#undef __FD_ISSET
8203 +#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
8204 +
8205 +#undef __FD_ZERO
8206 +#define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp)))
8207 +
8208 +#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
8209 +
8210 +#endif
8211 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/processor.h linux-2.6.28.10/arch/ubicom32/include/asm/processor.h
8212 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/processor.h 1970-01-01 02:00:00.000000000 +0200
8213 +++ linux-2.6.28.10/arch/ubicom32/include/asm/processor.h 2009-08-06 10:31:02.000000000 +0300
8214 @@ -0,0 +1,163 @@
8215 +/*
8216 + * arch/ubicom32/include/asm/processor.h
8217 + * Thread related definitions for Ubicom32 architecture.
8218 + *
8219 + * (C) Copyright 2009, Ubicom, Inc.
8220 + * Copyright (C) 1995 Hamish Macdonald
8221 + *
8222 + * This file is part of the Ubicom32 Linux Kernel Port.
8223 + *
8224 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8225 + * it and/or modify it under the terms of the GNU General Public License
8226 + * as published by the Free Software Foundation, either version 2 of the
8227 + * License, or (at your option) any later version.
8228 + *
8229 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8230 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8231 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8232 + * the GNU General Public License for more details.
8233 + *
8234 + * You should have received a copy of the GNU General Public License
8235 + * along with the Ubicom32 Linux Kernel Port. If not,
8236 + * see <http://www.gnu.org/licenses/>.
8237 + *
8238 + * Ubicom32 implementation derived from (with many thanks):
8239 + * arch/m68knommu
8240 + * arch/blackfin
8241 + * arch/parisc
8242 + */
8243 +
8244 +#ifndef _ASM_UBICOM32_PROCESSOR_H
8245 +#define _ASM_UBICOM32_PROCESSOR_H
8246 +
8247 +/*
8248 + * Default implementation of macro that returns current
8249 + * instruction pointer ("program counter").
8250 + */
8251 +#define current_text_addr() ({ __label__ _l; _l: &&_l;})
8252 +
8253 +#include <linux/compiler.h>
8254 +#include <linux/threads.h>
8255 +#include <asm/types.h>
8256 +#include <asm/segment.h>
8257 +#include <asm/fpu.h>
8258 +#include <asm/ptrace.h>
8259 +#include <asm/current.h>
8260 +#include <asm/thread_info.h>
8261 +
8262 +#if defined(CONFIG_UBICOM32_V3)
8263 + #define CPU "IP5K"
8264 +#endif
8265 +#if defined(CONFIG_UBICOM32_V4)
8266 + #define CPU "IP7K"
8267 +#endif
8268 +#ifndef CPU
8269 + #define CPU "UNKNOWN"
8270 +#endif
8271 +
8272 +/*
8273 + * User space process size: 1st byte beyond user address space.
8274 + */
8275 +extern unsigned long memory_end;
8276 +#define TASK_SIZE (memory_end)
8277 +
8278 +/*
8279 + * This decides where the kernel will search for a free chunk of vm
8280 + * space during mmap's. We won't be using it
8281 + */
8282 +#define TASK_UNMAPPED_BASE 0
8283 +
8284 +/*
8285 + * This is the structure where we are going to save callee-saved registers.
8286 + * A5 is the return address, A7 is the stack pointer, A6 is the frame
8287 + * pointer. This is the frame that is created because of switch_to. This
8288 + * is not the frame due to interrupt preemption or because of syscall entry.
8289 + */
8290 +
8291 +struct thread_struct {
8292 + unsigned long d10; /* D10 */
8293 + unsigned long d11; /* D11 */
8294 + unsigned long d12; /* D12 */
8295 + unsigned long d13; /* D13 */
8296 + unsigned long a1; /* A1 */
8297 + unsigned long a2; /* A2 */
8298 + unsigned long a5; /* A5 return address. */
8299 + unsigned long a6; /* A6 */
8300 + unsigned long sp; /* A7 kernel stack pointer. */
8301 +};
8302 +
8303 +#define INIT_THREAD { \
8304 + 0, 0, 0, 0, 0, 0, 0, 0, \
8305 + sizeof(init_stack) + (unsigned long) init_stack - 8, \
8306 +}
8307 +
8308 +/*
8309 + * Do necessary setup to start up a newly executed thread.
8310 + *
8311 + * pass the data segment into user programs if it exists,
8312 + * it can't hurt anything as far as I can tell
8313 + */
8314 +/*
8315 + * Do necessary setup to start up a newly executed thread.
8316 + */
8317 +#define start_thread(regs, new_pc, new_sp) \
8318 + do { \
8319 + regs->pc = new_pc & ~3; \
8320 + regs->an[5] = new_pc & ~3; \
8321 + regs->an[7] = new_sp; \
8322 + regs->nesting_level = -1; \
8323 + regs->frame_type = UBICOM32_FRAME_TYPE_NEW_THREAD; \
8324 + regs->thread_type = NORMAL_THREAD; \
8325 + } while(0)
8326 +
8327 +/* Forward declaration, a strange C thing */
8328 +struct task_struct;
8329 +
8330 +/* Free all resources held by a thread. */
8331 +static inline void release_thread(struct task_struct *dead_task)
8332 +{
8333 +}
8334 +
8335 +/* Prepare to copy thread state - unlazy all lazy status */
8336 +#define prepare_to_copy(tsk) do { } while (0)
8337 +
8338 +extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
8339 +
8340 +/*
8341 + * Free current thread data structures etc..
8342 + */
8343 +static inline void exit_thread(void)
8344 +{
8345 +}
8346 +
8347 +unsigned long thread_saved_pc(struct task_struct *tsk);
8348 +unsigned long get_wchan(struct task_struct *p);
8349 +
8350 +#define KSTK_EIP(tsk) (tsk->thread.a5)
8351 +#define KSTK_ESP(tsk) (tsk->thread.sp)
8352 +
8353 +#define cpu_relax() barrier()
8354 +
8355 +extern void processor_init(void);
8356 +extern unsigned int processor_timers(void);
8357 +extern unsigned int processor_threads(void);
8358 +extern unsigned int processor_frequency(void);
8359 +extern int processor_interrupts(unsigned int *int0, unsigned int *int1);
8360 +extern int processor_ocm(void **socm, void **eocm);
8361 +extern int processor_dram(void **sdram, void **edram);
8362 +
8363 +#define THREAD_SIZE_LONGS (THREAD_SIZE/sizeof(unsigned long))
8364 +#define KSTK_TOP(info) \
8365 +({ \
8366 + unsigned long *__ptr = (unsigned long *)(info); \
8367 + (unsigned long)(&__ptr[THREAD_SIZE_LONGS]); \
8368 +})
8369 +
8370 +#define task_pt_regs(task) \
8371 +({ \
8372 + struct pt_regs *__regs__; \
8373 + __regs__ = (struct pt_regs *)(KSTK_TOP(task_stack_page(task))-8); \
8374 + __regs__ - 1; \
8375 +})
8376 +
8377 +#endif /* _ASM_UBICOM32_PROCESSOR_H */
8378 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ptrace.h linux-2.6.28.10/arch/ubicom32/include/asm/ptrace.h
8379 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ptrace.h 1970-01-01 02:00:00.000000000 +0200
8380 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ptrace.h 2009-08-06 10:31:02.000000000 +0300
8381 @@ -0,0 +1,177 @@
8382 +/*
8383 + * arch/ubicom32/include/asm/ptrace.h
8384 + * Ubicom32 architecture ptrace support.
8385 + *
8386 + * (C) Copyright 2009, Ubicom, Inc.
8387 + *
8388 + * This file is part of the Ubicom32 Linux Kernel Port.
8389 + *
8390 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8391 + * it and/or modify it under the terms of the GNU General Public License
8392 + * as published by the Free Software Foundation, either version 2 of the
8393 + * License, or (at your option) any later version.
8394 + *
8395 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8396 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8397 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8398 + * the GNU General Public License for more details.
8399 + *
8400 + * You should have received a copy of the GNU General Public License
8401 + * along with the Ubicom32 Linux Kernel Port. If not,
8402 + * see <http://www.gnu.org/licenses/>.
8403 + *
8404 + * Ubicom32 implementation derived from (with many thanks):
8405 + * arch/m68knommu
8406 + * arch/blackfin
8407 + * arch/parisc
8408 + */
8409 +#ifndef _ASM_UBICOM32_PTRACE_H
8410 +#define _ASM_UBICOM32_PTRACE_H
8411 +
8412 +#ifndef __ASSEMBLY__
8413 +
8414 +/*
8415 + * We use hard coded constants because this is shared with user
8416 + * space and the values are NOT allowed to change. Only fields
8417 + * that are intended to be exposed get values.
8418 + */
8419 +#define PT_D0 0
8420 +#define PT_D1 4
8421 +#define PT_D2 8
8422 +#define PT_D3 12
8423 +#define PT_D4 16
8424 +#define PT_D5 20
8425 +#define PT_D6 24
8426 +#define PT_D7 28
8427 +#define PT_D8 32
8428 +#define PT_D9 36
8429 +#define PT_D10 40
8430 +#define PT_D11 44
8431 +#define PT_D12 48
8432 +#define PT_D13 52
8433 +#define PT_D14 56
8434 +#define PT_D15 60
8435 +#define PT_A0 64
8436 +#define PT_A1 68
8437 +#define PT_A2 72
8438 +#define PT_A3 76
8439 +#define PT_A4 80
8440 +#define PT_A5 84
8441 +#define PT_A6 88
8442 +#define PT_A7 92
8443 +#define PT_SP 92
8444 +#define PT_ACC0HI 96
8445 +#define PT_ACC0LO 100
8446 +#define PT_MAC_RC16 104
8447 +#define PT_ACC1HI 108
8448 +#define PT_ACC1LO 112
8449 +#define PT_SOURCE3 116
8450 +#define PT_INST_CNT 120
8451 +#define PT_CSR 124
8452 +#define PT_DUMMY_UNUSED 128
8453 +#define PT_INT_MASK0 132
8454 +#define PT_INT_MASK1 136
8455 +#define PT_TRAP_CAUSE 140
8456 +#define PT_PC 144
8457 +#define PT_ORIGINAL_D0 148
8458 +#define PT_FRAME_TYPE 152
8459 +
8460 +/*
8461 + * The following 'registers' are not registers at all but are used
8462 + * locate the relocated sections.
8463 + */
8464 +#define PT_TEXT_ADDR 200
8465 +#define PT_TEXT_END_ADDR 204
8466 +#define PT_DATA_ADDR 208
8467 +#define PT_EXEC_FDPIC_LOADMAP 212
8468 +#define PT_INTERP_FDPIC_LOADMAP 216
8469 +
8470 +/*
8471 + * This struct defines the way the registers are stored on the
8472 + * stack during a system call.
8473 + */
8474 +enum thread_type {
8475 + NORMAL_THREAD,
8476 + KERNEL_THREAD,
8477 +};
8478 +
8479 +#define UBICOM32_FRAME_TYPE_SYSCALL -1 /* System call frame */
8480 +#define UBICOM32_FRAME_TYPE_INVALID 0 /* Invalid frame, no longer in use */
8481 +#define UBICOM32_FRAME_TYPE_INTERRUPT 1 /* Interrupt frame */
8482 +#define UBICOM32_FRAME_TYPE_TRAP 2 /* Trap frame */
8483 +#define UBICOM32_FRAME_TYPE_SIGTRAMP 3 /* Signal trampoline frame. */
8484 +#define UBICOM32_FRAME_TYPE_NEW_THREAD 4 /* New Thread. */
8485 +
8486 +struct pt_regs {
8487 + /*
8488 + * Data Registers
8489 + */
8490 + unsigned long dn[16];
8491 +
8492 + /*
8493 + * Address Registers
8494 + */
8495 + unsigned long an[8];
8496 +
8497 + /*
8498 + * Per thread misc registers.
8499 + */
8500 + unsigned long acc0[2];
8501 + unsigned long mac_rc16;
8502 + unsigned long acc1[2];
8503 + unsigned long source3;
8504 + unsigned long inst_cnt;
8505 + unsigned long csr;
8506 + unsigned long dummy_unused;
8507 + unsigned long int_mask0;
8508 + unsigned long int_mask1;
8509 + unsigned long trap_cause;
8510 + unsigned long pc;
8511 + unsigned long original_dn_0;
8512 +
8513 + /*
8514 + * Frame type. Syscall frames are -1. For other types look above.
8515 + */
8516 + unsigned long frame_type;
8517 +
8518 + /*
8519 + * These fields are not exposed to ptrace.
8520 + */
8521 + unsigned long previous_pc;
8522 + long nesting_level; /* When the kernel in in user space this
8523 + * will be -1. */
8524 + unsigned long thread_type; /* This indicates if this is a kernel
8525 + * thread. */
8526 +};
8527 +
8528 +/*
8529 + * This is the extended stack used by signal handlers and the context
8530 + * switcher: it's pushed after the normal "struct pt_regs".
8531 + */
8532 +struct switch_stack {
8533 + unsigned long dummy;
8534 +};
8535 +
8536 +#ifdef __KERNEL__
8537 +
8538 +/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
8539 +#define PTRACE_GETREGS 12
8540 +#define PTRACE_SETREGS 13
8541 +
8542 +#ifndef PS_S
8543 +#define PS_S (0x2000)
8544 +#define PS_M (0x1000)
8545 +#endif
8546 +
8547 +extern int __user_mode(unsigned long sp);
8548 +
8549 +#define user_mode(regs) (__user_mode((regs->an[7])))
8550 +#define user_stack(regs) ((regs)->an[7])
8551 +#define instruction_pointer(regs) ((regs)->pc)
8552 +#define profile_pc(regs) instruction_pointer(regs)
8553 +extern void show_regs(struct pt_regs *);
8554 +#endif /* __KERNEL__ */
8555 +
8556 +#endif /* __ASSEMBLY__ */
8557 +
8558 +#endif /* _ASM_UBICOM32_PTRACE_H */
8559 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/range-protect-asm.h linux-2.6.28.10/arch/ubicom32/include/asm/range-protect-asm.h
8560 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/range-protect-asm.h 1970-01-01 02:00:00.000000000 +0200
8561 +++ linux-2.6.28.10/arch/ubicom32/include/asm/range-protect-asm.h 2009-08-06 10:31:02.000000000 +0300
8562 @@ -0,0 +1,91 @@
8563 +/*
8564 + * arch/ubicom32/include/asm/range-protect-asm.h
8565 + * Assembly macros for enabling memory protection.
8566 + *
8567 + * (C) Copyright 2009, Ubicom, Inc.
8568 + *
8569 + * This file is part of the Ubicom32 Linux Kernel Port.
8570 + *
8571 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8572 + * it and/or modify it under the terms of the GNU General Public License
8573 + * as published by the Free Software Foundation, either version 2 of the
8574 + * License, or (at your option) any later version.
8575 + *
8576 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8577 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8578 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8579 + * the GNU General Public License for more details.
8580 + *
8581 + * You should have received a copy of the GNU General Public License
8582 + * along with the Ubicom32 Linux Kernel Port. If not,
8583 + * see <http://www.gnu.org/licenses/>.
8584 + *
8585 + * Ubicom32 implementation derived from (with many thanks):
8586 + * arch/m68knommu
8587 + * arch/blackfin
8588 + * arch/parisc
8589 + */
8590 +
8591 +#ifndef _ASM_UBICOM32_RANGE_PROTECT_ASM_H
8592 +#define _ASM_UBICOM32_RANGE_PROTECT_ASM_H
8593 +
8594 +#if defined(__ASSEMBLY__)
8595 +
8596 +#include <asm/thread-asm.h>
8597 +
8598 +/*
8599 + * You should only use the enable/disable ranges when you have the atomic lock,
8600 + * if you do not there will be problems.
8601 + */
8602 +
8603 +/*
8604 + * enable_kernel_ranges
8605 + * Enable the kernel ranges (disabling protection) for thread,
8606 + * where thread == (1 << thread number)
8607 + */
8608 +.macro enable_kernel_ranges thread
8609 +#ifdef CONFIG_PROTECT_KERNEL
8610 + or.4 I_RANGE0_EN, I_RANGE0_EN, \thread /* Enable Range Register */
8611 + or.4 D_RANGE0_EN, D_RANGE0_EN, \thread
8612 + or.4 D_RANGE1_EN, D_RANGE1_EN, \thread
8613 +#endif
8614 +.endm
8615 +
8616 +/*
8617 + * enable_kernel_ranges_for_current
8618 + * Enable the kernel ranges (disabling protection) for this thread
8619 + */
8620 +.macro enable_kernel_ranges_for_current scratch_reg
8621 +#ifdef CONFIG_PROTECT_KERNEL
8622 + thread_get_self_mask \scratch_reg
8623 + enable_kernel_ranges \scratch_reg
8624 +#endif
8625 +.endm
8626 +
8627 +/*
8628 + * disable_kernel_ranges
8629 + * Disables the kernel ranges (enabling protection) for thread
8630 + * where thread == (1 << thread number)
8631 + */
8632 +.macro disable_kernel_ranges thread
8633 +#ifdef CONFIG_PROTECT_KERNEL
8634 + not.4 \thread, \thread
8635 + and.4 I_RANGE0_EN, I_RANGE0_EN, \thread /* Disable Range Register */
8636 + and.4 D_RANGE0_EN, D_RANGE0_EN, \thread
8637 + and.4 D_RANGE1_EN, D_RANGE1_EN, \thread
8638 +#endif
8639 +.endm
8640 +
8641 +/*
8642 + * disable_kernel_ranges_for_current
8643 + * Disable kernel ranges (enabling protection) for this thread
8644 + */
8645 +.macro disable_kernel_ranges_for_current scratch_reg
8646 +#ifdef CONFIG_PROTECT_KERNEL
8647 + thread_get_self_mask \scratch_reg
8648 + disable_kernel_ranges \scratch_reg
8649 +#endif
8650 +.endm
8651 +#endif
8652 +
8653 +#endif /* _ASM_UBICOM32_RANGE_PROTECT_ASM_H */
8654 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/range-protect.h linux-2.6.28.10/arch/ubicom32/include/asm/range-protect.h
8655 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/range-protect.h 1970-01-01 02:00:00.000000000 +0200
8656 +++ linux-2.6.28.10/arch/ubicom32/include/asm/range-protect.h 2009-08-06 10:31:02.000000000 +0300
8657 @@ -0,0 +1,62 @@
8658 +/*
8659 + * arch/ubicom32/include/asm/range-protect.h
8660 + * Assembly macros declared in C for enabling memory protection.
8661 + *
8662 + * (C) Copyright 2009, Ubicom, Inc.
8663 + *
8664 + * This file is part of the Ubicom32 Linux Kernel Port.
8665 + *
8666 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8667 + * it and/or modify it under the terms of the GNU General Public License
8668 + * as published by the Free Software Foundation, either version 2 of the
8669 + * License, or (at your option) any later version.
8670 + *
8671 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8672 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8673 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8674 + * the GNU General Public License for more details.
8675 + *
8676 + * You should have received a copy of the GNU General Public License
8677 + * along with the Ubicom32 Linux Kernel Port. If not,
8678 + * see <http://www.gnu.org/licenses/>.
8679 + *
8680 + * Ubicom32 implementation derived from (with many thanks):
8681 + * arch/m68knommu
8682 + * arch/blackfin
8683 + * arch/parisc
8684 + */
8685 +
8686 +#ifndef _ASM_UBICOM32_RANGE_PROTECT_H
8687 +#define _ASM_UBICOM32_RANGE_PROTECT_H
8688 +
8689 +#if !defined(__ASSEMBLY__)
8690 +#include <asm/thread.h>
8691 +/*
8692 + * The following macros should be the identical to the ones in
8693 + * range-protect-asm.h
8694 + *
8695 + * You should only use the enable/disable ranges when you have the atomic lock,
8696 + * if you do not there will be problems.
8697 + */
8698 +
8699 +/*
8700 + * enable_kernel_ranges
8701 + * Enable the kernel ranges (disabling protection) for thread,
8702 + * where thread == (1 << thread number)
8703 + */
8704 +asm (
8705 + ".macro enable_kernel_ranges thread \n\t"
8706 +#ifdef CONFIG_PROTECT_KERNEL
8707 + " or.4 I_RANGE0_EN, I_RANGE0_EN, \\thread \n\t" /* Enable Range Register */
8708 + " or.4 D_RANGE0_EN, D_RANGE0_EN, \\thread \n\t"
8709 + " or.4 D_RANGE1_EN, D_RANGE1_EN, \\thread \n\t"
8710 +#endif
8711 + ".endm \n\t"
8712 +);
8713 +
8714 +#else /* __ASSEMBLY__ */
8715 +
8716 +#include <asm/range-protect-asm.h>
8717 +
8718 +#endif
8719 +#endif /* _ASM_UBICOM32_RANGE_PROTECT_H */
8720 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/resource.h linux-2.6.28.10/arch/ubicom32/include/asm/resource.h
8721 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/resource.h 1970-01-01 02:00:00.000000000 +0200
8722 +++ linux-2.6.28.10/arch/ubicom32/include/asm/resource.h 2009-08-06 10:31:02.000000000 +0300
8723 @@ -0,0 +1,33 @@
8724 +/*
8725 + * arch/ubicom32/include/asm/resource.h
8726 + * Generic definitions for Ubicom32 architecture.
8727 + *
8728 + * (C) Copyright 2009, Ubicom, Inc.
8729 + *
8730 + * This file is part of the Ubicom32 Linux Kernel Port.
8731 + *
8732 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8733 + * it and/or modify it under the terms of the GNU General Public License
8734 + * as published by the Free Software Foundation, either version 2 of the
8735 + * License, or (at your option) any later version.
8736 + *
8737 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8738 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8739 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8740 + * the GNU General Public License for more details.
8741 + *
8742 + * You should have received a copy of the GNU General Public License
8743 + * along with the Ubicom32 Linux Kernel Port. If not,
8744 + * see <http://www.gnu.org/licenses/>.
8745 + *
8746 + * Ubicom32 implementation derived from (with many thanks):
8747 + * arch/m68knommu
8748 + * arch/blackfin
8749 + * arch/parisc
8750 + */
8751 +#ifndef _ASM_UBICOM32_RESOURCE_H
8752 +#define _ASM_UBICOM32_RESOURCE_H
8753 +
8754 +#include <asm-generic/resource.h>
8755 +
8756 +#endif /* _ASM_UBICOM32_RESOURCE_H */
8757 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ring_tio.h linux-2.6.28.10/arch/ubicom32/include/asm/ring_tio.h
8758 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ring_tio.h 1970-01-01 02:00:00.000000000 +0200
8759 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ring_tio.h 2009-08-06 10:31:02.000000000 +0300
8760 @@ -0,0 +1,42 @@
8761 +/*
8762 + * arch/ubicom32/include/asm/ring_tio.h
8763 + * Ubicom32 architecture Ring TIO definitions.
8764 + *
8765 + * (C) Copyright 2009, Ubicom, Inc.
8766 + *
8767 + * This file is part of the Ubicom32 Linux Kernel Port.
8768 + *
8769 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8770 + * it and/or modify it under the terms of the GNU General Public License
8771 + * as published by the Free Software Foundation, either version 2 of the
8772 + * License, or (at your option) any later version.
8773 + *
8774 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8775 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8776 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8777 + * the GNU General Public License for more details.
8778 + *
8779 + * You should have received a copy of the GNU General Public License
8780 + * along with the Ubicom32 Linux Kernel Port. If not,
8781 + * see <http://www.gnu.org/licenses/>.
8782 + */
8783 +#ifndef _ASM_UBICOM32_RING_TIO_H
8784 +#define _ASM_UBICOM32_RING_TIO_H
8785 +
8786 +#include <asm/devtree.h>
8787 +
8788 +#define RING_TIO_NODE_VERSION 2
8789 +
8790 +/*
8791 + * Devtree node for ring
8792 + */
8793 +struct ring_tio_node {
8794 + struct devtree_node dn;
8795 +
8796 + u32_t version;
8797 + void *regs;
8798 +};
8799 +
8800 +extern void ring_tio_init(const char *node_name);
8801 +
8802 +#endif /* _ASM_UBICOM32_RING_TIO_H */
8803 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/scatterlist.h linux-2.6.28.10/arch/ubicom32/include/asm/scatterlist.h
8804 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/scatterlist.h 1970-01-01 02:00:00.000000000 +0200
8805 +++ linux-2.6.28.10/arch/ubicom32/include/asm/scatterlist.h 2009-08-06 10:31:02.000000000 +0300
8806 @@ -0,0 +1,49 @@
8807 +/*
8808 + * arch/ubicom32/include/asm/scatterlist.h
8809 + * Definitions of struct scatterlist for Ubicom32 architecture.
8810 + *
8811 + * (C) Copyright 2009, Ubicom, Inc.
8812 + *
8813 + * This file is part of the Ubicom32 Linux Kernel Port.
8814 + *
8815 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8816 + * it and/or modify it under the terms of the GNU General Public License
8817 + * as published by the Free Software Foundation, either version 2 of the
8818 + * License, or (at your option) any later version.
8819 + *
8820 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8821 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8822 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8823 + * the GNU General Public License for more details.
8824 + *
8825 + * You should have received a copy of the GNU General Public License
8826 + * along with the Ubicom32 Linux Kernel Port. If not,
8827 + * see <http://www.gnu.org/licenses/>.
8828 + *
8829 + * Ubicom32 implementation derived from (with many thanks):
8830 + * arch/m68knommu
8831 + * arch/blackfin
8832 + * arch/parisc
8833 + */
8834 +#ifndef _ASM_UBICOM32_SCATTERLIST_H
8835 +#define _ASM_UBICOM32_SCATTERLIST_H
8836 +
8837 +#include <linux/mm.h>
8838 +#include <asm/types.h>
8839 +
8840 +struct scatterlist {
8841 +#ifdef CONFIG_DEBUG_SG
8842 + unsigned long sg_magic;
8843 +#endif
8844 + unsigned long page_link;
8845 + unsigned int offset;
8846 + dma_addr_t dma_address;
8847 + unsigned int length;
8848 +};
8849 +
8850 +#define sg_dma_address(sg) ((sg)->dma_address)
8851 +#define sg_dma_len(sg) ((sg)->length)
8852 +
8853 +#define ISA_DMA_THRESHOLD (0xffffffff)
8854 +
8855 +#endif /* _ASM_UBICOM32_SCATTERLIST_H */
8856 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/sections.h linux-2.6.28.10/arch/ubicom32/include/asm/sections.h
8857 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/sections.h 1970-01-01 02:00:00.000000000 +0200
8858 +++ linux-2.6.28.10/arch/ubicom32/include/asm/sections.h 2009-08-06 10:31:02.000000000 +0300
8859 @@ -0,0 +1,33 @@
8860 +/*
8861 + * arch/ubicom32/include/asm/sections.h
8862 + * Generic sections.h definitions for Ubicom32 architecture.
8863 + *
8864 + * (C) Copyright 2009, Ubicom, Inc.
8865 + *
8866 + * This file is part of the Ubicom32 Linux Kernel Port.
8867 + *
8868 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8869 + * it and/or modify it under the terms of the GNU General Public License
8870 + * as published by the Free Software Foundation, either version 2 of the
8871 + * License, or (at your option) any later version.
8872 + *
8873 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8874 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8875 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8876 + * the GNU General Public License for more details.
8877 + *
8878 + * You should have received a copy of the GNU General Public License
8879 + * along with the Ubicom32 Linux Kernel Port. If not,
8880 + * see <http://www.gnu.org/licenses/>.
8881 + *
8882 + * Ubicom32 implementation derived from (with many thanks):
8883 + * arch/m68knommu
8884 + * arch/blackfin
8885 + * arch/parisc
8886 + */
8887 +#ifndef _ASM_UBICOM32_SECTIONS_H
8888 +#define _ASM_UBICOM32_SECTIONS_H
8889 +
8890 +#include <asm-generic/sections.h>
8891 +
8892 +#endif /* _ASM_UBICOM32_SECTIONS_H */
8893 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/segment.h linux-2.6.28.10/arch/ubicom32/include/asm/segment.h
8894 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/segment.h 1970-01-01 02:00:00.000000000 +0200
8895 +++ linux-2.6.28.10/arch/ubicom32/include/asm/segment.h 2009-08-06 10:31:02.000000000 +0300
8896 @@ -0,0 +1,78 @@
8897 +/*
8898 + * arch/ubicom32/include/asm/segment.h
8899 + * Memory segment definitions for Ubicom32 architecture.
8900 + *
8901 + * (C) Copyright 2009, Ubicom, Inc.
8902 + *
8903 + * This file is part of the Ubicom32 Linux Kernel Port.
8904 + *
8905 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8906 + * it and/or modify it under the terms of the GNU General Public License
8907 + * as published by the Free Software Foundation, either version 2 of the
8908 + * License, or (at your option) any later version.
8909 + *
8910 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8911 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8912 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8913 + * the GNU General Public License for more details.
8914 + *
8915 + * You should have received a copy of the GNU General Public License
8916 + * along with the Ubicom32 Linux Kernel Port. If not,
8917 + * see <http://www.gnu.org/licenses/>.
8918 + *
8919 + * Ubicom32 implementation derived from (with many thanks):
8920 + * arch/m68knommu
8921 + * arch/blackfin
8922 + * arch/parisc
8923 + */
8924 +#ifndef _ASM_UBICOM32_SEGMENT_H
8925 +#define _ASM_UBICOM32_SEGMENT_H
8926 +
8927 +/* define constants */
8928 +/* Address spaces (FC0-FC2) */
8929 +#define USER_DATA (1)
8930 +#ifndef __USER_DS
8931 +#define __USER_DS (USER_DATA)
8932 +#endif
8933 +#define USER_PROGRAM (2)
8934 +#define SUPER_DATA (5)
8935 +#ifndef __KERNEL_DS
8936 +#define __KERNEL_DS (SUPER_DATA)
8937 +#endif
8938 +#define SUPER_PROGRAM (6)
8939 +#define CPU_SPACE (7)
8940 +
8941 +#ifndef __ASSEMBLY__
8942 +
8943 +typedef struct {
8944 + unsigned long seg;
8945 +} mm_segment_t;
8946 +
8947 +#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
8948 +#define USER_DS MAKE_MM_SEG(__USER_DS)
8949 +#define KERNEL_DS MAKE_MM_SEG(__KERNEL_DS)
8950 +
8951 +/*
8952 + * Get/set the SFC/DFC registers for MOVES instructions
8953 + */
8954 +
8955 +static inline mm_segment_t get_fs(void)
8956 +{
8957 + return USER_DS;
8958 +}
8959 +
8960 +static inline mm_segment_t get_ds(void)
8961 +{
8962 + /* return the supervisor data space code */
8963 + return KERNEL_DS;
8964 +}
8965 +
8966 +static inline void set_fs(mm_segment_t val)
8967 +{
8968 +}
8969 +
8970 +#define segment_eq(a,b) ((a).seg == (b).seg)
8971 +
8972 +#endif /* __ASSEMBLY__ */
8973 +
8974 +#endif /* _ASM_UBICOM32_SEGMENT_H */
8975 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/semaphore.h linux-2.6.28.10/arch/ubicom32/include/asm/semaphore.h
8976 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/semaphore.h 1970-01-01 02:00:00.000000000 +0200
8977 +++ linux-2.6.28.10/arch/ubicom32/include/asm/semaphore.h 2009-08-06 10:31:02.000000000 +0300
8978 @@ -0,0 +1,140 @@
8979 +/*
8980 + * arch/ubicom32/include/asm/semaphore.h
8981 + * Interrupt-safe semaphores for Ubicom32 architecture.
8982 + *
8983 + * (C) Copyright 2009, Ubicom, Inc.
8984 + * (C) Copyright 1996 Linus Torvalds
8985 + * m68k version by Andreas Schwab
8986 + * Copyright (C) 2004 Microtronix Datacom Ltd
8987 + *
8988 + * This file is part of the Ubicom32 Linux Kernel Port.
8989 + *
8990 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
8991 + * it and/or modify it under the terms of the GNU General Public License
8992 + * as published by the Free Software Foundation, either version 2 of the
8993 + * License, or (at your option) any later version.
8994 + *
8995 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
8996 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
8997 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
8998 + * the GNU General Public License for more details.
8999 + *
9000 + * You should have received a copy of the GNU General Public License
9001 + * along with the Ubicom32 Linux Kernel Port. If not,
9002 + * see <http://www.gnu.org/licenses/>.
9003 + *
9004 + * Ubicom32 implementation derived from (with many thanks):
9005 + * arch/m68knommu
9006 + * arch/blackfin
9007 + * arch/parisc
9008 + */
9009 +#ifndef _ASM_UBICOM32_SEMAPHORE_H
9010 +#define _ASM_UBICOM32_SEMAPHORE_H
9011 +
9012 +#define RW_LOCK_BIAS 0x01000000
9013 +
9014 +#ifndef __ASSEMBLY__
9015 +
9016 +#include <linux/linkage.h>
9017 +#include <linux/wait.h>
9018 +#include <linux/spinlock.h>
9019 +#include <linux/rwsem.h>
9020 +
9021 +#include <asm/system.h>
9022 +#include <asm/atomic.h>
9023 +
9024 +struct semaphore {
9025 + atomic_t count;
9026 + atomic_t waking;
9027 + wait_queue_head_t wait;
9028 +};
9029 +
9030 +#define __SEMAPHORE_INITIALIZER(name, n) \
9031 +{ \
9032 + .count = ATOMIC_INIT(n), \
9033 + .waking = ATOMIC_INIT(0), \
9034 + .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
9035 +}
9036 +
9037 +#define __DECLARE_SEMAPHORE_GENERIC(name,count) \
9038 + struct semaphore name = __SEMAPHORE_INITIALIZER(name,count)
9039 +
9040 +#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)
9041 +#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)
9042 +
9043 +static inline void sema_init (struct semaphore *sem, int val)
9044 +{
9045 + *sem = (struct semaphore)__SEMAPHORE_INITIALIZER(*sem, val);
9046 +}
9047 +
9048 +static inline void init_MUTEX (struct semaphore *sem)
9049 +{
9050 + sema_init(sem, 1);
9051 +}
9052 +
9053 +static inline void init_MUTEX_LOCKED (struct semaphore *sem)
9054 +{
9055 + sema_init(sem, 0);
9056 +}
9057 +
9058 +asmlinkage void __down_failed(void /* special register calling convention */);
9059 +asmlinkage int __down_failed_interruptible(void /* params in registers */);
9060 +asmlinkage int __down_failed_trylock(void /* params in registers */);
9061 +asmlinkage void __up_wakeup(void /* special register calling convention */);
9062 +
9063 +asmlinkage void __down(struct semaphore * sem);
9064 +asmlinkage int __down_interruptible(struct semaphore * sem);
9065 +asmlinkage int __down_trylock(struct semaphore * sem);
9066 +asmlinkage void __up(struct semaphore * sem);
9067 +
9068 +extern spinlock_t semaphore_wake_lock;
9069 +
9070 +/*
9071 + * This is ugly, but we want the default case to fall through.
9072 + * "down_failed" is a special asm handler that calls the C
9073 + * routine that actually waits.
9074 + */
9075 +static inline void down(struct semaphore * sem)
9076 +{
9077 + might_sleep();
9078 +
9079 + if (atomic_dec_return(&sem->count) < 0)
9080 + __down(sem);
9081 +}
9082 +
9083 +static inline int down_interruptible(struct semaphore * sem)
9084 +{
9085 + int ret = 0;
9086 +
9087 +
9088 + might_sleep();
9089 +
9090 + if(atomic_dec_return(&sem->count) < 0)
9091 + ret = __down_interruptible(sem);
9092 + return ret;
9093 +}
9094 +
9095 +static inline int down_trylock(struct semaphore * sem)
9096 +{
9097 + int ret = 0;
9098 +
9099 + if (atomic_dec_return (&sem->count) < 0)
9100 + ret = __down_trylock(sem);
9101 + return ret;
9102 +}
9103 +
9104 +/*
9105 + * Note! This is subtle. We jump to wake people up only if
9106 + * the semaphore was negative (== somebody was waiting on it).
9107 + * The default case (no contention) will result in NO
9108 + * jumps for both down() and up().
9109 + */
9110 +static inline void up(struct semaphore * sem)
9111 +{
9112 + if (atomic_inc_return(&sem->count) <= 0)
9113 + __up(sem);
9114 +}
9115 +
9116 +#endif /* __ASSEMBLY__ */
9117 +
9118 +#endif /* _ASM_UBICOM32_SEMAPHORE_H */
9119 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/semaphore-helper.h linux-2.6.28.10/arch/ubicom32/include/asm/semaphore-helper.h
9120 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/semaphore-helper.h 1970-01-01 02:00:00.000000000 +0200
9121 +++ linux-2.6.28.10/arch/ubicom32/include/asm/semaphore-helper.h 2009-08-06 10:31:02.000000000 +0300
9122 @@ -0,0 +1,109 @@
9123 +/*
9124 + * arch/ubicom32/include/asm/semaphore-helper.h
9125 + * Semaphore related definitions for Ubicom32 architecture.
9126 + *
9127 + * (C) Copyright 2009, Ubicom, Inc.
9128 + *
9129 + * This file is part of the Ubicom32 Linux Kernel Port.
9130 + *
9131 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9132 + * it and/or modify it under the terms of the GNU General Public License
9133 + * as published by the Free Software Foundation, either version 2 of the
9134 + * License, or (at your option) any later version.
9135 + *
9136 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9137 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9138 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9139 + * the GNU General Public License for more details.
9140 + *
9141 + * You should have received a copy of the GNU General Public License
9142 + * along with the Ubicom32 Linux Kernel Port. If not,
9143 + * see <http://www.gnu.org/licenses/>.
9144 + *
9145 + * Ubicom32 implementation derived from (with many thanks):
9146 + * arch/m68knommu
9147 + * arch/blackfin
9148 + * arch/parisc
9149 + */
9150 +#ifndef _ASM_UBICOM32_SEMAPHORE_HELPER_H
9151 +#define _ASM_UBICOM32_SEMAPHORE_HELPER_H
9152 +
9153 +/*
9154 + * SMP- and interrupt-safe semaphores helper functions.
9155 + *
9156 + * (C) Copyright 1996 Linus Torvalds
9157 + *
9158 + * m68k version by Andreas Schwab
9159 + */
9160 +
9161 +
9162 +/*
9163 + * These two _must_ execute atomically wrt each other.
9164 + */
9165 +static inline void wake_one_more(struct semaphore * sem)
9166 +{
9167 + atomic_inc(&sem->waking);
9168 +}
9169 +
9170 +static inline int waking_non_zero(struct semaphore *sem)
9171 +{
9172 + int ret;
9173 + unsigned long flags;
9174 +
9175 + spin_lock_irqsave(&semaphore_wake_lock, flags);
9176 + ret = 0;
9177 + if (atomic_read(&sem->waking) > 0) {
9178 + atomic_dec(&sem->waking);
9179 + ret = 1;
9180 + }
9181 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
9182 + return ret;
9183 +}
9184 +
9185 +/*
9186 + * waking_non_zero_interruptible:
9187 + * 1 got the lock
9188 + * 0 go to sleep
9189 + * -EINTR interrupted
9190 + */
9191 +static inline int waking_non_zero_interruptible(struct semaphore *sem,
9192 + struct task_struct *tsk)
9193 +{
9194 + int ret;
9195 + unsigned long flags;
9196 +
9197 + spin_lock_irqsave(&semaphore_wake_lock, flags);
9198 + ret = 0;
9199 + if (atomic_read(&sem->waking) > 0) {
9200 + atomic_dec(&sem->waking);
9201 + ret = 1;
9202 + } else if (signal_pending(tsk)) {
9203 + atomic_inc(&sem->count);
9204 + ret = -EINTR;
9205 + }
9206 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
9207 + return ret;
9208 +}
9209 +
9210 +/*
9211 + * waking_non_zero_trylock:
9212 + * 1 failed to lock
9213 + * 0 got the lock
9214 + */
9215 +static inline int waking_non_zero_trylock(struct semaphore *sem)
9216 +{
9217 + int ret;
9218 + unsigned long flags;
9219 +
9220 + spin_lock_irqsave(&semaphore_wake_lock, flags);
9221 + ret = 1;
9222 + if (atomic_read(&sem->waking) > 0) {
9223 + atomic_dec(&sem->waking);
9224 + ret = 0;
9225 + } else
9226 + atomic_inc(&sem->count);
9227 + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
9228 + return ret;
9229 +}
9230 +
9231 +#endif /* _ASM_UBICOM32_SEMAPHORE_HELPER_H */
9232 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/sembuf.h linux-2.6.28.10/arch/ubicom32/include/asm/sembuf.h
9233 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/sembuf.h 1970-01-01 02:00:00.000000000 +0200
9234 +++ linux-2.6.28.10/arch/ubicom32/include/asm/sembuf.h 2009-08-06 10:31:02.000000000 +0300
9235 @@ -0,0 +1,52 @@
9236 +/*
9237 + * arch/ubicom32/include/asm/sembuf.h
9238 + * The semid64_ds structure for Ubicom32 architecture.
9239 + *
9240 + * (C) Copyright 2009, Ubicom, Inc.
9241 + *
9242 + * This file is part of the Ubicom32 Linux Kernel Port.
9243 + *
9244 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9245 + * it and/or modify it under the terms of the GNU General Public License
9246 + * as published by the Free Software Foundation, either version 2 of the
9247 + * License, or (at your option) any later version.
9248 + *
9249 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9250 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9251 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9252 + * the GNU General Public License for more details.
9253 + *
9254 + * You should have received a copy of the GNU General Public License
9255 + * along with the Ubicom32 Linux Kernel Port. If not,
9256 + * see <http://www.gnu.org/licenses/>.
9257 + *
9258 + * Ubicom32 implementation derived from (with many thanks):
9259 + * arch/m68knommu
9260 + * arch/blackfin
9261 + * arch/parisc
9262 + */
9263 +#ifndef _ASM_UBICOM32_SEMBUF_H
9264 +#define _ASM_UBICOM32_SEMBUF_H
9265 +
9266 +/*
9267 + * The semid64_ds structure for ubicom32 architecture.
9268 + * Note extra padding because this structure is passed back and forth
9269 + * between kernel and user space.
9270 + *
9271 + * Pad space is left for:
9272 + * - 64-bit time_t to solve y2038 problem
9273 + * - 2 miscellaneous 32-bit values
9274 + */
9275 +
9276 +struct semid64_ds {
9277 + struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
9278 + __kernel_time_t sem_otime; /* last semop time */
9279 + unsigned long __unused1;
9280 + __kernel_time_t sem_ctime; /* last change time */
9281 + unsigned long __unused2;
9282 + unsigned long sem_nsems; /* no. of semaphores in array */
9283 + unsigned long __unused3;
9284 + unsigned long __unused4;
9285 +};
9286 +
9287 +#endif /* _ASM_UBICOM32_SEMBUF_H */
9288 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/setup.h linux-2.6.28.10/arch/ubicom32/include/asm/setup.h
9289 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/setup.h 1970-01-01 02:00:00.000000000 +0200
9290 +++ linux-2.6.28.10/arch/ubicom32/include/asm/setup.h 2009-08-06 10:31:02.000000000 +0300
9291 @@ -0,0 +1,35 @@
9292 +/*
9293 + * arch/ubicom32/include/asm/setup.h
9294 + * Kernel command line length definition.
9295 + *
9296 + * (C) Copyright 2009, Ubicom, Inc.
9297 + * Copyright (C) 2004, Microtronix Datacom Ltd., All rights reserved.
9298 + *
9299 + * This file is part of the Ubicom32 Linux Kernel Port.
9300 + *
9301 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9302 + * it and/or modify it under the terms of the GNU General Public License
9303 + * as published by the Free Software Foundation, either version 2 of the
9304 + * License, or (at your option) any later version.
9305 + *
9306 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9307 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9308 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9309 + * the GNU General Public License for more details.
9310 + *
9311 + * You should have received a copy of the GNU General Public License
9312 + * along with the Ubicom32 Linux Kernel Port. If not,
9313 + * see <http://www.gnu.org/licenses/>.
9314 + *
9315 + * Ubicom32 implementation derived from (with many thanks):
9316 + * arch/m68knommu
9317 + * arch/blackfin
9318 + * arch/parisc
9319 + */
9320 +
9321 +#ifndef _ASM_UBICOM32_SETUP_H
9322 +#define _ASM_UBICOM32_SETUP_H
9323 +
9324 +#define COMMAND_LINE_SIZE 512
9325 +
9326 +#endif /* _ASM_UBICOM32_SETUP_H */
9327 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/shmbuf.h linux-2.6.28.10/arch/ubicom32/include/asm/shmbuf.h
9328 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/shmbuf.h 1970-01-01 02:00:00.000000000 +0200
9329 +++ linux-2.6.28.10/arch/ubicom32/include/asm/shmbuf.h 2009-08-06 10:31:02.000000000 +0300
9330 @@ -0,0 +1,69 @@
9331 +/*
9332 + * arch/ubicom32/include/asm/shmbuf.h
9333 + * The shmid64_ds structure for the Ubicom32 architecture.
9334 + *
9335 + * (C) Copyright 2009, Ubicom, Inc.
9336 + *
9337 + * This file is part of the Ubicom32 Linux Kernel Port.
9338 + *
9339 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9340 + * it and/or modify it under the terms of the GNU General Public License
9341 + * as published by the Free Software Foundation, either version 2 of the
9342 + * License, or (at your option) any later version.
9343 + *
9344 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9345 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9346 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9347 + * the GNU General Public License for more details.
9348 + *
9349 + * You should have received a copy of the GNU General Public License
9350 + * along with the Ubicom32 Linux Kernel Port. If not,
9351 + * see <http://www.gnu.org/licenses/>.
9352 + *
9353 + * Ubicom32 implementation derived from (with many thanks):
9354 + * arch/m68knommu
9355 + * arch/blackfin
9356 + * arch/parisc
9357 + */
9358 +#ifndef _ASM_UBICOM32_SHMBUF_H
9359 +#define _ASM_UBICOM32_SHMBUF_H
9360 +
9361 +/*
9362 + * The shmid64_ds structure for m68k architecture.
9363 + * Note extra padding because this structure is passed back and forth
9364 + * between kernel and user space.
9365 + *
9366 + * Pad space is left for:
9367 + * - 64-bit time_t to solve y2038 problem
9368 + * - 2 miscellaneous 32-bit values
9369 + */
9370 +
9371 +struct shmid64_ds {
9372 + struct ipc64_perm shm_perm; /* operation perms */
9373 + size_t shm_segsz; /* size of segment (bytes) */
9374 + __kernel_time_t shm_atime; /* last attach time */
9375 + unsigned long __unused1;
9376 + __kernel_time_t shm_dtime; /* last detach time */
9377 + unsigned long __unused2;
9378 + __kernel_time_t shm_ctime; /* last change time */
9379 + unsigned long __unused3;
9380 + __kernel_pid_t shm_cpid; /* pid of creator */
9381 + __kernel_pid_t shm_lpid; /* pid of last operator */
9382 + unsigned long shm_nattch; /* no. of current attaches */
9383 + unsigned long __unused4;
9384 + unsigned long __unused5;
9385 +};
9386 +
9387 +struct shminfo64 {
9388 + unsigned long shmmax;
9389 + unsigned long shmmin;
9390 + unsigned long shmmni;
9391 + unsigned long shmseg;
9392 + unsigned long shmall;
9393 + unsigned long __unused1;
9394 + unsigned long __unused2;
9395 + unsigned long __unused3;
9396 + unsigned long __unused4;
9397 +};
9398 +
9399 +#endif /* _ASM_UBICOM32_SHMBUF_H */
9400 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/shmparam.h linux-2.6.28.10/arch/ubicom32/include/asm/shmparam.h
9401 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/shmparam.h 1970-01-01 02:00:00.000000000 +0200
9402 +++ linux-2.6.28.10/arch/ubicom32/include/asm/shmparam.h 2009-08-06 10:31:02.000000000 +0300
9403 @@ -0,0 +1,35 @@
9404 +/*
9405 + * arch/ubicom32/include/asm/shmparam.h
9406 + * Shared memory definitions for Ubicom32 architecture.
9407 + *
9408 + * (C) Copyright 2009, Ubicom, Inc.
9409 + * Copyright (C) 2004 Microtronix Datacom Ltd
9410 + *
9411 + * This file is part of the Ubicom32 Linux Kernel Port.
9412 + *
9413 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9414 + * it and/or modify it under the terms of the GNU General Public License
9415 + * as published by the Free Software Foundation, either version 2 of the
9416 + * License, or (at your option) any later version.
9417 + *
9418 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9419 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9420 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9421 + * the GNU General Public License for more details.
9422 + *
9423 + * You should have received a copy of the GNU General Public License
9424 + * along with the Ubicom32 Linux Kernel Port. If not,
9425 + * see <http://www.gnu.org/licenses/>.
9426 + *
9427 + * Ubicom32 implementation derived from (with many thanks):
9428 + * arch/m68knommu
9429 + * arch/blackfin
9430 + * arch/parisc
9431 + * Alpha, ix86, M68K, Sparc, ...et al
9432 + */
9433 +#ifndef _ASM_UBICOM32_SHMPARAM_H
9434 +#define _ASM_UBICOM32_SHMPARAM_H
9435 +
9436 +#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */
9437 +
9438 +#endif /* _ASM_UBICOM32_SHMPARAM_H */
9439 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/sigcontext.h linux-2.6.28.10/arch/ubicom32/include/asm/sigcontext.h
9440 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/sigcontext.h 1970-01-01 02:00:00.000000000 +0200
9441 +++ linux-2.6.28.10/arch/ubicom32/include/asm/sigcontext.h 2009-08-06 10:31:02.000000000 +0300
9442 @@ -0,0 +1,37 @@
9443 +/*
9444 + * arch/ubicom32/include/asm/sigcontext.h
9445 + * Definition of sigcontext struct for Ubicom32 architecture.
9446 + *
9447 + * (C) Copyright 2009, Ubicom, Inc.
9448 + *
9449 + * This file is part of the Ubicom32 Linux Kernel Port.
9450 + *
9451 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9452 + * it and/or modify it under the terms of the GNU General Public License
9453 + * as published by the Free Software Foundation, either version 2 of the
9454 + * License, or (at your option) any later version.
9455 + *
9456 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9457 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9458 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9459 + * the GNU General Public License for more details.
9460 + *
9461 + * You should have received a copy of the GNU General Public License
9462 + * along with the Ubicom32 Linux Kernel Port. If not,
9463 + * see <http://www.gnu.org/licenses/>.
9464 + *
9465 + * Ubicom32 implementation derived from (with many thanks):
9466 + * arch/m68knommu
9467 + * arch/blackfin
9468 + * arch/parisc
9469 + */
9470 +#ifndef _ASM_UBICOM32_SIGCONTEXT_H
9471 +#define _ASM_UBICOM32_SIGCONTEXT_H
9472 +
9473 +#include <asm/ptrace.h>
9474 +
9475 +struct sigcontext {
9476 + struct pt_regs sc_regs;
9477 +};
9478 +
9479 +#endif /* _ASM_UBICOM32_SIGCONTEXT_H */
9480 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/siginfo.h linux-2.6.28.10/arch/ubicom32/include/asm/siginfo.h
9481 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/siginfo.h 1970-01-01 02:00:00.000000000 +0200
9482 +++ linux-2.6.28.10/arch/ubicom32/include/asm/siginfo.h 2009-08-06 10:31:02.000000000 +0300
9483 @@ -0,0 +1,33 @@
9484 +/*
9485 + * arch/ubicom32/include/asm/siginfo.h
9486 + * Generic siginfo.h definitions for Ubicom32 architecture.
9487 + *
9488 + * (C) Copyright 2009, Ubicom, Inc.
9489 + *
9490 + * This file is part of the Ubicom32 Linux Kernel Port.
9491 + *
9492 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9493 + * it and/or modify it under the terms of the GNU General Public License
9494 + * as published by the Free Software Foundation, either version 2 of the
9495 + * License, or (at your option) any later version.
9496 + *
9497 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9498 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9499 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9500 + * the GNU General Public License for more details.
9501 + *
9502 + * You should have received a copy of the GNU General Public License
9503 + * along with the Ubicom32 Linux Kernel Port. If not,
9504 + * see <http://www.gnu.org/licenses/>.
9505 + *
9506 + * Ubicom32 implementation derived from (with many thanks):
9507 + * arch/m68knommu
9508 + * arch/blackfin
9509 + * arch/parisc
9510 + */
9511 +#ifndef _ASM_UBICOM32_SIGINFO_H
9512 +#define _ASM_UBICOM32_SIGINFO_H
9513 +
9514 +#include <asm-generic/siginfo.h>
9515 +
9516 +#endif /* _ASM_UBICOM32_SIGINFO_H */
9517 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/signal.h linux-2.6.28.10/arch/ubicom32/include/asm/signal.h
9518 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/signal.h 1970-01-01 02:00:00.000000000 +0200
9519 +++ linux-2.6.28.10/arch/ubicom32/include/asm/signal.h 2009-08-12 13:08:37.000000000 +0300
9520 @@ -0,0 +1,180 @@
9521 +/*
9522 + * arch/ubicom32/include/asm/signal.h
9523 + * Signal related definitions for Ubicom32 architecture.
9524 + *
9525 + * (C) Copyright 2009, Ubicom, Inc.
9526 + *
9527 + * This file is part of the Ubicom32 Linux Kernel Port.
9528 + *
9529 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9530 + * it and/or modify it under the terms of the GNU General Public License
9531 + * as published by the Free Software Foundation, either version 2 of the
9532 + * License, or (at your option) any later version.
9533 + *
9534 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9535 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9536 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9537 + * the GNU General Public License for more details.
9538 + *
9539 + * You should have received a copy of the GNU General Public License
9540 + * along with the Ubicom32 Linux Kernel Port. If not,
9541 + * see <http://www.gnu.org/licenses/>.
9542 + *
9543 + * Ubicom32 implementation derived from (with many thanks):
9544 + * arch/m68knommu
9545 + * arch/blackfin
9546 + * arch/parisc
9547 + */
9548 +#ifndef _ASM_UBICOM32_SIGNAL_H
9549 +#define _ASM_UBICOM32_SIGNAL_H
9550 +
9551 +#include <linux/types.h>
9552 +
9553 +/* Avoid too many header ordering problems. */
9554 +struct siginfo;
9555 +
9556 +#ifdef __KERNEL__
9557 +/* Most things should be clean enough to redefine this at will, if care
9558 + is taken to make libc match. */
9559 +
9560 +#define _NSIG 64
9561 +#define _NSIG_BPW 32
9562 +#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
9563 +
9564 +typedef unsigned long old_sigset_t; /* at least 32 bits */
9565 +
9566 +typedef struct {
9567 + unsigned long sig[_NSIG_WORDS];
9568 +} sigset_t;
9569 +
9570 +#endif /* __KERNEL__ */
9571 +
9572 +#define SIGHUP 1
9573 +#define SIGINT 2
9574 +#define SIGQUIT 3
9575 +#define SIGILL 4
9576 +#define SIGTRAP 5
9577 +#define SIGABRT 6
9578 +#define SIGIOT 6
9579 +#define SIGBUS 7
9580 +#define SIGFPE 8
9581 +#define SIGKILL 9
9582 +#define SIGUSR1 10
9583 +#define SIGSEGV 11
9584 +#define SIGUSR2 12
9585 +#define SIGPIPE 13
9586 +#define SIGALRM 14
9587 +#define SIGTERM 15
9588 +#define SIGSTKFLT 16
9589 +#define SIGCHLD 17
9590 +#define SIGCONT 18
9591 +#define SIGSTOP 19
9592 +#define SIGTSTP 20
9593 +#define SIGTTIN 21
9594 +#define SIGTTOU 22
9595 +#define SIGURG 23
9596 +#define SIGXCPU 24
9597 +#define SIGXFSZ 25
9598 +#define SIGVTALRM 26
9599 +#define SIGPROF 27
9600 +#define SIGWINCH 28
9601 +#define SIGIO 29
9602 +#define SIGPOLL SIGIO
9603 +/*
9604 +#define SIGLOST 29
9605 +*/
9606 +#define SIGPWR 30
9607 +#define SIGSYS 31
9608 +#define SIGUNUSED 31
9609 +
9610 +/* These should not be considered constants from userland. */
9611 +#define SIGRTMIN 32
9612 +#define SIGRTMAX _NSIG
9613 +
9614 +/*
9615 + * SA_FLAGS values:
9616 + *
9617 + * SA_ONSTACK indicates that a registered stack_t will be used.
9618 + * SA_RESTART flag to get restarting signals (which were the default long ago)
9619 + * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
9620 + * SA_RESETHAND clears the handler when the signal is delivered.
9621 + * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
9622 + * SA_NODEFER prevents the current signal from being masked in the handler.
9623 + *
9624 + * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
9625 + * Unix names RESETHAND and NODEFER respectively.
9626 + */
9627 +#define SA_NOCLDSTOP 0x00000001
9628 +#define SA_NOCLDWAIT 0x00000002
9629 +#define SA_SIGINFO 0x00000004
9630 +#define SA_ONSTACK 0x08000000
9631 +#define SA_RESTART 0x10000000
9632 +#define SA_NODEFER 0x40000000
9633 +#define SA_RESETHAND 0x80000000
9634 +
9635 +#define SA_NOMASK SA_NODEFER
9636 +#define SA_ONESHOT SA_RESETHAND
9637 +
9638 +/*
9639 + * sigaltstack controls
9640 + */
9641 +#define SS_ONSTACK 1
9642 +#define SS_DISABLE 2
9643 +
9644 +#define MINSIGSTKSZ 2048
9645 +#define SIGSTKSZ 8192
9646 +
9647 +#include <asm-generic/signal.h>
9648 +
9649 +#ifdef __KERNEL__
9650 +struct old_sigaction {
9651 + __sighandler_t sa_handler;
9652 + old_sigset_t sa_mask;
9653 + unsigned long sa_flags;
9654 + void (*sa_restorer)(void);
9655 +};
9656 +
9657 +struct sigaction {
9658 + __sighandler_t sa_handler;
9659 + unsigned long sa_flags;
9660 + void (*sa_restorer)(void);
9661 + sigset_t sa_mask; /* mask last for extensibility */
9662 +};
9663 +
9664 +struct k_sigaction {
9665 + struct sigaction sa;
9666 +};
9667 +#else
9668 +/* Here we must cater to libcs that poke about in kernel headers. */
9669 +
9670 +struct sigaction {
9671 + union {
9672 + __sighandler_t _sa_handler;
9673 + void (*_sa_sigaction)(int, struct siginfo *, void *);
9674 + } _u;
9675 + sigset_t sa_mask;
9676 + unsigned long sa_flags;
9677 + void (*sa_restorer)(void);
9678 +};
9679 +
9680 +#define sa_handler _u._sa_handler
9681 +#define sa_sigaction _u._sa_sigaction
9682 +
9683 +#endif /* __KERNEL__ */
9684 +
9685 +typedef struct sigaltstack {
9686 + void *ss_sp;
9687 + int ss_flags;
9688 + size_t ss_size;
9689 +} stack_t;
9690 +
9691 +#ifdef __KERNEL__
9692 +
9693 +#include <asm/sigcontext.h>
9694 +#undef __HAVE_ARCH_SIG_BITOPS
9695 +
9696 +#define ptrace_signal_deliver(regs, cookie) do { } while (0)
9697 +
9698 +#endif /* __KERNEL__ */
9699 +
9700 +#endif /* _ASM_UBICOM32_SIGNAL_H */
9701 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/smp.h linux-2.6.28.10/arch/ubicom32/include/asm/smp.h
9702 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/smp.h 1970-01-01 02:00:00.000000000 +0200
9703 +++ linux-2.6.28.10/arch/ubicom32/include/asm/smp.h 2009-08-06 10:31:02.000000000 +0300
9704 @@ -0,0 +1,83 @@
9705 +/*
9706 + * arch/ubicom32/include/asm/smp.h
9707 + * SMP definitions for Ubicom32 architecture.
9708 + *
9709 + * (C) Copyright 2009, Ubicom, Inc.
9710 + *
9711 + * This file is part of the Ubicom32 Linux Kernel Port.
9712 + *
9713 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9714 + * it and/or modify it under the terms of the GNU General Public License
9715 + * as published by the Free Software Foundation, either version 2 of the
9716 + * License, or (at your option) any later version.
9717 + *
9718 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9719 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9720 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9721 + * the GNU General Public License for more details.
9722 + *
9723 + * You should have received a copy of the GNU General Public License
9724 + * along with the Ubicom32 Linux Kernel Port. If not,
9725 + * see <http://www.gnu.org/licenses/>.
9726 + *
9727 + * Ubicom32 implementation derived from (with many thanks):
9728 + * arch/m68knommu
9729 + * arch/blackfin
9730 + * arch/parisc
9731 + */
9732 +#ifndef _ASM_UBICOM32_SMP_H
9733 +#define _ASM_UBICOM32_SMP_H
9734 +
9735 +#ifndef ASSEMBLY
9736 +#include <linux/bitops.h>
9737 +#include <linux/threads.h>
9738 +#include <linux/cpumask.h>
9739 +#include <asm/ip5000.h>
9740 +
9741 +typedef unsigned long address_t;
9742 +extern cpumask_t cpu_online_map;
9743 +extern unsigned int smp_ipi_irq;
9744 +
9745 +/*
9746 + * This magic constant controls our willingness to transfer
9747 + * a process across CPUs.
9748 + *
9749 + * Such a transfer incurs cache and tlb
9750 + * misses. The current value is inherited from i386. Still needs
9751 + * to be tuned for parisc.
9752 + */
9753 +#define PROC_CHANGE_PENALTY 15 /* Schedule penalty */
9754 +#define NO_PROC_ID 0xFF /* No processor magic marker */
9755 +#define ANY_PROC_ID 0xFF /* Any processor magic marker */
9756 +
9757 +#ifdef CONFIG_SMP
9758 +#define raw_smp_processor_id() (current_thread_info()->cpu)
9759 +#endif /* CONFIG_SMP */
9760 +
9761 +static inline int __cpu_disable (void)
9762 +{
9763 + return 0;
9764 +}
9765 +
9766 +static inline void __cpu_die (unsigned int cpu)
9767 +{
9768 + while(1) {
9769 + };
9770 +}
9771 +
9772 +extern int __cpu_up(unsigned int cpu);
9773 +extern void smp_send_timer_all(void);
9774 +extern void smp_timer_broadcast(cpumask_t mask);
9775 +extern void smp_set_affinity(unsigned int irq, cpumask_t dest);
9776 +extern void arch_send_call_function_single_ipi(int cpu);
9777 +extern void arch_send_call_function_ipi(cpumask_t mask);
9778 +
9779 +/*
9780 + * TODO: Once these are fully tested, we should turn them into
9781 + * inline macros for performance.
9782 + */
9783 +extern unsigned long smp_get_affinity(unsigned int irq, int *all);
9784 +extern void smp_reset_ipi(unsigned long mask);
9785 +
9786 +#endif /* !ASSEMBLY */
9787 +#endif /* _ASM_UBICOM32_SMP_H */
9788 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/socket.h linux-2.6.28.10/arch/ubicom32/include/asm/socket.h
9789 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/socket.h 1970-01-01 02:00:00.000000000 +0200
9790 +++ linux-2.6.28.10/arch/ubicom32/include/asm/socket.h 2009-08-06 10:31:02.000000000 +0300
9791 @@ -0,0 +1,84 @@
9792 +/*
9793 + * arch/ubicom32/include/asm/socket.h
9794 + * Socket options definitions for Ubicom32 architecture.
9795 + *
9796 + * (C) Copyright 2009, Ubicom, Inc.
9797 + *
9798 + * This file is part of the Ubicom32 Linux Kernel Port.
9799 + *
9800 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9801 + * it and/or modify it under the terms of the GNU General Public License
9802 + * as published by the Free Software Foundation, either version 2 of the
9803 + * License, or (at your option) any later version.
9804 + *
9805 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9806 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9807 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9808 + * the GNU General Public License for more details.
9809 + *
9810 + * You should have received a copy of the GNU General Public License
9811 + * along with the Ubicom32 Linux Kernel Port. If not,
9812 + * see <http://www.gnu.org/licenses/>.
9813 + *
9814 + * Ubicom32 implementation derived from (with many thanks):
9815 + * arch/m68knommu
9816 + * arch/blackfin
9817 + * arch/parisc
9818 + */
9819 +#ifndef _ASM_UBICOM32_SOCKET_H
9820 +#define _ASM_UBICOM32_SOCKET_H
9821 +
9822 +#include <asm/sockios.h>
9823 +
9824 +/* For setsockopt(2) */
9825 +#define SOL_SOCKET 1
9826 +
9827 +#define SO_DEBUG 1
9828 +#define SO_REUSEADDR 2
9829 +#define SO_TYPE 3
9830 +#define SO_ERROR 4
9831 +#define SO_DONTROUTE 5
9832 +#define SO_BROADCAST 6
9833 +#define SO_SNDBUF 7
9834 +#define SO_RCVBUF 8
9835 +#define SO_SNDBUFFORCE 32
9836 +#define SO_RCVBUFFORCE 33
9837 +#define SO_KEEPALIVE 9
9838 +#define SO_OOBINLINE 10
9839 +#define SO_NO_CHECK 11
9840 +#define SO_PRIORITY 12
9841 +#define SO_LINGER 13
9842 +#define SO_BSDCOMPAT 14
9843 +/* To add :#define SO_REUSEPORT 15 */
9844 +#define SO_PASSCRED 16
9845 +#define SO_PEERCRED 17
9846 +#define SO_RCVLOWAT 18
9847 +#define SO_SNDLOWAT 19
9848 +#define SO_RCVTIMEO 20
9849 +#define SO_SNDTIMEO 21
9850 +
9851 +/* Security levels - as per NRL IPv6 - don't actually do anything */
9852 +#define SO_SECURITY_AUTHENTICATION 22
9853 +#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
9854 +#define SO_SECURITY_ENCRYPTION_NETWORK 24
9855 +
9856 +#define SO_BINDTODEVICE 25
9857 +
9858 +/* Socket filtering */
9859 +#define SO_ATTACH_FILTER 26
9860 +#define SO_DETACH_FILTER 27
9861 +
9862 +#define SO_PEERNAME 28
9863 +#define SO_TIMESTAMP 29
9864 +#define SCM_TIMESTAMP SO_TIMESTAMP
9865 +
9866 +#define SO_ACCEPTCONN 30
9867 +
9868 +#define SO_PEERSEC 31
9869 +#define SO_PASSSEC 34
9870 +#define SO_TIMESTAMPNS 35
9871 +#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
9872 +
9873 +#define SO_MARK 36
9874 +
9875 +#endif /* _ASM_UBICOM32_SOCKET_H */
9876 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/sockios.h linux-2.6.28.10/arch/ubicom32/include/asm/sockios.h
9877 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/sockios.h 1970-01-01 02:00:00.000000000 +0200
9878 +++ linux-2.6.28.10/arch/ubicom32/include/asm/sockios.h 2009-08-06 10:31:02.000000000 +0300
9879 @@ -0,0 +1,40 @@
9880 +/*
9881 + * arch/ubicom32/include/asm/sockios.h
9882 + * Socket-level ioctl definitions for Ubicom32 architecture.
9883 + *
9884 + * (C) Copyright 2009, Ubicom, Inc.
9885 + *
9886 + * This file is part of the Ubicom32 Linux Kernel Port.
9887 + *
9888 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9889 + * it and/or modify it under the terms of the GNU General Public License
9890 + * as published by the Free Software Foundation, either version 2 of the
9891 + * License, or (at your option) any later version.
9892 + *
9893 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9894 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9895 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9896 + * the GNU General Public License for more details.
9897 + *
9898 + * You should have received a copy of the GNU General Public License
9899 + * along with the Ubicom32 Linux Kernel Port. If not,
9900 + * see <http://www.gnu.org/licenses/>.
9901 + *
9902 + * Ubicom32 implementation derived from (with many thanks):
9903 + * arch/m68knommu
9904 + * arch/blackfin
9905 + * arch/parisc
9906 + */
9907 +#ifndef _ASM_UBICOM32_SOCKIOS_H
9908 +#define _ASM_UBICOM32_SOCKIOS_H
9909 +
9910 +/* Socket-level I/O control calls. */
9911 +#define FIOSETOWN 0x8901
9912 +#define SIOCSPGRP 0x8902
9913 +#define FIOGETOWN 0x8903
9914 +#define SIOCGPGRP 0x8904
9915 +#define SIOCATMARK 0x8905
9916 +#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */
9917 +#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */
9918 +
9919 +#endif /* _ASM_UBICOM32_SOCKIOS_H */
9920 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/spinlock.h linux-2.6.28.10/arch/ubicom32/include/asm/spinlock.h
9921 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/spinlock.h 1970-01-01 02:00:00.000000000 +0200
9922 +++ linux-2.6.28.10/arch/ubicom32/include/asm/spinlock.h 2009-08-06 10:31:02.000000000 +0300
9923 @@ -0,0 +1,293 @@
9924 +/*
9925 + * arch/ubicom32/include/asm/spinlock.h
9926 + * Spinlock related definitions for Ubicom32 architecture.
9927 + *
9928 + * (C) Copyright 2009, Ubicom, Inc.
9929 + *
9930 + * This file is part of the Ubicom32 Linux Kernel Port.
9931 + *
9932 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9933 + * it and/or modify it under the terms of the GNU General Public License
9934 + * as published by the Free Software Foundation, either version 2 of the
9935 + * License, or (at your option) any later version.
9936 + *
9937 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
9938 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
9939 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
9940 + * the GNU General Public License for more details.
9941 + *
9942 + * You should have received a copy of the GNU General Public License
9943 + * along with the Ubicom32 Linux Kernel Port. If not,
9944 + * see <http://www.gnu.org/licenses/>.
9945 + *
9946 + * Ubicom32 implementation derived from (with many thanks):
9947 + * arch/m68knommu
9948 + * arch/blackfin
9949 + * arch/parisc
9950 + */
9951 +#ifndef _ASM_UBICOM32_SPINLOCK_H
9952 +#define _ASM_UBICOM32_SPINLOCK_H
9953 +
9954 +#include <asm/system.h>
9955 +#include <asm/processor.h>
9956 +#include <asm/spinlock_types.h>
9957 +
9958 +/*
9959 + * __raw_spin_lock()
9960 + * Lock the lock.
9961 + */
9962 +static inline void __raw_spin_lock(raw_spinlock_t *x)
9963 +{
9964 + asm volatile (
9965 + "1: bset %0, %0, #0 \n\t"
9966 + " jmpne.f 1b \n\t"
9967 + : "+U4" (x->lock)
9968 + :
9969 + : "memory", "cc"
9970 + );
9971 +}
9972 +
9973 +/*
9974 + * __raw_spin_unlock()
9975 + * Unlock the lock.
9976 + */
9977 +static inline void __raw_spin_unlock(raw_spinlock_t *x)
9978 +{
9979 + asm volatile (
9980 + " bclr %0, %0, #0 \n\t"
9981 + : "+U4" (x->lock)
9982 + :
9983 + : "memory", "cc"
9984 + );
9985 +}
9986 +
9987 +/*
9988 + * __raw_spin_is_locked()
9989 + * Test if the lock is locked.
9990 + */
9991 +static inline int __raw_spin_is_locked(raw_spinlock_t *x)
9992 +{
9993 + return x->lock;
9994 +}
9995 +
9996 +/*
9997 + * __raw_spin_unlock_wait()
9998 + * Wait for the lock to be unlocked.
9999 + *
10000 + * Note: the caller has not guarantee that the lock will not
10001 + * be acquired before they get to it.
10002 + */
10003 +static inline void __raw_spin_unlock_wait(raw_spinlock_t *x)
10004 +{
10005 + do {
10006 + cpu_relax();
10007 + } while (__raw_spin_is_locked(x));
10008 +}
10009 +
10010 +/*
10011 + * __raw_spin_trylock()
10012 + * Try the lock, return 0 on failure, 1 on success.
10013 + */
10014 +static inline int __raw_spin_trylock(raw_spinlock_t *x)
10015 +{
10016 + int ret = 0;
10017 +
10018 + asm volatile (
10019 + " bset %1, %1, #0 \n\t"
10020 + " jmpne.f 1f \n\t"
10021 + " move.4 %0, #1 \n\t"
10022 + "1: \n\t"
10023 + : "+r" (ret), "+U4" (x->lock)
10024 + :
10025 + : "memory", "cc"
10026 + );
10027 +
10028 + return ret;
10029 +}
10030 +
10031 +/*
10032 + * __raw_spin_lock_flags()
10033 + * Spin waiting for the lock (enabling IRQ(s))
10034 + */
10035 +static inline void __raw_spin_lock_flags(raw_spinlock_t *x, unsigned long flags)
10036 +{
10037 + mb();
10038 + while (!__raw_spin_trylock(x)) {
10039 + /*
10040 + * If the flags from the IRQ are set, interrupts are disabled and we
10041 + * need to re-enable them.
10042 + */
10043 + if (!flags) {
10044 + cpu_relax();
10045 + } else {
10046 + raw_local_irq_enable();
10047 + cpu_relax();
10048 + raw_local_irq_disable();
10049 + }
10050 + }
10051 + mb();
10052 +}
10053 +
10054 +/*
10055 + * Read-write spinlocks, allowing multiple readers but only one writer.
10056 + * Linux rwlocks are unfair to writers; they can be starved for an indefinite
10057 + * time by readers. With care, they can also be taken in interrupt context.
10058 + *
10059 + * In Ubicom32 architecture implementation, we have a spinlock and a counter.
10060 + * Readers use the lock to serialise their access to the counter (which
10061 + * records how many readers currently hold the lock).
10062 + * Writers hold the spinlock, preventing any readers or other writers from
10063 + * grabbing the rwlock.
10064 + */
10065 +
10066 +/*
10067 + * __raw_read_lock()
10068 + * Increment the counter in the rwlock.
10069 + *
10070 + * Note that we have to ensure interrupts are disabled in case we're
10071 + * interrupted by some other code that wants to grab the same read lock
10072 + */
10073 +static inline void __raw_read_lock(raw_rwlock_t *rw)
10074 +{
10075 + unsigned long flags;
10076 + raw_local_irq_save(flags);
10077 + __raw_spin_lock_flags(&rw->lock, flags);
10078 + rw->counter++;
10079 + __raw_spin_unlock(&rw->lock);
10080 + raw_local_irq_restore(flags);
10081 +}
10082 +
10083 +/*
10084 + * __raw_read_unlock()
10085 + * Decrement the counter.
10086 + *
10087 + * Note that we have to ensure interrupts are disabled in case we're
10088 + * interrupted by some other code that wants to grab the same read lock
10089 + */
10090 +static inline void __raw_read_unlock(raw_rwlock_t *rw)
10091 +{
10092 + unsigned long flags;
10093 + raw_local_irq_save(flags);
10094 + __raw_spin_lock_flags(&rw->lock, flags);
10095 + rw->counter--;
10096 + __raw_spin_unlock(&rw->lock);
10097 + raw_local_irq_restore(flags);
10098 +}
10099 +
10100 +/*
10101 + * __raw_read_trylock()
10102 + * Increment the counter if we can.
10103 + *
10104 + * Note that we have to ensure interrupts are disabled in case we're
10105 + * interrupted by some other code that wants to grab the same read lock
10106 + */
10107 +static inline int __raw_read_trylock(raw_rwlock_t *rw)
10108 +{
10109 + unsigned long flags;
10110 + retry:
10111 + raw_local_irq_save(flags);
10112 + if (__raw_spin_trylock(&rw->lock)) {
10113 + rw->counter++;
10114 + __raw_spin_unlock(&rw->lock);
10115 + raw_local_irq_restore(flags);
10116 + return 1;
10117 + }
10118 +
10119 + raw_local_irq_restore(flags);
10120 +
10121 + /*
10122 + * If write-locked, we fail to acquire the lock
10123 + */
10124 + if (rw->counter < 0) {
10125 + return 0;
10126 + }
10127 +
10128 + /*
10129 + * Wait until we have a realistic chance at the lock
10130 + */
10131 + while (__raw_spin_is_locked(&rw->lock) && rw->counter >= 0) {
10132 + cpu_relax();
10133 + }
10134 +
10135 + goto retry;
10136 +}
10137 +
10138 +/*
10139 + * __raw_write_lock()
10140 + *
10141 + * Note that we have to ensure interrupts are disabled in case we're
10142 + * interrupted by some other code that wants to read_trylock() this lock
10143 + */
10144 +static inline void __raw_write_lock(raw_rwlock_t *rw)
10145 +{
10146 + unsigned long flags;
10147 +retry:
10148 + raw_local_irq_save(flags);
10149 + __raw_spin_lock_flags(&rw->lock, flags);
10150 +
10151 + if (rw->counter != 0) {
10152 + __raw_spin_unlock(&rw->lock);
10153 + raw_local_irq_restore(flags);
10154 +
10155 + while (rw->counter != 0)
10156 + cpu_relax();
10157 +
10158 + goto retry;
10159 + }
10160 +
10161 + rw->counter = -1; /* mark as write-locked */
10162 + mb();
10163 + raw_local_irq_restore(flags);
10164 +}
10165 +
10166 +static inline void __raw_write_unlock(raw_rwlock_t *rw)
10167 +{
10168 + rw->counter = 0;
10169 + __raw_spin_unlock(&rw->lock);
10170 +}
10171 +
10172 +/* Note that we have to ensure interrupts are disabled in case we're
10173 + * interrupted by some other code that wants to read_trylock() this lock */
10174 +static inline int __raw_write_trylock(raw_rwlock_t *rw)
10175 +{
10176 + unsigned long flags;
10177 + int result = 0;
10178 +
10179 + raw_local_irq_save(flags);
10180 + if (__raw_spin_trylock(&rw->lock)) {
10181 + if (rw->counter == 0) {
10182 + rw->counter = -1;
10183 + result = 1;
10184 + } else {
10185 + /* Read-locked. Oh well. */
10186 + __raw_spin_unlock(&rw->lock);
10187 + }
10188 + }
10189 + raw_local_irq_restore(flags);
10190 +
10191 + return result;
10192 +}
10193 +
10194 +/*
10195 + * read_can_lock - would read_trylock() succeed?
10196 + * @lock: the rwlock in question.
10197 + */
10198 +static inline int __raw_read_can_lock(raw_rwlock_t *rw)
10199 +{
10200 + return rw->counter >= 0;
10201 +}
10202 +
10203 +/*
10204 + * write_can_lock - would write_trylock() succeed?
10205 + * @lock: the rwlock in question.
10206 + */
10207 +static inline int __raw_write_can_lock(raw_rwlock_t *rw)
10208 +{
10209 + return !rw->counter;
10210 +}
10211 +
10212 +#define _raw_spin_relax(lock) cpu_relax()
10213 +#define _raw_read_relax(lock) cpu_relax()
10214 +#define _raw_write_relax(lock) cpu_relax()
10215 +
10216 +#endif /* _ASM_UBICOM32_SPINLOCK_H */
10217 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/spinlock_types.h linux-2.6.28.10/arch/ubicom32/include/asm/spinlock_types.h
10218 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/spinlock_types.h 1970-01-01 02:00:00.000000000 +0200
10219 +++ linux-2.6.28.10/arch/ubicom32/include/asm/spinlock_types.h 2009-08-06 10:31:02.000000000 +0300
10220 @@ -0,0 +1,43 @@
10221 +/*
10222 + * arch/ubicom32/include/asm/spinlock_types.h
10223 + * Spinlock related structure definitions for Ubicom32 architecture.
10224 + *
10225 + * (C) Copyright 2009, Ubicom, Inc.
10226 + *
10227 + * This file is part of the Ubicom32 Linux Kernel Port.
10228 + *
10229 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10230 + * it and/or modify it under the terms of the GNU General Public License
10231 + * as published by the Free Software Foundation, either version 2 of the
10232 + * License, or (at your option) any later version.
10233 + *
10234 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
10235 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
10236 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
10237 + * the GNU General Public License for more details.
10238 + *
10239 + * You should have received a copy of the GNU General Public License
10240 + * along with the Ubicom32 Linux Kernel Port. If not,
10241 + * see <http://www.gnu.org/licenses/>.
10242 + *
10243 + * Ubicom32 implementation derived from (with many thanks):
10244 + * arch/m68knommu
10245 + * arch/blackfin
10246 + * arch/parisc
10247 + */
10248 +#ifndef _ASM_UBICOM32_SPINLOCK_TYPES_H
10249 +#define _ASM_UBICOM32_SPINLOCK_TYPES_H
10250 +
10251 +typedef struct {
10252 + volatile unsigned int lock;
10253 +} raw_spinlock_t;
10254 +
10255 +typedef struct {
10256 + raw_spinlock_t lock;
10257 + volatile int counter;
10258 +} raw_rwlock_t;
10259 +
10260 +#define __RAW_SPIN_LOCK_UNLOCKED { 0 }
10261 +#define __RAW_RW_LOCK_UNLOCKED { __RAW_SPIN_LOCK_UNLOCKED, 0 }
10262 +
10263 +#endif /* _ASM_UBICOM32_SPINLOCK_TYPES_H */
10264 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/stacktrace.h linux-2.6.28.10/arch/ubicom32/include/asm/stacktrace.h
10265 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/stacktrace.h 1970-01-01 02:00:00.000000000 +0200
10266 +++ linux-2.6.28.10/arch/ubicom32/include/asm/stacktrace.h 2009-08-06 10:31:02.000000000 +0300
10267 @@ -0,0 +1,72 @@
10268 +/*
10269 + * arch/ubicom32/include/asm/stacktrace.h
10270 + * Stacktrace functions for the Ubicom32 architecture.
10271 + *
10272 + * (C) Copyright 2009, Ubicom, Inc.
10273 + *
10274 + * This file is part of the Ubicom32 Linux Kernel Port.
10275 + *
10276 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10277 + * it and/or modify it under the terms of the GNU General Public License
10278 + * as published by the Free Software Foundation, either version 2 of the
10279 + * License, or (at your option) any later version.
10280 + *
10281 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
10282 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
10283 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
10284 + * the GNU General Public License for more details.
10285 + *
10286 + * You should have received a copy of the GNU General Public License
10287 + * along with the Ubicom32 Linux Kernel Port. If not,
10288 + * see <http://www.gnu.org/licenses/>.
10289 + *
10290 + * Ubicom32 implementation derived from (with many thanks):
10291 + * arch/m68knommu
10292 + * arch/blackfin
10293 + * arch/parisc
10294 + */
10295 +#ifndef _ASM_UBICOM32_STACKTRACE_H
10296 +#define _ASM_UBICOM32_STACKTRACE_H
10297 +
10298 +#define between(a, b, c) (( \
10299 + ((unsigned long) a) >= ((unsigned long) b)) && \
10300 + (((unsigned long)a) <= ((unsigned long)c)))
10301 +
10302 +/*
10303 + * These symbols are filled in by the linker.
10304 + */
10305 +extern unsigned long _stext;
10306 +extern unsigned long _etext;
10307 +
10308 +/* OCM text goes from __ocm_text_run_begin to __data_begin */
10309 +extern unsigned long __ocm_text_run_begin;
10310 +extern unsigned long __data_begin;
10311 +
10312 +/* Account for OCM case - see stacktrace.c maybe combine(also trap.c) */
10313 +/*
10314 + * ubicom32_is_kernel()
10315 + *
10316 + * Check to see if the given address belongs to the kernel.
10317 + * NOMMU does not permit any other means.
10318 + */
10319 +static inline int ubicom32_is_kernel(unsigned long addr)
10320 +{
10321 + int is_kernel = between(addr, &_stext, &_etext) || \
10322 + between(addr, &__ocm_text_run_begin, &__data_begin);
10323 +
10324 +#ifdef CONFIG_MODULES
10325 + if (!is_kernel)
10326 + is_kernel = is_module_address(addr);
10327 +#endif
10328 + return is_kernel;
10329 +}
10330 +
10331 +extern unsigned long stacktrace_iterate(
10332 + unsigned long **trace,
10333 + unsigned long stext, unsigned long etext,
10334 + unsigned long ocm_stext, unsigned long ocm_etext,
10335 + unsigned long sstack, unsigned long estack);
10336 +#ifdef CONFIG_STACKTRACE
10337 +void stacktrace_save_entries(struct task_struct *tsk, struct stack_trace *trace, unsigned long sp);
10338 +#endif
10339 +#endif /* _ASM_UBICOM32_STACKTRACE_H */
10340 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/statfs.h linux-2.6.28.10/arch/ubicom32/include/asm/statfs.h
10341 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/statfs.h 1970-01-01 02:00:00.000000000 +0200
10342 +++ linux-2.6.28.10/arch/ubicom32/include/asm/statfs.h 2009-08-06 10:31:02.000000000 +0300
10343 @@ -0,0 +1,33 @@
10344 +/*
10345 + * arch/ubicom32/include/asm/statfs.h
10346 + * Generic statfs.h definitions
10347 + *
10348 + * (C) Copyright 2009, Ubicom, Inc.
10349 + *
10350 + * This file is part of the Ubicom32 Linux Kernel Port.
10351 + *
10352 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10353 + * it and/or modify it under the terms of the GNU General Public License
10354 + * as published by the Free Software Foundation, either version 2 of the
10355 + * License, or (at your option) any later version.
10356 + *
10357 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
10358 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
10359 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
10360 + * the GNU General Public License for more details.
10361 + *
10362 + * You should have received a copy of the GNU General Public License
10363 + * along with the Ubicom32 Linux Kernel Port. If not,
10364 + * see <http://www.gnu.org/licenses/>.
10365 + *
10366 + * Ubicom32 implementation derived from (with many thanks):
10367 + * arch/m68knommu
10368 + * arch/blackfin
10369 + * arch/parisc
10370 + */
10371 +#ifndef _ASM_UBICOM32_STATFS_H
10372 +#define _ASM_UBICOM32_STATFS_H
10373 +
10374 +#include <asm-generic/statfs.h>
10375 +
10376 +#endif /* _ASM_UBICOM32_STATFS_H */
10377 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/stat.h linux-2.6.28.10/arch/ubicom32/include/asm/stat.h
10378 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/stat.h 1970-01-01 02:00:00.000000000 +0200
10379 +++ linux-2.6.28.10/arch/ubicom32/include/asm/stat.h 2009-08-06 10:31:02.000000000 +0300
10380 @@ -0,0 +1,104 @@
10381 +/*
10382 + * arch/ubicom32/include/asm/stat.h
10383 + * File status definitions for Ubicom32 architecture.
10384 + *
10385 + * (C) Copyright 2009, Ubicom, Inc.
10386 + *
10387 + * This file is part of the Ubicom32 Linux Kernel Port.
10388 + *
10389 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10390 + * it and/or modify it under the terms of the GNU General Public License
10391 + * as published by the Free Software Foundation, either version 2 of the
10392 + * License, or (at your option) any later version.
10393 + *
10394 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
10395 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
10396 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
10397 + * the GNU General Public License for more details.
10398 + *
10399 + * You should have received a copy of the GNU General Public License
10400 + * along with the Ubicom32 Linux Kernel Port. If not,
10401 + * see <http://www.gnu.org/licenses/>.
10402 + *
10403 + * Ubicom32 implementation derived from (with many thanks):
10404 + * arch/m68knommu
10405 + * arch/blackfin
10406 + * arch/parisc
10407 + */
10408 +#ifndef _ASM_UBICOM32_STAT_H
10409 +#define _ASM_UBICOM32_STAT_H
10410 +
10411 +struct __old_kernel_stat {
10412 + unsigned short st_dev;
10413 + unsigned short st_ino;
10414 + unsigned short st_mode;
10415 + unsigned short st_nlink;
10416 + unsigned short st_uid;
10417 + unsigned short st_gid;
10418 + unsigned short st_rdev;
10419 + unsigned long st_size;
10420 + unsigned long st_atime;
10421 + unsigned long st_mtime;
10422 + unsigned long st_ctime;
10423 +};
10424 +
10425 +struct stat {
10426 + unsigned short st_dev;
10427 + unsigned short __pad1;
10428 + unsigned long st_ino;
10429 + unsigned short st_mode;
10430 + unsigned short st_nlink;
10431 + unsigned short st_uid;
10432 + unsigned short st_gid;
10433 + unsigned short st_rdev;
10434 + unsigned short __pad2;
10435 + unsigned long st_size;
10436 + unsigned long st_blksize;
10437 + unsigned long st_blocks;
10438 + unsigned long st_atime;
10439 + unsigned long __unused1;
10440 + unsigned long st_mtime;
10441 + unsigned long __unused2;
10442 + unsigned long st_ctime;
10443 + unsigned long __unused3;
10444 + unsigned long __unused4;
10445 + unsigned long __unused5;
10446 +};
10447 +
10448 +/* This matches struct stat64 in glibc2.1, hence the absolutely
10449 + * insane amounts of padding around dev_t's.
10450 + */
10451 +struct stat64 {
10452 + unsigned long long st_dev;
10453 + unsigned char __pad1[2];
10454 +
10455 +#define STAT64_HAS_BROKEN_ST_INO 1
10456 + unsigned long __st_ino;
10457 +
10458 + unsigned int st_mode;
10459 + unsigned int st_nlink;
10460 +
10461 + unsigned long st_uid;
10462 + unsigned long st_gid;
10463 +
10464 + unsigned long long st_rdev;
10465 + unsigned char __pad3[2];
10466 +
10467 + long long st_size;
10468 + unsigned long st_blksize;
10469 +
10470 + unsigned long long st_blocks; /* Number 512-byte blocks allocated. */
10471 +
10472 + unsigned long st_atime;
10473 + unsigned long st_atime_nsec;
10474 +
10475 + unsigned long st_mtime;
10476 + unsigned long st_mtime_nsec;
10477 +
10478 + unsigned long st_ctime;
10479 + unsigned long st_ctime_nsec;
10480 +
10481 + unsigned long long st_ino;
10482 +};
10483 +
10484 +#endif /* _ASM_UBICOM32_STAT_H */
10485 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/string.h linux-2.6.28.10/arch/ubicom32/include/asm/string.h
10486 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/string.h 1970-01-01 02:00:00.000000000 +0200
10487 +++ linux-2.6.28.10/arch/ubicom32/include/asm/string.h 2009-08-06 10:31:02.000000000 +0300
10488 @@ -0,0 +1,37 @@
10489 +/*
10490 + * arch/ubicom32/include/asm/string.h
10491 + * String operation definitions for Ubicom32 architecture.
10492 + *
10493 + * (C) Copyright 2009, Ubicom, Inc.
10494 + *
10495 + * This file is part of the Ubicom32 Linux Kernel Port.
10496 + *
10497 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10498 + * it and/or modify it under the terms of the GNU General Public License
10499 + * as published by the Free Software Foundation, either version 2 of the
10500 + * License, or (at your option) any later version.
10501 + *
10502 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
10503 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
10504 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
10505 + * the GNU General Public License for more details.
10506 + *
10507 + * You should have received a copy of the GNU General Public License
10508 + * along with the Ubicom32 Linux Kernel Port. If not,
10509 + * see <http://www.gnu.org/licenses/>.
10510 + *
10511 + * Ubicom32 implementation derived from (with many thanks):
10512 + * arch/m68knommu
10513 + * arch/blackfin
10514 + * arch/parisc
10515 + */
10516 +#ifndef _ASM_UBICOM32_STRING_H
10517 +#define _ASM_UBICOM32_STRING_H
10518 +
10519 +#define __HAVE_ARCH_MEMSET
10520 +extern void *memset(void *b, int c, size_t len);
10521 +
10522 +#define __HAVE_ARCH_MEMCPY
10523 +extern void *memcpy(void *to, const void *from, size_t len);
10524 +
10525 +#endif /* _ASM_UBICOM32_STRING_H */
10526 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/system.h linux-2.6.28.10/arch/ubicom32/include/asm/system.h
10527 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/system.h 1970-01-01 02:00:00.000000000 +0200
10528 +++ linux-2.6.28.10/arch/ubicom32/include/asm/system.h 2009-08-06 10:31:02.000000000 +0300
10529 @@ -0,0 +1,101 @@
10530 +/*
10531 + * arch/ubicom32/include/asm/system.h
10532 + * Low level switching definitions.
10533 + *
10534 + * (C) Copyright 2009, Ubicom, Inc.
10535 + *
10536 + * This file is part of the Ubicom32 Linux Kernel Port.
10537 + *
10538 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10539 + * it and/or modify it under the terms of the GNU General Public License
10540 + * as published by the Free Software Foundation, either version 2 of the
10541 + * License, or (at your option) any later version.
10542 + *
10543 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
10544 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
10545 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
10546 + * the GNU General Public License for more details.
10547 + *
10548 + * You should have received a copy of the GNU General Public License
10549 + * along with the Ubicom32 Linux Kernel Port. If not,
10550 + * see <http://www.gnu.org/licenses/>.
10551 + *
10552 + * Ubicom32 implementation derived from (with many thanks):
10553 + * arch/m68knommu
10554 + * arch/blackfin
10555 + * arch/parisc
10556 + */
10557 +#ifndef _ASM_UBICOM32_SYSTEM_H
10558 +#define _ASM_UBICOM32_SYSTEM_H
10559 +
10560 +#include <linux/irqflags.h>
10561 +#include <linux/linkage.h>
10562 +#include <asm/segment.h>
10563 +#include <asm/entry.h>
10564 +#include <asm/ldsr.h>
10565 +#include <asm/irq.h>
10566 +#include <asm/percpu.h>
10567 +#include <asm/ubicom32-common.h>
10568 +#include <asm/processor.h>
10569 +
10570 +/*
10571 + * switch_to(n) should switch tasks to task ptr, first checking that
10572 + * ptr isn't the current task, in which case it does nothing.
10573 + */
10574 +asmlinkage void resume(void);
10575 +extern void *__switch_to(struct task_struct *prev,
10576 + struct thread_struct *prev_switch,
10577 + struct thread_struct *next_switch);
10578 +
10579 +/*
10580 + * We will need a per linux thread sw_ksp for the switch_to macro to
10581 + * track the kernel stack pointer for the current thread on that linux thread.
10582 + */
10583 +#define switch_to(prev,next,last) \
10584 +({ \
10585 + void *_last; \
10586 + _last = (void *) \
10587 + __switch_to(prev, &prev->thread, &next->thread); \
10588 + (last) = _last; \
10589 +})
10590 +
10591 +/*
10592 + * Force strict CPU ordering.
10593 + * Not really required on ubicom32...
10594 + */
10595 +#define nop() asm volatile ("nop"::)
10596 +#define mb() asm volatile ("" : : :"memory")
10597 +#define rmb() asm volatile ("" : : :"memory")
10598 +#define wmb() asm volatile ("" : : :"memory")
10599 +#define set_mb(var, value) ({ (var) = (value); wmb(); })
10600 +
10601 +#ifdef CONFIG_SMP
10602 +#define smp_mb() mb()
10603 +#define smp_rmb() rmb()
10604 +#define smp_wmb() wmb()
10605 +#define smp_read_barrier_depends() read_barrier_depends()
10606 +#else
10607 +#define smp_mb() mb()
10608 +#define smp_rmb() rmb()
10609 +#define smp_wmb() wmb()
10610 +#define smp_read_barrier_depends() do { } while(0)
10611 +#endif
10612 +
10613 +#define read_barrier_depends() ((void)0)
10614 +
10615 +/*
10616 + * The following defines change how the scheduler calls the switch_to()
10617 + * macro.
10618 + *
10619 + * 1) The first causes the runqueue to be unlocked on entry to
10620 + * switch_to(). Since our ctx code does not play with the runqueue
10621 + * we do not need it unlocked.
10622 + *
10623 + * 2) The later turns interrupts on during a ctxsw to reduce the latency of
10624 + * interrupts during ctx. At this point in the port, we believe that this
10625 + * latency is not a problem since we have very little code to perform a ctxsw.
10626 + */
10627 +// #define __ARCH_WANT_UNLOCKED_CTXSW
10628 +// #define __ARCH_WANT_INTERRUPTS_ON_CTXSW
10629 +
10630 +#endif /* _ASM_UBICOM32_SYSTEM_H */
10631 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/termbits.h linux-2.6.28.10/arch/ubicom32/include/asm/termbits.h
10632 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/termbits.h 1970-01-01 02:00:00.000000000 +0200
10633 +++ linux-2.6.28.10/arch/ubicom32/include/asm/termbits.h 2009-08-06 10:31:02.000000000 +0300
10634 @@ -0,0 +1,227 @@
10635 +/*
10636 + * arch/ubicom32/include/asm/termbits.h
10637 + * Terminal/serial port definitions for Ubicom32 architecture.
10638 + *
10639 + * (C) Copyright 2009, Ubicom, Inc.
10640 + *
10641 + * This file is part of the Ubicom32 Linux Kernel Port.
10642 + *
10643 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10644 + * it and/or modify it under the terms of the GNU General Public License
10645 + * as published by the Free Software Foundation, either version 2 of the
10646 + * License, or (at your option) any later version.
10647 + *
10648 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
10649 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
10650 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
10651 + * the GNU General Public License for more details.
10652 + *
10653 + * You should have received a copy of the GNU General Public License
10654 + * along with the Ubicom32 Linux Kernel Port. If not,
10655 + * see <http://www.gnu.org/licenses/>.
10656 + *
10657 + * Ubicom32 implementation derived from (with many thanks):
10658 + * arch/m68knommu
10659 + * arch/blackfin
10660 + * arch/parisc
10661 + */
10662 +#ifndef _ASM_UBICOM32_TERMBITS_H
10663 +#define _ASM_UBICOM32_TERMBITS_H
10664 +
10665 +#include <linux/posix_types.h>
10666 +
10667 +typedef unsigned char cc_t;
10668 +typedef unsigned int speed_t;
10669 +typedef unsigned int tcflag_t;
10670 +
10671 +#define NCCS 19
10672 +struct termios {
10673 + tcflag_t c_iflag; /* input mode flags */
10674 + tcflag_t c_oflag; /* output mode flags */
10675 + tcflag_t c_cflag; /* control mode flags */
10676 + tcflag_t c_lflag; /* local mode flags */
10677 + cc_t c_line; /* line discipline */
10678 + cc_t c_cc[NCCS]; /* control characters */
10679 +};
10680 +
10681 +struct termios2 {
10682 + tcflag_t c_iflag; /* input mode flags */
10683 + tcflag_t c_oflag; /* output mode flags */
10684 + tcflag_t c_cflag; /* control mode flags */
10685 + tcflag_t c_lflag; /* local mode flags */
10686 + cc_t c_line; /* line discipline */
10687 + cc_t c_cc[NCCS]; /* control characters */
10688 + speed_t c_ispeed; /* input speed */
10689 + speed_t c_ospeed; /* output speed */
10690 +};
10691 +
10692 +struct ktermios {
10693 + tcflag_t c_iflag; /* input mode flags */
10694 + tcflag_t c_oflag; /* output mode flags */
10695 + tcflag_t c_cflag; /* control mode flags */
10696 + tcflag_t c_lflag; /* local mode flags */
10697 + cc_t c_line; /* line discipline */
10698 + cc_t c_cc[NCCS]; /* control characters */
10699 + speed_t c_ispeed; /* input speed */
10700 + speed_t c_ospeed; /* output speed */
10701 +};
10702 +
10703 +/* c_cc characters */
10704 +#define VINTR 0
10705 +#define VQUIT 1
10706 +#define VERASE 2
10707 +#define VKILL 3
10708 +#define VEOF 4
10709 +#define VTIME 5
10710 +#define VMIN 6
10711 +#define VSWTC 7
10712 +#define VSTART 8
10713 +#define VSTOP 9
10714 +#define VSUSP 10
10715 +#define VEOL 11
10716 +#define VREPRINT 12
10717 +#define VDISCARD 13
10718 +#define VWERASE 14
10719 +#define VLNEXT 15
10720 +#define VEOL2 16
10721 +
10722 +
10723 +/* c_iflag bits */
10724 +#define IGNBRK 0000001
10725 +#define BRKINT 0000002
10726 +#define IGNPAR 0000004
10727 +#define PARMRK 0000010
10728 +#define INPCK 0000020
10729 +#define ISTRIP 0000040
10730 +#define INLCR 0000100
10731 +#define IGNCR 0000200
10732 +#define ICRNL 0000400
10733 +#define IUCLC 0001000
10734 +#define IXON 0002000
10735 +#define IXANY 0004000
10736 +#define IXOFF 0010000
10737 +#define IMAXBEL 0020000
10738 +#define IUTF8 0040000
10739 +
10740 +/* c_oflag bits */
10741 +#define OPOST 0000001
10742 +#define OLCUC 0000002
10743 +#define ONLCR 0000004
10744 +#define OCRNL 0000010
10745 +#define ONOCR 0000020
10746 +#define ONLRET 0000040
10747 +#define OFILL 0000100
10748 +#define OFDEL 0000200
10749 +#define NLDLY 0000400
10750 +#define NL0 0000000
10751 +#define NL1 0000400
10752 +#define CRDLY 0003000
10753 +#define CR0 0000000
10754 +#define CR1 0001000
10755 +#define CR2 0002000
10756 +#define CR3 0003000
10757 +#define TABDLY 0014000
10758 +#define TAB0 0000000
10759 +#define TAB1 0004000
10760 +#define TAB2 0010000
10761 +#define TAB3 0014000
10762 +#define XTABS 0014000
10763 +#define BSDLY 0020000
10764 +#define BS0 0000000
10765 +#define BS1 0020000
10766 +#define VTDLY 0040000
10767 +#define VT0 0000000
10768 +#define VT1 0040000
10769 +#define FFDLY 0100000
10770 +#define FF0 0000000
10771 +#define FF1 0100000
10772 +
10773 +/* c_cflag bit meaning */
10774 +#define CBAUD 0010017
10775 +#define B0 0000000 /* hang up */
10776 +#define B50 0000001
10777 +#define B75 0000002
10778 +#define B110 0000003
10779 +#define B134 0000004
10780 +#define B150 0000005
10781 +#define B200 0000006
10782 +#define B300 0000007
10783 +#define B600 0000010
10784 +#define B1200 0000011
10785 +#define B1800 0000012
10786 +#define B2400 0000013
10787 +#define B4800 0000014
10788 +#define B9600 0000015
10789 +#define B19200 0000016
10790 +#define B38400 0000017
10791 +#define EXTA B19200
10792 +#define EXTB B38400
10793 +#define CSIZE 0000060
10794 +#define CS5 0000000
10795 +#define CS6 0000020
10796 +#define CS7 0000040
10797 +#define CS8 0000060
10798 +#define CSTOPB 0000100
10799 +#define CREAD 0000200
10800 +#define PARENB 0000400
10801 +#define PARODD 0001000
10802 +#define HUPCL 0002000
10803 +#define CLOCAL 0004000
10804 +#define CBAUDEX 0010000
10805 +#define BOTHER 0010000
10806 +#define B57600 0010001
10807 +#define B115200 0010002
10808 +#define B230400 0010003
10809 +#define B460800 0010004
10810 +#define B500000 0010005
10811 +#define B576000 0010006
10812 +#define B921600 0010007
10813 +#define B1000000 0010010
10814 +#define B1152000 0010011
10815 +#define B1500000 0010012
10816 +#define B2000000 0010013
10817 +#define B2500000 0010014
10818 +#define B3000000 0010015
10819 +#define B3500000 0010016
10820 +#define B4000000 0010017
10821 +#define CIBAUD 002003600000 /* input baud rate */
10822 +#define CMSPAR 010000000000 /* mark or space (stick) parity */
10823 +#define CRTSCTS 020000000000 /* flow control */
10824 +
10825 +#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */
10826 +
10827 +/* c_lflag bits */
10828 +#define ISIG 0000001
10829 +#define ICANON 0000002
10830 +#define XCASE 0000004
10831 +#define ECHO 0000010
10832 +#define ECHOE 0000020
10833 +#define ECHOK 0000040
10834 +#define ECHONL 0000100
10835 +#define NOFLSH 0000200
10836 +#define TOSTOP 0000400
10837 +#define ECHOCTL 0001000
10838 +#define ECHOPRT 0002000
10839 +#define ECHOKE 0004000
10840 +#define FLUSHO 0010000
10841 +#define PENDIN 0040000
10842 +#define IEXTEN 0100000
10843 +
10844 +
10845 +/* tcflow() and TCXONC use these */
10846 +#define TCOOFF 0
10847 +#define TCOON 1
10848 +#define TCIOFF 2
10849 +#define TCION 3
10850 +
10851 +/* tcflush() and TCFLSH use these */
10852 +#define TCIFLUSH 0
10853 +#define TCOFLUSH 1
10854 +#define TCIOFLUSH 2
10855 +
10856 +/* tcsetattr uses these */
10857 +#define TCSANOW 0
10858 +#define TCSADRAIN 1
10859 +#define TCSAFLUSH 2
10860 +
10861 +#endif /* _ASM_UBICOM32_TERMBITS_H */
10862 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/termios.h linux-2.6.28.10/arch/ubicom32/include/asm/termios.h
10863 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/termios.h 1970-01-01 02:00:00.000000000 +0200
10864 +++ linux-2.6.28.10/arch/ubicom32/include/asm/termios.h 2009-08-06 10:31:02.000000000 +0300
10865 @@ -0,0 +1,119 @@
10866 +/*
10867 + * arch/ubicom32/include/asm/termios.h
10868 + * Ubicom32 termio definitions.
10869 + *
10870 + * (C) Copyright 2009, Ubicom, Inc.
10871 + *
10872 + * This file is part of the Ubicom32 Linux Kernel Port.
10873 + *
10874 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10875 + * it and/or modify it under the terms of the GNU General Public License
10876 + * as published by the Free Software Foundation, either version 2 of the
10877 + * License, or (at your option) any later version.
10878 + *
10879 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
10880 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
10881 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
10882 + * the GNU General Public License for more details.
10883 + *
10884 + * You should have received a copy of the GNU General Public License
10885 + * along with the Ubicom32 Linux Kernel Port. If not,
10886 + * see <http://www.gnu.org/licenses/>.
10887 + *
10888 + * Ubicom32 implementation derived from (with many thanks):
10889 + * arch/m68knommu
10890 + * arch/blackfin
10891 + * arch/parisc
10892 + */
10893 +#ifndef _ASM_UBICOM32_TERMIOS_H
10894 +#define _ASM_UBICOM32_TERMIOS_H
10895 +
10896 +#include <asm/termbits.h>
10897 +#include <asm/ioctls.h>
10898 +
10899 +struct winsize {
10900 + unsigned short ws_row;
10901 + unsigned short ws_col;
10902 + unsigned short ws_xpixel;
10903 + unsigned short ws_ypixel;
10904 +};
10905 +
10906 +#define NCC 8
10907 +struct termio {
10908 + unsigned short c_iflag; /* input mode flags */
10909 + unsigned short c_oflag; /* output mode flags */
10910 + unsigned short c_cflag; /* control mode flags */
10911 + unsigned short c_lflag; /* local mode flags */
10912 + unsigned char c_line; /* line discipline */
10913 + unsigned char c_cc[NCC]; /* control characters */
10914 +};
10915 +
10916 +#ifdef __KERNEL__
10917 +/* intr=^C quit=^| erase=del kill=^U
10918 + eof=^D vtime=\0 vmin=\1 sxtc=\0
10919 + start=^Q stop=^S susp=^Z eol=\0
10920 + reprint=^R discard=^U werase=^W lnext=^V
10921 + eol2=\0
10922 +*/
10923 +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
10924 +#endif
10925 +
10926 +/* modem lines */
10927 +#define TIOCM_LE 0x001
10928 +#define TIOCM_DTR 0x002
10929 +#define TIOCM_RTS 0x004
10930 +#define TIOCM_ST 0x008
10931 +#define TIOCM_SR 0x010
10932 +#define TIOCM_CTS 0x020
10933 +#define TIOCM_CAR 0x040
10934 +#define TIOCM_RNG 0x080
10935 +#define TIOCM_DSR 0x100
10936 +#define TIOCM_CD TIOCM_CAR
10937 +#define TIOCM_RI TIOCM_RNG
10938 +#define TIOCM_OUT1 0x2000
10939 +#define TIOCM_OUT2 0x4000
10940 +#define TIOCM_LOOP 0x8000
10941 +
10942 +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
10943 +
10944 +#ifdef __KERNEL__
10945 +
10946 +/*
10947 + * Translate a "termio" structure into a "termios". Ugh.
10948 + */
10949 +#define user_termio_to_kernel_termios(termios, termio) \
10950 +({ \
10951 + unsigned short tmp; \
10952 + get_user(tmp, &(termio)->c_iflag); \
10953 + (termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \
10954 + get_user(tmp, &(termio)->c_oflag); \
10955 + (termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \
10956 + get_user(tmp, &(termio)->c_cflag); \
10957 + (termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \
10958 + get_user(tmp, &(termio)->c_lflag); \
10959 + (termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \
10960 + get_user((termios)->c_line, &(termio)->c_line); \
10961 + copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
10962 +})
10963 +
10964 +/*
10965 + * Translate a "termios" structure into a "termio". Ugh.
10966 + */
10967 +#define kernel_termios_to_user_termio(termio, termios) \
10968 +({ \
10969 + put_user((termios)->c_iflag, &(termio)->c_iflag); \
10970 + put_user((termios)->c_oflag, &(termio)->c_oflag); \
10971 + put_user((termios)->c_cflag, &(termio)->c_cflag); \
10972 + put_user((termios)->c_lflag, &(termio)->c_lflag); \
10973 + put_user((termios)->c_line, &(termio)->c_line); \
10974 + copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
10975 +})
10976 +
10977 +#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios2))
10978 +#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2))
10979 +#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
10980 +#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
10981 +
10982 +#endif /* __KERNEL__ */
10983 +
10984 +#endif /* _ASM_UBICOM32_TERMIOS_H */
10985 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/thread-asm.h linux-2.6.28.10/arch/ubicom32/include/asm/thread-asm.h
10986 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/thread-asm.h 1970-01-01 02:00:00.000000000 +0200
10987 +++ linux-2.6.28.10/arch/ubicom32/include/asm/thread-asm.h 2009-08-06 10:31:02.000000000 +0300
10988 @@ -0,0 +1,49 @@
10989 +/*
10990 + * arch/ubicom32/include/asm/thread-asm.h
10991 + * Ubicom32 architecture specific thread definitions.
10992 + *
10993 + * (C) Copyright 2009, Ubicom, Inc.
10994 + *
10995 + * This file is part of the Ubicom32 Linux Kernel Port.
10996 + *
10997 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10998 + * it and/or modify it under the terms of the GNU General Public License
10999 + * as published by the Free Software Foundation, either version 2 of the
11000 + * License, or (at your option) any later version.
11001 + *
11002 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11003 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11004 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11005 + * the GNU General Public License for more details.
11006 + *
11007 + * You should have received a copy of the GNU General Public License
11008 + * along with the Ubicom32 Linux Kernel Port. If not,
11009 + * see <http://www.gnu.org/licenses/>.
11010 + *
11011 + * Ubicom32 implementation derived from (with many thanks):
11012 + * arch/m68knommu
11013 + * arch/blackfin
11014 + * arch/parisc
11015 + */
11016 +#ifndef _ASM_UBICOM32_THREAD_ASM_H
11017 +#define _ASM_UBICOM32_THREAD_ASM_H
11018 +
11019 +/*
11020 + * thread_get_self
11021 + * Read and shift the current thread into reg
11022 + */
11023 +.macro thread_get_self reg
11024 + lsr.4 \reg, ROSR, #2
11025 + and.4 \reg, #31, \reg /* Mask to get thread number into register */
11026 +.endm
11027 +
11028 +/*
11029 + * thread_get_self_mask
11030 + * Read and shift the current thread mask into reg
11031 + */
11032 +.macro thread_get_self_mask reg
11033 + lsr.4 \reg, ROSR, #2
11034 + lsl.4 \reg, #1, \reg /* Thread bit */
11035 +.endm
11036 +
11037 +#endif /* _ASM_UBICOM32_THREAD_ASM_H */
11038 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/thread.h linux-2.6.28.10/arch/ubicom32/include/asm/thread.h
11039 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/thread.h 1970-01-01 02:00:00.000000000 +0200
11040 +++ linux-2.6.28.10/arch/ubicom32/include/asm/thread.h 2009-08-06 10:31:02.000000000 +0300
11041 @@ -0,0 +1,313 @@
11042 +/*
11043 + * arch/ubicom32/include/asm/thread.h
11044 + * Ubicom32 architecture specific thread definitions.
11045 + *
11046 + * (C) Copyright 2009, Ubicom, Inc.
11047 + *
11048 + * This file is part of the Ubicom32 Linux Kernel Port.
11049 + *
11050 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11051 + * it and/or modify it under the terms of the GNU General Public License
11052 + * as published by the Free Software Foundation, either version 2 of the
11053 + * License, or (at your option) any later version.
11054 + *
11055 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11056 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11057 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11058 + * the GNU General Public License for more details.
11059 + *
11060 + * You should have received a copy of the GNU General Public License
11061 + * along with the Ubicom32 Linux Kernel Port. If not,
11062 + * see <http://www.gnu.org/licenses/>.
11063 + *
11064 + * Ubicom32 implementation derived from (with many thanks):
11065 + * arch/m68knommu
11066 + * arch/blackfin
11067 + * arch/parisc
11068 + */
11069 +#ifndef _ASM_UBICOM32_THREAD_H
11070 +#define _ASM_UBICOM32_THREAD_H
11071 +
11072 +#if !defined(__ASSEMBLY__)
11073 +
11074 +#include <asm/ptrace.h>
11075 +#include <asm/ubicom32-common.h>
11076 +
11077 +typedef int thread_t;
11078 +typedef unsigned char thread_type_t;
11079 +typedef void (*thread_exec_fn_t)(void *arg);
11080 +
11081 +#define THREAD_NULL 0x40
11082 +#define THREAD_TYPE_HRT (1 << 0)
11083 +#define THREAD_TYPE_SPECIAL 0
11084 +#define THREAD_TYPE_NORMAL 0
11085 +#define THREAD_TYPE_BACKGROUND (1 << 1)
11086 +
11087 +/*
11088 + * This is the upper bound on the maximum hardware threads that one will find
11089 + * on a Ubicom processor. It is used to size per hardware thread data structures.
11090 + */
11091 +#define THREAD_ARCHITECTURAL_MAX 16
11092 +
11093 +/*
11094 + * TODO: Rename this at some point to be thread_
11095 + */
11096 +extern unsigned int sw_ksp[THREAD_ARCHITECTURAL_MAX];
11097 +
11098 +
11099 +/*
11100 + * thread_get_self()
11101 + */
11102 +static inline thread_t thread_get_self(void)
11103 +{
11104 + thread_t result;
11105 + asm (
11106 + "lsr.4 %0, ROSR, #2 \n\t"
11107 + : "=d" (result)
11108 + :
11109 + : "cc"
11110 + );
11111 + return result & 31;
11112 +}
11113 +
11114 +/*
11115 + * thread_suspend()
11116 + */
11117 +static inline void thread_suspend(void)
11118 +{
11119 + asm volatile (
11120 + "suspend\n\t"
11121 + :
11122 + :
11123 + );
11124 +}
11125 +
11126 +/*
11127 + * thread_resume()
11128 + */
11129 +static inline void thread_resume(thread_t thread)
11130 +{
11131 + asm volatile (
11132 + "move.4 MT_ACTIVE_SET, %0 \n\t"
11133 + "pipe_flush 0 \n\t"
11134 + "pipe_flush 0 \n\t"
11135 + :
11136 + : "d" (1 << thread)
11137 + );
11138 +}
11139 +
11140 +
11141 +
11142 +/*
11143 + * thread_enable_mask()
11144 + * Enable all threads in the mask.
11145 + *
11146 + * All writes to MT_EN must be protected by the MT_EN_LOCK bit
11147 + */
11148 +static inline void thread_enable_mask(unsigned int mask)
11149 +{
11150 + /*
11151 + * must flush the pipeline twice.
11152 + * first pipe_flush is to ensure write to MT_EN is completed
11153 + * second one is to ensure any new instructions from
11154 + * the targeted thread (the one being disabled), that
11155 + * are issued while the write to MT_EN is being executed,
11156 + * are completed.
11157 + */
11158 + UBICOM32_LOCK(MT_EN_LOCK_BIT);
11159 + asm volatile (
11160 + "or.4 MT_EN, MT_EN, %0 \n\t"
11161 + "pipe_flush 0 \n\t"
11162 + "pipe_flush 0 \n\t"
11163 + :
11164 + : "d" (mask)
11165 + : "cc"
11166 + );
11167 + UBICOM32_UNLOCK(MT_EN_LOCK_BIT);
11168 +}
11169 +
11170 +/*
11171 + * thread_enable()
11172 + */
11173 +static inline void thread_enable(thread_t thread)
11174 +{
11175 + thread_enable_mask(1 << thread);
11176 +}
11177 +
11178 +/*
11179 + * thread_disable_mask()
11180 + * Disable all threads in the mask.
11181 + *
11182 + * All writes to MT_EN must be protected by the MT_EN_LOCK bit
11183 + */
11184 +static inline void thread_disable_mask(unsigned int mask)
11185 +{
11186 + /*
11187 + * must flush the pipeline twice.
11188 + * first pipe_flush is to ensure write to MT_EN is completed
11189 + * second one is to ensure any new instructions from
11190 + * the targeted thread (the one being disabled), that
11191 + * are issued while the write to MT_EN is being executed,
11192 + * are completed.
11193 + */
11194 + UBICOM32_LOCK(MT_EN_LOCK_BIT);
11195 + asm volatile (
11196 + "and.4 MT_EN, MT_EN, %0 \n\t"
11197 + "pipe_flush 0 \n\t"
11198 + "pipe_flush 0 \n\t"
11199 + :
11200 + : "d" (~mask)
11201 + : "cc"
11202 + );
11203 + UBICOM32_UNLOCK(MT_EN_LOCK_BIT);
11204 +}
11205 +
11206 +/*
11207 + * thread_disable()
11208 + */
11209 +static inline void thread_disable(thread_t thread)
11210 +{
11211 + thread_disable_mask(1 << thread);
11212 +}
11213 +
11214 +/*
11215 + * thread_disable_others()
11216 + * Disable all other threads
11217 + */
11218 +static inline void thread_disable_others(void)
11219 +{
11220 + thread_t self = thread_get_self();
11221 + thread_disable_mask(~(1 << self));
11222 +}
11223 +
11224 +/*
11225 + * thread_is_trapped()
11226 + * Is the specified tid trapped?
11227 + */
11228 +static inline int thread_is_trapped(thread_t tid)
11229 +{
11230 + int thread_mask = (1 << tid);
11231 + int trap_thread;
11232 +
11233 + asm (
11234 + "move.4 %0, MT_TRAP \n\t"
11235 + : "=d" (trap_thread)
11236 + :
11237 + );
11238 + return (trap_thread & thread_mask);
11239 +}
11240 +
11241 +/*
11242 + * thread_is_enabled()
11243 + * Is the specified tid enabled?
11244 + */
11245 +static inline int thread_is_enabled(thread_t tid)
11246 +{
11247 + int thread_mask = (1 << tid);
11248 + int enabled_threads;
11249 +
11250 + asm (
11251 + "move.4 %0, MT_EN \n\t"
11252 + : "=d" (enabled_threads)
11253 + :
11254 + );
11255 + return (enabled_threads & thread_mask);
11256 +}
11257 +
11258 +/*
11259 + * thread_get_instruction_count()
11260 + */
11261 +static inline unsigned int thread_get_instruction_count(void)
11262 +{
11263 + unsigned int result;
11264 + asm (
11265 + "move.4 %0, INST_CNT \n\t"
11266 + : "=r" (result)
11267 + );
11268 + return result;
11269 +}
11270 +
11271 +/*
11272 + * thread_get_pc()
11273 + * pc could point to a speculative and cancelled instruction unless thread is disabled
11274 + */
11275 +static inline void *thread_get_pc(thread_t thread)
11276 +{
11277 + void *result;
11278 + asm (
11279 + "move.4 csr, %1 \n\t"
11280 + "setcsr_flush 0 \n\t"
11281 + "move.4 %0, pc \n\t"
11282 + "move.4 csr, #0 \n\t"
11283 + "setcsr_flush 0 \n\t"
11284 + : "=r" (result)
11285 + : "r" ((thread << 9) | (1 << 8))
11286 + );
11287 + return result;
11288 +}
11289 +
11290 +/*
11291 + * thread_get_trap_cause()
11292 + * This should be called only when the thread is not running
11293 + */
11294 +static inline unsigned int thread_get_trap_cause(thread_t thread)
11295 +{
11296 + unsigned int result;
11297 + asm (
11298 + "move.4 csr, %1 \n\t"
11299 + "setcsr_flush 0 \n\t"
11300 + "move.4 %0, trap_cause \n\t"
11301 + "move.4 csr, #0 \n\t"
11302 + "setcsr_flush 0 \n\t"
11303 + : "=r" (result)
11304 + : "r" ((thread << 9) | (1 << 8))
11305 + );
11306 + return result;
11307 +}
11308 +
11309 +/*
11310 + * THREAD_STALL macro.
11311 + */
11312 +#define THREAD_STALL \
11313 + asm volatile ( \
11314 + "move.4 mt_dbg_active_clr, #-1 \n\t" \
11315 + "pipe_flush 0 \n\t" \
11316 + : \
11317 + : \
11318 + )
11319 +
11320 +extern unsigned int thread_get_mainline(void);
11321 +extern void thread_set_mainline(thread_t tid);
11322 +extern thread_t thread_alloc(void);
11323 +extern thread_t thread_start(thread_t thread, thread_exec_fn_t exec, void *arg, unsigned int *sp_high, thread_type_t type);
11324 +
11325 +/*
11326 + * asm macros
11327 + */
11328 +asm (
11329 +/*
11330 + * thread_get_self
11331 + * Read and shift the current thread into reg
11332 + */
11333 +".macro thread_get_self reg \n\t"
11334 +" lsr.4 \\reg, ROSR, #2 \n\t"
11335 +" and.4 \\reg, #31, \\reg \n\t"/* Mask to get thread number into
11336 + * register */
11337 +".endm \n\t"
11338 +
11339 +/*
11340 + * thread_get_self_mask
11341 + * Read and shift the current thread mask into reg
11342 + */
11343 +".macro thread_get_self_mask reg \n\t"
11344 +" lsr.4 \\reg, ROSR, #2 \n\t"
11345 +" lsl.4 \\reg, #1, \\reg \n\t" /* Thread bit */
11346 +".endm \n\t"
11347 + );
11348 +
11349 +#else /* __ASSEMBLY__ */
11350 +
11351 +#include <asm/thread-asm.h>
11352 +
11353 +#endif /* __ASSEMBLY__ */
11354 +#endif /* _ASM_UBICOM32_THREAD_H */
11355 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/thread_info.h linux-2.6.28.10/arch/ubicom32/include/asm/thread_info.h
11356 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/thread_info.h 1970-01-01 02:00:00.000000000 +0200
11357 +++ linux-2.6.28.10/arch/ubicom32/include/asm/thread_info.h 2009-08-06 10:31:02.000000000 +0300
11358 @@ -0,0 +1,134 @@
11359 +/*
11360 + * arch/ubicom32/include/asm/thread_info.h
11361 + * Ubicom32 architecture low-level thread information.
11362 + *
11363 + * (C) Copyright 2009, Ubicom, Inc.
11364 + * Adapted from the i386 and PPC versions by Greg Ungerer (gerg@snapgear.com)
11365 + * Copyright (C) 2002 David Howells (dhowells@redhat.com)
11366 + * - Incorporating suggestions made by Linus Torvalds and Dave Miller
11367 + *
11368 + * This file is part of the Ubicom32 Linux Kernel Port.
11369 + *
11370 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11371 + * it and/or modify it under the terms of the GNU General Public License
11372 + * as published by the Free Software Foundation, either version 2 of the
11373 + * License, or (at your option) any later version.
11374 + *
11375 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11376 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11377 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11378 + * the GNU General Public License for more details.
11379 + *
11380 + * You should have received a copy of the GNU General Public License
11381 + * along with the Ubicom32 Linux Kernel Port. If not,
11382 + * see <http://www.gnu.org/licenses/>.
11383 + *
11384 + * Ubicom32 implementation derived from (with many thanks):
11385 + * arch/m68knommu
11386 + * arch/blackfin
11387 + * arch/parisc
11388 + */
11389 +
11390 +#ifndef _ASM_UBICOM32_THREAD_INFO_H
11391 +#define _ASM_UBICOM32_THREAD_INFO_H
11392 +
11393 +#include <asm/page.h>
11394 +
11395 +/*
11396 + * Size of kernel stack for each process. This must be a power of 2...
11397 + */
11398 +#ifdef CONFIG_4KSTACKS
11399 +#define THREAD_SIZE_ORDER (0)
11400 +#else
11401 +#define THREAD_SIZE_ORDER (1)
11402 +#endif
11403 +
11404 +/*
11405 + * for asm files, THREAD_SIZE is now generated by asm-offsets.c
11406 + */
11407 +#define THREAD_SIZE (PAGE_SIZE<<THREAD_SIZE_ORDER)
11408 +
11409 +#ifdef __KERNEL__
11410 +
11411 +#ifndef __ASSEMBLY__
11412 +
11413 +/*
11414 + * low level task data.
11415 + */
11416 +struct thread_info {
11417 + struct task_struct *task; /* main task structure */
11418 + struct exec_domain *exec_domain; /* execution domain */
11419 + unsigned long flags; /* low level flags */
11420 + int cpu; /* cpu we're on */
11421 + int preempt_count; /* 0 => preemptable, <0 => BUG */
11422 + int interrupt_nesting; /* Interrupt nesting level. */
11423 + struct restart_block restart_block;
11424 +};
11425 +
11426 +/*
11427 + * macros/functions for gaining access to the thread information structure
11428 + */
11429 +#define INIT_THREAD_INFO(tsk) \
11430 +{ \
11431 + .task = &tsk, \
11432 + .exec_domain = &default_exec_domain, \
11433 + .flags = 0, \
11434 + .cpu = 0, \
11435 + .interrupt_nesting = 0, \
11436 + .restart_block = { \
11437 + .fn = do_no_restart_syscall, \
11438 + }, \
11439 +}
11440 +
11441 +#define init_thread_info (init_thread_union.thread_info)
11442 +#define init_stack (init_thread_union.stack)
11443 +
11444 +
11445 +/* how to get the thread information struct from C */
11446 +static inline struct thread_info *current_thread_info(void)
11447 +{
11448 + struct thread_info *ti;
11449 +
11450 + asm (
11451 + "and.4 %0, sp, %1\n\t"
11452 + : "=&r" (ti)
11453 + : "d" (~(THREAD_SIZE-1))
11454 + : "cc"
11455 + );
11456 +
11457 + return ti;
11458 +}
11459 +
11460 +#define STACK_WARN (THREAD_SIZE / 8)
11461 +
11462 +#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR 1
11463 +
11464 +/* thread information allocation */
11465 +#define alloc_thread_info(tsk) ((struct thread_info *) \
11466 + __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER))
11467 +#define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_SIZE_ORDER)
11468 +#endif /* __ASSEMBLY__ */
11469 +
11470 +#define PREEMPT_ACTIVE 0x4000000
11471 +
11472 +/*
11473 + * thread information flag bit numbers
11474 + */
11475 +#define TIF_SYSCALL_TRACE 0 /* syscall trace active */
11476 +#define TIF_SIGPENDING 1 /* signal pending */
11477 +#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
11478 +#define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling
11479 + TIF_NEED_RESCHED */
11480 +#define TIF_MEMDIE 4
11481 +
11482 +/* as above, but as bit values */
11483 +#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
11484 +#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
11485 +#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
11486 +#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
11487 +
11488 +#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
11489 +
11490 +#endif /* __KERNEL__ */
11491 +
11492 +#endif /* _ASM_UBICOM32_THREAD_INFO_H */
11493 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/timex.h linux-2.6.28.10/arch/ubicom32/include/asm/timex.h
11494 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/timex.h 1970-01-01 02:00:00.000000000 +0200
11495 +++ linux-2.6.28.10/arch/ubicom32/include/asm/timex.h 2009-08-06 10:31:02.000000000 +0300
11496 @@ -0,0 +1,56 @@
11497 +/*
11498 + * arch/ubicom32/include/asm/timex.h
11499 + * Ubicom32 architecture timex specifications.
11500 + *
11501 + * (C) Copyright 2009, Ubicom, Inc.
11502 + *
11503 + * This file is part of the Ubicom32 Linux Kernel Port.
11504 + *
11505 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11506 + * it and/or modify it under the terms of the GNU General Public License
11507 + * as published by the Free Software Foundation, either version 2 of the
11508 + * License, or (at your option) any later version.
11509 + *
11510 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11511 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11512 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11513 + * the GNU General Public License for more details.
11514 + *
11515 + * You should have received a copy of the GNU General Public License
11516 + * along with the Ubicom32 Linux Kernel Port. If not,
11517 + * see <http://www.gnu.org/licenses/>.
11518 + *
11519 + * Ubicom32 implementation derived from (with many thanks):
11520 + * arch/m68knommu
11521 + * arch/blackfin
11522 + * arch/parisc
11523 + */
11524 +#ifndef _ASM_UBICOM32_TIMEX_H
11525 +#define _ASM_UBICOM32_TIMEX_H
11526 +
11527 +#define CLOCK_TICK_RATE 266000000
11528 +
11529 +// #define ARCH_HAS_READ_CURRENT_TIMER
11530 +
11531 +typedef unsigned long cycles_t;
11532 +
11533 +static inline cycles_t get_cycles(void)
11534 +{
11535 + return 0;
11536 +}
11537 +
11538 +extern int timer_alloc(void);
11539 +extern void timer_set(int timervector, unsigned int cycles);
11540 +extern int timer_reset(int timervector, unsigned int cycles);
11541 +extern void timer_tick_init(void);
11542 +extern void timer_device_init(void);
11543 +
11544 +#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)
11545 +extern void local_timer_interrupt(void);
11546 +#endif
11547 +
11548 +#if defined(CONFIG_LOCAL_TIMERS) || defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)
11549 +extern int local_timer_setup(unsigned int cpu);
11550 +#endif
11551 +
11552 +#endif /* _ASM_UBICOM32_TIMEX_H */
11553 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/tlbflush.h linux-2.6.28.10/arch/ubicom32/include/asm/tlbflush.h
11554 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/tlbflush.h 1970-01-01 02:00:00.000000000 +0200
11555 +++ linux-2.6.28.10/arch/ubicom32/include/asm/tlbflush.h 2009-08-06 10:31:02.000000000 +0300
11556 @@ -0,0 +1,79 @@
11557 +/*
11558 + * arch/ubicom32/include/asm/tlbflush.h
11559 + * TLB operations for Ubicom32 architecture.
11560 + *
11561 + * (C) Copyright 2009, Ubicom, Inc.
11562 + * Copyright (C) 2000 Lineo, David McCullough <davidm@uclinux.org>
11563 + * Copyright (C) 2000-2002, Greg Ungerer <gerg@snapgear.com>
11564 + *
11565 + * This file is part of the Ubicom32 Linux Kernel Port.
11566 + *
11567 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11568 + * it and/or modify it under the terms of the GNU General Public License
11569 + * as published by the Free Software Foundation, either version 2 of the
11570 + * License, or (at your option) any later version.
11571 + *
11572 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11573 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11574 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11575 + * the GNU General Public License for more details.
11576 + *
11577 + * You should have received a copy of the GNU General Public License
11578 + * along with the Ubicom32 Linux Kernel Port. If not,
11579 + * see <http://www.gnu.org/licenses/>.
11580 + *
11581 + * Ubicom32 implementation derived from (with many thanks):
11582 + * arch/m68knommu
11583 + * arch/blackfin
11584 + * arch/parisc
11585 + */
11586 +#ifndef _ASM_UBICOM32_TLB_FLUSH_H
11587 +#define _ASM_UBICOM32_TLB_FLUSH_H
11588 +
11589 +#include <asm/setup.h>
11590 +
11591 +/*
11592 + * flush all user-space atc entries.
11593 + */
11594 +static inline void __flush_tlb(void)
11595 +{
11596 + BUG();
11597 +}
11598 +
11599 +static inline void __flush_tlb_one(unsigned long addr)
11600 +{
11601 + BUG();
11602 +}
11603 +
11604 +#define flush_tlb() __flush_tlb()
11605 +
11606 +/*
11607 + * flush all atc entries (both kernel and user-space entries).
11608 + */
11609 +static inline void flush_tlb_all(void)
11610 +{
11611 + BUG();
11612 +}
11613 +
11614 +static inline void flush_tlb_mm(struct mm_struct *mm)
11615 +{
11616 + BUG();
11617 +}
11618 +
11619 +static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
11620 +{
11621 + BUG();
11622 +}
11623 +
11624 +static inline void flush_tlb_range(struct mm_struct *mm,
11625 + unsigned long start, unsigned long end)
11626 +{
11627 + BUG();
11628 +}
11629 +
11630 +static inline void flush_tlb_kernel_page(unsigned long addr)
11631 +{
11632 + BUG();
11633 +}
11634 +
11635 +#endif /* _ASM_UBICOM32_TLB_FLUSH_H */
11636 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/tlb.h linux-2.6.28.10/arch/ubicom32/include/asm/tlb.h
11637 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/tlb.h 1970-01-01 02:00:00.000000000 +0200
11638 +++ linux-2.6.28.10/arch/ubicom32/include/asm/tlb.h 2009-08-06 10:31:02.000000000 +0300
11639 @@ -0,0 +1,47 @@
11640 +/*
11641 + * arch/ubicom32/include/asm/tlb.h
11642 + * Ubicom32 architecture TLB operations.
11643 + *
11644 + * (C) Copyright 2009, Ubicom, Inc.
11645 + *
11646 + * This file is part of the Ubicom32 Linux Kernel Port.
11647 + *
11648 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11649 + * it and/or modify it under the terms of the GNU General Public License
11650 + * as published by the Free Software Foundation, either version 2 of the
11651 + * License, or (at your option) any later version.
11652 + *
11653 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11654 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11655 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11656 + * the GNU General Public License for more details.
11657 + *
11658 + * You should have received a copy of the GNU General Public License
11659 + * along with the Ubicom32 Linux Kernel Port. If not,
11660 + * see <http://www.gnu.org/licenses/>.
11661 + *
11662 + * Ubicom32 implementation derived from (with many thanks):
11663 + * arch/m68knommu
11664 + * arch/blackfin
11665 + * arch/parisc
11666 + */
11667 +#ifndef _ASM_UBICOM32_TLB_H
11668 +#define _ASM_UBICOM32_TLB_H
11669 +
11670 +/*
11671 + * ubicom32 doesn't need any special per-pte or
11672 + * per-vma handling..
11673 + */
11674 +#define tlb_start_vma(tlb, vma) do { } while (0)
11675 +#define tlb_end_vma(tlb, vma) do { } while (0)
11676 +#define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0)
11677 +
11678 +/*
11679 + * .. because we flush the whole mm when it
11680 + * fills up.
11681 + */
11682 +#define tlb_flush(tlb)
11683 +
11684 +#include <asm-generic/tlb.h>
11685 +
11686 +#endif /* _ASM_UBICOM32_TLB_H */
11687 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/topology.h linux-2.6.28.10/arch/ubicom32/include/asm/topology.h
11688 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/topology.h 1970-01-01 02:00:00.000000000 +0200
11689 +++ linux-2.6.28.10/arch/ubicom32/include/asm/topology.h 2009-08-06 10:31:02.000000000 +0300
11690 @@ -0,0 +1,33 @@
11691 +/*
11692 + * arch/ubicom32/include/asm/topology.h
11693 + * Generic topology.h definitions for Ubicom32 architecture.
11694 + *
11695 + * (C) Copyright 2009, Ubicom, Inc.
11696 + *
11697 + * This file is part of the Ubicom32 Linux Kernel Port.
11698 + *
11699 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11700 + * it and/or modify it under the terms of the GNU General Public License
11701 + * as published by the Free Software Foundation, either version 2 of the
11702 + * License, or (at your option) any later version.
11703 + *
11704 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11705 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11706 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11707 + * the GNU General Public License for more details.
11708 + *
11709 + * You should have received a copy of the GNU General Public License
11710 + * along with the Ubicom32 Linux Kernel Port. If not,
11711 + * see <http://www.gnu.org/licenses/>.
11712 + *
11713 + * Ubicom32 implementation derived from (with many thanks):
11714 + * arch/m68knommu
11715 + * arch/blackfin
11716 + * arch/parisc
11717 + */
11718 +#ifndef _ASM_UBICOM32_TOPOLOGY_H
11719 +#define _ASM_UBICOM32_TOPOLOGY_H
11720 +
11721 +#include <asm-generic/topology.h>
11722 +
11723 +#endif /* _ASM_UBICOM32_TOPOLOGY_H */
11724 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/traps.h linux-2.6.28.10/arch/ubicom32/include/asm/traps.h
11725 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/traps.h 1970-01-01 02:00:00.000000000 +0200
11726 +++ linux-2.6.28.10/arch/ubicom32/include/asm/traps.h 2009-08-06 10:31:02.000000000 +0300
11727 @@ -0,0 +1,55 @@
11728 +/*
11729 + * arch/ubicom32/include/asm/traps.h
11730 + * Trap related definitions for Ubicom32 architecture.
11731 + *
11732 + * (C) Copyright 2009, Ubicom, Inc.
11733 + *
11734 + * This file is part of the Ubicom32 Linux Kernel Port.
11735 + *
11736 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11737 + * it and/or modify it under the terms of the GNU General Public License
11738 + * as published by the Free Software Foundation, either version 2 of the
11739 + * License, or (at your option) any later version.
11740 + *
11741 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11742 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11743 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11744 + * the GNU General Public License for more details.
11745 + *
11746 + * You should have received a copy of the GNU General Public License
11747 + * along with the Ubicom32 Linux Kernel Port. If not,
11748 + * see <http://www.gnu.org/licenses/>.
11749 + *
11750 + * Ubicom32 implementation derived from (with many thanks):
11751 + * arch/m68knommu
11752 + * arch/blackfin
11753 + * arch/parisc
11754 + */
11755 +
11756 +#ifndef _ASM_UBICOM32_TRAPS_H
11757 +#define _ASM_UBICOM32_TRAPS_H
11758 +
11759 +/*
11760 + * Trap causes passed from ultra to Host OS
11761 + */
11762 +#define TRAP_CAUSE_TOTAL 13
11763 +#define TRAP_CAUSE_DST_RANGE_ERR 12
11764 +#define TRAP_CAUSE_SRC1_RANGE_ERR 11
11765 +#define TRAP_CAUSE_I_RANGE_ERR 10
11766 +#define TRAP_CAUSE_DCAPT 9
11767 +#define TRAP_CAUSE_DST_SERROR 8
11768 +#define TRAP_CAUSE_SRC1_SERROR 7
11769 +#define TRAP_CAUSE_DST_MISALIGNED 6
11770 +#define TRAP_CAUSE_SRC1_MISALIGNED 5
11771 +#define TRAP_CAUSE_DST_DECODE_ERR 4
11772 +#define TRAP_CAUSE_SRC1_DECODE_ERR 3
11773 +#define TRAP_CAUSE_ILLEGAL_INST 2
11774 +#define TRAP_CAUSE_I_SERROR 1
11775 +#define TRAP_CAUSE_I_DECODE_ERR 0
11776 +
11777 +extern void trap_handler(int irq, struct pt_regs *regs);
11778 +extern void trap_init_interrupt(void);
11779 +extern void unaligned_emulate(unsigned int thread);
11780 +extern int unaligned_only(unsigned int cause);
11781 +
11782 +#endif /* _ASM_UBICOM32_TRAPS_H */
11783 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/types.h linux-2.6.28.10/arch/ubicom32/include/asm/types.h
11784 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/types.h 1970-01-01 02:00:00.000000000 +0200
11785 +++ linux-2.6.28.10/arch/ubicom32/include/asm/types.h 2009-08-06 10:31:02.000000000 +0300
11786 @@ -0,0 +1,75 @@
11787 +/*
11788 + * arch/ubicom32/include/asm/types.h
11789 + * Date type definitions for Ubicom32 architecture.
11790 + *
11791 + * (C) Copyright 2009, Ubicom, Inc.
11792 + *
11793 + * This file is part of the Ubicom32 Linux Kernel Port.
11794 + *
11795 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11796 + * it and/or modify it under the terms of the GNU General Public License
11797 + * as published by the Free Software Foundation, either version 2 of the
11798 + * License, or (at your option) any later version.
11799 + *
11800 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11801 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11802 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11803 + * the GNU General Public License for more details.
11804 + *
11805 + * You should have received a copy of the GNU General Public License
11806 + * along with the Ubicom32 Linux Kernel Port. If not,
11807 + * see <http://www.gnu.org/licenses/>.
11808 + *
11809 + * Ubicom32 implementation derived from (with many thanks):
11810 + * arch/m68knommu
11811 + * arch/blackfin
11812 + * arch/parisc
11813 + */
11814 +#ifndef _ASM_UBICOM32_TYPES_H
11815 +#define _ASM_UBICOM32_TYPES_H
11816 +
11817 +/*
11818 + * This file is never included by application software unless
11819 + * explicitly requested (e.g., via linux/types.h) in which case the
11820 + * application is Linux specific so (user-) name space pollution is
11821 + * not a major issue. However, for interoperability, libraries still
11822 + * need to be careful to avoid a name clashes.
11823 + */
11824 +
11825 +#include <asm-generic/int-ll64.h>
11826 +
11827 +#ifndef __ASSEMBLY__
11828 +
11829 +typedef unsigned short umode_t;
11830 +
11831 +#endif /* __ASSEMBLY__ */
11832 +
11833 +/*
11834 + * These aren't exported outside the kernel to avoid name space clashes
11835 + */
11836 +#ifdef __KERNEL__
11837 +
11838 +#define BITS_PER_LONG 32
11839 +
11840 +#ifndef __ASSEMBLY__
11841 +
11842 +/* DMA addresses are always 32-bits wide */
11843 +
11844 +typedef u32 dma_addr_t;
11845 +typedef u32 dma64_addr_t;
11846 +
11847 +/*
11848 + * XXX These are "Ubicom style" typedefs. They should be removed in all files used by linux.
11849 + */
11850 +typedef u32 u32_t;
11851 +typedef s32 s32_t;
11852 +typedef u16 u16_t;
11853 +typedef s16 s16_t;
11854 +typedef u8 u8_t;
11855 +typedef s8 s8_t;
11856 +
11857 +#endif /* __ASSEMBLY__ */
11858 +
11859 +#endif /* __KERNEL__ */
11860 +
11861 +#endif /* _ASM_UBICOM32_TYPES_H */
11862 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/uaccess.h linux-2.6.28.10/arch/ubicom32/include/asm/uaccess.h
11863 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/uaccess.h 1970-01-01 02:00:00.000000000 +0200
11864 +++ linux-2.6.28.10/arch/ubicom32/include/asm/uaccess.h 2009-08-06 10:31:02.000000000 +0300
11865 @@ -0,0 +1,347 @@
11866 +/*
11867 + * arch/ubicom32/include/asm/uaccess.h
11868 + * User space memory access functions for Ubicom32 architecture.
11869 + *
11870 + * (C) Copyright 2009, Ubicom, Inc.
11871 + *
11872 + * This file is part of the Ubicom32 Linux Kernel Port.
11873 + *
11874 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
11875 + * it and/or modify it under the terms of the GNU General Public License
11876 + * as published by the Free Software Foundation, either version 2 of the
11877 + * License, or (at your option) any later version.
11878 + *
11879 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
11880 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11881 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11882 + * the GNU General Public License for more details.
11883 + *
11884 + * You should have received a copy of the GNU General Public License
11885 + * along with the Ubicom32 Linux Kernel Port. If not,
11886 + * see <http://www.gnu.org/licenses/>.
11887 + *
11888 + * Ubicom32 implementation derived from (with many thanks):
11889 + * arch/m68knommu
11890 + * arch/blackfin
11891 + * arch/parisc
11892 + * arch/alpha
11893 + */
11894 +#ifndef _ASM_UBICOM32_UACCESS_H
11895 +#define _ASM_UBICOM32_UACCESS_H
11896 +
11897 +/*
11898 + * User space memory access functions
11899 + */
11900 +#include <linux/sched.h>
11901 +#include <linux/mm.h>
11902 +#include <linux/string.h>
11903 +
11904 +#include <asm/segment.h>
11905 +
11906 +#define VERIFY_READ 0
11907 +#define VERIFY_WRITE 1
11908 +
11909 +/*
11910 + * The exception table consists of pairs of addresses: the first is the
11911 + * address of an instruction that is allowed to fault, and the second is
11912 + * the address at which the program should continue. No registers are
11913 + * modified, so it is entirely up to the continuation code to figure out
11914 + * what to do.
11915 + *
11916 + * All the routines below use bits of fixup code that are out of line
11917 + * with the main instruction path. This means when everything is well,
11918 + * we don't even have to jump over them. Further, they do not intrude
11919 + * on our cache or tlb entries.
11920 + */
11921 +struct exception_table_entry
11922 +{
11923 + unsigned long insn, fixup;
11924 +};
11925 +
11926 +/*
11927 + * Ubicom32 does not currently support the exception table handling.
11928 + */
11929 +extern unsigned long search_exception_table(unsigned long);
11930 +
11931 +
11932 +#if defined(CONFIG_ACCESS_OK_CHECKS_ENABLED)
11933 +extern int __access_ok(unsigned long addr, unsigned long size);
11934 +#else
11935 +static inline int __access_ok(unsigned long addr, unsigned long size)
11936 +{
11937 + return 1;
11938 +}
11939 +#endif
11940 +#define access_ok(type, addr, size) \
11941 + likely(__access_ok((unsigned long)(addr), (size)))
11942 +
11943 +/*
11944 + * The following functions do not exist. They keep callers
11945 + * of put_user and get_user from passing unsupported argument
11946 + * types. They result in a link time error.
11947 + */
11948 +extern int __put_user_bad(void);
11949 +extern int __get_user_bad(void);
11950 +
11951 +/*
11952 + * __put_user_no_check()
11953 + * Put the requested data into the user space verifying the address
11954 + *
11955 + * Careful to not
11956 + * (a) re-use the arguments for side effects (sizeof/typeof is ok)
11957 + * (b) require any knowledge of processes at this stage
11958 + */
11959 +#define __put_user_no_check(x, ptr, size) \
11960 +({ \
11961 + int __pu_err = 0; \
11962 + __typeof__(*(ptr)) __user *__pu_addr = (ptr); \
11963 + switch (size) { \
11964 + case 1: \
11965 + case 2: \
11966 + case 4: \
11967 + case 8: \
11968 + *__pu_addr = (__typeof__(*(ptr)))x; \
11969 + break; \
11970 + default: \
11971 + __pu_err = __put_user_bad(); \
11972 + break; \
11973 + } \
11974 + __pu_err; \
11975 +})
11976 +
11977 +/*
11978 + * __put_user_check()
11979 + * Put the requested data into the user space verifying the address
11980 + *
11981 + * Careful to not
11982 + * (a) re-use the arguments for side effects (sizeof/typeof is ok)
11983 + * (b) require any knowledge of processes at this stage
11984 + *
11985 + * If requested, access_ok() will verify that ptr is a valid user
11986 + * pointer.
11987 + */
11988 +#define __put_user_check(x, ptr, size) \
11989 +({ \
11990 + int __pu_err = -EFAULT; \
11991 + __typeof__(*(ptr)) __user *__pu_addr = (ptr); \
11992 + if (access_ok(VERIFY_WRITE, __pu_addr, size)) { \
11993 + __pu_err = 0; \
11994 + switch (size) { \
11995 + case 1: \
11996 + case 2: \
11997 + case 4: \
11998 + case 8: \
11999 + *__pu_addr = (__typeof__(*(ptr)))x; \
12000 + break; \
12001 + default: \
12002 + __pu_err = __put_user_bad(); \
12003 + break; \
12004 + } \
12005 + } \
12006 + __pu_err; \
12007 +})
12008 +
12009 +/*
12010 + * __get_user_no_check()
12011 + * Read the value at ptr into x.
12012 + *
12013 + * If requested, access_ok() will verify that ptr is a valid user
12014 + * pointer. If the caller passes a modifying argument for ptr (e.g. x++)
12015 + * this macro will not work.
12016 + */
12017 +#define __get_user_no_check(x, ptr, size) \
12018 +({ \
12019 + int __gu_err = 0; \
12020 + __typeof__((x)) __gu_val = 0; \
12021 + const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
12022 + switch (size) { \
12023 + case 1: \
12024 + case 2: \
12025 + case 4: \
12026 + case 8: \
12027 + __gu_val = (__typeof__((x)))*(__gu_addr); \
12028 + break; \
12029 + default: \
12030 + __gu_err = __get_user_bad(); \
12031 + (x) = 0; \
12032 + break; \
12033 + } \
12034 + (x) = __gu_val; \
12035 + __gu_err; \
12036 +})
12037 +
12038 +/*
12039 + * __get_user_check()
12040 + * Read the value at ptr into x.
12041 + *
12042 + * If requested, access_ok() will verify that ptr is a valid user
12043 + * pointer.
12044 + */
12045 +#define __get_user_check(x, ptr, size) \
12046 +({ \
12047 + int __gu_err = -EFAULT; \
12048 + __typeof__(x) __gu_val = 0; \
12049 + const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
12050 + if (access_ok(VERIFY_READ, __gu_addr, size)) { \
12051 + __gu_err = 0; \
12052 + switch (size) { \
12053 + case 1: \
12054 + case 2: \
12055 + case 4: \
12056 + case 8: \
12057 + __gu_val = (__typeof__((x)))*(__gu_addr); \
12058 + break; \
12059 + default: \
12060 + __gu_err = __get_user_bad(); \
12061 + (x) = 0; \
12062 + break; \
12063 + } \
12064 + } \
12065 + (x) = __gu_val; \
12066 + __gu_err; \
12067 +})
12068 +
12069 +/*
12070 + * The "xxx" versions are allowed to perform some amount of address
12071 + * space checking. See access_ok().
12072 + */
12073 +#define put_user(x,ptr) \
12074 + __put_user_check((__typeof__(*(ptr)))(x),(ptr), sizeof(*(ptr)))
12075 +#define get_user(x,ptr) \
12076 + __get_user_check((x), (ptr), sizeof(*(ptr)))
12077 +
12078 +/*
12079 + * The "__xxx" versions do not do address space checking, useful when
12080 + * doing multiple accesses to the same area (the programmer has to do the
12081 + * checks by hand with "access_ok()")
12082 + */
12083 +#define __put_user(x,ptr) \
12084 + __put_user_no_check((__typeof__(*(ptr)))(x),(ptr), sizeof(*(ptr)))
12085 +#define __get_user(x,ptr) \
12086 + __get_user_no_check((x), (ptr), sizeof(*(ptr)))
12087 +
12088 +/*
12089 + * __copy_tofrom_user_no_check()
12090 + * Copy the data either to or from user space.
12091 + *
12092 + * Return the number of bytes NOT copied.
12093 + */
12094 +static inline unsigned long
12095 +__copy_tofrom_user_no_check(void *to, const void *from, unsigned long n)
12096 +{
12097 + memcpy(to, from, n);
12098 + return 0;
12099 +}
12100 +
12101 +/*
12102 + * copy_to_user()
12103 + * Copy the kernel data to user space.
12104 + *
12105 + * Return the number of bytes that were copied.
12106 + */
12107 +static inline unsigned long
12108 +copy_to_user(void __user *to, const void *from, unsigned long n)
12109 +{
12110 + if (!access_ok(VERIFY_WRITE, to, n)) {
12111 + return n;
12112 + }
12113 + return __copy_tofrom_user_no_check((__force void *)to, from, n);
12114 +}
12115 +
12116 +/*
12117 + * copy_from_user()
12118 + * Copy the user data to kernel space.
12119 + *
12120 + * Return the number of bytes that were copied. On error, we zero
12121 + * out the destination.
12122 + */
12123 +static inline unsigned long
12124 +copy_from_user(void *to, const void __user *from, unsigned long n)
12125 +{
12126 + if (!access_ok(VERIFY_READ, from, n)) {
12127 + return n;
12128 + }
12129 + return __copy_tofrom_user_no_check(to, (__force void *)from, n);
12130 +}
12131 +
12132 +#define __copy_to_user(to, from, n) \
12133 + __copy_tofrom_user_no_check((__force void *)to, from, n)
12134 +#define __copy_from_user(to, from, n) \
12135 + __copy_tofrom_user_no_check(to, (__force void *)from, n)
12136 +#define __copy_to_user_inatomic(to, from, n) \
12137 + __copy_tofrom_user_no_check((__force void *)to, from, n)
12138 +#define __copy_from_user_inatomic(to, from, n) \
12139 + __copy_tofrom_user_no_check(to, (__force void *)from, n)
12140 +
12141 +#define copy_to_user_ret(to, from, n, retval) \
12142 + ({ if (copy_to_user(to, from, n)) return retval; })
12143 +
12144 +#define copy_from_user_ret(to, from, n, retval) \
12145 + ({ if (copy_from_user(to, from, n)) return retval; })
12146 +
12147 +/*
12148 + * strncpy_from_user()
12149 + * Copy a null terminated string from userspace.
12150 + *
12151 + * dst - Destination in kernel space. The buffer must be at least count.
12152 + * src - Address of string in user space.
12153 + * count - Maximum number of bytes to copy (including the trailing NULL).
12154 + *
12155 + * Returns the length of the string (not including the trailing NULL. If
12156 + * count is smaller than the length of the string, we copy count bytes
12157 + * and return count.
12158 + *
12159 + */
12160 +static inline long strncpy_from_user(char *dst, const __user char *src, long count)
12161 +{
12162 + char *tmp;
12163 + if (!access_ok(VERIFY_READ, src, 1)) {
12164 + return -EFAULT;
12165 + }
12166 +
12167 + strncpy(dst, src, count);
12168 + for (tmp = dst; *tmp && count > 0; tmp++, count--) {
12169 + ;
12170 + }
12171 + return(tmp - dst);
12172 +}
12173 +
12174 +/*
12175 + * strnlen_user()
12176 + * Return the size of a string (including the ending 0)
12177 + *
12178 + * Return -EFAULT on exception, a value greater than <n> if too long
12179 + */
12180 +static inline long strnlen_user(const __user char *src, long n)
12181 +{
12182 + if (!access_ok(VERIFY_READ, src, 1)) {
12183 + return -EFAULT;
12184 + }
12185 + return(strlen(src) + 1);
12186 +}
12187 +
12188 +#define strlen_user(str) strnlen_user(str, 32767)
12189 +
12190 +/*
12191 + * __clear_user()
12192 + * Zero Userspace
12193 + */
12194 +static inline unsigned long __clear_user(__user void *to, unsigned long n)
12195 +{
12196 + memset(to, 0, n);
12197 + return 0;
12198 +}
12199 +
12200 +/*
12201 + * clear_user()
12202 + * Zero user space (check for valid addresses)
12203 + */
12204 +static inline unsigned long clear_user(__user void *to, unsigned long n)
12205 +{
12206 + if (!access_ok(VERIFY_WRITE, to, n)) {
12207 + return -EFAULT;
12208 + }
12209 + return __clear_user(to, n);
12210 +}
12211 +
12212 +#endif /* _ASM_UBICOM32_UACCESS_H */
12213 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ubicom32-common-asm.h linux-2.6.28.10/arch/ubicom32/include/asm/ubicom32-common-asm.h
12214 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ubicom32-common-asm.h 1970-01-01 02:00:00.000000000 +0200
12215 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ubicom32-common-asm.h 2009-08-06 10:31:02.000000000 +0300
12216 @@ -0,0 +1,49 @@
12217 +/*
12218 + * arch/ubicom32/include/asm/ubicom32-common-asm.h
12219 + * Ubicom32 atomic lock operations.
12220 + *
12221 + * (C) Copyright 2009, Ubicom, Inc.
12222 + *
12223 + * This file is part of the Ubicom32 Linux Kernel Port.
12224 + *
12225 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
12226 + * it and/or modify it under the terms of the GNU General Public License
12227 + * as published by the Free Software Foundation, either version 2 of the
12228 + * License, or (at your option) any later version.
12229 + *
12230 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
12231 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12232 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12233 + * the GNU General Public License for more details.
12234 + *
12235 + * You should have received a copy of the GNU General Public License
12236 + * along with the Ubicom32 Linux Kernel Port. If not,
12237 + * see <http://www.gnu.org/licenses/>.
12238 + *
12239 + * Ubicom32 implementation derived from (with many thanks):
12240 + * arch/m68knommu
12241 + * arch/blackfin
12242 + * arch/parisc
12243 + */
12244 +
12245 +#ifndef _ASM_UBICOM32_UBICOM32_COMMON_ASM_H
12246 +#define _ASM_UBICOM32_UBICOM32_COMMON_ASM_H
12247 +
12248 +/*
12249 + * atomic_lock_acquire macro
12250 + * Equivalent to __atomic_lock_acquire()
12251 + */
12252 +.macro atomic_lock_acquire
12253 + bset scratchpad1, scratchpad1, #ATOMIC_LOCK_BIT
12254 + jmpne.f .-4
12255 +.endm
12256 +
12257 +/*
12258 + * atomic_lock_release macro
12259 + * Equivalent to __atomic_lock_release()
12260 + */
12261 +.macro atomic_lock_release
12262 + bclr scratchpad1, scratchpad1, #ATOMIC_LOCK_BIT
12263 +.endm
12264 +
12265 +#endif /* _ASM_UBICOM32_UBICOM32_COMMON_ASM_H */
12266 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ubicom32-common.h linux-2.6.28.10/arch/ubicom32/include/asm/ubicom32-common.h
12267 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ubicom32-common.h 1970-01-01 02:00:00.000000000 +0200
12268 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ubicom32-common.h 2009-08-06 10:31:02.000000000 +0300
12269 @@ -0,0 +1,124 @@
12270 +/*
12271 + * arch/ubicom32/include/asm/ubicom32-common.h
12272 + * Ubicom32 atomic lock operations.
12273 + *
12274 + * (C) Copyright 2009, Ubicom, Inc.
12275 + *
12276 + * This file is part of the Ubicom32 Linux Kernel Port.
12277 + *
12278 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
12279 + * it and/or modify it under the terms of the GNU General Public License
12280 + * as published by the Free Software Foundation, either version 2 of the
12281 + * License, or (at your option) any later version.
12282 + *
12283 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
12284 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12285 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12286 + * the GNU General Public License for more details.
12287 + *
12288 + * You should have received a copy of the GNU General Public License
12289 + * along with the Ubicom32 Linux Kernel Port. If not,
12290 + * see <http://www.gnu.org/licenses/>.
12291 + *
12292 + * Ubicom32 implementation derived from (with many thanks):
12293 + * arch/m68knommu
12294 + * arch/blackfin
12295 + * arch/parisc
12296 + */
12297 +
12298 +#ifndef _ASM_UBICOM32_UBICOM32_COMMON_H
12299 +#define _ASM_UBICOM32_UBICOM32_COMMON_H
12300 +
12301 +#define S(arg) #arg
12302 +#define D(arg) S(arg)
12303 +/*
12304 + * scratchpad1 is owned by the LDSR.
12305 + *
12306 + * The upper bits provide 16 global spinlocks. Acquiring one of these
12307 + * global spinlocks synchornizes across multiple threads and prevents
12308 + * the LDSR from delivering any interrupts while the lock is held.
12309 + * Use these locks only when absolutely required.
12310 + *
12311 + * The lower 16 bits of scratchpad1 are used as per thread interrupt
12312 + * enable/disable bits. These bits will prevent a thread from receiving
12313 + * any interrupts.
12314 + *
12315 + * Bit Usage:
12316 + * - MT_EN_LOCK_BIT - Protects writes to MT_EN, so code can read current value
12317 + * then write a new value atomically (profiler for example)
12318 + * - ATOMIC_LOCK_BIT - Used to provide general purpose atomic handling.
12319 + * - LDSR_LOCK_BIT - Used by the LDSR exclusively to provide protection.
12320 + * - LSB 16 bits - Used by the LDSR to represent thread enable/disable bits.
12321 + */
12322 +#define MT_EN_LOCK_BIT 31
12323 +#define ATOMIC_LOCK_BIT 30
12324 +#define LDSR_LOCK_BIT 29
12325 +#define PCI_LOCK_BIT 28
12326 +
12327 +#if !defined(__ASSEMBLY__)
12328 +
12329 +#define UBICOM32_TRYLOCK(bit) \
12330 + asm volatile ( \
12331 + " move.4 %0, #0 \n\t" \
12332 + " bset scratchpad1, scratchpad1, #"D(bit)" \n\t" \
12333 + " jmpne.f 1f \n\t" \
12334 + " move.4 %0, #1 \n\t" \
12335 + "1: \n\t" \
12336 + : "=r" (ret) \
12337 + : \
12338 + : "cc", "memory" \
12339 + ); \
12340 +
12341 +#define UBICOM32_UNLOCK(bit) \
12342 + asm volatile ( \
12343 + " bclr scratchpad1, scratchpad1, #"D(bit)" \n\t" \
12344 + : \
12345 + : \
12346 + : "cc", "memory" \
12347 + ); \
12348 +
12349 +#define UBICOM32_LOCK(bit) \
12350 + asm volatile ( \
12351 + "1: bset scratchpad1, scratchpad1, #"D(bit)" \n\t" \
12352 + " jmpne.f 1b \n\t" \
12353 + : \
12354 + : \
12355 + : "cc", "memory" \
12356 + ); \
12357 +
12358 +/*
12359 + * __atomic_lock_trylock()
12360 + * Attempt to acquire the lock, return TRUE if acquired.
12361 + */
12362 +static inline int __atomic_lock_trylock(void)
12363 +{
12364 + int ret;
12365 + UBICOM32_TRYLOCK(ATOMIC_LOCK_BIT);
12366 + return ret;
12367 +}
12368 +
12369 +/*
12370 + * __atomic_lock_release()
12371 + * Release the global atomic lock.
12372 + *
12373 + * Note: no one is suspended waiting since this lock is a spinning lock.
12374 + */
12375 +static inline void __atomic_lock_release(void)
12376 +{
12377 + UBICOM32_UNLOCK(ATOMIC_LOCK_BIT);
12378 +}
12379 +
12380 +/*
12381 + * __atomic_lock_acquire()
12382 + * Acquire the global atomic lock, spin if not available.
12383 + */
12384 +static inline void __atomic_lock_acquire(void)
12385 +{
12386 + UBICOM32_LOCK(ATOMIC_LOCK_BIT);
12387 +}
12388 +#else /* __ASSEMBLY__ */
12389 +
12390 +#include <asm/ubicom32-common-asm.h>
12391 +
12392 +#endif /* __ASSEMBLY__ */
12393 +#endif /* _ASM_UBICOM32_UBICOM32_COMMON_H */
12394 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ucontext.h linux-2.6.28.10/arch/ubicom32/include/asm/ucontext.h
12395 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ucontext.h 1970-01-01 02:00:00.000000000 +0200
12396 +++ linux-2.6.28.10/arch/ubicom32/include/asm/ucontext.h 2009-08-06 10:31:02.000000000 +0300
12397 @@ -0,0 +1,39 @@
12398 +/*
12399 + * arch/ubicom32/include/asm/ucontext.h
12400 + * Definition of ucontext structure for Ubicom32 architecture.
12401 + *
12402 + * (C) Copyright 2009, Ubicom, Inc.
12403 + *
12404 + * This file is part of the Ubicom32 Linux Kernel Port.
12405 + *
12406 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
12407 + * it and/or modify it under the terms of the GNU General Public License
12408 + * as published by the Free Software Foundation, either version 2 of the
12409 + * License, or (at your option) any later version.
12410 + *
12411 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
12412 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12413 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12414 + * the GNU General Public License for more details.
12415 + *
12416 + * You should have received a copy of the GNU General Public License
12417 + * along with the Ubicom32 Linux Kernel Port. If not,
12418 + * see <http://www.gnu.org/licenses/>.
12419 + *
12420 + * Ubicom32 implementation derived from (with many thanks):
12421 + * arch/m68knommu
12422 + * arch/blackfin
12423 + * arch/parisc
12424 + */
12425 +#ifndef _ASM_UBICOM32_UCONTEXT_H
12426 +#define _ASM_UBICOM32_UCONTEXT_H
12427 +
12428 +struct ucontext {
12429 + unsigned long uc_flags;
12430 + struct ucontext *uc_link;
12431 + stack_t uc_stack;
12432 + struct sigcontext uc_mcontext;
12433 + sigset_t uc_sigmask; /* mask last for extensibility */
12434 +};
12435 +
12436 +#endif /* _ASM_UBICOM32_UCONTEXT_H */
12437 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/unaligned.h linux-2.6.28.10/arch/ubicom32/include/asm/unaligned.h
12438 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/unaligned.h 1970-01-01 02:00:00.000000000 +0200
12439 +++ linux-2.6.28.10/arch/ubicom32/include/asm/unaligned.h 2009-08-06 10:31:02.000000000 +0300
12440 @@ -0,0 +1,44 @@
12441 +/*
12442 + * arch/ubicom32/include/asm/unaligned.h
12443 + * Ubicom32 architecture unaligned memory access definitions.
12444 + *
12445 + * (C) Copyright 2009, Ubicom, Inc.
12446 + *
12447 + * This file is part of the Ubicom32 Linux Kernel Port.
12448 + *
12449 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
12450 + * it and/or modify it under the terms of the GNU General Public License
12451 + * as published by the Free Software Foundation, either version 2 of the
12452 + * License, or (at your option) any later version.
12453 + *
12454 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
12455 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12456 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12457 + * the GNU General Public License for more details.
12458 + *
12459 + * You should have received a copy of the GNU General Public License
12460 + * along with the Ubicom32 Linux Kernel Port. If not,
12461 + * see <http://www.gnu.org/licenses/>.
12462 + *
12463 + * Ubicom32 implementation derived from (with many thanks):
12464 + * arch/m68knommu
12465 + * arch/blackfin
12466 + * arch/parisc
12467 + *
12468 + * TODO: This is a copy of arm unaligned handling that probably needs
12469 + * to be optimized for UBICOM32, but it works for now.
12470 + */
12471 +
12472 +#ifndef _ASM_UBICOM32_UNALIGNED_H
12473 +#define _ASM_UBICOM32_UNALIGNED_H
12474 +
12475 +#include <asm/types.h>
12476 +
12477 +#include <linux/unaligned/le_byteshift.h>
12478 +#include <linux/unaligned/be_byteshift.h>
12479 +#include <linux/unaligned/generic.h>
12480 +
12481 +#define get_unaligned __get_unaligned_be
12482 +#define put_unaligned __put_unaligned_be
12483 +
12484 +#endif /* _ASM_UBICOM32_UNALIGNED_H */
12485 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/unistd.h linux-2.6.28.10/arch/ubicom32/include/asm/unistd.h
12486 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/unistd.h 1970-01-01 02:00:00.000000000 +0200
12487 +++ linux-2.6.28.10/arch/ubicom32/include/asm/unistd.h 2009-08-06 10:31:02.000000000 +0300
12488 @@ -0,0 +1,400 @@
12489 +/*
12490 + * arch/ubicom32/include/asm/unistd.h
12491 + * Ubicom32 architecture syscall definitions.
12492 + *
12493 + * (C) Copyright 2009, Ubicom, Inc.
12494 + *
12495 + * This file is part of the Ubicom32 Linux Kernel Port.
12496 + *
12497 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
12498 + * it and/or modify it under the terms of the GNU General Public License
12499 + * as published by the Free Software Foundation, either version 2 of the
12500 + * License, or (at your option) any later version.
12501 + *
12502 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
12503 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12504 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12505 + * the GNU General Public License for more details.
12506 + *
12507 + * You should have received a copy of the GNU General Public License
12508 + * along with the Ubicom32 Linux Kernel Port. If not,
12509 + * see <http://www.gnu.org/licenses/>.
12510 + *
12511 + * Ubicom32 implementation derived from (with many thanks):
12512 + * arch/m68knommu
12513 + * arch/blackfin
12514 + * arch/parisc
12515 + */
12516 +#ifndef _ASM_UBICOM32_UNISTD_H
12517 +#define _ASM_UBICOM32_UNISTD_H
12518 +
12519 +/*
12520 + * This file contains the system call numbers.
12521 + */
12522 +
12523 +#define __NR_restart_syscall 0
12524 +#define __NR_exit 1
12525 +#define __NR_fork 2
12526 +#define __NR_read 3
12527 +#define __NR_write 4
12528 +#define __NR_open 5
12529 +#define __NR_close 6
12530 +#define __NR_waitpid 7
12531 +#define __NR_creat 8
12532 +#define __NR_link 9
12533 +#define __NR_unlink 10
12534 +#define __NR_execve 11
12535 +#define __NR_chdir 12
12536 +#define __NR_time 13
12537 +#define __NR_mknod 14
12538 +#define __NR_chmod 15
12539 +#define __NR_chown 16
12540 +#define __NR_break 17
12541 +#define __NR_oldstat 18
12542 +#define __NR_lseek 19
12543 +#define __NR_getpid 20
12544 +#define __NR_mount 21
12545 +#define __NR_umount 22
12546 +#define __NR_setuid 23
12547 +#define __NR_getuid 24
12548 +#define __NR_stime 25
12549 +#define __NR_ptrace 26
12550 +#define __NR_alarm 27
12551 +#define __NR_oldfstat 28
12552 +#define __NR_pause 29
12553 +#define __NR_utime 30
12554 +#define __NR_stty 31
12555 +#define __NR_gtty 32
12556 +#define __NR_access 33
12557 +#define __NR_nice 34
12558 +#define __NR_ftime 35
12559 +#define __NR_sync 36
12560 +#define __NR_kill 37
12561 +#define __NR_rename 38
12562 +#define __NR_mkdir 39
12563 +#define __NR_rmdir 40
12564 +#define __NR_dup 41
12565 +#define __NR_pipe 42
12566 +#define __NR_times 43
12567 +#define __NR_prof 44
12568 +#define __NR_brk 45
12569 +#define __NR_setgid 46
12570 +#define __NR_getgid 47
12571 +#define __NR_signal 48
12572 +#define __NR_geteuid 49
12573 +#define __NR_getegid 50
12574 +#define __NR_acct 51
12575 +#define __NR_umount2 52
12576 +#define __NR_lock 53
12577 +#define __NR_ioctl 54
12578 +#define __NR_fcntl 55
12579 +#define __NR_mpx 56
12580 +#define __NR_setpgid 57
12581 +#define __NR_ulimit 58
12582 +#define __NR_oldolduname 59
12583 +#define __NR_umask 60
12584 +#define __NR_chroot 61
12585 +#define __NR_ustat 62
12586 +#define __NR_dup2 63
12587 +#define __NR_getppid 64
12588 +#define __NR_getpgrp 65
12589 +#define __NR_setsid 66
12590 +#define __NR_sigaction 67
12591 +#define __NR_sgetmask 68
12592 +#define __NR_ssetmask 69
12593 +#define __NR_setreuid 70
12594 +#define __NR_setregid 71
12595 +#define __NR_sigsuspend 72
12596 +#define __NR_sigpending 73
12597 +#define __NR_sethostname 74
12598 +#define __NR_setrlimit 75
12599 +#define __NR_getrlimit 76
12600 +#define __NR_getrusage 77
12601 +#define __NR_gettimeofday 78
12602 +#define __NR_settimeofday 79
12603 +#define __NR_getgroups 80
12604 +#define __NR_setgroups 81
12605 +#define __NR_select 82
12606 +#define __NR_symlink 83
12607 +#define __NR_oldlstat 84
12608 +#define __NR_readlink 85
12609 +#define __NR_uselib 86
12610 +#define __NR_swapon 87
12611 +#define __NR_reboot 88
12612 +#define __NR_readdir 89
12613 +#define __NR_mmap 90
12614 +#define __NR_munmap 91
12615 +#define __NR_truncate 92
12616 +#define __NR_ftruncate 93
12617 +#define __NR_fchmod 94
12618 +#define __NR_fchown 95
12619 +#define __NR_getpriority 96
12620 +#define __NR_setpriority 97
12621 +#define __NR_profil 98
12622 +#define __NR_statfs 99
12623 +#define __NR_fstatfs 100
12624 +#define __NR_ioperm 101
12625 +#define __NR_socketcall 102
12626 +#define __NR_syslog 103
12627 +#define __NR_setitimer 104
12628 +#define __NR_getitimer 105
12629 +#define __NR_stat 106
12630 +#define __NR_lstat 107
12631 +#define __NR_fstat 108
12632 +#define __NR_olduname 109
12633 +#define __NR_iopl /* 110 */ not supported
12634 +#define __NR_vhangup 111
12635 +#define __NR_idle /* 112 */ Obsolete
12636 +#define __NR_vm86 /* 113 */ not supported
12637 +#define __NR_wait4 114
12638 +#define __NR_swapoff 115
12639 +#define __NR_sysinfo 116
12640 +#define __NR_ipc 117
12641 +#define __NR_fsync 118
12642 +#define __NR_sigreturn 119
12643 +#define __NR_clone 120
12644 +#define __NR_setdomainname 121
12645 +#define __NR_uname 122
12646 +#define __NR_cacheflush 123
12647 +#define __NR_adjtimex 124
12648 +#define __NR_mprotect 125
12649 +#define __NR_sigprocmask 126
12650 +#define __NR_create_module 127
12651 +#define __NR_init_module 128
12652 +#define __NR_delete_module 129
12653 +#define __NR_get_kernel_syms 130
12654 +#define __NR_quotactl 131
12655 +#define __NR_getpgid 132
12656 +#define __NR_fchdir 133
12657 +#define __NR_bdflush 134
12658 +#define __NR_sysfs 135
12659 +#define __NR_personality 136
12660 +#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
12661 +#define __NR_setfsuid 138
12662 +#define __NR_setfsgid 139
12663 +#define __NR__llseek 140
12664 +#define __NR_getdents 141
12665 +#define __NR__newselect 142
12666 +#define __NR_flock 143
12667 +#define __NR_msync 144
12668 +#define __NR_readv 145
12669 +#define __NR_writev 146
12670 +#define __NR_getsid 147
12671 +#define __NR_fdatasync 148
12672 +#define __NR__sysctl 149
12673 +#define __NR_mlock 150
12674 +#define __NR_munlock 151
12675 +#define __NR_mlockall 152
12676 +#define __NR_munlockall 153
12677 +#define __NR_sched_setparam 154
12678 +#define __NR_sched_getparam 155
12679 +#define __NR_sched_setscheduler 156
12680 +#define __NR_sched_getscheduler 157
12681 +#define __NR_sched_yield 158
12682 +#define __NR_sched_get_priority_max 159
12683 +#define __NR_sched_get_priority_min 160
12684 +#define __NR_sched_rr_get_interval 161
12685 +#define __NR_nanosleep 162
12686 +#define __NR_mremap 163
12687 +#define __NR_setresuid 164
12688 +#define __NR_getresuid 165
12689 +#define __NR_getpagesize 166
12690 +#define __NR_query_module 167
12691 +#define __NR_poll 168
12692 +#define __NR_nfsservctl 169
12693 +#define __NR_setresgid 170
12694 +#define __NR_getresgid 171
12695 +#define __NR_prctl 172
12696 +#define __NR_rt_sigreturn 173
12697 +#define __NR_rt_sigaction 174
12698 +#define __NR_rt_sigprocmask 175
12699 +#define __NR_rt_sigpending 176
12700 +#define __NR_rt_sigtimedwait 177
12701 +#define __NR_rt_sigqueueinfo 178
12702 +#define __NR_rt_sigsuspend 179
12703 +#define __NR_pread64 180
12704 +#define __NR_pwrite64 181
12705 +#define __NR_lchown 182
12706 +#define __NR_getcwd 183
12707 +#define __NR_capget 184
12708 +#define __NR_capset 185
12709 +#define __NR_sigaltstack 186
12710 +#define __NR_sendfile 187
12711 +#define __NR_getpmsg 188 /* some people actually want streams */
12712 +#define __NR_putpmsg 189 /* some people actually want streams */
12713 +#define __NR_vfork 190
12714 +#define __NR_ugetrlimit 191
12715 +#define __NR_mmap2 192
12716 +#define __NR_truncate64 193
12717 +#define __NR_ftruncate64 194
12718 +#define __NR_stat64 195
12719 +#define __NR_lstat64 196
12720 +#define __NR_fstat64 197
12721 +#define __NR_chown32 198
12722 +#define __NR_getuid32 199
12723 +#define __NR_getgid32 200
12724 +#define __NR_geteuid32 201
12725 +#define __NR_getegid32 202
12726 +#define __NR_setreuid32 203
12727 +#define __NR_setregid32 204
12728 +#define __NR_getgroups32 205
12729 +#define __NR_setgroups32 206
12730 +#define __NR_fchown32 207
12731 +#define __NR_setresuid32 208
12732 +#define __NR_getresuid32 209
12733 +#define __NR_setresgid32 210
12734 +#define __NR_getresgid32 211
12735 +#define __NR_lchown32 212
12736 +#define __NR_setuid32 213
12737 +#define __NR_setgid32 214
12738 +#define __NR_setfsuid32 215
12739 +#define __NR_setfsgid32 216
12740 +#define __NR_pivot_root 217
12741 +#define __NR_getdents64 220
12742 +#define __NR_gettid 221
12743 +#define __NR_tkill 222
12744 +#define __NR_setxattr 223
12745 +#define __NR_lsetxattr 224
12746 +#define __NR_fsetxattr 225
12747 +#define __NR_getxattr 226
12748 +#define __NR_lgetxattr 227
12749 +#define __NR_fgetxattr 228
12750 +#define __NR_listxattr 229
12751 +#define __NR_llistxattr 230
12752 +#define __NR_flistxattr 231
12753 +#define __NR_removexattr 232
12754 +#define __NR_lremovexattr 233
12755 +#define __NR_fremovexattr 234
12756 +#define __NR_futex 235
12757 +#define __NR_sendfile64 236
12758 +#define __NR_mincore 237
12759 +#define __NR_madvise 238
12760 +#define __NR_fcntl64 239
12761 +#define __NR_readahead 240
12762 +#define __NR_io_setup 241
12763 +#define __NR_io_destroy 242
12764 +#define __NR_io_getevents 243
12765 +#define __NR_io_submit 244
12766 +#define __NR_io_cancel 245
12767 +#define __NR_fadvise64 246
12768 +#define __NR_exit_group 247
12769 +#define __NR_lookup_dcookie 248
12770 +#define __NR_epoll_create 249
12771 +#define __NR_epoll_ctl 250
12772 +#define __NR_epoll_wait 251
12773 +#define __NR_remap_file_pages 252
12774 +#define __NR_set_tid_address 253
12775 +#define __NR_timer_create 254
12776 +#define __NR_timer_settime 255
12777 +#define __NR_timer_gettime 256
12778 +#define __NR_timer_getoverrun 257
12779 +#define __NR_timer_delete 258
12780 +#define __NR_clock_settime 259
12781 +#define __NR_clock_gettime 260
12782 +#define __NR_clock_getres 261
12783 +#define __NR_clock_nanosleep 262
12784 +#define __NR_statfs64 263
12785 +#define __NR_fstatfs64 264
12786 +#define __NR_tgkill 265
12787 +#define __NR_utimes 266
12788 +#define __NR_fadvise64_64 267
12789 +#define __NR_mbind 268
12790 +#define __NR_get_mempolicy 269
12791 +#define __NR_set_mempolicy 270
12792 +#define __NR_mq_open 271
12793 +#define __NR_mq_unlink 272
12794 +#define __NR_mq_timedsend 273
12795 +#define __NR_mq_timedreceive 274
12796 +#define __NR_mq_notify 275
12797 +#define __NR_mq_getsetattr 276
12798 +#define __NR_waitid 277
12799 +#define __NR_vserver 278
12800 +#define __NR_add_key 279
12801 +#define __NR_request_key 280
12802 +#define __NR_keyctl 281
12803 +#define __NR_ioprio_set 282
12804 +#define __NR_ioprio_get 283
12805 +#define __NR_inotify_init 284
12806 +#define __NR_inotify_add_watch 285
12807 +#define __NR_inotify_rm_watch 286
12808 +#define __NR_migrate_pages 287
12809 +#define __NR_openat 288
12810 +#define __NR_mkdirat 289
12811 +#define __NR_mknodat 290
12812 +#define __NR_fchownat 291
12813 +#define __NR_futimesat 292
12814 +#define __NR_fstatat64 293
12815 +#define __NR_unlinkat 294
12816 +#define __NR_renameat 295
12817 +#define __NR_linkat 296
12818 +#define __NR_symlinkat 297
12819 +#define __NR_readlinkat 298
12820 +#define __NR_fchmodat 299
12821 +#define __NR_faccessat 300
12822 +#define __NR_pselect6 301
12823 +#define __NR_ppoll 302
12824 +#define __NR_unshare 303
12825 +#define __NR_set_robust_list 304
12826 +#define __NR_get_robust_list 305
12827 +#define __NR_splice 306
12828 +#define __NR_sync_file_range 307
12829 +#define __NR_tee 308
12830 +#define __NR_vmsplice 309
12831 +#define __NR_move_pages 310
12832 +#define __NR_sched_setaffinity 311
12833 +#define __NR_sched_getaffinity 312
12834 +#define __NR_kexec_load 313
12835 +#define __NR_getcpu 314
12836 +#define __NR_epoll_pwait 315
12837 +#define __NR_utimensat 316
12838 +#define __NR_signalfd 317
12839 +#define __NR_timerfd_create 318
12840 +#define __NR_eventfd 319
12841 +#define __NR_fallocate 320
12842 +#define __NR_timerfd_settime 321
12843 +#define __NR_timerfd_gettime 322
12844 +#define __NR_signalfd4 323
12845 +#define __NR_eventfd2 324
12846 +#define __NR_epoll_create1 325
12847 +#define __NR_dup3 326
12848 +#define __NR_pipe2 327
12849 +#define __NR_inotify_init1 328
12850 +
12851 +#ifdef __KERNEL__
12852 +
12853 +#define NR_syscalls 329
12854 +
12855 +#define __ARCH_WANT_IPC_PARSE_VERSION
12856 +#define __ARCH_WANT_OLD_READDIR
12857 +#define __ARCH_WANT_OLD_STAT
12858 +#define __ARCH_WANT_STAT64
12859 +#define __ARCH_WANT_SYS_ALARM
12860 +#define __ARCH_WANT_SYS_GETHOSTNAME
12861 +#define __ARCH_WANT_SYS_PAUSE
12862 +#define __ARCH_WANT_SYS_SGETMASK
12863 +#define __ARCH_WANT_SYS_SIGNAL
12864 +#define __ARCH_WANT_SYS_TIME
12865 +#define __ARCH_WANT_SYS_UTIME
12866 +#define __ARCH_WANT_SYS_WAITPID
12867 +#define __ARCH_WANT_SYS_SOCKETCALL
12868 +#define __ARCH_WANT_SYS_FADVISE64
12869 +#define __ARCH_WANT_SYS_GETPGRP
12870 +#define __ARCH_WANT_SYS_LLSEEK
12871 +#define __ARCH_WANT_SYS_NICE
12872 +#define __ARCH_WANT_SYS_OLD_GETRLIMIT
12873 +#define __ARCH_WANT_SYS_OLDUMOUNT
12874 +#define __ARCH_WANT_SYS_SIGPENDING
12875 +#define __ARCH_WANT_SYS_SIGPROCMASK
12876 +#define __ARCH_WANT_SYS_RT_SIGACTION
12877 +
12878 +/*
12879 + * "Conditional" syscalls
12880 + *
12881 + * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
12882 + * but it doesn't work on all toolchains, so we just do it by hand
12883 + */
12884 +//#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
12885 +#define cond_syscall(x) long x(void) __attribute__((weak,alias("sys_ni_syscall")))
12886 +#endif /* __KERNEL__ */
12887 +
12888 +#endif /* _ASM_UBICOM32_UNISTD_H */
12889 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/user.h linux-2.6.28.10/arch/ubicom32/include/asm/user.h
12890 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/user.h 1970-01-01 02:00:00.000000000 +0200
12891 +++ linux-2.6.28.10/arch/ubicom32/include/asm/user.h 2009-08-12 13:08:37.000000000 +0300
12892 @@ -0,0 +1,82 @@
12893 +/*
12894 + * arch/ubicom32/include/asm/user.h
12895 + * Ubicom32 architecture core file definitions.
12896 + *
12897 + * (C) Copyright 2009, Ubicom, Inc.
12898 + *
12899 + * This file is part of the Ubicom32 Linux Kernel Port.
12900 + *
12901 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
12902 + * it and/or modify it under the terms of the GNU General Public License
12903 + * as published by the Free Software Foundation, either version 2 of the
12904 + * License, or (at your option) any later version.
12905 + *
12906 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
12907 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12908 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12909 + * the GNU General Public License for more details.
12910 + *
12911 + * You should have received a copy of the GNU General Public License
12912 + * along with the Ubicom32 Linux Kernel Port. If not,
12913 + * see <http://www.gnu.org/licenses/>.
12914 + *
12915 + * Ubicom32 implementation derived from (with many thanks):
12916 + * arch/m68knommu
12917 + * arch/blackfin
12918 + * arch/parisc
12919 + */
12920 +#ifndef _ASM_UBICOM32_USER_H
12921 +#define _ASM_UBICOM32_USER_H
12922 +
12923 +#include <asm/ptrace.h>
12924 +#include <asm/page.h>
12925 +/*
12926 + * Adapted from <asm-powerpc/user.h>
12927 + *
12928 + * Core file format: The core file is written in such a way that gdb
12929 + * can understand it and provide useful information to the user (under
12930 + * linux we use the `trad-core' bfd, NOT the osf-core). The file contents
12931 + * are as follows:
12932 + *
12933 + * upage: 1 page consisting of a user struct that tells gdb
12934 + * what is present in the file. Directly after this is a
12935 + * copy of the task_struct, which is currently not used by gdb,
12936 + * but it may come in handy at some point. All of the registers
12937 + * are stored as part of the upage. The upage should always be
12938 + * only one page long.
12939 + * data: The data segment follows next. We use current->end_text to
12940 + * current->brk to pick up all of the user variables, plus any memory
12941 + * that may have been sbrk'ed. No attempt is made to determine if a
12942 + * page is demand-zero or if a page is totally unused, we just cover
12943 + * the entire range. All of the addresses are rounded in such a way
12944 + * that an integral number of pages is written.
12945 + * stack: We need the stack information in order to get a meaningful
12946 + * backtrace. We need to write the data from usp to
12947 + * current->start_stack, so we round each of these in order to be able
12948 + * to write an integer number of pages.
12949 + */
12950 +
12951 +struct user_ubicom32fp_struct {
12952 +};
12953 +
12954 +struct user {
12955 + struct pt_regs regs; /* entire machine state */
12956 + size_t u_tsize; /* text size (pages) */
12957 + size_t u_dsize; /* data size (pages) */
12958 + size_t u_ssize; /* stack size (pages) */
12959 + unsigned long start_code; /* text starting address */
12960 + unsigned long start_data; /* data starting address */
12961 + unsigned long start_stack; /* stack starting address */
12962 + long int signal; /* signal causing core dump */
12963 + unsigned long u_ar0; /* help gdb find registers */
12964 + unsigned long magic; /* identifies a core file */
12965 + char u_comm[32]; /* user command name */
12966 +};
12967 +
12968 +#define NBPG PAGE_SIZE
12969 +#define UPAGES 1
12970 +#define HOST_TEXT_START_ADDR (u.start_code)
12971 +#define HOST_DATA_START_ADDR (u.start_data)
12972 +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
12973 +
12974 +#endif /* _ASM_UBICOM32_USER_H */
12975 diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/xor.h linux-2.6.28.10/arch/ubicom32/include/asm/xor.h
12976 --- linux-2.6.28.10_o/arch/ubicom32/include/asm/xor.h 1970-01-01 02:00:00.000000000 +0200
12977 +++ linux-2.6.28.10/arch/ubicom32/include/asm/xor.h 2009-08-06 10:31:02.000000000 +0300
12978 @@ -0,0 +1,33 @@
12979 +/*
12980 + * arch/ubicom32/include/asm/xor.h
12981 + * Generic xor.h definitions for Ubicom32 architecture.
12982 + *
12983 + * (C) Copyright 2009, Ubicom, Inc.
12984 + *
12985 + * This file is part of the Ubicom32 Linux Kernel Port.
12986 + *
12987 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
12988 + * it and/or modify it under the terms of the GNU General Public License
12989 + * as published by the Free Software Foundation, either version 2 of the
12990 + * License, or (at your option) any later version.
12991 + *
12992 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
12993 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12994 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12995 + * the GNU General Public License for more details.
12996 + *
12997 + * You should have received a copy of the GNU General Public License
12998 + * along with the Ubicom32 Linux Kernel Port. If not,
12999 + * see <http://www.gnu.org/licenses/>.
13000 + *
13001 + * Ubicom32 implementation derived from (with many thanks):
13002 + * arch/m68knommu
13003 + * arch/blackfin
13004 + * arch/parisc
13005 + */
13006 +#ifndef _ASM_UBICOM32_XOR_H
13007 +#define _ASM_UBICOM32_XOR_H
13008 +
13009 +#include <asm-generic/xor.h>
13010 +
13011 +#endif /* _ASM_UBICOM32_XOR_H */
13012 diff -ruN linux-2.6.28.10_o/arch/ubicom32/Kconfig linux-2.6.28.10/arch/ubicom32/Kconfig
13013 --- linux-2.6.28.10_o/arch/ubicom32/Kconfig 1970-01-01 02:00:00.000000000 +0200
13014 +++ linux-2.6.28.10/arch/ubicom32/Kconfig 2009-08-12 13:08:37.000000000 +0300
13015 @@ -0,0 +1,457 @@
13016 +#
13017 +# For a description of the syntax of this configuration file,
13018 +# see Documentation/kbuild/kconfig-language.txt.
13019 +#
13020 +
13021 +mainmenu "uClinux/ubicom32 (w/o MMU) Kernel Configuration"
13022 +
13023 +config RAMBASE
13024 + hex
13025 + default "0x40000000"
13026 + help
13027 + Define the address that RAM starts at.
13028 +
13029 +config UBICOM32
13030 + bool
13031 + select HAVE_OPROFILE
13032 + default y
13033 +
13034 +config RAMKERNEL
13035 + bool
13036 + default y
13037 +
13038 +config CPU_BIG_ENDIAN
13039 + bool
13040 + default y
13041 +
13042 +config FORCE_MAX_ZONEORDER
13043 + int
13044 + default "14"
13045 +
13046 +config HAVE_CLK
13047 + bool
13048 + default y
13049 +
13050 +config MMU
13051 + bool
13052 + default n
13053 +
13054 +config FPU
13055 + bool
13056 + default n
13057 +
13058 +config ZONE_DMA
13059 + bool
13060 + default y
13061 +
13062 +config RWSEM_GENERIC_SPINLOCK
13063 + bool
13064 + default y
13065 +
13066 +config RWSEM_XCHGADD_ALGORITHM
13067 + bool
13068 + default n
13069 +
13070 +config ARCH_HAS_ILOG2_U32
13071 + bool
13072 + default n
13073 +
13074 +config ARCH_HAS_ILOG2_U64
13075 + bool
13076 + default n
13077 +
13078 +config GENERIC_FIND_NEXT_BIT
13079 + bool
13080 + default y
13081 +
13082 +config GENERIC_GPIO
13083 + bool
13084 + default y
13085 +
13086 +config GPIOLIB
13087 + bool
13088 + default y
13089 +
13090 +config GENERIC_HWEIGHT
13091 + bool
13092 + default y
13093 +
13094 +config GENERIC_HARDIRQS
13095 + bool
13096 + default y
13097 +
13098 +config STACKTRACE_SUPPORT
13099 + bool
13100 + default y
13101 +
13102 +config LOCKDEP_SUPPORT
13103 + bool
13104 + default y
13105 +
13106 +config GENERIC_CALIBRATE_DELAY
13107 + bool
13108 + default y
13109 +
13110 +config GENERIC_TIME
13111 + bool
13112 + default y
13113 +
13114 +config TIME_LOW_RES
13115 + bool
13116 + default y
13117 +
13118 +config GENERIC_CLOCKEVENTS
13119 + bool
13120 + default y
13121 +
13122 +config GENERIC_CLOCKEVENTS_BROADCAST
13123 + bool
13124 + depends on GENERIC_CLOCKEVENTS
13125 + default y if SMP && !LOCAL_TIMERS
13126 +
13127 +config NO_IOPORT
13128 + def_bool y
13129 +
13130 +config ARCH_SUPPORTS_AOUT
13131 + def_bool y
13132 +
13133 +config IRQ_PER_CPU
13134 + bool
13135 + default y
13136 +
13137 +config SCHED_NO_NO_OMIT_FRAME_POINTER
13138 + bool
13139 + default y
13140 +
13141 +menu "Processor type and features"
13142 +
13143 +config BRD_32MB
13144 + bool
13145 + depends on IP5160EVAL
13146 + help
13147 + Board has 32MB of RAM on it. It is a hidden option used to select default for size of RAM
13148 + default n
13149 +
13150 +config BRD_64MB
13151 + bool
13152 + depends on IP7145DPF || IP7160RGW || IP7160BRINGUP || IP7160DPF || IP5170DPF || IP5160DEV
13153 + help
13154 + Board has 64MB of RAM on it. It is a hidden option used to select default for size of RAM
13155 + default n
13156 +
13157 +config BRD_128MB
13158 + bool
13159 + depends on IP7500MODULE || IP7500AV || IP7500MEDIA
13160 + help
13161 + Board has 128MB of RAM on it. It is a hidden option used to select default for size of RAM
13162 + default n
13163 +
13164 +comment "Processor type will be selected by Board"
13165 +
13166 +config UBICOM32_V3
13167 + bool
13168 + help
13169 + Ubicom IP5xxx series processor support.
13170 +
13171 +config UBICOM32_V4
13172 + bool
13173 + help
13174 + Ubicom IP7xxx series processor support.
13175 +
13176 +comment "Board"
13177 +choice
13178 + prompt "Board type"
13179 + help
13180 + Select your board.
13181 +
13182 +config NOBOARD
13183 + bool "No board selected"
13184 + help
13185 + Default. Don't select any board specific config. Will not build unless you change!
13186 +
13187 +# Add your boards here
13188 +source "arch/ubicom32/mach-ip5k/Kconfig"
13189 +source "arch/ubicom32/mach-ip7k/Kconfig"
13190 +
13191 +endchoice
13192 +
13193 +comment "Kernel Options"
13194 +config SMP
13195 + bool "Symmetric multi-processing support"
13196 + select USE_GENERIC_SMP_HELPERS
13197 + default n
13198 + help
13199 + Enables multithreading support. Enabling SMP support increases
13200 + the size of system data structures. SMP support can have either
13201 + positive or negative impact on performance depending on workloads.
13202 +
13203 + If you do not know what to do here, say N.
13204 +
13205 +config NR_CPUS
13206 + int "Number of configured CPUs"
13207 + range 2 32
13208 + default 2
13209 + depends on SMP
13210 + help
13211 + Upper bound on the number of CPUs. Space is reserved
13212 + at compile time for this many CPUs.
13213 +
13214 +config LOCAL_TIMERS
13215 + bool "Use local timer interrupts"
13216 + depends on SMP
13217 + default y
13218 + help
13219 + Enable support for local timers on SMP platforms, rather then the
13220 + legacy IPI broadcast method. Local timers allows the system
13221 + accounting to be spread across the timer interval, preventing a
13222 + "thundering herd" at every timer tick. A physical timer is allocated
13223 + per cpu.
13224 +
13225 +config TIMER_EXTRA_ALLOC
13226 + int "Number of additional physical timer events to create"
13227 + depends on GENERIC_CLOCKEVENTS
13228 + default 0
13229 + help
13230 + The Ubicom32 processor has a number of event timers that can be wrapped
13231 + in Linux clock event structures (assuming that the timers are not being
13232 + used for another purpose). Based on the value of LOCAL_TIMERS, either
13233 + 2 timers will be used or a timer will be used for every CPU. This value
13234 + allows the programmer to select additional timers over that amount.
13235 +
13236 +config IRQSTACKS
13237 + bool "Create separate stacks for interrupt handling"
13238 + default n
13239 + help
13240 + Selecting this causes interrupts to be created on a separate
13241 + stack instead of nesting the interrupts on the kernel stack.
13242 +
13243 +config IRQSTACKS_USEOCM
13244 + bool "Use OCM for interrupt stacks"
13245 + default n
13246 + depends on IRQSTACKS
13247 + help
13248 + Selecting this cause the interrupt stacks to be placed in OCM
13249 + reducing cache misses at the expense of using the OCM for servicing
13250 + interrupts.
13251 +
13252 +menu "OCM Instruction Heap"
13253 +
13254 +config OCM_MODULES_RESERVATION
13255 + int "OCM Instruction heap reservation. 0-192 kB"
13256 + range 0 192
13257 + default "0"
13258 + help
13259 + The minimum amount of OCM memory to reserve for kernel loadable module
13260 + code. If you are not using this memory it cannot be used for anything
13261 + else. Leave it as 0 if you have prebuilt modules that are compiled with
13262 + OCM support.
13263 +
13264 +config OCM_MODULES_MAY_CONSUME_REMAINING_CODESPACE
13265 + bool "Give all unused ocm code space to the ocm instruction heap."
13266 + default n
13267 + help
13268 + Allow the OCM instruction heap allocation to consume any remaining
13269 + unused OCM code space. The result of this is that you will not have
13270 + and deterministic results, but you will not have any waste either.
13271 +
13272 +config OCM_MODULES_FALLBACK_TO_DDR
13273 + bool "Loadable Modules requiring OCM may fallback to use DDR."
13274 + default n
13275 + help
13276 + If a module cannot get the OCM code it requires allow DDR to
13277 + be used instead.
13278 +endmenu
13279 +
13280 +config HZ
13281 + int "Frequency of 'jiffies' (for polling)"
13282 + default 1000
13283 + help
13284 + 100 is common for embedded systems, but 1000 allows
13285 + you to do more drivers without actually having
13286 + interrupts working properly.
13287 +
13288 +comment "RAM configuration"
13289 +
13290 +if BRD_32MB
13291 +
13292 +config RAMSIZE
13293 + hex "Size of RAM (in bytes)"
13294 + range 0x00000000 0x02000000
13295 + default "0x02000000"
13296 + help
13297 + Define the size of the system RAM. If you select 0 then the
13298 + kernel will try to probe the RAM size at runtime. This is not
13299 + supported on all CPU types.
13300 +
13301 +endif
13302 +
13303 +if BRD_64MB
13304 +
13305 +config RAMSIZE
13306 + hex "Size of RAM (in bytes)"
13307 + range 0x00000000 0x04000000
13308 + default "0x04000000"
13309 + help
13310 + Define the size of the system RAM. If you select 0 then the
13311 + kernel will try to probe the RAM size at runtime. This is not
13312 + supported on all CPU types.
13313 +
13314 +endif
13315 +
13316 +if BRD_128MB
13317 +
13318 +config RAMSIZE
13319 + hex "Size of RAM (in bytes)"
13320 + range 0x00000000 0x08000000
13321 + default "0x08000000"
13322 + help
13323 + Define the size of the system RAM. If you select 0 then the
13324 + kernel will try to probe the RAM size at runtime. This is not
13325 + supported on all CPU types.
13326 +
13327 +endif
13328 +
13329 +config KERNELBASE
13330 + hex "Address of the base of kernel code"
13331 + default "0x40400000"
13332 + help
13333 + For the time being we are going to start the Kernel at a 4 meg offset.
13334 +
13335 +comment "Build options"
13336 +config LINKER_RELAXATION
13337 + bool "Linker Relaxation"
13338 + default y
13339 + help
13340 + Turns on linker relaxation that will produce smaller
13341 + faster code. Increases link time.
13342 +
13343 +comment "Driver options"
13344 +menu "PCI Bus"
13345 +config PCI
13346 + bool "PCI bus"
13347 + default true
13348 + help
13349 + Enable/Disable PCI bus
13350 + source "drivers/pci/Kconfig"
13351 +
13352 +
13353 +config PCI_DEV0_IDSEL
13354 + hex "slot 0 address"
13355 + depends on PCI
13356 + default "0x01000000"
13357 + help
13358 + Slot 0 address. This address should correspond to the address line
13359 + which the IDSEL bit for this slot is connected to.
13360 +
13361 +config PCI_DEV1_IDSEL
13362 + hex "slot 1 address"
13363 + depends on PCI
13364 + default "0x02000000"
13365 + help
13366 + Slot 1 address. This address should correspond to the address line
13367 + which the IDSEL bit for this slot is connected to.
13368 +endmenu
13369 +# End PCI
13370 +
13371 +menu "Input devices"
13372 +config UBICOM_INPUT
13373 + bool "Ubicom polled GPIO input driver"
13374 + select INPUT
13375 + select INPUT_POLLDEV
13376 + help
13377 + Polling input driver, much like the GPIO input driver, except that it doesn't
13378 + rely on interrupts. It will report events via the input subsystem.
13379 + default n
13380 +
13381 +config UBICOM_INPUT_I2C
13382 + bool "Ubicom polled GPIO input driver over I2C"
13383 + select INPUT
13384 + select INPUT_POLLDEV
13385 + help
13386 + Polling input driver, much like the PCA953x driver, it can support a variety of
13387 + different I2C I/O expanders. This device polls the I2C I/O expander for events
13388 + and reports them via the input subsystem.
13389 + default n
13390 +endmenu
13391 +# Input devices
13392 +
13393 +
13394 +
13395 +menu "Misc devices"
13396 +config UBICOM_HID
13397 + bool "Ubicom HID driver"
13398 + select INPUT
13399 + select INPUT_POLLDEV
13400 + select LCD_CLASS_DEVICE
13401 + help
13402 + Driver for HID chip found on some Ubicom reference designs. This chip handles
13403 + PWM, button input, and IR remote control. It registers as an input device and
13404 + a backlight device.
13405 + default n
13406 +endmenu
13407 +# Misc devices
13408 +
13409 +config CMDLINE_BOOL
13410 + bool "Built-in kernel command line"
13411 + default n
13412 + help
13413 + Allow for specifying boot arguments to the kernel at
13414 + build time. On some systems (e.g. embedded ones), it is
13415 + necessary or convenient to provide some or all of the
13416 + kernel boot arguments with the kernel itself (that is,
13417 + to not rely on the boot loader to provide them.)
13418 +
13419 + To compile command line arguments into the kernel,
13420 + set this option to 'Y', then fill in the
13421 + the boot arguments in CONFIG_CMDLINE.
13422 +
13423 + Systems with fully functional boot loaders (i.e. non-embedded)
13424 + should leave this option set to 'N'.
13425 +
13426 +config CMDLINE
13427 + string "Built-in kernel command string"
13428 + depends on CMDLINE_BOOL
13429 + default ""
13430 + help
13431 + Enter arguments here that should be compiled into the kernel
13432 + image and used at boot time. If the boot loader provides a
13433 + command line at boot time, it is appended to this string to
13434 + form the full kernel command line, when the system boots.
13435 +
13436 + However, you can use the CONFIG_CMDLINE_OVERRIDE option to
13437 + change this behavior.
13438 +
13439 + In most cases, the command line (whether built-in or provided
13440 + by the boot loader) should specify the device for the root
13441 + file system.
13442 +
13443 +config CMDLINE_OVERRIDE
13444 + bool "Built-in command line overrides boot loader arguments"
13445 + default n
13446 + depends on CMDLINE_BOOL
13447 + help
13448 + Set this option to 'Y' to have the kernel ignore the boot loader
13449 + command line, and use ONLY the built-in command line.
13450 +
13451 + This is used to work around broken boot loaders. This should
13452 + be set to 'N' under normal conditions.
13453 +
13454 +endmenu
13455 +# End Processor type and features
13456 +
13457 +source "arch/ubicom32/Kconfig.debug"
13458 +
13459 +menu "Executable file formats"
13460 +source "fs/Kconfig.binfmt"
13461 +endmenu
13462 +
13463 +source "init/Kconfig"
13464 +source "kernel/Kconfig.preempt"
13465 +source "kernel/time/Kconfig"
13466 +source "mm/Kconfig"
13467 +source "net/Kconfig"
13468 +source "drivers/Kconfig"
13469 +source "fs/Kconfig"
13470 +source "security/Kconfig"
13471 +source "crypto/Kconfig"
13472 +source "lib/Kconfig"
13473 diff -ruN linux-2.6.28.10_o/arch/ubicom32/Kconfig.debug linux-2.6.28.10/arch/ubicom32/Kconfig.debug
13474 --- linux-2.6.28.10_o/arch/ubicom32/Kconfig.debug 1970-01-01 02:00:00.000000000 +0200
13475 +++ linux-2.6.28.10/arch/ubicom32/Kconfig.debug 2009-08-06 10:31:02.000000000 +0300
13476 @@ -0,0 +1,117 @@
13477 +menu "Kernel hacking"
13478 +
13479 +config TRACE_IRQFLAGS_SUPPORT
13480 + def_bool y
13481 +
13482 +config PROTECT_KERNEL
13483 + default y
13484 + bool 'Enable Kernel range register Protection'
13485 + help
13486 + Adds code to enable/disable range registers to protect static
13487 + kernel code/data from userspace. Currently the ranges covered
13488 + do no protect kernel loadable modules or dynamically allocated
13489 + kernel data.
13490 +
13491 +config NO_KERNEL_MSG
13492 + bool "Suppress Kernel BUG Messages"
13493 + help
13494 + Do not output any debug BUG messages within the kernel.
13495 +
13496 +config EARLY_PRINTK
13497 + bool "Use the driver that you selected as console also for early printk (to debug kernel bootup)."
13498 + default n
13499 + help
13500 + If you want to use the serdes driver (console=ttyUS0) for
13501 + early printk, you must also supply an additional kernel boot
13502 + parameter like this:
13503 +
13504 + serdes=ioportaddr,irq,clockrate,baud
13505 +
13506 + For an IP7160RGW eval board, you could use this:
13507 +
13508 + serdes=0x2004000,61,250000000,57600
13509 +
13510 + which will let you see early printk output at 57600 baud.
13511 +
13512 +config STOP_ON_TRAP
13513 + bool "Enable stopping at the LDSR for all traps"
13514 + default n
13515 + help
13516 + Cause the LDSR to stop all threads whenever a trap is about to be serviced
13517 +
13518 +config STOP_ON_BUG
13519 + bool "Enable stopping on failed BUG_ON()"
13520 + default n
13521 + help
13522 + Cause all BUG_ON failures to stop all threads
13523 +
13524 +config DEBUG_IRQMEASURE
13525 + bool "Enable IRQ handler measurements"
13526 + default n
13527 + help
13528 + When enabled each IRQ's min/avg/max times will be printed. If the handler
13529 + re-enables interrupt, the times will show the full time including to service
13530 + nested interrupts. See /proc/irq_measurements.
13531 +
13532 +config DEBUG_PCIMEASURE
13533 + bool "Enable PCI transaction measurements"
13534 + default n
13535 + help
13536 + When enabled the system will measure the min/avg/max timer for each PCI transactions.
13537 + See /proc/pci_measurements.
13538 +
13539 +config ACCESS_OK_CHECKS_ENABLED
13540 + bool "Enable user space access checks"
13541 + default n
13542 + help
13543 + Enabling this check causes the kernel to verify that addresses passed
13544 + to the kernel by the user space code are within the processes
13545 + address space. On a no-mmu system, this is done by examining the
13546 + processes memory data structures (adversly affecting performance) but
13547 + ensuring that a process does not ask the kernel to violate another
13548 + processes address space. Sadly, the kernel uses access_ok() for
13549 + address that are in the kernel which results in a large volume of
13550 + false positives.
13551 +
13552 +choice
13553 + prompt "Unaligned Access Support"
13554 + default UNALIGNED_ACCESS_ENABLED
13555 + help
13556 + Kernel / Userspace unaligned access handling.
13557 +
13558 +config UNALIGNED_ACCESS_ENABLED
13559 + bool "Kernel and Userspace"
13560 + help
13561 +
13562 +config UNALIGNED_ACCESS_USERSPACE_ONLY
13563 + bool "Userspace Only"
13564 + help
13565 +
13566 +config UNALIGNED_ACCESS_DISABLED
13567 + bool "Disabled"
13568 + help
13569 +
13570 +endchoice
13571 +
13572 +config DEBUG_STACKOVERFLOW
13573 + bool "Check for stack overflows"
13574 + default n
13575 + depends on DEBUG_KERNEL
13576 + help
13577 + This option will cause messages to be printed if free kernel stack space
13578 + drops below a certain limit (THREAD_SIZE /8).
13579 +
13580 +config DEBUG_STACK_USAGE
13581 + bool "Stack utilization instrumentation"
13582 + default n
13583 + depends on DEBUG_KERNEL
13584 + help
13585 + Enables the display of the minimum amount of free kernel stack which each
13586 + task has ever had available in the sysrq-T and sysrq-P debug output.
13587 +
13588 + This option will slow down process creation somewhat.
13589 +
13590 +source "lib/Kconfig.debug"
13591 +
13592 +endmenu
13593 +
13594 diff -ruN linux-2.6.28.10_o/arch/ubicom32/kernel/asm-offsets.c linux-2.6.28.10/arch/ubicom32/kernel/asm-offsets.c
13595 --- linux-2.6.28.10_o/arch/ubicom32/kernel/asm-offsets.c 1970-01-01 02:00:00.000000000 +0200
13596 +++ linux-2.6.28.10/arch/ubicom32/kernel/asm-offsets.c 2009-08-06 10:31:02.000000000 +0300
13597 @@ -0,0 +1,162 @@
13598 +/*
13599 + * arch/ubicom32/kernel/asm-offsets.c
13600 + * Ubicom32 architecture definitions needed by assembly language modules.
13601 + *
13602 + * (C) Copyright 2009, Ubicom, Inc.
13603 + *
13604 + * This file is part of the Ubicom32 Linux Kernel Port.
13605 + *
13606 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
13607 + * it and/or modify it under the terms of the GNU General Public License
13608 + * as published by the Free Software Foundation, either version 2 of the
13609 + * License, or (at your option) any later version.
13610 + *
13611 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
13612 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
13613 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13614 + * the GNU General Public License for more details.
13615 + *
13616 + * You should have received a copy of the GNU General Public License
13617 + * along with the Ubicom32 Linux Kernel Port. If not,
13618 + * see <http://www.gnu.org/licenses/>.
13619 + *
13620 + * Ubicom32 implementation derived from (with many thanks):
13621 + * arch/m68knommu
13622 + * arch/blackfin
13623 + * arch/parisc
13624 + */
13625 +/*
13626 + * This program is used to generate definitions needed by
13627 + * assembly language modules.
13628 + *
13629 + * We use the technique used in the OSF Mach kernel code:
13630 + * generate asm statements containing #defines,
13631 + * compile this file to assembler, and then extract the
13632 + * #defines from the assembly-language output.
13633 + */
13634 +
13635 +#include <linux/module.h>
13636 +#include <linux/stddef.h>
13637 +#include <linux/sched.h>
13638 +#include <linux/kernel_stat.h>
13639 +#include <linux/ptrace.h>
13640 +#include <linux/hardirq.h>
13641 +#include <asm/bootinfo.h>
13642 +#include <asm/irq.h>
13643 +#include <asm/thread_info.h>
13644 +
13645 +#define DEFINE(sym, val) \
13646 + asm volatile("\n->" #sym " %0 " #val : : "i" (val))
13647 +
13648 +#define BLANK() asm volatile("\n->" : : )
13649 +
13650 +int main(void)
13651 +{
13652 + /* offsets into the task struct */
13653 + DEFINE(TASK_STATE, offsetof(struct task_struct, state));
13654 + DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags));
13655 + DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace));
13656 + DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked));
13657 + DEFINE(TASK_THREAD, offsetof(struct task_struct, thread));
13658 + DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack));
13659 + DEFINE(TASK_MM, offsetof(struct task_struct, mm));
13660 + DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm));
13661 +
13662 + /* offsets into the kernel_stat struct */
13663 + DEFINE(STAT_IRQ, offsetof(struct kernel_stat, irqs));
13664 +
13665 + /* offsets into the irq_cpustat_t struct */
13666 + DEFINE(CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending));
13667 +
13668 + /* offsets into the thread struct */
13669 + DEFINE(THREAD_D10, offsetof(struct thread_struct, d10));
13670 + DEFINE(THREAD_D11, offsetof(struct thread_struct, d11));
13671 + DEFINE(THREAD_D12, offsetof(struct thread_struct, d12));
13672 + DEFINE(THREAD_D13, offsetof(struct thread_struct, d13));
13673 + DEFINE(THREAD_A1, offsetof(struct thread_struct, a1));
13674 + DEFINE(THREAD_A2, offsetof(struct thread_struct, a2));
13675 + DEFINE(THREAD_A5, offsetof(struct thread_struct, a5));
13676 + DEFINE(THREAD_A6, offsetof(struct thread_struct, a6));
13677 + DEFINE(THREAD_SP, offsetof(struct thread_struct, sp));
13678 +
13679 + /* offsets into the pt_regs */
13680 + DEFINE(PT_D0, offsetof(struct pt_regs, dn[0]));
13681 + DEFINE(PT_D1, offsetof(struct pt_regs, dn[1]));
13682 + DEFINE(PT_D2, offsetof(struct pt_regs, dn[2]));
13683 + DEFINE(PT_D3, offsetof(struct pt_regs, dn[3]));
13684 + DEFINE(PT_D4, offsetof(struct pt_regs, dn[4]));
13685 + DEFINE(PT_D5, offsetof(struct pt_regs, dn[5]));
13686 + DEFINE(PT_D6, offsetof(struct pt_regs, dn[6]));
13687 + DEFINE(PT_D7, offsetof(struct pt_regs, dn[7]));
13688 + DEFINE(PT_D8, offsetof(struct pt_regs, dn[8]));
13689 + DEFINE(PT_D9, offsetof(struct pt_regs, dn[9]));
13690 + DEFINE(PT_D10, offsetof(struct pt_regs, dn[10]));
13691 + DEFINE(PT_D11, offsetof(struct pt_regs, dn[11]));
13692 + DEFINE(PT_D12, offsetof(struct pt_regs, dn[12]));
13693 + DEFINE(PT_D13, offsetof(struct pt_regs, dn[13]));
13694 + DEFINE(PT_D14, offsetof(struct pt_regs, dn[14]));
13695 + DEFINE(PT_D15, offsetof(struct pt_regs, dn[15]));
13696 + DEFINE(PT_A0, offsetof(struct pt_regs, an[0]));
13697 + DEFINE(PT_A1, offsetof(struct pt_regs, an[1]));
13698 + DEFINE(PT_A2, offsetof(struct pt_regs, an[2]));
13699 + DEFINE(PT_A3, offsetof(struct pt_regs, an[3]));
13700 + DEFINE(PT_A4, offsetof(struct pt_regs, an[4]));
13701 + DEFINE(PT_A5, offsetof(struct pt_regs, an[5]));
13702 + DEFINE(PT_A6, offsetof(struct pt_regs, an[6]));
13703 + DEFINE(PT_A7, offsetof(struct pt_regs, an[7]));
13704 + DEFINE(PT_SP, offsetof(struct pt_regs, an[7]));
13705 +
13706 + DEFINE(PT_ACC0HI, offsetof(struct pt_regs, acc0[0]));
13707 + DEFINE(PT_ACC0LO, offsetof(struct pt_regs, acc0[1]));
13708 + DEFINE(PT_MAC_RC16, offsetof(struct pt_regs, mac_rc16));
13709 +
13710 + DEFINE(PT_ACC1HI, offsetof(struct pt_regs, acc1[0]));
13711 + DEFINE(PT_ACC1LO, offsetof(struct pt_regs, acc1[1]));
13712 +
13713 + DEFINE(PT_SOURCE3, offsetof(struct pt_regs, source3));
13714 + DEFINE(PT_INST_CNT, offsetof(struct pt_regs, inst_cnt));
13715 + DEFINE(PT_CSR, offsetof(struct pt_regs, csr));
13716 + DEFINE(PT_DUMMY_UNUSED, offsetof(struct pt_regs, dummy_unused));
13717 +
13718 + DEFINE(PT_INT_MASK0, offsetof(struct pt_regs, int_mask0));
13719 + DEFINE(PT_INT_MASK1, offsetof(struct pt_regs, int_mask1));
13720 +
13721 + DEFINE(PT_PC, offsetof(struct pt_regs, pc));
13722 +
13723 + DEFINE(PT_TRAP_CAUSE, offsetof(struct pt_regs, trap_cause));
13724 +
13725 + DEFINE(PT_SIZE, sizeof(struct pt_regs));
13726 +
13727 + DEFINE(PT_FRAME_TYPE, offsetof(struct pt_regs, frame_type));
13728 +
13729 + DEFINE(PT_ORIGINAL_D0, offsetof(struct pt_regs, original_dn_0));
13730 + DEFINE(PT_PREVIOUS_PC, offsetof(struct pt_regs, previous_pc));
13731 +
13732 + /* offsets into the kernel_stat struct */
13733 + DEFINE(STAT_IRQ, offsetof(struct kernel_stat, irqs));
13734 +
13735 + /* signal defines */
13736 + DEFINE(SIGSEGV, SIGSEGV);
13737 + //DEFINE(SEGV_MAPERR, SEGV_MAPERR);
13738 + DEFINE(SIGTRAP, SIGTRAP);
13739 + //DEFINE(TRAP_TRACE, TRAP_TRACE);
13740 +
13741 + DEFINE(PT_PTRACED, PT_PTRACED);
13742 + DEFINE(PT_DTRACE, PT_DTRACE);
13743 +
13744 + DEFINE(ASM_THREAD_SIZE, THREAD_SIZE);
13745 +
13746 + /* Offsets in thread_info structure */
13747 + DEFINE(TI_TASK, offsetof(struct thread_info, task));
13748 + DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain));
13749 + DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
13750 + DEFINE(TI_PREEMPTCOUNT, offsetof(struct thread_info, preempt_count));
13751 + DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
13752 + DEFINE(TI_INTR_NESTING, offsetof(struct thread_info, interrupt_nesting));
13753 + DEFINE(ASM_TIF_NEED_RESCHED, TIF_NEED_RESCHED);
13754 + DEFINE(ASM_TIF_SYSCALL_TRACE, TIF_SYSCALL_TRACE);
13755 + DEFINE(ASM_TIF_SIGPENDING, TIF_SIGPENDING);
13756 +
13757 + DEFINE(ASM_RAM_END, (CONFIG_RAMBASE + CONFIG_RAMSIZE));
13758 + return 0;
13759 +}
13760 diff -ruN linux-2.6.28.10_o/arch/ubicom32/kernel/Makefile linux-2.6.28.10/arch/ubicom32/kernel/Makefile
13761 --- linux-2.6.28.10_o/arch/ubicom32/kernel/Makefile 1970-01-01 02:00:00.000000000 +0200
13762 +++ linux-2.6.28.10/arch/ubicom32/kernel/Makefile 2009-08-06 10:31:02.000000000 +0300
13763 @@ -0,0 +1,64 @@
13764 +#
13765 +# arch/ubicom32/kernel/Makefile
13766 +# Main Makefile for the Ubicom32 arch directory.
13767 +#
13768 +# (C) Copyright 2009, Ubicom, Inc.
13769 +#
13770 +# This file is part of the Ubicom32 Linux Kernel Port.
13771 +#
13772 +# The Ubicom32 Linux Kernel Port is free software: you can redistribute
13773 +# it and/or modify it under the terms of the GNU General Public License
13774 +# as published by the Free Software Foundation, either version 2 of the
13775 +# License, or (at your option) any later version.
13776 +#
13777 +# The Ubicom32 Linux Kernel Port is distributed in the hope that it
13778 +# will be useful, but WITHOUT ANY WARRANTY; without even the implied
13779 +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13780 +# the GNU General Public License for more details.
13781 +#
13782 +# You should have received a copy of the GNU General Public License
13783 +# along with the Ubicom32 Linux Kernel Port. If not,
13784 +# see <http://www.gnu.org/licenses/>.
13785 +#
13786 +# Ubicom32 implementation derived from (with many thanks):
13787 +# arch/m68knommu
13788 +# arch/blackfin
13789 +# arch/parisc
13790 +#
13791 +
13792 +extra-y := head.o vmlinux.lds
13793 +
13794 +obj-y += \
13795 + devtree.o \
13796 + dma.o \
13797 + flat.o \
13798 + init_task.o \
13799 + irq.o \
13800 + ldsr.o \
13801 + os_node.o \
13802 + process.o \
13803 + processor.o \
13804 + ptrace.o \
13805 + setup.o \
13806 + signal.o \
13807 + stacktrace.o \
13808 + sys_ubicom32.o \
13809 + syscalltable.o \
13810 + thread.o \
13811 + time.o \
13812 + traps.o \
13813 + ubicom32_context_switch.o \
13814 + ubicom32_ksyms.o \
13815 + ubicom32_syscall.o \
13816 + unaligned_trap.o
13817 +
13818 +obj-$(CONFIG_MODULES) += module.o
13819 +obj-$(CONFIG_COMEMPCI) += comempci.o
13820 +obj-$(CONFIG_SMP) += smp.o topology.o
13821 +obj-$(CONFIG_ACCESS_OK_CHECKS_ENABLED) += uaccess.o
13822 +obj-$(CONFIG_GENERIC_CLOCKEVENTS) += timer_device.o
13823 +obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += timer_broadcast.o
13824 +
13825 +ifndef CONFIG_GENERIC_CLOCKEVENTS
13826 +obj-y += timer_tick.o
13827 +endif
13828 diff -ruN linux-2.6.28.10_o/arch/ubicom32/kernel/syscalltable.S linux-2.6.28.10/arch/ubicom32/kernel/syscalltable.S
13829 --- linux-2.6.28.10_o/arch/ubicom32/kernel/syscalltable.S 1970-01-01 02:00:00.000000000 +0200
13830 +++ linux-2.6.28.10/arch/ubicom32/kernel/syscalltable.S 2009-08-06 10:31:02.000000000 +0300
13831 @@ -0,0 +1,377 @@
13832 +/*
13833 + * arch/ubicom32/kernel/syscalltable.S
13834 + * <TODO: Replace with short file description>
13835 + *
13836 + * (C) Copyright 2009, Ubicom, Inc.
13837 + *
13838 + * This file is part of the Ubicom32 Linux Kernel Port.
13839 + *
13840 + * The Ubicom32 Linux Kernel Port is free software: you can redistribute
13841 + * it and/or modify it under the terms of the GNU General Public License
13842 + * as published by the Free Software Foundation, either version 2 of the
13843 + * License, or (at your option) any later version.
13844 + *
13845 + * The Ubicom32 Linux Kernel Port is distributed in the hope that it
13846 + * will be useful, but WITHOUT ANY WARRANTY; without even the implied
13847 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13848 + * the GNU General Public License for more details.
13849 + *
13850 + * You should have received a copy of the GNU General Public License
13851 + * along with the Ubicom32 Linux Kernel Port. If not,
13852 + * see <http://www.gnu.org/licenses/>.
13853 + *
13854 + * Ubicom32 implementation derived from (with many thanks):
13855 + * arch/m68knommu
13856 + * arch/blackfin
13857 + * arch/parisc
13858 + */
13859 +/*
13860 + *
13861 + * Copyright (C) 2002, Greg Ungerer (gerg@snapgear.com)
13862 + * Copyright (C) 1998 D. Jeff Dionne <jeff@lineo.ca>, Kenneth Albanowski <kjahds@kjahds.com>,
13863 + * Copyright (C) 2000 Lineo Inc. (www.lineo.com)
13864 + * Copyright (C) 1991, 1992 Linus Torvalds
13865 + */
13866 +
13867 +#include <linux/sys.h>
13868 +#include <linux/linkage.h>
13869 +#include <asm/unistd.h>
13870 +
13871 +.text
13872 +ALIGN
13873 + .global sys_call_table
13874 +sys_call_table:
13875 + .long sys_ni_syscall /* 0 - old "setup()" system call*/
13876 + .long sys_exit
13877 + .long sys_fork
13878 + .long sys_read
13879 + .long sys_write
13880 + .long sys_open /* 5 */
13881 + .long sys_close
13882 + .long sys_waitpid
13883 + .long sys_creat
13884 + .long sys_link
13885 + .long sys_unlink /* 10 */
13886 + .long execve_intercept
13887 + .long sys_chdir
13888 + .long sys_time
13889 + .long sys_mknod
13890 + .long sys_chmod /* 15 */
13891 + .long sys_chown16
13892 + .long sys_ni_syscall /* old break syscall holder */
13893 + .long sys_stat
13894 + .long sys_lseek
13895 + .long sys_getpid /* 20 */
13896 + .long sys_mount
13897 + .long sys_oldumount
13898 + .long sys_setuid16
13899 + .long sys_getuid16
13900 + .long sys_stime /* 25 */
13901 + .long sys_ptrace
13902 + .long sys_alarm
13903 + .long sys_fstat
13904 + .long sys_pause
13905 + .long sys_utime /* 30 */
13906 + .long sys_ni_syscall /* old stty syscall holder */
13907 + .long sys_ni_syscall /* old gtty syscall holder */
13908 + .long sys_access
13909 + .long sys_nice
13910 + .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */
13911 + .long sys_sync
13912 + .long sys_kill
13913 + .long sys_rename
13914 + .long sys_mkdir
13915 + .long sys_rmdir /* 40 */
13916 + .long sys_dup
13917 + .long sys_pipe
13918 + .long sys_times
13919 + .long sys_ni_syscall /* old prof syscall holder */
13920 + .long sys_brk /* 45 */
13921 + .long sys_setgid16
13922 + .long sys_getgid16
13923 + .long sys_signal
13924 + .long sys_geteuid16
13925 + .long sys_getegid16 /* 50 */
13926 + .long sys_acct
13927 + .long sys_umount /* recycled never used phys() */
13928 + .long sys_ni_syscall /* old lock syscall holder */
13929 + .long sys_ioctl
13930 + .long sys_fcntl /* 55 */
13931 + .long sys_ni_syscall /* old mpx syscall holder */
13932 + .long sys_setpgid
13933 + .long sys_ni_syscall /* old ulimit syscall holder */
13934 + .long sys_ni_syscall
13935 + .long sys_umask /* 60 */
13936 + .long sys_chroot
13937 + .long sys_ustat
13938 + .long sys_dup2
13939 + .long sys_getppid
13940 + .long sys_getpgrp /* 65 */
13941 + .long sys_setsid
13942 + .long sys_sigaction
13943 + .long sys_sgetmask
13944 + .long sys_ssetmask
13945 + .long sys_setreuid16 /* 70 */
13946 + .long sys_setregid16
13947 + .long sys_sigsuspend
13948 + .long sys_sigpending
13949 + .long sys_sethostname
13950 + .long sys_setrlimit /* 75 */
13951 + .long sys_old_getrlimit
13952 + .long sys_getrusage
13953 + .long sys_gettimeofday
13954 + .long sys_settimeofday
13955 + .long sys_getgroups16 /* 80 */
13956 + .long sys_setgroups16
13957 + .long old_select
13958 + .long sys_symlink
13959 + .long sys_lstat
13960 + .long sys_readlink /* 85 */
13961 + .long sys_uselib
13962 + .long sys_ni_syscall /* _sys_swapon */
13963 + .long sys_reboot
13964 + .long sys_old_readdir
13965 + .long old_mmap /* 90 */
13966 + .long sys_munmap
13967 + .long sys_truncate
13968 + .long sys_ftruncate
13969 + .long sys_fchmod
13970 + .long sys_fchown16 /* 95 */
13971 + .long sys_getpriority
13972 + .long sys_setpriority
13973 + .long sys_ni_syscall /* old profil syscall holder */
13974 + .long sys_statfs
13975 + .long sys_fstatfs /* 100 */
13976 + .long sys_ni_syscall /* ioperm for i386 */
13977 + .long sys_socketcall
13978 + .long sys_syslog
13979 + .long sys_setitimer
13980 + .long sys_getitimer /* 105 */
13981 + .long sys_newstat
13982 + .long sys_newlstat
13983 + .long sys_newfstat
13984 + .long sys_ni_syscall
13985 + .long sys_ni_syscall /* iopl for i386 */ /* 110 */
13986 + .long sys_vhangup
13987 + .long sys_ni_syscall /* obsolete idle() syscall */
13988 + .long sys_ni_syscall /* vm86old for i386 */
13989 + .long sys_wait4
13990 + .long sys_ni_syscall /* 115 */ /* _sys_swapoff */
13991 + .long sys_sysinfo
13992 + .long sys_ipc
13993 + .long sys_fsync
13994 + .long sys_sigreturn
13995 + .long clone_intercept /* 120 */
13996 + .long sys_setdomainname
13997 + .long sys_newuname
13998 + .long sys_cacheflush /* modify_ldt for i386 */
13999 + .long sys_adjtimex
14000 + .long sys_ni_syscall /* 125 */ /* _sys_mprotect */
14001 + .long sys_sigprocmask
14002 + .long sys_ni_syscall /* old "creat_module" */
14003 + .long sys_init_module
14004 + .long sys_delete_module
14005 + .long sys_ni_syscall /* 130: old "get_kernel_syms" */
14006 + .long sys_quotactl
14007 + .long sys_getpgid
14008 + .long sys_fchdir
14009 + .long sys_bdflush
14010 + .long sys_sysfs /* 135 */
14011 + .long sys_personality
14012 + .long sys_ni_syscall /* for afs_syscall */
14013 + .long sys_setfsuid16
14014 + .long sys_setfsgid16
14015 + .long sys_llseek /* 140 */
14016 + .long sys_getdents
14017 + .long sys_select
14018 + .long sys_flock
14019 + .long sys_ni_syscall /* _sys_msync */
14020 + .long sys_readv /* 145 */
14021 + .long sys_writev
14022 + .long sys_getsid
14023 + .long sys_fdatasync
14024 + .long sys_sysctl
14025 + .long sys_ni_syscall /* 150 */ /* _sys_mlock */
14026 + .long sys_ni_syscall /* _sys_munlock */
14027 + .long sys_ni_syscall /* _sys_mlockall */
14028 + .long sys_ni_syscall /* _sys_munlockall */
14029 + .long sys_sched_setparam
14030 + .long sys_sched_getparam /* 155 */
14031 + .long sys_sched_setscheduler
14032 + .long sys_sched_getscheduler
14033 + .long sys_sched_yield
14034 + .long sys_sched_get_priority_max
14035 + .long sys_sched_get_priority_min /* 160 */
14036 + .long sys_sched_rr_get_interval
14037 + .long sys_nanosleep
14038 + .long sys_ni_syscall /* _sys_mremap */
14039 + .long sys_setresuid16
14040 + .long sys_getresuid16 /* 165 */
14041 + .long sys_getpagesize /* _sys_getpagesize */
14042 + .long sys_ni_syscall /* old "query_module" */
14043 + .long sys_poll
14044 + .long sys_ni_syscall /* _sys_nfsservctl */
14045 + .long sys_setresgid16 /* 170 */
14046 + .long sys_getresgid16
14047 + .long sys_prctl
14048 + .long sys_rt_sigreturn
14049 + .long sys_rt_sigaction
14050 + .long sys_rt_sigprocmask /* 175 */
14051 + .long sys_rt_sigpending
14052 + .long sys_rt_sigtimedwait
14053 + .long sys_rt_sigqueueinfo
14054 + .long sys_rt_sigsuspend
14055 + .long sys_pread64 /* 180 */
14056 + .long sys_pwrite64
14057 + .long sys_lchown16
14058 + .long sys_getcwd
14059 + .long sys_capget
14060 + .long sys_capset /* 185 */
14061 + .long sys_sigaltstack
14062 + .long sys_sendfile
14063 + .long sys_ni_syscall /* streams1 */
14064 + .long sys_ni_syscall /* streams2 */
14065 + .long vfork_intercept /* 190 */
14066 + .long sys_getrlimit
14067 + .long sys_mmap2
14068 + .long sys_truncate64
14069 + .long sys_ftruncate64
14070 + .long sys_stat64 /* 195 */
14071 + .long sys_lstat64
14072 + .long sys_fstat64
14073 + .long sys_chown
14074 + .long sys_getuid
14075 + .long sys_getgid /* 200 */
14076 + .long sys_geteuid
14077 + .long sys_getegid
14078 + .long sys_setreuid
14079 + .long sys_setregid
14080 + .long sys_getgroups /* 205 */
14081 + .long sys_setgroups
14082 + .long sys_fchown
14083 + .long sys_setresuid
14084 + .long sys_getresuid
14085 + .long sys_setresgid /* 210 */
14086 + .long sys_getresgid
14087 + .long sys_lchown
14088 + .long sys_setuid
14089 + .long sys_setgid
14090 + .long sys_setfsuid /* 215 */
14091 + .long sys_setfsgid
14092 + .long sys_pivot_root
14093 + .long sys_ni_syscall
14094 + .long sys_ni_syscall
14095 + .long sys_getdents64 /* 220 */
14096 + .long sys_gettid
14097 + .long sys_tkill
14098 + .long sys_setxattr
14099 + .long sys_lsetxattr
14100 + .long sys_fsetxattr /* 225 */
14101 + .long sys_getxattr
14102 + .long sys_lgetxattr
14103 + .long sys_fgetxattr
14104 + .long sys_listxattr
14105 + .long sys_llistxattr /* 230 */
14106 + .long sys_flistxattr
14107 + .long sys_removexattr
14108 + .long sys_lremovexattr
14109 + .long sys_fremovexattr
14110 + .long sys_futex /* 235 */
14111 + .long sys_sendfile64
14112 + .long sys_ni_syscall /* _sys_mincore */
14113 + .long sys_ni_syscall /* _sys_madvise */
14114 + .long sys_fcntl64
14115 + .long sys_readahead /* 240 */
14116 + .long sys_io_setup
14117 + .long sys_io_destroy
14118 + .long sys_io_getevents
14119 + .long sys_io_submit
14120 + .long sys_io_cancel /* 245 */
14121 + .long sys_fadvise64
14122 + .long sys_exit_group
14123 + .long sys_lookup_dcookie
14124 + .long sys_epoll_create
14125 + .long sys_epoll_ctl /* 250 */
14126 + .long sys_epoll_wait
14127 + .long sys_ni_syscall /* _sys_remap_file_pages */
14128 + .long sys_set_tid_address
14129 + .long sys_timer_create
14130 + .long sys_timer_settime /* 255 */
14131 + .long sys_timer_gettime
14132 + .long sys_timer_getoverrun
14133 + .long sys_timer_delete
14134 + .long sys_clock_settime
14135 + .long sys_clock_gettime /* 260 */
14136 + .long sys_clock_getres
14137 + .long sys_clock_nanosleep
14138 + .long sys_statfs64
14139 + .long sys_fstatfs64
14140 + .long sys_tgkill /* 265 */
14141 + .long sys_utimes
14142 + .long sys_fadvise64_64
14143 + .long sys_mbind
14144 + .long sys_get_mempolicy
14145 + .long sys_set_mempolicy /* 270 */
14146 + .long sys_mq_open
14147 + .long sys_mq_unlink
14148 + .long sys_mq_timedsend
14149 + .long sys_mq_timedreceive
14150 + .long sys_mq_notify /* 275 */
14151 + .long sys_mq_getsetattr
14152 + .long sys_waitid
14153 + .long sys_ni_syscall /* for _sys_vserver */
14154 + .long sys_add_key
14155 + .long sys_request_key /* 280 */
14156 + .long sys_keyctl
14157 + .long sys_ioprio_set
14158 + .long sys_ioprio_get
14159 + .long sys_inotify_init
14160 + .long sys_inotify_add_watch /* 285 */
14161 + .long sys_inotify_rm_watch
14162 + .long sys_migrate_pages
14163 + .long sys_openat
14164 + .long sys_mkdirat
14165 + .long sys_mknodat /* 290 */
14166 + .long sys_fchownat
14167 + .long sys_futimesat
14168 + .long sys_fstatat64
14169 + .long sys_unlinkat
14170 + .long sys_renameat /* 295 */
14171 + .long sys_linkat
14172 + .long sys_symlinkat
14173 + .long sys_readlinkat
14174 + .long sys_fchmodat
14175 + .long sys_faccessat /* 300 */
14176 + .long sys_ni_syscall /* Reserved for pselect6 */
14177 + .long sys_ni_syscall /* Reserved for ppoll */
14178 + .long sys_unshare
14179 + .long sys_set_robust_list
14180 + .long sys_get_robust_list /* 305 */
14181 + .long sys_splice
14182 + .long sys_sync_file_range
14183 + .long sys_tee
14184 + .long sys_vmsplice
14185 + .long sys_move_pages /* 310 */
14186 + .long sys_sched_setaffinity
14187 + .long sys_sched_getaffinity
14188 + .long sys_kexec_load
14189 + .long sys_getcpu
14190 + .long sys_epoll_pwait /* 315 */
14191 + .long sys_utimensat
14192 + .long sys_signalfd
14193 + .long sys_timerfd_create
14194 + .long sys_eventfd
14195 + .long sys_fallocate /* 320 */
14196 + .long sys_timerfd_settime
14197 + .long sys_timerfd_gettime
14198 + .long sys_ni_syscall /* sys_signalfd4 */
14199 + .long sys_ni_syscall /* sys_eventfd2 */
14200 + .long sys_ni_syscall /* sys_epoll_create1 */
14201 + /* 325 */
14202 + .long sys_ni_syscall /* sys_dup3 */
14203 + .long sys_ni_syscall /* sys_pipe2 */
14204 + .long sys_ni_syscall /* sys_inotify_init1 */
14205 + .rept NR_syscalls-(.-sys_call_table)/4
14206 + .long sys_ni_syscall
14207 + .endr
14208 +
14209 diff -ruN linux-2.6.28.10_o/arch/ubicom32/lib/Makefile linux-2.6.28.10/arch/ubicom32/lib/Makefile
14210 --- linux-2.6.28.10_o/arch/ubicom32/lib/Makefile 1970-01-01 02:00:00.000000000 +0200
14211 +++ linux-2.6.28.10/arch/ubicom32/lib/Makefile 2009-08-06 10:31:02.000000000 +0300
14212 @@ -0,0 +1,32 @@
14213 +#
14214 +# arch/ubicom32/lib/Makefile
14215 +# <TODO: Replace with short file description>
14216 +#
14217 +# (C) Copyright 2009, Ubicom, Inc.
14218 +#
14219 +# This file is part of the Ubicom32 Linux Kernel Port.
14220 +#
14221 +# The Ubicom32 Linux Kernel Port is free software: you can redistribute
14222 +# it and/or modify it under the terms of the GNU General Public License
14223 +# as published by the Free Software Foundation, either version 2 of the
14224 +# License, or (at your option) any later version.
14225 +#
14226 +# The Ubicom32 Linux Kernel Port is distributed in the hope that it
14227 +# will be useful, but WITHOUT ANY WARRANTY; without even the implied
14228 +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14229 +# the GNU General Public License for more details.
14230 +#
14231 +# You should have received a copy of the GNU General Public License
14232 +# along with the Ubicom32 Linux Kernel Port. If not,
14233 +# see <http://www.gnu.org/licenses/>.
14234 +#
14235 +# Ubicom32 implementation derived from (with many thanks):
14236 +# arch/m68knommu
14237 +# arch/blackfin
14238 +# arch/parisc
14239 +#
14240 +#
14241 +# Makefile for m68knommu specific library files..
14242 +#
14243 +
14244 +lib-y := checksum.o delay.o mem_ubicom32.o
14245 diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-common/Makefile linux-2.6.28.10/arch/ubicom32/mach-common/Makefile
14246 --- linux-2.6.28.10_o/arch/ubicom32/mach-common/Makefile 1970-01-01 02:00:00.000000000 +0200
14247 +++ linux-2.6.28.10/arch/ubicom32/mach-common/Makefile 2009-08-06 10:31:02.000000000 +0300
14248 @@ -0,0 +1,40 @@
14249 +#
14250 +# arch/ubicom32/mach-common/Makefile
14251 +# Makefile for Ubicom32 generic drivers/code.
14252 +#
14253 +# (C) Copyright 2009, Ubicom, Inc.
14254 +#
14255 +# This file is part of the Ubicom32 Linux Kernel Port.
14256 +#
14257 +# The Ubicom32 Linux Kernel Port is free software: you can redistribute
14258 +# it and/or modify it under the terms of the GNU General Public License
14259 +# as published by the Free Software Foundation, either version 2 of the
14260 +# License, or (at your option) any later version.
14261 +#
14262 +# The Ubicom32 Linux Kernel Port is distributed in the hope that it
14263 +# will be useful, but WITHOUT ANY WARRANTY; without even the implied
14264 +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14265 +# the GNU General Public License for more details.
14266 +#
14267 +# You should have received a copy of the GNU General Public License
14268 +# along with the Ubicom32 Linux Kernel Port. If not,
14269 +# see <http://www.gnu.org/licenses/>.
14270 +#
14271 +# Ubicom32 implementation derived from (with many thanks):
14272 +# arch/m68knommu
14273 +# arch/blackfin
14274 +# arch/parisc
14275 +#
14276 +
14277 +obj-y += cachectl.o common.o usb_tio.o usb.o ubi32-gpio.o board.o bootargs.o
14278 +obj-$(CONFIG_PCI) += pci.o io.o
14279 +
14280 +obj-$(CONFIG_FB_UBICOM32) += vdc_tio.o
14281 +obj-$(CONFIG_UBICOM_HID) += ubicom32hid.o
14282 +obj-$(CONFIG_UBICOM_INPUT) += ubicom32input.o
14283 +obj-$(CONFIG_UBICOM_INPUT_I2C) += ubicom32input_i2c.o
14284 +obj-$(CONFIG_UBICOM_SWITCH) += switch-core.o
14285 +obj-$(CONFIG_UBICOM_SWITCH_BCM539X) += switch-bcm539x.o
14286 +obj-$(CONFIG_UIO_UBICOM32RING) += ring_tio.o
14287 +obj-$(CONFIG_SND_UBI32) += audio_tio.o
14288 +
14289 diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-ip5k/Kconfig linux-2.6.28.10/arch/ubicom32/mach-ip5k/Kconfig
14290 --- linux-2.6.28.10_o/arch/ubicom32/mach-ip5k/Kconfig 1970-01-01 02:00:00.000000000 +0200
14291 +++ linux-2.6.28.10/arch/ubicom32/mach-ip5k/Kconfig 2009-08-06 10:31:02.000000000 +0300
14292 @@ -0,0 +1,32 @@
14293 +
14294 +config IP5170DPF
14295 + bool "IP5170DPF"
14296 + select UBICOM32_V3
14297 + select I2C
14298 + select I2C_GPIO
14299 + select FB
14300 + select FB_UBICOM32
14301 + select BACKLIGHT_LCD_SUPPORT
14302 + select BACKLIGHT_CLASS_DEVICE
14303 + select UBICOM_HID
14304 + select NEW_LEDS
14305 + select LEDS_CLASS
14306 + select LEDS_GPIO
14307 + select BRD_64MB
14308 + help
14309 + IP5170 Digital Picture Frame board, 8005-1113, IP5K-BEV-0011-13 v1.3
14310 +
14311 +config IP5160DEV
14312 + bool "IP5160Dev_Ver1Dot1"
14313 + select UBICOM32_V3
14314 + select BRD_64MB
14315 + help
14316 + Ubicom StreamEngine 5000 Development Board, IP5K-BDV-0004-11 v1.1
14317 +
14318 +config IP5160EVAL
14319 + bool "IP5160RGWEval_Ver2Rev2"
14320 + select UBICOM32_V3
14321 + select BRD_32MB
14322 + help
14323 + Ubicom StreamEngine 5000 RGW Evaluation Board, IP5K-RGW-0004-11 v2.2
14324 +
14325 diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-ip5k/Makefile linux-2.6.28.10/arch/ubicom32/mach-ip5k/Makefile
14326 --- linux-2.6.28.10_o/arch/ubicom32/mach-ip5k/Makefile 1970-01-01 02:00:00.000000000 +0200
14327 +++ linux-2.6.28.10/arch/ubicom32/mach-ip5k/Makefile 2009-08-06 10:31:02.000000000 +0300
14328 @@ -0,0 +1,32 @@
14329 +#
14330 +# arch/ubicom32/mach-ip5k/Makefile
14331 +# Makefile for boards which have an ip5k on them.
14332 +#
14333 +# (C) Copyright 2009, Ubicom, Inc.
14334 +#
14335 +# This file is part of the Ubicom32 Linux Kernel Port.
14336 +#
14337 +# The Ubicom32 Linux Kernel Port is free software: you can redistribute
14338 +# it and/or modify it under the terms of the GNU General Public License
14339 +# as published by the Free Software Foundation, either version 2 of the
14340 +# License, or (at your option) any later version.
14341 +#
14342 +# The Ubicom32 Linux Kernel Port is distributed in the hope that it
14343 +# will be useful, but WITHOUT ANY WARRANTY; without even the implied
14344 +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14345 +# the GNU General Public License for more details.
14346 +#
14347 +# You should have received a copy of the GNU General Public License
14348 +# along with the Ubicom32 Linux Kernel Port. If not,
14349 +# see <http://www.gnu.org/licenses/>.
14350 +#
14351 +# Ubicom32 implementation derived from (with many thanks):
14352 +# arch/m68knommu
14353 +# arch/blackfin
14354 +# arch/parisc
14355 +#
14356 +
14357 +obj-$(CONFIG_IP5170DPF) += board-ip5170dpf.o
14358 +obj-$(CONFIG_IP5160DEV) += board-ip5160dev.o
14359 +obj-$(CONFIG_IP5160EVAL) += board-ip5160rgw.o
14360 +
14361 diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-ip7k/Kconfig linux-2.6.28.10/arch/ubicom32/mach-ip7k/Kconfig
14362 --- linux-2.6.28.10_o/arch/ubicom32/mach-ip7k/Kconfig 1970-01-01 02:00:00.000000000 +0200
14363 +++ linux-2.6.28.10/arch/ubicom32/mach-ip7k/Kconfig 2009-08-06 10:31:02.000000000 +0300
14364 @@ -0,0 +1,132 @@
14365 +config IP7145DPF
14366 + bool "IP7145DPF"
14367 + select UBICOM32_V4
14368 + select UBICOM_INPUT
14369 + select UBICOM_INPUT_I2C
14370 + select RTC_CLASS
14371 + select RTC_DRV_S35390A
14372 + select I2C
14373 + select I2C_GPIO
14374 + select GPIO_PCA953X
14375 + select FB
14376 + select FB_UBICOM32
14377 + select BACKLIGHT_LCD_SUPPORT
14378 + select LCD_CLASS_DEVICE
14379 + select LCD_UBICOM32
14380 + select BACKLIGHT_CLASS_DEVICE
14381 + select BACKLIGHT_UBICOM32
14382 + select SND_UBI32
14383 + select MMC_UBICOM32
14384 + select MMC
14385 + select MMC_BLOCK
14386 + select BRD_64MB
14387 + help
14388 + IP7145 Digital Picture Frame reference design, supports:
14389 + 8007-0410 v1.0
14390 +
14391 +config IP7160RGW
14392 + bool "IP7160RGW"
14393 + select UBICOM32_V4
14394 + select UBICOM_INPUT
14395 + select NEW_LEDS
14396 + select LEDS_CLASS
14397 + select LEDS_GPIO
14398 + select BRD_64MB
14399 + select SPI
14400 + select SPI_UBICOM32_GPIO
14401 + select VLAN_8021Q
14402 + select UBICOM_SWITCH
14403 + select UBICOM_SWITCH_BCM539X
14404 + help
14405 + Ubicom IP7160 RGW Eval, supports:
14406 + 8007-0110 v1.0
14407 + 8007-0111 v1.1
14408 + 8007-0112 v1.2
14409 +
14410 +config IP7160BRINGUP
14411 + bool "IP7160BRINGUP"
14412 + select UBICOM32_V4
14413 + select NEW_LEDS
14414 + select LEDS_CLASS
14415 + select LEDS_GPIO
14416 + select BRD_64MB
14417 + help
14418 + Ubicom IP7160 Bringup, supports:
14419 + 8007-0010 v1.0
14420 +
14421 +config IP7160DPF
14422 + bool "IP7160DPF"
14423 + select UBICOM32_V4
14424 + select I2C
14425 + select I2C_GPIO
14426 + select FB
14427 + select FB_UBICOM32
14428 + select BACKLIGHT_LCD_SUPPORT
14429 + select BACKLIGHT_CLASS_DEVICE
14430 + select SND_UBI32
14431 + select SND_UBI32_AUDIO_CS4350
14432 + select UBICOM_HID
14433 + select BRD_64MB
14434 + help
14435 + IP7160 Digital Picture Frame board, supports:
14436 + 8007-0211 Rev 1.1
14437 +
14438 +config IP7500MODULE
14439 + bool "IP7500MODULE"
14440 + select UBICOM32_V4
14441 + select BRD_128MB
14442 + help
14443 + Ubicom IP7500 CPU Module board, supports:
14444 + 8007-0510 v1.0
14445 + 8007-0510A v1.0
14446 +
14447 + Please see ip7500module.c for more details.
14448 +
14449 +config IP7500AV
14450 + bool "IP7500AV"
14451 + select UBICOM32_V4
14452 + select BRD_128MB
14453 + select I2C
14454 + select I2C_GPIO
14455 + select SND_UBI32
14456 + select SND_UBI32_AUDIO_CS4384
14457 + select FB
14458 + select FB_UBICOM32
14459 + help
14460 + Ubicom IP7500 Audio Video board, supports:
14461 + 8007-0810 v1.0
14462 +
14463 + With Ubicom IP7500 CPU Module board:
14464 + 8007-0510 v1.0 -or-
14465 + 8007-0510A v1.0
14466 +
14467 + Please see ip7500av.c for more details.
14468 +
14469 +config IP7500MEDIA
14470 + bool "IP7500MEDIA"
14471 + select UBICOM32_V4
14472 + select UBICOM_INPUT_I2C
14473 + select RTC_CLASS
14474 + select RTC_DRV_S35390A
14475 + select I2C
14476 + select I2C_GPIO
14477 + select GPIO_PCA953X
14478 + select FB
14479 + select FB_UBICOM32
14480 + select BACKLIGHT_LCD_SUPPORT
14481 + select LCD_CLASS_DEVICE
14482 + select LCD_UBICOM32
14483 + select BACKLIGHT_CLASS_DEVICE
14484 + select BACKLIGHT_UBICOM32
14485 + select SND_UBI32
14486 + select SND_UBI32_AUDIO_CS4350
14487 + select MMC_UBICOM32
14488 + select MMC
14489 + select MMC_BLOCK
14490 + select BRD_128MB
14491 + help
14492 + IP7500 Media Board w/ IP7500 CPU Module board, supports:
14493 + 8007-0610 v1.0 w/ 8007-0510 v1.0
14494 +
14495 + Please see ip7500media.c for more details.
14496 +
14497 diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-ip7k/Makefile linux-2.6.28.10/arch/ubicom32/mach-ip7k/Makefile
14498 --- linux-2.6.28.10_o/arch/ubicom32/mach-ip7k/Makefile 1970-01-01 02:00:00.000000000 +0200
14499 +++ linux-2.6.28.10/arch/ubicom32/mach-ip7k/Makefile 2009-08-06 10:31:02.000000000 +0300
14500 @@ -0,0 +1,35 @@
14501 +#
14502 +# arch/ubicom32/mach-ip7k/Makefile
14503 +# Makefile for ip7k based boards.
14504 +#
14505 +# (C) Copyright 2009, Ubicom, Inc.
14506 +#
14507 +# This file is part of the Ubicom32 Linux Kernel Port.
14508 +#
14509 +# The Ubicom32 Linux Kernel Port is free software: you can redistribute
14510 +# it and/or modify it under the terms of the GNU General Public License
14511 +# as published by the Free Software Foundation, either version 2 of the
14512 +# License, or (at your option) any later version.
14513 +#
14514 +# The Ubicom32 Linux Kernel Port is distributed in the hope that it
14515 +# will be useful, but WITHOUT ANY WARRANTY; without even the implied
14516 +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14517 +# the GNU General Public License for more details.
14518 +#
14519 +# You should have received a copy of the GNU General Public License
14520 +# along with the Ubicom32 Linux Kernel Port. If not,
14521 +# see <http://www.gnu.org/licenses/>.
14522 +#
14523 +# Ubicom32 implementation derived from (with many thanks):
14524 +# arch/m68knommu
14525 +# arch/blackfin
14526 +# arch/parisc
14527 +#
14528 +
14529 +obj-$(CONFIG_IP7145DPF) += board-ip7145dpf.o
14530 +obj-$(CONFIG_IP7160RGW) += board-ip7160rgw.o
14531 +obj-$(CONFIG_IP7160BRINGUP) += board-ip7160bringup.o
14532 +obj-$(CONFIG_IP7160DPF) += board-ip7160dpf.o
14533 +obj-$(CONFIG_IP7500MODULE) += board-ip7500module.o
14534 +obj-$(CONFIG_IP7500MEDIA) += board-ip7500media.o
14535 +obj-$(CONFIG_IP7500AV) += board-ip7500av.o
14536 diff -ruN linux-2.6.28.10_o/arch/ubicom32/Makefile linux-2.6.28.10/arch/ubicom32/Makefile
14537 --- linux-2.6.28.10_o/arch/ubicom32/Makefile 1970-01-01 02:00:00.000000000 +0200
14538 +++ linux-2.6.28.10/arch/ubicom32/Makefile 2009-08-06 10:31:02.000000000 +0300
14539 @@ -0,0 +1,105 @@
14540 +#
14541 +# arch/ubicom32/Makefile
14542 +# <TODO: Replace with short file description>
14543 +#
14544 +# (C) Copyright 2009, Ubicom, Inc.
14545 +#
14546 +# This file is part of the Ubicom32 Linux Kernel Port.
14547 +#
14548 +# The Ubicom32 Linux Kernel Port is free software: you can redistribute
14549 +# it and/or modify it under the terms of the GNU General Public License
14550 +# as published by the Free Software Foundation, either version 2 of the
14551 +# License, or (at your option) any later version.
14552 +#
14553 +# The Ubicom32 Linux Kernel Port is distributed in the hope that it
14554 +# will be useful, but WITHOUT ANY WARRANTY; without even the implied
14555 +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14556 +# the GNU General Public License for more details.
14557 +#
14558 +# You should have received a copy of the GNU General Public License
14559 +# along with the Ubicom32 Linux Kernel Port. If not,
14560 +# see <http://www.gnu.org/licenses/>.
14561 +#
14562 +# Ubicom32 implementation derived from (with many thanks):
14563 +# arch/m68knommu
14564 +# arch/blackfin
14565 +# arch/parisc
14566 +#
14567 +
14568 +KBUILD_DEFCONFIG :=
14569 +
14570 +# setup the machine name and machine dependent settings
14571 +machine-$(CONFIG_UBICOM32_V3) := ip5k
14572 +machine-$(CONFIG_UBICOM32_V4) := ip7k
14573 +MACHINE := $(machine-y)
14574 +export MACHINE
14575 +
14576 +model-$(CONFIG_RAMKERNEL) := ram
14577 +model-$(CONFIG_ROMKERNEL) := rom
14578 +MODEL := $(model-y)
14579 +export MODEL
14580 +
14581 +CPUCLASS := $(cpuclass-y)
14582 +
14583 +export CPUCLASS
14584 +
14585 +#
14586 +# We want the core kernel built using the fastcall ABI but modules need
14587 +# to be built using the slower calling convention because they could be
14588 +# loaded out of range for fast calls.
14589 +#
14590 +CFLAGS_KERNEL += -mfastcall
14591 +CFLAGS_MODULE += -mno-fastcall
14592 +
14593 +#
14594 +# Some CFLAG additions based on specific CPU type.
14595 +#
14596 +cflags-$(CONFIG_UBICOM32_V3) := -march=ubicom32v3 -DIP5000
14597 +cflags-$(CONFIG_UBICOM32_V4) := -march=ubicom32v4 -DIP7000
14598 +
14599 +ldflags-$(CONFIG_LINKER_RELAXATION) := --relax
14600 +LDFLAGS_vmlinux := $(ldflags-y)
14601 +
14602 +GCCLIBDIR := $(dir $(shell $(CC) $(cflags-y) -print-libgcc-file-name))
14603 +GCC_LIBS := $(GCCLIBDIR)/libgcc.a
14604 +
14605 +KBUILD_CFLAGS += $(cflags-y) -ffunction-sections
14606 +KBUILD_AFLAGS += $(cflags-y)
14607 +
14608 +KBUILD_CFLAGS += -D__linux__ -Dlinux
14609 +KBUILD_CFLAGS += -DUTS_SYSNAME=\"uClinux\"
14610 +
14611 +# include any machine specific directory
14612 +ifneq ($(machine-y),)
14613 +core-y += arch/$(ARCH)/mach-$(MACHINE)/
14614 +endif
14615 +
14616 +head-y := arch/$(ARCH)/kernel/head.o
14617 +
14618 +core-y += arch/$(ARCH)/kernel/ \
14619 + arch/$(ARCH)/mm/ \
14620 + arch/$(ARCH)/crypto/ \
14621 + arch/$(ARCH)/mach-common/
14622 +
14623 +drivers-$(CONFIG_OPROFILE) += arch/ubicom32/oprofile/
14624 +
14625 +libs-y += arch/$(ARCH)/lib/
14626 +libs-y += $(GCC_LIBS)
14627 +
14628 +archclean:
14629 +
14630 +# make sure developer has selected a valid board
14631 +ifeq ($(CONFIG_NOBOARD),y)
14632 +# $(error have to select a valid board file $(CONFIG_NOBOARD), please run kernel config again)
14633 +_all: config_board_error
14634 +endif
14635 +
14636 +config_board_error:
14637 + @echo "*************************************************"
14638 + @echo "You have not selected a proper board."
14639 + @echo "Please run menuconfig (or config) against your"
14640 + @echo "kernel and choose your board under Processor"
14641 + @echo "options"
14642 + @echo "*************************************************"
14643 + @exit 1
14644 +
14645 diff -ruN linux-2.6.28.10_o/arch/ubicom32/mm/Makefile linux-2.6.28.10/arch/ubicom32/mm/Makefile
14646 --- linux-2.6.28.10_o/arch/ubicom32/mm/Makefile 1970-01-01 02:00:00.000000000 +0200
14647 +++ linux-2.6.28.10/arch/ubicom32/mm/Makefile 2009-08-12 13:08:37.000000000 +0300
14648 @@ -0,0 +1,32 @@
14649 +#
14650 +# arch/ubicom32/mm/Makefile
14651 +# <TODO: Replace with short file description>
14652 +#
14653 +# (C) Copyright 2009, Ubicom, Inc.
14654 +#
14655 +# This file is part of the Ubicom32 Linux Kernel Port.
14656 +#
14657 +# The Ubicom32 Linux Kernel Port is free software: you can redistribute
14658 +# it and/or modify it under the terms of the GNU General Public License
14659 +# as published by the Free Software Foundation, either version 2 of the
14660 +# License, or (at your option) any later version.
14661 +#
14662 +# The Ubicom32 Linux Kernel Port is distributed in the hope that it
14663 +# will be useful, but WITHOUT ANY WARRANTY; without even the implied
14664 +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14665 +# the GNU General Public License for more details.
14666 +#
14667 +# You should have received a copy of the GNU General Public License
14668 +# along with the Ubicom32 Linux Kernel Port. If not,
14669 +# see <http://www.gnu.org/licenses/>.
14670 +#
14671 +# Ubicom32 implementation derived from (with many thanks):
14672 +# arch/m68knommu
14673 +# arch/blackfin
14674 +# arch/parisc
14675 +#
14676 +#
14677 +# Makefile for the linux m68knommu specific parts of the memory manager.
14678 +#
14679 +
14680 +obj-y += init.o fault.o memory.o kmap.o ocm-alloc.o
14681 diff -ruN linux-2.6.28.10_o/include/linux/elf-em.h linux-2.6.28.10/include/linux/elf-em.h
14682 --- linux-2.6.28.10_o/include/linux/elf-em.h 2009-05-02 21:54:43.000000000 +0300
14683 +++ linux-2.6.28.10/include/linux/elf-em.h 2009-08-06 10:31:10.000000000 +0300
14684 @@ -41,6 +41,7 @@
14685 * up with a final number.
14686 */
14687 #define EM_ALPHA 0x9026
14688 +#define EM_UBICOM32 0xde3d /* Ubicom32; no ABI */
14689
14690 /* Bogus old v850 magic number, used by old tools. */
14691 #define EM_CYGNUS_V850 0x9080
14692 diff -ruN linux-2.6.28.10_o/lib/Kconfig.debug linux-2.6.28.10/lib/Kconfig.debug
14693 --- linux-2.6.28.10_o/lib/Kconfig.debug 2009-05-02 21:54:43.000000000 +0300
14694 +++ linux-2.6.28.10/lib/Kconfig.debug 2009-08-06 10:31:11.000000000 +0300
14695 @@ -549,7 +549,7 @@
14696 bool "Compile the kernel with frame pointers"
14697 depends on DEBUG_KERNEL && \
14698 (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390 || \
14699 - AVR32 || SUPERH || BLACKFIN || MN10300)
14700 + AVR32 || SUPERH || BLACKFIN || MN10300 || UBICOM32)
14701 default y if DEBUG_INFO && UML
14702 help
14703 If you say Y here the resulting kernel image will be slightly larger
14704 diff -ruN linux-2.6.28.10_o/scripts/mod/file2alias.c linux-2.6.28.10/scripts/mod/file2alias.c
14705 --- linux-2.6.28.10_o/scripts/mod/file2alias.c 2009-05-02 21:54:43.000000000 +0300
14706 +++ linux-2.6.28.10/scripts/mod/file2alias.c 2009-08-06 10:31:12.000000000 +0300
14707 @@ -753,6 +753,15 @@
14708 + sym->st_value;
14709 }
14710
14711 + /*
14712 + * somehow our gcc is not generating st_size correctly and set 0 for some symbols.
14713 + * and 0 size will break do_table since it adjust size to (size - id_size)
14714 + * this is to make sure st_size fall in range.
14715 + */
14716 + if (sym->st_size == 0 || sym->st_size > info->sechdrs[sym->st_shndx].sh_size) {
14717 + sym->st_size = info->sechdrs[sym->st_shndx].sh_size;
14718 + }
14719 +
14720 if (sym_is(symname, "__mod_pci_device_table"))
14721 do_table(symval, sym->st_size,
14722 sizeof(struct pci_device_id), "pci",
14723