[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] rombios: fix pointer argument to PMM



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1232968923 0
# Node ID c9dc7dcacc1d0c064a131da98a4063fa2cedd716
# Parent  f2ad1a7ca58231f098296b9c038ec90ee55b7b7a
rombios: fix pointer argument to PMM

The pointer to PMM function arguments must be flattened for protected
mode with zero-based segments.

Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx>
---
 tools/firmware/rombios/rombios.c |   32 ++++++++++++++++++++++++--------
 1 files changed, 24 insertions(+), 8 deletions(-)

diff -r f2ad1a7ca582 -r c9dc7dcacc1d tools/firmware/rombios/rombios.c
--- a/tools/firmware/rombios/rombios.c  Mon Jan 26 11:16:52 2009 +0000
+++ b/tools/firmware/rombios/rombios.c  Mon Jan 26 11:22:03 2009 +0000
@@ -10366,19 +10366,35 @@ pmm_structure:
   db 0,0,0,0,0 ;; reserved
 
 pmm_entry_point:
+  pushf
   pushad
-  mov   eax, esp
-  add   eax, #(8*4+2+2) ;; skip regs of pushad, ip, cs
-  push  eax ;; pointer to PMM function args
+; Calculate protected-mode address of PMM function args
+  xor  eax, eax
+  mov  ax, sp
+  xor  ebx, ebx
+  mov  bx, ss
+  shl  ebx, 4
+  lea  ebx, [eax+ebx+38] ;; ebx=(ss<<4)+sp+4(far call)+2(pushf)+32(pushad)
+  push ebx
+;
+; Stack layout at this point:
+;
+;        : +0x0    +0x2    +0x4    +0x6    +0x8    +0xa    +0xc    +0xe
+; -----------------------------------------------------------------------
+; sp     : [&arg1         ][edi           ][esi           ][ebp           ]
+; sp+0x10: [esp           ][ebx           ][edx           ][ecx           ]
+; sp+0x20: [eax           ][flags ][ip    ][cs    ][arg1  ][arg2, ...
+;
   call _pmm
-  mov   bx, sp
+  mov  bx, sp
 SEG SS
-  mov   [bx+(4+7*4)], ax
+  mov  [bx+0x20], ax
 SEG SS
-  mov   [bx+(4+5*4)], dx
-  pop   eax
+  mov  [bx+0x18], dx
+  pop  ebx
   popad
-  db 0xcb ;; lret
+  popf
+  retf
 #endif // BX_PMM
 
 ; parallel port detection: base address in DX, index in BX, timeout in CL

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.