Is it possible to do this in the bus filter driver...

Is it possible to do this in the bus filter driver...

Post by Xinhai Kan » Fri, 18 Jan 2002 14:15:52



Hello all,

I have two or more identical controllers on the PCI bus, I want to export
only one device to the upper layer, is it possible to create a pseudo PDO
which stands for all controllers in the PCI bus filter driver?

I want to do like following:

When my bus filter driver get IRP_MN_QUERY_DEVICE_RELATIONS, (With
BusRelations as the example) first I pass it down to the bus driver. When
the request completed, I check the returned relations, remove all PDO belong
to my controllers and create a new PDO and add it into the relations.

Is it possible?

And another question, is it possible to have my own bus driver to handle
devices
on the PCI bus? of course I cannot replace the PCI bus driver.

Thanks a lot

------------------------------
Regards
Xinhai

 
 
 

Is it possible to do this in the bus filter driver...

Post by Brian Catli » Fri, 18 Jan 2002 14:50:49


 OK, let me see if I understand what you're trying to do.  You are either trying
to multiplex between multiple devices, or fail-over, and you're not writing the
function driver.  So, for whatever reason, you only want some subset of the
available devices to be visible to the system, until such time as you decide
that you want to make more of them visible, right?  Now the big question is, are
you trying to implement multiplexing or fail-over?  If all you're doing is
fail-over, then it should be sufficient to have the bus driver "eat" the PDO
when the QUERY_DEVICE_RELATIONS (BusRelations) IRP is on the way up the DevNode.
However, if you're trying to implement multiplexing, then instead of a bus
filter, create an upper-level function filter (sitting on top of the FDO) in the
DevNodes that you care about.  When any IRP comes in, decide which DevNode it
should be targeted at, and then pass it down to the correct FDO (NOT starting at
the top of the DevNode).  There is a potential problem if all the DevNodes that
you're filtering don't have the same number of device objects, which means that
your IRP might not have enough stack locations if it switches to a stack with
more device objects than the one it came from.  Also, the driver verifier might
shoot you in the head if it detects IRPs moving between stacks; I don't remember
if it checks for this.

I realize that this is sort of a hack, but unless you have control over the
function drivers, I don't see a better method (at least, at this time of
night!).  Perhaps Eliyas, Bill or Walter will have a better idea.

 -Brian

--
Brian Catlin, Sannas Consulting 310-798-8930
Windows XP/2000 Internals, WDM Device Driver Training & Consulting
See WWW.AZIUS.COM for courses and scheduling


Quote:> Hello all,

> I have two or more identical controllers on the PCI bus, I want to export
> only one device to the upper layer, is it possible to create a pseudo PDO
> which stands for all controllers in the PCI bus filter driver?

> I want to do like following:

> When my bus filter driver get IRP_MN_QUERY_DEVICE_RELATIONS, (With
> BusRelations as the example) first I pass it down to the bus driver. When
> the request completed, I check the returned relations, remove all PDO belong
> to my controllers and create a new PDO and add it into the relations.

> Is it possible?

> And another question, is it possible to have my own bus driver to handle
> devices
> on the PCI bus? of course I cannot replace the PCI bus driver.

> Thanks a lot

> ------------------------------
> Regards
> Xinhai


 
 
 

Is it possible to do this in the bus filter driver...

Post by Bill McKenzi » Sat, 19 Jan 2002 01:21:30



Quote:> OK, let me see if I understand what you're trying to do.  You are either
trying
> to multiplex between multiple devices, or fail-over, and you're not
writing the
> function driver.  So, for whatever reason, you only want some subset of
the
> available devices to be visible to the system, until such time as you
decide
> that you want to make more of them visible, right?  Now the big question
is, are
> you trying to implement multiplexing or fail-over?  If all you're doing is
> fail-over, then it should be sufficient to have the bus driver "eat" the
PDO
> when the QUERY_DEVICE_RELATIONS (BusRelations) IRP is on the way up the

DevNode.

Assuming you could figure out which PDO went with your device, which I can
only imagine figuring out by querying the PDO itself, (which could only
occur after the stack was fully constructed and thus the PDO was reported to
the PnP manager),  if you take away this PDO and don't report it to the PnP
manager, you are very likely to put the bus driver into some kind of odd
state.  Although, I can't think of a problem off the top of my head with
this specific case.  I would actually be curious to know if this worked, and
if you could indeed have this device pop-up later.  This would be especially
interesting to know for a PCI device.  I might have to try this sometime :)
You definitely could only do this once, as in you couldn't have the device
show up to the PnP manager and then take it back out again.  That would
definitely*up the bus driver.  But, a scenario like a fail-over might
just work, again, only if you could sort out the PDOs.

Quote:> However, if you're trying to implement multiplexing, then instead of a bus
> filter, create an upper-level function filter (sitting on top of the FDO)
in the
> DevNodes that you care about.  When any IRP comes in, decide which DevNode
it
> should be targeted at, and then pass it down to the correct FDO (NOT
starting at
> the top of the DevNode).  There is a potential problem if all the DevNodes
that
> you're filtering don't have the same number of device objects, which means
that
> your IRP might not have enough stack locations if it switches to a stack
with
> more device objects than the one it came from.  Also, the driver verifier
might
> shoot you in the head if it detects IRPs moving between stacks; I don't
remember
> if it checks for this.

One obvious problem would be that all of the devices would still show up in
DeviceManager this way, which probably would not be desireable for this
case.  You could just have the filter driver ask for a sufficiently large
enough StackSize to take care of the IRP stack locations problem.  But, that
would be somewhat inefficient because if you go over 8 stack locations, (I
think it is still 8), the system would have to special allocate all the IRPs
for all of your devices, yuck.   Also, what if someone else tried to filter
one or all of your devices with this IRP swapping around scheme, they
couldn't see all the IRPs in their filter, probably no big deal but...  I
don't know what DriverVerifier would do with this, I am pretty sure you
could get around it okay.

Quote:> I realize that this is sort of a hack, but unless you have control over
the
> function drivers, I don't see a better method (at least, at this time of
> night!).  Perhaps Eliyas, Bill or Walter will have a better idea.

>  -Brian

I don't see a good method for either one of these scenarios.  It would be
good to know the WHAT exactly and the WHY of that which is attempting to be
accomplished here.

--
Bill McKenzie
Software Engineer
BSquare Corporation
**Try our driver tools for free -- 30-day full-featured evaluations for
download**
www.bsquare.com/offer/download

 
 
 

Is it possible to do this in the bus filter driver...

Post by Xinhai Kan » Sat, 19 Jan 2002 02:14:43


Thanks a lot for your reply. I am sorry I didn't express what I want
clearly, let me clarify it here...

What I am doing is to implement a software RAID driver, which can manage a
array cross
multiple controllers.

Because there are multiple controllers, Windows will call our
HwScsiFindAdapter multiple times
for each controller, and then call HwScsiInitialize to initialize it, after
that it will send us a INQUIRY
command to try to create disk PDO. Because our RAID driver cannot do
anything until all controllers
initialized, so our driver just fail the INQUIRY command with no device.
When OS INQUIRY the
last controller, we will gather information from all disks in all
controllers and return correct INQUIRY
information to Windows.

Normally it works ok, but there are some problems.

Because we just return correct information to INQUIRY command on the last
controller, Windows
think there is no device on all other controllers and won't handle it as
normal device during enable/disable,
ACPI tests.

That is, although there are multiple controllers, we must handle them as one
controller. I hope only the
PnP manager can see all controllers, all other layers can only see one
controller.

Thanks again.


> OK, let me see if I understand what you're trying to do.  You are either
trying
> to multiplex between multiple devices, or fail-over, and you're not
writing the
> function driver.  So, for whatever reason, you only want some subset of
the
> available devices to be visible to the system, until such time as you
decide
> that you want to make more of them visible, right?  Now the big question
is, are
> you trying to implement multiplexing or fail-over?  If all you're doing is
> fail-over, then it should be sufficient to have the bus driver "eat" the
PDO
> when the QUERY_DEVICE_RELATIONS (BusRelations) IRP is on the way up the
DevNode.
> However, if you're trying to implement multiplexing, then instead of a bus
> filter, create an upper-level function filter (sitting on top of the FDO)
in the
> DevNodes that you care about.  When any IRP comes in, decide which DevNode
it
> should be targeted at, and then pass it down to the correct FDO (NOT
starting at
> the top of the DevNode).  There is a potential problem if all the DevNodes
that
> you're filtering don't have the same number of device objects, which means
that
> your IRP might not have enough stack locations if it switches to a stack
with
> more device objects than the one it came from.  Also, the driver verifier
might
> shoot you in the head if it detects IRPs moving between stacks; I don't
remember
> if it checks for this.

> I realize that this is sort of a hack, but unless you have control over
the
> function drivers, I don't see a better method (at least, at this time of
> night!).  Perhaps Eliyas, Bill or Walter will have a better idea.

>  -Brian

> --
> Brian Catlin, Sannas Consulting 310-798-8930
> Windows XP/2000 Internals, WDM Device Driver Training & Consulting
> See WWW.AZIUS.COM for courses and scheduling



> > Hello all,

> > I have two or more identical controllers on the PCI bus, I want to
export
> > only one device to the upper layer, is it possible to create a pseudo
PDO
> > which stands for all controllers in the PCI bus filter driver?

> > I want to do like following:

> > When my bus filter driver get IRP_MN_QUERY_DEVICE_RELATIONS, (With
> > BusRelations as the example) first I pass it down to the bus driver.
When
> > the request completed, I check the returned relations, remove all PDO
belong
> > to my controllers and create a new PDO and add it into the relations.

> > Is it possible?

> > And another question, is it possible to have my own bus driver to handle
> > devices
> > on the PCI bus? of course I cannot replace the PCI bus driver.

> > Thanks a lot

> > ------------------------------
> > Regards
> > Xinhai

 
 
 

Is it possible to do this in the bus filter driver...

Post by Xinhai Kan » Sat, 19 Jan 2002 02:21:37


I think failover is what I want...


> OK, let me see if I understand what you're trying to do.  You are either
trying
> to multiplex between multiple devices, or fail-over, and you're not
writing the
> function driver.  So, for whatever reason, you only want some subset of
the
> available devices to be visible to the system, until such time as you
decide
> that you want to make more of them visible, right?  Now the big question
is, are
> you trying to implement multiplexing or fail-over?  If all you're doing is
> fail-over, then it should be sufficient to have the bus driver "eat" the
PDO
> when the QUERY_DEVICE_RELATIONS (BusRelations) IRP is on the way up the
DevNode.
> However, if you're trying to implement multiplexing, then instead of a bus
> filter, create an upper-level function filter (sitting on top of the FDO)
in the
> DevNodes that you care about.  When any IRP comes in, decide which DevNode
it
> should be targeted at, and then pass it down to the correct FDO (NOT
starting at
> the top of the DevNode).  There is a potential problem if all the DevNodes
that
> you're filtering don't have the same number of device objects, which means
that
> your IRP might not have enough stack locations if it switches to a stack
with
> more device objects than the one it came from.  Also, the driver verifier
might
> shoot you in the head if it detects IRPs moving between stacks; I don't
remember
> if it checks for this.

> I realize that this is sort of a hack, but unless you have control over
the
> function drivers, I don't see a better method (at least, at this time of
> night!).  Perhaps Eliyas, Bill or Walter will have a better idea.

>  -Brian

> --
> Brian Catlin, Sannas Consulting 310-798-8930
> Windows XP/2000 Internals, WDM Device Driver Training & Consulting
> See WWW.AZIUS.COM for courses and scheduling



> > Hello all,

> > I have two or more identical controllers on the PCI bus, I want to
export
> > only one device to the upper layer, is it possible to create a pseudo
PDO
> > which stands for all controllers in the PCI bus filter driver?

> > I want to do like following:

> > When my bus filter driver get IRP_MN_QUERY_DEVICE_RELATIONS, (With
> > BusRelations as the example) first I pass it down to the bus driver.
When
> > the request completed, I check the returned relations, remove all PDO
belong
> > to my controllers and create a new PDO and add it into the relations.

> > Is it possible?

> > And another question, is it possible to have my own bus driver to handle
> > devices
> > on the PCI bus? of course I cannot replace the PCI bus driver.

> > Thanks a lot

> > ------------------------------
> > Regards
> > Xinhai

 
 
 

Is it possible to do this in the bus filter driver...

Post by Xinhai Kan » Sat, 19 Jan 2002 04:53:49


According to DDK documented about IRP_MN_QUERY_DEVICE_RELATIONS:

"If there are one or more bus filter drivers in the device stack, such
drivers might handle the IRP on its way down to the bus driver and/or on the
IRP's way back up the device stack (if there are IoCompletion routines).
According to the PnP IRP rules, such a driver can add PDOs to the IRP on its
way down the stack and/or modify the relations list on the IRP's way back up
the stack (in IoCompletion routines)"

So, maybe it's legal to hook IRP_MN_QUERY_DEVICE_RELATIONS...


Quote:> Hello all,

> I have two or more identical controllers on the PCI bus, I want to export
> only one device to the upper layer, is it possible to create a pseudo PDO
> which stands for all controllers in the PCI bus filter driver?

> I want to do like following:

> When my bus filter driver get IRP_MN_QUERY_DEVICE_RELATIONS, (With
> BusRelations as the example) first I pass it down to the bus driver. When
> the request completed, I check the returned relations, remove all PDO
belong
> to my controllers and create a new PDO and add it into the relations.

> Is it possible?

> And another question, is it possible to have my own bus driver to handle
> devices
> on the PCI bus? of course I cannot replace the PCI bus driver.

> Thanks a lot

> ------------------------------
> Regards
> Xinhai

 
 
 

Is it possible to do this in the bus filter driver...

Post by Bill McKenzi » Sat, 19 Jan 2002 05:34:48


Quote:> According to DDK documented about IRP_MN_QUERY_DEVICE_RELATIONS:

> "If there are one or more bus filter drivers in the device stack, such
> drivers might handle the IRP on its way down to the bus driver and/or on
the
> IRP's way back up the device stack (if there are IoCompletion routines).
> According to the PnP IRP rules, such a driver can add PDOs to the IRP on
its
> way down the stack and/or modify the relations list on the IRP's way back
up
> the stack (in IoCompletion routines)"

> So, maybe it's legal to hook IRP_MN_QUERY_DEVICE_RELATIONS...

Again, this is certainly possible, but:

1.) How do you know which PDOs to take out of the list?
2.) You could only do this once.  If you try to allow some device to exist
by letting its PDO get reported to the PnP manager at some point and then in
some later IRP_MN_QUERY_DEVICE_RELATIONS you try to filter out that PDO.
The bus driver is going to get a surprise remove and not know why.  For
something like PCI.sys that doesn't handle hot plug devices this could
really*things up and likely will.  Further, even a bus that does
handle hot-plug devices like say USB, is going to still see the device
plugged in and get confused as to why it received a surprise remove.  In
fact it would probably reenumerate the device immediately in this case,
which would likely put you into an ugly loop or something.  This is probably
one reason why MS doesn't support or recommend bus filter drivers.  Anyway,
if you just wanted to hold back a device until needed, that would probably
work.  You could not communicate with this device at all though, until the
PnP manager was aware of it.

--
Bill McKenzie
Software Engineer
BSquare Corporation
**Try our driver tools for free -- 30-day full-featured evaluations for
download**
www.bsquare.com/offer/download


> According to DDK documented about IRP_MN_QUERY_DEVICE_RELATIONS:

> "If there are one or more bus filter drivers in the device stack, such
> drivers might handle the IRP on its way down to the bus driver and/or on
the
> IRP's way back up the device stack (if there are IoCompletion routines).
> According to the PnP IRP rules, such a driver can add PDOs to the IRP on
its
> way down the stack and/or modify the relations list on the IRP's way back
up
> the stack (in IoCompletion routines)"

> So, maybe it's legal to hook IRP_MN_QUERY_DEVICE_RELATIONS...



> > Hello all,

> > I have two or more identical controllers on the PCI bus, I want to
export
> > only one device to the upper layer, is it possible to create a pseudo
PDO
> > which stands for all controllers in the PCI bus filter driver?

> > I want to do like following:

> > When my bus filter driver get IRP_MN_QUERY_DEVICE_RELATIONS, (With
> > BusRelations as the example) first I pass it down to the bus driver.
When
> > the request completed, I check the returned relations, remove all PDO
> belong
> > to my controllers and create a new PDO and add it into the relations.

> > Is it possible?

> > And another question, is it possible to have my own bus driver to handle
> > devices
> > on the PCI bus? of course I cannot replace the PCI bus driver.

> > Thanks a lot

> > ------------------------------
> > Regards
> > Xinhai

 
 
 

Is it possible to do this in the bus filter driver...

Post by Xinhai Kan » Sat, 19 Jan 2002 08:06:33



Quote:> > According to DDK documented about IRP_MN_QUERY_DEVICE_RELATIONS:

> > "If there are one or more bus filter drivers in the device stack, such
> > drivers might handle the IRP on its way down to the bus driver and/or on
> the
> > IRP's way back up the device stack (if there are IoCompletion routines).
> > According to the PnP IRP rules, such a driver can add PDOs to the IRP on
> its
> > way down the stack and/or modify the relations list on the IRP's way
back
> up
> > the stack (in IoCompletion routines)"

> > So, maybe it's legal to hook IRP_MN_QUERY_DEVICE_RELATIONS...

> Again, this is certainly possible, but:

> 1.) How do you know which PDOs to take out of the list?

When I get the relation list, maybe I can issue IRP_MN_QUERY_ID
to know if the PDO is mine. I will take all PDOs of mine (MPDOs)
out of the list. And then, I created another new PDO (NPDO)
(always only one!) and add it into the list.

- Show quoted text -

Quote:> 2.) You could only do this once.  If you try to allow some device to exist
> by letting its PDO get reported to the PnP manager at some point and then
in
> some later IRP_MN_QUERY_DEVICE_RELATIONS you try to filter out that PDO.
> The bus driver is going to get a surprise remove and not know why.  For
> something like PCI.sys that doesn't handle hot plug devices this could
> really*things up and likely will.  Further, even a bus that does
> handle hot-plug devices like say USB, is going to still see the device
> plugged in and get confused as to why it received a surprise remove.  In
> fact it would probably reenumerate the device immediately in this case,
> which would likely put you into an ugly loop or something.  This is
probably
> one reason why MS doesn't support or recommend bus filter drivers.
Anyway,
> if you just wanted to hold back a device until needed, that would probably
> work.  You could not communicate with this device at all though, until the
> PnP manager was aware of it.

No, I won't export any PDO of mine created by the bus driver to PnP
manager. Every time when I got IRP_MN_QUERY_DEVICE_RELATIONS
request, I will replace the NPDO in the old relations and add MPDOs back to
the list and pass down to the bus driver. When the request completed, I will
remove all MPDOs in the new list and add NPDO back to the list.

So, the bus driver always see all PDOs created by itself and all upper
layers just
see PDOs modified by me.

- Show quoted text -

> --
> Bill McKenzie
> Software Engineer
> BSquare Corporation
> **Try our driver tools for free -- 30-day full-featured evaluations for
> download**
> www.bsquare.com/offer/download



> > According to DDK documented about IRP_MN_QUERY_DEVICE_RELATIONS:

> > "If there are one or more bus filter drivers in the device stack, such
> > drivers might handle the IRP on its way down to the bus driver and/or on
> the
> > IRP's way back up the device stack (if there are IoCompletion routines).
> > According to the PnP IRP rules, such a driver can add PDOs to the IRP on
> its
> > way down the stack and/or modify the relations list on the IRP's way
back
> up
> > the stack (in IoCompletion routines)"

> > So, maybe it's legal to hook IRP_MN_QUERY_DEVICE_RELATIONS...



> > > Hello all,

> > > I have two or more identical controllers on the PCI bus, I want to
> export
> > > only one device to the upper layer, is it possible to create a pseudo
> PDO
> > > which stands for all controllers in the PCI bus filter driver?

> > > I want to do like following:

> > > When my bus filter driver get IRP_MN_QUERY_DEVICE_RELATIONS, (With
> > > BusRelations as the example) first I pass it down to the bus driver.
> When
> > > the request completed, I check the returned relations, remove all PDO
> > belong
> > > to my controllers and create a new PDO and add it into the relations.

> > > Is it possible?

> > > And another question, is it possible to have my own bus driver to
handle
> > > devices
> > > on the PCI bus? of course I cannot replace the PCI bus driver.

> > > Thanks a lot

> > > ------------------------------
> > > Regards
> > > Xinhai

 
 
 

Is it possible to do this in the bus filter driver...

Post by Bill McKenzi » Sat, 19 Jan 2002 11:02:08


What do you hope to accomplish, by doing this?  You are going to create your
own PDOs okay, but the devices that the bus is creating PDOs for will be
inacessible to you.  You would not be able to get the resources like memory,
port regions and such for those PCI devices without letting those PDOs get
reported and letting the resource arbiter hand the resources to the devices
at start.   So, you couldn't export up one device that controlled multiple
other devices that way if that was your intention.

--
Bill McKenzie
Software Engineer
BSquare Corporation
**Try out our driver tools for 30-days free**
www.bsquare.com/offer/download




> > > According to DDK documented about IRP_MN_QUERY_DEVICE_RELATIONS:

> > > "If there are one or more bus filter drivers in the device stack, such
> > > drivers might handle the IRP on its way down to the bus driver and/or
on
> > the
> > > IRP's way back up the device stack (if there are IoCompletion
routines).
> > > According to the PnP IRP rules, such a driver can add PDOs to the IRP
on
> > its
> > > way down the stack and/or modify the relations list on the IRP's way
> back
> > up
> > > the stack (in IoCompletion routines)"

> > > So, maybe it's legal to hook IRP_MN_QUERY_DEVICE_RELATIONS...

> > Again, this is certainly possible, but:

> > 1.) How do you know which PDOs to take out of the list?
> When I get the relation list, maybe I can issue IRP_MN_QUERY_ID
> to know if the PDO is mine. I will take all PDOs of mine (MPDOs)
> out of the list. And then, I created another new PDO (NPDO)
> (always only one!) and add it into the list.

> > 2.) You could only do this once.  If you try to allow some device to
exist
> > by letting its PDO get reported to the PnP manager at some point and
then
> in
> > some later IRP_MN_QUERY_DEVICE_RELATIONS you try to filter out that PDO.
> > The bus driver is going to get a surprise remove and not know why.  For
> > something like PCI.sys that doesn't handle hot plug devices this could
> > really*things up and likely will.  Further, even a bus that does
> > handle hot-plug devices like say USB, is going to still see the device
> > plugged in and get confused as to why it received a surprise remove.  In
> > fact it would probably reenumerate the device immediately in this case,
> > which would likely put you into an ugly loop or something.  This is
> probably
> > one reason why MS doesn't support or recommend bus filter drivers.
> Anyway,
> > if you just wanted to hold back a device until needed, that would
probably
> > work.  You could not communicate with this device at all though, until
the
> > PnP manager was aware of it.

> No, I won't export any PDO of mine created by the bus driver to PnP
> manager. Every time when I got IRP_MN_QUERY_DEVICE_RELATIONS
> request, I will replace the NPDO in the old relations and add MPDOs back
to
> the list and pass down to the bus driver. When the request completed, I
will
> remove all MPDOs in the new list and add NPDO back to the list.

> So, the bus driver always see all PDOs created by itself and all upper
> layers just
> see PDOs modified by me.

> > --
> > Bill McKenzie
> > Software Engineer
> > BSquare Corporation
> > **Try our driver tools for free -- 30-day full-featured evaluations for
> > download**
> > www.bsquare.com/offer/download



> > > According to DDK documented about IRP_MN_QUERY_DEVICE_RELATIONS:

> > > "If there are one or more bus filter drivers in the device stack, such
> > > drivers might handle the IRP on its way down to the bus driver and/or
on
> > the
> > > IRP's way back up the device stack (if there are IoCompletion
routines).
> > > According to the PnP IRP rules, such a driver can add PDOs to the IRP
on
> > its
> > > way down the stack and/or modify the relations list on the IRP's way
> back
> > up
> > > the stack (in IoCompletion routines)"

> > > So, maybe it's legal to hook IRP_MN_QUERY_DEVICE_RELATIONS...



> > > > Hello all,

> > > > I have two or more identical controllers on the PCI bus, I want to
> > export
> > > > only one device to the upper layer, is it possible to create a
pseudo
> > PDO
> > > > which stands for all controllers in the PCI bus filter driver?

> > > > I want to do like following:

> > > > When my bus filter driver get IRP_MN_QUERY_DEVICE_RELATIONS, (With
> > > > BusRelations as the example) first I pass it down to the bus driver.
> > When
> > > > the request completed, I check the returned relations, remove all
PDO
> > > belong
> > > > to my controllers and create a new PDO and add it into the
relations.

> > > > Is it possible?

> > > > And another question, is it possible to have my own bus driver to
> handle
> > > > devices
> > > > on the PCI bus? of course I cannot replace the PCI bus driver.

> > > > Thanks a lot

> > > > ------------------------------
> > > > Regards
> > > > Xinhai