From 7e0bd6ee20504e836bb78f353f0099aecbfe2229 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 27 May 2009 14:21:29 +0000 Subject: 2009-05-27 Sebastian Huber * tod.h, tod.c: Update for new RTC driver interface. --- c/src/lib/libbsp/shared/ChangeLog | 4 ++ c/src/lib/libbsp/shared/tod.c | 106 ++++++++++++++++++++++++++++++++++++-- c/src/lib/libbsp/shared/tod.h | 8 +-- 3 files changed, 110 insertions(+), 8 deletions(-) (limited to 'c/src/lib/libbsp/shared') diff --git a/c/src/lib/libbsp/shared/ChangeLog b/c/src/lib/libbsp/shared/ChangeLog index b81f7c747d..c96339c3e5 100644 --- a/c/src/lib/libbsp/shared/ChangeLog +++ b/c/src/lib/libbsp/shared/ChangeLog @@ -1,3 +1,7 @@ +2009-05-27 Sebastian Huber + + * tod.h, tod.c: Update for new RTC driver interface. + 2009-05-18 Joel Sherrill * bsppost.c: Fix typo. diff --git a/c/src/lib/libbsp/shared/tod.c b/c/src/lib/libbsp/shared/tod.c index 619fbec24a..21534f91af 100644 --- a/c/src/lib/libbsp/shared/tod.c +++ b/c/src/lib/libbsp/shared/tod.c @@ -9,6 +9,9 @@ */ #include +#include +#include + #include /* @@ -34,8 +37,8 @@ rtems_device_driver rtc_initialize( void *arg ) { - rtems_device_minor_number minor; - rtems_status_code status; + rtems_device_minor_number minor; + rtems_status_code status; for (minor=0; minor < RTC_Count ; minor++) { /* @@ -65,7 +68,7 @@ rtems_device_driver rtc_initialize( * Register and initialize the primary RTC's */ - status = rtems_io_register_name( "/dev/rtc", major, RTC_Minor ); + status = rtems_io_register_name( RTC_DEVICE_NAME, major, RTC_Minor ); if (status != RTEMS_SUCCESSFUL) { rtems_fatal_error_occurred(status); } @@ -104,6 +107,101 @@ rtems_device_driver rtc_initialize( return RTEMS_SUCCESSFUL; } +rtems_device_driver rtc_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + int rv = 0; + rtems_libio_rw_args_t *rw = arg; + rtems_time_of_day *tod = (rtems_time_of_day *) rw->buffer; + + rw->offset = 0; + rw->bytes_moved = 0; + + if (!RTC_Present) { + return RTEMS_NOT_CONFIGURED; + } + + if (rw->count != sizeof( rtems_time_of_day)) { + return RTEMS_INVALID_SIZE; + } + + rv = RTC_Table [RTC_Minor].pDeviceFns->deviceGetTime( + RTC_Minor, + tod + ); + if (rv != 0) { + return RTEMS_IO_ERROR; + } + + rw->bytes_moved = rw->count; + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver rtc_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + int rv = 0; + rtems_libio_rw_args_t *rw = arg; + const rtems_time_of_day *tod = (const rtems_time_of_day *) rw->buffer; + + rw->offset = 0; + rw->bytes_moved = 0; + + if (!RTC_Present) { + return RTEMS_NOT_CONFIGURED; + } + + if (rw->count != sizeof( rtems_time_of_day)) { + return RTEMS_INVALID_SIZE; + } + + rv = RTC_Table [RTC_Minor].pDeviceFns->deviceSetTime( + RTC_Minor, + tod + ); + if (rv != 0) { + return RTEMS_IO_ERROR; + } + + rw->bytes_moved = rw->count; + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver rtc_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver rtc_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver rtc_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + return RTEMS_NOT_IMPLEMENTED; +} + /*PAGE * * This routine copies the time from the real time clock to RTEMS @@ -186,7 +284,7 @@ void getRealTime( * Return values: NONE */ int setRealTime( - rtems_time_of_day *tod + const rtems_time_of_day *tod ) { if (!RTC_Present) diff --git a/c/src/lib/libbsp/shared/tod.h b/c/src/lib/libbsp/shared/tod.h index 3f5f9069da..25a5a39283 100644 --- a/c/src/lib/libbsp/shared/tod.h +++ b/c/src/lib/libbsp/shared/tod.h @@ -25,7 +25,7 @@ extern "C" { */ int setRealTime( - rtems_time_of_day *tod + const rtems_time_of_day *tod ); /* @@ -40,20 +40,20 @@ void getRealTime( * Read real time from RTC and set it to RTEMS' clock manager */ -void setRealTimeToRTEMS(); +void setRealTimeToRTEMS(void); /* * Read time from RTEMS' clock manager and set it to RTC */ -void setRealTimeFromRTEMS(); +void setRealTimeFromRTEMS(void); /* * Return the difference between RTC and RTEMS' clock manager time in minutes. * If the difference is greater than 1 day, this returns 9999. */ -int checkRealTime(); +int checkRealTime(void); #ifdef __cplusplus } -- cgit v1.2.3