diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-04-16 18:37:33 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-04-16 18:37:33 +0000 |
commit | 311dfa65d823ebb1448a12e9a24d09c7ca7a9e2a (patch) | |
tree | 47eaf22ca7bb8cc68486ffe964abd54b535902ad /c/src/lib/libbsp/arm/nds/fb/fb.c | |
parent | 2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com> (diff) | |
download | rtems-311dfa65d823ebb1448a12e9a24d09c7ca7a9e2a.tar.bz2 |
2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com>
* ChangeLog, Makefile.am, README, bsp_specs, configure.ac,
mk_libnds.sh, patch.libnds, preinstall.am, block/block.c,
clock/clock.c, console/console.c, coproc/coproc.S, coproc/coproc.c,
coproc/coproc.ld, dswifi/dswifi_license.txt, dswifi/makefile,
dswifi/arm7/makefile, dswifi/arm7/source/wifi_arm7.c,
dswifi/arm7/source/wifi_arm7.h, dswifi/arm9/makefile,
dswifi/arm9/source/sgIP.c, dswifi/arm9/source/sgIP.h,
dswifi/arm9/source/sgIP_ARP.c, dswifi/arm9/source/sgIP_ARP.h,
dswifi/arm9/source/sgIP_Config.h, dswifi/arm9/source/sgIP_DHCP.c,
dswifi/arm9/source/sgIP_DHCP.h, dswifi/arm9/source/sgIP_DNS.c,
dswifi/arm9/source/sgIP_DNS.h, dswifi/arm9/source/sgIP_Hub.c,
dswifi/arm9/source/sgIP_Hub.h, dswifi/arm9/source/sgIP_ICMP.c,
dswifi/arm9/source/sgIP_ICMP.h, dswifi/arm9/source/sgIP_IP.c,
dswifi/arm9/source/sgIP_IP.h, dswifi/arm9/source/sgIP_TCP.c,
dswifi/arm9/source/sgIP_TCP.h, dswifi/arm9/source/sgIP_UDP.c,
dswifi/arm9/source/sgIP_UDP.h, dswifi/arm9/source/sgIP_memblock.c,
dswifi/arm9/source/sgIP_memblock.h,
dswifi/arm9/source/sgIP_sockets.c, dswifi/arm9/source/sgIP_sockets.h,
dswifi/arm9/source/wifi_arm9.c, dswifi/arm9/source/wifi_arm9.h,
dswifi/common/source/dsregs.h, dswifi/common/source/spinlock.h,
dswifi/common/source/spinlock.s, dswifi/common/source/wifi_shared.h,
dswifi/include/dswifi7.h, dswifi/include/dswifi9.h,
dswifi/include/dswifi_version.h, dswifi/include/netdb.h,
dswifi/include/sgIP_errno.h, dswifi/include/netinet/in.h, fb/fb.c,
fb/fb.h, include/bsp.h, include/my_ipc.h, include/tm27.h,
include/types.h, include/sys/iosupport.h, irq/irq.c, irq/irq.h,
libfat/gba/include/fat.h, libfat/include/fat.h,
libfat/nds/include/fat.h, libfat/source/bit_ops.h,
libfat/source/cache.c, libfat/source/cache.h, libfat/source/common.h,
libfat/source/directory.c, libfat/source/directory.h,
libfat/source/fatdir.c, libfat/source/fatdir.h,
libfat/source/fatfile.c, libfat/source/fatfile.h,
libfat/source/file_allocation_table.c,
libfat/source/file_allocation_table.h, libfat/source/filetime.c,
libfat/source/filetime.h, libfat/source/libfat.c,
libfat/source/mem_allocate.h, libfat/source/partition.c,
libfat/source/partition.h, libfat/source/disc_io/disc.c,
libfat/source/disc_io/disc.h, libfat/source/disc_io/disc_io.h,
libfat/source/disc_io/io_cf_common.c,
libfat/source/disc_io/io_cf_common.h,
libfat/source/disc_io/io_dldi.h, libfat/source/disc_io/io_dldi.s,
libfat/source/disc_io/io_efa2.c, libfat/source/disc_io/io_efa2.h,
libfat/source/disc_io/io_fcsr.c, libfat/source/disc_io/io_fcsr.h,
libfat/source/disc_io/io_m3_common.c,
libfat/source/disc_io/io_m3_common.h,
libfat/source/disc_io/io_m3cf.c, libfat/source/disc_io/io_m3cf.h,
libfat/source/disc_io/io_m3sd.c, libfat/source/disc_io/io_m3sd.h,
libfat/source/disc_io/io_mpcf.c, libfat/source/disc_io/io_mpcf.h,
libfat/source/disc_io/io_njsd.c, libfat/source/disc_io/io_njsd.h,
libfat/source/disc_io/io_nmmc.c, libfat/source/disc_io/io_nmmc.h,
libfat/source/disc_io/io_sc_common.c,
libfat/source/disc_io/io_sc_common.h,
libfat/source/disc_io/io_sccf.c, libfat/source/disc_io/io_sccf.h,
libfat/source/disc_io/io_scsd.c, libfat/source/disc_io/io_scsd.h,
libfat/source/disc_io/io_scsd_s.s,
libfat/source/disc_io/io_sd_common.c,
libfat/source/disc_io/io_sd_common.h, libnds/Makefile.arm7,
libnds/Makefile.arm9, libnds/libnds_license.txt,
libnds/basicARM7/source/defaultARM7.c,
libnds/include/default_font_bin.h, libnds/include/gbfs.h,
libnds/include/nds.h, libnds/include/nds/bios.h,
libnds/include/nds/card.h, libnds/include/nds/dma.h,
libnds/include/nds/interrupts.h, libnds/include/nds/ipc.h,
libnds/include/nds/jtypes.h, libnds/include/nds/memory.h,
libnds/include/nds/registers_alt.h, libnds/include/nds/reload.h,
libnds/include/nds/system.h, libnds/include/nds/timers.h,
libnds/include/nds/arm7/audio.h, libnds/include/nds/arm7/clock.h,
libnds/include/nds/arm7/serial.h, libnds/include/nds/arm7/touch.h,
libnds/include/nds/arm9/background.h,
libnds/include/nds/arm9/boxtest.h, libnds/include/nds/arm9/cache.h,
libnds/include/nds/arm9/console.h,
libnds/include/nds/arm9/exceptions.h,
libnds/include/nds/arm9/image.h, libnds/include/nds/arm9/input.h,
libnds/include/nds/arm9/math.h, libnds/include/nds/arm9/ndsmotion.h,
libnds/include/nds/arm9/pcx.h, libnds/include/nds/arm9/postest.h,
libnds/include/nds/arm9/rumble.h, libnds/include/nds/arm9/sound.h,
libnds/include/nds/arm9/sprite.h, libnds/include/nds/arm9/trig_lut.h,
libnds/include/nds/arm9/video.h, libnds/include/nds/arm9/videoGL.h,
libnds/source/arm7/audio.c, libnds/source/arm7/clock.c,
libnds/source/arm7/microphone.c, libnds/source/arm7/spi.c,
libnds/source/arm7/touch.c, libnds/source/arm7/userSettings.c,
libnds/source/arm9/COS.bin, libnds/source/arm9/COS.s,
libnds/source/arm9/SIN.bin, libnds/source/arm9/SIN.s,
libnds/source/arm9/TAN.bin, libnds/source/arm9/TAN.s,
libnds/source/arm9/boxtest.c, libnds/source/arm9/console.c,
libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.bin,
libnds/source/arm9/default_font.s,
libnds/source/arm9/exceptionHandler.S,
libnds/source/arm9/exceptionHandler.s,
libnds/source/arm9/exceptions.c, libnds/source/arm9/gurumeditation.c,
libnds/source/arm9/icache.s, libnds/source/arm9/image.c,
libnds/source/arm9/initSystem.c, libnds/source/arm9/keys.c,
libnds/source/arm9/ndsmotion.c, libnds/source/arm9/pcx.c,
libnds/source/arm9/rumble.c, libnds/source/arm9/sound.c,
libnds/source/arm9/system.c, libnds/source/arm9/touch.c,
libnds/source/arm9/video.c, libnds/source/arm9/videoGL.c,
libnds/source/common/biosCalls.s, libnds/source/common/card.c,
libnds/source/common/gbfs.c,
libnds/source/common/interruptDispatcher.s,
libnds/source/common/interrupts.c, rtc/rtc.c, sound/sound.c,
sound/sound.h, start/start.S, startup/linkcmds, startup/start.c,
timer/timer.c, tools/Makefile.am, tools/bin2s, tools/bin2s.c,
tools/configure.ac, tools/runtest,
tools/ndstool/include/arm7_sha1_homebrew.h,
tools/ndstool/include/arm7_sha1_nintendo.h,
tools/ndstool/include/banner.h, tools/ndstool/include/bigint.h,
tools/ndstool/include/crc.h, tools/ndstool/include/default_icon.h,
tools/ndstool/include/encryption.h, tools/ndstool/include/header.h,
tools/ndstool/include/hook.h, tools/ndstool/include/little.h,
tools/ndstool/include/loadme.h, tools/ndstool/include/logo.h,
tools/ndstool/include/ndscreate.h,
tools/ndstool/include/ndsextract.h, tools/ndstool/include/ndstool.h,
tools/ndstool/include/ndstree.h, tools/ndstool/include/overlay.h,
tools/ndstool/include/passme.h, tools/ndstool/include/passme_sram.h,
tools/ndstool/include/passme_vhd1.h,
tools/ndstool/include/passme_vhd2.h, tools/ndstool/include/raster.h,
tools/ndstool/include/sha1.h, tools/ndstool/include/types.h,
tools/ndstool/source/arm7_sha1_homebrew.c,
tools/ndstool/source/arm7_sha1_nintendo.c,
tools/ndstool/source/banner.cpp, tools/ndstool/source/bigint.cpp,
tools/ndstool/source/compile_date.c, tools/ndstool/source/crc.cpp,
tools/ndstool/source/default_icon.c,
tools/ndstool/source/encryption.cpp, tools/ndstool/source/header.cpp,
tools/ndstool/source/hook.cpp, tools/ndstool/source/loadme.c,
tools/ndstool/source/logo.cpp, tools/ndstool/source/ndscodes.cpp,
tools/ndstool/source/ndscreate.cpp,
tools/ndstool/source/ndsextract.cpp,
tools/ndstool/source/ndstool.cpp, tools/ndstool/source/ndstree.cpp,
tools/ndstool/source/passme.cpp, tools/ndstool/source/passme_sram.c,
tools/ndstool/source/raster.cpp, tools/ndstool/source/sha1.cpp,
touchscreen/README.reco, touchscreen/parser.c, touchscreen/reco.c,
touchscreen/reco.h, touchscreen/touchscreen.c,
touchscreen/touchscreen.h, wifi/compat.c, wifi/compat.h, wifi/wifi.c:
New files.
Diffstat (limited to 'c/src/lib/libbsp/arm/nds/fb/fb.c')
-rw-r--r-- | c/src/lib/libbsp/arm/nds/fb/fb.c | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/nds/fb/fb.c b/c/src/lib/libbsp/arm/nds/fb/fb.c new file mode 100644 index 0000000000..9d5d26f5e9 --- /dev/null +++ b/c/src/lib/libbsp/arm/nds/fb/fb.c @@ -0,0 +1,207 @@ +/* + * RTEMS for Nintendo DS framebuffer display driver. + * + * Copyright (c) 2008 by Matthieu Bucchianeri <mbucchia@gmail.com> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * + * http://www.rtems.com/license/LICENSE + * + * $Id$ + */ + +#include <stdlib.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> + +#include <bsp.h> +#include "../irq/irq.h" +#include <rtems/libio.h> +#include <nds.h> + +#include <rtems/mw_fb.h> + +/* + * screen information for the driver (fb0). + */ + +static struct fb_screeninfo fb_info = { + SCREEN_WIDTH, SCREEN_HEIGHT, /* screen size x, y */ + 16, /* bits per pixel */ + SCREEN_WIDTH, /* pixels per line (redundant with xres ?) */ + (void *) VRAM_A, /* buffer pointer */ + 0x18000, /* buffer size */ + FB_TYPE_PACKED_PIXELS, /* type of dsplay */ + FB_VISUAL_TRUECOLOR /* color scheme used */ +}; + +/* + * screen information for the driver (fb1). + */ + +static struct fb_screeninfo fb_info2 = { + SCREEN_WIDTH, SCREEN_HEIGHT, /* screen size x, y */ + 16, /* bits per pixel */ + SCREEN_WIDTH, /* pixels per line (redundant with xres ?) */ + (void *) VRAM_B, /* buffer pointer */ + 0x18000, /* buffer size */ + FB_TYPE_PACKED_PIXELS, /* type of dsplay */ + FB_VISUAL_TRUECOLOR /* color scheme used */ +}; + +/* + * fbds device driver initialize entry point. + */ + +rtems_device_driver +fbds_initialize (rtems_device_major_number major, + rtems_device_minor_number minor, void *arg) +{ + rtems_status_code status; + + printk ("[+] framebuffer started\n"); + + /* register the devices */ + status = rtems_io_register_name ("/dev/fb0", major, 0); + if (status != RTEMS_SUCCESSFUL) { + printk ("[!] error registering framebuffer\n"); + rtems_fatal_error_occurred (status); + } + status = rtems_io_register_name ("/dev/fb1", major, 1); + if (status != RTEMS_SUCCESSFUL) { + printk ("[!] error registering framebuffer\n"); + rtems_fatal_error_occurred (status); + } + return RTEMS_SUCCESSFUL; +} + +/* + * fbds device driver open operation. + */ + +rtems_device_driver +fbds_open (rtems_device_major_number major, + rtems_device_minor_number minor, void *arg) +{ + return RTEMS_SUCCESSFUL; +} + +/* + * fbds device driver close operation. + */ + +rtems_device_driver +fbds_close (rtems_device_major_number major, + rtems_device_minor_number minor, void *arg) +{ + return RTEMS_SUCCESSFUL; +} + +/* + * fbds device driver read operation. + */ + +rtems_device_driver +fbds_read (rtems_device_major_number major, + rtems_device_minor_number minor, void *arg) +{ + rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) arg; + rw_args->bytes_moved = 0; + + return RTEMS_SUCCESSFUL; +} + +/* + * fbds device driver write operation. + */ + +rtems_device_driver +fbds_write (rtems_device_major_number major, + rtems_device_minor_number minor, void *arg) +{ + rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) arg; + rw_args->bytes_moved = 0; + + return RTEMS_SUCCESSFUL; +} + +/* + * ioctl entry point. + */ + +rtems_device_driver +fbds_control (rtems_device_major_number major, + rtems_device_minor_number minor, void *arg) +{ + rtems_libio_ioctl_args_t *args = arg; + + /* XXX check minor */ + + switch (args->command) { + case FB_SCREENINFO: + memcpy (args->buffer, minor ? &fb_info2 : &fb_info, sizeof (fb_info)); + args->ioctl_return = 0; + break; + case FB_GETPALETTE: + args->ioctl_return = 0; /* XXX */ + break; + case FB_SETPALETTE: + args->ioctl_return = 0; /* XXX */ + break; + + /* + * this function would execute one of the routines of the + * interface based on the operation requested. + */ + case FB_EXEC_FUNCTION: + { + struct fb_exec_function *env = args->buffer; + + switch (env->func_no) { + case FB_FUNC_ENTER_GRAPHICS: + /* enter graphics mode */ + printk ("[#] entering graphic mode on fb%d\n", minor); + if (!minor) { + videoSetMode (MODE_FB0); + vramSetBankA (VRAM_A_LCD); + memset (fb_info.smem_start, 0, fb_info.smem_len); + } else { + videoSetModeSub (MODE_FB0); + vramSetBankB (VRAM_B_LCD); + memset (fb_info2.smem_start, 0, fb_info2.smem_len); + } + break; + + case FB_FUNC_EXIT_GRAPHICS: + /* leave graphics mode, in fact we only clear screen */ + printk ("[#] leaving graphic mode on fb%d\n", minor); + if (!minor) { + memset (fb_info.smem_start, 0, fb_info.smem_len); + } else { + memset (fb_info2.smem_start, 0, fb_info2.smem_len); + /* back to console */ + videoSetModeSub (MODE_0_2D | DISPLAY_BG0_ACTIVE); + vramSetBankC (VRAM_C_SUB_BG); + } + break; + + case FB_FUNC_IS_DIRTY: + break; + + case FB_FUNC_GET_MODE: + break; + + default: + break; + } + } + /* no break on purpose */ + default: + args->ioctl_return = 0; + break; + + } + return RTEMS_SUCCESSFUL; +} |