diff options
Diffstat (limited to 'xenolinux-2.4.25-sparse/arch/xeno/lib')
-rw-r--r-- | xenolinux-2.4.25-sparse/arch/xeno/lib/Makefile | 15 | ||||
-rw-r--r-- | xenolinux-2.4.25-sparse/arch/xeno/lib/delay.c | 52 | ||||
-rw-r--r-- | xenolinux-2.4.25-sparse/arch/xeno/lib/xeno_proc.c | 18 |
3 files changed, 85 insertions, 0 deletions
diff --git a/xenolinux-2.4.25-sparse/arch/xeno/lib/Makefile b/xenolinux-2.4.25-sparse/arch/xeno/lib/Makefile new file mode 100644 index 0000000000..3bbf40148e --- /dev/null +++ b/xenolinux-2.4.25-sparse/arch/xeno/lib/Makefile @@ -0,0 +1,15 @@ + +.S.o: + $(CC) $(AFLAGS) -c $< -o $*.o + +L_TARGET = lib.a + +obj-y = checksum.o old-checksum.o delay.o \ + usercopy.o getuser.o \ + memcpy.o strstr.o xeno_proc.o + +obj-$(CONFIG_X86_USE_3DNOW) += mmx.o +obj-$(CONFIG_HAVE_DEC_LOCK) += dec_and_lock.o +obj-$(CONFIG_DEBUG_IOVIRT) += iodebug.o + +include $(TOPDIR)/Rules.make diff --git a/xenolinux-2.4.25-sparse/arch/xeno/lib/delay.c b/xenolinux-2.4.25-sparse/arch/xeno/lib/delay.c new file mode 100644 index 0000000000..0035bed074 --- /dev/null +++ b/xenolinux-2.4.25-sparse/arch/xeno/lib/delay.c @@ -0,0 +1,52 @@ +/* + * Precise Delay Loops for i386 + * + * Copyright (C) 1993 Linus Torvalds + * Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz> + * + * The __delay function must _NOT_ be inlined as its execution time + * depends wildly on alignment on many x86 processors. The additional + * jump magic is needed to get the timing stable on all the CPU's + * we have to worry about. + */ + +#include <linux/config.h> +#include <linux/sched.h> +#include <linux/delay.h> +#include <asm/processor.h> +#include <asm/delay.h> + +#ifdef CONFIG_SMP +#include <asm/smp.h> +#endif + +void __delay(unsigned long loops) +{ + unsigned long bclock, now; + + rdtscl(bclock); + do + { + rep_nop(); + rdtscl(now); + } while ((now-bclock) < loops); +} + +inline void __const_udelay(unsigned long xloops) +{ + int d0; + __asm__("mull %0" + :"=d" (xloops), "=&a" (d0) + :"1" (xloops),"0" (current_cpu_data.loops_per_jiffy)); + __delay(xloops * HZ); +} + +void __udelay(unsigned long usecs) +{ + __const_udelay(usecs * 0x000010c6); /* 2**32 / 1000000 */ +} + +void __ndelay(unsigned long nsecs) +{ + __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */ +} diff --git a/xenolinux-2.4.25-sparse/arch/xeno/lib/xeno_proc.c b/xenolinux-2.4.25-sparse/arch/xeno/lib/xeno_proc.c new file mode 100644 index 0000000000..40b0d6086f --- /dev/null +++ b/xenolinux-2.4.25-sparse/arch/xeno/lib/xeno_proc.c @@ -0,0 +1,18 @@ + +#include <linux/config.h> +#include <linux/proc_fs.h> + +static struct proc_dir_entry *xeno_base; + +struct proc_dir_entry *create_xeno_proc_entry(const char *name, mode_t mode) +{ + if ( xeno_base == NULL ) + if ( (xeno_base = proc_mkdir("xeno", &proc_root)) == NULL ) + panic("Couldn't create /proc/xeno"); + return create_proc_entry(name, mode, xeno_base); +} + +void remove_xeno_proc_entry(const char *name) +{ + remove_proc_entry(name, xeno_base); +} |