3 #include <lunaix/fs/twifs.h>
4 #include <lunaix/fs/twimap.h>
5 #include <lunaix/mm/valloc.h>
6 #include <lunaix/status.h>
8 #include <usr/lunaix/ioctl_defs.h>
10 const struct hwrtc* primary_rtc;
11 static int rtc_count = 0;
18 // ldga_invoke_fn0(rtcdev);
22 hwrtc_walltime(datetime_t* dt)
24 primary_rtc->get_walltime(primary_rtc, dt);
28 hwrtc_ioctl(struct device* dev, u32_t req, va_list args)
30 struct hwrtc* rtc = (struct hwrtc*)dev->underlay;
39 datetime_t* dt = va_arg(args, datetime_t*);
40 rtc->set_walltime(rtc, dt);
43 ticks_t* freq = va_arg(args, ticks_t*);
49 return rtc->chfreq(rtc, *freq);
52 *freq = rtc->base_freq;
63 hwrtc_read(struct device* dev, void* buf, size_t offset, size_t len)
65 struct hwrtc* rtc = (struct hwrtc*)dev->underlay;
66 *((ticks_t*)buf) = rtc->get_counts(rtc);
68 return sizeof(ticks_t);
72 hwrtc_alloc_new(struct device_def* def, char* name)
74 struct hwrtc* rtc_instance = valloc(sizeof(struct hwrtc));
80 llist_append(&rtcs, &rtc_instance->rtc_list);
83 primary_rtc = rtc_instance;
86 rtc_instance->name = name;
87 struct device* rtcdev =
88 device_addsys(NULL, &def->class, rtc_instance, "rtc%d", rtc_count);
90 rtcdev->ops.exec_cmd = hwrtc_ioctl;
91 rtcdev->ops.read = hwrtc_read;
93 rtc_instance->rtc_dev = rtcdev;
101 __hwrtc_readinfo(struct twimap* mapping)
103 struct hwrtc* rtc = twimap_data(mapping, struct hwrtc*);
104 twimap_printf(mapping, "device: %s\n", rtc->name);
105 twimap_printf(mapping, "frequency: %dHz\n", rtc->base_freq);
106 twimap_printf(mapping, "ticks count: %d\n", rtc->get_counts(rtc));
108 mapping, "ticking: %s\n", (rtc->state & RTC_STATE_MASKED) ? "no" : "yes");
111 rtc->get_walltime(rtc, &dt);
114 mapping, "recorded date: %d/%d/%d\n", dt.year, dt.month, dt.day);
116 mapping, "recorded time: %d:%d:%d\n", dt.hour, dt.minute, dt.second);
117 twimap_printf(mapping, "recorded weekday: %d\n", dt.weekday);
121 hwrtc_twifs_export(struct hwrtc* rtc)
123 const char* name = rtc->rtc_dev->name.value;
124 struct twimap* rtc_mapping = twifs_mapping(NULL, rtc, name);
125 rtc_mapping->read = __hwrtc_readinfo;
129 hwrtc_twifs_export_all()
131 struct hwrtc *pos, *next;
132 llist_for_each(pos, next, &rtcs, rtc_list)
134 hwrtc_twifs_export(pos);
137 EXPORT_TWIFS_PLUGIN(rtc_fsexport, hwrtc_twifs_export_all);