[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pbsd-mg2] Re: Platform ID



 >  | さしあたって問題なのは vrgiu の先です。
 >  | GIU には 1 bit のデータポートがいくつかあります。
 >  | あるビットはある機種では RS232C の PHY の電源の ON/OFF が割り当てられて
 >  | います。このビットは違う機種ではブザーや場合によってはシステムリセット
 >  | などに割り当てられているかも知れません。
 >  | 1bit しかないので、直接的な probe ほぼ不可能です。
 > 
 > #ifdef `プラットフォーム`あるいはplatid_matchを、vr*.cに入れるのでなく、

楽というか easy だから良くないということですね。
特に NetBSD にはそぐわないかも知れません。

 > vr*.cは、vr41x1に依存するものだけ、個々のマシンに依存にするものは、
 > vr/platform/nec_mcr510.cとかに分離するようにして、vr*.cからは例えば
 > vr_product_t->poweron()で呼ぶようにする方が見通しも、メンテナンス性も
 > 高いように思うんですが...
 > # alphaのstruct alpha_pci_chipsetみたいな感じで。

今はまだ無理ですが、ある程度開発が落ち着けば上記のようにする
ベきかも知れません。
hook をインストールするかしないかはプラットフォーム毎の
configuration file で静的にリンクしても良いのですが、
platform ID を使えば良いのではないでしょうか。

例えばこんなふうに:

    nec_mcr510_match()
    {
        return platid_match(&platid, NEC_MCR_510) ? 1 : 0;
    }

    nec_mcr510_attach()
    {
        extern vr_product_t* vr_product_hook;

        vr_product_hook->poweron = nec_mcr_510_poweron;
    }

または configuration file で:

  nec_mcrfiveoneO0 at vrgiu platform NEC_MCR_510

それとも:

  vrgiu_attach()
  {
       config_attach( nec_mcrfiveoneO );
  }

sada さんの示しているような vrgiubus 案もあります。

それから、giu の先だけでなく、vrip 自身の attach の時に
も  platid を参照しようかと思っているのですが...

Takemrua