]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[comboot] Remove userptr_t from COM32 API implementation
authorMichael Brown <mcb30@ipxe.org>
Mon, 28 Apr 2025 23:24:55 +0000 (00:24 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 28 Apr 2025 23:24:55 +0000 (00:24 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/include/librm.h
src/arch/x86/interface/syslinux/com32_call.c
src/arch/x86/transitions/librm_mgmt.c

index 379b6d8496b256abc9555d941976aa9e95dafe1b..22b7e3933ad7bc8a15ef35e997682892fdd7cc61 100644 (file)
@@ -188,8 +188,8 @@ extern const uint16_t __text16 ( rm_cs );
 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__
index 47be69f9fa0a5e7d87367d913fae555c4c4361b1..a23f46436f809732dfabb88f0165ef5acb1aeae0 100644 (file)
@@ -49,7 +49,7 @@ void __asmcall com32_intcall ( uint8_t interrupt, physaddr_t inregs_phys, physad
        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;
@@ -108,7 +108,7 @@ void __asmcall com32_intcall ( uint8_t interrupt, physaddr_t inregs_phys, physad
 
        if ( outregs_phys ) {
                memcpy ( phys_to_virt ( outregs_phys ),
-                        virt_to_user ( &com32_regs ), sizeof ( com32sys_t ) );
+                        &com32_regs, sizeof ( com32sys_t ) );
        }
 }
 
@@ -120,7 +120,7 @@ void __asmcall com32_farcall ( uint32_t proc, physaddr_t inregs_phys, physaddr_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;
@@ -168,7 +168,7 @@ void __asmcall com32_farcall ( uint32_t proc, physaddr_t inregs_phys, physaddr_t
 
        if ( outregs_phys ) {
                memcpy ( phys_to_virt ( outregs_phys ),
-                        virt_to_user ( &com32_regs ), sizeof ( com32sys_t ) );
+                        &com32_regs, sizeof ( com32sys_t ) );
        }
 }
 
@@ -181,7 +181,7 @@ int __asmcall com32_cfarcall ( uint32_t proc, physaddr_t stack, size_t stacksz )
        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__ (
@@ -190,7 +190,7 @@ int __asmcall com32_cfarcall ( uint32_t proc, physaddr_t stack, size_t stacksz )
                :
                : "ecx", "edx" );
 
-       remove_user_from_rm_stack ( 0, stacksz );
+       remove_from_rm_stack ( NULL, stacksz );
 
        return eax;
 }
index 5a6942825c803ab3ba10223376845ad78962ad89..da5055cd817c31a7a50bba6b1c8450598f4f483d 100644 (file)
@@ -58,35 +58,36 @@ static struct profiler timer_irq_profiler __profiler = { .name = "irq.timer" };
 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