diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-08-23 14:59:55 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-08-23 14:59:55 +0000 |
commit | b8dfc887f549cbd802234a593db640cc53a67290 (patch) | |
tree | e9cfc08bdfe18c84a1562c75b1ab3ff087d80e75 /c | |
parent | 2009-08-22 Xi Yang <hiyangxi@gmail.com> (diff) | |
download | rtems-b8dfc887f549cbd802234a593db640cc53a67290.tar.bz2 |
2009-08-22 Roxana Leontie <roxana.leontie@gmail.com>
* console/fb_vga.c: improved read/write
Diffstat (limited to 'c')
-rw-r--r-- | c/src/lib/libbsp/i386/pc386/ChangeLog | 4 | ||||
-rw-r--r-- | c/src/lib/libbsp/i386/pc386/console/fb_vga.c | 46 |
2 files changed, 10 insertions, 40 deletions
diff --git a/c/src/lib/libbsp/i386/pc386/ChangeLog b/c/src/lib/libbsp/i386/pc386/ChangeLog index d8f5c99ce0..c365df0019 100644 --- a/c/src/lib/libbsp/i386/pc386/ChangeLog +++ b/c/src/lib/libbsp/i386/pc386/ChangeLog @@ -1,3 +1,7 @@ +2009-08-22 Roxana Leontie <roxana.leontie@gmail.com> + + * console/fb_vga.c: improved read/write + 2009-08-21 Roxana Leontie <roxana.leontie@gmail.com> * pc386/console/fb_vga.c: added read/write functionality; added thread diff --git a/c/src/lib/libbsp/i386/pc386/console/fb_vga.c b/c/src/lib/libbsp/i386/pc386/console/fb_vga.c index 09d56e21c3..96251f8951 100644 --- a/c/src/lib/libbsp/i386/pc386/console/fb_vga.c +++ b/c/src/lib/libbsp/i386/pc386/console/fb_vga.c @@ -142,27 +142,10 @@ rtems_device_driver frame_buffer_read( void *arg ) { - /*printk( "FBVGA read called.\n" );*/ rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *)arg; - if ( (rw_args->offset >= fb_fix.smem_len) || (rw_args->count < 0) ){ - return RTEMS_UNSATISFIED; - } - else - { - /*partial reading*/ - if ( (rw_args->offset + rw_args->count) > fb_fix.smem_len ){ - rw_args->count = fb_fix.smem_len - rw_args->offset; - memcpy(rw_args->buffer, (const void *) (rw_args->offset + fb_fix.smem_start), rw_args->count); - rw_args->bytes_moved = rw_args->count; - return RTEMS_SUCCESSFUL; - } - /*best reading case*/ - else{ - memcpy(rw_args->buffer, (const void *) (rw_args->offset + fb_fix.smem_start), rw_args->count); - rw_args->bytes_moved = rw_args->count; - return RTEMS_SUCCESSFUL; - } - } + rw_args->bytes_moved = ((rw_args->offset + rw_args->count) > fb_fix.smem_len ) ? (fb_fix.smem_len - rw_args->offset) : rw_args->count; + memcpy(rw_args->buffer, (const void *) (fb_fix.smem_start + rw_args->offset), rw_args->bytes_moved); + return RTEMS_SUCCESSFUL; } /* @@ -174,27 +157,10 @@ rtems_device_driver frame_buffer_write( void *arg ) { - /*printk( "FBVGA write called.\n" );*/ rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *)arg; - if ( (rw_args->offset >= fb_fix.smem_len) || (rw_args->count < 0) ){ - return RTEMS_UNSATISFIED; - } - else - { - /*partial writing*/ - if ( (rw_args->offset + rw_args->count) > fb_fix.smem_len ){ - rw_args->count = fb_fix.smem_len - rw_args->offset; - memcpy( (void *) (rw_args->offset + fb_fix.smem_start), rw_args->buffer, rw_args->count); - rw_args->bytes_moved = rw_args->count; - return RTEMS_SUCCESSFUL; - } - /* best writing case*/ - else{ - memcpy( (void *) (rw_args->offset + fb_fix.smem_start), rw_args->buffer, rw_args->count); - rw_args->bytes_moved = rw_args->count; - return RTEMS_SUCCESSFUL; - } - } + rw_args->bytes_moved = ((rw_args->offset + rw_args->count) > fb_fix.smem_len ) ? (fb_fix.smem_len - rw_args->offset) : rw_args->count; + memcpy( (void *) (fb_fix.smem_start + rw_args->offset), rw_args->buffer, rw_args->bytes_moved); + return RTEMS_SUCCESSFUL; } static int get_fix_screen_info( struct fb_fix_screeninfo *info ) |