extern const uint16_t __text16 ( rm_ds );
#define rm_ds __use_text16 ( rm_ds )
-extern uint16_t copy_user_to_rm_stack ( userptr_t data, size_t size );
-extern void remove_user_from_rm_stack ( userptr_t data, size_t size );
+extern uint16_t copy_to_rm_stack ( const void *data, size_t size );
+extern void remove_from_rm_stack ( void *data, size_t size );
/* CODE_DEFAULT: restore default .code32/.code64 directive */
#ifdef __x86_64__
DBGC ( &com32_regs, "COM32 INT%x in %#08lx out %#08lx\n",
interrupt, inregs_phys, outregs_phys );
- memcpy ( virt_to_user( &com32_regs ), phys_to_virt ( inregs_phys ),
+ memcpy ( &com32_regs, phys_to_virt ( inregs_phys ),
sizeof ( com32sys_t ) );
com32_int_vector = interrupt;
if ( outregs_phys ) {
memcpy ( phys_to_virt ( outregs_phys ),
- virt_to_user ( &com32_regs ), sizeof ( com32sys_t ) );
+ &com32_regs, sizeof ( com32sys_t ) );
}
}
DBGC ( &com32_regs, "COM32 farcall %04x:%04x in %#08lx out %#08lx\n",
( proc >> 16 ), ( proc & 0xffff ), inregs_phys, outregs_phys );
- memcpy ( virt_to_user( &com32_regs ), phys_to_virt ( inregs_phys ),
+ memcpy ( &com32_regs, phys_to_virt ( inregs_phys ),
sizeof ( com32sys_t ) );
com32_farcall_proc = proc;
if ( outregs_phys ) {
memcpy ( phys_to_virt ( outregs_phys ),
- virt_to_user ( &com32_regs ), sizeof ( com32sys_t ) );
+ &com32_regs, sizeof ( com32sys_t ) );
}
}
DBGC ( &com32_regs, "COM32 cfarcall %04x:%04x params %#08lx+%#zx\n",
( proc >> 16 ), ( proc & 0xffff ), stack, stacksz );
- copy_user_to_rm_stack ( phys_to_virt ( stack ), stacksz );
+ copy_to_rm_stack ( phys_to_virt ( stack ), stacksz );
com32_farcall_proc = proc;
__asm__ __volatile__ (
:
: "ecx", "edx" );
- remove_user_from_rm_stack ( 0, stacksz );
+ remove_from_rm_stack ( NULL, stacksz );
return eax;
}
static struct profiler other_irq_profiler __profiler = { .name = "irq.other" };
/**
- * Allocate space on the real-mode stack and copy data there from a
- * user buffer
+ * Allocate space on the real-mode stack and copy data there
*
- * @v data User buffer
+ * @v data Stack data
* @v size Size of stack data
* @ret sp New value of real-mode stack pointer
*/
-uint16_t copy_user_to_rm_stack ( userptr_t data, size_t size ) {
- userptr_t rm_stack;
+uint16_t copy_to_rm_stack ( const void *data, size_t size ) {
+ void *rm_stack;
+
rm_sp -= size;
rm_stack = real_to_virt ( rm_ss, rm_sp );
memcpy ( rm_stack, data, size );
return rm_sp;
-};
+}
/**
- * Deallocate space on the real-mode stack, optionally copying back
- * data to a user buffer.
+ * Deallocate space on the real-mode stack, optionally copying back data
*
- * @v data User buffer
+ * @v data Stack data buffer, or NULL
* @v size Size of stack data
*/
-void remove_user_from_rm_stack ( userptr_t data, size_t size ) {
+void remove_from_rm_stack ( void *data, size_t size ) {
+ const void *rm_stack;
+
if ( data ) {
- userptr_t rm_stack = real_to_virt ( rm_ss, rm_sp );
- memcpy ( rm_stack, data, size );
+ rm_stack = real_to_virt ( rm_ss, rm_sp );
+ memcpy ( data, rm_stack, size );
}
rm_sp += size;
-};
+}
/**
* Set interrupt vector