(57)【特許請求の範囲】
【請求項１】
ＣＰＵと、当該ＣＰＵと周辺デバイスとを接続するＰＣＩバスを有する情報処理装置であって、
前記ＣＰＵは、ＰＣＩノードについて、当該ＰＣＩノードのクラスコードおよびサブクラスコードに基づいて、当該ＰＣＩノードの下流側のＰＣＩノードを探す探索処理を行うか否かを判定し、前記探索処理によって見つけられたＰＣＩノードを初期化し、
前記判定において前記ＣＰＵは、
ＰＣＩノードのクラスコードがブリッジであることを示すクラスコードで、かつ前記ＰＣＩノードのサブクラスコードが予め決められている特定のサブクラスコードである場合に、前記探索処理を行わないと判定し、
ＰＣＩノードのクラスコードがブリッジであることを示すクラスコードで、かつ前記ＰＣＩノードのサブクラスコードが前記特定のサブクラスコードでない場合に、前記探索処理を行うと判定することを特徴とする情報処理装置。
【請求項２】
ＰＣＩノードの下流側のＰＣＩノードを探す前記探索処理は、当該下流側のＰＣＩノードから該ＰＣＩノードのベンダーＩＤを所定時間の間で取得する取得処理を含むことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記取得処理は、取得されたベンダーＩＤが、何も接続されていないデバイス番号を示す番号であれば、該ＰＣＩノードから該ＰＣＩノードのベンダーＩＤを再度取得することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
ＰＣＩノードの下流側のＰＣＩノードを探す前記探索処理は、当該下流側のＰＣＩノードについて、当該下流側のＰＣＩノードのクラスコードおよびサブクラスコードに基づいて、当該下流側のＰＣＩノードのさらに下流側のＰＣＩノードを探す探索処理を行うか否かを判定する処理を含むことを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項５】
前記判定において前記ＣＰＵは、前記ＰＣＩノードのクラスコードがブリッジであることを示すクラスコードであると判定されなければ、前記探索処理を行わないと判定することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
ＰＣＩノードのクラスコードは、当該ＰＣＩノードのコンフィグレーションレジスタのクラスコードレジスタに格納されている１バイトの情報であり、
ＰＣＩノードのサブクラスのコードは、当該ＰＣＩノードのコンフィグレーションレジスタのサブクラスレジスタに格納されている１バイトの情報であることを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
ＣＰＵと、当該ＣＰＵと周辺デバイスとを接続するＰＣＩバスを有する情報処理装置の制御方法であって、
前記ＣＰＵが、ＰＣＩノードについて、当該ＰＣＩノードのクラスコードおよびサブクラスコードに基づいて、当該ＰＣＩノードの下流側のＰＣＩノードを探す探索処理を行うか否かを判定し、前記探索処理によって見つけられたＰＣＩノードを初期化する工程を有し、
前記判定において前記ＣＰＵは、
ＰＣＩノードのクラスコードがブリッジであることを示すクラスコードで、かつ前記ＰＣＩノードのサブクラスコードが予め決められている特定のサブクラスコードである場合に、前記探索処理を行わないと判定し、
ＰＣＩノードのクラスコードがブリッジであることを示すクラスコードで、かつ前記ＰＣＩノードのサブクラスコードが前記特定のサブクラスコードでない場合に、前記探索処理を行うと判定することを特徴とする制御方法。
【請求項８】
ＰＣＩノードの下流側のＰＣＩノードを探す前記探索処理は、当該下流側のＰＣＩノードから該ＰＣＩノードのベンダーＩＤを所定時間の間で取得する取得処理を含むことを特徴とする請求項７に記載の制御方法。
【請求項９】
前記取得処理は、取得されたベンダーＩＤが、何も接続されていないデバイス番号を示す番号であれば、該ＰＣＩノードから該ＰＣＩノードのベンダーＩＤを再度取得することを特徴とする請求項８に記載の制御方法。
【請求項１０】
ＰＣＩノードの下流側のＰＣＩノードを探す前記探索処理は、当該下流側のＰＣＩノードについて、当該下流側のＰＣＩノードのクラスコードおよびサブクラスコードに基づいて、当該下流側のＰＣＩノードのさらに下流側のＰＣＩノードを探す探索処理を行うか否かを判定する処理を含むことを特徴とする請求項７乃至９の何れか１項に記載の制御方法。
【請求項１１】
前記判定において前記ＣＰＵは、前記ＰＣＩノードのクラスコードがブリッジであることを示すクラスコードであると判定されなければ、前記探索処理を行わないと判定することを特徴とする請求項７乃至１０のいずれか１項に記載の制御方法。
【請求項１２】
ＰＣＩノードのクラスコードは、当該ＰＣＩノードのコンフィグレーションレジスタのクラスコードレジスタに格納されている１バイトの情報であり、
ＰＣＩノードのサブクラスのコードは、当該ＰＣＩノードのコンフィグレーションレジスタのサブクラスレジスタに格納されている１バイトの情報であることを特徴とする請求項７乃至１１の何れか１項に記載の制御方法。
【請求項１３】
コンピュータに、請求項７乃至１２のいずれか１項に記載の制御方法の各工程を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、その制御方法及びプログラムに関する。
【背景技術】
【０００２】
近年、ＣＰＵを備えた画像形成装置において、そのＣＰＵの周辺デバイス（ペリフェラルデバイス）が増えたことにより、その起動時間が長くなる傾向がある。このようなペリフェラルデバイスを接続するバスアーキテクチャとして、例えばＰＣＩがあり、ＣＰＵはＢＩＯＳやローダ、或いは、カーネルの起動時に、ＰＣＩバスを介して接続されている各デバイスを初期化する。ＰＣＩでは、複数のノードがバスツリー構造として配置されている。即ち、ＰＣＩバス上にＰＣＩデバイスとＰＣＩブリッジが接続され、特に、ＰＣＩブリッジの場合は、さらに別のＰＣＩバスと接続される。このように、ＰＣＩブリッジを介することで、ＰＣＩバスを多段接続することが可能となり、より多くのＰＣＩデバイスを接続できる。
【０００３】
ＢＩＯＳやローダ、或いは、カーネルの起動時のＰＣＩデバイスの初期化の際、ＣＰＵは、そのＣＰＵに最も近いＰＣＩバス上のブリッジを探し、更にそのブリッジの先のＰＣＩバス上のブリッジを探すことを繰り返す。こうして最終的にＰＣＩバスに接続された全てのデバイスの初期化を行う。尚、これ以降、ＰＣＩブリッジとＰＣＩデバイスを総称して、ＰＣＩノードとする。
【０００４】
このような装置で、ＰＣＩ接続されたデバイスを探索して初期化するシステムコントローラを情報処理システムの外部に接続して起動の高速化を図る技術が特許文献１に記載されている。この特許文献１では、システムコントローラは、プロセッサシステムとブリッジとの間のホストバスを初期化する間に、そのブリッジに接続された周辺デバイスを初期化している。しかしながら、この特許文献１には、ＰＣＩ−ＰＣＩブリッジ、ホスト−ＰＣＩブリッジが記載されているが、そのＰＣＩブリッジの種類を判別して初期化処理を実行することの記載はない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２４１５２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＰＣＩ接続の場合、従来、ＰＣＩバスに接続されているＰＣＩノードが、ＰＣＩブリッジかＰＣＩデバイスかの判別の際は、そのＰＣＩノードのPCI Configuration RegisterのＣｌａｓｓ  Ｃｏｄｅレジスタを参照していた。即ち、Ｃｌａｓｓ  Ｃｏｄｅレジスタが０ｘ０６（ＰＣＩブリッジ）であれば、そのＰＣＩノードはＰＣＩブリッジであると判別していた。
【０００７】
しかし、ＰＣＩデバイスでありながら、PCI Configuration RegisterのＣｌａｓｓ  Ｃｏｄｅレジスタが０ｘ０６（ＰＣＩブリッジ）であるもの（以降、疑似ブリッジ）が装置内に存在することがある。このような場合は、更に、そのＰＣＩデバイスの先の存在しないＰＣＩノードを探索することになる。このとき、例えば疑似ブリッジ一つにつき最低１秒の起動時間のロスが生じる。一般的に、例えば少なくとも３０秒での起動を目指している画像形成装置では、ＢＩＯＳだけで約１秒の起動時間のロスが生じるのは、画像形成装置としての商品価値を損なうことにもなりかねない。
【０００８】
本発明の目的は、上記従来技術の問題点を解決することにある。
【０００９】
本発明の特徴は、疑似ブリッジを正確に検出することにより、その疑似ブリッジによる起動時間の遅れを防止する技術を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
ＣＰＵと、当該ＣＰＵと周辺デバイスとを接続するＰＣＩバスを有する情報処理装置であって、
前記ＣＰＵは、ＰＣＩノードについて、当該ＰＣＩノードのクラスコードおよびサブクラスコードに基づいて、当該ＰＣＩノードの下流側のＰＣＩノードを探す探索処理を行うか否かを判定し、前記探索処理によって見つけられたＰＣＩノードを初期化し、
前記判定において前記ＣＰＵは、
ＰＣＩノードのクラスコードがブリッジであることを示すクラスコードで、かつ前記ＰＣＩノードのサブクラスコードが予め決められている特定のサブクラスコードである場合に、前記探索処理を行わないと判定し、
ＰＣＩノードのクラスコードがブリッジであることを示すクラスコードで、かつ前記ＰＣＩノードのサブクラスコードが前記特定のサブクラスコードでない場合に、前記探索処理を行うと判定することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、疑似ブリッジを正確に検出することにより、その疑似ブリッジによる起動時間の遅れを防止できるという効果がある。
【００１２】
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。なお、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
【図面の簡単な説明】
【００１３】
添付図面は明細書に含まれ、その一部を構成し、本発明の実施の形態を示し、その記述と共に本発明の原理を説明するために用いられる。
【図１】本発明の実施形態１に係る画像形成装置（ＭＦＰ）のハードウェア構成を説明するブロック図。
【図２】実施形態１に係る画像形成装置の制御部のハードウェア構成を説明するブロック図。
【図３】PCI Local Bus Specification Revision 3.0に記載されている、PCI Configuration Registerの内容の一例を示す図。
【図４】ＣＰＵにＰＣＩバスが多段で接続され、それぞれのバスにＰＣＩデバイスが接続されている一般的なＰＣＩバスの構成を示すブロック図。
【図５】実施形態１に係る画像形成装置の制御部のＣＰＵによる、接続されたＰＣＩバスの探索処理を説明するフローチャート。
【図６】実施形態１において、図５のＳ５０９のＰＣＩノードがＰＣＩブリッジであるか否かの判定処理を説明するフローチャート。
【図７】実施形態２に係る画像形成装置に接続され得るＰＣＩノードで疑似ブリッジであると予め判明している、ベンダーＩＤとデバイスＩＤの組み合わせの一例を示す図（Ａ）と、実施形態２に係る画像形成装置の制御部のＣＰＵによる、前述の図５のＳ５０９の処理を説明するフローチャート（Ｂ）。
【発明を実施するための形態】
【００１４】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。尚、以下の説明では、プリンタ等に代表される画像形成装置の一例として、スキャナ機能、プリンタ機能、ＦＡＸ機能を有する多機能処理装置（ＭＦＰ）を例に説明するが、本発明に係る情報処理装置はこれに限定されるものではない。例えば、スキャナ機能、プリンタ機能、ＦＡＸ機能の何れか１つ以上を有する画像処理装置や、ＰＣ等に代表される一般的な情報処理装置等にも適用される。
【００１５】
［実施形態１］
図１は、本発明の実施形態１に係る画像形成装置（ＭＦＰ）１０１のハードウェア構成を説明するブロック図である。
【００１６】
画像形成装置１０１は、ＬＡＮ１１５を介して、ＰＣ１１６及びＰＣ１１７に接続されている。また画像形成装置１０１は、リーダ部１０２、プリンタ部１０３、ＦＡＸ部１０４、操作部１０５、ハードディスク等の記憶部１０６、及び制御部１０７を有する。
【００１７】
リーダ部１０２は、原稿の画像を読み取って画像データを出力する。このリーダ部１０２は、原稿をスキャナユニット１１１の位置に搬送する原稿給紙ユニット１１０、その搬送された原稿を光学的に読み取って画像データを生成するスキャナユニット１１１を有する。
【００１８】
プリンタ部１０３は、画像データに基づいて用紙に印刷を行う。プリンタ部１０３は、印刷に使用する用紙（シート）をマーキングユニット１１３に搬送する給紙ユニット１１２、その用紙に画像を印刷するマーキングユニット１１３、印刷済の用紙を排紙する排紙ユニット１１４を有する。給紙ユニット１１２は、複数の用紙を収容する複数段の給紙カセットを備える。マーキングユニット１１３は、制御部１０７からの画像データに従って用紙に画像を印刷する。排紙ユニット１１４は、印刷された用紙にソート処理やステイプル処理を施して排出する。
【００１９】
操作部１０５は、キーやタッチパネルへのユーザ操作に応じて各種指示を受け付ける。また操作部１０５は、タッチパネルを介してユーザに各種情報を通知する。記憶部１０６は、制御プログラムや画像データ等を記憶する、例えばハードディスクやメモリカードなどの大容量の記憶部である。ＦＡＸ部１０４は、ファクシミリの入出力処理を行う。制御部１０７は、リーダ部１０２、プリンタ部１０３、操作部１０５、記憶部１０６、ＦＡＸ部１０４等の各構成要素と接続し、これらの動作を制御する。
【００２０】
図２は、実施形態１に係る画像形成装置１０１の制御部１０７のハードウェア構成を説明するブロック図である。
【００２１】
制御部１０７は、大きく分けて、一般的な情報処理を司るメインボード２２０と、画像形成処理を司るサブボード２３０とを有する。尚、メインボード２２０とサブボード２３０は、一つのボードとして構成してもよい。ここでメインボード２２０とサブボード２３０とはＰＣＩバス（入出力バス）２２７を介して接続されている。メインボード２２０のＣＰＵ２０１は、ＣＰＵ２０１に接続されたＰＣＩバスに接続されたＰＣＩブリッジ２０６とＰＣＩバス２２７を介してサブボード２３０とデータのやり取りを行う。
【００２２】
メインボード２２０には、ブートロム（BootRom）２０２，ＣＰＵ２０１，ＰＣＩコントローラ２０５、ディスクコントローラ２１０、ポートスイッチ２１１、ポートセレクタ２１２、フラッシュディスク２１３が実装されている。またメインボード２２０には、メモリコントローラ２０３、ＤＲＡＭ２０４，ＰＣＩブリッジ２０６，２０７，ＮＩＣ２０８も実装されている。
【００２３】
ブートロム２０２は、不揮発性の記憶媒体であり、起動プログラム等を格納している。ＣＰＵ２０１は、起動プログラム、ＯＳ、アプリケーションプログラム等を実行する。ＰＣＩコントローラ（PCI COntroller）２０５は、ＮＩＣ２０８とサブボード２３０との間のデータのやりとりを制御する。ディスクコントローラ（Disk Controller）２１０は、ポートスイッチ（Port Switch）２１１とポートセレクタ（Port Selector）２１２を介して記憶部１０６を制御する。ポートスイッチ２１１は、ＣＰＵ２０１から命令を受けて、ポートセレクタ２１２を介するアクセスのＯＮ／ＯＦＦを切り換える。ポートセレクタ２１２は、フラッシュディスク（Flash Disk）２１３と記憶部１０６とを接続し、それらの何れにアクセスするか選択する。フラッシュディスク２１３は不揮発性の記憶媒体であり、ＯＳやアプリケーションプログラム等を格納する。メモリコントローラ（Memory Controller）２０３はＤＲＡＭ２０４を制御する。ＤＲＡＭ２０４は揮発性の記憶媒体であり、ＣＰＵ２０１が使用するプログラムや画像データ等を一時的に記憶する。
【００２４】
ＰＣＩブリッジ（PCI Bridge）２０６は、ＰＣＩコントローラ２０５と、サブボード２３０のＰＣＩコントローラ２２３との間で、ＰＣＩバス２２７を介したデータの中継を行う。ＰＣＩブリッジ２０７は、ＰＣＩコントローラ２０５とＮＩＣ２０８との間で、ＰＣＩバス２０９を介したデータの中継を行う。ＮＩＣ（Network Interface Card）２０８は、ＬＡＮ１１５を介してＰＣ１１６やＰＣ１１７と通信可能である。
【００２５】
次にサブボード２３０の構成を説明する。
【００２６】
サブボード２３０には、ＣＰＵ２２１，ブートロム２２２，ＰＣＩコントローラ２２３、メモリコントローラ２２４，ＤＲＡＭ２２５、イメージプロセッサ２２６、デバイスコントローラ２２９等が実装されている。ブートロム２２２は不揮発性の記憶媒体であり、起動プログラム等を格納する。ＣＰＵ２２１は、起動プログラム、ＯＳ、アプリケーションプログラム等を実行する。メモリコントローラ（Memory Controller）２２４はＤＲＡＭ２２５を制御する。ＤＲＡＭ２２５は揮発性の記憶媒体であり、ＣＰＵ２２１が使用するプログラムや画像データ等を一時的に記憶する。イメージプロセッサ（Image Processor）２２６は、画像データに対して様々な画像処理を実行する。ＰＣＩコントローラ（PCI Controller）２２３は、メインボード２２０とのデータのやりとりを制御する。デバイスコントローラ（Device Controller）２２９は、リーダ部１０２、プリンタ部１０３、ＦＡＸ部１０４を制御する。尚、操作部１０５は、不図示のバスを介してＣＰＵ２０１に接続されている。
【００２７】
図３は、PCI Local Bus Specification Revision 3.0に記載されている、PCI Configuration Registerの内容の一例を示す図である。
【００２８】
図３（Ａ）は、PCI Configuration Registerの先頭から１６バイトを示している。以下、本実施形態に関するRegisterについてのみ説明する。ここで小さい方の一つの四角の枠は１バイトを示し、大きい方の一つの四角の枠は２バイトをそれぞれ示している。
【００２９】
Ｄｅｖｉｃｅ  ＩＤ（デバイスＩＤ）レジスタ３００は、製造ベンダによって割り振られ、ＰＣＩノードを特定するための２バイトのコードを格納しており読出し専用である。Ｖｅｎｄｏｒ  ＩＤ（ベンダーＩＤ）レジスタ３０１は、このＰＣＩノードの製造ベンダを示す２バイトのコードを格納しており、これは読出し専用である。Ｃｌａｓｓ  Ｃｏｄｅ（クラスコード）レジスタ３０２は、このＰＣＩノードの機能を示すコードを格納しており、これは読み出し専用である。ＳｕｂＣｌａｓｓ（サブクラス）レジスタ３０３は、Ｃｌａｓｓ  Ｃｏｄｅレジスタ３０２に格納されたコード毎に定められた、Ｃｌａｓｓ  Ｃｏｄｅレジスタのコードを補足するコードを格納しており、これは読み出し専用である。
【００３０】
図３（Ｂ）は、ベンダーＩＤレジスタ３０１に格納されるコードの一例を示す図である。ここでは例えば、ＡＢＣ社が製造したＰＣＩノードの場合を示し、そのベンダー名（ＡＢＣ社）に対応するコード「０ｘ１１ＡＣ」が格納されている。他のベンダについても同様に、一意の２バイトのコードが定められている。
【００３１】
図３（Ｃ）は、Ｃｌａｓｓ  Ｃｏｄｅレジスタ３０２に格納されるコードの一例を示す図である。例えば、ここでは例えばＰＣＩブリッジであれば、それを示すコード「０ｘ０６」が格納されている。他の機能についても、一意の１バイトのコードが定められている。
【００３２】
図３（Ｄ）は、Ｃｌａｓｓ  Ｃｏｄｅレジスタ３０２のコードがＰＣＩブリッジを示す「０ｘ０６」である場合にＳｕｂＣｌａｓｓレジスタ３０３に格納されるコードの一例を示す図である。例えば、そのＰＣＩブリッジが「PCI-to-PCI bridge」であれば、それを示すコード「０ｘ０４」が格納される。また、PCI-to-PCI bridgeの他に１０種類の一意の１バイトのコードが定められている。更に、これら１１種類のどれにも当てはまらないＰＣＩブリッジの場合は、他のブリッジであることを示すコード「０ｘ８０」が格納される。
【００３３】
図４は、ＣＰＵ４００にＰＣＩバスが多段で接続され、それぞれのバスにＰＣＩデバイス（周辺デバイス）が接続されている一般的なＰＣＩバスの構成を示すブロック図である。尚、ＰＣＩバスに接続されているＰＣＩノードは、デバイス番号の順に上から並んでいるものとする。次に図４を参照して、ＣＰＵ４００が、ＢＩＯＳやローダ、或いは、カーネルなどの起動プログラムを用いて、どのようにＰＣＩバスを探索するかについて説明する。
【００３４】
まずＣＰＵ４００は、そのＣＰＵ４００に接続されているＰＣＩバス（ＰＣＩバス０）４０１上のＰＣＩブリッジ４２０，４２１のうち、最もデバイス番号の若いＰＣＩブリッジ（ここではＰＣＩブリッジ４２０）を検出する。更に、その検出したＰＣＩブリッジに接続されているＰＣＩバス（ここではＰＣＩバス４１１）を検出する。次に、その検出したＰＣＩバス（ここではＰＣＩバス４１１）に接続されるＰＣＩノードに、ＰＣＩブリッジが存在するかを判定する。ここでＰＣＩブリッジが存在しないと判定すると、ＰＣＩバス０（４０１）上のＰＣＩブリッジの次にデバイス番号の若いＰＣＩブリッジ（ここではＰＣＩブリッジ４２１）を検出する。そして、これ以降、上記と同様の処理を行う。
【００３５】
一方、その検出したＰＣＩブリッジに接続されるＰＣＩバスに接続されるＰＣＩノードにＰＣＩブリッジが存在すると判定した場合は、更に、そのＰＣＩブリッジに接続するＰＣＩバスを検出する。そして、その検出したＰＣＩバスに接続されるＰＣＩノードにＰＣＩブリッジが存在するか否かを判定する。以降、このような処理をＰＣＩブリッジが検出されなくなるまで実行する。
【００３６】
図４の例で説明する。ＣＰＵ４００はまずＰＣＩバス４０１（PCI Bus 0）に接続されている、最もデバイス番号の若いＰＣＩブリッジ４２０を検出する。次に、このＰＣＩブリッジ４２０に接続されるＰＣＩバス４１１（PCI Bus 1）を検出する。ここで、ＰＣＩバス４１１に接続されるＰＣＩノードにＰＣＩブリッジが存在するかを判定すると、ここではＰＣＩブリッジが存在しないので、ＰＣＩブリッジ４２０に接続されているＰＣＩバス４１１の探索を終了する。
【００３７】
続いてＣＰＵ４００は、ＰＣＩバス４０１に接続されている、次に番号の若いＰＣＩブリッジ４１２を検出する。そして、このＰＣＩブリッジ４１２に接続されるＰＣＩバス（PCI Bus 2）４１２を検出する。そして、このＰＣＩバス４１２に接続されるＰＣＩノードにＰＣＩブリッジが存在するかを判定する。ここでは、ＰＣＩブリッジ４２２が存在する。従ってＣＰＵ４００は、そのＰＣＩブリッジ４２２に接続されるＰＣＩバス４１３（PCI Bus 3）を検出する。次に、このＰＣＩバス４１３に接続されるＰＣＩノードに、ＰＣＩブリッジが存在するかを判定する。これにより、ＰＣＩブリッジ４２３が存在していることが分かる。従って、このＰＣＩブリッジ４２３に接続されるＰＣＩバス４１４（PCI Bus 4）を検出する。そして、次にＰＣＩバス４１４に接続されるＰＣＩノードにＰＣＩブリッジが存在するか否かを判定し、ここではＰＣＩブリッジが存在しないので、ＰＣＩブリッジ４１２に接続されているＰＣＩバスの探索を終了する。
【００３８】
そして、この時点で、ＰＣＩバス４０１（PCI Bus 0）に接続されているＰＣＩブリッジが他にないため、ＰＣＩバスの探索を終了する。装置の起動時に、このようなＰＣＩバスの探索が実行され、ＰＣＩバスに接続されたＰＣＩデバイスの初期化が実行される。
【００３９】
図５は、実施形態１に係る画像形成装置１０１の制御部１０７のＣＰＵ２０１による、接続されたＰＣＩバスの探索処理を説明するフローチャートである。このフローチャートで示す処理は、ブートＲＯＭ２０２に格納された起動プログラムにより、記憶部１０６或いはフラッシュディスク２１３に格納されたプログラムをＤＲＡＭ２０４に展開し、そのプログラムをＣＰＵ２０１が実行することにより達成される。
【００４０】
先ずＳ５０１でＣＰＵ２０１は、ＣＰＵ２０１に接続されているＰＣＩバスに接続されているＰＣＩブリッジを探す。このとき、最初の探索であれば、バス番号、デバイス番号、ファンクション番号の最も若いＰＣＩノードから探索する。図２の制御部１０７の場合では、最初にＰＣＩブリッジ２０６が探索される。次にＳ５０２に進みＣＰＵ２０１は、Ｓ５０１で発見したＰＣＩブリッジ２０６の先に接続されているＰＣＩバス（図２の例ではＰＣＩバス２２７）のバス番号を設定する。次にＳ５０３に進みＣＰＵ２０１は、そのＰＣＩバス２２７上のＰＣＩノードのPCI Configuration Registerに書きこみを行う。
【００４１】
次にＳ５０４に進みＣＰＵ２０１は、Ｓ５０３のＰＣＩノードのベンダーＩＤレジスタ３０１を読み込む。そしてＳ５０５に進みＣＰＵ２０１は、ベンダーＩＤレジスタ３０１の内容が、何も接続されていないデバイス番号を指定した場合を示す「０ｘＦＦＦＦ」であるか否かを判定する。そして、そうであればベンダーＩＤレジスタ３０１の内容が無効であるためＳ５０６に進む。Ｓ５０６でＣＰＵ２０１は、ベンダーＩＤレジスタ３０１を読み込んだ後、１秒が経過したか否かを判定し、１秒が経過していればＳ５０７に進みＣＰＵ２０１は、そのＰＣＩバスにＰＣＩノードは存在しないと判定してＳ５０８の処理に進む。尚、Ｓ５０６で１秒が経過していないときはＳ５０４に戻る。
【００４２】
一方、Ｓ５０５でＣＰＵ２０１は、ベンダーＩＤレジスタ３０１の内容が「０ｘＦＦＦＦ」でないと判定するとＳ５０９に進み、ＣＰＵ２０１は、Ｓ５０３でレジスタに書き込みを行ったＰＣＩノードがＰＣＩブリッジであるか否かの判別処理を実行する。この判別処理は図６を参照して後述する。そしてＳ５１０に進みＣＰＵ２０１は、ＰＣＩノードがＰＣＩブリッジであるかを判定して、ＰＣＩブリッジであると判定するとＳ５０２に進み、そのＰＣＩブリッジに対して、前述した処理を実行する。またＳ５１０でＣＰＵ２０１は、ＰＣＩブリッジでないと判定するとＳ５０８に進む。Ｓ５０８でＣＰＵ２０１は、まだ探索を行っていないＰＣＩブリッジがあるか否かを判定する。探索を行っていないＰＣＩブリッジが残っていればＳ５０１の処理に進み、そうでなければこの処理を終了する。
【００４３】
このフローチャートで示す処理を、前述の図２の画像形成装置１０１の制御部１０７に適用した場合、Ｓ５０１の初回のＰＣＩブリッジ探索では、ＰＣＩブリッジ２０６が探索される。このため、後続のＳ５０２ではＰＣＩバス２２７が探索の対象となる。更にＳ５０３ではサブボード２３０が探索の対象となる。図２では、ＰＣＩバス２２７に接続されたサブボード２３０の先にはＰＣＩバスが存在していない。従ってサブボード２３０は、ＰＣＩデバイスとして認識される。
【００４４】
しかしながら、Ｓ５０９でＰＣＩブリッジであると判定された場合は処理がＳ５１０、Ｓ５０１と進み、二回目のＰＣＩブリッジ探索が、サブボード２３０を対象として行われる。ここで、引き続くＳ５０２では、サブボード２３０の先の存在しないＰＣＩバスが処理の対象となり、Ｓ５０３，Ｓ５０４では存在しないサブボード２３０の先のＰＣＩノードが処理の対象となる。そしてＳ５０４では、存在しないＰＣＩノードのベンダーＩＤレジスタの読み込みを行うため、どれだけ時間をかけてもコード「０ｘＦＦＦＦ」しか読み込めず、起動時間に１秒のロスが生じることになる。
【００４５】
図６は、実施形態１において、図５のＳ５０９のＰＣＩノードがＰＣＩブリッジであるか否かの判定処理を説明するフローチャートである。
【００４６】
先ずＳ６０１でＣＰＵ２０１は、ＰＣＩノードのＣｌａｓｓ  Ｃｏｄｅレジスタ３０２とＳＵｂＣｌａｓｓレジスタ３０３を読み込む。次にＳ６０２に進みＣＰＵ２０１は、Ｓ６０１で読み込んだＣｌａｓｓ  Ｃｏｄｅレジスタ３０２の内容が、ＰＣＩブリッジであることを示すコード「０ｘ０６」であるか否かを判定する。ここでＰＣＩブリッジを示すコードであると判定するとＳ６０３に進み、そうでなければＳ６０５の処理に進む。Ｓ６０３でＣＰＵ２０１は、Ｓ６０１で読み込んだＳｕｂＣｌａｓｓレジスタ３０３の内容が、他のブリッジであることを示すコード「０ｘ８０」であるか否かを判定する。Ｓ６０３でＣＰＵ２０１は、コードが「０ｘ８０」であると判定するとＳ６０５の処理に進み、そうでなければＳ６０４の処理に進む。Ｓ６０４でＣＰＵ２０１は、ＰＣＩノードはＰＣＩブリッジであると判定して、この処理を終了する。一方Ｓ６０５ではＣＰＵ２０１は、ＰＣＩノードはＰＣＩデバイスであると判定して、この処理を終了する。
【００４７】
以上説明したように本実施形態１によれば、クラスコードレジスタでブリッジであると判定した場合でも、サブクラスレジスタで他のブリッジであると特定されているときは、そのＰＣＩノードが疑似ブリッジであると判定できる。これにより、クラスコードレジスタの内容のみでＰＣＩブリッジか否かを判定する従来技術に比べて、ＰＣＩブリッジであると誤判別される可能性が低くなる。よって、図５のフローチャートにおいて、Ｓ５１０でＰＣＩブリッジと判定したときに、Ｓ５０５でベンダーＩＤが含まれていないためにＳ５０６に進んで、起動時に１秒のロスが生じる可能性も低くなる。
【００４８】
［実施形態２］
次に本発明の実施形態２を説明する。実施形態２では、疑似ブリッジであるＰＣＩノードのベンダーＩＤとデバイスＩＤの組を予め登録しておくことで、疑似ブリッジであるＰＣＩノードを判別する。尚、実施形態２に係る画像形成装置１０１のハードウェア構成等は、前述の実施形態１の場合と同じであるため、その説明を省略する。
【００４９】
図７（Ａ）は、実施形態２に係る画像形成装置１０１に接続され得るＰＣＩノードで疑似ブリッジであると予め判明している、ベンダーＩＤとデバイスＩＤの組み合わせの一例を示す図である
実施形態２では、画像形成装置１０１に接続され得るＰＣＩノードのうち、ベンダーＩＤとデバイスＩＤの組み合わせがそれぞれ（０ｘ１１ＡＣ，０ｘ０００１）、（０ｘ１１ＡＣ，０ｘ０００２）、（０ｘ１１ＡＣ，０ｘ０００３）であるＰＣＩノードが疑似ブリッジとしている。
【００５０】
図７（Ｂ）は、実施形態２に係る画像形成装置１０１の制御部のＣＰＵ２０１による、前述の図５のＳ５０９の処理を説明するフローチャートである。
【００５１】
先ずＳ７０１でＣＰＵ２０１は、ＰＣＩノードのベンダーＩＤレジスタ３０１とデバイスＩＤレジスタ３００の内容を読み込む。次にＳ７０２に進みＣＰＵ２０１は、Ｓ７０１で読み込んだベンダーＩＤとデバイスＩＤの組み合わせが、図７（Ａ）の疑似ブリッジリストの組み合わせのいずれかに一致するかを判定する。ここでいずれかに一致すると判定するとＳ７０４の処理に進み、そうでなければＳ７０３の処理に進む。Ｓ７０３でＣＰＵ２０１は、そのＰＣＩノードはＰＣＩブリッジであると判定して、この処理を終了する。一方、Ｓ７０４でＣＰＵ２０１は、そのＰＣＩノードはＰＣＩデバイスであると判定して、この処理を終了する。
【００５２】
以上説明したように実施形態２によれば、ＰＣＩノードが疑似ブリッジであった場合でも、ＰＣＩブリッジであると誤判別されることを確実に回避できる。よって、図５のフローチャートにて、疑似ブリッジの存在一つにつき、起動時間に１秒のロスが生じることも無くなる。
【００５３】
この実施形態２は、画像形成装置のみならず、接続されるＰＣＩノードが予め分かっている組み込みシステムで特に有効である。
【００５４】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００５５】
本発明は上記実施の形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
【符号の説明】
【００５６】
１０１…画像形成装置、１０２…スキャナ部、１０３…プリンタ部、２０１，２２１…ＣＰＵ，２０５，２２３…ＰＣＩコントローラ、２０６，２０７…ＰＣＩブリッジ、２２７…ＰＣＩバス
【図１】
0006525555.tif 000002
【図２】
0006525555.tif 000003
【図３】
0006525555.tif 000004
【図４】
0006525555.tif 000005
【図５】
0006525555.tif 000006
【図６】
0006525555.tif 000007
【図７】
0006525555.tif 000008