123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- #ifndef __LINUX__FUSION_H__
- #define __LINUX__FUSION_H__
- #include <asm/ioctl.h>
- /*
- * Fusion Kernel Device API Version
- */
- #define FUSION_API_MAJOR 3 /* Increased if backward compatibility is dropped. */
- #define FUSION_API_MINOR 2 /* Increased if new features are added. */
- /*
- * The Fusion ID is a unique identifier for one process consisting of threads.
- */
- typedef unsigned long FusionID;
- #define FUSION_ID_MASTER 1 /* This is the fusion id of the master (first process). */
- /*
- * Entering a world
- */
- typedef struct {
- struct {
- int major; /* Must be set to FUSION_API_MAJOR before entering. */
- int minor; /* Must be set to FUSION_API_MINOR before entering. */
- } api;
- FusionID fusion_id; /* Returns the fusion id of the entering process. */
- } FusionEnter;
- /*
- * Forking in world
- */
- typedef struct {
- FusionID fusion_id; /* Returns the fusion id of the new (forked) fusionee. */
- } FusionFork;
- /*
- * Sending a message
- */
- typedef struct {
- FusionID fusion_id; /* recipient */
- int msg_id; /* optional message identifier */
- int msg_size; /* message size, must be greater than zero */
- const void *msg_data; /* message data, must not be NULL */
- } FusionSendMessage;
- /*
- * Receiving a message
- */
- typedef enum {
- FMT_SEND, /* msg_id is an optional custom id */
- FMT_CALL, /* msg_id is the call id */
- FMT_REACTOR, /* msg_id is the reactor id */
- FMT_SHMPOOL /* msg_id is the pool id */
- } FusionMessageType;
- typedef struct {
- FusionMessageType msg_type; /* type (origin) of message */
- int msg_id; /* message id (custom id or call/reactor/pool id) */
- int msg_size; /* size of the following message data */
- /* message data follows */
- } FusionReadMessage;
- /*
- * Dispatching a message via a reactor
- */
- typedef struct {
- int reactor_id;
- int self;
- int msg_size; /* message size, must be greater than zero */
- const void *msg_data; /* message data, must not be NULL */
- } FusionReactorDispatch;
- /*
- * Calling (synchronous RPC)
- */
- typedef struct {
- int call_id; /* new call id returned */
- void *handler; /* function pointer of handler to install */
- void *ctx; /* optional handler context */
- } FusionCallNew;
- typedef enum {
- FCEF_NONE = 0x00000000,
- FCEF_ONEWAY = 0x00000001,
- FCEF_ALL = 0x00000001
- } FusionCallExecFlags;
- typedef struct {
- int ret_val; /* return value of the call */
- int call_id; /* id of the requested call, each call has a fixed owner */
- int call_arg; /* optional int argument */
- void *call_ptr; /* optional pointer argument (shared memory) */
- FusionCallExecFlags flags; /* execution flags */
- } FusionCallExecute;
- typedef struct {
- int call_id; /* id of currently executing call */
- int val; /* value to return */
- } FusionCallReturn;
- typedef struct {
- void *handler; /* function pointer of handler to call */
- void *ctx; /* optional handler context */
- int caller; /* fusion id of the caller or zero if called from Fusion */
- int call_arg; /* optional call parameter */
- void *call_ptr; /* optional call parameter */
- } FusionCallMessage;
- /*
- * Watching a reference
- *
- * This information is needed to have a specific call being executed if the
- * reference count reaches zero. Currently one watch per reference is allowed.
- *
- * The call is made by Fusion and therefor has a caller id of zero.
- *
- */
- typedef struct {
- int id; /* id of the reference to watch */
- int call_id; /* id of the call to execute */
- int call_arg; /* optional call parameter, e.g. the id of a user
- space resource associated with that reference */
- } FusionRefWatch;
- /*
- * Inheriting local count from other reference
- */
- typedef struct {
- int id; /* own reference id */
- int from; /* id of the reference to inherit from */
- } FusionRefInherit;
- /*
- * Killing other fusionees (experimental)
- */
- typedef struct {
- FusionID fusion_id; /* fusionee to kill, zero means all but ourself */
- int signal; /* signal to be delivered, e.g. SIGTERM */
- int timeout_ms; /* -1 means no timeout, 0 means infinite, otherwise the
- max. time to wait until the fusionee(s) terminated */
- } FusionKill;
- /*
- * Shared memory pools
- */
- typedef struct {
- int max_size; /* Maximum size that this pool will be allowed to grow to. */
- int pool_id; /* Returns the new pool id. */
- void *addr_base; /* Returns the base of the reserved virtual memory address space. */
- } FusionSHMPoolNew;
- typedef struct {
- int pool_id; /* The id of the pool to attach to. */
- void *addr_base; /* Returns the base of the reserved virtual memory address space. */
- int size; /* Returns the current size of the pool. */
- } FusionSHMPoolAttach;
- typedef struct {
- int pool_id; /* The id of the pool to notify. */
- int size; /* New size of the pool. */
- } FusionSHMPoolDispatch;
- typedef enum {
- FSMT_REMAP, /* Remap the pool due to a change of its size. */
- FSMT_UNMAP /* Unmap the pool due to its destruction. */
- } FusionSHMPoolMessageType;
- typedef struct {
- FusionSHMPoolMessageType type; /* Type of the message. */
- int size; /* New size of the pool, if type is FSMT_REMAP. */
- } FusionSHMPoolMessage;
- /*
- * Fusion types
- */
- typedef enum {
- FT_LOUNGE,
- FT_MESSAGING,
- FT_CALL,
- FT_REF,
- FT_SKIRMISH,
- FT_PROPERTY,
- FT_REACTOR,
- FT_SHMPOOL
- } FusionType;
- /*
- * Set attributes like 'name' for an entry of the specified type.
- */
- #define FUSION_ENTRY_INFO_NAME_LENGTH 24
- typedef struct {
- FusionType type;
- int id;
- char name[FUSION_ENTRY_INFO_NAME_LENGTH];
- } FusionEntryInfo;
- #define FUSION_ENTER _IOR(FT_LOUNGE, 0x00, FusionEnter)
- #define FUSION_UNBLOCK _IO (FT_LOUNGE, 0x01)
- #define FUSION_KILL _IOW(FT_LOUNGE, 0x02, FusionKill)
- #define FUSION_ENTRY_SET_INFO _IOW(FT_LOUNGE, 0x03, FusionEntryInfo)
- #define FUSION_ENTRY_GET_INFO _IOW(FT_LOUNGE, 0x04, FusionEntryInfo)
- #define FUSION_FORK _IOW(FT_LOUNGE, 0x05, FusionFork)
- #define FUSION_SEND_MESSAGE _IOW(FT_MESSAGING, 0x00, FusionSendMessage)
- #define FUSION_CALL_NEW _IOW(FT_CALL, 0x00, FusionCallNew)
- #define FUSION_CALL_EXECUTE _IOW(FT_CALL, 0x01, FusionCallExecute)
- #define FUSION_CALL_RETURN _IOW(FT_CALL, 0x02, FusionCallReturn)
- #define FUSION_CALL_DESTROY _IOW(FT_CALL, 0x03, int)
- #define FUSION_REF_NEW _IOW(FT_REF, 0x00, int)
- #define FUSION_REF_UP _IOW(FT_REF, 0x01, int)
- #define FUSION_REF_UP_GLOBAL _IOW(FT_REF, 0x02, int)
- #define FUSION_REF_DOWN _IOW(FT_REF, 0x03, int)
- #define FUSION_REF_DOWN_GLOBAL _IOW(FT_REF, 0x04, int)
- #define FUSION_REF_ZERO_LOCK _IOW(FT_REF, 0x05, int)
- #define FUSION_REF_ZERO_TRYLOCK _IOW(FT_REF, 0x06, int)
- #define FUSION_REF_UNLOCK _IOW(FT_REF, 0x07, int)
- #define FUSION_REF_STAT _IOW(FT_REF, 0x08, int)
- #define FUSION_REF_WATCH _IOW(FT_REF, 0x09, FusionRefWatch)
- #define FUSION_REF_INHERIT _IOW(FT_REF, 0x0A, FusionRefInherit)
- #define FUSION_REF_DESTROY _IOW(FT_REF, 0x0B, int)
- #define FUSION_SKIRMISH_NEW _IOW(FT_SKIRMISH, 0x00, int)
- #define FUSION_SKIRMISH_PREVAIL _IOW(FT_SKIRMISH, 0x01, int)
- #define FUSION_SKIRMISH_SWOOP _IOW(FT_SKIRMISH, 0x02, int)
- #define FUSION_SKIRMISH_DISMISS _IOW(FT_SKIRMISH, 0x03, int)
- #define FUSION_SKIRMISH_DESTROY _IOW(FT_SKIRMISH, 0x04, int)
- #define FUSION_SKIRMISH_LOCK_COUNT _IOW(FT_SKIRMISH, 0x05, int)
- #define FUSION_PROPERTY_NEW _IOW(FT_PROPERTY, 0x00, int)
- #define FUSION_PROPERTY_LEASE _IOW(FT_PROPERTY, 0x01, int)
- #define FUSION_PROPERTY_PURCHASE _IOW(FT_PROPERTY, 0x02, int)
- #define FUSION_PROPERTY_CEDE _IOW(FT_PROPERTY, 0x03, int)
- #define FUSION_PROPERTY_HOLDUP _IOW(FT_PROPERTY, 0x04, int)
- #define FUSION_PROPERTY_DESTROY _IOW(FT_PROPERTY, 0x05, int)
- #define FUSION_REACTOR_NEW _IOW(FT_REACTOR, 0x00, int)
- #define FUSION_REACTOR_ATTACH _IOW(FT_REACTOR, 0x01, int)
- #define FUSION_REACTOR_DETACH _IOW(FT_REACTOR, 0x02, int)
- #define FUSION_REACTOR_DISPATCH _IOW(FT_REACTOR, 0x03, FusionReactorDispatch)
- #define FUSION_REACTOR_DESTROY _IOW(FT_REACTOR, 0x04, int)
- #define FUSION_SHMPOOL_NEW _IOW(FT_SHMPOOL, 0x00, FusionSHMPoolNew)
- #define FUSION_SHMPOOL_ATTACH _IOW(FT_SHMPOOL, 0x01, FusionSHMPoolAttach)
- #define FUSION_SHMPOOL_DETACH _IOW(FT_SHMPOOL, 0x02, int)
- #define FUSION_SHMPOOL_DISPATCH _IOW(FT_SHMPOOL, 0x03, FusionSHMPoolDispatch)
- #define FUSION_SHMPOOL_DESTROY _IOW(FT_SHMPOOL, 0x04, int)
- #endif
|