diff --git a/sys/compat/mach/mach_iokit.c b/sys/compat/mach/mach_iokit.c index 79bf5716c290..67b42646c96b 100644 --- a/sys/compat/mach/mach_iokit.c +++ b/sys/compat/mach/mach_iokit.c @@ -1,4 +1,4 @@ -/* $NetBSD: mach_iokit.c,v 1.3 2003/02/07 16:56:19 manu Exp $ */ +/* $NetBSD: mach_iokit.c,v 1.4 2003/02/07 20:40:37 manu Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: mach_iokit.c,v 1.3 2003/02/07 16:56:19 manu Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mach_iokit.c,v 1.4 2003/02/07 20:40:37 manu Exp $"); #include #include @@ -324,4 +324,132 @@ mach_io_connect_set_notification_port(args) return 0; } +int +mach_io_registry_get_root_entry(args) + struct mach_trap_args *args; +{ + mach_io_registry_get_root_entry_request_t *req = args->smsg; + mach_io_registry_get_root_entry_reply_t *rep = args->rmsg; + size_t *msglen = args->rsize; + struct lwp *l = args->l; + struct mach_port *mp; + struct mach_right *mr; + mp = mach_port_get(); + mp->mp_flags |= MACH_MP_INKERNEL; + mr = mach_right_get(mp, l, MACH_PORT_TYPE_SEND, 0); + + rep->rep_msgh.msgh_bits = + MACH_MSGH_REPLY_LOCAL_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE) | + MACH_MSGH_BITS_COMPLEX; + rep->rep_msgh.msgh_size = sizeof(*rep) - sizeof(rep->rep_trailer); + rep->rep_msgh.msgh_local_port = req->req_msgh.msgh_local_port; + rep->rep_msgh.msgh_id = req->req_msgh.msgh_id + 100; + rep->rep_body.msgh_descriptor_count = 1; + rep->rep_root.name = (mach_port_t)mr->mr_name; + rep->rep_root.disposition = 0x11; /* XXX */ + rep->rep_trailer.msgh_trailer_size = 8; + + *msglen = sizeof(*rep); + return 0; +} + +int +mach_io_registry_entry_get_child_iterator(args) + struct mach_trap_args *args; +{ + mach_io_registry_entry_get_child_iterator_request_t *req = args->smsg; + mach_io_registry_entry_get_child_iterator_reply_t *rep = args->rmsg; + size_t *msglen = args->rsize; + struct lwp *l = args->l; + struct mach_port *mp; + struct mach_right *mr; + + mp = mach_port_get(); + mp->mp_flags |= MACH_MP_INKERNEL; + mr = mach_right_get(mp, l, MACH_PORT_TYPE_SEND, 0); + + rep->rep_msgh.msgh_bits = + MACH_MSGH_REPLY_LOCAL_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE) | + MACH_MSGH_BITS_COMPLEX; + rep->rep_msgh.msgh_size = sizeof(*rep) - sizeof(rep->rep_trailer); + rep->rep_msgh.msgh_local_port = req->req_msgh.msgh_local_port; + rep->rep_msgh.msgh_id = req->req_msgh.msgh_id + 100; + rep->rep_body.msgh_descriptor_count = 1; + rep->rep_iterator.name = (mach_port_t)mr->mr_name; + rep->rep_iterator.disposition = 0x11; /* XXX */ + rep->rep_trailer.msgh_trailer_size = 8; + + *msglen = sizeof(*rep); + return 0; +} + +int +mach_io_registry_entry_get_name_in_plane(args) + struct mach_trap_args *args; +{ + mach_io_registry_entry_get_name_in_plane_request_t *req = args->smsg; + mach_io_registry_entry_get_name_in_plane_reply_t *rep = args->rmsg; + size_t *msglen = args->rsize; + char foobarbuz[] = "foobarbuz"; + + rep->rep_msgh.msgh_bits = + MACH_MSGH_REPLY_LOCAL_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE); + rep->rep_msgh.msgh_size = sizeof(*rep) - sizeof(rep->rep_trailer); + rep->rep_msgh.msgh_local_port = req->req_msgh.msgh_local_port; + rep->rep_msgh.msgh_id = req->req_msgh.msgh_id + 100; + /* XXX Just return a dummy name for now */ + rep->rep_namecount = sizeof(foobarbuz); + memcpy(&rep->rep_name, foobarbuz, sizeof(foobarbuz)); + rep->rep_trailer.msgh_trailer_size = 8; + + *msglen = sizeof(*rep); + return 0; +} + +int +mach_io_object_get_class(args) + struct mach_trap_args *args; +{ + mach_io_object_get_class_request_t *req = args->smsg; + mach_io_object_get_class_reply_t *rep = args->rmsg; + size_t *msglen = args->rsize; + char foobarbuz[] = "FoobarClass"; + + rep->rep_msgh.msgh_bits = + MACH_MSGH_REPLY_LOCAL_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE); + rep->rep_msgh.msgh_size = sizeof(*rep) - sizeof(rep->rep_trailer); + rep->rep_msgh.msgh_local_port = req->req_msgh.msgh_local_port; + rep->rep_msgh.msgh_id = req->req_msgh.msgh_id + 100; + /* XXX Just return a dummy name for now */ + rep->rep_namecount = sizeof(foobarbuz); + memcpy(&rep->rep_name, foobarbuz, sizeof(foobarbuz)); + rep->rep_trailer.msgh_trailer_size = 8; + + *msglen = sizeof(*rep); + return 0; +} + +int +mach_io_registry_entry_get_location_in_plane(args) + struct mach_trap_args *args; +{ + mach_io_registry_entry_get_location_in_plane_request_t *req = + args->smsg; + mach_io_registry_entry_get_location_in_plane_reply_t *rep = args->rmsg; + size_t *msglen = args->rsize; + char foobarbuz[] = "/"; + + rep->rep_msgh.msgh_bits = + MACH_MSGH_REPLY_LOCAL_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE); + rep->rep_msgh.msgh_size = sizeof(*rep) - sizeof(rep->rep_trailer); + rep->rep_msgh.msgh_local_port = req->req_msgh.msgh_local_port; + rep->rep_msgh.msgh_id = req->req_msgh.msgh_id + 100; + /* XXX Just return a dummy name for now */ + rep->rep_locationcount = sizeof(foobarbuz); + memcpy(&rep->rep_location, foobarbuz, sizeof(foobarbuz)); + rep->rep_trailer.msgh_trailer_size = 8; + + *msglen = sizeof(*rep); + return 0; +} diff --git a/sys/compat/mach/mach_iokit.h b/sys/compat/mach/mach_iokit.h index c5bfedaf811f..a0be242ce304 100644 --- a/sys/compat/mach/mach_iokit.h +++ b/sys/compat/mach/mach_iokit.h @@ -1,4 +1,4 @@ -/* $NetBSD: mach_iokit.h,v 1.3 2003/02/07 16:56:19 manu Exp $ */ +/* $NetBSD: mach_iokit.h,v 1.4 2003/02/07 20:40:37 manu Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -219,6 +219,92 @@ typedef struct { 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[128]; +} 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[128]; +} 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[128]; +} 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; + int mach_io_service_get_matching_services(struct mach_trap_args *); int mach_io_iterator_next(struct mach_trap_args *); int mach_io_service_open(struct mach_trap_args *); @@ -229,6 +315,11 @@ int mach_io_registry_entry_create_iterator(struct mach_trap_args *); int mach_io_object_conforms_to(struct mach_trap_args *); int mach_io_service_add_interest_notification(struct mach_trap_args *); int mach_io_connect_set_notification_port(struct mach_trap_args *); +int mach_io_registry_get_root_entry(struct mach_trap_args *); +int mach_io_registry_entry_get_child_iterator(struct mach_trap_args *); +int mach_io_registry_entry_get_name_in_plane(struct mach_trap_args *); +int mach_io_object_get_class(struct mach_trap_args *); +int mach_io_registry_entry_get_location_in_plane(struct mach_trap_args *); #endif /* _MACH_IOKIT_H_ */ diff --git a/sys/compat/mach/mach_namemap.c b/sys/compat/mach/mach_namemap.c index 498e04dce4ce..fe81e08c9e1a 100644 --- a/sys/compat/mach/mach_namemap.c +++ b/sys/compat/mach/mach_namemap.c @@ -1,4 +1,4 @@ -/* $NetBSD: mach_namemap.c,v 1.16 2003/02/07 16:56:19 manu Exp $ */ +/* $NetBSD: mach_namemap.c,v 1.17 2003/02/07 20:40:37 manu Exp $ */ /*- * Copyright (c) 2002-2003 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: mach_namemap.c,v 1.16 2003/02/07 16:56:19 manu Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mach_namemap.c,v 1.17 2003/02/07 20:40:37 manu Exp $"); #include #include @@ -62,22 +62,31 @@ struct mach_subsystem_namemap mach_namemap[] = { /* { 403, mach_boostrap_register, "boostrap_register" }, */ { 404, mach_bootstrap_look_up, "bootstrap_look_up" }, { 1000, mach_clock_get_time, "clock_get_time" }, + { 2800, mach_io_object_get_class, "io_object_get_class" }, { 2801, mach_io_object_conforms_to, "io_object_conforms_to" }, { 2802, mach_io_iterator_next, "io_iterator_next" }, { 2804, mach_io_service_get_matching_services, "io_service_get_matching_services" }, { 2805, mach_io_registry_entry_get_property, "io_registry_entry_get_property" }, + { 2813, mach_io_registry_entry_get_child_iterator, + "io_registry_entry_get_child_iterator" }, { 2815, mach_io_service_open, "io_service_open" }, { 2817, mach_io_connect_get_service, "io_connect_get_service" }, { 2818, mach_io_connect_set_notification_port, "io_connect_set_notification_port" }, { 2822, mach_io_connect_method_scalari_scalaro, "io_connect_method_scalari_scalaro" }, + { 2827, mach_io_registry_get_root_entry, + "io_registry_get_root_entry" }, { 2833, mach_io_registry_entry_create_iterator, "io_registry_entry_create_iterator" }, + { 2843, mach_io_registry_entry_get_name_in_plane, + "io_registry_entry_get_name_in_plane" }, { 2850, mach_io_service_add_interest_notification, "io_service_add_interest_notification" }, + { 2854, mach_io_registry_entry_get_location_in_plane, + "io_registry_entry_get_location_in_plane" }, { 3201, mach_port_type, "port_type" }, { 3204, mach_port_allocate, "port_allocate" }, { 3205, mach_port_destroy, "port_destroy" },