第 4 章 DOS からのリソース取得(BPD-0805) 54
4.4 関数説明
PciGetConfigReg
【機 能】
PCI BIOSをコールしてPCIボードのリソース情報を取得します。
【書 式】
int PciGetConfigReg(
int index,
unsigned int ven_id, unsigned int dev_id, unsigned long bar[], char *irq
)
【パラメータ】
index
ボードのインデックス番号を指定します。(RSW1の値とは関係ありません)
同一型式のボードが1枚しかない場合は1を指定します、複数枚ある場合には何枚 目のボードのリソースを取得するか指定します。
ven_id
ベンダーIDを指定します。弊社のベンダーIDは1147hです。
dev_id
デバイスIDを指定します。PCI-4172のデバイスIDは4172( 16進数では 104C)です。
bar[6] BaseAddress0〜BaseAddress5を格納する変数へのポインタです。
PCI-4172では以下のようになります。
bar[0](BaseAddress0) CH1 HDLC通信制御アドレス
bar[1](BaseAddress1) CH1 HDLC通信インタフェースメモリアドレス
bar[2](BaseAddress2) CH2 HDLC通信制御アドレス
bar[3](BaseAddress3) CH2 HDLC通信インタフェースメモリアドレス
irq
割り込み番号を格納する変数へのポインタです。【戻り値】
0 : 正常終了(ボードが見つかりました)
−
1 : PCI BIOSがありません
−
2 : ボードが1枚も見つかりませんでした
−
3 : これ以上ボードがありません
【使用例】
#include <stdio.h>
#include “GETBAR.H”
void main ( void ) {
unsigned long bar[6], adr0, adr1, adr2, adr3;
char irq;
PciGetConfigReg ( 1, 0x1147, 4172, bar, &irq ); //
リソースの取得Adr0 = bar[0]; // CH1 HDLC
通信制御アドレスAdr1 = bar[1]; // CH1 HDLC通信インタフェースメモリアドレス
Adr2 = bar[2]; // CH2 HDLC
通信制御アドレスAdr3 = bar[3]; // CH2 HDLC
通信インタフェースメモリアドレスprintf ( “CH1
ベースアドレス:%8x, %8x¥n” , adr0 , adr1);
printf ( “CH2
ベースアドレス:%8x, %8x¥n” , adr2 , adr3);
printf ( “割り込み番号:%d¥n” , irq );
}
PciGetConfigRegEx
【機 能】
PCI BIOSをコールしてPCIコンフィグレーションレジスタの値を取得します。
【書 式】
int PciGetConfigRegEx(
int index,
unsigned int ven_id, unsigned int dev_id, unsigned int subven_id, unsigned int subsys_id, unsigned int *bus_info, PPCI_CONFIG PciData )
【パラメータ】
index
ボードのインデックス番号を指定します。(RSW1の値とは関係ありません)
同一型式のボードが1枚しかない場合は1を指定します、複数枚ある場合に は何枚目のボードのリソースを取得するか指定します。
ven_id
ベンダーIDを指定します。弊社のベンダーIDは1147hです。
dev_id
デバイスIDを指定します。PCI-4172のデバイスIDは4172(16進数では104Ch)です。
subven_id
サブベンダーIDを指定します。弊社のサブベンダーIDは1147hです。
subsys_id
サブシスムIDを指定します。PCI-4172のサブシステムIDは0001hです。
bus_info
バス情報を格納する変数へのポインタです。バス情報は、以下の形式で格納されます。
bit15〜bit8
: バス番号bit7〜bit3 :
デバイス番号bit2〜bit0 :
ファンクション番号PciData PCIコンフィグレーションレジスタの値を格納する構造体へのポインタです。
【戻り値】
0 : 正常終了(ボードが見つかりました)
−
1 : PCI BIOSがありません
−
2 : ボードが1枚も見つかりませんでした
−
3 : これ以上ボードがありません
#include <stdio.h>
#include “GETBAR.H”
void main ( void ) {
unsigned long adr0, adr1, adr2, adr3;
unsigned int bus_info;
PCI_CONFIG PciData;
PciGetConfigRegEx ( 1, 0x1147, 4172, 0x1147, 0x0001,
&bus_info, &PciData ); //
リソースの取得adr0 = bar[0]; // CH1 HDLC通信制御アドレス
adr1 = bar[1]; // CH1 HDLC
通信インタフェースメモリアドレスadr2 = bar[2]; // CH2 HDLC通信制御アドレス
adr3 = bar[3]; // CH2 HDLC
通信インタフェースメモリアドレスprintf ( “CH1
ベースアドレス:%8x, %8x¥n” , adr0 , adr1);
printf ( “CH2
ベースアドレス:%8x, %8x¥n” , adr2 , adr3);
}
PCI_CONFIG構造体
【機 能】
PCIコンフィグレーションレジスタの値を格納します。
【書 式】
typedef struct _PCI_CONFIG {
unsigned short VendorID; // 00: Vendor ID unsigned short DeviceID; // 02: Device ID unsigned short Command; // 04: Command unsigned short Status; // 06: Status unsigned char RevisionID; // 08: Revision
unsigned char ProgIf; // 09: ProgIf
unsigned char SubClass; // 0A: Sub Class unsigned char BaseClass; // 0B: Base unsigned char CacheLineSize; // 0C: Cache Line unsigned char LatencyTimer; // 0D: Latency unsigned char HeaderType; // 0E: Header
unsigned char BIST; // 0F: BIST
unsigned long BaseAddresses[6]; // 10: Base Address
unsigned long CIS; // 28: CIS Pointer
unsigned short SubVendorID; // 2C: Subsystem Vendor ID unsigned short SubSystemID; // 2E: Subsystem ID
unsigned long ROMBaseAddress; // 30: ROM Base Address unsigned char CapabilitiesPtr; // 34: Capabilities Pointer unsigned char Reserved1[3]; // 35: Reserved
unsigned long Reserved2[1]; // 38: Reserved unsigned char InterruptLine; // 3C: INT Line unsigned char InterruptPin; // 3D: INT Pin unsigned char MinimumGrant; // 3E: MIN_GNT
unsigned char MaximumLatency; // 3F: MAX_LAT unsigned char DeviceSpecific[192]; // 40:
} PCI_CONFIG, *PPCI_CONFIG;
【パラメータ】
ここでは、主なパラメータのみを説明します。
BaseAddresses[6] BaseAddress0〜BaseAddress5を格納する変数です。
PCI-4172では以下のようになります。
bar[0](BaseAddress0) CH1 HDLC通信制御アドレス
bar[1]
(BaseAddress1) CH1 HDLC通信インタフェースメモリアドレス
bar[2](BaseAddress2) CH2 HDLC通信制御アドレス
bar[3](BaseAddress3) CH2 HDLC通信インタフェースメモリア
ドレスInterruptLine
割り込み番号を格納する変数です。RevisionID Revisionを格納する変数です。
他のパラメータについては、PCI仕様書をご覧ください。
■付録A PCI-4159との機能比較
機能 PCI-4172 PCI-4159 備考
バッファメモリ 1Mバイト 1Mバイト
DTSDデータ送信 △ ○ 端数ビットのパラメータが'0'固定
MSETメモリエリア設定 ○ ○
MDST動作モード設定 △ ○ ビットの配置が異なる
一部パラメータが固定値 AFST受信アドレスフィールド設定 ○ ○
LOPNラインオープン ○ ○
LCLSラインクローズ ○ ○
MARDメモリエリアリード × ○
MDRD動作モードリード × ○
AFRD受信アドレスフィールドリード × ○
SIRD統計情報リード ○ ○
GOWR汎用出力端子ライト × ○ 汎用入出力端子はボード内部で未接続
GPRD汎用入出力端子リード × ○ 汎用入出力端子はボード内部で未接続
SIRE統計情報リードⅡ × ○
GRPE汎用入出力端子リードⅡ × ○ 汎用入出力端子はボード内部で未接続
MDSE動作モード設定Ⅱ × ○
コマンド
(*1)
AFSE受信アドレスフィールド設定Ⅱ × ○
DTRVデータ受信 △ ○ 端数ビットのパラメータが'0'固定
TXURデータ送信中止 × ○
TOUTアイドル監視タイマタイムアウト × ○
LOAKラインオープン完了 ○ ○
LCAKラインクローズ完了 ○ ○
TXEDデータ送信完了 ○ ○
MAAKメモリエリアリード応答 × ○
MDAK動作モードリード応答 × ○
AFAK受信アドレスフィールドリード応答 × ○
SIAK統計情報リード応答 △ ○ 一部パラメータが固定値
CILGコマンドイリーガル △ ○ 一部パラメータの定義が異なる
GI1C汎用入力端子変化検出Ⅰ × ○ 一部パラメータが固定値
汎用入出力端子はボード内部で未接続
GI2C汎用入力端子変化検出Ⅱ △ ○ 一部パラメータが固定値
汎用入出力端子はボード内部で未接続
GPAK汎用入出力端子リード応答 × ○ 汎用入出力端子はボード内部で未接続
OLSWステータステーブルオーバーフロー △ ○ 一部パラメータの定義が異なる
SIAF統計情報リード応答Ⅱ × ○
ステータス (*1)
GPAE汎用入出力端子リード応答Ⅱ × ○ 一部パラメータが固定値
汎用入出力端子はボード内部で未接続
NRZ ○ ○
符号 NRZI ○ ○
端数ビット × ○
CRC-16 ○ ×
CRC-ITU-T ○ ×
FCS-16 ○ ○
FCS
FCS-32 ○ ○
エラーフレーム保持 ○ ×
1バイト目/8bit ○ ○
2バイト目/8bit × ○
アドレス検出 検出開始位置/
サイズ 1バイト目/16bit ○ ○
HDLC コントローラ
アイドル検出
アイドル検出 時間 0µs〜
16777215µs
アイドル検出 時間 8msまたは
100ms
*1 ○:互換性あり、△:互換性なし、×:未実装
■付録B PCI-4159とのレジスタマップ比較
PCI-4172 PCI-4159
オフセット 互換性 入出力 方向
内 容 入出力 方向
内 容
入力 HDLCコントローラステータスレジスタ 入力 µPD72103 ステータスレジスタ
+00h ○
出力 HDLCコントローラ制御レジスタ 出力 µPD72103 コントロールレジスタ 入力 OvR・OvFレジスタ 入力 予約
+01h ×
出力 予約 出力 予約
入力 ソースクロック選択レジスタ 入力 送受信クロック設定
+04h ×
出力 ソースクロック選択レジスタ 出力 送受信クロック読み出し 入力 モデムレジスタ 入力 制御信号入力レジスタ
+08h ○
出力 モデムレジスタ 出力 制御信号出力レジスタ
入力 RS-485ドライバ制御レジスタ 入力 ドライバ/レシーバ制御レジスタ
+ 09h ×
出力 RS-485ドライバ制御レジスタ 出力 ドライバ/レシーバ制御レジスタ
入力 クロックモードレジスタ 入力 同期クロック設定レジスタ
+0Ah ×
出力 クロックモードレジスタ 出力 同期クロック設定レジスタ
入力 TXBRGレジスタ 入力 予約
+0Ch,
+0Dh ○
出力 TXBRGレジスタ 出力 送信クロックBRG
入力 RXBRGレジスタ 入力 予約
+0Eh,
+0Fh ○
出力 RXBRGレジスタ 出力 受信クロックBRG
入力 インターバルタイマレジスタ 入力 タイマカウント読み出し
+10h ○
出力 インターバルタイマレジスタ 出力 インターバルタイマ設定
入力 予約 入力 予約
+11h ○
出力 リセットレジスタ 出力 通信コントローラリセット 入力 割り込みステータスレジスタ 入力 割り込みステータスフラグ読み込み
+12h ×
出力 予約 出力 予約
入力 割り込みマスクレジスタ 入力 割り込み設定状態確認
+13h ×
出力 割り込みマスクレジスタ 出力 割り込みマスク設定
入力 エッジ検出レジスタ 入力 割り込み発生条件の切り替え設定読 み込み
+14h ○
出力 エッジ検出レジスタ 出力 割り込み発生条件の切り替え 入力 アイドル検出時間設定レジスタ 入力 予約
+18h,
+19h,
+1Ah
× 出力 アイドル検出時間設定レジスタ 出力 予約
入力 送信有効ディレイ時間設定レジスタ 入力 予約
+1Ch ×
出力 送信有効ディレイ時間設定レジスタ 出力 予約 入力 送信無効ディレイ時間設定レジスタ 入力 予約
+1Dh ×
出力 送信無効ディレイ時間設定レジスタ 出力 予約
入力 RSWレジスタ 入力 RSW1読み出し
+1Fh ○
出力 予約 出力 予約
重要な情報
保証の内容と制限
ドキュメント内の情報には万全を期していますが、万一、誤記または誤植等があった場合、予告無 く改訂する場合があります。
ドキュメントまたはドキュメント内の情報を利用して作成されたプログラムの挙動により発生した いかなる損害に対しても弊社は責任を負いません。
ドキュメント内の図や表は説明のために用意されたものであり、ユーザ個別の応用事例により変化 する場合があります。
著作権,知的所有権
本ドキュメントに含まれるソースプログラムおよび、本ドキュメントに関する権利や知的所有権は 弊社が所有しています。
複製の禁止
弊社の許可なく、本ドキュメントの全て、または一部に関わらず、複製,改変,転用等を行うこと はできません。
サポート
本ドキュメントは、経験を積んだ開発者を対象に作成されたものです。
本ドキュメントの内容に関する質問および、本ドキュメントを利用したプログラム作成や記載内容 に関する技術サポートは行いません。
どうしてもサポートが必要な方は、有償にてサポートが可能です。別途、お客様相談センタまでお 問い合わせください。
商標/登録商標
本ドキュメントに掲載されている会社名、製品名は、それぞれ各社の商標または登録商標です。
ご使用の製品に関する制限,注意事項,保証などに関しては、
製品の