--- Gnu-Mach/device/dev_lookup.c 2020/09/02 04:36:57 1.1.1.1 +++ Gnu-Mach/device/dev_lookup.c 2020/09/02 04:47:52 1.1.1.3 @@ -32,7 +32,7 @@ #include #include -#include +#include #include #include @@ -42,9 +42,8 @@ #include #include -#ifdef i386 -#include -#endif +#include +#include /* * Device structure routines: reference counting, port->device. @@ -64,7 +63,7 @@ queue_head_t dev_number_hash_table[NDEVH decl_simple_lock_data(, dev_number_lock) -zone_t dev_hdr_zone; +struct kmem_cache dev_hdr_cache; /* * Enter device in the number lookup table. @@ -72,9 +71,9 @@ zone_t dev_hdr_zone; */ void dev_number_enter(device) - register mach_device_t device; + const mach_device_t device; { - register queue_t q; + queue_t q; q = &dev_number_hash_table[DEV_NUMBER_HASH(device->dev_number)]; queue_enter(q, device, mach_device_t, number_chain); @@ -86,9 +85,9 @@ dev_number_enter(device) */ void dev_number_remove(device) - register mach_device_t device; + const mach_device_t device; { - register queue_t q; + queue_t q; q = &dev_number_hash_table[DEV_NUMBER_HASH(device->dev_number)]; queue_remove(q, device, mach_device_t, number_chain); @@ -100,11 +99,11 @@ dev_number_remove(device) */ mach_device_t dev_number_lookup(ops, devnum) - dev_ops_t ops; + const dev_ops_t ops; int devnum; { - register queue_t q; - register mach_device_t device; + queue_t q; + mach_device_t device; q = &dev_number_hash_table[DEV_NUMBER_HASH(devnum)]; queue_iterate(q, device, mach_device_t, number_chain) { @@ -121,13 +120,12 @@ dev_number_lookup(ops, devnum) * table. */ mach_device_t -device_lookup(name) - char * name; +device_lookup(char *name) { dev_ops_t dev_ops; int dev_minor; - register mach_device_t device; - register mach_device_t new_device; + mach_device_t device; + mach_device_t new_device; /* * Get the device and unit number from the name. @@ -153,7 +151,7 @@ device_lookup(name) simple_unlock(&dev_number_lock); - new_device = (mach_device_t) zalloc(dev_hdr_zone); + new_device = (mach_device_t) kmem_cache_alloc(&dev_hdr_cache); simple_lock_init(&new_device->ref_lock); new_device->ref_count = 1; simple_lock_init(&new_device->lock); @@ -189,7 +187,7 @@ device_lookup(name) simple_unlock(&dev_number_lock); if (new_device != MACH_DEVICE_NULL) - zfree(dev_hdr_zone, (vm_offset_t)new_device); + kmem_cache_free(&dev_hdr_cache, (vm_offset_t)new_device); } return (device); @@ -199,8 +197,7 @@ device_lookup(name) * Add a reference to the device. */ void -mach_device_reference(device) - register mach_device_t device; +mach_device_reference(mach_device_t device) { simple_lock(&device->ref_lock); device->ref_count++; @@ -212,8 +209,7 @@ mach_device_reference(device) * structure if no references are left. */ void -mach_device_deallocate(device) - register mach_device_t device; +mach_device_deallocate(mach_device_t device) { simple_lock(&device->ref_lock); if (--device->ref_count > 0) { @@ -235,7 +231,7 @@ mach_device_deallocate(device) simple_unlock(&device->ref_lock); simple_unlock(&dev_number_lock); - zfree(dev_hdr_zone, (vm_offset_t)device); + kmem_cache_free(&dev_hdr_cache, (vm_offset_t)device); } /* @@ -244,18 +240,15 @@ mach_device_deallocate(device) /* * port-to-device lookup routines. */ -decl_simple_lock_data(, - dev_port_lock) /* * Enter a port-to-device mapping. */ void -dev_port_enter(device) - register mach_device_t device; +dev_port_enter(mach_device_t device) { mach_device_reference(device); -#ifdef i386 + ipc_kobject_set(device->port, (ipc_kobject_t) &device->dev, IKOT_DEVICE); device->dev.emul_data = device; @@ -264,17 +257,13 @@ dev_port_enter(device) device->dev.emul_ops = &mach_device_emulation_ops; } -#else - ipc_kobject_set(device->port, (ipc_kobject_t) device, IKOT_DEVICE); -#endif } /* * Remove a port-to-device mapping. */ void -dev_port_remove(device) - register mach_device_t device; +dev_port_remove(mach_device_t device) { ipc_kobject_set(device->port, IKO_NULL, IKOT_NONE); mach_device_deallocate(device); @@ -285,10 +274,9 @@ dev_port_remove(device) * Doesn't consume the naked send right; produces a device reference. */ device_t -dev_port_lookup(port) - ipc_port_t port; +dev_port_lookup(ipc_port_t port) { - register device_t device; + device_t device; if (!IP_VALID(port)) return (DEVICE_NULL); @@ -296,12 +284,8 @@ dev_port_lookup(port) ip_lock(port); if (ip_active(port) && (ip_kotype(port) == IKOT_DEVICE)) { device = (device_t) port->ip_kobject; -#ifdef i386 if (device->emul_ops->reference) (*device->emul_ops->reference)(device->emul_data); -#else - mach_device_reference(device); -#endif } else device = DEVICE_NULL; @@ -316,28 +300,12 @@ dev_port_lookup(port) */ ipc_port_t convert_device_to_port(device) - register device_t device; + const device_t device; { -#ifndef i386 - register ipc_port_t port; -#endif - if (device == DEVICE_NULL) return IP_NULL; -#ifdef i386 return (*device->emul_ops->dev_to_port) (device->emul_data); -#else - device_lock(device); - if (device->state == DEV_STATE_OPEN) - port = ipc_port_make_send(device->port); - else - port = IP_NULL; - device_unlock(device); - - mach_device_deallocate(device); - return port; -#endif } /* @@ -347,13 +315,13 @@ convert_device_to_port(device) * return FALSE. */ boolean_t -dev_map(routine, port) - boolean_t (*routine)(); - mach_port_t port; -{ - register int i; - register queue_t q; - register mach_device_t dev, prev_dev; +dev_map( + boolean_t (*routine)(), + mach_port_t port) +{ + int i; + queue_t q; + mach_device_t dev, prev_dev; for (i = 0, q = &dev_number_hash_table[0]; i < NDEVHASH; @@ -387,23 +355,16 @@ dev_map(routine, port) /* * Initialization */ -#define NDEVICES 256 - void -dev_lookup_init() +dev_lookup_init(void) { - register int i; + int i; simple_lock_init(&dev_number_lock); for (i = 0; i < NDEVHASH; i++) queue_init(&dev_number_hash_table[i]); - simple_lock_init(&dev_port_lock); - - dev_hdr_zone = zinit(sizeof(struct mach_device), - sizeof(struct mach_device) * NDEVICES, - PAGE_SIZE, - FALSE, - "open device entry"); + kmem_cache_init(&dev_hdr_cache, "mach_device", + sizeof(struct mach_device), 0, NULL, NULL, NULL, 0); }