librm_mgmt.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 FILE_LICENCE ( GPL2_OR_LATER );
00009
00010 #include <stdint.h>
00011 #include <realmode.h>
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 uint16_t copy_user_to_rm_stack ( userptr_t data, size_t size ) {
00027 userptr_t rm_stack;
00028 rm_sp -= size;
00029 rm_stack = real_to_user ( rm_ss, rm_sp );
00030 memcpy_user ( rm_stack, 0, data, 0, size );
00031 return rm_sp;
00032 };
00033
00034
00035
00036
00037
00038
00039
00040
00041 void remove_user_from_rm_stack ( userptr_t data, size_t size ) {
00042 if ( data ) {
00043 userptr_t rm_stack = real_to_user ( rm_ss, rm_sp );
00044 memcpy_user ( rm_stack, 0, data, 0, size );
00045 }
00046 rm_sp += size;
00047 };
00048
00049 PROVIDE_UACCESS_INLINE ( librm, phys_to_user );
00050 PROVIDE_UACCESS_INLINE ( librm, user_to_phys );
00051 PROVIDE_UACCESS_INLINE ( librm, virt_to_user );
00052 PROVIDE_UACCESS_INLINE ( librm, user_to_virt );
00053 PROVIDE_UACCESS_INLINE ( librm, userptr_add );
00054 PROVIDE_UACCESS_INLINE ( librm, memcpy_user );
00055 PROVIDE_UACCESS_INLINE ( librm, memmove_user );
00056 PROVIDE_UACCESS_INLINE ( librm, memset_user );
00057 PROVIDE_UACCESS_INLINE ( librm, strlen_user );
00058 PROVIDE_UACCESS_INLINE ( librm, memchr_user );