diff --git a/src/user/6s/main.cpp b/src/user/6s/main.cpp index ac1dbd6..9d26d54 100644 --- a/src/user/6s/main.cpp +++ b/src/user/6s/main.cpp @@ -37,17 +37,13 @@ gather_command(j6::channel &cout, j6::ring_buffer &buf) while (i < n) { start[i] = input[i]; outp[i] = input[i]; - j6::syslog(j6::logs::app, j6::log_level::spam, "Read: %x", start[i]); if (start[i++] == '\r') { newline = true; break; } } - size_t written = i; - if (newline) - outp[written++] = '\n'; - cout.commit(written); + cout.commit(i); cout.consume(i); if (newline) diff --git a/src/user/drv.uart/main.cpp b/src/user/drv.uart/main.cpp index 0f8289b..7546b6c 100644 --- a/src/user/drv.uart/main.cpp +++ b/src/user/drv.uart/main.cpp @@ -96,7 +96,8 @@ main(int argc, const char **argv) uint64_t signals = 0; result = j6_event_wait(event, &signals, 500); if (result == j6_err_timed_out) { - com1.handle_interrupt(); + com1.do_read(); + com1.do_write(); //com2.handle_interrupt(); continue; } diff --git a/src/user/drv.uart/serial.cpp b/src/user/drv.uart/serial.cpp index 1eda833..fa4c3b9 100644 --- a/src/user/drv.uart/serial.cpp +++ b/src/user/drv.uart/serial.cpp @@ -91,27 +91,29 @@ serial_port::do_write() { util::scoped_lock lock {m_lock}; - uint8_t const *data = nullptr; - size_t n = m_chan.get_block(&data, false); + while (true) { + uint8_t const *data = nullptr; + size_t n = m_chan.get_block(&data, false); - m_writing = (n > 0); - if (!m_writing) { - m_chan.consume(0); - return; - } - - if (n > fifo_size) - n = fifo_size; - - for (size_t i = 0; i < n; ++i) { - if (!write_ready(m_port)) { - n = i; - break; + m_writing = (n > 0); + if (!m_writing) { + m_chan.consume(0); + return; } - outb(m_port, data[i]); - } - m_chan.consume(n); + if (n > fifo_size) + n = fifo_size; + + for (size_t i = 0; i < n; ++i) { + if (!write_ready(m_port)) { + n = i; + break; + } + outb(m_port, data[i]); + } + + m_chan.consume(n); + } } void diff --git a/src/user/drv.uart/serial.h b/src/user/drv.uart/serial.h index 940e7fb..ff9c37a 100644 --- a/src/user/drv.uart/serial.h +++ b/src/user/drv.uart/serial.h @@ -23,6 +23,7 @@ public: void handle_interrupt(); void do_write(); + void do_read(); private: bool m_writing; @@ -30,6 +31,5 @@ private: j6::channel &m_chan; util::spinlock m_lock; - void do_read(); void handle_error(uint16_t reg, uint8_t value); }; diff --git a/src/user/ld.so/image.cpp b/src/user/ld.so/image.cpp index ca29a9b..c60e60e 100644 --- a/src/user/ld.so/image.cpp +++ b/src/user/ld.so/image.cpp @@ -317,7 +317,7 @@ image::parse_rela_table(const util::counted &table, image_list &ctx) break; default: - j6::syslog(j6::logs::app, j6::log_level::verbose, "Unknown rela relocation type %d in %s", rel.type, name); + j6::syslog(j6::logs::app, j6::log_level::error, "Unknown rela relocation type %d in %s", rel.type, name); exit(126); break; }