<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>UbixOS V2: src/sys/kernel/smp.c File Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.4.7 --> <div class="tabs"> <ul> <li><a href="main.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="classes.html"><span>Data Structures</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> <li> <form action="search.php" method="get"> <table cellspacing="0" cellpadding="0" border="0"> <tr> <td><label> <u>S</u>earch for </label></td> <td><input type="text" name="query" value="" size="20" accesskey="s"/></td> </tr> </table> </form> </li> </ul></div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul></div> <div class="nav"> <a class="el" href="dir_897b6a2d7bab147dd1db58381aad3984.html">src</a> » <a class="el" href="dir_832905b1f7f5feaf61a306b40c0ac817.html">sys</a> » <a class="el" href="dir_7efffd2b1fae7bb6f2aa85845c863494.html">kernel</a></div> <h1>smp.c File Reference</h1><code>#include <<a class="el" href="smp_8h-source.html">ubixos/smp.h</a>></code><br> <code>#include <<a class="el" href="spinlock_8h-source.html">ubixos/spinlock.h</a>></code><br> <code>#include <<a class="el" href="kpanic_8h-source.html">ubixos/kpanic.h</a>></code><br> <code>#include <<a class="el" href="kprintf_8h-source.html">lib/kprintf.h</a>></code><br> <code>#include <<a class="el" href="lib_2string_8h-source.html">lib/string.h</a>></code><br> <code>#include <<a class="el" href="io_8h-source.html">sys/io.h</a>></code><br> <p> <a href="smp_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Data Structures</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structgdt__descr.html">gdt_descr</a></td></tr> <tr><td colspan="2"><br><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#e4dc28abba9d6b02a779ca1b8ffecd98">ap_trampoline_end</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#f4f760b6cb0a871253009bb20d70657d">ap_trampoline_start</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#70e557cb01aee676855cee05b0769288">apicMagic</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#98935271c68a482c194d4c784d814ddd">apicRead</a> (address)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#ab4a831897afae67446bf78c88123749">apicWrite</a> (unsigned int address, unsigned int data)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#8325315e2d1f564d9777ebd849c3296c">asm</a> (".globl cpuid \n""cpuid: \n"" pushl %<a class="el" href="ap-boot_8S.html#1c50f544178eb7e0af39bd078c5a986f">ebx</a> \n"" pushl %<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a> \n"" movl 12(%<a class="el" href="start_8S.html#fba1069006eb01caca2f78a33f379594">esp</a>),%<a class="el" href="sys__call__new_8S.html#e746cb10fae7ebdc395c8d0fd6caa393">eax</a> \n"" movl 16(%<a class="el" href="start_8S.html#fba1069006eb01caca2f78a33f379594">esp</a>),%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a> \n"" cpuid \n"" movl %<a class="el" href="sys__call__new_8S.html#e746cb10fae7ebdc395c8d0fd6caa393">eax</a>,0(%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>) \n"" movl %<a class="el" href="ap-boot_8S.html#1c50f544178eb7e0af39bd078c5a986f">ebx</a>,4(%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>) \n"" movl %ecx,8(%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>) \n"" movl %<a class="el" href="timer_8S.html#aa1f83238047e62298e33bed5682d71c">edx</a>,12(%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>) \n"" popl %<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a> \n"" popl %<a class="el" href="ap-boot_8S.html#1c50f544178eb7e0af39bd078c5a986f">ebx</a> \n"" ret \n")</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#c7cb5b4b2fbc61966a6dfc8044a7b800">c_ap_boot</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#66c37e11ba7abfcafc63146553b2cd16">cpu0_thread</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#5e82e9f1e0fec1ac5db2ebd16652a043">cpu1_thread</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#cfec913213194039ad31b2602bf8af4f">cpu2_thread</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#13735e9644e3c9a01bfc7785b31691ab">cpu3_thread</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#c89d80447fce7d622c7dfc6620039600">cpuidDetect</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="ubixfsv2_2types_8h.html#a4e0f27a9aca905e340c06d2dcae843c">uInt8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#452f210aee65a2a30cbc5cb8923a9881">cpuInfo</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#b9f1e8692e06eb164641f50aa4d7aed6">GDT_fixer</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static __inline__ <a class="el" href="ubixfsv2_2types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#0f6e384fb3ad325aa2406af715ff341d">getDr3</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="ubixfsv2_2types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#abe8182d15984977e87831f32527ff78">getEflags</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="ubixfsv2_2types_8h.html#a4e0f27a9aca905e340c06d2dcae843c">uInt8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#0844b0ab23ee41899fc5d622078d20d6">kernel_function</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static __inline__ void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#5607ecf06fd77905053dbb15eaf0ff6b">setDr3</a> (void *dr3)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#133d6aaf4635e4585ee54a0438d0bf36">setEflags</a> (<a class="el" href="ubixfsv2_2types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> eflags)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#ce31619db109aa8b20a916d48969928d">smpInit</a> ()</td></tr> <tr><td colspan="2"><br><h2>Variables</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="spinlock_8h.html#a240e9404b4ede1e0d714610080d1176">spinLock_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#71085af55092ee7b25d4bd346169ce89">bkl</a> = SPIN_LOCK_INITIALIZER</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structcpuinfo__t.html">cpuinfo_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#963def6fffd92dece6dd156abbcf4fa0">cpuinfo</a> [8]</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="spinlock_8h.html#a240e9404b4ede1e0d714610080d1176">spinLock_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#d5f78a3dc61e0ca7819dc3d5d5794419">cpuInfoLock</a> = SPIN_LOCK_INITIALIZER</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="ubixfsv2_2types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#29c1aa6c61dfac505825b96920fa447d">cpus</a> = 0</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="spinlock_8h.html#a240e9404b4ede1e0d714610080d1176">spinLock_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#9a5fd10dce49f2fe147d346b8de71902">initSpinLock</a> = SPIN_LOCK_INITIALIZER</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="ubixfsv2_2types_8h.html#a4e0f27a9aca905e340c06d2dcae843c">uInt8</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="smp_8c.html#5f2d0854cc28b4f2ef16a03061d9d237">vram</a> = (<a class="el" href="ubixfsv2_2types_8h.html#a4e0f27a9aca905e340c06d2dcae843c">uInt8</a> *)0xB8000</td></tr> </table> <hr><h2>Function Documentation</h2> <a class="anchor" name="e4dc28abba9d6b02a779ca1b8ffecd98"></a><!-- doxytag: member="smp.c::ap_trampoline_end" ref="e4dc28abba9d6b02a779ca1b8ffecd98" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void ap_trampoline_end </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Referenced by <a class="el" href="smp_8c-source.html#l00234">apicMagic()</a>. </div> </div><p> <a class="anchor" name="f4f760b6cb0a871253009bb20d70657d"></a><!-- doxytag: member="smp.c::ap_trampoline_start" ref="f4f760b6cb0a871253009bb20d70657d" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void ap_trampoline_start </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> </div> </div><p> <a class="anchor" name="70e557cb01aee676855cee05b0769288"></a><!-- doxytag: member="smp.c::apicMagic" ref="70e557cb01aee676855cee05b0769288" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void apicMagic </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00234">234</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c.html#e4dc28abba9d6b02a779ca1b8ffecd98">ap_trampoline_end()</a>, <a class="el" href="ap-boot_8S-source.html#l00006">ap_trampoline_start</a>, <a class="el" href="smp_8c-source.html#l00045">apicRead()</a>, <a class="el" href="smp_8c-source.html#l00049">apicWrite()</a>, <a class="el" href="kprintf_8c-source.html#l00038">kprintf()</a>, and <a class="el" href="lib_2string_8h.html#e33b18edb618c656b9b795b9fce2316c">memcpy()</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00161">smpInit()</a>. </div> </div><p> <a class="anchor" name="98935271c68a482c194d4c784d814ddd"></a><!-- doxytag: member="smp.c::apicRead" ref="98935271c68a482c194d4c784d814ddd" args="(address)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static unsigned int apicRead </td> <td>(</td> <td class="paramtype">address </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [inline, static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00045">45</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00234">apicMagic()</a>, and <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>. </div> </div><p> <a class="anchor" name="ab4a831897afae67446bf78c88123749"></a><!-- doxytag: member="smp.c::apicWrite" ref="ab4a831897afae67446bf78c88123749" args="(unsigned int address, unsigned int data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static void apicWrite </td> <td>(</td> <td class="paramtype">unsigned int </td> <td class="paramname"> <em>address</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"> <em>data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [inline, static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00049">49</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00234">apicMagic()</a>. </div> </div><p> <a class="anchor" name="8325315e2d1f564d9777ebd849c3296c"></a><!-- doxytag: member="smp.c::asm" ref="8325315e2d1f564d9777ebd849c3296c" args="(".globl cpuid \n""cpuid: \n"" pushl %ebx \n"" pushl %edi \n"" movl 12(%esp),%eax \n"" movl 16(%esp),%edi \n"" cpuid \n"" movl %eax,0(%edi) \n"" movl %ebx,4(%edi) \n"" movl %ecx,8(%edi) \n"" movl %edx,12(%edi) \n"" popl %edi \n"" popl %ebx \n"" ret \n")" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">asm </td> <td>(</td> <td class="paramtype">".globl cpuid \n""cpuid: \n"" pushl %<a class="el" href="ap-boot_8S.html#1c50f544178eb7e0af39bd078c5a986f">ebx</a> \n"" pushl %<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a> \n"" movl </td> <td class="paramname"> <em>12</em>(%esp), </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">%<a class="el" href="sys__call__new_8S.html#e746cb10fae7ebdc395c8d0fd6caa393">eax</a>\n""movl </td> <td class="paramname"> <em>16</em>(%esp), </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>\n""cpuid\n""movl% </td> <td class="paramname"> <em>eax</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">0(%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>)\n""movl% </td> <td class="paramname"> <em>ebx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">4(%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>)\n""movl% </td> <td class="paramname"> <em>ecx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">8(%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>)\n""movl% </td> <td class="paramname"> <em>edx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">12(%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>)\n""popl%<a class="el" href="start_8S.html#f701de0cc799320aaf54092dda7b54d2">edi</a>\n""popl%<a class="el" href="ap-boot_8S.html#1c50f544178eb7e0af39bd078c5a986f">ebx</a>\n""ret\n" </td> <td class="paramname"></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> </div> </div><p> <a class="anchor" name="c7cb5b4b2fbc61966a6dfc8044a7b800"></a><!-- doxytag: member="smp.c::c_ap_boot" ref="c7cb5b4b2fbc61966a6dfc8044a7b800" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void c_ap_boot </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00137">137</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00103">cpu1_thread()</a>, <a class="el" href="smp_8c-source.html#l00109">cpu2_thread()</a>, <a class="el" href="smp_8c-source.html#l00115">cpu3_thread()</a>, <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>, <a class="el" href="smp_8c-source.html#l00037">initSpinLock</a>, <a class="el" href="io_8c-source.html#l00073">outportByte()</a>, <a class="el" href="spinlock_8c-source.html#l00070">spinLockLocked()</a>, and <a class="el" href="ap-boot_8S-source.html#l00006">xe9</a>. </div> </div><p> <a class="anchor" name="66c37e11ba7abfcafc63146553b2cd16"></a><!-- doxytag: member="smp.c::cpu0_thread" ref="66c37e11ba7abfcafc63146553b2cd16" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cpu0_thread </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00097">97</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00123">kernel_function()</a>, and <a class="el" href="smp_8c-source.html#l00043">vram</a>. </div> </div><p> <a class="anchor" name="5e82e9f1e0fec1ac5db2ebd16652a043"></a><!-- doxytag: member="smp.c::cpu1_thread" ref="5e82e9f1e0fec1ac5db2ebd16652a043" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cpu1_thread </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00103">103</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00123">kernel_function()</a>, and <a class="el" href="smp_8c-source.html#l00043">vram</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00137">c_ap_boot()</a>. </div> </div><p> <a class="anchor" name="cfec913213194039ad31b2602bf8af4f"></a><!-- doxytag: member="smp.c::cpu2_thread" ref="cfec913213194039ad31b2602bf8af4f" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cpu2_thread </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00109">109</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00123">kernel_function()</a>, and <a class="el" href="smp_8c-source.html#l00043">vram</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00137">c_ap_boot()</a>. </div> </div><p> <a class="anchor" name="13735e9644e3c9a01bfc7785b31691ab"></a><!-- doxytag: member="smp.c::cpu3_thread" ref="13735e9644e3c9a01bfc7785b31691ab" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cpu3_thread </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00115">115</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00123">kernel_function()</a>, and <a class="el" href="smp_8c-source.html#l00043">vram</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00137">c_ap_boot()</a>. </div> </div><p> <a class="anchor" name="c89d80447fce7d622c7dfc6620039600"></a><!-- doxytag: member="smp.c::cpuidDetect" ref="c89d80447fce7d622c7dfc6620039600" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cpuidDetect </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00173">173</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00252">getEflags()</a>, <a class="el" href="kpanic_8c-source.html#l00044">kpanic()</a>, and <a class="el" href="smp_8c-source.html#l00262">setEflags()</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00161">smpInit()</a>. </div> </div><p> <a class="anchor" name="452f210aee65a2a30cbc5cb8923a9881"></a><!-- doxytag: member="smp.c::cpuInfo" ref="452f210aee65a2a30cbc5cb8923a9881" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="ubixfsv2_2types_8h.html#a4e0f27a9aca905e340c06d2dcae843c">uInt8</a> cpuInfo </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00182">182</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8h-source.html#l00038">cpuinfo_t::apic_id</a>, <a class="el" href="smp_8h-source.html#l00038">cpuinfo_t::apic_ver</a>, <a class="el" href="smp_8c-source.html#l00045">apicRead()</a>, <a class="el" href="smp_8h-source.html#l00042">cpuinfo_t::brand</a>, <a class="el" href="smp_8h.html#8e797e0b8a36194fca8fa45767974c2f">cpuid()</a>, <a class="el" href="smp_8c-source.html#l00040">cpuinfo</a>, <a class="el" href="smp_8c-source.html#l00038">cpuInfoLock</a>, <a class="el" href="smp_8c-source.html#l00039">cpus</a>, <a class="el" href="smp_8h-source.html#l00040">cpuinfo_t::feature</a>, <a class="el" href="smp_8c-source.html#l00252">getEflags()</a>, <a class="el" href="smp_8h-source.html#l00036">cpuinfo_t::id</a>, <a class="el" href="smp_8h-source.html#l00043">cpuinfo_t::ident</a>, <a class="el" href="kpanic_8c-source.html#l00044">kpanic()</a>, <a class="el" href="smp_8h-source.html#l00041">cpuinfo_t::max</a>, <a class="el" href="smp_8h-source.html#l00037">cpuinfo_t::ok</a>, <a class="el" href="smp_8c-source.html#l00053">setDr3()</a>, <a class="el" href="smp_8c-source.html#l00262">setEflags()</a>, <a class="el" href="smp_8h-source.html#l00039">cpuinfo_t::signature</a>, <a class="el" href="spinlock_8c-source.html#l00056">spinLock()</a>, <a class="el" href="spinlock_8c-source.html#l00037">spinUnlock()</a>, <a class="el" href="start_8S-source.html#l00051">x20</a>, and <a class="el" href="ap-boot_8S-source.html#l00052">x30</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00137">c_ap_boot()</a>, and <a class="el" href="smp_8c-source.html#l00161">smpInit()</a>. </div> </div><p> <a class="anchor" name="b9f1e8692e06eb164641f50aa4d7aed6"></a><!-- doxytag: member="smp.c::GDT_fixer" ref="b9f1e8692e06eb164641f50aa4d7aed6" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static void GDT_fixer </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00069">69</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00065">gdt_descr::limit</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00161">smpInit()</a>. </div> </div><p> <a class="anchor" name="0f6e384fb3ad325aa2406af715ff341d"></a><!-- doxytag: member="smp.c::getDr3" ref="0f6e384fb3ad325aa2406af715ff341d" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static __inline__ <a class="el" href="ubixfsv2_2types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> getDr3 </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00058">58</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00123">kernel_function()</a>. </div> </div><p> <a class="anchor" name="abe8182d15984977e87831f32527ff78"></a><!-- doxytag: member="smp.c::getEflags" ref="abe8182d15984977e87831f32527ff78" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="ubixfsv2_2types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> getEflags </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00252">252</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00173">cpuidDetect()</a>, and <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>. </div> </div><p> <a class="anchor" name="0844b0ab23ee41899fc5d622078d20d6"></a><!-- doxytag: member="smp.c::kernel_function" ref="0844b0ab23ee41899fc5d622078d20d6" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="ubixfsv2_2types_8h.html#a4e0f27a9aca905e340c06d2dcae843c">uInt8</a> kernel_function </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00123">123</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00058">getDr3()</a>, <a class="el" href="smp_8h-source.html#l00036">cpuinfo_t::id</a>, <a class="el" href="spinlock_8c-source.html#l00056">spinLock()</a>, and <a class="el" href="spinlock_8c-source.html#l00037">spinUnlock()</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00097">cpu0_thread()</a>, <a class="el" href="smp_8c-source.html#l00103">cpu1_thread()</a>, <a class="el" href="smp_8c-source.html#l00109">cpu2_thread()</a>, and <a class="el" href="smp_8c-source.html#l00115">cpu3_thread()</a>. </div> </div><p> <a class="anchor" name="5607ecf06fd77905053dbb15eaf0ff6b"></a><!-- doxytag: member="smp.c::setDr3" ref="5607ecf06fd77905053dbb15eaf0ff6b" args="(void *dr3)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static __inline__ void setDr3 </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"> <em>dr3</em> </td> <td> ) </td> <td width="100%"><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00053">53</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>. </div> </div><p> <a class="anchor" name="133d6aaf4635e4585ee54a0438d0bf36"></a><!-- doxytag: member="smp.c::setEflags" ref="133d6aaf4635e4585ee54a0438d0bf36" args="(uInt32 eflags)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void setEflags </td> <td>(</td> <td class="paramtype"><a class="el" href="ubixfsv2_2types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> </td> <td class="paramname"> <em>eflags</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00262">262</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00173">cpuidDetect()</a>, and <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>. </div> </div><p> <a class="anchor" name="ce31619db109aa8b20a916d48969928d"></a><!-- doxytag: member="smp.c::smpInit" ref="ce31619db109aa8b20a916d48969928d" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void smpInit </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00161">161</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> References <a class="el" href="smp_8c-source.html#l00234">apicMagic()</a>, <a class="el" href="smp_8c-source.html#l00173">cpuidDetect()</a>, <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>, <a class="el" href="smp_8c-source.html#l00069">GDT_fixer()</a>, <a class="el" href="smp_8c-source.html#l00037">initSpinLock</a>, <a class="el" href="spinlock_8c-source.html#l00056">spinLock()</a>, and <a class="el" href="spinlock_8c-source.html#l00037">spinUnlock()</a>. </div> </div><p> <hr><h2>Variable Documentation</h2> <a class="anchor" name="71085af55092ee7b25d4bd346169ce89"></a><!-- doxytag: member="smp.c::bkl" ref="71085af55092ee7b25d4bd346169ce89" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="spinlock_8h.html#a240e9404b4ede1e0d714610080d1176">spinLock_t</a> <a class="el" href="smp_8c.html#71085af55092ee7b25d4bd346169ce89">bkl</a> = SPIN_LOCK_INITIALIZER<code> [static]</code> </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00122">122</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. </div> </div><p> <a class="anchor" name="963def6fffd92dece6dd156abbcf4fa0"></a><!-- doxytag: member="smp.c::cpuinfo" ref="963def6fffd92dece6dd156abbcf4fa0" args="[8]" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structcpuinfo__t.html">cpuinfo_t</a> <a class="el" href="smp_8c.html#963def6fffd92dece6dd156abbcf4fa0">cpuinfo</a>[8] </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00040">40</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>. </div> </div><p> <a class="anchor" name="d5f78a3dc61e0ca7819dc3d5d5794419"></a><!-- doxytag: member="smp.c::cpuInfoLock" ref="d5f78a3dc61e0ca7819dc3d5d5794419" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="spinlock_8h.html#a240e9404b4ede1e0d714610080d1176">spinLock_t</a> <a class="el" href="smp_8c.html#d5f78a3dc61e0ca7819dc3d5d5794419">cpuInfoLock</a> = SPIN_LOCK_INITIALIZER<code> [static]</code> </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00038">38</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>. </div> </div><p> <a class="anchor" name="29c1aa6c61dfac505825b96920fa447d"></a><!-- doxytag: member="smp.c::cpus" ref="29c1aa6c61dfac505825b96920fa447d" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="ubixfsv2_2types_8h.html#5847ea0262a5aa61eee48cbe95544a78">uInt32</a> <a class="el" href="smp_8c.html#29c1aa6c61dfac505825b96920fa447d">cpus</a> = 0<code> [static]</code> </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00039">39</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00182">cpuInfo()</a>. </div> </div><p> <a class="anchor" name="9a5fd10dce49f2fe147d346b8de71902"></a><!-- doxytag: member="smp.c::initSpinLock" ref="9a5fd10dce49f2fe147d346b8de71902" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="spinlock_8h.html#a240e9404b4ede1e0d714610080d1176">spinLock_t</a> <a class="el" href="smp_8c.html#9a5fd10dce49f2fe147d346b8de71902">initSpinLock</a> = SPIN_LOCK_INITIALIZER<code> [static]</code> </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00037">37</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00137">c_ap_boot()</a>, and <a class="el" href="smp_8c-source.html#l00161">smpInit()</a>. </div> </div><p> <a class="anchor" name="5f2d0854cc28b4f2ef16a03061d9d237"></a><!-- doxytag: member="smp.c::vram" ref="5f2d0854cc28b4f2ef16a03061d9d237" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="ubixfsv2_2types_8h.html#a4e0f27a9aca905e340c06d2dcae843c">uInt8</a>* <a class="el" href="smp_8c.html#5f2d0854cc28b4f2ef16a03061d9d237">vram</a> = (<a class="el" href="ubixfsv2_2types_8h.html#a4e0f27a9aca905e340c06d2dcae843c">uInt8</a> *)0xB8000 </td> </tr> </table> </div> <div class="memdoc"> <p> <p> Definition at line <a class="el" href="smp_8c-source.html#l00043">43</a> of file <a class="el" href="smp_8c-source.html">smp.c</a>. <p> Referenced by <a class="el" href="smp_8c-source.html#l00097">cpu0_thread()</a>, <a class="el" href="smp_8c-source.html#l00103">cpu1_thread()</a>, <a class="el" href="smp_8c-source.html#l00109">cpu2_thread()</a>, and <a class="el" href="smp_8c-source.html#l00115">cpu3_thread()</a>. </div> </div><p> <hr size="1"><address style="align: right;"><small>Generated on Tue Dec 5 23:35:01 2006 for UbixOS V2 by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address> </body> </html>