Solaris1.x SPARC CPU-5V ドライバ作成時の変更内容について
Solaris1.x SPARC CPU-5V ドライバ作成時の変更内容について
Solaris1.x SPARC CPU-5V ドライバ作成時の変更内容について
この資料は、CPU-2CE/3CE/5CEなどの、S4-VMEチップが搭載されている
CPUボード上で使用していたデバイスドライバーをCPU-5V上で動作させる上で変更する点
について示したものです。
VMEbus空間のマッピングについて
VMEbus上の2つのアクセス空間(例えばA32とA16の両方)をマッピングしたい場合には、
GENERICファイル中の”flags”にアドレスを指定してドライバーからこのアドレスを取り込み、
attatch()ルーチンにて手動でマッピングをします。
CPU-5Vでは、マッピングする際にFGA-5000への設定が必要になります。
この設定については専用ルーチンが、用意されていますので従来のattach()ルーチンに多少の
変更をするだけで動作する様になります。
以下に、従来のルーチンと追加後のルーチンの例を示します。
従来のルーチン
xxattach(md) struct mb_device *md; { register long mapindex; register unsigned long pageval,off; register caddr_t vaddr; off = md->md_flags & PAGEOFFSET; mapindex = rmalloc(kernelmap,(long)btoc(sizeof(xx_reg))); vaddr = (caddr_t)((int)kmxtob(mapindex)); pageval = PGT_VME_D16 | btop(VME16_BASE); segkmem_mapin(&kseg,(addr_t)vaddr,(u_int)(ptob(btoc(sizeof(xx_reg)))), PROT_READ | PROT_WRITE,(u_int)pageval,0); xx_addr = (caddr_t)vaddr + off; } |
変更後のルーチン
xxattach(md) struct mb_device *md; { register long mapindex; register unsigned long pageval,off; register caddr_t vaddr; off = md->md_flags & PAGEOFFSET; mapindex = rmalloc(kernelmap,(long)btoc(sizeof(xx_reg))); vaddr = (caddr_t)((int)kmxtob(mapindex)); pageval = vme_masterwin_setup(VME_BT_D16 | VME_BT_A16 | VME_BT_STD, md->md_flags & PAGEMASK,sizeof(xx_reg)); segkmem_mapin(&kseg,(addr_t)vaddr,(u_int)(ptob(sizeof(xx_reg)))), PROT_READ | PROT_WRITE, (u_int)pageval,0); xx_addr = (caddr_t)vaddr + off; } |
変更後のルーチンの中にvme_masterwin_setup()と言うルーチンがあります。
このルーチンは、CPU-5Vの専用ルーチンであり、FGA-5000に必要な設定をするルーチンです。
上記の例では、A16:D16のマッピングをしていますが 線部の内容を変えることで
VME64でのアクセスも可能となります。
以下にここで選択可能な内容について示します。
データ転送サイズ
VME_BT_D64 /* 64bit データ転送用 */ VME_BT_D32 /* 32bit 〃 */ VME_BT_D16 /* 16bit 〃 */ VME_BT_D8 /* 8bit 〃 */ |
アドレス空間
VME_BT_A64 /* 64bit アドレス指定 */ VME_BT_A32 /* 32bit 〃 */ VME_BT_A24 /* 24bit 〃 */ VME_BT_A16 /* 16bit 〃 */ |
アクセスモード
VME_BT_SSBLT /* Sbusスレーブ MBLT */ VME_BT_MBLT /* MBLT(VME64)*/ VME_BT_BLT /* BLT(ブロック転送)*/ VME_BT_STD /* 標準(VME32)*/ |
その他
VME_BT_WP /* 書き込み時のライトポストを有効にするモード */ |
DVMA転送の使用について CPU-5Vで従来使用していたドライバーでDVMAを使用する場合には、OPENBOOT上の 環境変数の設定を変更する必要があります。 この設定をする事で、DVMAでのIOPB領域,DVMA領域の使用がドライバーの変更も無くそのまま 使用できる様になります。 以下にOPENBOOT上で設定する環境変数について示します。
環境変数名 設定内容
vme-a24-slave-ena? true
vme-a24-slave-addr 0
vme-a24-slave-size 1048576
設定手順 以下を入力します。
ok setenv vme-a24-slave-ena? true
ok setenv vme-a24-slave-addr 0
ok setenv vme-a24-slave-size 1048576
ok reset