OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [include/] [l4/] [macros.h] - Rev 2

Compare with Previous | Blame | View Log

#ifndef __MACROS_H__
#define __MACROS_H__
#include "config.h"
 
#define __KERNELNAME__			"code0"
 
/*
 * This file is automatically included before the first line of any
 * source file, using gcc's -imacro command line option.  Only macro
 * definitions will be extracted.
 */
#define INC_ARCH(x)             <l4/arch/__ARCH__/x>
#define INC_SUBARCH(x)		<l4/arch/__ARCH__/__SUBARCH__/x>
#define INC_CPU(x)		<l4/arch/__ARCH__/__SUBARCH__/__CPU__/x>
#define INC_PLAT(x)             <l4/platform/__PLATFORM__/x>
#define INC_API(x)              <l4/api/x>
#define INC_GLUE(x)             <l4/glue/__ARCH__/x>
 
#define __initdata	SECTION(".init.data")
 
/*
 * FIXME: Remove __CPP__
 * This is defined in kernel linker.lds.in,
 * find some better way.
 */
#if !defined(__CPP__)
/* use this to place code/data in a certain section */
#define SECTION(x) __attribute__((section(x)))
#define ALIGN(x) __attribute__((aligned (x)))
#endif
 
/* Functions for critical path optimizations */
#if (__GNUC__ >= 3)
#define unlikely(x)		__builtin_expect((x), false)
#define likely(x)		__builtin_expect((x), true)
#define likelyval(x,val)	__builtin_expect((x), (val))
#else /* __GNUC__ < 3 */
#define likely(x)		(x)
#define unlikely(x)		(x)
#define likelyval(x,val)	(x)
#endif /* __GNUC__ < 3 */
 
/* This guard is needed because tests use host C library and NULL is defined */
#ifndef NULL
#define NULL			0
#endif
/* Convenience functions for memory sizes. */
#define SZ_1K			1024
#define SZ_2K			2048
#define SZ_4K			0x1000
#define SZ_16K			0x4000
#define SZ_32K			0x8000
#define SZ_64K			0x10000
#define SZ_1MB			0x100000
#define SZ_2MB			0x200000
#define SZ_4MB			(4*SZ_1MB)
#define SZ_8MB			(8*SZ_1MB)
#define SZ_16MB			(16*SZ_1MB)
#define SZ_1K_BITS		10
#define SZ_4K_BITS		12
#define SZ_16K_BITS		14
#define SZ_1MB_BITS		20
 
/* Per-cpu variables */
 
#if defined CONFIG_SMP
#define DECLARE_PERCPU(type, name)	\
type name[CONFIG_NCPU]
 
#define per_cpu(val)	(val)[smp_get_cpuid()]
#define per_cpu_byid(val, cpu)	(val)[(cpu)]
 
#else /* Not CONFIG_SMP */
 
#define DECLARE_PERCPU(type, name)	\
type name
 
#define per_cpu(val)	(val)
#define per_cpu_byid(val, cpu)	val
 
#endif /* End of Not CONFIG_SMP */
 
#ifndef __ASSEMBLY__
#include <stddef.h>	/* offsetof macro, defined in the `standard' way. */
#endif
 
#define container_of(ptr, struct_type, field)					\
({										\
	const typeof(((struct_type *)0)->field) *field_ptr = (ptr);		\
	(struct_type *)((char *)field_ptr - offsetof(struct_type, field));	\
})
 
/* Prefetching is noop for now */
#define	prefetch(x)		x
 
#if !defined(__KERNEL__)
#define printk			printf
#endif
 
/* Converts an int-sized field offset in a struct into a bit offset in a word */
#define FIELD_TO_BIT(type, field)	(1 << (offsetof(type, field) >> 2))
 
/* Functions who may either return a pointer or an error code can use these: */
#define PTR_ERR(x)		((void *)(x))
/* checks up to -1000, the rest might be valid pointers!!! E.g. 0xE0000000 */
// #define IS_ERR(x)		((((int)(x)) < 0) && (((int)(x) > -1000)))
#if !defined(__ASSEMBLY__)
#define IS_ERR(x)	is_err((int)(x))
static inline int is_err(int x)
{
	return x < 0 && x > -0x1000;
}
#endif
 
/* TEST: Is this type of printk well tested? */
#define BUG()			{do {								\
					printk("BUG in file: %s function: %s line: %d\n",	\
						__FILE__, __FUNCTION__, __LINE__);		\
				} while(0);							\
				while(1);}
 
#define BUG_ON(x)		{if (x) BUG();}
 
#define WARN_ON(x)	{if (x) printk("%s, %s, %s: Warning something is off here.\n", __FILE__, __FUNCTION__, __LINE__); }
 
#define BUG_ON_MSG(msg, x)	do {				\
					printk(msg);		\
					BUG_ON(x)		\
				} while(0)
 
#define BUG_MSG(msg...)	do {				\
					printk(msg);	\
					BUG();			\
				} while(0)
#endif /* __MACROS_H__ */
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.