次のページ
前のページ
目次へ
カードサービスタプル解析 (Card Services ParseTuple) 機能は、
GetTupleData で得た生の CIS タプルを解析し、それぞれのタプル
の種類に依存した形式でタプルの内容を返します。
#include "cistpl.h"
CISTPL_CHECKSUM
cistpl_checksum_t 構造体の定義は次のとおり:
typedef struct cistpl_checksum_t {
u_short addr;
u_short len;
u_char sum;
} cistpl_checksum_t;
CISTPL_LONGLINK_A, CISTPL_LONGLINK_C, CISTPL_LINKTARGET,CISTPL_NOLINK
cistpl_longlink_t 構造体の定義は次のとおり:
typedef struct cistpl_longlink_t {
u_long addr;
} cistpl_longlink_t;
これらのタプルは属性や、一般メモリなどへの他の CIS タプルチェーン
へのポインタになっています。それぞれの CIS タプルは、少なくとも 1 以上の
長さのリンクです。CISTPL_LONGLINK_A タプルは、アトリビュートメモリへの
ポインタであり、CISTPL_LONGLINK_C タプルは一般メモリへのポインタです。
属性メモリのアドレス 0 から始まる標準 CIS チェーンは、同時に一般メモリの
アドレス 0 へのリンクも意味しています。(@@) このようなデフォールトの
リンクをキャンセルしたい場合には CISTPL_NOLINK というタプルを使います。
ロングリンクによって指されるチェーンの最初のタプルは、CISTPL_LINKTARGET
でなければなりません。CS タプルを扱うコードは自動的にロングリンクをたどり、
リンク先を(ターゲット)を調べます。GetNextTuple によって、
TUPLE_RETURN_LINK
属性が指定されていない限り、これらのタプルはユーザーからは見えません。
CISTPL_LONGLINK_MFC
cistpl_longlink_mfc_t 構造体の定義は次のとおり:
typedef struct cistpl_longlink_mfc_t {
int nfn;
struct {
u_char space;
u_long addr;
} fn[CISTPL_MAX_FUNCTIONS;
} cistpl_longlink_mfc_t;
このタプルはマルチファンクション(多機能)カードを識別するのに使われます。
それぞれの機能ごとの CIS チェーンへのロングリンクポインタを指定します。
space 変数は、属性の場合 CISTPL_MFC_ATTR が、一般メモリの場合には
CISTPL_MFC_COMMON が指定されます。
CISTPL_DEVICE, CISTPL_DEVICE_A
cistpl_device_t 構造体の定義は次のとおり:
typedef struct cistpl_device_t {
int ndev;
struct device_info {
u_char type;
u_char wp;
u_long speed;
u_long size;
} dev[CISTPL_MAX_DEVICES];
} cistpl_device_t;
CISTPL_DEVICE タプルはカードの一般メモリのアドレス領域に関して記述
しています。CISTPL_DEVICE_A タプルは属性メモリ領域を記述しています。
type フラグはその領域に関するメモリデバイスの種類を示します。
wp フラグは、その領域がライトプロテクトされているかどうかを示します。
speed 変数は ナノ秒単位で、size はバイト単位で示されます。
アドレス領域はアドレス 0 番地から連続した領域であることが仮定されて
います。次のようなデバイスタイプが定義されています。
CISTPL_DTYPE_NULL なにもデバイスが存在しない、または、そのカードのアドレス空間
の中で「穴」であることを示します。
CISTPL_DTYPE_ROM マスク ROM です。
CISTPL_DTYPE_OTPROM 一度だけ書き込み可能な ROM です。(訳注:原文の 「One-type」は
「One-time」の間違いであると思います。)
CISTPL_DTYPE_EPROM 紫外線消去可能な PROM です。(UV-EPROM)
CISTPL_DTYPE_EEPROM 電気的に消去可能な PROM です。
CISTPL_DTYPE_FLASH フラッシュ EPROM です。
CISTPL_DTYPE_SRAM スタティックまたは不揮発性の RAM です。
CISTPL_DTYPE_DRAM ダイナミックまたは揮発性の RAM です。
CISTPL_DTYPE_FUNCSPEC 機能定義可能なデバイスであることを示します。
つまり、汎用の記憶ではなくて、例えば メモリーマップドI/O
デバイスやバッファのようなものです。
CISTPL_DTYPE_EXTEND 拡張型のデバイスタイプを示します。これは将来の拡張のために
予約されています。
CISTPL_VERS_1
cistpl_vers_1_t 構造体の定義は次のとおり:
typedef struct cistpl_vers_1_t {
u_char major;
u_char minor;
int ns;
int ofs[CISTPL_VERS_1_MAX_PROD_STRINGS];
char str[254];
} cistpl_vers_1_t;
ns 変数は、このタプルの中に含まれている製品情報文字列の長さ
を示しています。文字列情報は str という配列に格納されています。
それぞれの文字列はヌル文字で終っており、ofs はそれぞれの文字列の
始まりへのオフセットを示しています。
CISTPL_ALTSTR
cistpl_altstr_t 構造体の定義は次のとおり:
typedef struct cistpl_altstr_t {
int ns;
int ofs[CISTPL_ALTSTR_MAX_STRINGS];
char str[254];
} cistpl_altstr_t;
ns 変数は、このタプルに含まれている代替用語文字列の数を示して
います。実際の文字列は、str 配列に格納されています。
それぞれの文字列はヌル文字で終っており、ofs はそれぞれの文字列の
始まりへのオフセットを示しています。
CISTPL_JEDEC_C, CISTPL_JEDEC_A
cistpl_jedec_t 構造体の定義は次のとおり:
typedef struct cistpl_jedec_t {
int nid;
struct jedec_id {
u_char mfr;
u_char info;
} id[CISTPL_MAX_DEVICES];
} cistpl_jedec_t;
jedec_id (JEDEC 識別子) は、PCMCIA メモリを実現するために
使われる特定のデバイスタイプを記述しています。
nid 変数はこのタプルの中にいくつの jedec_id が含まれているかを
示します。
このjedec_id (JEDEC identifier) と、それに対応する CISTPL_DEVICE タプル
の中のデバイス定義は、一対一の対応がとれていなければなりません。
CISTPL_CONFIG
cistpl_config_t 構造体の定義は次のとおり:
typedef struct cistpl_config_t {
u_char last_idx;
u_long base;
u_long rmask[4];
u_char subtuples;
} cistpl_config_t;
last_idx 変数は、構成情報テーブルの一番最後の項目
のインデックスを示します。
base 変数は、属性メモリ中にあるカードの構成情報
レジスタへのオフセットを示します。
rmask 配列はどの構成情報レジスタが存在するのかを示す
ビットマスクです。
rmask[0] のビット 0 は、COR に対応し、ビット 1 は CCSR に対応する...
といった具合です。subtuple 変数は、通常のタプルの内容に続いて
何バイトのタプルが存在するか、を示しています。
CISTPL_CFTABLE_ENTRY
cistpl_cftable_entry_t 構造体の定義は次のとおり:
typedef struct cistpl_cftable_entry_t {
u_char index;
u_char flags;
u_char interface;
cistpl_power_t vcc, vpp1, vpp2;
cistpl_timing_t timing;
cistpl_io_t io;
cistpl_irq_t irq;
cistpl_mem_t mem;
u_char subtuples;
} cistpl_cftable_entry_t;
CISTPL_CFTABLE_ENTRY 構造体はそのカードに対する完全な動作モードを
記述しています。多くの部分が省略可能です。index 変数は
この動作モードについての構成情報インデックスを示します。
カードの Configuration Option Register にこの値を書き込むことで
このモードを選択することができます。flags 変数には、
次の値が定義されています:
CISTPL_CFTABLE_DEFAULT デフォールトの構成情報テーブルの項目であることを
示します。
CISTPL_CFTABLE_BVDS この設定は ピン代替レジスタ 中で BVD1 と BVD2 信号を
実装していることを示します。
CISTPL_CFTABLE_WP この設定は ピン代替レジスタ 中で 書き込み禁止を実装している
ことを示します。
CISTPL_CFTABLE_RDYBSY この設定は ピン代替レジスタ 中で Ready/Busy 信号を実装して
いることを示します。
CISTPL_CFTABLE_MWAIT メモリーアクセス中に、WAIT 信号を使う必要があることを示します。
CISTPL_CFTABLE_AUDIO この設定はオーディオ信号を発生し、ホストシステムのスピーカーに
出力することができることを示します。
CISTPL_CFTABLE_READONLY この設定ではカード中に読みだし専用のメモリ領域が存在することを
示します。
CISTPL_CFTABLE_PWRDOWN カード構成情報と状態レジスタ を通じて、
パワーダウンモードをサポートしていることを示します。
cistpl_power_t 構造体の定義は次のとおり:
typedef struct cistpl_power_t {
u_char present;
u_char flags;
u_long param[7];
} cistpl_power_t;
present 変数はビットマップ形式になっており、この電源信号
に関して、どのパラメータが存在しているか、を示します。
次のようなインデックスが定義されています:
CISTPL_POWER_VNOM 標準的な電源電圧
CISTPL_POWER_VMIN 最低電源電圧
CISTPL_POWER_VMAX 最高電源電圧
CISTPL_POWER_ISTATIC 連続供給が必要な電源電流
CISTPL_POWER_IAVG 1 秒間を通じて平均した最大供給電流
CISTPL_POWER_IPEAK 10m 秒間を通じて平均した最大供給電流
CISTPL_POWER_IDOWN パワーダウンモードで必要な供給電流
電圧は 10 マイクロボルト単位、電流は 100 ナノアンペア単位で
表されています。
cistpl_timing_t 構造体の定義は次のとおり:
typedef cistpl_timing_t {
u_long wait, waitscale;
u_long ready, rdyscale;
u_long reserved, rsvscale;
} cistpl_timing_t;
それぞれの時間はナノ秒を基底とした値と、尺度乗数から構成されて
います。定義されていない(Unspecified) 時間の値は 0 です。
cistpl_io_t 構造体の定義は次のとおり:
typedef struct cistpl_io_t {
u_char flags;
int nwin;
struct {
u_long base;
u_long len;
} win[CISTPL_IO_MAX_WIN;
} cistpl_io_t;
nwin は 入出力領域の数を示します。それぞれの領域は
基底アドレス: base 、バイト単位での長さ: len で記述されます。
flags では、次のようなビットマップが定義されています:
CISTPL_IO_LINES_MASK このカードでデコードされる入出力の本数。
CISTPL_IO_8BIT このカードは 16 ビットの入出力レジスタに対して、独立した 8 ビット
アクセスをサポートしていることを示す。
CISTPL_IO_16BIT このカードは入出力レジスタに対して 16 ビットアクセスをサポート
していることを示す。
cistpl_irq_t 構造体の定義は次のとおり:
typedef struct cistpl_irq_t {
u_long IRQInfo1;
u_long IRQInfo2;
} cistpl_irq_t;
IRQInfo1 では次のビットマップが定義されています:
IRQ_MASK このカードが使うべき割り込み番号を示す。
IRQ_NMI_ID , IRQ_IOCK_ID , IRQ_BERR_ID ,
IRQ_VEND_ID IRQ_INFO2_VALID がセットされている時、これらのビットマップは
それぞれの特殊割り込みがこのカードに割り当てられているか
どうかを示す。これら4つのフラグはそれぞれ、マスク不可能、
IO チェック、バスエラー、ベンダー特有の割り込みを意味します。
IRQ_INFO2_VALID IRQInfo2 が、許可された、正しい割り込み番号を含んでいることを示す。
IRQ_LEVEL_ID このカードはレベル割り込みをサポートしていることを示す。
IRQ_PULSE_ID このカードはパルス割り込みをサポートしていることを示す。
IRQ_SHARE_ID このカードは割り込み共有をサポートしていることを示す。
IRQInfo1 が 0 の場合、割り込みに関する情報は存在しないことを意味します。
cistpl_mem_t 構造体の定義は次のとおり:
typedef struct cistpl_mem_t {
u_char nwin;
struct {
u_long len;
u_long card_addr;
caddr_t host_addr;
} win[CISTPL_MEM_MAX_WIN;
} cistpl_mem_t;
nwin はメモリ領域の数を示す。それぞれの領域は、
カードのメモリ空間中のアドレス: card_addr 、ホストのメモリ空間中の
アドレス: host_addr 、バイト単位での長さ: len で定義される。
ホストアドレスが 0 の場合、領域の位置は任意 (arbitrary) で
あることを意味する。
CISTPL_MANFID
cistpl_manfid_t 構造体の定義は次のとおり:
typedef struct cistpl_manfid_t {
u_short manf;
u_short card;
} cistpl_manfid_t;
manf 変数はそのカードの製造業者を表します。
card 変数はそれぞれのベンダーによって定義され、カードの種類と、
モデルを識別できるようにしなければなりません。
CISTPL_FUNCID
cistpl_funcid_t 構造体の定義は次のとおり:
typedef struct cistpl_funcid_t {
u_char func;
u_char sysinit;
} cistpl_funcid_t;
func 変数はそのカードの機能を表します。sysinit 変数は
ブート時にそのカードがどのように設定されるべきかをビットマップ
フラグで示してます。
次の機能が定義されています:
CISTPL_FUNCID_MULTI マルチファンクション(多機能)カード
CISTPL_FUNCID_MEMORY 単純なメモリデバイス
CISTPL_FUNCID_SERIAL シリアルポートまたはモデムデバイス
CISTPL_FUNCID_PARALLEL パラレルポートデバイス
CISTPL_FUNCID_FIXED 固定ディスクデバイス(ハードディスクなど)
CISTPL_FUNCID_VIDEO ビデオインターフェース
CISTPL_FUNCID_NETWORK ネットワークアダプタ
CISTPL_FUNCID_AIMS 自動増分機能のある大容量記憶装置
sysinit では次のフラグが定義されている:
CISTPL_SYSINIT_POST システムのパワーオン初期化時にこのカードの設定を試みる必要が
あることを示す。
CISTPL_SYSINIT_ROM このカードは、ブート時に設定する必要のあるシステム拡張 ROM を
含んでいることを示す。
CISTPL_DEVICE_GEO
cistpl_device_geo_t 構造体の定義は次のとおり:
typedef struct cistpl_device_geo_t {
int ngeo;
struct geo {
u_char buswidth;
u_long erase_block;
u_long read_block;
u_long write_block;
u_long partition;
u_long interleave;
} geo[CISTPL_MAX_DEVICES];
} cistpl_device_geo_t;
erase_block , read_block , write_block の大きさは、それぞれ
buswidth
の値に interleave の値を乗じたバイト数を単位として表される。
partition の大きさは、erase_block の大きさを単位として表される。
CISTPL_VERS_2
cistpl_vers_2_t 構造体の定義は次のとおり:
typedef struct cistpl_vers_2_t {
u_char vers;
u_char comply;
u_short dindex;
u_char vspec8, vspec9;
u_char nhdr;
int vendor, info;
char str[244];
} cistpl_vers_2_t;
vers 変数は常に 0 でなければなりません。comply 変数は
標準への準拠の度合を示しますが、同じく 0 でなければなりません。
dindex 変数は一般メモリの最初の何バイトが予約されているか
を示します。vspec8 と vspec9 変数にはベンダー特有の情報が含まれて
いる場合があります。nhdr 変数はこのカード上にいくつの CIS の
コピーが存在しているかを示します。
str 配列は、二つの文字列を含んでいます:
ベンダーの名前と、このカードについて記述しているなんらかの情報です。
ベンダー名の文字列へのオフセットは vendor で示され、製品情報の文字列
へのオフセットは info で示されます。
CISTPL_ORG
cistpl_org_t 構造体の定義は次のとおり:
typedef struct cistpl_org_t {
u_char data_org;
char desc[30];
このタプルはメモリパーティッションのデータの構成を定義します。
data_org には次の値が定義されています:
CISTPL_ORG_FS このパーティッションはファイルシステムを含んでいます。
CISTPL_ORG_APPSPEC このパーティッションはアプリケーション特有の形式です。
CISTPL_ORG_XIP このパーティッションは「その場で実行」(Execute-In-Place)仕様
に従います。
desc 変数には、データの構成についての文字による記述が含まれて
います。
PCMCIA 標準規格は、カードの属性メモリ空間中に、いくつかの標準的な
構成情報レジスタを定義しています。
これらのレジスタのうち、どのレジスタが実装されているかは、カードの
CONFIG タプルに記述されています。これらの定義を使う必要のある
プログラムは次をインクルードする必要があります:
#include "cisreg.h"
Configuration Option Register
このレジスタに書き込むことによって、構成情報テーブルの項目
を選択し、カードの入出力機能が使えるようになります。
次のビット変数が定義されています:
COR_CONFIG_MASK 構成情報テーブルインデックスは、カードの現在の
動作モードを指していることを示す。
COR_LEVEL_REQ このカードはレベル(エッジトリガー)割り込みを生成することを示し
ます。これはデフォールトです。
COR_SOFT_RESET このビットをセットすることで、「ソフト」リセット動作を実行します。
カードをリセットしたい時には、ドライバはこのレジスタに直接に書き
込むのではなく、ResetCard 呼び出しを使うべきです。
カードの構成情報と状態レジスタ
次のビット変数が定義されています:
CCSR_INTR_ACK このビットが設定されている場合、CCSR_INTR_PENDING ビットは
陽にクリアされるまでセットされたままになります。
CCSR_INTR_PENDING このカードが現在割り込み要求をしていることを示す。
この信号は割り込み共有を目的として使われることもあります。
CCSR_POWER_DOWN このビットをセットすると、カードに対してパワーダウンモードに入る
ことを要求します。
CCSR_AUDIO_ENA このビットをセットすると、カードのオーディオ出力を可能にします。
CCSR_IOIS8 このビットをセットすることで、このホストは 8 ビット入出力しか
行なえないので、16 ビットの入出力は二回に分けた 8 ビット入出力で
実行することを通知します。
CCSR_SIGCHG_ENA このビットをセットすることで、カードが WP, READY, BVD1, BVD2 信号の
変化を、SIGCHG 信号を通じて伝えるように要求します。
CCSR_CHANGED このビットがセットされることで、ピン代替レジスタの
いずれかのビットの状態が変化したことがホストに通知されます。
ピン代替レジスタ
ソケットがメモリ/入出力モードで動作する時に使えなくなってしまう(ピンの)
信号をこのレジスタの中の信号で置き換えることができます。
(訳注: ピンが足りなくなってしまって、ソケット経由で引き出すことができなく
なった信号をソフトウエア的にこのレジスタを通じて読み出すことができるという
意味でしょう)
このレジスタの中の信号のどれかが変化した時には通常、カードは SIGCHG
信号をアサートし、ドライバはこのレジスタを読み出すことで、何が起きたの
かを知ることができます。
次のビット変数が定義されています:
PRR_WP_STATUS 書き込み信号の現在の状態。
PRR_READY_STATUS レディ信号の現在の状態。
PRR_BVD2_STATUS 電池警告信号の現在の状態。
PRR_BVD1_STATUS 電池切れ信号の現在の状態。
PRR_WP_EVENT 最後に PRR レジスタが読み出されてから、書き込み禁止信号が変化した
ことを示す。
PRR_READY_EVENT 最後に PRR レジスタが読み出されてから、レディ信号が変化したことを示す。
PRR_BVD2_EVENT 最後に PRR レジスタが読み出されてから、電池警告信号が変化したこと
を示す。
PRR_BVD1_EVENT 最後に PRR レジスタが読み出されてから、電池切れ
信号が変化したことを示す。
このレジスタは書き込みも可能です。この場合には STATUS ビットは
マスクとして
機能します。つまり、その STATUS ビットがセットされている場合には、
対応するEVENT のビットが書き込みによって更新されます。
ソケットとコピーレジスタ
このレジスタは、いくつかの同じカードが同じ範囲の入出力ポートを共有
するような設定を可能にするような場合や、いくつかのデバイスを制御
する ISA バスのカードをエミュレートする場合に使われます。
例えば、一枚の ISA ハードディスクコントローラは、入出力ポートに
ドライブ番号を書き込むことで複数のドライブを制御することができ
ます。何枚かの PCMCIA ドライブカードによってこのようなコントローラ
をエミュレートするためには、どの入出力操作がどれに対するもので
あるかを識別できるように、それぞれのカードが自分がどのドライブで
あるかを「知る」必要があります。
次のビット変数が定義されています:
SCR_SOCKET_NUM カードの位置するソケット番号を表している必要があります。
SCR_COPY_NUM 複数の同じカードがシステムに存在する時には、この変数は
それらのカードのどれであるのかを識別するための特有な番号に
設定されている必要があります。
拡張状態レジスタ
次のビット変数が定義されています:
ESR_REQ_ATTN_ENA セットされると、ESR_REQ_ATTN ビットがセットされた時に
CCSR_CHANGED ビットもセットされるのと同様にどうしても
状態変化割り込みが発生します。
ESR_REQ_ATTN モデムへ着信があったときなど、なんらかのカードイベントが発生した
ことを示します。
次のページ
前のページ
目次へ
|