~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/boot/bioscall.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-or-later */
  2 /* -----------------------------------------------------------------------
  3  *
  4  *   Copyright 2009-2014 Intel Corporation; author H. Peter Anvin
  5  *
  6  * ----------------------------------------------------------------------- */
  7 
  8 /*
  9  * "Glove box" for BIOS calls.  Avoids the constant problems with BIOSes
 10  * touching registers they shouldn't be.
 11  */
 12 
 13         .code16
 14         .section ".inittext","ax"
 15         .globl  intcall
 16         .type   intcall, @function
 17 intcall:
 18         /* Self-modify the INT instruction.  Ugly, but works. */
 19         cmpb    %al, 3f
 20         je      1f
 21         movb    %al, 3f
 22         jmp     1f              /* Synchronize pipeline */
 23 1:
 24         /* Save state */
 25         pushfl
 26         pushw   %fs
 27         pushw   %gs
 28         pushal
 29 
 30         /* Copy input state to stack frame */
 31         subw    $44, %sp
 32         movw    %dx, %si
 33         movw    %sp, %di
 34         movw    $11, %cx
 35         rep; movsl
 36 
 37         /* Pop full state from the stack */
 38         popal
 39         popw    %gs
 40         popw    %fs
 41         popw    %es
 42         popw    %ds
 43         popfl
 44 
 45         /* Actual INT */
 46         .byte   0xcd            /* INT opcode */
 47 3:      .byte   0
 48 
 49         /* Push full state to the stack */
 50         pushfl
 51         pushw   %ds
 52         pushw   %es
 53         pushw   %fs
 54         pushw   %gs
 55         pushal
 56 
 57         /* Re-establish C environment invariants */
 58         cld
 59         movzwl  %sp, %esp
 60         movw    %cs, %ax
 61         movw    %ax, %ds
 62         movw    %ax, %es
 63 
 64         /* Copy output state from stack frame */
 65         movw    68(%esp), %di   /* Original %cx == 3rd argument */
 66         andw    %di, %di
 67         jz      4f
 68         movw    %sp, %si
 69         movw    $11, %cx
 70         rep; movsl
 71 4:      addw    $44, %sp
 72 
 73         /* Restore state and return */
 74         popal
 75         popw    %gs
 76         popw    %fs
 77         popfl
 78         retl
 79         .size   intcall, .-intcall

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php