Added device_open_new and device_open_new_request and reused the old MiG ID for xxx_device_set_status which has not been in used in the past decade.
Note that device_open_new is gated on defining DEVICE_ENABLE_DEVICE_OPEN_NEW because otherwise some hurd servers wouldn't compile anymore unless patched. This macro allows us to control the rollout. --- device/ds_routines.c | 8 ++++++++ include/device/device.defs | 21 +++++++++++++++++++++ include/device/device_request.defs | 8 ++++++++ include/device/device_types.defs | 2 ++ 4 files changed, 39 insertions(+) diff --git a/device/ds_routines.c b/device/ds_routines.c index 94e61592..1f0bacf4 100644 --- a/device/ds_routines.c +++ b/device/ds_routines.c @@ -170,6 +170,14 @@ ds_device_open (ipc_port_t open_port, ipc_port_t reply_port, return err; } +io_return_t +ds_device_open_new (ipc_port_t open_port, ipc_port_t reply_port, + mach_msg_type_name_t reply_port_type, dev_mode_t mode, + const_dev_name_t name, device_t *devp) +{ + return ds_device_open (open_port, reply_port, reply_port_type, mode, name, devp); +} + io_return_t ds_device_close (device_t dev) { diff --git a/include/device/device.defs b/include/device/device.defs index d1df799d..7f316129 100644 --- a/include/device/device.defs +++ b/include/device/device.defs @@ -53,6 +53,7 @@ type reply_port_t = MACH_MSG_TYPE_MAKE_SEND_ONCE | polymorphic #endif /* KERNEL_SERVER */ ; +/* Deprecated in favor of device_open_new. */ routine device_open( master_port : mach_port_t; sreplyport reply_port : reply_port_t; @@ -110,7 +111,27 @@ routine device_read_inband( out data : io_buf_ptr_inband_t ); +#if defined(KERNEL_SERVER) || defined(DEVICE_ENABLE_DEVICE_OPEN_NEW) +routine device_open_new( + master_port : mach_port_t; + sreplyport reply_port : reply_port_t; + mode : dev_mode_t; + name : new_dev_name_t; + out device : device_t = + MACH_MSG_TYPE_PORT_SEND + ctype: mach_port_t +#if KERNEL_SERVER + outtran: mach_port_t convert_device_to_port(device_t) +#else +#ifdef DEVICE_OUTTRAN + outtran: DEVICE_OUTTRAN +#endif +#endif /* KERNEL_SERVER */ + ); +#else skip; /* old xxx_device_set_status */ +#endif + skip; /* old xxx_device_get_status */ skip; /* old xxx_device_set_filter*/ diff --git a/include/device/device_request.defs b/include/device/device_request.defs index 7ea8637c..a8af3a89 100644 --- a/include/device/device_request.defs +++ b/include/device/device_request.defs @@ -45,6 +45,7 @@ type reply_port_t = MACH_MSG_TYPE_MAKE_SEND_ONCE #endif /* KERNEL_SERVER */ ; +/* Deprecated in favor of device_open_new_request. */ simpleroutine device_open_request( device_server_port : mach_port_t; ureplyport reply_port : reply_port_t; @@ -85,3 +86,10 @@ simpleroutine device_read_request_inband( in recnum : recnum_t; in bytes_wanted : int ); + +simpleroutine device_open_new_request( + device_server_port : mach_port_t; + ureplyport reply_port : reply_port_t; + in mode : dev_mode_t; + in name : new_dev_name_t + ); diff --git a/include/device/device_types.defs b/include/device/device_types.defs index de8dbb02..c74bff51 100644 --- a/include/device/device_types.defs +++ b/include/device/device_types.defs @@ -56,6 +56,8 @@ type recnum_t = rpc_recnum_t type dev_mode_t = uint32_t; type dev_flavor_t = uint32_t; type dev_name_t = (MACH_MSG_TYPE_STRING_C, 8*128); +type new_dev_name_t = c_string[128] + ctype: dev_name_t; type dev_status_t = array[*:1024] of int; type io_buf_ptr_t = ^array[] of MACH_MSG_TYPE_INTEGER_8; type io_buf_ptr_inband_t= array[*:128] of char; -- 2.39.2