summaryrefslogtreecommitdiff
path: root/device/dev_pager.c
diff options
context:
space:
mode:
Diffstat (limited to 'device/dev_pager.c')
-rw-r--r--device/dev_pager.c167
1 files changed, 74 insertions, 93 deletions
diff --git a/device/dev_pager.c b/device/dev_pager.c
index e0ca2c76..815473a9 100644
--- a/device/dev_pager.c
+++ b/device/dev_pager.c
@@ -55,9 +55,8 @@
#include <device/dev_hdr.h>
#include <device/io_req.h>
#include <device/memory_object_reply.user.h>
-
-extern vm_offset_t block_io_mmap(); /* dummy routine to allow
- mmap for block devices */
+#include <device/dev_pager.h>
+#include <device/blkio.h>
/*
* The device pager routines are called directly from the message
@@ -127,14 +126,14 @@ typedef struct dev_pager *dev_pager_t;
struct kmem_cache dev_pager_cache;
-void dev_pager_reference(register dev_pager_t ds)
+void dev_pager_reference(dev_pager_t ds)
{
simple_lock(&ds->lock);
ds->ref_count++;
simple_unlock(&ds->lock);
}
-void dev_pager_deallocate(register dev_pager_t ds)
+void dev_pager_deallocate(dev_pager_t ds)
{
simple_lock(&ds->lock);
if (--ds->ref_count > 0) {
@@ -169,8 +168,8 @@ decl_simple_lock_data(,
void dev_pager_hash_init(void)
{
- register int i;
- register vm_size_t size;
+ int i;
+ vm_size_t size;
size = sizeof(struct dev_pager_entry);
kmem_cache_init(&dev_pager_hash_cache, "dev_pager_entry", size, 0,
@@ -181,10 +180,10 @@ void dev_pager_hash_init(void)
}
void dev_pager_hash_insert(
- ipc_port_t name_port,
- dev_pager_t rec)
+ const ipc_port_t name_port,
+ const dev_pager_t rec)
{
- register dev_pager_entry_t new_entry;
+ dev_pager_entry_t new_entry;
new_entry = (dev_pager_entry_t) kmem_cache_alloc(&dev_pager_hash_cache);
new_entry->name = name_port;
@@ -196,10 +195,10 @@ void dev_pager_hash_insert(
simple_unlock(&dev_pager_hash_lock);
}
-void dev_pager_hash_delete(ipc_port_t name_port)
+void dev_pager_hash_delete(const ipc_port_t name_port)
{
- register queue_t bucket;
- register dev_pager_entry_t entry;
+ queue_t bucket;
+ dev_pager_entry_t entry;
bucket = &dev_pager_hashtable[dev_pager_hash(name_port)];
@@ -217,11 +216,11 @@ void dev_pager_hash_delete(ipc_port_t name_port)
kmem_cache_free(&dev_pager_hash_cache, (vm_offset_t)entry);
}
-dev_pager_t dev_pager_hash_lookup(ipc_port_t name_port)
+dev_pager_t dev_pager_hash_lookup(const ipc_port_t name_port)
{
- register queue_t bucket;
- register dev_pager_entry_t entry;
- register dev_pager_t pager;
+ queue_t bucket;
+ dev_pager_entry_t entry;
+ dev_pager_t pager;
bucket = &dev_pager_hashtable[dev_pager_hash(name_port)];
@@ -241,13 +240,13 @@ dev_pager_t dev_pager_hash_lookup(ipc_port_t name_port)
}
kern_return_t device_pager_setup(
- mach_device_t device,
- int prot,
- vm_offset_t offset,
- vm_size_t size,
- mach_port_t *pager)
+ const mach_device_t device,
+ int prot,
+ vm_offset_t offset,
+ vm_size_t size,
+ mach_port_t *pager)
{
- register dev_pager_t d;
+ dev_pager_t d;
/*
* Verify the device is indeed mappable
@@ -318,28 +317,20 @@ void device_pager_release(memory_object_t object)
boolean_t device_pager_debug = FALSE;
-boolean_t device_pager_data_request_done(); /* forward */
-boolean_t device_pager_data_write_done(); /* forward */
-
-
kern_return_t device_pager_data_request(
- ipc_port_t pager,
- ipc_port_t pager_request,
- vm_offset_t offset,
- vm_size_t length,
- vm_prot_t protection_required)
+ const ipc_port_t pager,
+ const ipc_port_t pager_request,
+ vm_offset_t offset,
+ vm_size_t length,
+ vm_prot_t protection_required)
{
- register dev_pager_t ds;
-
-#ifdef lint
- protection_required++;
-#endif /* lint */
+ dev_pager_t ds;
if (device_pager_debug)
printf("(device_pager)data_request: pager=%p, offset=0x%lx, length=0x%x\n",
pager, offset, length);
- ds = dev_pager_hash_lookup((ipc_port_t)pager);
+ ds = dev_pager_hash_lookup(pager);
if (ds == DEV_PAGER_NULL)
panic("(device_pager)data_request: lookup failed");
@@ -347,8 +338,7 @@ kern_return_t device_pager_data_request(
panic("(device_pager)data_request: bad pager_request");
if (ds->type == CHAR_PAGER_TYPE) {
- register vm_object_t object;
- vm_offset_t device_map_page(void *,vm_offset_t);
+ vm_object_t object;
object = vm_object_lookup(pager_request);
if (object == VM_OBJECT_NULL) {
@@ -361,13 +351,13 @@ kern_return_t device_pager_data_request(
vm_object_page_map(object,
offset, length,
- device_map_page, (char *)ds);
+ device_map_page, (void *)ds);
vm_object_deallocate(object);
}
else {
- register io_req_t ior;
- register mach_device_t device;
+ io_req_t ior;
+ mach_device_t device;
io_return_t result;
panic("(device_pager)data_request: dev pager");
@@ -415,7 +405,7 @@ kern_return_t device_pager_data_request(
/*
* Always called by io_done thread.
*/
-boolean_t device_pager_data_request_done(register io_req_t ior)
+boolean_t device_pager_data_request_done(io_req_t ior)
{
vm_offset_t start_alloc, end_alloc;
vm_size_t size_read;
@@ -424,15 +414,15 @@ boolean_t device_pager_data_request_done(register io_req_t ior)
size_read = ior->io_count;
if (ior->io_residual) {
if (device_pager_debug)
- printf("(device_pager)data_request_done: r: 0x%lx\n",ior->io_residual);
+ printf("(device_pager)data_request_done: r: 0x%lx\n", ior->io_residual);
memset((&ior->io_data[ior->io_count - ior->io_residual]), 0,
- (unsigned) ior->io_residual);
+ (size_t) ior->io_residual);
}
} else {
size_read = ior->io_count - ior->io_residual;
}
- start_alloc = trunc_page((vm_offset_t)ior->io_data);
+ start_alloc = trunc_page(ior->io_data);
end_alloc = start_alloc + round_page(ior->io_alloc_size);
if (ior->io_error == D_SUCCESS) {
@@ -467,20 +457,20 @@ boolean_t device_pager_data_request_done(register io_req_t ior)
}
kern_return_t device_pager_data_write(
- ipc_port_t pager,
- ipc_port_t pager_request,
- register vm_offset_t offset,
- register pointer_t addr,
+ const ipc_port_t pager,
+ const ipc_port_t pager_request,
+ vm_offset_t offset,
+ pointer_t addr,
vm_size_t data_count)
{
- register dev_pager_t ds;
- register mach_device_t device;
- register io_req_t ior;
+ dev_pager_t ds;
+ mach_device_t device;
+ io_req_t ior;
kern_return_t result;
panic("(device_pager)data_write: called");
- ds = dev_pager_hash_lookup((ipc_port_t)pager);
+ ds = dev_pager_hash_lookup(pager);
if (ds == DEV_PAGER_NULL)
panic("(device_pager)data_write: lookup failed");
@@ -523,8 +513,7 @@ kern_return_t device_pager_data_write(
return (KERN_SUCCESS);
}
-boolean_t device_pager_data_write_done(ior)
- register io_req_t ior;
+boolean_t device_pager_data_write_done(io_req_t ior)
{
device_write_dealloc(ior);
mach_device_deallocate(ior->io_device);
@@ -533,19 +522,19 @@ boolean_t device_pager_data_write_done(ior)
}
kern_return_t device_pager_copy(
- ipc_port_t pager,
- ipc_port_t pager_request,
- register vm_offset_t offset,
- register vm_size_t length,
- ipc_port_t new_pager)
+ const ipc_port_t pager,
+ const ipc_port_t pager_request,
+ vm_offset_t offset,
+ vm_size_t length,
+ const ipc_port_t new_pager)
{
panic("(device_pager)copy: called");
}
kern_return_t
device_pager_supply_completed(
- ipc_port_t pager,
- ipc_port_t pager_request,
+ const ipc_port_t pager,
+ const ipc_port_t pager_request,
vm_offset_t offset,
vm_size_t length,
kern_return_t result,
@@ -556,10 +545,10 @@ device_pager_supply_completed(
kern_return_t
device_pager_data_return(
- ipc_port_t pager,
- ipc_port_t pager_request,
+ const ipc_port_t pager,
+ const ipc_port_t pager_request,
vm_offset_t offset,
- register pointer_t addr,
+ pointer_t addr,
vm_size_t data_cnt,
boolean_t dirty,
boolean_t kernel_copy)
@@ -569,7 +558,7 @@ device_pager_data_return(
kern_return_t
device_pager_change_completed(
- ipc_port_t pager,
+ const ipc_port_t pager,
boolean_t may_cache,
memory_object_copy_strategy_t copy_strategy)
{
@@ -586,7 +575,7 @@ vm_offset_t device_map_page(
void *dsp,
vm_offset_t offset)
{
- register dev_pager_t ds = (dev_pager_t) dsp;
+ dev_pager_t ds = (dev_pager_t) dsp;
return pmap_phys_address(
(*(ds->device->dev_ops->d_mmap))
@@ -594,12 +583,12 @@ vm_offset_t device_map_page(
}
kern_return_t device_pager_init_pager(
- ipc_port_t pager,
- ipc_port_t pager_request,
- ipc_port_t pager_name,
- vm_size_t pager_page_size)
+ const ipc_port_t pager,
+ const ipc_port_t pager_request,
+ const ipc_port_t pager_name,
+ vm_size_t pager_page_size)
{
- register dev_pager_t ds;
+ dev_pager_t ds;
if (device_pager_debug)
printf("(device_pager)init: pager=%p, request=%p, name=%p\n",
@@ -645,11 +634,11 @@ kern_return_t device_pager_init_pager(
}
kern_return_t device_pager_terminate(
- ipc_port_t pager,
- ipc_port_t pager_request,
- ipc_port_t pager_name)
+ const ipc_port_t pager,
+ const ipc_port_t pager_request,
+ const ipc_port_t pager_name)
{
- register dev_pager_t ds;
+ dev_pager_t ds;
assert(IP_VALID(pager_request));
assert(IP_VALID(pager_name));
@@ -687,37 +676,29 @@ kern_return_t device_pager_terminate(
}
kern_return_t device_pager_data_unlock(
- ipc_port_t memory_object,
- ipc_port_t memory_control_port,
+ const ipc_port_t memory_object,
+ const ipc_port_t memory_control_port,
vm_offset_t offset,
vm_size_t length,
vm_prot_t desired_access)
{
-#ifdef lint
- memory_object++; memory_control_port++; offset++; length++; desired_access++;
-#endif /* lint */
-
panic("(device_pager)data_unlock: called");
return (KERN_FAILURE);
}
kern_return_t device_pager_lock_completed(
- ipc_port_t memory_object,
- ipc_port_t pager_request_port,
- vm_offset_t offset,
- vm_size_t length)
+ const ipc_port_t memory_object,
+ const ipc_port_t pager_request_port,
+ vm_offset_t offset,
+ vm_size_t length)
{
-#ifdef lint
- memory_object++; pager_request_port++; offset++; length++;
-#endif /* lint */
-
panic("(device_pager)lock_completed: called");
return (KERN_FAILURE);
}
void device_pager_init(void)
{
- register vm_size_t size;
+ vm_size_t size;
/*
* Initialize cache of paging structures.