X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/0b4e3aa066abc0728aacb4bbeb86f53f9737156e..ac5ea4a98a4e1d34a076095ea1eaa87e43d1f335:/osfmk/mach/mig.h?ds=sidebyside diff --git a/osfmk/mach/mig.h b/osfmk/mach/mig.h index 8bc149230..fa6ac0b03 100644 --- a/osfmk/mach/mig.h +++ b/osfmk/mach/mig.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * @@ -30,9 +30,10 @@ #ifndef _MACH_MIG_H_ #define _MACH_MIG_H_ +#include #include #include -#include +#include /* * Definition for MIG-generated server stub routines. These routines @@ -58,22 +59,72 @@ typedef mig_routine_t (*mig_server_routine_t) (mach_msg_header_t *InHeadP); */ typedef kern_return_t (*mig_impl_routine_t)(void); -typedef struct mig_routine_descriptor { - mig_stub_routine_t stub_routine; /* Unmarshalling function */ - mach_msg_size_t max_reply_msg; /* Max size for this reply */ -} mig_routine_descriptor; -typedef mig_routine_descriptor *mig_routine_descriptor_t; +typedef mach_msg_type_descriptor_t routine_arg_descriptor; +typedef mach_msg_type_descriptor_t *routine_arg_descriptor_t; +typedef mach_msg_type_descriptor_t *mig_routine_arg_descriptor_t; + +#define MIG_ROUTINE_ARG_DESCRIPTOR_NULL ((mig_routine_arg_descriptor_t)0) + +struct routine_descriptor { + mig_impl_routine_t impl_routine; /* Server work func pointer */ + mig_stub_routine_t stub_routine; /* Unmarshalling func pointer */ + unsigned int argc; /* Number of argument words */ + unsigned int descr_count; /* Number complex descriptors */ + routine_arg_descriptor_t + arg_descr; /* pointer to descriptor array*/ + unsigned int max_reply_msg; /* Max size for reply msg */ +}; +typedef struct routine_descriptor *routine_descriptor_t; + +typedef struct routine_descriptor mig_routine_descriptor; +typedef mig_routine_descriptor *mig_routine_descriptor_t; + +#define MIG_ROUTINE_DESCRIPTOR_NULL ((mig_routine_descriptor_t)0) typedef struct mig_subsystem { - mig_server_routine_t server; /* server routine */ - mach_msg_id_t start; /* Min routine number */ - mach_msg_id_t end; /* Max routine number + 1 */ - mach_msg_size_t max_reply; /* Max reply message size */ - mach_msg_size_t max_request; /* Max request msg size */ - mig_routine_descriptor routine[1]; /* Routine descriptor array */ + mig_server_routine_t server; /* pointer to demux routine */ + mach_msg_id_t start; /* Min routine number */ + mach_msg_id_t end; /* Max routine number + 1 */ + mach_msg_size_t maxsize; /* Max reply message size */ + vm_address_t reserved; /* reserved for MIG use */ + mig_routine_descriptor + routine[1]; /* Routine descriptor array */ } *mig_subsystem_t; +#define MIG_SUBSYSTEM_NULL ((mig_subsystem_t)0) + +typedef struct mig_symtab { + char *ms_routine_name; + int ms_routine_number; + void (*ms_routine)(void); /* Since the functions in the + * symbol table have unknown + * signatures, this is the best + * we can do... + */ +} mig_symtab_t; + +/* Client side reply port allocate */ +extern mach_port_t mig_get_reply_port(void); + +/* Client side reply port deallocate */ +extern void mig_dealloc_reply_port(mach_port_t reply_port); + +/* Client side reply port "deallocation" */ +extern void mig_put_reply_port(mach_port_t reply_port); + +/* Bounded string copy */ +extern int mig_strncpy(char *dest, const char *src, int len); + #ifdef KERNEL_PRIVATE +#include + +/* Allocate memory for out-of-stack mig structures */ +extern char *mig_user_allocate(vm_size_t size); + +/* Deallocate memory used for out-of-stack mig structures */ +extern void mig_user_deallocate(char *data, vm_size_t size); + +#ifdef __APPLE_API_EVOLVING /* * MIG object runtime definitions * @@ -92,7 +143,7 @@ typedef struct mig_subsystem { * Coming soon: * - User-level support */ -typedef unsigned int mig_notify_type_t; +typedef unsigned int mig_notify_type_t; typedef struct MIGIID { unsigned long data1; @@ -185,6 +236,8 @@ struct IMIGNotifyObjectVtbl { mig_notify_type_t notify_type); }; +#endif /* __APPLE_API_EVOLVING */ + #endif /* KERNEL_PRIVATE */ #endif /* _MACH_MIG_H_ */