Implemented SetCommMask, SetCommTimeouts, GetCommMask, GetCommTimeouts.

diff --git a/server/request.h b/server/request.h
index d66c230..975330c 100644
--- a/server/request.h
+++ b/server/request.h
@@ -202,6 +202,8 @@
 DECL_HANDLER(wake_queue);
 DECL_HANDLER(wait_input_idle);
 DECL_HANDLER(create_serial);
+DECL_HANDLER(get_serial_info);
+DECL_HANDLER(set_serial_info);
 
 #ifdef WANT_REQUEST_HANDLERS
 
@@ -316,6 +318,8 @@
     (req_handler)req_wake_queue,
     (req_handler)req_wait_input_idle,
     (req_handler)req_create_serial,
+    (req_handler)req_get_serial_info,
+    (req_handler)req_set_serial_info,
 };
 #endif  /* WANT_REQUEST_HANDLERS */
 
diff --git a/server/serial.c b/server/serial.c
index e5b6066..64a9956 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -196,3 +196,58 @@
     }
 }
 
+DECL_HANDLER(get_serial_info)
+{
+    struct serial *serial;
+
+    if ((serial = get_serial_obj( current->process, req->handle, 0 )))
+    {
+        /* timeouts */
+        req->readinterval = serial->readinterval;
+        req->readconst    = serial->readconst;
+        req->readmult     = serial->readmult;
+        req->writeconst   = serial->writeconst;
+        req->writemult    = serial->writemult;
+
+        /* event mask */
+        req->eventmask    = serial->eventmask;
+
+        /* comm port error status */
+        req->commerror    = serial->commerror;
+
+        release_object( serial );
+    }
+}
+
+DECL_HANDLER(set_serial_info)
+{
+    struct serial *serial;
+
+    if ((serial = get_serial_obj( current->process, req->handle, 0 )))
+    {
+        /* timeouts */
+        if(req->flags & SERIALINFO_SET_TIMEOUTS)
+        {
+            serial->readinterval = req->readinterval;
+            serial->readconst    = req->readconst;
+            serial->readmult     = req->readmult;
+            serial->writeconst   = req->writeconst;
+            serial->writemult    = req->writemult;
+        }
+
+        /* event mask */
+        if(req->flags & SERIALINFO_SET_MASK)
+        {
+            serial->eventmask = req->eventmask;
+        }
+
+        /* comm port error status */
+        if(req->flags & SERIALINFO_SET_ERROR)
+        {
+            serial->commerror = req->commerror;
+        }
+
+        release_object( serial );
+    }
+}
+
diff --git a/server/trace.c b/server/trace.c
index 07c1a6d..786c8b4 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -1431,6 +1431,35 @@
     fprintf( stderr, " handle=%d", req->handle );
 }
 
+static void dump_get_serial_info_request( const struct get_serial_info_request *req )
+{
+    fprintf( stderr, " handle=%d", req->handle );
+}
+
+static void dump_get_serial_info_reply( const struct get_serial_info_request *req )
+{
+    fprintf( stderr, " readinterval=%08x,", req->readinterval );
+    fprintf( stderr, " readconst=%08x,", req->readconst );
+    fprintf( stderr, " readmult=%08x,", req->readmult );
+    fprintf( stderr, " writeconst=%08x,", req->writeconst );
+    fprintf( stderr, " writemult=%08x,", req->writemult );
+    fprintf( stderr, " eventmask=%08x,", req->eventmask );
+    fprintf( stderr, " commerror=%08x", req->commerror );
+}
+
+static void dump_set_serial_info_request( const struct set_serial_info_request *req )
+{
+    fprintf( stderr, " handle=%d,", req->handle );
+    fprintf( stderr, " flags=%d,", req->flags );
+    fprintf( stderr, " readinterval=%08x,", req->readinterval );
+    fprintf( stderr, " readconst=%08x,", req->readconst );
+    fprintf( stderr, " readmult=%08x,", req->readmult );
+    fprintf( stderr, " writeconst=%08x,", req->writeconst );
+    fprintf( stderr, " writemult=%08x,", req->writemult );
+    fprintf( stderr, " eventmask=%08x,", req->eventmask );
+    fprintf( stderr, " commerror=%08x", req->commerror );
+}
+
 static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
     (dump_func)dump_new_process_request,
     (dump_func)dump_wait_process_request,
@@ -1540,6 +1569,8 @@
     (dump_func)dump_wake_queue_request,
     (dump_func)dump_wait_input_idle_request,
     (dump_func)dump_create_serial_request,
+    (dump_func)dump_get_serial_info_request,
+    (dump_func)dump_set_serial_info_request,
 };
 
 static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
@@ -1651,6 +1682,8 @@
     (dump_func)0,
     (dump_func)dump_wait_input_idle_reply,
     (dump_func)dump_create_serial_reply,
+    (dump_func)dump_get_serial_info_reply,
+    (dump_func)0,
 };
 
 static const char * const req_names[REQ_NB_REQUESTS] = {
@@ -1762,6 +1795,8 @@
     "wake_queue",
     "wait_input_idle",
     "create_serial",
+    "get_serial_info",
+    "set_serial_info",
 };
 
 /* ### make_requests end ### */