/[rtmk]/rtmk/mutations.h
ViewVC logotype

Diff of /rtmk/mutations.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7 by jrydberg, Sat Feb 23 02:28:58 2002 UTC revision 1.8 by jrydberg, Wed Mar 27 00:13:45 2002 UTC
# Line 21  Foundation, Inc., 59 Temple Place - Suit Line 21  Foundation, Inc., 59 Temple Place - Suit
21  #include "vm-object.h"  #include "vm-object.h"
22  #include "host.h"  #include "host.h"
23  #include "eventcnt.h"  #include "eventcnt.h"
24    #include "pager-extern.h"
25    
26  typedef struct thread *thread_t;  static inline struct task *
27  typedef struct task *task_t;  convert_port_to_task (void *arg)
 typedef struct vm_object *vm_object_t;  
 typedef struct eventcnt *eventcnt_t;  
   
 #ifndef TRUE  
 # define TRUE 1  
 #endif  
   
 #ifndef FALSE  
 # define FALSE 0  
 #endif  
   
 struct std_mfield_desc  
28  {  {
29    rtmk_msg_type_t type;    struct ipc_port *port = arg;
   struct ipc_port *port;  
 };  
   
 static inline kern_return_t convert_port_to_task (rtmk_msg_type_t **msgtp,  
                                                   struct task **task)  
 {  
   struct std_mfield_desc *mfield = (struct std_mfield_desc *) *msgtp;  
   struct ipc_port *port = mfield->port;  
   
   /* First check type.  */  
30    if (port->kobject.type != IPC_KOBJECT_TYPE_TASK)    if (port->kobject.type != IPC_KOBJECT_TYPE_TASK)
31      return KERN_INVALID_ARGUMENT;      return 0;
32        return (struct task *) port->kobject.port;
   *task   = (struct task *) port->kobject.port;  
   *msgtp  = (rtmk_msg_type_t *) (mfield + 1);  
   return KERN_SUCCESS;  
33  }  }
34    
35  static inline kern_return_t convert_task_to_port (rtmk_msg_type_t **msgtp,  static inline struct ipc_port *
36                                                    struct task *task)  convert_task_to_port (void *arg)
37  {  {
38    struct std_mfield_desc *mfield = (struct std_mfield_desc *) *msgtp;    struct task *task = arg;
39    struct rtmk_msg_type type =    return task->task_port;
   {  
     RTMK_MSG_TYPE_COPY_SEND, 32, 1, 0, 0, 0, 1  
   };  
     
   mfield->type  = type;  
   mfield->port  = task->task_port;  
   
   *msgtp = (rtmk_msg_type_t *) (mfield + 1);  
   return KERN_SUCCESS;  
40  }  }
41    
 static inline kern_return_t convert_port_to_thread (rtmk_msg_type_t **msgtp,  
                                                     struct thread **thread)  
 {  
   struct std_mfield_desc *mfield = (struct std_mfield_desc *) *msgtp;  
   struct ipc_port *port = mfield->port;  
42    
43    /* First check type.  */  static inline struct thread *
44    convert_port_to_thread (void *arg)
45    {
46      struct ipc_port *port = arg;
47    if (port->kobject.type != IPC_KOBJECT_TYPE_THREAD)    if (port->kobject.type != IPC_KOBJECT_TYPE_THREAD)
48      return KERN_INVALID_ARGUMENT;      return 0;
49        return (struct thread *) port->kobject.port;
   *thread = (thread_t) port->kobject.port;  
   *msgtp  = (rtmk_msg_type_t *) (mfield + 1);  
   return KERN_SUCCESS;  
50  }  }
51    
52  static inline kern_return_t convert_thread_to_port (rtmk_msg_type_t **msgtp,  static inline struct ipc_port *
53                                                      struct thread *thread)  convert_thread_to_port (void *arg)
54  {  {
55    struct std_mfield_desc *mfield = (struct std_mfield_desc *) *msgtp;    struct thread *thread = arg;
56    struct rtmk_msg_type type =    return thread->thread_port;
   {  
     RTMK_MSG_TYPE_COPY_SEND, 32, 1, 0, 0, 0, 1  
   };  
     
   mfield->type  = type;  
   mfield->port  = thread->thread_port;  
   
   *msgtp = (rtmk_msg_type_t *) (mfield + 1);  
   return KERN_SUCCESS;  
57  }  }
58    
 static inline kern_return_t convert_port_to_object (rtmk_msg_type_t **msgtp,  
                                                     struct vm_object **objectp)  
 {  
   struct std_mfield_desc *mfield = (struct std_mfield_desc *) *msgtp;  
   struct ipc_port *port = mfield->port;  
59    
60    /* First check type.  */  static inline struct eventcnt *
61    if (port->kobject.type != IPC_KOBJECT_TYPE_MEMORY_OBJECT)  convert_port_to_eventcnt (void *arg)
     return KERN_INVALID_ARGUMENT;  
     
   *objectp = (struct vm_object *) port->kobject.port;  
   *msgtp   = (rtmk_msg_type_t *) (mfield + 1);  
   return KERN_SUCCESS;  
 }  
   
 static inline kern_return_t convert_object_to_port (rtmk_msg_type_t **msgtp,  
                                                     struct vm_object *object)  
62  {  {
63    struct std_mfield_desc *mfield = (struct std_mfield_desc *) *msgtp;    struct ipc_port *port = arg;
64    struct rtmk_msg_type type =    if (port->kobject.type != IPC_KOBJECT_TYPE_EVENTCNT)
65    {      return 0;
66      RTMK_MSG_TYPE_COPY_SEND, 32, 1, 0, 0, 0, 1    return (struct eventcnt *) port->kobject.port;
   };  
     
   mfield->type  = type;  
   mfield->port  = object->object_port;  
   
   *msgtp = (rtmk_msg_type_t *) (mfield + 1);  
   return KERN_SUCCESS;  
67  }  }
68    
69  static inline kern_return_t convert_evc_to_port (rtmk_msg_type_t **msgtp,  static inline struct ipc_port *
70                                                   struct eventcnt *evc)  convert_eventcnt_to_port (void *arg)
71  {  {
72    struct std_mfield_desc *mfield = (struct std_mfield_desc *) *msgtp;    struct eventcnt *eventcnt = arg;
73    struct rtmk_msg_type type =    return eventcnt->port_self;
   {  
     RTMK_MSG_TYPE_COPY_SEND, 32, 1, 0, 0, 0, 1  
   };  
     
   mfield->type  = type;  
   mfield->port  = evc->port_self;  
   
   *msgtp = (rtmk_msg_type_t *) (mfield + 1);  
   return KERN_SUCCESS;  
74  }  }
75    
   
 static inline kern_return_t convert_port_to_evc (rtmk_msg_type_t **msgtp,  
                                                  struct eventcnt **evcp)  
 {  
   struct std_mfield_desc *mfield = (struct std_mfield_desc *) *msgtp;  
   struct ipc_port *port = mfield->port;  
   
   /* First check type.  */  
   if (port->kobject.type != IPC_KOBJECT_TYPE_EVENTCNT)  
     return KERN_INVALID_ARGUMENT;  
     
   *evcp  = (struct eventcnt *) port->kobject.port;  
   *msgtp = (rtmk_msg_type_t *) (mfield + 1);  
   return KERN_SUCCESS;  
 }  

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26