osEPiRawStartDma.htm 7.11 KB
<HTML>
<HEAD>
<TITLE>osEPiRawStartDma(3P)</TITLE>

<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.03j">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#C0C0C0" LINK="#0000EE" VLINK="#800080" ALINK="#FF0080" BACKGROUND="bg.gif">
<P>
<B><FONT COLOR=#FF0000>名称</FONT></B> </P><BR>
<UL>
<LI><FONT FACE="Century">osEPiRawStartDma,osEPiRawWriteIo,osEPiRawReadIo,
<BR>
osEPiGetDeviceType :</FONT>低レベル<FONT FACE="Century">(PI</FONT>マネージャーを使用せず<FONT FACE="Century">)</FONT><FONT FACE="Century">EPI</FONT>にアクセスする。</P>
</UL>
<P>
<B><FONT COLOR=#FF0000>概要</FONT></B><FONT COLOR=#FF0000> </P></FONT>
<P>
<FONT COLOR=#008080 FACE="Century">#include &lt;ultra64.h&gt;
<BR>
</P><BR>
<BR>
</FONT>
<UL>
<LI><FONT COLOR=#008080 FACE="Century">s32 osEPiRawStartDma(OSPiHandle
*pihandle, s32 direction, <BR>
u32 devAddr, void *vAddr, u32 nbytes); <BR>
<BR>
s32 osEPiRawWriteIo(OSPiHandle *pihandle, u32 devAddr, u32 data);
<BR>
<BR>
s32 osEPiRawReadIo(OSPiHandle *pihandle, u32 devAddr, u32 *data);
<BR>
<BR>
s32 osEPiGetDeviceType(OSPiHandle *pihandle, OSPiInfo *info);
<BR>
</P></FONT>
</UL>
<P>
<B><FONT COLOR=#FF0000>詳細</FONT></B><FONT COLOR=#FF0000> </P>
<BR>
<BR>
</FONT>
<UL>
<LI>拡張型パラレルインターフェース<FONT FACE="Century">(EPI)</FONT>は、<FONT FACE="Century">RDRAM</FONT>と大容量記憶デバイス(<FONT FACE="Century">BSD</FONT>)との間のデータ転送を行います。<FONT FACE="Century">BSD</FONT>としては<FONT FACE="Century">ROM</FONT><FONT FACE="Century">Drive
ROM</FONT><FONT FACE="Century">64DD</FONT>、その他が考えられます。<FONT FACE="Century">EPI</FONT>は、多くのデバイスが<FONT FACE="Century">PI</FONT>ドメインを共有する事をサポートし、これらデバイス間を動的に切り換えるように設計されています。
<BR>
<BR>
上述の関数は、低レベルに<FONT FACE="Century">EPI</FONT>にアクセスすることを可能にしています。これらの関数は、デバッグ、プリント、ロギング、プロファイリングを含む他のサービスが<FONT FACE="Century">PI</FONT>バスにアクセスしていないことが確実な場合にのみ使用されなければなりません。したがって多くの場合、<FONT FACE="Century">
EPI</FONT>にアクセスするのは<FONT FACE="Century">PI</FONT>マネージャーを使用することを薦めます。この方法については<I><FONT FACE="Century">osEPiStartDma</FONT></I><FONT FACE="Century">
(3P)</FONT>を参照ください。<BR>
<BR>
<FONT FACE="Century">OSPiHandle</FONT>データ構造体は<FONT FACE="Century">EPI</FONT>ルーチンが個々の<FONT FACE="Century">PI</FONT>デバイスを参照するためのハンドラとして機能します。<FONT FACE="Century">
OSPiHandle</FONT>構造体はデバイスの初期化ルーチンによって割当て及び初期化され、個々の<FONT FACE="Century">PI</FONT>デバイスの属性をセーブするために使用されます。<FONT FACE="Century">
<BR>
<I>direction</I></FONT>の値<FONT FACE="Century">(OS_READ</FONT>もしくは<FONT FACE="Century">OS_WRITE)</FONT>に基づき、<I><FONT FACE="Century">osEPiRawStartDma</FONT></I><FONT FACE="Century">RDRAM(</FONT>仮想アドレス<I><FONT FACE="Century">vAddr</FONT></I><FONT FACE="Century">)</FONT>と、<FONT FACE="Century">EPI</FONT>デバイス<FONT FACE="Century">(</FONT>アドレス<I><FONT FACE="Century">devAddr</FONT></I><FONT FACE="Century">.)</FONT>との間に<FONT FACE="Century">DMA</FONT>転送を設定します。カウンター<I><FONT FACE="Century">nbytes</FONT></I><FONT FACE="Century">DMA</FONT>の転送サイズ<FONT FACE="Century">(</FONT>最大<FONT FACE="Century">16Mbyte)</FONT>であり、2の倍数でなければなりません。<FONT FACE="Century">PI</FONT>のデバイスアドレス<I><FONT FACE="Century">devAddr</FONT></I><FONT FACE="Century">2</FONT>バイトのアラインメントを行う必要があります。<FONT FACE="Century">RDRAM</FONT>の仮想アドレス<I><FONT FACE="Century">vAddr</FONT></I>は少なくとも<FONT FACE="Century">8</FONT>バイトのアラインメントが必要ですが、<FONT FACE="Century">
DMA</FONT><FONT FACE="Century">OS_READ</FONT>で動かすにはさらに厳しく<FONT FACE="Century">16</FONT>バイトアラインメントする事をお薦めします。アドレス、転送量共<FONT FACE="Century">cache
line(16byte)</FONT>の整数倍でない場合に起こり得る問題については<I><FONT FACE="Century">OS_DCACHE_ROUNDUP_ADDR</FONT></I><FONT FACE="Century">
(3P)</FONT>を参照してください。<I><FONT FACE="Century"> osEPiRawStartDma</FONT></I>ルーチンは、<FONT FACE="Century">DMA</FONT>レジスタをセットする前にインターフェースが空いているかポーリングします。
<BR>
<BR>
<I><FONT FACE="Century">osEPiRawWriteIo</FONT></I>ルーチンは、<FONT FACE="Century">EPI</FONT>のデバイスアドレス<I><FONT FACE="Century">devAddr</FONT></I><FONT FACE="Century">32bit
IO Write</FONT>を行います。このルーチンは処理を開始する前にインターフェースが空いているかポーリングします。同様に、<I><FONT FACE="Century">
osEPiRawReadIo</FONT></I>は、<FONT FACE="Century">EPI</FONT>のデバイスアドレス<I><FONT FACE="Century">devAddr</FONT></I>から<FONT FACE="Century">32bit
IO Read</FONT>を行い、その値を<I><FONT FACE="Century">data</FONT></I>に格納します。これもまた処理を開始する前にインターフェースが空いているかポーリングします。デバイスアドレス<I><FONT FACE="Century">devAddr</FONT></I><FONT FACE="Century">4</FONT>バイトのアラインメントを行う必要がある事に注意してください。
<BR>
<BR>
<I><FONT FACE="Century">osEPiGetDeviceType</FONT></I><FONT FACE="Century">PI</FONT>ハンドラが認識している<FONT FACE="Century">PI</FONT>デバイスの情報を獲得します。デバイス情報は、<FONT FACE="Century">OSPiInfo</FONT>構造体によって示され、以下の構造になっています。
<BR>
<BR>
<FONT COLOR=#008080 FACE="Century">typedef struct {</FONT><FONT COLOR=#008080>
<BR>
</P></FONT>
</UL>
<UL>
<LI><FONT COLOR=#008080 FACE="Century">u8 type;</FONT><FONT COLOR=#008080>
<BR>
</FONT><FONT COLOR=#008080 FACE="Century">member;</FONT><FONT COLOR=#008080>
<BR>
</FONT><FONT COLOR=#008080 FACE="Century">u32 address;</FONT><FONT COLOR=#008080>
<BR>
</P><BR>
</FONT>
</UL>
<UL>
<LI><FONT COLOR=#008080>}</FONT><FONT COLOR=#008080 FACE="Century">
OSPiInfo;<BR>
<BR>
</FONT>デバイスタイプは、<FONT FACE="Century">DEVICE_TYPE_CART
(</FONT>通常のカートリッジ<FONT FACE="Century">ROM</FONT>の場合<FONT FACE="Century">)
, DEVICE_TYPE_BULK(</FONT>大容量記憶デバイスの場合<FONT FACE="Century">),
DEVICE_TYPE_64DD(</FONT>ディスクドライブの場合<FONT FACE="Century">),</FONT>の何れかを示しています。<FONT FACE="Century">address</FONT>は指定デバイスのベース<FONT FACE="Century">IO</FONT>アドレスが返ります。
<BR>
<BR>
</P>
</UL>
<P>
<B><FONT COLOR=#FF0000>注意</FONT></B> </P><BR>
<UL>
<LI><FONT FACE="Century">osEPiRawStartDma,osEPiRawWriteIo,osEPiRawReadIo</FONT>はいずれも、与えられた<FONT FACE="Century">pihndle</FONT>で指定された<FONT FACE="Century">PI</FONT>バスの設定と、その関数がコールされた時点での実際の<FONT FACE="Century">PI</FONT>バスの設定が異なっていた場合、<FONT FACE="Century">PI</FONT>バスを再設定します。毎回<FONT FACE="Century">osCartRomInit</FONT>を呼ぶ必要はありません。
<BR>
</P>
</UL>
<P>
<B><FONT COLOR=#FF0000>参照</FONT></B> </P><BR>
<BR>
<UL>
<LI><A HREF="osPiRawStartDma.htm" ><I>osPiRawStartDma</I> (3P)</A><FONT FACE="Century">,
</FONT><A HREF="osPiStartDma.htm" ><I>osPiStartDma</I> (3P)</A><FONT FACE="Century">,</FONT><A HREF="osEPiStartDma.htm">o<I>sEPiStartDma</I> (3P)</A><FONT FACE="Century">,<I>
<A HREF="osCartRomInit.htm"><I>osCartRomInit (3P)</I></A></I></FONT>
</P>
</UL>
<P>
 
</BODY>
</HTML>