/* ///////////////////////////////////////////////////////////////////////////// // $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 #include /* * 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; }