Made server communication faster by using a shared memory block.
A few other optimizations in request processing in the server.
Moved automatically generated request definitions to server.h and
removed include/server/request.h.

diff --git a/server/device.c b/server/device.c
index 5822293..d167c67 100644
--- a/server/device.c
+++ b/server/device.c
@@ -21,6 +21,7 @@
 
 #include "handle.h"
 #include "thread.h"
+#include "request.h"
 
 struct device
 {
@@ -30,10 +31,10 @@
 
 static void device_dump( struct object *obj, int verbose );
 static int device_get_info( struct object *obj, struct get_file_info_reply *reply );
-static void device_destroy( struct object *obj );
 
 static const struct object_ops device_ops =
 {
+    sizeof(struct device),
     device_dump,
     no_add_queue,
     NULL,  /* should never get called */
@@ -43,17 +44,17 @@
     no_write_fd,
     no_flush,
     device_get_info,
-    device_destroy
+    no_destroy
 };
 
-static struct object *create_device( int id )
+static struct device *create_device( int id )
 {
     struct device *dev;
-
-    if (!(dev = mem_alloc(sizeof(*dev)))) return NULL;
-    init_object( &dev->obj, &device_ops, NULL );
-    dev->id = id;
-    return &dev->obj;
+    if ((dev = alloc_object( &device_ops )))
+    {
+        dev->id = id;
+    }
+    return dev;
 }
 
 static void device_dump( struct object *obj, int verbose )
@@ -73,24 +74,16 @@
     return 1;
 }
 
-static void device_destroy( struct object *obj )
-{
-    struct device *dev = (struct device *)obj;
-    assert( obj->ops == &device_ops );
-    free( dev );
-}
-
 /* create a device */
 DECL_HANDLER(create_device)
 {
-    struct object *obj;
-    struct create_device_reply reply = { -1 };
+    struct device *dev;
+    struct create_device_reply *reply = push_reply_data( current, sizeof(*reply) );
 
-    if ((obj = create_device( req->id )))
+    if ((dev = create_device( req->id )))
     {
-        reply.handle = alloc_handle( current->process, obj,
-                                     req->access, req->inherit );
-        release_object( obj );
+        reply->handle = alloc_handle( current->process, dev, req->access, req->inherit );
+        release_object( dev );
     }
-    send_reply( current, -1, 1, &reply, sizeof(reply) );
+    else reply->handle = -1;
 }