Thread (3 messages) 3 messages, 2 authors, 2011-01-10

Re: [PATCHv1 04/12] unicore32 core architecture: low level entry and setup code

From: Arnd Bergmann <arnd@arndb.de>
Date: 2011-01-07 14:09:56
Also in: lkml

On Saturday 25 December 2010, Guan Xuetao wrote:
+#ifdef __KERNEL__
+
+/*
+ * Memory map description
+ */
+# define NR_BANKS 8
+
+struct membank {
+	unsigned long start;
+	unsigned long size;
+	unsigned int highmem;
+};
+
+struct meminfo {
+	int nr_banks;
+	struct membank bank[NR_BANKS];
+};
+
+extern struct meminfo meminfo;
+
+#define for_each_bank(iter, mi)				\
+	for (iter = 0; iter < (mi)->nr_banks; iter++)
+
+#define bank_pfn_start(bank)	__phys_to_pfn((bank)->start)
+#define bank_pfn_end(bank)	__phys_to_pfn((bank)->start + (bank)->size)
+#define bank_pfn_size(bank)	((bank)->size >> PAGE_SHIFT)
+#define bank_phys_start(bank)	((bank)->start)
+#define bank_phys_end(bank)	((bank)->start + (bank)->size)
+#define bank_phys_size(bank)	((bank)->size)
The membank stuff looks like a variation of the generic memblock interfaces.
+/*
+ * Handle all unrecognised system calls.
+ *  0x9f0000 - 0x9fffff are some more esoteric system calls
+ */
+#define NR(x) ((__UNICORE_NR_##x) - __UNICORE_NR_BASE)
+asmlinkage int uc32_syscall(int no, struct pt_regs *regs)
+{
+	if ((no >> 16) != (__UNICORE_NR_BASE >> 16))
+		return -ENOSYS;
+
+	switch (no & 0xffff) {
+	/*
+	 * Flush a region from virtual address 'r0' to virtual address 'r1'
+	 * _exclusive_.  There is no alignment requirement on either address;
+	 * user space does not need to know the hardware cache layout.
+	 *
+	 * r2 contains flags.  It should ALWAYS be passed as ZERO until it
+	 * is defined to be something else.  For now we ignore it, but may
+	 * the fires of hell burn in your belly if you break this rule. ;)
+	 *
+	 * (at a later date, we may want to allow this call to not flush
+	 * various aspects of the cache.  Passing '0' will guarantee that
+	 * everything necessary gets flushed to maintain consistency in
+	 * the specified region).
+	 */
+	case NR(cacheflush):
+		do_cache_op(regs->UCreg_00, regs->UCreg_01, regs->UCreg_02);
+		return 0;
+
+	case NR(cmpxchg):
+		return do_cmpxchg_op(regs);
+
+	default:
+		return -ENOSYS;
+	}
+}
With the generic system cal interface, this function should be replaced
with straight system calls for each of the subfunctions.

Just use things definitions like

#define __NR_cacheflush __NR_arch_specific_syscall
__SYSCALL(__NR_cacheflush, sys_uc32_cacheflush)
#define __NR_cmpxchg __NR_arch_specific_syscall+1
__SYSCALL(__NR_cmpxchg, sys_uc32_cacheflush

in your asm/unistd.h file.

	Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help