This is kern_server_types.h in view mode; [Download] [Up]
/* * Copyright (c) 1989 NeXT, Inc. * * HISTORY * 8-Jun-92 Matthew Self (mself) at NeXT * Added mach_header field to kern_server_var_t for Objective-C. * * 12-Jul-90 Gregg Kellogg (gk) at NeXT * Changed msgs to msg, as only a single message is retained. * Added KS_VERSION(=2), which is updated whenever a protocol change * is made. * * 51-May-90 Gregg Kellogg (gk) at NeXT * Added pad filed at end of kern_server struct so that already compiled * servers won't be impacted when the kern_server grows. * * 04-Apr-89 Gregg Kellogg (gk) at NeXT * Created. * */ #ifndef _KERN_SERVER_ #define _KERN_SERVER_ #if KERNEL #import <mach/mach_user_internal.h> #import <mach/mach_host_internal.h> #endif #import <mach/mach_interface.h> #import <mach/mach_host.h> #import <mach/message.h> #import <sys/types.h> #import <kernserv/queue.h> #import <kernserv/kern_server_reply_types.h> /* * Messages to be sent to the Mach bootstrap port. The bootstrap port * is inherited from the parent task and is used for finding information * about the external and internal environment. * * Generic things that need to be done to get a kernel server started: * Wire down memory regions * Associate ports with procedures (to handle messages) */ /* * This must be small enough to fit (along with a message header) in 8K. */ #define KERN_SERVER_LOG_SIZE 500 #define KERN_SERVER_ERROR 100 /* bad message*/ #define KERN_SERVER_NOTLOGGING 101 /* server not logging data*/ #define KERN_SERVER_UNCREC_PORT 102 /* port not recognized*/ #define KERN_SERVER_BAD_VERSION 103 /* server version not supported*/ #define KERN_SERVER_NPORTPROC 50 typedef boolean_t (*port_map_proc_t) ( msg_header_t *in_msg, void *arg); typedef boolean_t (*port_map_serv_t) ( msg_header_t *in_msg, msg_header_t *out_msg); typedef boolean_t (*port_death_proc_t)(port_name_t port); typedef boolean_t (*port_notify_proc_t)(port_name_t port, u_int notify_type); typedef int (*call_proc_t)(int arg); typedef struct port_proc_map { port_name_t port; /* port -> proc mapping*/ port_map_proc_t proc; /* proc to call*/ void * uarg; enum { PP_handler, PP_server } type; /* proc interface type*/ } port_proc_map_t; typedef struct { port_t reply_port; port_name_t req_port; queue_chain_t link; } ks_notify_t; #if KERNEL /* * Supported compatibility level. */ #define KS_COMPAT 2 #define KS_VERSION 2 /* * Server instance structure */ typedef struct kern_server_var { simple_lock_data_t slock; /* access synchronization*/ port_name_t local_port; /* local_port of cur message*/ port_name_t task_port; /* my task port*/ thread_t server_thread; /* server thread.*/ port_name_t bootstrap_port; /* my bootstrap port*/ port_name_t boot_listener_port; /* port we listen on*/ port_name_t log_port; /* port to send log info to*/ port_name_t notify_port; /* notification port.*/ port_set_name_t port_set; /* port set we receive on*/ log_t log; /* log structure*/ queue_head_t msg_callout_q; /* queue of messages to send*/ queue_head_t msg_callout_fq; /* free queue*/ msg_header_t *msg; /* msg we receive into*/ int msg_size; /* size of msg.*/ struct msg_send_entry { void (*func)(); void * arg; queue_chain_t link; } msg_send_array[20]; port_proc_map_t port_proc[KERN_SERVER_NPORTPROC]; port_name_t last_unrec_port;/* last bad kern_serv_disp()*/ port_name_t last_rec_port; /* last good kern_serv_disp()*/ int last_rec_index; /* index of last good k_s_d()*/ port_death_proc_t pd_proc; /* port death procedure*/ port_notify_proc_t pn_proc; /* port notify procedure*/ queue_head_t notify_q; /* queue of notify/req pairs.*/ int version; /* version of server.*/ port_t kernel_port; /* kernel task port for server*/ struct mach_header *mach_header; /* mach_header of server module*/ } kern_server_var_t; typedef kern_server_var_t *kern_server_t; /* * Structure access functions. */ port_t kern_serv_local_port(kern_server_t *ksp); port_t kern_serv_bootstrap_port(kern_server_t *ksp); port_t kern_serv_notify_port(kern_server_t *ksp); port_set_name_t kern_serv_port_set(kern_server_t *ksp); /* * Function prototypes. */ void kern_server_main(void); void kern_serv_port_gone(kern_server_t *ksp, port_name_t port); /* * Log functions. */ void kern_serv_log ( /* log a message*/ kern_server_t *ksp, /* kern_server instance vars*/ int log_level, /* level to log at*/ char *msg, /* what to log (followed by args)*/ int arg1, int arg2, int arg3, int arg4, int arg5); /* * Alias for msg_send to ensure that messages are sent at ipl0 from the proper * task. */ kern_return_t kern_serv_callout ( kern_server_t *ksp, void (*proc)(void *arg), void *arg); /* * Kernel version of kern_serv_notify, doesn't contact kern_loader, uses * internal port_request_notification facility. */ kern_return_t kern_serv_notify ( kern_server_t *ksp, port_t reply_port, port_t req_port); /* * Kernel reference for kern_serv interface routines. */ kern_return_t kern_serv_instance_loc ( void *arg, /* (kern_server_t *ksp)*/ vm_address_t instance_loc); kern_return_t kern_serv_boot_port ( /* how to talk to loader*/ void *arg, /* (kern_server_t *ksp)*/ port_t boot_port); kern_return_t kern_serv_version ( void *arg, /* (kern_server_t *ksp)*/ int version); /* server version*/ kern_return_t kern_serv_load_objc ( void *arg, /* (kern_server_t *ksp)*/ vm_address_t header); /* header addr*/ kern_return_t kern_serv_wire_range ( /* wire the specified range or memory*/ void *arg, /* (kern_server_t *ksp)*/ vm_address_t addr, vm_size_t size); kern_return_t kern_serv_unwire_range ( /* unwire the specified range or memory*/ void *arg, /* (kern_server_t *ksp)*/ vm_address_t addr, vm_size_t size); kern_return_t kern_serv_port_proc ( /* map a message on port to proc/arg*/ void *arg, /* (kern_server_t *ksp)*/ port_all_t port, /* port to map (all rights passed)*/ port_map_proc_t proc, /* proc to call*/ int uarg); /* replace local_port with uarg*/ kern_return_t kern_serv_port_death_proc ( /* specify port death handler*/ void *arg, /* (kern_server_t *ksp)*/ port_death_proc_t proc); /* proc to call*/ kern_return_t kern_serv_call_proc ( /* call procedure with argument*/ void *arg, /* (kern_server_t *ksp)*/ call_proc_t proc, /* proc to call*/ int uarg); /* arg to supply*/ kern_return_t kern_serv_shutdown ( void *arg); /* (kern_server_t *ksp)*/ kern_return_t kern_serv_log_level ( void *arg, /* (kern_server_t *ksp)*/ int log_level); kern_return_t kern_serv_get_log ( void *arg, /* (kern_server_t *ksp)*/ port_t reply_port); /* port to send log information to*/ kern_return_t kern_serv_port_serv ( /* map a message on port to proc/arg*/ void *arg, /* (kern_server_t *ksp)*/ port_all_t port, /* port to map (all rights passed)*/ port_map_proc_t proc, /* proc to call*/ int uarg); /* replace local_port with uarg*/ port_t kern_serv_kernel_task_port(void); /* kernel port (for vm ops).*/ #endif #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.