--- 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:45:30 1.1.1.2 @@ -32,7 +32,7 @@ #include #include -#include +#include #include #include @@ -42,9 +42,7 @@ #include #include -#ifdef i386 -#include -#endif +#include /* * Device structure routines: reference counting, port->device. @@ -64,7 +62,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 +70,9 @@ zone_t dev_hdr_zone; */ void dev_number_enter(device) - register mach_device_t device; + 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 +84,9 @@ dev_number_enter(device) */ void dev_number_remove(device) - register mach_device_t device; + 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); @@ -103,8 +101,8 @@ dev_number_lookup(ops, devnum) 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) { @@ -126,8 +124,8 @@ device_lookup(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); @@ -200,7 +198,7 @@ device_lookup(name) */ void mach_device_reference(device) - register mach_device_t device; + mach_device_t device; { simple_lock(&device->ref_lock); device->ref_count++; @@ -213,7 +211,7 @@ mach_device_reference(device) */ void mach_device_deallocate(device) - register mach_device_t device; + mach_device_t device; { simple_lock(&device->ref_lock); if (--device->ref_count > 0) { @@ -235,7 +233,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); } /* @@ -252,10 +250,10 @@ decl_simple_lock_data(, */ void dev_port_enter(device) - register mach_device_t device; + 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,9 +262,6 @@ 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 } /* @@ -274,7 +269,7 @@ dev_port_enter(device) */ void dev_port_remove(device) - register mach_device_t device; + mach_device_t device; { ipc_kobject_set(device->port, IKO_NULL, IKOT_NONE); mach_device_deallocate(device); @@ -288,7 +283,7 @@ device_t dev_port_lookup(port) ipc_port_t port; { - register device_t device; + device_t device; if (!IP_VALID(port)) return (DEVICE_NULL); @@ -296,12 +291,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 +307,12 @@ dev_port_lookup(port) */ ipc_port_t convert_device_to_port(device) - register device_t device; + 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 } /* @@ -351,9 +326,9 @@ 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; + int i; + queue_t q; + mach_device_t dev, prev_dev; for (i = 0, q = &dev_number_hash_table[0]; i < NDEVHASH; @@ -387,12 +362,10 @@ dev_map(routine, port) /* * Initialization */ -#define NDEVICES 256 - void dev_lookup_init() { - register int i; + int i; simple_lock_init(&dev_number_lock); @@ -401,9 +374,6 @@ dev_lookup_init() 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); }