summaryrefslogtreecommitdiff
path: root/cleopatre/devkit/tests/plcdrv
diff options
context:
space:
mode:
authorCyril Jourdan2011-11-29 14:26:28 +0100
committerCyril Jourdan2011-12-20 15:52:36 +0100
commit35ff957f534cd2070dde11c46b46fbbeb819eda0 (patch)
tree98d33cc9ef1c12ff50ccc56bbe87599ad913ca3b /cleopatre/devkit/tests/plcdrv
parent6199ecc9b48bba9d489e7342c18def219981ec96 (diff)
cleo/devkit/tests: use cesar build system for plcdrv utests, refs #2772
We also created an independant linux stub to replace the ones defined in test header files.
Diffstat (limited to 'cleopatre/devkit/tests/plcdrv')
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/Makefile26
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/inc/linux_drv_utests.h176
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/inc/mailbox_utests.h5
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/src/hal_utests.c3
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/Module2
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/asm/arch/hardware/regbank.h13
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/asm/arch/nvram.h37
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/afe.h8
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/asm.h70
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/bitops.h6
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/capability.h14
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/cdev.h22
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/compiler.h8
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/delay.h6
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/device.h6
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/dma-mapping.h28
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/errno.h12
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/file.h6
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/fs.h125
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/gfp.h10
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if.h8
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if_ether.h17
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if_vlan.h20
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/init.h11
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/interrupt.h38
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/irqreturn.h9
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/kdev_t.h11
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/kernel.h34
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/list.h71
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/module.h13
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/moduleparam.h6
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/mutex.h30
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/netdevice.h92
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/netlink.h84
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/path.h12
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/poll.h20
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/proc_fs.h29
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/rcupdate.h9
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/sched.h10
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/skbuff.h45
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/socket.h18
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/spinlock.h35
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/types.h23
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/wait.h32
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/net_namespace.h55
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/seq_check.h28
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/sock.h13
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/af_netlink.c24
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/afe.c6
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/bitops.c6
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/char_dev.c26
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/delay.c6
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/dma.c25
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/eth.c12
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/ioremap.c10
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/irq_manage.c12
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/mutex.c11
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/net_dev.c42
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/softirq.c15
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/uaccess.c32
-rw-r--r--cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/wait.c7
61 files changed, 1405 insertions, 185 deletions
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/Makefile b/cleopatre/devkit/tests/plcdrv/arm/utests/Makefile
index 6042aa45ed..5367a5264b 100644
--- a/cleopatre/devkit/tests/plcdrv/arm/utests/Makefile
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/Makefile
@@ -1,7 +1,21 @@
-PRJ_BASE = ../../../../plcdrv/arm
-FILES = hal
-FILES += mailbox
-FILES += processing
-#FILES += linux_drv
+BASE = ../../../../../../cesar
+CLEO_BASE = ../cleopatre
-include ../../../utests_makerules
+# We test PLCDrv.
+PROJECT_DIR = $(CLEO_BASE)/devkit/plcdrv/arm/
+
+LINUX_STUB_BASE = $(CLEO_BASE)/devkit/tests/plcdrv/arm/utests/stub/linux
+
+INCLUDES = $(PROJECT_DIR)/inc $(LINUX_STUB_BASE)/inc
+
+EXTRA_HOST_LDLIBS = -lcheck
+
+DEFS = -D__UTESTS__ -DDRV_VERSION=\"test\"
+
+#Do not compile linux_drv_utests, mailbox_utests and processing_utests
+HOST_PROGRAMS = hal_utests
+
+hal_utests_SOURCES = hal_utests.c
+hal_utests_MODULES = $(PROJECT_DIR) $(LINUX_STUB_BASE)
+
+include $(BASE)/common/make/top.mk
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/inc/linux_drv_utests.h b/cleopatre/devkit/tests/plcdrv/arm/utests/inc/linux_drv_utests.h
index d113446741..f58f615ce1 100644
--- a/cleopatre/devkit/tests/plcdrv/arm/utests/inc/linux_drv_utests.h
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/inc/linux_drv_utests.h
@@ -21,187 +21,15 @@
#include <stdint.h>
#include <string.h>
+#include "registers.h"
+
/****************************************************/
/***** SPECIFIC STUB *****/
/****************************************************/
-unsigned char plccode[124];
-#define VIRT_PLCCODE_BASE (&plccode[0])
-#define MBX_BASE_ADDR 0x1234567
-#define NB_MBX_REGISTERS 8
-#define INT_MBX 12
-#define INT_MBX_ACK 13
-static inline int processing_init(struct init_info *info){return 0;}
-static inline int processing_uninit(void){return 0;}
-static inline int processing_send(void *pointer, int length){return 0;}
-static inline int processing_buffer_add(void *pointer, enum buffer_type type){return 0;}
-
-static inline int mailbox_buffer_add(void *pointer, enum buffer_type type){return 0;}
-static inline int mailbox_receive(void){return 0;}
-static inline int mailbox_txdone(void){return 0;}
/****************************************************/
/***** LINUX STUB *****/
/****************************************************/
-#define kfree free
-#define printk(...)
-#define irqreturn_t int
-#define jiffies 1234
-#define IRQ_HANDLED 1
-#define IRQ_NONE 0
-#define EOPNOTSUPP 1
-#define EINVAL 1
-#define ENODEV 1
-#define ENOMEM 1
-#define EFAULT 1
-#define EPERM 1
-#define KERN_ERR
-#define __init
-#define __exit
-#define __devinitdata
-#define __user
-#define MODULE_AUTHOR(a)
-#define MODULE_DESCRIPTION(a)
-#define MODULE_LICENSE(a)
-#define MODULE_PARM_DESC(a,b)
-#define module_param(a,b,c)
-#define module_init(a)
-#define module_exit(a)
-#define DMA_BIDIRECTIONAL 1
-#define GFP_KERNEL 1
-#define GFP_DMA 1
-#define DMA_FROM_DEVICE 1
-#define DMA_TO_DEVICE 1
-#define CHECKSUM_UNNECESSARY 1
-#define TASK_INTERRUPTIBLE 1
-#define HZ 100
-
-typedef irqreturn_t (*irq_handler_t)(int, void *);
-
-struct file {
- unsigned int not_used;
-};
-struct list_head {
- struct list_head *next, *prev;
-};
-struct sk_buff {
- unsigned char *data;
- struct net_device *dev;
- unsigned int len;
- unsigned short protocol;
- unsigned char ip_summed;
-};
-struct net_device_stats {
- unsigned long rx_packets;
- unsigned long tx_packets;
- unsigned long rx_bytes;
- unsigned long tx_bytes;
- unsigned long rx_dropped;
- unsigned long tx_dropped;
- unsigned long tx_fifo_errors;
-};
-struct ifreq {
- char dummy;
-};
-#define ETH_ALEN 6
-struct ethhdr {
- unsigned char h_dest[ETH_ALEN];
- unsigned char h_source[ETH_ALEN];
- unsigned short h_proto;
-};
-struct sockaddr {
- char sa_data[14];
-};
-struct net_device {
- char name[16];
- unsigned long base_addr;
- void *priv;
- unsigned char dev_addr[32];
- unsigned char addr_len;
- unsigned int irq;
- unsigned int mtu;
- unsigned long trans_start;
- int (*init)(struct net_device *dev);
- int (*hard_start_xmit)(struct sk_buff *skb, struct net_device *dev);
- int (*open)(struct net_device *dev);
- int (*stop)(struct net_device *dev);
- int (*set_mac_address)(struct net_device *dev, void *addr);
- struct net_device_stats* (*get_stats)(struct net_device *dev);
- int (*do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
- int (*change_mtu)(struct net_device *dev, int new_mtu);
-};
-
-static inline void set_current_state(int state){}
-static inline void schedule_timeout(int timeout){}
-static inline void *ioremap(unsigned long phys_addr, unsigned int size){return (void*)phys_addr;}
-static inline void iounmap(void* addr){}
-static inline void ether_setup(struct net_device *dev){}
-static inline unsigned short eth_type_trans(struct sk_buff *skb, struct net_device *dev){return 5;}
-static inline void netif_carrier_on(struct net_device *dev){}
-static inline void netif_start_queue(struct net_device *dev){}
-static inline void netif_carrier_off(struct net_device *dev){}
-static inline void netif_stop_queue(struct net_device *dev){}
-static inline void netif_wake_queue(struct net_device *dev){}
-static inline int netif_rx(struct sk_buff *skb){return 0;}
-static inline int netif_queue_stopped(const struct net_device *dev){return 0;}
-static inline int register_netdev(struct net_device *dev){return 0;}
-static inline void unregister_netdev(struct net_device *dev){}
-static inline int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id){return 0;}
-static inline void free_irq(unsigned int irq, void *dev_id){}
-static inline unsigned int virt_to_dma(void* dev, unsigned int addr){return addr;}
-static inline unsigned int dma_to_virt(void* dev, unsigned int addr){return addr;}
-static inline unsigned int dma_map_single(void *dev, void *ptr, unsigned int size, int dir){return (unsigned int)ptr;}
-static inline void dma_unmap_single(void *dev, unsigned int dma_addr, unsigned int size, int dir){}
-static inline void* dma_alloc_coherent(int *dummy, unsigned int size, unsigned int *handle, int gfp){return (void*)handle;}
-static inline void dma_free_coherent(int *dummy, unsigned int size, void *cpu_addr, unsigned int handle){}
-static inline struct sk_buff *alloc_skb(unsigned int size, int priority)
-{
- struct sk_buff* skb;
- skb = (struct sk_buff*)malloc((unsigned int)(sizeof(struct sk_buff)));
- return skb;
-}
-static inline void kfree_skb(struct sk_buff *skb)
-{
- if(skb)
- free(skb);
-}
-static inline struct net_device *alloc_netdev(int sizeof_priv, const char *name, void (*setup)(struct net_device *))
-{
- struct net_device* dev;
- dev = (struct net_device*)malloc((unsigned int)(sizeof(struct net_device)));
- dev->priv = malloc((unsigned int)(sizeof_priv));
- return dev;
-}
-static inline void free_netdev(struct net_device* dev)
-{
- if(dev->priv)
- free(dev->priv);
- free((void*)(dev));
-}
-static inline int copy_to_user(void *to, const void *from, unsigned long n)
-{
- if(n)
- {
- memcpy(to, from, sizeof(plccode));
- return 0;
- }
- else
- {
- return -1;
- }
-}
-static inline int copy_from_user(void *to, const void *from, unsigned long n)
-{
- if(n)
- {
- memcpy(to, from, sizeof(plccode));
- return 0;
- }
- else
- {
- return -1;
- }
-}
-
/****************************************************/
/***** STATIC FUNCTION PROTOTYPES *****/
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/inc/mailbox_utests.h b/cleopatre/devkit/tests/plcdrv/arm/utests/inc/mailbox_utests.h
index 3bb12a70b6..4d161d65fb 100644
--- a/cleopatre/devkit/tests/plcdrv/arm/utests/inc/mailbox_utests.h
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/inc/mailbox_utests.h
@@ -32,11 +32,6 @@
/****************************************************/
/***** SPECIFICS VARIABLES *****/
/****************************************************/
-static int nbtests_A2L_status_queue = 0;
-static int nbtests_L2A_status_queue = 0;
-uint32_t mbx_send_result[2];
-uint32_t mbx_buffer_add_result[2];
-uint32_t mbx_rx_ptr_result;
/****************************************************/
/***** LOWER STUB *****/
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/src/hal_utests.c b/cleopatre/devkit/tests/plcdrv/arm/utests/src/hal_utests.c
index 0a4dfc9638..57cd7db0b1 100644
--- a/cleopatre/devkit/tests/plcdrv/arm/utests/src/hal_utests.c
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/src/hal_utests.c
@@ -18,6 +18,9 @@
#include <stdio.h>
#include <string.h>
#include "hal.h"
+#include "common.h"
+
+#include "inc/hal_utests.h"
/** local defines */
#define L2A_RING_BASE_ADDR ((uint32_t)&MBX_ring[A2L_RING_SIZE/4])
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/Module b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/Module
new file mode 100644
index 0000000000..c0143da23f
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/Module
@@ -0,0 +1,2 @@
+SOURCES := af_netlink.c afe.c bitops.c char_dev.c delay.c dma.c eth.c \
+ ioremap.c irq_manage.c mutex.c net_dev.c softirq.c uaccess.c wait.c
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/asm/arch/hardware/regbank.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/asm/arch/hardware/regbank.h
new file mode 100644
index 0000000000..bbcc8e4de8
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/asm/arch/hardware/regbank.h
@@ -0,0 +1,13 @@
+#ifndef stub_linux_inc_linux_asm_arch_hardware_regbank_h
+#define stub_linux_inc_linux_asm_arch_hardware_regbank_h
+
+#include <linux/types.h>
+
+#define RB_LEON_ADD_START (0x120)
+#define RB_RST_GROUP_VA (*(volatile uint32_t *)0x12345678)
+#define RB_RST_MODULE_VA (*(volatile uint32_t *)0x87654321)
+#define RB_RST_GLOBAL_VA (*(volatile uint32_t *)0x55555555)
+#define RST_LEONSS (0x8)
+#define RST_LCPU (0x800)
+
+#endif /* stub_linux_inc_linux_asm_arch_hardware_regbank_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/asm/arch/nvram.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/asm/arch/nvram.h
new file mode 100644
index 0000000000..180868a766
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/asm/arch/nvram.h
@@ -0,0 +1,37 @@
+#ifndef stub_linux_inc_linux_asm_arch_nvram_h
+#define stub_linux_inc_linux_asm_arch_nvram_h
+
+typedef struct
+{
+ char magic[8]; // Magic number "NVRAM\0\0\0"
+ uint32_t pkg_cfg; // SPC300 package configuration register
+ uint32_t gpio_0_7_cfg; // SPC300 GPIO 0 to 7 configuration register
+ uint32_t gpio_8_15_cfg; // SPC300 GPIO 8 to 15 configuration register
+ uint32_t gpio_allow_dir; // SPC300 GPIO allowed directions 0:none 1:in 2:out 3:bi
+ uint32_t sdram_config; // SPC300 SDRAM configuration register
+ uint32_t sdram_timing0; // SPC300 SDRAM timing register 0
+ uint32_t sdram_timing1; // SPC300 SDRAM timing register 1
+ uint32_t sdram_refresh; // SPC300 SDRAM refresh register
+ uint32_t flash_org; // Flash organization
+ uint32_t img_0_offset; // Offset of first image address
+ uint32_t nb_images; // Max Number of Images present in flash
+ char product_name[64]; // Product short name in string format
+ char product_partnb[64]; // Product part number in string format
+ char product_desc[128]; // Product long description in string format
+ char serial_number[64]; // Product serial number in string format
+ uint32_t eth_phy_addr; // Address of Ethernet PHY
+ unsigned char eth_address[6]; // Ethernet MAC address
+ unsigned char reserved1[2];
+ unsigned char plc_address[6]; // PowerLine MAC address
+ unsigned char reserved2[2];
+ char device_password[32]; // HomePlugAV device unique password (DPW)
+ char oem_info[64]; // Additional information for OEM
+ unsigned char tonemask[192]; // HomePlugAV tonemask
+ char manufactory_info[64]; // Name of the product manufacturer
+ uint32_t img_max_size; // Max size of an image in flash
+ uint32_t cpu_partnb; // SPC3x0 partnb
+} spc300_nvram_t; //Currently __attribute__((packed)) not needed
+
+extern spc300_nvram_t spc300_nvram;
+
+#endif /* stub_linux_inc_linux_asm_arch_nvram_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/afe.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/afe.h
new file mode 100644
index 0000000000..641ca36b66
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/afe.h
@@ -0,0 +1,8 @@
+#ifndef stub_linux_inc_linux_afe_h
+#define stub_linux_inc_linux_afe_h
+
+#include <linux/types.h>
+
+extern int afe_write_reg(uint8_t reg, uint8_t val);
+
+#endif /* stub_linux_inc_linux_afe_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/asm.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/asm.h
new file mode 100644
index 0000000000..20254883f1
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/asm.h
@@ -0,0 +1,70 @@
+#ifndef stub_linux_inc_linux_asm_h
+#define stub_linux_inc_linux_asm_h
+
+/** All stubs from linux/asm directory. */
+
+#include <linux/compiler.h>
+
+/* types.h */
+typedef unsigned char __u8;
+typedef unsigned short __u16;
+typedef unsigned int __u32;
+typedef unsigned short umode_t;
+typedef int ssize_t;
+
+/* atomic.h */
+typedef struct { volatile int counter; } atomic_t;
+#define ATOMIC_INIT(i) { (i) }
+#define atomic_read(v) ((v)->counter)
+#define atomic_set(v,i) (((v)->counter) = (i))
+
+/* rwsem.h */
+struct rw_semaphore {};
+
+/* poll.h */
+#define POLLPRI 0x0002
+#define POLLERR 0x0008
+
+/* bug.h */
+#define BUG_ON(condition) do { if (condition) {} } while(0)
+
+/* processor.h */
+static inline void prefetch(const void *ptr)
+{
+}
+
+#include <stdlib.h> /* for malloc & free */
+#include <string.h> /* for memset */
+#include <stdio.h> /* for sprintf */
+/* did not find these... */
+static inline void * kmalloc(int size, int flags)
+{
+ return NULL;
+}
+static inline void kfree(void * ptr)
+{
+}
+/* arch-spc300/irqs.h */
+#define INT_MBX 12
+#define INT_MBX_ACK 13
+#define INT_MBX_WD 13
+
+/* arch/param.h */
+#define HZ 100
+
+/* io.h */
+#define MT_DEVICE 0
+extern void * __arm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype);
+#define ioremap(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE)
+extern void __iounmap(volatile void *addr);
+#define iounmap(cookie) __iounmap(cookie)
+
+/* memory.h */
+#define virt_to_dma(dev, addr) ((int) addr)
+#define dma_to_virt(dev, addr) ((int) addr)
+
+/* uaccess.h */
+extern unsigned long copy_from_user(void *to, const void __user *from, unsigned long n);
+extern unsigned long copy_to_user(void __user *to, const void *from, unsigned long n);
+
+#endif /* stub_linux_inc_linux_asm_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/bitops.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/bitops.h
new file mode 100644
index 0000000000..83a16882b6
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/bitops.h
@@ -0,0 +1,6 @@
+#ifndef inc_linux_asm_bitops_h
+#define inc_linux_asm_bitops_h
+
+extern inline int test_bit(int nr, const volatile unsigned long *addr);
+
+#endif /* inc_linux_asm_bitops_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/capability.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/capability.h
new file mode 100644
index 0000000000..7fbd3051c6
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/capability.h
@@ -0,0 +1,14 @@
+#ifndef stub_linux_inc_linux_capability_h
+#define stub_linux_inc_linux_capability_h
+
+#include <linux/types.h>
+
+#define _LINUX_CAPABILITY_U32S_3 2
+
+#define _KERNEL_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3
+
+typedef struct kernel_cap_struct {
+ __u32 cap[_KERNEL_CAPABILITY_U32S];
+} kernel_cap_t;
+
+#endif /* stub_linux_inc_linux_capability_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/cdev.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/cdev.h
new file mode 100644
index 0000000000..168a437b50
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/cdev.h
@@ -0,0 +1,22 @@
+#ifndef stub_linux_inc_linux_cdev_h
+#define stub_linux_inc_linux_cdev_h
+
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/list.h>
+
+struct cdev {
+ struct module *owner;
+ const struct file_operations *ops;
+ struct list_head list;
+ dev_t dev;
+ unsigned int count;
+};
+
+extern void cdev_init(struct cdev *, const struct file_operations *);
+
+extern int cdev_add(struct cdev *, dev_t, unsigned);
+
+extern void cdev_del(struct cdev *);
+
+#endif /* stub_linux_inc_linux_cdev_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/compiler.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/compiler.h
new file mode 100644
index 0000000000..bbe302a179
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/compiler.h
@@ -0,0 +1,8 @@
+#ifndef stub_linux_inc_linux_compiler_h
+#define stub_linux_inc_linux_compiler_h
+
+#define unlikely(x) x
+
+#define __user
+
+#endif /* stub_linux_inc_linux_compiler_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/delay.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/delay.h
new file mode 100644
index 0000000000..25860b2565
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/delay.h
@@ -0,0 +1,6 @@
+#ifndef inc_linux_delay_h
+#define inc_linux_delay_h
+
+extern unsigned long msleep_interruptible(unsigned int msecs);
+
+#endif /* inc_linux_delay_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/device.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/device.h
new file mode 100644
index 0000000000..309238757a
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/device.h
@@ -0,0 +1,6 @@
+#ifndef stub_linux_inc_linux_device_h
+#define stub_linux_inc_linux_device_h
+
+struct device;
+
+#endif /* stub_linux_inc_linux_device_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/dma-mapping.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/dma-mapping.h
new file mode 100644
index 0000000000..327c7d0773
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/dma-mapping.h
@@ -0,0 +1,28 @@
+#ifndef stub_linux_inc_linux_dma_mapping_h
+#define stub_linux_inc_linux_dma_mapping_h
+
+#include <linux/types.h>
+#include <linux/device.h>
+
+enum dma_data_direction {
+ DMA_BIDIRECTIONAL = 0,
+ DMA_TO_DEVICE = 1,
+ DMA_FROM_DEVICE = 2,
+ DMA_NONE = 3,
+};
+
+/* Actually in asm/dma-mapping.h... */
+extern void *
+dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp);
+
+extern void
+dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
+ dma_addr_t handle);
+
+extern dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
+ enum dma_data_direction dir);
+
+extern void dma_unmap_single(struct device *dev, dma_addr_t dma_addr,
+ size_t size, enum dma_data_direction dir);
+
+#endif /* stub_linux_inc_linux_dma_mapping_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/errno.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/errno.h
new file mode 100644
index 0000000000..7e8a432ba4
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/errno.h
@@ -0,0 +1,12 @@
+#ifndef stub_linux_inc_linux_errno_h
+#define stub_linux_inc_linux_errno_h
+
+#define EOPNOTSUPP 1
+#define EINVAL 1
+#define ENODEV 1
+#define ENOMEM 1
+#define EFAULT 1
+#define EPERM 1
+#define EBUSY 1
+
+#endif /* stub_linux_inc_linux_errno_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/file.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/file.h
new file mode 100644
index 0000000000..9e68db0e87
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/file.h
@@ -0,0 +1,6 @@
+#ifndef stub_linux_inc_linux_file_h
+#define stub_linux_inc_linux_file_h
+
+struct file_operations;
+
+#endif /* stub_linux_inc_linux_file_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/fs.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/fs.h
new file mode 100644
index 0000000000..b9d92707c1
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/fs.h
@@ -0,0 +1,125 @@
+#ifndef stub_linux_inc_linux_fs_h
+#define stub_linux_inc_linux_fs_h
+
+#include <linux/types.h>
+#include <linux/asm.h>
+#include <linux/file.h>
+#include <linux/list.h>
+#include <linux/rcupdate.h>
+#include <linux/path.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+
+struct fown_struct {};
+struct file_ra_state {};
+struct address_space {};
+struct poll_table_struct;
+
+struct file {
+ /*
+ * fu_list becomes invalid after file_free is called and queued via
+ * fu_rcuhead for RCU freeing
+ */
+ union {
+ struct list_head fu_list;
+ struct rcu_head fu_rcuhead;
+ } f_u;
+ struct path f_path;
+#define f_dentry f_path.dentry
+#define f_vfsmnt f_path.mnt
+ const struct file_operations *f_op;
+ atomic_t f_count;
+ unsigned int f_flags;
+ mode_t f_mode;
+ loff_t f_pos;
+ struct fown_struct f_owner;
+ unsigned int f_uid, f_gid;
+ struct file_ra_state f_ra;
+ u64 f_version;
+//#ifdef CONFIG_SECURITY
+// void *f_security;
+//#endif
+ /* needed for tty driver, and maybe others */
+ void *private_data;
+//#ifdef CONFIG_EPOLL
+// /* Used by fs/eventpoll.c to link all the hooks to this file */
+// struct list_head f_ep_links;
+// spinlock_t f_ep_lock;
+//#endif /* #ifdef CONFIG_EPOLL */
+ struct address_space *f_mapping;
+};
+
+struct inode {
+ struct hlist_node i_hash;
+ struct list_head i_list;
+ struct list_head i_sb_list;
+ struct list_head i_dentry;
+ unsigned long i_ino;
+ atomic_t i_count;
+ unsigned int i_nlink;
+ uid_t i_uid;
+ gid_t i_gid;
+ dev_t i_rdev;
+ u64 i_version;
+ loff_t i_size;
+//#ifdef __NEED_I_SIZE_ORDERED
+// seqcount_t i_size_seqcount;
+//#endif
+ struct timespec i_atime;
+ struct timespec i_mtime;
+ struct timespec i_ctime;
+ unsigned int i_blkbits;
+ blkcnt_t i_blocks;
+ unsigned short i_bytes;
+ umode_t i_mode;
+ spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
+ struct mutex i_mutex;
+ struct rw_semaphore i_alloc_sem;
+ const struct inode_operations *i_op;
+ const struct file_operations *i_fop; /* former ->i_op->default_file_ops */
+ struct super_block *i_sb;
+ struct file_lock *i_flock;
+ struct address_space *i_mapping;
+ struct address_space i_data;
+//#ifdef CONFIG_QUOTA
+// struct dquot *i_dquot[MAXQUOTAS];
+//#endif
+ struct list_head i_devices;
+ union {
+ struct pipe_inode_info *i_pipe;
+ struct block_device *i_bdev;
+ struct cdev *i_cdev;
+ };
+ int i_cindex;
+ __u32 i_generation;
+//#ifdef CONFIG_DNOTIFY
+// unsigned long i_dnotify_mask; /* Directory notify events */
+// struct dnotify_struct *i_dnotify; /* for directory notifications */
+//#endif
+//#ifdef CONFIG_INOTIFY
+// struct list_head inotify_watches; /* watches on this inode */
+// struct mutex inotify_mutex; /* protects the watches list */
+//#endif
+ unsigned long i_state;
+ unsigned long dirtied_when; /* jiffies of first dirtying */
+ unsigned int i_flags;
+ atomic_t i_writecount;
+//#ifdef CONFIG_SECURITY
+// void *i_security;
+//#endif
+ void *i_private; /* fs or device private pointer */
+};
+
+struct file_operations {
+ struct module *owner;
+ ssize_t (*read) (struct file *, char *, size_t, loff_t *);
+ ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
+ unsigned int (*poll) (struct file *, struct poll_table_struct *);
+ int (*open) (struct inode *, struct file *);
+ int (*release) (struct inode *, struct file *);
+};
+
+extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
+extern void unregister_chrdev_region(dev_t, unsigned);
+
+#endif /* stub_linux_inc_linux_fs_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/gfp.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/gfp.h
new file mode 100644
index 0000000000..e74554b782
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/gfp.h
@@ -0,0 +1,10 @@
+#ifndef stub_linux_inc_linux_gfp_h
+#define stub_linux_inc_linux_gfp_h
+
+#define __GFP_HIGH ((gfp_t)0x20u)
+#define GFP_ATOMIC (__GFP_HIGH)
+
+#define GFP_KERNEL 1
+#define GFP_DMA 1
+
+#endif /* stub_linux_inc_linux_gfp_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if.h
new file mode 100644
index 0000000000..0641cbde81
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if.h
@@ -0,0 +1,8 @@
+#ifndef stub_linux_inc_linux_if_h
+#define stub_linux_inc_linux_if_h
+
+struct ifreq {
+ char dummy;
+};
+
+#endif /* stub_linux_inc_linux_if_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if_ether.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if_ether.h
new file mode 100644
index 0000000000..ae973e4d35
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if_ether.h
@@ -0,0 +1,17 @@
+#ifndef stub_linux_inc_linux_if_ether_h
+#define stub_linux_inc_linux_if_ether_h
+
+#include <linux/types.h>
+
+#define ETH_P_8021Q 0x8100
+
+#define ETH_ALEN 6 /* Octets in one ethernet addr */
+#define ETH_HLEN 14 /*Total octets in header */
+
+struct ethhdr {
+ unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
+ unsigned char h_source[ETH_ALEN]; /* source ether addr */
+ __be16 h_proto; /* packet type ID field */
+} __attribute__((packed));
+
+#endif /* stub_linux_inc_linux_if_ether_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if_vlan.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if_vlan.h
new file mode 100644
index 0000000000..3c4db05de9
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/if_vlan.h
@@ -0,0 +1,20 @@
+#ifndef stub_linux_inc_linux_if_vlan_h
+#define stub_linux_inc_linux_if_vlan_h
+
+#include <linux/types.h>
+
+#define VLAN_ETH_ALEN 6
+#define VLAN_ETH_HLEN 18
+
+#define VLAN_VID_MASK 0x0fff
+
+struct vlan_ethhdr
+{
+ unsigned char h_dest[ETH_ALEN];
+ unsigned char h_source[ETH_ALEN];
+ unsigned short int h_vlan_proto;
+ unsigned short int h_vlan_TCI;
+ unsigned short int h_vlan_encapsulated_proto;
+} __attribute__((packed));
+
+#endif /* stub_linux_inc_linux_if_vlan_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/init.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/init.h
new file mode 100644
index 0000000000..761d2e53b2
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/init.h
@@ -0,0 +1,11 @@
+#ifndef stub_linux_inc_linux_init_h
+#define stub_linux_inc_linux_init_h
+
+#define module_init(a)
+#define module_exit(a)
+
+#define __init
+#define __exit
+#define __devinitdata
+
+#endif /* stub_linux_inc_linux_init_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/interrupt.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/interrupt.h
new file mode 100644
index 0000000000..bf7348ce88
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/interrupt.h
@@ -0,0 +1,38 @@
+#ifndef stub_linux_inc_linux_interrupt_h
+#define stub_linux_inc_linux_interrupt_h
+
+#include <linux/asm.h>
+#include <linux/irqreturn.h>
+
+typedef irqreturn_t (*irq_handler_t)(int, void *);
+
+struct tasklet_struct
+{
+ struct tasklet_struct *next;
+ unsigned long state;
+ atomic_t count;
+ void (*func)(unsigned long);
+ unsigned long data;
+};
+
+static inline void tasklet_enable(struct tasklet_struct *t)
+{
+}
+
+static inline void tasklet_disable(struct tasklet_struct *t)
+{
+}
+
+extern void tasklet_schedule(struct tasklet_struct *t);
+
+extern void tasklet_kill(struct tasklet_struct *t);
+
+extern void tasklet_init(struct tasklet_struct *t,
+ void (*func)(unsigned long), unsigned long data);
+
+extern int request_irq(unsigned int, irq_handler_t handler,
+ unsigned long, const char *, void *);
+
+extern void free_irq(unsigned int, void *);
+
+#endif /* stub_linux_inc_linux_interrupt_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/irqreturn.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/irqreturn.h
new file mode 100644
index 0000000000..355bea55ca
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/irqreturn.h
@@ -0,0 +1,9 @@
+#ifndef stub_linux_inc_linux_irqreturn_h
+#define stub_linux_inc_linux_irqreturn_h
+
+#define IRQ_HANDLED 1
+#define IRQ_NONE 0
+
+typedef int irqreturn_t;
+
+#endif /* stub_linux_inc_linux_irqreturn_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/kdev_t.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/kdev_t.h
new file mode 100644
index 0000000000..8429e6f0c9
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/kdev_t.h
@@ -0,0 +1,11 @@
+#ifndef stub_linux_inc_linux_kdev_t_h
+#define stub_linux_inc_linux_kdev_t_h
+
+#define MINORBITS 20
+#define MINORMASK ((1U << MINORBITS) - 1)
+
+#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
+#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
+#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
+
+#endif /* stub_linux_inc_linux_kdev_t_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/kernel.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/kernel.h
new file mode 100644
index 0000000000..022d68bad7
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/kernel.h
@@ -0,0 +1,34 @@
+#ifndef stub_linux_inc_linux_kernel_h
+#define stub_linux_inc_linux_kernel_h
+
+/* from stddef.h */
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+
+#define container_of(ptr, type, member) ({ \
+ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ (type *)( (char *)__mptr - offsetof(type,member) );})
+
+#define min(x,y) ({ \
+ typeof(x) _x = (x); \
+ typeof(y) _y = (y); \
+ (void) (&_x == &_y); \
+ _x < _y ? _x : _y; })
+
+#define KERN_ERR "<3>"
+#define KERN_WARNING "<4>"
+#define KERN_INFO "<6>"
+
+static inline int printk(const char *s, ...)
+{
+ return 0;
+}
+
+/* from byteorder/generic.h */
+static inline unsigned short int ntohs(unsigned short int x)
+{
+ return x<<8 | x>>8;
+}
+
+#define be16_to_cpu(x) ((__u16)(__be16)(x))
+
+#endif /* stub_linux_inc_linux_kernel_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/list.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/list.h
new file mode 100644
index 0000000000..64a8de0366
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/list.h
@@ -0,0 +1,71 @@
+#ifndef stub_linux_inc_linux_list_h
+#define stub_linux_inc_linux_list_h
+
+/* from linux/poison.h */
+#define LIST_POISON1 ((void *) 0x00100100)
+#define LIST_POISON2 ((void *) 0x00200200)
+
+struct hlist_node {
+ struct hlist_node *next, **pprev;
+};
+
+struct list_head {
+ struct list_head *next, *prev;
+};
+
+#define LIST_HEAD_INIT(name) { &(name), &(name) }
+
+#define list_entry(ptr, type, member) \
+ container_of(ptr, type, member)
+
+#define list_for_each_entry(pos, head, member) \
+ for (pos = list_entry((head)->next, typeof(*pos), member); \
+ prefetch(pos->member.next), &pos->member != (head); \
+ pos = list_entry(pos->member.next, typeof(*pos), member))
+
+#define list_for_each_entry_safe(pos, n, head, member) \
+ for (pos = list_entry((head)->next, typeof(*pos), member), \
+ n = list_entry(pos->member.next, typeof(*pos), member); \
+ &pos->member != (head); \
+ pos = n, n = list_entry(n->member.next, typeof(*n), member))
+
+static inline void INIT_LIST_HEAD(struct list_head *list)
+{
+ list->next = list;
+ list->prev = list;
+}
+
+static inline void __list_add(struct list_head *new,
+ struct list_head *prev,
+ struct list_head *next)
+{
+ next->prev = new;
+ new->next = next;
+ new->prev = prev;
+ prev->next = new;
+}
+
+static inline void list_add_tail(struct list_head *new, struct list_head *head)
+{
+ __list_add(new, head->prev, head);
+}
+
+static inline void __list_del(struct list_head * prev, struct list_head * next)
+{
+ next->prev = prev;
+ prev->next = next;
+}
+
+static inline void list_del(struct list_head *entry)
+{
+ __list_del(entry->prev, entry->next);
+ entry->next = LIST_POISON1;
+ entry->prev = LIST_POISON2;
+}
+
+static inline int list_empty(const struct list_head *head)
+{
+ return head->next == head;
+}
+
+#endif /* stub_linux_inc_linux_list_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/module.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/module.h
new file mode 100644
index 0000000000..1cb1188291
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/module.h
@@ -0,0 +1,13 @@
+#ifndef stub_linux_inc_linux_module_h
+#define stub_linux_inc_linux_module_h
+
+struct module;
+
+#define THIS_MODULE ((struct module *)0)
+
+#define MODULE_AUTHOR(a)
+#define MODULE_DESCRIPTION(a)
+#define MODULE_LICENSE(a)
+#define MODULE_PARM_DESC(a,b)
+
+#endif /* stub_linux_inc_linux_module_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/moduleparam.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/moduleparam.h
new file mode 100644
index 0000000000..d932f30e88
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/moduleparam.h
@@ -0,0 +1,6 @@
+#ifndef stub_linux_inc_linux_moduleparam_h
+#define stub_linux_inc_linux_moduleparam_h
+
+#define module_param(a,b,c)
+
+#endif /* stub_linux_inc_linux_moduleparam_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/mutex.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/mutex.h
new file mode 100644
index 0000000000..d22eee7353
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/mutex.h
@@ -0,0 +1,30 @@
+#ifndef stub_linux_inc_linux_mutex_h
+#define stub_linux_inc_linux_mutex_h
+
+#include <linux/types.h>
+#include <linux/list.h>
+#include <linux/spinlock.h>
+
+struct mutex {
+ /* 1: unlocked, 0: locked, negative: locked, possible waiters */
+ atomic_t count;
+ spinlock_t wait_lock;
+ struct list_head wait_list;
+};
+
+#define __MUTEX_INITIALIZER(lockname) \
+ { .count = ATOMIC_INIT(1) \
+ , .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock) \
+ , .wait_list = LIST_HEAD_INIT(lockname.wait_list) }
+
+#define DEFINE_MUTEX(mutexname) \
+ struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
+
+/* mutex_lock is defined in libcheck too, so we have to stub it using */
+/* a different name... */
+#define mutex_lock my_mutex_lock
+extern void my_mutex_lock(struct mutex *lock);
+
+extern void mutex_unlock(struct mutex *lock);
+
+#endif /* stub_linux_inc_linux_mutex_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/netdevice.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/netdevice.h
new file mode 100644
index 0000000000..2b9ab7ceb6
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/netdevice.h
@@ -0,0 +1,92 @@
+#ifndef stub_linux_inc_linux_netdevice_h
+#define stub_linux_inc_linux_netdevice_h
+
+#include <linux/types.h>
+#include <linux/skbuff.h>
+#include <linux/if.h>
+
+struct net_device_stats {
+ unsigned long rx_packets; /* total packets received */
+ unsigned long tx_packets; /* total packets transmitted */
+ unsigned long rx_bytes; /* total bytes received */
+ unsigned long tx_bytes; /* total bytes transmitted */
+ unsigned long rx_errors; /* bad packets received */
+ unsigned long tx_errors; /* packet transmit problems */
+ unsigned long rx_dropped; /* no space in linux buffers */
+ unsigned long tx_dropped; /* no space available in linux */
+ unsigned long multicast; /* multicast packets received */
+ unsigned long collisions;
+
+ /* detailed rx_errors: */
+ unsigned long rx_length_errors;
+ unsigned long rx_over_errors; /* receiver ring buff overflow */
+ unsigned long rx_crc_errors; /* recved pkt with crc error */
+ unsigned long rx_frame_errors; /* recv'd frame alignment error */
+ unsigned long rx_fifo_errors; /* recv'r fifo overrun */
+ unsigned long rx_missed_errors; /* receiver missed packet */
+
+ /* detailed tx_errors */
+ unsigned long tx_aborted_errors;
+ unsigned long tx_carrier_errors;
+ unsigned long tx_fifo_errors;
+ unsigned long tx_heartbeat_errors;
+ unsigned long tx_window_errors;
+
+ /* for cslip etc */
+ unsigned long rx_compressed;
+ unsigned long tx_compressed;
+};
+
+/* linux_drv_utests.h stub */
+struct net_device {
+ char name[16];
+ unsigned long base_addr;
+ void *priv;
+ unsigned char dev_addr[32];
+ unsigned char addr_len;
+ unsigned int irq;
+ unsigned int mtu;
+ unsigned long trans_start;
+ int (*init)(struct net_device *dev);
+ int (*hard_start_xmit)(struct sk_buff *skb, struct net_device *dev);
+ int (*open)(struct net_device *dev);
+ int (*stop)(struct net_device *dev);
+ int (*set_mac_address)(struct net_device *dev, void *addr);
+ struct net_device_stats* (*get_stats)(struct net_device *dev);
+ int (*do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
+ int (*change_mtu)(struct net_device *dev, int new_mtu);
+};
+
+static inline void *netdev_priv(const struct net_device *dev)
+{
+ return dev->priv;
+}
+
+extern int register_netdev(struct net_device *dev);
+extern void unregister_netdev(struct net_device *dev);
+extern struct net_device *alloc_netdev(int sizeof_priv, const char *name,
+ void (*setup)(struct net_device *));
+extern void free_netdev(struct net_device* dev);
+
+extern int netif_rx(struct sk_buff *skb);
+extern void netif_carrier_on(struct net_device *dev);
+extern void netif_carrier_off(struct net_device *dev);
+static inline void netif_start_queue(struct net_device *dev)
+{
+}
+static inline void netif_stop_queue(struct net_device *dev)
+{
+}
+static inline void netif_wake_queue(struct net_device *dev)
+{
+}
+static inline int netif_queue_stopped(const struct net_device *dev)
+{
+ return 0;
+}
+
+extern void ether_setup(struct net_device *dev);
+/* from etherdevice.h */
+extern __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev);
+
+#endif /* stub_linux_inc_linux_netdevice_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/netlink.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/netlink.h
new file mode 100644
index 0000000000..efc020fe48
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/netlink.h
@@ -0,0 +1,84 @@
+#ifndef stub_linux_inc_linux_netlink_h
+#define stub_linux_inc_linux_netlink_h
+
+#include <linux/types.h>
+#include <linux/socket.h>
+#include <linux/capability.h>
+#include <linux/skbuff.h>
+#include <linux/compiler.h>
+#include <linux/mutex.h>
+#include <linux/module.h>
+#include <net/net_namespace.h>
+#include <net/sock.h>
+
+#define NETLINK_PLC_DRV 20
+#define NETLINK_PLC_MME 21
+
+struct nlmsghdr
+{
+ __u32 nlmsg_len; /* Length of message including header */
+ __u16 nlmsg_type; /* Message content */
+ __u16 nlmsg_flags; /* Additional flags */
+ __u32 nlmsg_seq; /* Sequence number */
+ __u32 nlmsg_pid; /* Sending process port ID */
+};
+
+#define NLMSG_DONE 0x3
+
+#define NLMSG_ALIGNTO 4
+#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
+#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
+#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
+#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
+#define NLMSG_DATA(nlh) ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
+
+static inline struct nlmsghdr *nlmsg_hdr(const struct sk_buff *skb)
+{
+ return (struct nlmsghdr *)skb->data;
+}
+
+static __inline__ struct nlmsghdr *
+__nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags)
+{
+ struct nlmsghdr *nlh;
+ int size = NLMSG_LENGTH(len);
+
+ nlh = (struct nlmsghdr*)skb_put(skb, NLMSG_ALIGN(size));
+ nlh->nlmsg_type = type;
+ nlh->nlmsg_len = size;
+ nlh->nlmsg_flags = flags;
+ nlh->nlmsg_pid = pid;
+ nlh->nlmsg_seq = seq;
+ memset(NLMSG_DATA(nlh) + len, 0, NLMSG_ALIGN(size) - size);
+ return nlh;
+}
+
+#define NLMSG_NEW(skb, pid, seq, type, len, flags) \
+({ if (unlikely(skb_tailroom(skb) < (int)NLMSG_SPACE(len))) \
+ goto nlmsg_failure; \
+ __nlmsg_put(skb, pid, seq, type, len, flags); })
+
+#define NLMSG_PUT(skb, pid, seq, type, len) \
+ NLMSG_NEW(skb, pid, seq, type, len, 0)
+
+struct netlink_skb_parms
+{
+ struct ucred creds; /* Skb credentials */
+ __u32 pid;
+ __u32 dst_group;
+ kernel_cap_t eff_cap;
+ __u32 loginuid; /* Login (audit) uid */
+ __u32 sid; /* SELinux security id */
+};
+
+#define NETLINK_CB(skb) (*(struct netlink_skb_parms*)&((skb)->cb))
+
+extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock);
+
+extern struct sock *netlink_kernel_create(struct net *net, int unit,
+ unsigned int groups, void (*input)(struct sk_buff *skb),
+ struct mutex *cb_mutex, struct module *module);
+
+extern void netlink_kernel_release(struct sock *sk);
+
+#endif /* stub_linux_inc_linux_netlink_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/path.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/path.h
new file mode 100644
index 0000000000..86f83ac02c
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/path.h
@@ -0,0 +1,12 @@
+#ifndef stub_linux_inc_linux_path_h
+#define stub_linux_inc_linux_path_h
+
+struct dentry;
+struct vfsmount;
+
+struct path {
+ struct vfsmount *mnt;
+ struct dentry *dentry;
+};
+
+#endif /* stub_linux_inc_linux_path_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/poll.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/poll.h
new file mode 100644
index 0000000000..a0a441031b
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/poll.h
@@ -0,0 +1,20 @@
+#ifndef stub_linux_inc_linux_poll_h
+#define stub_linux_inc_linux_poll_h
+
+#include <linux/types.h>
+#include <linux/wait.h>
+#include <linux/fs.h>
+
+typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
+
+typedef struct poll_table_struct {
+ poll_queue_proc qproc;
+} poll_table;
+
+static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
+{
+ if (p && wait_address)
+ p->qproc(filp, wait_address, p);
+}
+
+#endif /* stub_linux_inc_linux_poll_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/proc_fs.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/proc_fs.h
new file mode 100644
index 0000000000..dc3ac29603
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/proc_fs.h
@@ -0,0 +1,29 @@
+#ifndef stub_linux_inc_linux_proc_fs_h
+#define stub_linux_inc_linux_proc_fs_h
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+
+typedef int (read_proc_t)(char *page, char **start, off_t off,
+ int count, int *eof, void *data);
+
+struct proc_dir_entry {
+ void *data;
+ read_proc_t *read_proc;
+};
+
+static inline struct proc_dir_entry *proc_mkdir(const char *name,
+ struct proc_dir_entry *parent)
+{
+ return NULL;
+}
+
+static inline struct proc_dir_entry *create_proc_entry(const char *name,
+ mode_t mode, struct proc_dir_entry *parent)
+{
+ return NULL;
+}
+
+#define remove_proc_entry(name, parent) do {} while (0)
+
+#endif /* stub_linux_inc_linux_proc_fs_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/rcupdate.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/rcupdate.h
new file mode 100644
index 0000000000..667c4d4896
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/rcupdate.h
@@ -0,0 +1,9 @@
+#ifndef stub_linux_inc_linux_rcupdate_h
+#define stub_linux_inc_linux_rcupdate_h
+
+struct rcu_head {
+ struct rcu_head *next;
+ void (*func)(struct rcu_head *head);
+};
+
+#endif /* stub_linux_inc_linux_rcupdate_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/sched.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/sched.h
new file mode 100644
index 0000000000..6e180a080c
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/sched.h
@@ -0,0 +1,10 @@
+#ifndef stub_linux_inc_linux_sched_h
+#define stub_linux_inc_linux_sched_h
+
+#define TASK_INTERRUPTIBLE 1
+
+#define set_current_state(state_value) ((int) 0)
+
+extern signed long schedule_timeout(signed long timeout);
+
+#endif /* stub_linux_inc_linux_sched_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/skbuff.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/skbuff.h
new file mode 100644
index 0000000000..523824e453
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/skbuff.h
@@ -0,0 +1,45 @@
+#ifndef stub_linux_inc_linux_skbuff_h
+#define stub_linux_inc_linux_skbuff_h
+
+#include <linux/types.h>
+
+#define CHECKSUM_UNNECESSARY 1
+
+/* linux_drv_utests.h stub */
+struct sk_buff {
+ unsigned char *data;
+ struct net_device *dev;
+ unsigned int len;
+ unsigned short protocol;
+ unsigned char ip_summed;
+ char cb[48];
+};
+
+static inline struct sk_buff *alloc_skb(unsigned int size, int priority)
+{
+ struct sk_buff* skb;
+ skb = (struct sk_buff*)malloc((unsigned int)(sizeof(struct sk_buff)));
+ return skb;
+}
+static inline void kfree_skb(struct sk_buff *skb)
+{
+ if(skb)
+ free(skb);
+}
+
+static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
+{
+ return NULL;
+}
+
+static inline int skb_tailroom(const struct sk_buff *skb)
+{
+ return 0;
+}
+
+static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len)
+{
+ return NULL;
+}
+
+#endif /* stub_linux_inc_linux_skbuff_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/socket.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/socket.h
new file mode 100644
index 0000000000..4160ed85a2
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/socket.h
@@ -0,0 +1,18 @@
+#ifndef stub_linux_inc_linux_socket_h
+#define stub_linux_inc_linux_socket_h
+
+#include <linux/types.h>
+
+#define MSG_DONTWAIT 0x40
+
+struct sockaddr {
+ char sa_data[14];
+};
+
+struct ucred {
+ __u32 pid;
+ __u32 uid;
+ __u32 gid;
+};
+
+#endif /* stub_linux_inc_linux_socket_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/spinlock.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/spinlock.h
new file mode 100644
index 0000000000..76bb624db0
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/spinlock.h
@@ -0,0 +1,35 @@
+#ifndef stub_linux_inc_linux_spinlock_h
+#define stub_linux_inc_linux_spinlock_h
+
+#include <linux/types.h>
+
+# define SPIN_DEP_MAP_INIT(lockname)
+#define __RAW_SPIN_LOCK_UNLOCKED { 0 }
+
+/* From asm. */
+typedef struct {
+ volatile unsigned int lock;
+} raw_spinlock_t;
+
+typedef struct {
+ raw_spinlock_t raw_lock;
+// #ifdef CONFIG_GENERIC_LOCKBREAK
+// unsigned int break_lock;
+// #endif
+} spinlock_t;
+
+# define __SPIN_LOCK_UNLOCKED(lockname) \
+ (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED, \
+ SPIN_DEP_MAP_INIT(lockname) }
+
+#define SPIN_LOCK_UNLOCKED __SPIN_LOCK_UNLOCKED(old_style_spin_init)
+
+# define spin_lock_init(lock) \
+ do { *(lock) = SPIN_LOCK_UNLOCKED; } while (0)
+
+#define spin_lock_irqsave(lock, flags) ((int) 0)
+#define spin_lock_irqrestore(lock, flags) ((int) 0)
+
+#define spin_unlock_irqrestore(lock, flags) ((int) 0)
+
+#endif /* stub_linux_inc_linux_spinlock_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/types.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/types.h
new file mode 100644
index 0000000000..0643cc52b9
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/types.h
@@ -0,0 +1,23 @@
+#ifndef stub_linux_inc_linux_types_h
+#define stub_linux_inc_linux_types_h
+
+#include <linux/asm.h>
+
+#include <stdint.h>
+#include <sys/types.h>
+
+typedef _Bool bool;
+#define false 0
+#define true 1
+
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned long u32;
+typedef unsigned long long u64;
+
+typedef __u16 __be16;
+
+typedef unsigned int gfp_t;
+typedef unsigned int dma_addr_t;
+
+#endif /* stub_linux_inc_linux_types_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/wait.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/wait.h
new file mode 100644
index 0000000000..c2b2fdd940
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/linux/wait.h
@@ -0,0 +1,32 @@
+#ifndef stub_linux_inc_linux_wait_h
+#define stub_linux_inc_linux_wait_h
+
+#include <linux/list.h>
+#include <linux/spinlock.h>
+
+struct __wait_queue_head {
+ spinlock_t lock;
+ struct list_head task_list;
+};
+
+typedef struct __wait_queue_head wait_queue_head_t;
+
+#define __WAIT_QUEUE_HEAD_INITIALIZER(name) { \
+ .lock = __SPIN_LOCK_UNLOCKED(name.lock), \
+ .task_list = { &(name).task_list, &(name).task_list } }
+
+#define DECLARE_WAIT_QUEUE_HEAD(name) \
+ wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)
+
+#define wait_event_interruptible(wq, condition) ((int) 0)
+#define wake_up(x) ((int) 0)
+#define wake_up_interruptible(x) ((int) 0)
+
+static inline int waitqueue_active(wait_queue_head_t *q)
+{
+ return !list_empty(&q->task_list);
+}
+
+extern void init_waitqueue_head(wait_queue_head_t *q);
+
+#endif /* stub_linux_inc_linux_wait_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/net_namespace.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/net_namespace.h
new file mode 100644
index 0000000000..62203caf20
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/net_namespace.h
@@ -0,0 +1,55 @@
+#ifndef stub_linux_inc_net_net_namespace_h
+#define stub_linux_inc_net_net_namespace_h
+
+#include <linux/types.h>
+#include <linux/list.h>
+#include <linux/netdevice.h>
+#include <linux/spinlock.h>
+#include <linux/proc_fs.h>
+#include <net/sock.h>
+
+struct net {
+ atomic_t count; /* To decided when the network
+ * namespace should be freed.
+ */
+ atomic_t use_count; /* To track references we
+ * destroy on demand
+ */
+ struct list_head list; /* list of network namespaces */
+// struct work_struct work; /* work struct for freeing */
+
+ struct proc_dir_entry *proc_net;
+ struct proc_dir_entry *proc_net_stat;
+
+ struct list_head sysctl_table_headers;
+
+ struct net_device *loopback_dev; /* The loopback */
+
+ struct list_head dev_base_head;
+// struct hlist_head *dev_name_head;
+// struct hlist_head *dev_index_head;
+
+ /* core fib_rules */
+ struct list_head rules_ops;
+ spinlock_t rules_mod_lock;
+
+ struct sock *rtnl; /* rtnetlink socket */
+
+// /* core sysctls */
+// struct ctl_table_header *sysctl_core_hdr;
+// int sysctl_somaxconn;
+//
+// struct netns_packet packet;
+// struct netns_unix unx;
+// struct netns_ipv4 ipv4;
+//#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+// struct netns_ipv6 ipv6;
+//#endif
+//#ifdef CONFIG_NETFILTER
+// struct netns_xt xt;
+//#endif
+};
+
+extern struct net init_net;
+
+#endif /* stub_linux_inc_net_net_namespace_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/seq_check.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/seq_check.h
new file mode 100644
index 0000000000..894ea52690
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/seq_check.h
@@ -0,0 +1,28 @@
+#ifndef stub_linux_inc_net_seq_check_h
+#define stub_linux_inc_net_seq_check_h
+
+#include <linux/types.h>
+#include <linux/skbuff.h>
+
+#define SEQ_CHECK_VLAN_MAX 64
+#define SEQ_CHECK_DRV_NAME_SZ 10
+
+/* seq_check context. */
+struct seq_check_ctx
+{
+ /* Expected sequence number for the next received packet. For each VLAN. */
+ uint16_t seq_num_expected_rx[SEQ_CHECK_VLAN_MAX];
+
+ /* Expected sequence number for the next sent packet. For each VLAN. */
+ uint16_t seq_num_expected_tx[SEQ_CHECK_VLAN_MAX];
+
+ /* Name of the network driver. */
+ char drv_name[SEQ_CHECK_DRV_NAME_SZ];
+};
+
+/* we will have to create a corresponding source file if we want to use these functions */
+#define seq_check_init(ctx, drv_name) do {} while(0)
+#define seq_check_rx(ctx, skb) do {} while(0)
+#define seq_check_tx(ctx, skb) do {} while(0)
+
+#endif /* stub_linux_inc_net_seq_check_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/sock.h b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/sock.h
new file mode 100644
index 0000000000..0db9d16fb1
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/inc/net/sock.h
@@ -0,0 +1,13 @@
+#ifndef stub_linux_inc_net_sock_h
+#define stub_linux_inc_net_sock_h
+
+#include <linux/types.h>
+#include <linux/skbuff.h>
+#include <linux/socket.h>
+#include <linux/list.h>
+#include <linux/spinlock.h>
+
+struct sock_common;
+struct sock;
+
+#endif /* stub_linux_inc_linux_skbuff_h */
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/af_netlink.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/af_netlink.c
new file mode 100644
index 0000000000..10588fdbbf
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/af_netlink.c
@@ -0,0 +1,24 @@
+#include <linux/types.h>
+#include <linux/netlink.h>
+#include <linux/skbuff.h>
+#include <linux/mutex.h>
+#include <linux/module.h>
+#include <net/net_namespace.h>
+#include <net/sock.h>
+
+int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock)
+{
+ return 0;
+}
+
+struct sock *netlink_kernel_create(struct net *net, int unit,
+ unsigned int groups, void (*input)(struct sk_buff *skb),
+ struct mutex *cb_mutex, struct module *module)
+{
+ return NULL;
+}
+
+void netlink_kernel_release(struct sock *sk)
+{
+}
+
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/afe.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/afe.c
new file mode 100644
index 0000000000..55bfbfaa1b
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/afe.c
@@ -0,0 +1,6 @@
+# include <linux/afe.h>
+
+int afe_write_reg(uint8_t reg, uint8_t val)
+{
+ return 0;
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/bitops.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/bitops.c
new file mode 100644
index 0000000000..824bdeeba1
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/bitops.c
@@ -0,0 +1,6 @@
+#include <linux/bitops.h>
+
+inline int test_bit(int nr, const volatile unsigned long *addr)
+{
+ return 0;
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/char_dev.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/char_dev.c
new file mode 100644
index 0000000000..caeb5b8d3d
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/char_dev.c
@@ -0,0 +1,26 @@
+#include <linux/types.h>
+#include <linux/cdev.h>
+#include <linux/fs.h>
+
+int cdev_add(struct cdev *p, dev_t dev, unsigned count)
+{
+ return 0;
+}
+
+void cdev_del(struct cdev *p)
+{
+}
+
+void cdev_init(struct cdev *cdev, const struct file_operations *fops)
+{
+}
+
+int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,
+ const char *name)
+{
+ return 0;
+}
+
+void unregister_chrdev_region(dev_t from, unsigned count)
+{
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/delay.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/delay.c
new file mode 100644
index 0000000000..dafdeee6f5
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/delay.c
@@ -0,0 +1,6 @@
+#include <linux/delay.h>
+
+unsigned long msleep_interruptible(unsigned int msecs)
+{
+ return 0;
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/dma.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/dma.c
new file mode 100644
index 0000000000..0fdcd00a21
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/dma.c
@@ -0,0 +1,25 @@
+#include <linux/dma-mapping.h>
+#include <linux/device.h>
+#include <linux/asm.h>
+
+void *
+dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp)
+{
+ return NULL;
+}
+
+void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
+ dma_addr_t handle)
+{
+}
+
+dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
+ enum dma_data_direction dir)
+{
+ return 0;
+}
+
+void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
+ enum dma_data_direction dir)
+{
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/eth.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/eth.c
new file mode 100644
index 0000000000..37eac916a7
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/eth.c
@@ -0,0 +1,12 @@
+#include <linux/types.h>
+#include <linux/netdevice.h>
+#include <linux/skbuff.h>
+
+void ether_setup(struct net_device *dev)
+{
+}
+
+__be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
+{
+ return 5;
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/ioremap.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/ioremap.c
new file mode 100644
index 0000000000..c5113eeaf9
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/ioremap.c
@@ -0,0 +1,10 @@
+#include <linux/asm.h>
+
+void * __arm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype)
+{
+ return (void*)phys_addr;
+}
+
+void __iounmap(volatile void *addr)
+{
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/irq_manage.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/irq_manage.c
new file mode 100644
index 0000000000..e236dd44bb
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/irq_manage.c
@@ -0,0 +1,12 @@
+#include <linux/irqreturn.h>
+#include <linux/interrupt.h>
+
+void free_irq(unsigned int irq, void *dev_id)
+{
+}
+
+int request_irq(unsigned int irq, irq_handler_t handler,
+ unsigned long irqflags, const char *devname, void *dev_id)
+{
+ return 0;
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/mutex.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/mutex.c
new file mode 100644
index 0000000000..e70b55bdab
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/mutex.c
@@ -0,0 +1,11 @@
+#include <linux/mutex.h>
+
+/* mutex_lock is defined in libcheck too, so we have to stub it using */
+/* a different name... */
+inline void my_mutex_lock(struct mutex *lock)
+{
+}
+
+inline void mutex_unlock(struct mutex *lock)
+{
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/net_dev.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/net_dev.c
new file mode 100644
index 0000000000..31f63a46ba
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/net_dev.c
@@ -0,0 +1,42 @@
+#include <linux/netdevice.h>
+
+#include <stdlib.h>
+
+int register_netdev(struct net_device *dev)
+{
+ return 0;
+}
+
+void unregister_netdev(struct net_device *dev)
+{
+}
+
+struct net_device *alloc_netdev(int sizeof_priv, const char *name,
+ void (*setup)(struct net_device *))
+{
+ struct net_device* dev;
+ dev = (struct net_device*)malloc((unsigned int)(sizeof(struct net_device)));
+ dev->priv = malloc((unsigned int)(sizeof_priv));
+ return dev;
+}
+
+void free_netdev(struct net_device* dev)
+{
+ if(dev->priv)
+ free(dev->priv);
+ free((void*)(dev));
+}
+
+int netif_rx(struct sk_buff *skb)
+{
+ return 0;
+}
+
+void netif_carrier_on(struct net_device *dev)
+{
+}
+
+void netif_carrier_off(struct net_device *dev)
+{
+}
+
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/softirq.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/softirq.c
new file mode 100644
index 0000000000..fbcd75c2bf
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/softirq.c
@@ -0,0 +1,15 @@
+#include <linux/interrupt.h>
+#include <linux/asm.h>
+
+void tasklet_init(struct tasklet_struct *t,
+ void (*func)(unsigned long), unsigned long data)
+{
+}
+
+void tasklet_kill(struct tasklet_struct *t)
+{
+}
+
+void tasklet_schedule(struct tasklet_struct *t)
+{
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/uaccess.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/uaccess.c
new file mode 100644
index 0000000000..8d03603f73
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/uaccess.c
@@ -0,0 +1,32 @@
+#include <linux/asm.h>
+#include <linux/compiler.h>
+#include <stdlib.h>
+
+/* temporary hack */
+#define sizeof(plccode) 124
+
+unsigned long copy_from_user(void *to, const void __user *from, unsigned long n)
+{
+ if(n)
+ {
+ memcpy(to, from, sizeof(plccode));
+ return 0;
+ }
+ else
+ {
+ return -1;
+ }
+}
+
+unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
+{
+ if(n)
+ {
+ memcpy(to, from, sizeof(plccode));
+ return 0;
+ }
+ else
+ {
+ return -1;
+ }
+}
diff --git a/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/wait.c b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/wait.c
new file mode 100644
index 0000000000..7a0f77f67f
--- /dev/null
+++ b/cleopatre/devkit/tests/plcdrv/arm/utests/stub/linux/src/wait.c
@@ -0,0 +1,7 @@
+#include <linux/wait.h>
+#include <linux/list.h>
+#include <linux/spinlock.h>
+
+void init_waitqueue_head(wait_queue_head_t *q)
+{
+}