555 lines
15 KiB
C
555 lines
15 KiB
C
/* $NetBSD: mach_iokit.h,v 1.22 2003/11/13 13:40:39 manu Exp $ */
|
|
|
|
/*-
|
|
* Copyright (c) 2003 The NetBSD Foundation, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This code is derived from software contributed to The NetBSD Foundation
|
|
* by Emmanuel Dreyfus
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
* must display the following acknowledgement:
|
|
* This product includes software developed by the NetBSD
|
|
* Foundation, Inc. and its contributors.
|
|
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef _MACH_IOKIT_H_
|
|
#define _MACH_IOKIT_H_
|
|
|
|
typedef struct mach_io_object *mach_io_object_t;
|
|
|
|
/* mach_io_service_get_matching_services */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_io_object_t req_io_master;
|
|
mach_msg_size_t req_size;
|
|
char req_string[0];
|
|
} mach_io_service_get_matching_services_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_match;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_service_get_matching_services_reply_t;
|
|
|
|
/* mach_io_iterator_next */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
} mach_io_iterator_next_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_object;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_iterator_next_reply_t;
|
|
|
|
/* mach_io_service_open */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_msg_body_t req_body;
|
|
mach_msg_port_descriptor_t req_owningtask;
|
|
mach_ndr_record_t req_ndr;
|
|
int mach_connect_type;
|
|
} mach_io_service_open_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_connect;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_service_open_reply_t;
|
|
|
|
/* mach_io_connect_method_scalari_scalaro */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
int req_selector;
|
|
mach_msg_type_number_t req_incount;
|
|
int req_in[0];
|
|
mach_msg_type_number_t req_outcount;
|
|
} mach_io_connect_method_scalari_scalaro_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_type_number_t rep_outcount;
|
|
int rep_out[16];
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_method_scalari_scalaro_reply_t;
|
|
|
|
/* io_connect_get_service */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
} mach_io_connect_get_service_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_service;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_get_service_reply_t;
|
|
|
|
/* io_registry_entry_get_property */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_property_nameoffset;
|
|
mach_msg_type_number_t req_property_namecount;
|
|
char req_property_name[0];
|
|
} mach_io_registry_entry_get_property_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_ool_descriptor_t rep_properties;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_msg_type_number_t rep_properties_count;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_get_property_reply_t;
|
|
|
|
/* io_registry_entry_create_iterator */
|
|
|
|
#define MACH_IOKIT_RECURSIVE_ITERATOR 1
|
|
#define MACH_IOKIT_PARENT_ITERATOR 2
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_planeoffset;
|
|
mach_msg_type_number_t req_planecount;
|
|
char req_plane[0];
|
|
int req_options;
|
|
} mach_io_registry_entry_create_iterator_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_iterator;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_create_iterator_reply_t;
|
|
|
|
/* io_object_conforms_to */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_classnameoffset;
|
|
mach_msg_type_number_t req_classnamecount;
|
|
char req_classname[0];
|
|
} mach_io_object_conforms_to_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_boolean_t rep_conforms;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_object_conforms_to_reply_t;
|
|
|
|
/* io_service_add_interest_notification */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_msg_body_t req_body;
|
|
mach_msg_port_descriptor_t req_wake_port;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_typeofinterestoffset;
|
|
mach_msg_type_number_t req_typeofinterestcount;
|
|
char req_typeofinterest[0];
|
|
mach_msg_type_number_t req_refcount;
|
|
mach_natural_t req_ref[0];
|
|
} mach_io_service_add_interest_notification_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_notification;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_service_add_interest_notification_reply_t;
|
|
|
|
/* io_connect_set_notification_port */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_msg_body_t req_body;
|
|
mach_msg_port_descriptor_t req_port;
|
|
mach_ndr_record_t req_ndr;
|
|
int req_notification_type;
|
|
int req_reference;
|
|
} mach_io_connect_set_notification_port_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_set_notification_port_reply_t;
|
|
|
|
/* io_registry_get_root_entry */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
} mach_io_registry_get_root_entry_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_root;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_get_root_entry_reply_t;
|
|
|
|
/* io_registry_entry_get_child_iterator */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_planeoffset;
|
|
mach_msg_type_number_t req_planecount;
|
|
char req_plane[0];
|
|
} mach_io_registry_entry_get_child_iterator_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_iterator;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_get_child_iterator_reply_t;
|
|
|
|
/* io_registry_entry_get_name_in_plane */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_planeoffset;
|
|
mach_msg_type_number_t req_planecount;
|
|
char req_plane[0];
|
|
} mach_io_registry_entry_get_name_in_plane_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_type_number_t rep_nameoffset;
|
|
mach_msg_type_number_t rep_namecount;
|
|
char rep_name[128];
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_get_name_in_plane_reply_t;
|
|
|
|
/* io_object_get_class */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
} mach_io_object_get_class_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_type_number_t rep_nameoffset;
|
|
mach_msg_type_number_t rep_namecount;
|
|
char rep_name[128];
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_object_get_class_reply_t;
|
|
|
|
/* io_registry_entry_get_location_in_plane */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_nameoffset;
|
|
mach_msg_type_number_t req_namecount;
|
|
char req_plane[0];
|
|
} mach_io_registry_entry_get_location_in_plane_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_type_number_t rep_locationoffset;
|
|
mach_msg_type_number_t rep_locationcount;
|
|
char rep_location[128];
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_get_location_in_plane_reply_t;
|
|
|
|
/* io_registry_entry_get_properties */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
} mach_io_registry_entry_get_properties_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_ool_descriptor_t rep_properties;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_msg_type_number_t rep_count;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_get_properties_reply_t;
|
|
|
|
/* io_registry_entry_get_path */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_offset;
|
|
mach_msg_type_number_t req_count;
|
|
char req_plane[0];
|
|
} mach_io_registry_entry_get_path_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_type_number_t rep_offset;
|
|
mach_msg_type_number_t rep_count;
|
|
char rep_path[512];
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_get_path_reply_t;
|
|
|
|
/* io_connect_map_memory */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_msg_body_t req_body;
|
|
mach_msg_port_descriptor_t req_task;
|
|
mach_ndr_record_t req_ndr;
|
|
int req_memtype;
|
|
mach_vm_address_t req_addr;
|
|
mach_vm_size_t req_len;
|
|
int req_flags;
|
|
} mach_io_connect_map_memory_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_vm_address_t rep_addr;
|
|
mach_vm_size_t rep_len;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_map_memory_reply_t;
|
|
|
|
/* io_iterator_reset */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
#if 0 /* Is it optional? Darwin don't include them */
|
|
mach_ndr_record_t req_ndr;
|
|
int req_flags;
|
|
#endif
|
|
} mach_io_iterator_reset_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_iterator_reset_reply_t;
|
|
|
|
/* io_connect_set_properties */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_msg_body_t req_body;
|
|
mach_msg_ool_descriptor_t req_properties;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_count;
|
|
} mach_io_connect_set_properties_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_natural_t rep_result;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_set_properties_reply_t;
|
|
|
|
/* io_connect_method_scalari_structo */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
int req_selector;
|
|
mach_msg_type_number_t req_incount;
|
|
int req_in[0];
|
|
mach_msg_type_number_t req_outcount;
|
|
} mach_io_connect_method_scalari_structo_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_type_number_t rep_outcount;
|
|
char rep_out[4096];
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_method_scalari_structo_reply_t;
|
|
|
|
/* io_connect_method_structi_structo */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
int req_selector;
|
|
mach_msg_type_number_t req_incount;
|
|
char req_in[0];
|
|
mach_msg_type_number_t req_outcount;
|
|
} mach_io_connect_method_structi_structo_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_type_number_t rep_outcount;
|
|
char rep_out[4096];
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_method_structi_structo_reply_t;
|
|
|
|
/* io_service_close */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
} mach_io_service_close_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_service_close_reply_t;
|
|
|
|
/* io_connect_add_client */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_msg_body_t req_body;
|
|
mach_msg_port_descriptor_t req_connect;
|
|
} mach_io_connect_add_client_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_add_client_reply_t;
|
|
|
|
/* io_connect_method_scalari_structi */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
int req_selector;
|
|
mach_msg_type_number_t req_incount;
|
|
int req_in[0];
|
|
mach_msg_type_number_t req_instructcount;
|
|
char req_instruct[0];
|
|
} mach_io_connect_method_scalari_structi_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_ndr_record_t rep_ndr;
|
|
mach_kern_return_t rep_retval;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_connect_method_scalari_structi_reply_t;
|
|
|
|
/* io_registry_entry_from_path */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_pathoffset;
|
|
mach_msg_type_number_t req_pathcount;
|
|
char req_path[0];
|
|
} mach_io_registry_entry_from_path_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_entry;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_from_path_reply_t;
|
|
|
|
/* io_registry_entry_get_parent_iterator */
|
|
|
|
typedef struct {
|
|
mach_msg_header_t req_msgh;
|
|
mach_ndr_record_t req_ndr;
|
|
mach_msg_type_number_t req_offset;
|
|
mach_msg_type_number_t req_count;
|
|
char req_plane[0];
|
|
} mach_io_registry_entry_get_parent_iterator_request_t;
|
|
|
|
typedef struct {
|
|
mach_msg_header_t rep_msgh;
|
|
mach_msg_body_t rep_body;
|
|
mach_msg_port_descriptor_t rep_iterator;
|
|
mach_msg_trailer_t rep_trailer;
|
|
} mach_io_registry_entry_get_parent_iterator_reply_t;
|
|
|
|
|
|
/* Kernel-private structures */
|
|
|
|
extern struct mach_iokit_devclass *mach_iokit_devclasses[];
|
|
|
|
struct mach_iokit_property {
|
|
const char *mip_name;
|
|
const char *mip_value;
|
|
};
|
|
|
|
struct mach_device_iterator {
|
|
int mdi_current;
|
|
struct mach_iokit_devclass *mdi_devices[1];
|
|
};
|
|
|
|
/* Make this dynamic if it ever gets useful */
|
|
#define MACH_IOKIT_MAX_PARENTS 8
|
|
struct mach_iokit_devclass {
|
|
char *mid_string;
|
|
struct mach_iokit_devclass *mid_parent[MACH_IOKIT_MAX_PARENTS];
|
|
char *mid_properties;
|
|
struct mach_iokit_property *mid_properties_array;
|
|
int (*mid_connect_method_scalari_scalaro)(struct mach_trap_args *);
|
|
int (*mid_connect_method_scalari_structo)(struct mach_trap_args *);
|
|
int (*mid_connect_method_structi_structo)(struct mach_trap_args *);
|
|
int (*mid_connect_method_scalari_structi)(struct mach_trap_args *);
|
|
int (*mid_connect_map_memory)(struct mach_trap_args *);
|
|
char *mid_name;
|
|
struct mach_right *mid_notify;
|
|
};
|
|
|
|
extern struct mach_iokit_devclass mach_ioroot_devclass;
|
|
|
|
void mach_iokit_cleanup_notify(struct mach_right *);
|
|
|
|
#endif /* _MACH_IOKIT_H_ */
|