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

[pbsd-mg2] Platform ID



 | どちらも半分 YES です。
 | 最終的(理想的)には、ほとんどの場合はデバイスの有/無、デバイスの
 | アドレス(location)で切り分けられるので、そういう意味では YES です。
 | しかし、そういうきっちりいかない部分、ソースファイル内で
 | #ifdef XXX_MCR510_WORKAROUND ... #endif なんていうものがあって、
 | configration file にも option XXX_MCR510_WORKAROUND などと書くならば、
 | 結局Platform ID の値を #define のようなもので静的に
 | カーネルに埋め込むのと同じことになると思います。

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

#ifdef `プラットフォーム`あるいはplatid_matchを、vr*.cに入れるのでなく、
vr*.cは、vr41x1に依存するものだけ、個々のマシンに依存にするものは、
vr/platform/nec_mcr510.cとかに分離するようにして、vr*.cからは例えば
vr_product_t->poweron()で呼ぶようにする方が見通しも、メンテナンス性も
高いように思うんですが...
# alphaのstruct alpha_pci_chipsetみたいな感じで。
これも根本的に難しい...ですか?

 | PC Card や PCI card のように probe できるように設計されたデバイスを
 | probe するのは賛成ですが、それ以外のほとんどのデバイスを試行錯誤して
 | probe するよりも platform ID のようなもので統一的に扱えた方が
 | いいのかも、と思って作ってみました。

 PC CardやPCIは、バスデバイス自身が、子デバイスを知ることのできる
direct configurationのバス(config_foundを使う)なので、別かと。
 indirect configuration(ISAのような)バスであれば、一般的には子デバイス
の存在自体わかりません。ただ、hpcmipsのターゲットの場合platformから先
験的に全てがわかるので、platformで区別するという方法もありというところ
でしょうか。

#もうちょっと見てみます。
---
UCHIYAMA Yasushi
uch@nop.or.jp