Heads Up: CAM ABI changes
Matthew Dillon
dillon at apollo.backplane.com
Sat Sep 18 14:03:25 PDT 2004
:*grin*
:
:You're not about to go preach on an UNCOL as well are you? ;)
:
:> That is, we need a generalized big-ticket solution and shouldn't worry
:> about non-core ABI breakages a this stage.
:
:Does this involve versioned structures and such as well?
:
:--
:Jeroen Ruigrok van der Werven <asmodai(at)wxs.nl> / asmodai / kita no mono
I am thinking of having the kernel return a capability array that
identifies various system structures:
int count = getsysstructure("proc", cap_version, buf, sizeof(buf));
Returns the number of capability elements for the structure
or -1 if the buffer was not big enough (ENOSPC) or if the
system structure could not be found (ENOENT).
If buf is passed as NULL the number of capability elements
required is returned or -1 if the structure could not be
found.
This could be used by userland programs to identify the structure and
copy the data to the userland structure equivalent. And we could also
use this for our emulation layer to do the same thing (making it
completely transparent).
This allows us to be backwards compatible with 'old style' code which
doesn't check.
This also allows us to supply libc routines to translate structures
given two capability arrays and two data buffers, which means we would
also be able to supply libc routines that do all the necessary work for
us.
The capability structure would look something like:
struct sys_capability {
int32_t cap_type; /* type of entry */
int32_t cap_size; /* size of target element or value */
int32_t cap_offset; /* offset of target element or -1 */
int32_t cap_reserved;
};
Capability types:
CAP_TYPE_NOP 0
CAP_TYPE_CAP_STRUCTURE_SIZE 1
CAP_TYPE_CAP_VERSION 2
CAP_TYPE_INTEGER (CAP_TYPEF_DATA|0x01)
CAP_TYPE_UINTEGER (CAP_TYPEF_DATA|0x02)
CAP_TYPE_STRING_BUF ...
CAP_TYPE_STRING_PTR ...
...
CAP_TYPEF_DATA 0x100
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
More information about the Kernel
mailing list