Hi ,

This patch contains tests for the linux RTC driver.The patch is taken
against feb intermediate release.I have also attached the patch.Please find
the test log at the end of this mail.Build/Run instructions are explained in
the README.


Signed-off-By: Silesh C V <[email protected]>
--
diff -purN ltp-intermediate-20100228.
orig/testcases/kernel/device-drivers/rtc/Makefile
ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/Makefile
---
ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/Makefile
1970-01-01 05:30:00.000000000 +0530
+++ ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/Makefile
   2010-02-24 15:21:33.000000000 +0530
@@ -0,0 +1,28 @@
+#
+#  Copyright (c) Larsen & Toubro Infotech Ltd., 2010
+#
+#  This program is free software;  you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+#  the GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program;  if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
 USA
+#
+#
+
+CFLAGS = -O2 -Wall
+SRC = test_rtc.c
+
+
+all: $(SRC)
+       $(CC) $(CFLAGS) $(SRC) -o rtc-test
+
+clean:
+       rm -f rtc-test
diff -purN
ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/README
ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/README
---
ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/README
1970-01-01 05:30:00.000000000 +0530
+++ ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/README
   2010-02-24 14:34:01.000000000 +0530
@@ -0,0 +1,29 @@
+test_rtc.c : Test the Real Time Clock driver
+
+Tests supported as of now
+--------------------------
+1. Read test : This reads the time/date from the RTC
+   ioctls tested :- RTC_RD_TIME.
+
+2. Alarm Test: Sets the alarm to 5 seconds in future and makes sure it
rings.
+   ioctls tested :- RTC_ALM_SET, RTC_ALM_READ,  RTC_AIE_ON, RTC_AIE_OFF.
+
+3. Update interrupts test : Sets Update interrupts enable on, waits for
five
+   interrupts and then turns it off.
+   ioctls tested :- RTC_UIE_ON, RTC_UIE_OFF.
+
+
+How to Build
+------------
+
+Enter rtc directory and issue a 'make' .
+
+How to Run
+----------
+
+       The tests assume the rtc device node to be "/dev/rtc". If you have a
+different node run the test with the name of the node as a parameter.
+
+Eg. If your node is /dev/rtc0, then run the test as
+
+       $ ./rtc-test /dev/rtc0
diff -purN
ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/test_rtc.c
ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/test_rtc.c
---
ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/test_rtc.c
      1970-01-01 05:30:00.000000000 +0530
+++ ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/test_rtc.c
   2010-02-24 15:17:59.000000000 +0530
@@ -0,0 +1,175 @@
+/*   test_rtc.c
+ *
+ *   Copyright (c) Larsen & Toubro Infotech Ltd., 2010
+ *
+ *   Contact : Silesh C V <[email protected]>
+ *
+ *   This program is free software;  you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+ *   the GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program;  if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+ *
+ */
+
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <linux/rtc.h>
+#include <errno.h>
+
+int rtc_fd = -1;
+
+void read_alarm_test(void)
+{
+       struct rtc_time rtc_tm;
+       int ret;
+       unsigned long data;
+
+       printf("\nRTC READ TEST:\n");
+
+        /*Read RTC Time*/
+        ret = ioctl(rtc_fd, RTC_RD_TIME, &rtc_tm);
+        if (ret == -1) {
+                perror("RTC_RD_TIME ioctl");
+                printf("RTC READ TEST Failed\n");
+                return;
+        }
+
+        printf("RTC READ TEST Passed");
+        printf("\nCurrent RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n",
+                rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,
+                rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
+
+        printf("\nRTC ALARM TEST :\n");
+
+        /*set Alarm to 5 Seconds*/
+        rtc_tm.tm_sec += 5;
+        if (rtc_tm.tm_sec >= 60) {
+                rtc_tm.tm_sec %= 60;
+                rtc_tm.tm_min++;
+        }
+
+        if (rtc_tm.tm_min == 60) {
+                rtc_tm.tm_min = 0;
+                rtc_tm.tm_hour++;
+        }
+
+        if (rtc_tm.tm_hour == 24)
+                rtc_tm.tm_hour = 0;
+
+       ret = ioctl(rtc_fd, RTC_ALM_SET, &rtc_tm);
+        if (ret == -1) {
+                perror("RTC_ALM_SET ioctl");
+                printf("RTC ALARM TEST Failed\n");
+                return;
+        }
+
+        /*Read current alarm time*/
+        ret = ioctl(rtc_fd, RTC_ALM_READ, &rtc_tm);
+        if (ret == -1) {
+                perror("RTC_ALM_READ ioctl");
+                printf("RTC ALARM TEST Failed\n");
+                return;
+        }
+
+        printf("Alarm time set to %02d:%02d:%02d.\n",
+                rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
+        /* Enable alarm interrupts */
+        ret = ioctl(rtc_fd, RTC_AIE_ON, 0);
+        if (ret == -1) {
+                perror("RTC_AIE_ON ioctl");
+                printf("RTC ALARM TEST Failed\n");
+                return;
+        }
+
+        printf("Waiting 5 seconds for the alarm...\n");
+        ret = read(rtc_fd, &data, sizeof(unsigned long));
+        if (ret == -1) {
+                perror("read");
+                printf("RTC ALARM TEST Failed\n");
+                return;
+        }
+
+       printf("Alarm rang.\n");
+        /* Disable alarm interrupts */
+        ret = ioctl(rtc_fd, RTC_AIE_OFF, 0);
+        if (ret == -1) {
+                perror("RTC_AIE_OFF ioctl");
+                printf("RTC ALARM TEST Failed\n");
+                return;
+        }
+
+        printf("RTC ALARM TEST Passed\n");
+}
+
+void update_interrupts_test(void)
+{
+       int ret, i;
+       unsigned long data;
+
+       printf("\nRTC UPDATE INTERRUPTS TEST :\n");
+        /*Turn on update interrupts*/
+        ret = ioctl(rtc_fd, RTC_UIE_ON, 0);
+        if (ret == -1) {
+                perror("RTC_UIE_ON ioctl");
+                printf("RTC UPDATE INTERRUPTS TEST Failed\n");
+               return;
+        }
+
+        printf("Waiting for  5 update interrupts...\n");
+        for (i = 1; i < 6; i++) {
+                ret = read(rtc_fd, &data, sizeof(unsigned long));
+                if (ret == -1) {
+                        perror("read");
+                        printf("RTC UPDATE INTERRUPTS TEST Failed\n");
+                        return;
+                }
+                printf("Update interrupt %d\n", i);
+        }
+
+         /* Turn off update interrupts */
+        ret = ioctl(rtc_fd, RTC_UIE_OFF, 0);
+        if (ret == -1) {
+                perror("RTC_UIE_OFF ioctl");
+                printf("RTC UPDATE INTERRUPTS TEST Failed\n");
+                return;
+        }
+        printf("RTC UPDATE INTERRUPTS TEST Passed\n");
+
+}
+
+int main(int argc, char **argv)
+{
+       char *rtc_dev = "/dev/rtc";
+
+       if (argc == 2)
+               rtc_dev = argv[1];
+
+       rtc_fd = open(rtc_dev, O_RDONLY);
+       if (rtc_fd < 0) {
+               perror(rtc_dev);
+               exit(errno);
+       }
+
+       /*Read and alarm tests*/
+       read_alarm_test();
+
+       /*Update interrupts test*/
+       update_interrupts_test();
+
+       close(rtc_fd);
+
+       printf("\nRTC Tests Done!\n");
+       return 0;
+}
--

test log
------------------------------

RTC READ TEST:
RTC READ TEST Passed
Current RTC date/time is 24-2-2010, 17:03:05.

RTC ALARM TEST :
Alarm time set to 17:03:10.
Waiting 5 seconds for the alarm...
Alarm rang.
RTC ALARM TEST Passed

RTC UPDATE INTERRUPTS TEST :
Waiting for  5 update interrupts...
Update interrupt 1
Update interrupt 2
Update interrupt 3
Update interrupt 4
Update interrupt 5
RTC UPDATE INTERRUPTS TEST Passed

RTC Tests Done!
---------------------------------------------------------


Thanks .
Silesh

Attachment: ltp_rtc.patch
Description: Binary data

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to