https://parisc.wiki.kernel.org/index.php?title=PdcChassis&feed=atom&action=historyPdcChassis - Revision history2024-03-29T12:37:16ZRevision history for this page on the wikiMediaWiki 1.19.24https://parisc.wiki.kernel.org/index.php?title=PdcChassis&diff=5631&oldid=prevThibaut Varene at 21:39, 29 May 20142014-05-29T21:39:13Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 21:39, 29 May 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 32:</td>
<td colspan="2" class="diff-lineno">Line 32:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|+ '''Interfaces (<tt>firmware.c</tt>)'''</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|+ '''Interfaces (<tt>firmware.c</tt>)'''</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">| '''</del>Function<del class="diffchange diffchange-inline">'''</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">! </ins>Function</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">| '''</del>Role<del class="diffchange diffchange-inline">'''</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">! </ins>Role</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>| <code>int pdc_chassis_disp(unsigned long disp)</code></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>| <code>int pdc_chassis_disp(unsigned long disp)</code></div></td></tr>
</table>Thibaut Varenehttps://parisc.wiki.kernel.org/index.php?title=PdcChassis&diff=5611&oldid=prevThibaut Varene at 21:37, 29 May 20142014-05-29T21:37:00Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 21:37, 29 May 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 31:</td>
<td colspan="2" class="diff-lineno">Line 31:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>{| class="wikitable"</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>{| class="wikitable"</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>| '''Interfaces (<tt>firmware.c</tt>)'''</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>|<ins class="diffchange diffchange-inline">+ </ins>'''Interfaces (<tt>firmware.c</tt>)'''</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>| '''Function'''</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>| '''Function'''</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">| '''Role'''</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>| <code>int pdc_chassis_disp(unsigned long disp)</code></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>| <code>int pdc_chassis_disp(unsigned long disp)</code></div></td></tr>
</table>Thibaut Varenehttps://parisc.wiki.kernel.org/index.php?title=PdcChassis&diff=5581&oldid=prevThibaut Varene: formatting update2014-05-29T21:28:34Z<p>formatting update</p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 21:28, 29 May 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>= PDC CHASSIS =</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>= PDC CHASSIS =</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>We are dealing with some kind of PA-RISC specific firmware: the ProcessorDependentCode (PDC).</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>We are dealing with some kind of PA-RISC specific firmware: the <ins class="diffchange diffchange-inline">[[</ins>ProcessorDependentCode<ins class="diffchange diffchange-inline">]] </ins>(PDC).</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Files:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Files:</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>* include/asm-parisc/pdc_chassis.h</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* <ins class="diffchange diffchange-inline"><tt></ins>include/asm-parisc/pdc_chassis.h<ins class="diffchange diffchange-inline"></tt></ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>* arch/parisc/kernel/pdc_chassis.c</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* <ins class="diffchange diffchange-inline"><tt></ins>arch/parisc/kernel/pdc_chassis.c<ins class="diffchange diffchange-inline"></tt></ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>* arch/parisc/kernel/firmware.c</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* <ins class="diffchange diffchange-inline"><tt></ins>arch/parisc/kernel/firmware.c<ins class="diffchange diffchange-inline"></tt></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What is PDC CHASSIS ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What is PDC CHASSIS ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>The <del class="diffchange diffchange-inline">`</del>CHASSIS<del class="diffchange diffchange-inline">` </del>PDC procedure aims at two things:</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>The <ins class="diffchange diffchange-inline"><tt></ins>CHASSIS<ins class="diffchange diffchange-inline"></tt> </ins>PDC procedure aims at two things:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Informing the hardware of the current state of the operating system.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Informing the hardware of the current state of the operating system.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 17:</td>
<td colspan="2" class="diff-lineno">Line 17:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The first part consists in sending the PDC some messages reflecting the current state of the system. Messages can be one of ''Off'', ''Fault'', ''Test'', ''Initialize'', ''Shutdown'', ''Warning'', ''Run'' or ''All On''. The second part allows the retrieval of chassis status. It's possible to get data about failing PSU, Fan or other (encoded in a HVERSION-dependent way), and to know whether NVRAM battery is getting low, and if ''Temp-Low'' and ''Temp-Mid'' temperature threshold have been exceeded.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The first part consists in sending the PDC some messages reflecting the current state of the system. Messages can be one of ''Off'', ''Fault'', ''Test'', ''Initialize'', ''Shutdown'', ''Warning'', ''Run'' or ''All On''. The second part allows the retrieval of chassis status. It's possible to get data about failing PSU, Fan or other (encoded in a HVERSION-dependent way), and to know whether NVRAM battery is getting low, and if ''Temp-Low'' and ''Temp-Mid'' temperature threshold have been exceeded.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>On <del class="diffchange diffchange-inline">`</del>PAT PDC<del class="diffchange diffchange-inline">` </del>boxes, featuring a [[GuardianServiceProcessor]], it is possible to send messages to the VirtualFrontPanel. This code deals with that too, see PdcChassisLog.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>On <ins class="diffchange diffchange-inline"><tt></ins>PAT PDC<ins class="diffchange diffchange-inline"></tt> </ins>boxes, featuring a [[GuardianServiceProcessor]], it is possible to send messages to the <ins class="diffchange diffchange-inline">[[</ins>VirtualFrontPanel<ins class="diffchange diffchange-inline">]]</ins>. This code deals with that too, see <ins class="diffchange diffchange-inline">[[</ins>PdcChassisLog<ins class="diffchange diffchange-inline">]]</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What are we trying to do? ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What are we trying to do? ==</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 23:</td>
<td colspan="2" class="diff-lineno">Line 23:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The code takes care of reflecting the current state of the system (and its sudden changes) by sending messages to the PDC. The result varies from some LED state change (eg on E-class), to LCD messages ('''INI''' during bootup, '''RUN''' when booted and running, '''SHU''' after shutdown, or '''FLT''' upon kernel panic, etc) on systems with a LCD display.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The code takes care of reflecting the current state of the system (and its sudden changes) by sending messages to the PDC. The result varies from some LED state change (eg on E-class), to LCD messages ('''INI''' during bootup, '''RUN''' when booted and running, '''SHU''' after shutdown, or '''FLT''' upon kernel panic, etc) on systems with a LCD display.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>It also adds a <del class="diffchange diffchange-inline">`</del>proc<del class="diffchange diffchange-inline">` </del>entry named <del class="diffchange diffchange-inline">`</del>chassis<del class="diffchange diffchange-inline">`</del>, giving some info about the chassis status (essentially battery and temperature threshold, and a message with an hex string if there is a redundant chassis component failing). Note that the states recorded by PDC are (seemingly) only cleared upon reboot. That is to say that if you have eg an overheat, even if the condition goes back to normal, it won't be noticeable until you reboot the machine. There's a persistence of warnings.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>It also adds a <ins class="diffchange diffchange-inline"><tt></ins>proc<ins class="diffchange diffchange-inline"></tt> </ins>entry named <ins class="diffchange diffchange-inline"><tt></ins>chassis<ins class="diffchange diffchange-inline"></tt></ins>, giving some info about the chassis status (essentially battery and temperature threshold, and a message with an hex string if there is a redundant chassis component failing). Note that the states recorded by PDC are (seemingly) only cleared upon reboot. That is to say that if you have eg an overheat, even if the condition goes back to normal, it won't be noticeable until you reboot the machine. There's a persistence of warnings.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== How do we do it? ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== How do we do it? ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>We had to implement the missing abstraction logic in <del class="diffchange diffchange-inline">`</del>firmware.c<del class="diffchange diffchange-inline">` </del>to access Chassis. We had to add the required interfaces to PDC_CHASSIS calls:</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>We had to implement the missing abstraction logic in <ins class="diffchange diffchange-inline"><tt></ins>firmware.c<ins class="diffchange diffchange-inline"></tt> </ins>to access Chassis. We had to add the required interfaces to <ins class="diffchange diffchange-inline"><tt></ins>PDC_CHASSIS<ins class="diffchange diffchange-inline"></tt> </ins>calls:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>{| class="wikitable"</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>{| class="wikitable"</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>| '''Interfaces (<del class="diffchange diffchange-inline">`</del>firmware.c<del class="diffchange diffchange-inline">`</del>)'''</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| '''Interfaces (<ins class="diffchange diffchange-inline"><tt></ins>firmware.c<ins class="diffchange diffchange-inline"></tt></ins>)'''</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>| '''Function'''</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>| '''Function'''</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>| int pdc_chassis_disp(unsigned long disp)</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| <ins class="diffchange diffchange-inline"><code></ins>int pdc_chassis_disp(unsigned long disp)<ins class="diffchange diffchange-inline"></code></ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>| This call sends the state expressed by <del class="diffchange diffchange-inline">`</del>disp<del class="diffchange diffchange-inline">` </del>PDC CHASSIS</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| This call sends the state expressed by <ins class="diffchange diffchange-inline"><tt></ins>disp<ins class="diffchange diffchange-inline"></tt> </ins>PDC CHASSIS</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>| int pdc_chassis_warn(unsigned long *warn)</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| <ins class="diffchange diffchange-inline"><code></ins>int pdc_chassis_warn(unsigned long *warn)<ins class="diffchange diffchange-inline"></code></ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>| This call retrieves the chassis status in <del class="diffchange diffchange-inline">`</del>*warn<del class="diffchange diffchange-inline">`</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| This call retrieves the chassis status in <ins class="diffchange diffchange-inline"><tt></ins>*warn<ins class="diffchange diffchange-inline"></tt></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|}</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|}</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>The <del class="diffchange diffchange-inline">`</del>PAT_PDC<del class="diffchange diffchange-inline">` </del>implementation is discussed in [[PdcChassisLog]].</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>The <ins class="diffchange diffchange-inline"><tt></ins>PAT_PDC<ins class="diffchange diffchange-inline"></tt> </ins>implementation is discussed in [[PdcChassisLog]].</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>=== Linking kernel events to messages ===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>=== Linking kernel events to messages ===</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 60:</td>
<td colspan="2" class="diff-lineno">Line 60:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  </nowiki></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  </nowiki></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>We have added panic and reboot notifiers in <del class="diffchange diffchange-inline">`</del>pdc_chassis.c<del class="diffchange diffchange-inline">`</del>; and we have added a few hooks in the places where an important kernel state change -- that will affect the whole system -- might happen. Through these, we are able to monitor reliably the state of the system and reflect it accurately via PDC or Chassis Log.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>We have added panic and reboot notifiers in <ins class="diffchange diffchange-inline"><tt></ins>pdc_chassis.c<ins class="diffchange diffchange-inline"></tt></ins>; and we have added a few hooks in the places where an important kernel state change -- that will affect the whole system -- might happen. Through these, we are able to monitor reliably the state of the system and reflect it accurately via PDC or Chassis Log.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== Kernel parameter ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== Kernel parameter ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Last but not least, if enabled at build time in the kernel, this "driver" -- so to speak -- can be disabled at boot time by passing <del class="diffchange diffchange-inline">`</del>pdcchassis=0<del class="diffchange diffchange-inline">` </del>on the kernel command line. This is especially useful on [[GuardianServiceProcessor <del class="diffchange diffchange-inline">-featuring</del>]] machines, when debugging the kernel during the boot sequence, as it avoids the console to be clobbered with informative messages from the VirtualFrontPanel.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Last but not least, if enabled at build time in the kernel, this "driver" -- so to speak -- can be disabled at boot time by passing <ins class="diffchange diffchange-inline"><tt></ins>pdcchassis=0<ins class="diffchange diffchange-inline"></tt> </ins>on the kernel command line. This is especially useful on [[GuardianServiceProcessor]]<ins class="diffchange diffchange-inline">-featuring </ins>machines, when debugging the kernel during the boot sequence, as it avoids the console to be clobbered with informative messages from the <ins class="diffchange diffchange-inline">[[</ins>VirtualFrontPanel<ins class="diffchange diffchange-inline">]]</ins>.</div></td></tr>
</table>Thibaut Varenehttps://parisc.wiki.kernel.org/index.php?title=PdcChassis&diff=3491&oldid=prevDeller: /* PDC CHASSIS */2014-02-05T16:10:36Z<p><span dir="auto"><span class="autocomment">PDC CHASSIS</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 16:10, 5 February 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 4:</td>
<td colspan="2" class="diff-lineno">Line 4:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Files:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Files:</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>* <del class="diffchange diffchange-inline">`</del>include/asm-parisc/pdc_chassis.h<del class="diffchange diffchange-inline">`</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* include/asm-parisc/pdc_chassis.h</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>* <del class="diffchange diffchange-inline">`</del>arch/parisc/kernel/pdc_chassis.c<del class="diffchange diffchange-inline">`</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* arch/parisc/kernel/pdc_chassis.c</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>* <del class="diffchange diffchange-inline">`</del>arch/parisc/kernel/firmware.c<del class="diffchange diffchange-inline">`</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* arch/parisc/kernel/firmware.c</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What is PDC CHASSIS ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What is PDC CHASSIS ==</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 17:</td>
<td colspan="2" class="diff-lineno">Line 17:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The first part consists in sending the PDC some messages reflecting the current state of the system. Messages can be one of ''Off'', ''Fault'', ''Test'', ''Initialize'', ''Shutdown'', ''Warning'', ''Run'' or ''All On''. The second part allows the retrieval of chassis status. It's possible to get data about failing PSU, Fan or other (encoded in a HVERSION-dependent way), and to know whether NVRAM battery is getting low, and if ''Temp-Low'' and ''Temp-Mid'' temperature threshold have been exceeded.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The first part consists in sending the PDC some messages reflecting the current state of the system. Messages can be one of ''Off'', ''Fault'', ''Test'', ''Initialize'', ''Shutdown'', ''Warning'', ''Run'' or ''All On''. The second part allows the retrieval of chassis status. It's possible to get data about failing PSU, Fan or other (encoded in a HVERSION-dependent way), and to know whether NVRAM battery is getting low, and if ''Temp-Low'' and ''Temp-Mid'' temperature threshold have been exceeded.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>On `PAT PDC` boxes, featuring a GuardianServiceProcessor, it is possible to send messages to the VirtualFrontPanel. This code deals with that too, see PdcChassisLog.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>On `PAT PDC` boxes, featuring a <ins class="diffchange diffchange-inline">[[</ins>GuardianServiceProcessor<ins class="diffchange diffchange-inline">]]</ins>, it is possible to send messages to the VirtualFrontPanel. This code deals with that too, see PdcChassisLog.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What are we trying to do? ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What are we trying to do? ==</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 41:</td>
<td colspan="2" class="diff-lineno">Line 41:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|}</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|}</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>The `PAT_PDC` implementation is discussed in PdcChassisLog.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>The `PAT_PDC` implementation is discussed in <ins class="diffchange diffchange-inline">[[</ins>PdcChassisLog<ins class="diffchange diffchange-inline">]]</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>=== Linking kernel events to messages ===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>=== Linking kernel events to messages ===</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 64:</td>
<td colspan="2" class="diff-lineno">Line 64:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== Kernel parameter ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== Kernel parameter ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Last but not least, if enabled at build time in the kernel, this "driver" -- so to speak -- can be disabled at boot time by passing `pdcchassis=0` on the kernel command line. This is especially useful on <del class="diffchange diffchange-inline">GSP</del>-featuring machines, when debugging the kernel during the boot sequence, as it avoids the console to be clobbered with informative messages from the VirtualFrontPanel.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Last but not least, if enabled at build time in the kernel, this "driver" -- so to speak -- can be disabled at boot time by passing `pdcchassis=0` on the kernel command line. This is especially useful on <ins class="diffchange diffchange-inline">[[GuardianServiceProcessor </ins>-featuring<ins class="diffchange diffchange-inline">]] </ins>machines, when debugging the kernel during the boot sequence, as it avoids the console to be clobbered with informative messages from the VirtualFrontPanel.</div></td></tr>
</table>Dellerhttps://parisc.wiki.kernel.org/index.php?title=PdcChassis&diff=3401&oldid=prevDeller: /* PDC CHASSIS */2014-02-05T14:19:20Z<p><span dir="auto"><span class="autocomment">PDC CHASSIS</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 14:19, 5 February 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 4:</td>
<td colspan="2" class="diff-lineno">Line 4:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Files:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Files:</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline"> </del>* `include/asm-parisc/pdc_chassis.h`</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* `include/asm-parisc/pdc_chassis.h`</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline"> </del>* `arch/parisc/kernel/pdc_chassis.c`</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* `arch/parisc/kernel/pdc_chassis.c`</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline"> </del>* `arch/parisc/kernel/firmware.c`</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>* `arch/parisc/kernel/firmware.c`</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What is PDC CHASSIS ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== What is PDC CHASSIS ==</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 12:</td>
<td colspan="2" class="diff-lineno">Line 12:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The `CHASSIS` PDC procedure aims at two things:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The `CHASSIS` PDC procedure aims at two things:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline"> 1. </del>Informing the hardware of the current state of the operating system.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline"># </ins>Informing the hardware of the current state of the operating system.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline"> 1. </del>Informing the OS of the current state of the hardware.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline"># </ins>Informing the OS of the current state of the hardware.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The first part consists in sending the PDC some messages reflecting the current state of the system. Messages can be one of ''Off'', ''Fault'', ''Test'', ''Initialize'', ''Shutdown'', ''Warning'', ''Run'' or ''All On''. The second part allows the retrieval of chassis status. It's possible to get data about failing PSU, Fan or other (encoded in a HVERSION-dependent way), and to know whether NVRAM battery is getting low, and if ''Temp-Low'' and ''Temp-Mid'' temperature threshold have been exceeded.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The first part consists in sending the PDC some messages reflecting the current state of the system. Messages can be one of ''Off'', ''Fault'', ''Test'', ''Initialize'', ''Shutdown'', ''Warning'', ''Run'' or ''All On''. The second part allows the retrieval of chassis status. It's possible to get data about failing PSU, Fan or other (encoded in a HVERSION-dependent way), and to know whether NVRAM battery is getting low, and if ''Temp-Low'' and ''Temp-Mid'' temperature threshold have been exceeded.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 29:</td>
<td colspan="2" class="diff-lineno">Line 29:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>We had to implement the missing abstraction logic in `firmware.c` to access Chassis. We had to add the required interfaces to PDC_CHASSIS calls:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>We had to implement the missing abstraction logic in `firmware.c` to access Chassis. We had to add the required interfaces to PDC_CHASSIS calls:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>|<del class="diffchange diffchange-inline">|||<tablewidth</del>="<del class="diffchange diffchange-inline">100%</del>"<del class="diffchange diffchange-inline">></del>'''Interfaces (`firmware.c`)'''<del class="diffchange diffchange-inline">||</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">{</ins>| <ins class="diffchange diffchange-inline">class</ins>="<ins class="diffchange diffchange-inline">wikitable</ins>"</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">|</del>| '''Function''' |<del class="diffchange diffchange-inline">| '''Role''' ||</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">|-</ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">|</del>| int pdc_chassis_disp(unsigned long disp) <del class="diffchange diffchange-inline">|</del>| This call sends the state expressed by `disp` PDC CHASSIS |<del class="diffchange diffchange-inline">|</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">| </ins>'''Interfaces (`firmware.c`)'''</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">|</del>| int pdc_chassis_warn(unsigned long *warn) <del class="diffchange diffchange-inline">|</del>| This call retrieves the chassis status in `*warn` |<del class="diffchange diffchange-inline">|</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| '''Function'''</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>|<ins class="diffchange diffchange-inline">-</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| int pdc_chassis_disp(unsigned long disp)</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| This call sends the state expressed by `disp` PDC CHASSIS</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>|<ins class="diffchange diffchange-inline">-</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| int pdc_chassis_warn(unsigned long *warn)</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>| This call retrieves the chassis status in `*warn`</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>|<ins class="diffchange diffchange-inline">}</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The `PAT_PDC` implementation is discussed in PdcChassisLog.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>The `PAT_PDC` implementation is discussed in PdcChassisLog.</div></td></tr>
</table>Dellerhttps://parisc.wiki.kernel.org/index.php?title=PdcChassis&diff=3201&oldid=prevDeller: Created page with "= PDC CHASSIS = We are dealing with some kind of PA-RISC specific firmware: the ProcessorDependentCode (PDC). Files: * `include/asm-parisc/pdc_chassis.h` * `arch/parisc/ke..."2014-02-05T13:33:34Z<p>Created page with "= PDC CHASSIS = We are dealing with some kind of PA-RISC specific firmware: the ProcessorDependentCode (PDC). Files: * `include/asm-parisc/pdc_chassis.h` * `arch/parisc/ke..."</p>
<p><b>New page</b></p><div>= PDC CHASSIS =<br />
<br />
We are dealing with some kind of PA-RISC specific firmware: the ProcessorDependentCode (PDC).<br />
<br />
Files:<br />
* `include/asm-parisc/pdc_chassis.h`<br />
* `arch/parisc/kernel/pdc_chassis.c`<br />
* `arch/parisc/kernel/firmware.c`<br />
<br />
== What is PDC CHASSIS ==<br />
<br />
The `CHASSIS` PDC procedure aims at two things:<br />
<br />
1. Informing the hardware of the current state of the operating system.<br />
1. Informing the OS of the current state of the hardware.<br />
<br />
The first part consists in sending the PDC some messages reflecting the current state of the system. Messages can be one of ''Off'', ''Fault'', ''Test'', ''Initialize'', ''Shutdown'', ''Warning'', ''Run'' or ''All On''. The second part allows the retrieval of chassis status. It's possible to get data about failing PSU, Fan or other (encoded in a HVERSION-dependent way), and to know whether NVRAM battery is getting low, and if ''Temp-Low'' and ''Temp-Mid'' temperature threshold have been exceeded.<br />
<br />
On `PAT PDC` boxes, featuring a GuardianServiceProcessor, it is possible to send messages to the VirtualFrontPanel. This code deals with that too, see PdcChassisLog.<br />
<br />
== What are we trying to do? ==<br />
<br />
The code takes care of reflecting the current state of the system (and its sudden changes) by sending messages to the PDC. The result varies from some LED state change (eg on E-class), to LCD messages ('''INI''' during bootup, '''RUN''' when booted and running, '''SHU''' after shutdown, or '''FLT''' upon kernel panic, etc) on systems with a LCD display.<br />
<br />
It also adds a `proc` entry named `chassis`, giving some info about the chassis status (essentially battery and temperature threshold, and a message with an hex string if there is a redundant chassis component failing). Note that the states recorded by PDC are (seemingly) only cleared upon reboot. That is to say that if you have eg an overheat, even if the condition goes back to normal, it won't be noticeable until you reboot the machine. There's a persistence of warnings.<br />
<br />
== How do we do it? ==<br />
<br />
We had to implement the missing abstraction logic in `firmware.c` to access Chassis. We had to add the required interfaces to PDC_CHASSIS calls:<br />
<br />
||||<tablewidth="100%">'''Interfaces (`firmware.c`)'''||<br />
|| '''Function''' || '''Role''' ||<br />
|| int pdc_chassis_disp(unsigned long disp) || This call sends the state expressed by `disp` PDC CHASSIS ||<br />
|| int pdc_chassis_warn(unsigned long *warn) || This call retrieves the chassis status in `*warn` ||<br />
<br />
The `PAT_PDC` implementation is discussed in PdcChassisLog.<br />
<br />
=== Linking kernel events to messages ===<br />
<br />
According to what we said, we have prepared a set of preformatted messages that we will use to reflect the current state of the system, through hooks we have placed in various key points in the kernel:<br />
<br />
<nowiki><br />
arch/parisc/kernel/pdc_chassis.c:95: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);<br />
arch/parisc/kernel/pdc_chassis.c:115: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_SHUTDOWN);<br />
arch/parisc/kernel/process.c:140: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_SHUTDOWN);<br />
arch/parisc/kernel/process.c:181: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_SHUTDOWN);<br />
arch/parisc/kernel/setup.c:304: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BSTART);<br />
arch/parisc/kernel/traps.c:498: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_HPMC);<br />
arch/parisc/kernel/traps.c:519: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_LPMC);<br />
arch/parisc/kernel/traps.c:728: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);<br />
arch/parisc/kernel/traps.c:761: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);<br />
arch/parisc/mm/init.c:410: pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE);<br />
</nowiki><br />
<br />
We have added panic and reboot notifiers in `pdc_chassis.c`; and we have added a few hooks in the places where an important kernel state change -- that will affect the whole system -- might happen. Through these, we are able to monitor reliably the state of the system and reflect it accurately via PDC or Chassis Log.<br />
<br />
== Kernel parameter ==<br />
<br />
Last but not least, if enabled at build time in the kernel, this "driver" -- so to speak -- can be disabled at boot time by passing `pdcchassis=0` on the kernel command line. This is especially useful on GSP-featuring machines, when debugging the kernel during the boot sequence, as it avoids the console to be clobbered with informative messages from the VirtualFrontPanel.</div>Deller