2009-08-22 Roxana Leontie <roxana.leontie@gmail.com>

* console/fb_vga.c: improved read/write
This commit is contained in:
Joel Sherrill
2009-08-23 14:59:55 +00:00
parent d46a005512
commit b8dfc887f5
2 changed files with 10 additions and 40 deletions

View File

@@ -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

View File

@@ -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 )