rewrite the device subsystem interfaces (#48)
[lunaix-os.git] / lunaix-os / includes / hal / term.h
index 0f11e525bac5ce73e15684fd55e9b4e06b609de9..be7abd0fdcda89163fb59139079e4b0299d2231f 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <lunaix/device.h>
 #include <lunaix/ds/rbuffer.h>
 
 #include <lunaix/device.h>
 #include <lunaix/ds/rbuffer.h>
+#include <lunaix/ds/waitq.h>
 #include <lunaix/signal_defs.h>
 
 #include <usr/lunaix/term.h>
 #include <lunaix/signal_defs.h>
 
 #include <usr/lunaix/term.h>
@@ -16,54 +17,42 @@ struct linebuffer
     short sflags;
     short sz_hlf;
 };
     short sflags;
     short sz_hlf;
 };
-#define LSTATE_EOL (1)
-#define LSTATE_EOF (1 << 1)
-#define LSTATE_SIGRAISE (1 << 2)
+#define LEVT_EOL (1)
+#define LEVT_EOF (1 << 1)
+#define LEVT_SIGRAISE (1 << 2)
 
 typedef struct rbuffer** lbuf_ref_t;
 #define ref_current(lbuf) (&(lbuf)->current)
 #define ref_next(lbuf) (&(lbuf)->next)
 #define deref(bref) (*(bref))
 
 
 typedef struct rbuffer** lbuf_ref_t;
 #define ref_current(lbuf) (&(lbuf)->current)
 #define ref_next(lbuf) (&(lbuf)->next)
 #define deref(bref) (*(bref))
 
-struct term_lcntl
-{
-    struct term* term;
-    int (*process_and_put)(struct term*, struct linebuffer*, char);
-};
+struct term;
 
 
-/**
- * @brief Communication port capability that a device is supported natively, 
- *          or able to emulate low level serial transmission behaviour specify 
- *          by POSIX1-2008, section 11.
- * 
- */
-#define TERMPORT_CAP 0x4d524554U
-
-/**
- * @brief A termios capability that a device provide interfaces which is 
- *          compliant to POSIX1-2008
- * 
- */
-#define TERMIOS_CAP 0x534f4954U
-
-struct termport_capability
+struct termport_pot_ops
 {
 {
-    CAPABILITY_META;
-
     void (*set_speed)(struct device*, speed_t);
     void (*set_speed)(struct device*, speed_t);
+    void (*set_clkbase)(struct device*, unsigned int);
     void (*set_cntrl_mode)(struct device*, tcflag_t);
 };
 
     void (*set_cntrl_mode)(struct device*, tcflag_t);
 };
 
+struct termport_potens
+{
+    POTENS_META;
+    struct termport_pot_ops* ops;
+    struct term* term;
+};
+
 struct term
 {
     struct device* dev;
     struct device* chdev;
 struct term
 {
     struct device* dev;
     struct device* chdev;
-    struct term_lcntl* lcntl;
     struct linebuffer line_out;
     struct linebuffer line_in;
     struct linebuffer line_out;
     struct linebuffer line_in;
+    char* scratch_pad;
     pid_t fggrp;
 
     pid_t fggrp;
 
-    struct termport_capability* tp_cap;
+    struct termport_potens* tp_cap;
+    waitq_t line_in_event;
 
     /* -- POSIX.1-2008 compliant fields -- */
     tcflag_t iflags;
 
     /* -- POSIX.1-2008 compliant fields -- */
     tcflag_t iflags;
@@ -71,26 +60,22 @@ struct term
     tcflag_t lflags;
     tcflag_t cflags;
     cc_t cc[_NCCS];
     tcflag_t lflags;
     tcflag_t cflags;
     cc_t cc[_NCCS];
+
+    /* -- END POSIX.1-2008 compliant fields -- */
     speed_t iospeed;
     speed_t iospeed;
+    speed_t clkbase;
+    tcflag_t tflags;    // temp flags
 };
 
 extern struct device* sysconsole;
 
 };
 
 extern struct device* sysconsole;
 
-struct term*
-term_create(struct device* chardev, char* suffix);
+struct termport_potens*
+term_attach_potens(struct device* chardev, 
+                   struct termport_pot_ops* ops, char* suffix);
 
 int
 term_bind(struct term* tdev, struct device* chdev);
 
 
 int
 term_bind(struct term* tdev, struct device* chdev);
 
-int
-term_push_lcntl(struct term* tdev, struct term_lcntl* lcntl);
-
-int
-term_pop_lcntl(struct term* tdev);
-
-struct term_lcntl*
-term_get_lcntl(u32_t lcntl_index);
-
 static inline void
 line_flip(struct linebuffer* lbf)
 {
 static inline void
 line_flip(struct linebuffer* lbf)
 {
@@ -120,4 +105,7 @@ lcntl_transform_inseq(struct term* tdev);
 int
 lcntl_transform_outseq(struct term* tdev);
 
 int
 lcntl_transform_outseq(struct term* tdev);
 
+void
+term_notify_data_avaliable(struct termport_potens* cap);
+
 #endif /* __LUNAIX_TERM_H */
 #endif /* __LUNAIX_TERM_H */