diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-07-09 22:28:58 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-07-09 22:43:01 +0200 |
commit | 2dbf108457d0a0057cc63d5b3b89fd4da48d2a72 (patch) | |
tree | 7de245e353f736224b07609dfa81b637c1fb2cf4 /i386 | |
parent | d7d9a1e104c21183506935f26d59bb00161bd797 (diff) | |
download | gnumach-2dbf108457d0a0057cc63d5b3b89fd4da48d2a72.tar.gz gnumach-2dbf108457d0a0057cc63d5b3b89fd4da48d2a72.tar.bz2 gnumach-2dbf108457d0a0057cc63d5b3b89fd4da48d2a72.zip |
Add vm_allocate_contiguous RPC
This allows privileged userland drivers to allocate buffers for e.g. DMA,
and thus need them to be physically contiguous and get their physical
address.
Initial work by Zheng Da, reworked by Richard Braun, Damien Zammit, and
myself.
* doc/mach.texi (vm_allocate_contiguous): New RPC.
* i386/include/mach/i386/machine_types.defs (rpc_phys_addr_t): New type.
* i386/include/mach/i386/vm_types.h [!MACH_KERNEL] (phys_addr_t): Set
type to 64bits.
(rpc_phys_addr_t): New type, always 64bits.
* include/mach/gnumach.defs (vm_allocate_contiguous):New RPC.
* vm/vm_user.c (vm_allocate_contiguous): New function.
Diffstat (limited to 'i386')
-rwxr-xr-x | i386/include/mach/i386/machine_types.defs | 5 | ||||
-rw-r--r-- | i386/include/mach/i386/vm_types.h | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/i386/include/mach/i386/machine_types.defs b/i386/include/mach/i386/machine_types.defs index 6ff93dbd..dfbc521e 100755 --- a/i386/include/mach/i386/machine_types.defs +++ b/i386/include/mach/i386/machine_types.defs @@ -58,4 +58,9 @@ type natural_t = uint32_t; */ type integer_t = int32_t; +/* + * Physical address size + */ +type rpc_phys_addr_t = uint64_t; + #endif /* _MACHINE_MACHINE_TYPES_DEFS_ */ diff --git a/i386/include/mach/i386/vm_types.h b/i386/include/mach/i386/vm_types.h index 28609e7c..29b9e1e6 100644 --- a/i386/include/mach/i386/vm_types.h +++ b/i386/include/mach/i386/vm_types.h @@ -72,11 +72,16 @@ typedef vm_offset_t * vm_offset_array_t; /* * A type for physical addresses. */ +#ifdef MACH_KERNEL #ifdef PAE typedef unsigned long long phys_addr_t; #else /* PAE */ typedef unsigned long phys_addr_t; #endif /* PAE */ +#else +typedef unsigned long long phys_addr_t; +#endif +typedef unsigned long long rpc_phys_addr_t; /* * A vm_size_t is the proper type for e.g. |