]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - doc/orb/parameter-info-block
xfer to laptop
[polintos/scott/priv.git] / doc / orb / parameter-info-block
index 8f32e1cb40409afdc4004df163a5850bd98e976e..b868a4474a0a7dcc6070fb7d6f9751716d6d3d38 100644 (file)
@@ -1,29 +1,32 @@
-Parameter Info Block (PIB), all offsets in pointer-length words
-   Name            Offset  Meaning
-   buffer_size     0       Size of the destination buffer, excluding
+Parameter Info Block (PIB)
+   Name            Size    Meaning
+   buffer_size     32-bit  Size of the destination buffer, excluding
                            Copy segments.
    
       The total number of bytes in all of the segments that require a
                            Copy segments.
    
       The total number of bytes in all of the segments that require a
-      buffer to be created in the destination address space.  This is
+      buffer to be created in the destination address space, with each
+      buffer individually rounded up to an 8-byte alignment.  This is
       specified so that the kernel can allocate one large buffer for all
       specified so that the kernel can allocate one large buffer for all
-      segments before traversing the segment list.  When returning from a
-      method, the buffer size only includes buffers allocated by the
-      caller; "inout" segments where the caller specified a non-NULL ptr,
-      and the callee did not increase the length, are not included
+      segments before traversing the segment list.  When returning from
+      method, the buffer size only includes buffers allocated by the
+      caller; "inout" segments where the caller specified a non-NULL
+      ptr, and the callee did not increase the length, are not included
       (because the kernel does not need to allocate a caller-side buffer
       (because the kernel does not need to allocate a caller-side buffer
-      for them).  The kernel may throw an exception if the actual
-      size is greater than specified in this field.
+      for them).  The kernel may throw an exception if the actual size
+      is greater than specified in this field.
       
       This only covers the "normal" segments which are mapped only
       for the duration of the call.  Copy segments are handled
       separately.
    
       
       This only covers the "normal" segments which are mapped only
       for the duration of the call.  Copy segments are handled
       separately.
    
-   copy_size       1       Size of all Copy segments.
+   copy_size       32-bit  Size of all Copy segments.
    
    
-      This is like buffer_size, but for Copy segments.  The pages
+      This is like buffer_size, but for Copy segments.
 
 
-   objlist_ptr     2       Pointer to the object list
-   objlist_len     3       Length of the object list, in IDs
+   objlist_ptr     pointer Pointer to the object list
+       newobj_ptr      pointer Pointer to the new object list.
+   objlist_len     32-bit  Length of the object list, in IDs
+       newobj_len      32-bit  Length of the new object list.
 
       The object list is a special segment that contains object IDs
       rather than arbitrary data.  Each object ID will be translated
 
       The object list is a special segment that contains object IDs
       rather than arbitrary data.  Each object ID will be translated
@@ -32,12 +35,21 @@ Parameter Info Block (PIB), all offsets in pointer-length words
       regardless of the pointer size.  The first object in the list
       is the object to receive the message.
 
       regardless of the pointer size.  The first object in the list
       is the object to receive the message.
 
-   num_segments    4       Number of data segments
-   segment.ptr     5+n*4   Pointer to data segment
-   segment.len     6+n*4   Length of data segment in bytes
-   segment.flags   7+n*4   Attributes of data segment
-   reserved        8+n*4   Reserved for future use, and for
-                           power-of-two indexing
+               Objects which live in this address space have the high bit
+               clear; remote objects have the high bit set.  When sending
+               an object reference that has not been exposed to the kernel
+               before, its interface hash should exist in the newobj list.
+
+               
+
+   num_segments    32-bit  Number of data segments
+
+   segment.ptr     pointer Pointer to data segment
+   segment.len     32-bit  Length of data segment in bytes
+   segment.flags   32-bit  Attributes of data segment
+   reserved                Reserved for future use, and for
+                           power-of-two indexing -- pad to
+                           32 bytes.
    
       Each segment describes data being transmitted to and/or from the
       callee.  For out segments, the caller may designate a buffer to hold
    
       Each segment describes data being transmitted to and/or from the
       callee.  For out segments, the caller may designate a buffer to hold