summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2009-08-23 14:59:55 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2009-08-23 14:59:55 +0000
commitb8dfc887f549cbd802234a593db640cc53a67290 (patch)
treee9cfc08bdfe18c84a1562c75b1ab3ff087d80e75 /c
parent2009-08-22 Xi Yang <hiyangxi@gmail.com> (diff)
downloadrtems-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/ChangeLog4
-rw-r--r--c/src/lib/libbsp/i386/pc386/console/fb_vga.c46
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 )