+}
+
+void
+term_notify_data_avaliable(struct termport_potens* cap)
+{
+ struct term* term;
+ struct device* term_chrdev;
+ struct linebuffer* line_in;
+ lbuf_ref_t current_ref;
+ char* buf;
+ int sz;
+
+ term = cap->term;
+ term_chrdev = term->chdev;
+ line_in = &term->line_in;
+ current_ref = ref_current(line_in);
+
+ // make room for current buf
+ line_flip(line_in);
+ buf = deref(current_ref)->buffer;
+
+ sz = term_chrdev->ops.read_async(term_chrdev, buf, 0, line_in->sz_hlf);
+ rbuffer_setcontent(deref(current_ref), sz);
+
+ if ((term->lflags & _ICANON)) {
+ lcntl_transform_inseq(term);
+ // write all processed to next, and flip back to current
+ }
+
+ pwake_all(&term->line_in_event);