diff --git a/config/cml/container_ruleset.template b/config/cml/container_ruleset.template index 450e7f1..530b55e 100644 --- a/config/cml/container_ruleset.template +++ b/config/cml/container_ruleset.template @@ -237,6 +237,7 @@ cont%(cn)d_cap_device_uart3 'Container %(cn)d UART3 Menu' cont%(cn)d_cap_device_timer1 'Container %(cn)d TIMER23 Menu' cont%(cn)d_cap_device_keyboard0 'Container %(cn)d KEYBOARD0 Menu' cont%(cn)d_cap_device_mouse0 'Container %(cn)d MOUSE0 Menu' +cont%(cn)d_cap_device_clcd0 'Container %(cn)d CLCD0 Menu' CONT%(cn)d_CAP_DEVICE_UART1_USE 'Container %(cn)d UART1 Enable' CONT%(cn)d_CAP_DEVICE_UART2_USE 'Container %(cn)d UART2 Enable' @@ -244,6 +245,7 @@ CONT%(cn)d_CAP_DEVICE_UART3_USE 'Container %(cn)d UART3 Enable' CONT%(cn)d_CAP_DEVICE_TIMER1_USE 'Container %(cn)d TIMER23 Enable' CONT%(cn)d_CAP_DEVICE_KEYBOARD0_USE 'Container %(cn)d KEYBOARD0 Enable' CONT%(cn)d_CAP_DEVICE_MOUSE0_USE 'Container %(cn)d MOUSE0 Enable' +CONT%(cn)d_CAP_DEVICE_CLCD0_USE 'Container %(cn)d CLCD0 Enable' default CONT%(cn)d_CAP_DEVICE_UART1_USE from n default CONT%(cn)d_CAP_DEVICE_UART2_USE from n @@ -251,6 +253,7 @@ default CONT%(cn)d_CAP_DEVICE_UART3_USE from n default CONT%(cn)d_CAP_DEVICE_TIMER1_USE from n default CONT%(cn)d_CAP_DEVICE_KEYBOARD0_USE from n default CONT%(cn)d_CAP_DEVICE_MOUSE0_USE from n +default CONT%(cn)d_CAP_DEVICE_CLCD0_USE from n menu cont%(cn)d_cap_device_uart1 CONT%(cn)d_CAP_DEVICE_UART1_USE @@ -270,10 +273,14 @@ menu cont%(cn)d_cap_device_keyboard0 menu cont%(cn)d_cap_device_mouse0 CONT%(cn)d_CAP_DEVICE_MOUSE0_USE +menu cont%(cn)d_cap_device_clcd0 + CONT%(cn)d_CAP_DEVICE_CLCD0_USE + menu cont%(cn)d_device_list cont%(cn)d_cap_device_uart1 cont%(cn)d_cap_device_uart2 cont%(cn)d_cap_device_uart3 + cont%(cn)d_cap_device_clcd0 cont%(cn)d_cap_device_timer1 cont%(cn)d_cap_device_keyboard0 cont%(cn)d_cap_device_mouse0 diff --git a/conts/libdev/SConscript b/conts/libdev/SConscript index 5528dba..3f62846 100644 --- a/conts/libdev/SConscript +++ b/conts/libdev/SConscript @@ -38,6 +38,8 @@ objects += SConscript('timer/sp804/SConscript', duplicate=0, \ exports = {'platform' : platform, 'env' : e}) objects += SConscript('kmi/pl050/SConscript', duplicate=0, \ exports = {'platform' : platform, 'env' : e}) +objects += SConscript('clcd/pl110/SConscript', duplicate=0, \ + exports = {'platform' : platform, 'env' : e}) objects += SConscript('uart/omap/SConscript', duplicate=0, \ exports = {'platform' : platform, 'env' : e}) diff --git a/conts/libdev/SConstruct b/conts/libdev/SConstruct index a083b9e..ea51650 100644 --- a/conts/libdev/SConstruct +++ b/conts/libdev/SConstruct @@ -48,6 +48,8 @@ objects += SConscript('timer/sp804/SConscript', duplicate=0, \ exports = {'platform' : platform, 'env' : env}) objects += SConscript('kmi/pl050/SConscript', duplicate=0, \ exports = {'platform' : platform, 'env' : env}) +objects += SConscript('clcd/pl110/SConscript', duplicate=0, \ + exports = {'platform' : platform, 'env' : env}) objects += SConscript('uart/omap/SConscript', duplicate=0, \ exports = {'platform' : platform, 'env' : env}) diff --git a/conts/libdev/clcd/pl110/SConscript b/conts/libdev/clcd/pl110/SConscript new file mode 100644 index 0000000..e554dac --- /dev/null +++ b/conts/libdev/clcd/pl110/SConscript @@ -0,0 +1,14 @@ +Import('env', 'platform') + +#Platforms using pl110 +plat_list = ('eb', 'pba8', 'pba9', 'pb11mpcore', 'pb926') + +# The set of source files associated with this SConscript file. +src_local = [] + +for plat_supported in plat_list: + if plat_supported == platform: + src_local += Glob('*.c') + +obj = env.StaticObject(src_local) +Return('obj') diff --git a/conts/libdev/clcd/pl110/clcd.c b/conts/libdev/clcd/pl110/clcd.c new file mode 100644 index 0000000..b28b04f --- /dev/null +++ b/conts/libdev/clcd/pl110/clcd.c @@ -0,0 +1,3 @@ + + + diff --git a/conts/libdev/clcd/pl110/clcd.h b/conts/libdev/clcd/pl110/clcd.h new file mode 100644 index 0000000..4634b01 --- /dev/null +++ b/conts/libdev/clcd/pl110/clcd.h @@ -0,0 +1,5 @@ + +#ifndef __CLCD_H__ +#define __CLCD_H__ + +#endif /* __CLCD_H__ */ diff --git a/include/l4/generic/cap-types.h b/include/l4/generic/cap-types.h index 033f791..7323378 100644 --- a/include/l4/generic/cap-types.h +++ b/include/l4/generic/cap-types.h @@ -46,8 +46,9 @@ */ #define CAP_DEVTYPE_TIMER 1 #define CAP_DEVTYPE_UART 2 -#define CAP_DEVTYPE_KEYBOARD 3 -#define CAP_DEVTYPE_MOUSE 4 +#define CAP_DEVTYPE_KEYBOARD 3 +#define CAP_DEVTYPE_MOUSE 4 +#define CAP_DEVTYPE_CLCD 5 #define CAP_DEVTYPE_OTHER 0xF #define CAP_DEVTYPE_MASK 0xFFFF #define CAP_DEVNUM_MASK 0xFFFF0000 diff --git a/include/l4/platform/pb926/offsets.h b/include/l4/platform/pb926/offsets.h index ad5db0e..a41e0ae 100644 --- a/include/l4/platform/pb926/offsets.h +++ b/include/l4/platform/pb926/offsets.h @@ -49,6 +49,7 @@ #define PLATFORM_TIMER1_VBASE (IO_AREA0_VADDR + (6 * DEVICE_PAGE)) #define PLATFORM_KEYBOARD0_VBASE (IO_AREA0_VADDR + (7 * DEVICE_PAGE)) #define PLATFORM_MOUSE0_VBASE (IO_AREA0_VADDR + (8 * DEVICE_PAGE)) +#define PLATFORM_CLCD0_VBASE (IO_AREA0_VADDR + (9 * DEVICE_PAGE)) /* The SP810 system controller offsets */ #define SP810_BASE PLATFORM_SYSCTRL_VBASE @@ -61,6 +62,7 @@ #define PLATFORM_TIMER1_SIZE 0x1000 #define PLATFORM_KEYBOARD0_SIZE 0x1000 #define PLATFORM_MOUSE0_SIZE 0x1000 +#define PLATFORM_CLCD0_SIZE 0x1000 #endif /* __PLATFORM_PB926_OFFSETS_H__ */ diff --git a/scripts/cml/generate_container_cml.py b/scripts/cml/generate_container_cml.py index 6aaa892..1252737 100755 --- a/scripts/cml/generate_container_cml.py +++ b/scripts/cml/generate_container_cml.py @@ -50,7 +50,8 @@ device_suppress_sym = \ '''\tcont${CONTID}_cap_device_${DEVNAME_LOWER} ''' -devices = ['UART1', 'UART2', 'UART3', 'TIMER1', 'KEYBOARD0', 'MOUSE0'] +devices = ['UART1', 'UART2', 'UART3', 'TIMER1', + 'KEYBOARD0', 'MOUSE0', 'CLCD0'] # # When a symbol is used by a single container, sometimes it is diff --git a/src/platform/pb926/platform.c b/src/platform/pb926/platform.c index 2535f3b..8f6a57a 100644 --- a/src/platform/pb926/platform.c +++ b/src/platform/pb926/platform.c @@ -23,6 +23,25 @@ #include #include +/* + * FIXME: This is not a platform specific + * call, we will move this out later + */ +void device_cap_init(struct kernel_resources *kres, int devtype, + int devnum, unsigned long base) +{ + struct capability *cap; + + cap = alloc_bootmem(sizeof(*cap), 0); + cap_set_devtype(cap, devtype); + cap_set_devnum(cap, devnum); + cap->start = __pfn(base); + cap->end = cap->start + 1; + cap->size = cap->end - cap->start; + link_init(&cap->list); + cap_list_insert(cap, &kres->devmem_free); +} + /* * The devices that are used by the kernel are mapped * independent of these capabilities, but these provide a @@ -30,66 +49,13 @@ */ int platform_setup_device_caps(struct kernel_resources *kres) { - struct capability *uart[3], *timer[1], - *keyboard[1], *mouse[1]; - - /* Setup capabilities for userspace uarts and timers */ - uart[0] = alloc_bootmem(sizeof(*uart[0]), 0); - uart[0]->start = __pfn(PLATFORM_UART1_BASE); - uart[0]->end = uart[0]->start + 1; - uart[0]->size = uart[0]->end - uart[1]->start; - cap_set_devtype(uart[0], CAP_DEVTYPE_UART); - cap_set_devnum(uart[0], 1); - link_init(&uart[0]->list); - cap_list_insert(uart[0], &kres->devmem_free); - - uart[1] = alloc_bootmem(sizeof(*uart[1]), 0); - uart[1]->start = __pfn(PLATFORM_UART2_BASE); - uart[1]->end = uart[1]->start + 1; - uart[1]->size = uart[1]->end - uart[1]->start; - cap_set_devtype(uart[1], CAP_DEVTYPE_UART); - cap_set_devnum(uart[1], 2); - link_init(&uart[1]->list); - cap_list_insert(uart[1], &kres->devmem_free); - - uart[2] = alloc_bootmem(sizeof(*uart[2]), 0); - uart[2]->start = __pfn(PLATFORM_UART3_BASE); - uart[2]->end = uart[2]->start + 1; - uart[2]->size = uart[2]->end - uart[2]->start; - cap_set_devtype(uart[2], CAP_DEVTYPE_UART); - cap_set_devnum(uart[2], 3); - link_init(&uart[2]->list); - cap_list_insert(uart[2], &kres->devmem_free); - - /* Setup timer1 capability as free */ - timer[0] = alloc_bootmem(sizeof(*timer[0]), 0); - timer[0]->start = __pfn(PLATFORM_TIMER1_BASE); - timer[0]->end = timer[0]->start + 1; - timer[0]->size = timer[0]->end - timer[0]->start; - cap_set_devtype(timer[0], CAP_DEVTYPE_TIMER); - cap_set_devnum(timer[0], 1); - link_init(&timer[0]->list); - cap_list_insert(timer[0], &kres->devmem_free); - - /* Setup keyboard capability as free */ - keyboard[0] = alloc_bootmem(sizeof(*keyboard[0]), 0); - keyboard[0]->start = __pfn(PLATFORM_KEYBOARD0_BASE); - keyboard[0]->end = keyboard[0]->start + 1; - keyboard[0]->size = keyboard[0]->end - keyboard[0]->start; - cap_set_devtype(keyboard[0], CAP_DEVTYPE_KEYBOARD); - cap_set_devnum(keyboard[0], 0); - link_init(&keyboard[0]->list); - cap_list_insert(keyboard[0], &kres->devmem_free); - - /* Setup mouse capability as free */ - mouse[0] = alloc_bootmem(sizeof(*mouse[0]), 0); - mouse[0]->start = __pfn(PLATFORM_MOUSE0_BASE); - mouse[0]->end = mouse[0]->start + 1; - mouse[0]->size = mouse[0]->end - mouse[0]->start; - cap_set_devtype(mouse[0], CAP_DEVTYPE_MOUSE); - cap_set_devnum(mouse[0], 0); - link_init(&mouse[0]->list); - cap_list_insert(mouse[0], &kres->devmem_free); + device_cap_init(kres, CAP_DEVTYPE_UART, 1, PLATFORM_UART1_BASE); + device_cap_init(kres, CAP_DEVTYPE_UART, 2, PLATFORM_UART2_BASE); + device_cap_init(kres, CAP_DEVTYPE_UART, 3, PLATFORM_UART3_BASE); + device_cap_init(kres, CAP_DEVTYPE_TIMER, 1, PLATFORM_TIMER1_BASE); + device_cap_init(kres, CAP_DEVTYPE_KEYBOARD, 0, PLATFORM_KEYBOARD0_BASE); + device_cap_init(kres, CAP_DEVTYPE_MOUSE, 0, PLATFORM_MOUSE0_BASE); + device_cap_init(kres, CAP_DEVTYPE_CLCD, 0, PLATFORM_CLCD0_BASE); return 0; } @@ -152,6 +118,9 @@ void init_platform_devices() add_boot_mapping(PLATFORM_MOUSE0_BASE, PLATFORM_MOUSE0_VBASE, PAGE_SIZE, MAP_IO_DEFAULT); + /* CLCD */ + add_boot_mapping(PLATFORM_CLCD0_BASE, PLATFORM_CLCD0_VBASE, + PAGE_SIZE, MAP_IO_DEFAULT); } /* If these bits are off, 32Khz OSC source is used */