Multiple identical PCI boards

Hi.

If you have multiple identical PCI boards in a system and you find them by using the

_CA_PCI_Find_Device(deviceId, vendorId, index, …)

You must pass different values for index, correct?

The question is, how does index, for a particular board, get assigned? Is there an index for each PCI slot? Is this the same for all system (Part of the PCI standard) or does it vary from PC to PC.

We have a system with three PCI cards which are the same. The user can connect different signals to the cards. So we must label the cards correctly, in order to make sure the correct signals are received.

There is a concern of the cards getting moved around or the actual signals connected to the cards getting also moved.

Has anyone solved these types of issues?

TIA

Augie

Augie Henriques wrote:

The question is, how does index, for a particular board, get assigned?
Is there an index for each PCI slot? Is this the same for all system
(Part of the PCI standard) or does it vary from PC to PC.



We have a system with three PCI cards which are the same. The user can
connect different signals to the cards. So we must label the cards
correctly, in order to make sure the correct signals are received.



There is a concern of the cards getting moved around or the actual
signals connected to the cards getting also moved.



Has anyone solved these types of issues?

Ahhh, yes. Solved… not really; able to deal with it… sort of.

Here’s what I have learned through experience, is the way that most
mobos index identical PCI boards.

Rule #1 The BIOS will assign indexes in ascending order on the bus as
the boards are encountered. This typically means that the board closest
to the CPU on the mobo will get index 0, and boards further away from
the CPU will get (monotonically) increasingly higher indexes.

Rule #2 You must determine the orientation of the mobo in the case, in
order to be able to give a rule to users in the field that allows them
to determine which is which, from outside the box. Typically it is
insured that the cases have the mobos mounted in such a way that the
board nearest the power supply gets index 0.

There isn’t really a concern of the indexes getting “moved around”
UNLESS one of the “identical” boards is removed (or fails), in which
case, the indexes higher than that board all move down by one the next
time the BIOS enumerates the boards (this is bad, but pretty much
unavoidable).

The real tricky problem in my case comes with multi-channel ethernet
cards that use PCI-PCI bridges. It is impossible to come up with any
“multi-vendor” rule that can predict how the ethernet ports will be
indexed “vertically” up (or down) the card (it is totally dependent on
how the vendor lays it out).

In your case, it sounds like it won’t be too bad, since it doesn’t
sound as if you have bridge chips on your card with more than one PCI
device on a card.

“Rennie Allen” <rallen@csical.com> wrote in message
news:3DA43B8F.1040902@csical.com

Augie Henriques wrote:

Rule #2 You must determine the orientation of the mobo in the case, in
order to be able to give a rule to users in the field that allows them
to determine which is which, from outside the box. Typically it is
insured that the cases have the mobos mounted in such a way that the
board nearest the power supply gets index 0.

Don’t take this Rule#2 lightly. I worked on a motherboard where the slots
were numbered 1, 2, 3, 0.

Why? Who the heck knows!
And of course this was not documented anywhere.

If you need to know the slot number then you have to stick cards in the
slots and run show_pci or pci.

WOW!

Thanks for the help. All I can say is that when “they” came up with the PCI
specification, no much effort was put into this issue!!!

We have a PCI bible here and I have looked for info on this, but not even a
mention of how to deal with it!

Augie

“Bill Caroselli (Q-TPS)” <QTPS@EarthLink.net> wrote in message
news:ao2ce2$2ng$1@inn.qnx.com

“Rennie Allen” <> rallen@csical.com> > wrote in message
news:> 3DA43B8F.1040902@csical.com> …
Augie Henriques wrote:

Rule #2 You must determine the orientation of the mobo in the case, in
order to be able to give a rule to users in the field that allows them
to determine which is which, from outside the box. Typically it is
insured that the cases have the mobos mounted in such a way that the
board nearest the power supply gets index 0.


Don’t take this Rule#2 lightly. I worked on a motherboard where the slots
were numbered 1, 2, 3, 0.

Why? Who the heck knows!
And of course this was not documented anywhere.

If you need to know the slot number then you have to stick cards in the
slots and run show_pci or pci.

Augie Henriques wrote:

I think it’s kind of ironic that they put a lot of effort into the whole PCI
specification thing and totally missed identifying the PCI slots somewhere.
I can’t tell you what a nightmare this issue is for us. Our Data
Acquisition System uses multiple cards everywhere. Not being able to
explain to the user where to connect the instruments really stinks! This
aspect makes it worse than ISA!

I’m with you. PCI is designed to bring a good “user experience” to a
typical desktop computer user, and it does a good job there, but for
embedded systems, it actually makes things more difficult than ISA
(from a configuration P.O.V.).

"

We have a PCI bible here and I have looked for info on this, but not even
a
mention of how to deal with it!

Not all bible are created equal

Augie

“Bill Caroselli (Q-TPS)” <> QTPS@EarthLink.net> > wrote in message
news:ao2ce2$2ng$> 1@inn.qnx.com> …
“Rennie Allen” <> rallen@csical.com> > wrote in message
news:> 3DA43B8F.1040902@csical.com> …
Augie Henriques wrote:

Rule #2 You must determine the orientation of the mobo in the case, in
order to be able to give a rule to users in the field that allows them
to determine which is which, from outside the box. Typically it is
insured that the cases have the mobos mounted in such a way that the
board nearest the power supply gets index 0.


Don’t take this Rule#2 lightly. I worked on a motherboard where the
slots
were numbered 1, 2, 3, 0.

Why? Who the heck knows!
And of course this was not documented anywhere.

If you need to know the slot number then you have to stick cards in the
slots and run show_pci or pci.

\

Gee, I would disagree a little with that.

The PCI spec pre version 2.1 had wholes in it. But from 2.1 on I thought it
was very well thought out.

If you want to look at a disaster, look at the VESA Local Bus Spec.

Does your PCI Bible cover the latest spec? My documentation doesn’t. I
guess I need to upgrade.


“Augie Henriques” <augiehenriques@hotmail.com> wrote in message
news:ao3shr$5e6$1@inn.qnx.com

WOW!

Thanks for the help. All I can say is that when “they” came up with the
PCI
specification, no much effort was put into this issue!!!

We have a PCI bible here and I have looked for info on this, but not even
a
mention of how to deal with it!

Augie

I think it’s kind of ironic that they put a lot of effort into the whole PCI
specification thing and totally missed identifying the PCI slots somewhere.
I can’t tell you what a nightmare this issue is for us. Our Data
Acquisition System uses multiple cards everywhere. Not being able to
explain to the user where to connect the instruments really stinks! This
aspect makes it worse than ISA!

Augie

“Bill Caroselli (Q-TPS)” <QTPS@EarthLink.net> wrote in message
news:ao4abr$keg$1@inn.qnx.com

Gee, I would disagree a little with that.

The PCI spec pre version 2.1 had wholes in it. But from 2.1 on I thought
it
was very well thought out.

If you want to look at a disaster, look at the VESA Local Bus Spec.

Does your PCI Bible cover the latest spec? My documentation doesn’t. I
guess I need to upgrade.


“Augie Henriques” <> augiehenriques@hotmail.com> > wrote in message
news:ao3shr$5e6$> 1@inn.qnx.com> …
WOW!

Thanks for the help. All I can say is that when “they” came up with the
PCI
specification, no much effort was put into this issue!!!

We have a PCI bible here and I have looked for info on this, but not
even
a
mention of how to deal with it!

Augie

“Bill Caroselli (Q-TPS)” <QTPS@EarthLink.net> wrote in message
news:ao4abr$keg$1@inn.qnx.com

Gee, I would disagree a little with that.

The PCI spec pre version 2.1 had wholes in it. But from 2.1 on I thought
it
was very well thought out.

We have the PCI Hardware & Software Architecture & Design 3rd edition which
exceeds PCI 2.1 specifications.

Augie

If you want to look at a disaster, look at the VESA Local Bus Spec.

Does your PCI Bible cover the latest spec? My documentation doesn’t. I
guess I need to upgrade.


“Augie Henriques” <> augiehenriques@hotmail.com> > wrote in message
news:ao3shr$5e6$> 1@inn.qnx.com> …
WOW!

Thanks for the help. All I can say is that when “they” came up with the
PCI
specification, no much effort was put into this issue!!!

We have a PCI bible here and I have looked for info on this, but not
even
a
mention of how to deal with it!

Augie

OK. Agreed. But this should be documented by the motherboard.

“Augie Henriques” <augiehenriques@hotmail.com> wrote in message
news:ao4b64$lam$1@inn.qnx.com

I think it’s kind of ironic that they put a lot of effort into the whole
PCI
specification thing and totally missed identifying the PCI slots
somewhere.
I can’t tell you what a nightmare this issue is for us. Our Data
Acquisition System uses multiple cards everywhere. Not being able to
explain to the user where to connect the instruments really stinks! This
aspect makes it worse than ISA!

Augie

“Bill Caroselli (Q-TPS)” <> QTPS@EarthLink.net> > wrote in message
news:ao4abr$keg$> 1@inn.qnx.com> …
Gee, I would disagree a little with that.

The PCI spec pre version 2.1 had wholes in it. But from 2.1 on I
thought
it
was very well thought out.

If you want to look at a disaster, look at the VESA Local Bus Spec.

Does your PCI Bible cover the latest spec? My documentation doesn’t. I
guess I need to upgrade.


“Augie Henriques” <> augiehenriques@hotmail.com> > wrote in message
news:ao3shr$5e6$> 1@inn.qnx.com> …
WOW!

Thanks for the help. All I can say is that when “they” came up with
the
PCI
specification, no much effort was put into this issue!!!

We have a PCI bible here and I have looked for info on this, but not
even
a
mention of how to deal with it!

Augie

\

Recently I had the same problem. I had to identify pci cards
by their positions on the cPCI bus.

You can’t rely on indexes in that, because if you remove one
of your cards from the middle, the indexes will change.

Instead I used devfuncnum (from _CA_PCI_Find_Device()).
At least you can be sure that a certain devfuncnum is binded
to a certain slot. Though devfuncnum assigment rules are odd.
You better find out and remember all devfuncnums for all your slots.
At least that’s what I did.

Still this somewhat an amateurish view, I must admit.

Good luck
Dmitri

Hi.

If you have multiple identical PCI boards in a system and you find them by using the

_CA_PCI_Find_Device(deviceId, vendorId, index, …)

You must pass different values for index, correct?

The question is, how does index, for a particular board, get assigned? Is there an index for each PCI slot? Is this the same for all system (Part of the PCI standard) or does it vary from PC to PC.

We have a system with three PCI cards which are the same. The user can connect different signals to the cards. So we must label the cards correctly, in order to make sure the correct signals are received.

There is a concern of the cards getting moved around or the actual signals connected to the cards getting also moved.

Has anyone solved these types of issues?

TIA

Augie

Thanks. I will look into this function.

Augie
“Dmitri Ivanov” <ivdal@yahoo.com> wrote in message news:ao5q9a$b9k$1@inn.qnx.com
Recently I had the same problem. I had to identify pci cards
by their positions on the cPCI bus.

You can’t rely on indexes in that, because if you remove one
of your cards from the middle, the indexes will change.

Instead I used devfuncnum (from _CA_PCI_Find_Device()).
At least you can be sure that a certain devfuncnum is binded
to a certain slot. Though devfuncnum assigment rules are odd.
You better find out and remember all devfuncnums for all your slots.
At least that’s what I did.

Still this somewhat an amateurish view, I must admit.

Good luck
Dmitri

Hi.

If you have multiple identical PCI boards in a system and you find them by using the

_CA_PCI_Find_Device(deviceId, vendorId, index, …)

You must pass different values for index, correct?

The question is, how does index, for a particular board, get assigned? Is there an index for each PCI slot? Is this the same for all system (Part of the PCI standard) or does it vary from PC to PC.

We have a system with three PCI cards which are the same. The user can connect different signals to the cards. So we must label the cards correctly, in order to make sure the correct signals are received.

There is a concern of the cards getting moved around or the actual signals connected to the cards getting also moved.

Has anyone solved these types of issues?

TIA

Augie

We actually use Single Board CPU’s in an Industrial computer, with passive
back planes.

The backplanes can change and so can the CPU position.

I think they could have clearly labeled the PCI slots on the silkscreen.
This way there would be no confusion.

I’m not sure you guys have heard of CAMAC (it’s pretty old), but they
labeled all the slots on the chassis, no confusion.

Of course, ISA had none of these problems. You go by the board address.

Augie

“Bill Caroselli (Q-TPS)” <QTPS@EarthLink.net> wrote in message
news:ao52kl$gnt$1@inn.qnx.com

OK. Agreed. But this should be documented by the motherboard.

“Augie Henriques” <> augiehenriques@hotmail.com> > wrote in message
news:ao4b64$lam$> 1@inn.qnx.com> …
I think it’s kind of ironic that they put a lot of effort into the whole
PCI
specification thing and totally missed identifying the PCI slots
somewhere.
I can’t tell you what a nightmare this issue is for us. Our Data
Acquisition System uses multiple cards everywhere. Not being able to
explain to the user where to connect the instruments really stinks!
This
aspect makes it worse than ISA!

Augie

“Bill Caroselli (Q-TPS)” <> QTPS@EarthLink.net> > wrote in message
news:ao4abr$keg$> 1@inn.qnx.com> …
Gee, I would disagree a little with that.

The PCI spec pre version 2.1 had wholes in it. But from 2.1 on I
thought
it
was very well thought out.

If you want to look at a disaster, look at the VESA Local Bus Spec.

Does your PCI Bible cover the latest spec? My documentation doesn’t.
I
guess I need to upgrade.


“Augie Henriques” <> augiehenriques@hotmail.com> > wrote in message
news:ao3shr$5e6$> 1@inn.qnx.com> …
WOW!

Thanks for the help. All I can say is that when “they” came up with
the
PCI
specification, no much effort was put into this issue!!!

We have a PCI bible here and I have looked for info on this, but not
even
a
mention of how to deal with it!

Augie



\

Good point (about removing a card).

It is true. There are several ways to locate a PCI card. You can find a
card by it’s N’th occurance or you can query a PCI bus/slot to determine
what’s in it. If this is for a PCI driver that you are writing, going by
the bus/slot number actually makes more sence to me (although I’ve written
drivers that used the other method).

The QNX drivers use the N’th occurance method. SO if you want to access
multiple Net adapters, for instance, your kind of screwed. If you pull the
first PCI card you need to reconfigure your driver command line for the
other card.

“Dmitri Ivanov” <ivdal@yahoo.com> wrote in message
news:ao5q9a$b9k$1@inn.qnx.com
Recently I had the same problem. I had to identify pci cards
by their positions on the cPCI bus.

You can’t rely on indexes in that, because if you remove one
of your cards from the middle, the indexes will change.

Instead I used devfuncnum (from _CA_PCI_Find_Device()).
At least you can be sure that a certain devfuncnum is binded
to a certain slot. Though devfuncnum assigment rules are odd.
You better find out and remember all devfuncnums for all your slots.
At least that’s what I did.

Still this somewhat an amateurish view, I must admit.

Good luck
Dmitri

Well, actually it’s the same _CA_PCI_Find_Device() you
already use. All you need is pay some attention to the
last argument passed to this function. It might help you.