X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/0765e7c133eb393d8cd0292af444543c2edf8ccc..a8e9a00d034efa9e6b483c4a3decddf9f9686db2:/lunaix-os/includes/hal/term.h?ds=inline diff --git a/lunaix-os/includes/hal/term.h b/lunaix-os/includes/hal/term.h index 0f11e52..07acec9 100644 --- a/lunaix-os/includes/hal/term.h +++ b/lunaix-os/includes/hal/term.h @@ -3,8 +3,9 @@ #include #include -#include +#include +#include #include struct term; @@ -16,54 +17,42 @@ struct linebuffer 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)) -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_clkbase)(struct device*, unsigned int); 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_lcntl* lcntl; struct linebuffer line_out; struct linebuffer line_in; + char* scratch_pad; 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; @@ -71,26 +60,22 @@ struct term tcflag_t lflags; tcflag_t cflags; cc_t cc[_NCCS]; + + /* -- END POSIX.1-2008 compliant fields -- */ speed_t iospeed; + speed_t clkbase; + tcflag_t tflags; // temp flags }; 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_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) { @@ -120,4 +105,7 @@ lcntl_transform_inseq(struct term* tdev); int lcntl_transform_outseq(struct term* tdev); +void +term_notify_data_avaliable(struct termport_potens* cap); + #endif /* __LUNAIX_TERM_H */