osPiGetStatus.htm
2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>
<BODY>
<P>
<B><FONT FACE="Arial">osPiGetStatus(3P) <BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
osPiRawStartDma, osPiRawWriteIo, osPiRawReadIo, osPiGetStatus
<P>
→ パラレルインターフェイス(PI)への管理外のアクセス
<BR>
<P>
<B>構文<BR>
</B>
<P>
#include <ultra64.h>
<P>
s32 osPiRawStartDma(s32 direction, u32 devAddr, void
*vAddr, u32 nbytes);
<P>
s32 osPiRawWriteIo(u32 devAddr, u32 data);
<P>
s32 osPiRawReadIo(u32 devAddr, u32 *data);
<P>
<B>u32 osPiGetStatus(void);<BR>
</B>
<P>
<B>説明<BR>
</B>
<P>
パラレルインターフェイス(PI)はRDRAMとROM, RAM, 磁気ディスクなどのデバイスとの間の転送を行う役割を持っています。上記のこれらの関数はPIの低レベルアクセスです。これらの関数はデバッグ、プリント、ログ、プロファイルなどを含んだPIへのアクセス動作が行われていないという保証のあるときのみ、使用してください。その理由は、PIの管理を含むアクセスルーチンがもっとも効果的に使用することができるからです。(この関数については<A HREF="osPiStartDma.htm">osPiStartDma</A>(3P)を参照してください。)Rawルーチンは使いやすいですが、アプリケーションがブートした後すぐ、そしてオペレーティングシステムがイニシャライズされる前に手続きは終了します。基本的な入力指示(OS_READまたはOS_WRITE)としては、osPiRawStartDmaはRDRAMの仮想アドレスvaddrとPIデバイスアドレスのdevAddr間のDMA転送をセットアップします。nbytesの総サイズは最大16Mbyteの転送バイト数以内で、かつ2byteの倍数にしてください。PIデバイスアドレスvAddrは少なくとも8byteに整列しなくてはいけませんが、OS_READ_DMAオペレーションについてはより厳しい制限が推薦されています。転送がキャッシュラインの倍数でなかったときにどのような問題が生じるかということは<A HREF="OS_DCACHE_ROUNDP_ADDR.htm">OS_DCACH_ROUNDUP_ADDR</A>(3P)に詳細が載っていますのでそれを参照してください。osPiRawStartDmaルーチンもまたDMAレジスタをプログラムする前に、インターフェイスにポーリングしておきます。
<BR>
<P>
osPiRawWriteIOルーチンはPIデバイスアドレスdevAddrへの32bitプログラム,IOライトを実行します。それはオペレーションの実行前のインターフェイス部分をポーリングしておきます。同様に、osPiRawReadIoはPIデバイスアドレスdevAddrから32bitプログラムIOリードを実行し、dataに数値を返します。それもまたオペレーションの実行前にインターフェイス部分をポーリングしておきます。注意として、デバイスアドレスvAddrは2byte整列にしておいてください。
<BR>
<P>
osPiGetStatusは単にPIのハードウェアステータスを返します。32bitの返値には以下に示すビットパターンが含まれています。
<BR>
<P>
<B>PI_STATUS_TO_IO_BUSY</B>
<P>
以前に発行されたプログラムIOのリクエストが未完了です。
<P>
<B>PI_STATUS_DMA_BUSY</B>
<P>
以前に発行されたDMAリクエストが未完了です。
<P>
<B>PI_STATUS_ERROR</B>
<P>
IOリクエストがDMAビジー中に発行されました。 <BR>
<P>
osPiGetStatusルーチンは一連の最新IOリクエストの最後が完了したことを確認するためにもっとも頻繁に使用されるます。
<BR>
<BR>
<P>
<B>参照<BR>
</B>
<P>
<A HREF="osPiStartDma.htm">osPiStartDma</A>(3P)<BR>
</BODY>
</HTML>