Unit testing framework and devicetree framework refactoring (#50)
[lunaix-os.git] / lunaix-os / includes / hal / hwrtc.h
index fcd4d48a5f2ddccc6599fc51463b1e4304e5f898..37a1877a1738a86fe55c56543d96fca2b7a32068 100644 (file)
@@ -8,36 +8,38 @@
 
 #define RTC_STATE_MASKED 0x1
 
 
 #define RTC_STATE_MASKED 0x1
 
-#define EXPORT_RTC_DEVICE(id, init_fn)                                         \
-    export_ldga_el(rtcdev, id, ptr_t, init_fn)
+struct hwrtc_potens;
+struct hwrtc_potens_ops
+{
+    void (*get_walltime)(struct hwrtc_potens*, datetime_t*);
+    void (*set_walltime)(struct hwrtc_potens*, datetime_t*);
+    void (*set_proactive)(struct hwrtc_potens*, bool);
+    int  (*chfreq)(struct hwrtc_potens*, int);
+
+    int (*calibrate)(struct hwrtc_potens*);
+};
 
 
-struct hwrtc
+struct hwrtc_potens
 {
 {
-    struct llist_header rtc_list;
-    struct device* rtc_dev;
+    POTENS_META;
+
+    struct llist_header rtc_potentes;
+    struct device* rtc_proxy;
 
 
-    char* name;
-    void* data;
     ticks_t base_freq;
     ticks_t base_freq;
+    volatile ticks_t live;
     int state;
 
     int state;
 
-    void (*get_walltime)(struct hwrtc*, datetime_t*);
-    void (*set_walltime)(struct hwrtc*, datetime_t*);
-    void (*set_mask)(struct hwrtc*);
-    void (*cls_mask)(struct hwrtc*);
-    int (*get_counts)(struct hwrtc*);
-    int (*chfreq)(struct hwrtc*, int);
+    struct hwrtc_potens_ops* ops;
 };
 
 };
 
-extern const struct hwrtc* primary_rtc;
-
 void
 hwrtc_init();
 
 void
 hwrtc_init();
 
-struct hwrtc*
-hwrtc_alloc_new(char* driver_id);
-
 void
 hwrtc_walltime(datetime_t* dt);
 
 void
 hwrtc_walltime(datetime_t* dt);
 
+struct hwrtc_potens*
+hwrtc_attach_potens(struct device* raw_rtcdev, struct hwrtc_potens_ops* ops);
+
 #endif /* __LUNAIX_HWRTC_H */
 #endif /* __LUNAIX_HWRTC_H */