summaryrefslogtreecommitdiffstats
path: root/cpukit/libmisc/mw-fb/mw_fb.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libmisc/mw-fb/mw_fb.c')
-rw-r--r--cpukit/libmisc/mw-fb/mw_fb.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/cpukit/libmisc/mw-fb/mw_fb.c b/cpukit/libmisc/mw-fb/mw_fb.c
new file mode 100644
index 0000000000..c54b113654
--- /dev/null
+++ b/cpukit/libmisc/mw-fb/mw_fb.c
@@ -0,0 +1,137 @@
+/*
+/////////////////////////////////////////////////////////////////////////////
+// $Header$
+//
+// Copyright (c) 2000 - Rosimildo da Silva
+//
+// MODULE DESCRIPTION:
+// Wrapper API around the ioctls calls for the Micro FrameBuffer
+// interface for Embedded Systems
+//
+// All functions returns 0 on success. Any other value should be
+// decoded as an error. A list of errors will be created over time.
+//
+// MODIFICATION/HISTORY:
+//
+// $Log$
+//
+/////////////////////////////////////////////////////////////////////////////
+*/
+
+#include <sys/ioctl.h>
+#include <rtems/mw_fb.h>
+
+
+/*
+ * This function returns the information regarding the display.
+ * It is called just after the driver be opened to get all needed
+ * information about the driver. No change in the mode of operation
+ * of the driver is done with this call.
+ */
+ int ufb_get_screen_info( int fd, struct fb_screeninfo *info )
+ {
+ return ioctl( fd, FB_SCREENINFO, ( void *)info);
+ }
+
+
+
+/*
+ * Returns the mode of the graphics subsystem
+ */
+ int ufb_get_mode( int fd, int *mode )
+ {
+ struct fb_exec_function exec;
+ exec.func_no = FB_FUNC_GET_MODE;
+ exec.param = ( void *)mode;
+ return ioctl( fd, FB_EXEC_FUNCTION , ( void *)&exec );
+ }
+
+
+/*
+ * Returns the current collor pallete
+ */
+ int ufb_get_palette( int fd, struct fb_cmap *color )
+ {
+ return ioctl( fd, FB_GETPALETTE, ( void *)color );
+ }
+
+
+/*
+ * Set the current collor pallete
+ */
+ int ufb_set_palette( int fd, struct fb_cmap *color )
+ {
+ return ioctl( fd, FB_SETPALETTE, ( void *)color );
+ }
+
+/*
+ * Does all necessary initialization to put the device in
+ * graphics mode
+ */
+ int ufb_enter_graphics( int fd, int mode )
+ {
+ struct fb_exec_function exec;
+ exec.func_no = FB_FUNC_ENTER_GRAPHICS;
+ exec.param = ( void *)mode;
+ return ioctl( fd, FB_EXEC_FUNCTION , ( void *)&exec );
+ }
+
+
+/*
+ * Switch the device back to the default mode of operation.
+ * In most cases it put the device back to plain text mode.
+ */
+ int ufb_exit_graphics( int fd )
+ {
+ struct fb_exec_function exec;
+ exec.func_no = FB_FUNC_EXIT_GRAPHICS;
+ exec.param = 0;
+ return ioctl( fd, FB_EXEC_FUNCTION , ( void *)&exec );
+ }
+
+/*
+ * Tell the driver that the "virtual buffer" is dirty, and an update
+ * of it to the real device, maybe a serial/parallel LCD or whatever
+ * is required
+ */
+ int ufb_buffer_is_dirty( int fd )
+ {
+ struct fb_exec_function exec;
+ exec.func_no = FB_FUNC_IS_DIRTY;
+ exec.param = 0;
+ return ioctl( fd, FB_EXEC_FUNCTION , ( void *)&exec );
+ }
+
+
+
+/*
+ * This function maps the physical ( kernel mode ) address of the framebuffer device
+ * and maps it to the user space address.
+ */
+ int ufb_mmap_to_user_space( int fd, void **fb_addr, void *physical_addr, unsigned long size )
+ {
+ #ifdef __rtems__
+ /* RTEMS runs in ring 0, and there is no distinction between
+ user space and kernel space, so we just return the same
+ pointer to the caller.
+ */
+ *fb_addr = physical_addr;
+ return 0;
+ #else
+ /* other kernels might want to map it to the user space,
+ maybe using mmap()
+ */
+ return 0;
+ #endif
+
+ }
+
+
+/*
+ * This function unmaps memory of the FB from the user's space
+ */
+ int ufb_unmmap_from_user_space( int fd, void *addr )
+ {
+ return 0;
+ }
+