]> 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 2885294ed079b56ef0a17c938c93659f1b9b19b5..b868a4474a0a7dcc6070fb7d6f9751716d6d3d38 100644 (file)
@@ -1,33 +1,55 @@
-Parameter Info Block (PIB), all offsets in pointer-length words
-   Name          Offset  Meaning
-   buffer_size   0       Size of the destination buffer
+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
-      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
-      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
-      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.
+   
+   copy_size       32-bit  Size of all Copy segments.
+   
+      This is like buffer_size, but for Copy segments.
 
-   objlist_ptr   1       Pointer to the object list
-   objlist_len   2       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
       into the destination ID-space, allocating new IDs when
       necessary.  The IDs themselves are 32 bits each, unsigned,
-      regardless of the pointer size.
+      regardless of the pointer size.  The first object in the list
+      is the object to receive the message.
+
+               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
 
-   num_segments  3       Number of data segments
-   segment.ptr   4+n*4   Pointer to data segment
-   segment.len   5+n*4   Length of data segment in bytes
-   segment.flags 6+n*4   Attributes of data segment
-   reserved      7+n*4   Reserved for future use, and for
-                         power-of-two indexing
+   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
@@ -41,14 +63,11 @@ Parameter Info Block (PIB), all offsets in pointer-length words
 Segment Flags (see doc/orb/memory-management for more details):
    In            0x01    Data is copied/mapped from caller to callee.
    Out           0x02    Data is copied/mapped from callee to caller.
-   Shared        0x04    A permanent shared mapping is created.
-   Push          0x08    The region is unmapped from the source and
-                         transferred to the destination.
-   Inline        0x10    The callee cannot change the length of an
-                         Out segment.  Ignored for In segments.
-   Immutable     0x20    The segment is to be mapped read-only in
-                         the destination.  Ignored unless Shared is
-                         set.
-   Copy        0x8000    The segment is permanently copied into the
+                         The data is unmapped from the callee unless
+                         Copy is set.
+   Inline        0x04    The callee cannot change the length of an
+                         Out segment, and the caller must provide the
+                         buffer.  Ignored for In segments.
+   Copy          0x08    The segment is permanently copied into the
                          destination address space, with read/write
                          access.