diff --git a/c/src/lib/libcpu/bfin/ChangeLog b/c/src/lib/libcpu/bfin/ChangeLog index 010ee44dc7..a18ab0d8a8 100644 --- a/c/src/lib/libcpu/bfin/ChangeLog +++ b/c/src/lib/libcpu/bfin/ChangeLog @@ -1,3 +1,7 @@ +2009-05-27 Sebastian Huber + + * clock/rtc.c, clock/tod.h: Update for new RTC driver interface. + 2009-05-25 Allan Hessenflow * mmu/mmu.c: enable mmu after initializing it. diff --git a/c/src/lib/libcpu/bfin/clock/rtc.c b/c/src/lib/libcpu/bfin/clock/rtc.c index dace52eae2..19b42d25c9 100644 --- a/c/src/lib/libcpu/bfin/clock/rtc.c +++ b/c/src/lib/libcpu/bfin/clock/rtc.c @@ -14,9 +14,8 @@ #include #include "tod.h" +#include #include -#include -#include #include #include @@ -35,29 +34,6 @@ void Init_RTC(void) *((uint16_t*)RTC_PREN) = RTC_PREN_PREN; /* Enable Prescaler */ } -rtems_device_driver rtc_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor_arg, - void *arg -) -{ - rtems_status_code status; - - /* - * Register and initialize the primary RTC's - */ - - status = rtems_io_register_name( "/dev/rtc", major, 0 ); - if (status != RTEMS_SUCCESSFUL) { - rtems_fatal_error_occurred(status); - } - - Init_RTC(); - - setRealTimeToRTEMS(); - return RTEMS_SUCCESSFUL; -} - /* * Read time from RTEMS' clock manager and set it to RTC */ @@ -89,7 +65,7 @@ void setRealTimeToRTEMS (void) * Set the RTC time */ int setRealTime( - rtems_time_of_day *tod + const rtems_time_of_day *tod ) { uint32_t days; @@ -182,3 +158,103 @@ int Leap_years_until_now (int year) ((TOD_BASE_YEAR - 1)/4 - (TOD_BASE_YEAR - 1)/100 + (TOD_BASE_YEAR - 1)/400)); } + +rtems_device_driver rtc_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor_arg, + void *arg +) +{ + rtems_status_code status; + + /* + * Register and initialize the primary RTC's + */ + + status = rtems_io_register_name( RTC_DEVICE_NAME, major, 0 ); + if (status != RTEMS_SUCCESSFUL) { + rtems_fatal_error_occurred(status); + } + + Init_RTC(); + + setRealTimeToRTEMS(); + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver rtc_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + 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 (rw->count != sizeof( rtems_time_of_day)) { + return RTEMS_INVALID_SIZE; + } + + getRealTime( tod); + + 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 (rw->count != sizeof( rtems_time_of_day)) { + return RTEMS_INVALID_SIZE; + } + + rv = setRealTime( 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; +} diff --git a/c/src/lib/libcpu/bfin/clock/tod.h b/c/src/lib/libcpu/bfin/clock/tod.h index 18f257bebe..84e0d15383 100644 --- a/c/src/lib/libcpu/bfin/clock/tod.h +++ b/c/src/lib/libcpu/bfin/clock/tod.h @@ -26,7 +26,7 @@ extern "C" { */ int setRealTime( - rtems_time_of_day *tod + const rtems_time_of_day *tod ); /*