<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hello,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have a need to access 32 bit address space from within a 16 bit option ROM I’m writing.  As a test I added code to load the gdt as required to set up 32 bit protected mode but I’ve encountered a problem.  Below are my code and gdt structures. 
 My issue is that when the ljmp is executed the model reboots (this is running on seabios under Qemu).  I suspect a GP violation but can’t seem to put my finger on it.  I tried defining an idt containing a handler that hangs (i.e. jmp .) but was never successful
 in seeing that work.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Does anyone have ideas for why this won’t work?  Could the Qemu environment restrict this?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Bob<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">--------------------------------------------<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">go_to_32bit_protected_mode:<o:p></o:p></p>
<p class="MsoNormal">        cli<o:p></o:p></p>
<p class="MsoNormal">        cld<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        lgdtw %cs:opRom_gdt_32<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        movl %cr0, %eax<o:p></o:p></p>
<p class="MsoNormal">        orl $1, %eax<o:p></o:p></p>
<p class="MsoNormal">        movl %eax, %cr0<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        ljmp $MODE32_CS_SEL, $pmode<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        .code32<o:p></o:p></p>
<p class="MsoNormal">pmode:<o:p></o:p></p>
<p class="MsoNormal">        movl $MODE32_DS_SEL, %eax<o:p></o:p></p>
<p class="MsoNormal">        movl $16, %eax<o:p></o:p></p>
<p class="MsoNormal">        movw %ax, %ds<o:p></o:p></p>
<p class="MsoNormal">        movw %ax, %es<o:p></o:p></p>
<p class="MsoNormal">        movw %ax, %ss<o:p></o:p></p>
<p class="MsoNormal">        movw %ax, %fs<o:p></o:p></p>
<p class="MsoNormal">        movw %ax, %gs<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        sti<o:p></o:p></p>
<p class="MsoNormal">        ret<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">// 32 bit protected mode GDT descriptors<o:p></o:p></p>
<p class="MsoNormal">opRom_gdt_32_descs_start:<o:p></o:p></p>
<p class="MsoNormal">.quad 0x0<o:p></o:p></p>
<p class="MsoNormal">.quad 0x00CF9B000000FFFF<o:p></o:p></p>
<p class="MsoNormal">.quad 0x00CF93000000FFFF<o:p></o:p></p>
<p class="MsoNormal">.quad 0x00CFFA000000FFFF<o:p></o:p></p>
<p class="MsoNormal">.quad 0x00CFF2000000FFFF<o:p></o:p></p>
<p class="MsoNormal">opRom_gdt_32_descs_end:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">opRom_gdt_32:<o:p></o:p></p>
<p class="MsoNormal">.word  (opRom_gdt_32_descs_end - opRom_gdt_32_descs_start) - 1<o:p></o:p></p>
<p class="MsoNormal">.long  opRom_gdt_32_descs_start<o:p></o:p></p>
</div>
<p class="p1"><span class="s1"><strong>Western Digital Corporation (and its subsidiaries) E-mail Confidentiality Notice & Disclaimer:</strong></span></p><p class="MsoNormal">








</p><p class="p1"><span class="s1">This e-mail and any files transmitted with it may contain confidential or legally privileged information of WDC and/or its affiliates, and are intended solely for the use of the individual or entity to which they are addressed. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited. If you have received this e-mail in error, please notify the sender immediately and delete the e-mail in its entirety from your system.</span></p></body>
</html>