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
lhsSolaris1.x SPARC CPU-5V ドライバ作成時の変更内容について