X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/91447636331957f3d9b5ca5b508f07c526b0074d..5d5c5d0d5b79ade9a973d55186ffda2638ba2b6e:/osfmk/vm/device_vm.c?ds=sidebyside diff --git a/osfmk/vm/device_vm.c b/osfmk/vm/device_vm.c index 464220034..8a72765c0 100644 --- a/osfmk/vm/device_vm.c +++ b/osfmk/vm/device_vm.c @@ -1,23 +1,31 @@ /* * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_LICENSE_OSREFERENCE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. - * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. - * - * @APPLE_LICENSE_HEADER_END@ + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the + * License may not be used to create, or enable the creation or + * redistribution of, unlawful or unlicensed copies of an Apple operating + * system, or to circumvent, violate, or enable the circumvention or + * violation of, any terms of an Apple operating system software license + * agreement. + * + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_OSREFERENCE_HEADER_END@ */ #include @@ -57,12 +65,27 @@ /* until component support available */ -int device_pager_workaround; +const struct memory_object_pager_ops device_pager_ops = { + device_pager_reference, + device_pager_deallocate, + device_pager_init, + device_pager_terminate, + device_pager_data_request, + device_pager_data_return, + device_pager_data_initialize, + device_pager_data_unlock, + device_pager_synchronize, + device_pager_unmap, + "device pager" +}; typedef int device_port_t; +/* + * The start of "struct device_pager" MUST match a "struct memory_object". + */ typedef struct device_pager { - int *pager; /* pager workaround pointer */ + memory_object_pager_ops_t pager_ops; /* == &device_pager_ops */ unsigned int pager_ikot; /* fake ip_kotype() */ unsigned int ref_count; /* reference count */ memory_object_control_t control_handle; /* mem object's cntrl handle */ @@ -161,7 +184,7 @@ device_pager_populate_object( return kr; if(!vm_object->phys_contiguous) { - int null_size = 0; + unsigned int null_size = 0; kr = vm_object_upl_request(vm_object, (vm_object_offset_t)offset, size, &upl, NULL, &null_size, (UPL_NO_SYNC | UPL_CLEAN_IN_PLACE)); @@ -187,7 +210,7 @@ device_pager_lookup( device_pager_t device_object; device_object = (device_pager_t)name; - assert(device_object->pager == &device_pager_workaround); + assert(device_object->pager_ops == &device_pager_ops); return (device_object); } @@ -254,9 +277,11 @@ device_pager_init( /*ARGSUSED6*/ kern_return_t device_pager_data_return( - memory_object_t mem_obj, - memory_object_offset_t offset, - vm_size_t data_cnt, + memory_object_t mem_obj, + memory_object_offset_t offset, + vm_size_t data_cnt, + __unused memory_object_offset_t *resid_offset, + __unused int *io_error, __unused boolean_t dirty, __unused boolean_t kernel_copy, __unused int upl_flags) @@ -336,7 +361,7 @@ device_pager_deallocate( * We still have to release the "memory object control" * handle. */ - assert(device_control->object == VM_OBJECT_NULL); + assert(device_control->moc_object == VM_OBJECT_NULL); memory_object_control_deallocate(device_control); device_object->control_handle = MEMORY_OBJECT_CONTROL_NULL; @@ -419,7 +444,7 @@ device_object_create() device_object = (struct device_pager *) zalloc(device_pager_zone); if (device_object == DEVICE_PAGER_NULL) return(DEVICE_PAGER_NULL); - device_object->pager = &device_pager_workaround; + device_object->pager_ops = &device_pager_ops; device_object->pager_ikot = IKOT_MEMORY_OBJECT; device_object->ref_count = 1; device_object->control_handle = MEMORY_OBJECT_CONTROL_NULL;