--- linux-2.5.45-ac1/drivers/pcmcia/cistpl.c.orig Thu Oct 31 09:42:24 2002
+++ linux-2.5.45-ac1/drivers/pcmcia/cistpl.c Thu Nov 7 01:03:55 2002
@@ -429,7 +429,7 @@
#ifdef CONFIG_CARDBUS
if (s->state & SOCKET_CARDBUS) {
u_int ptr;
- pcibios_read_config_dword(s->cap.cb_dev->subordinate->number, 0, 0x28, &ptr);
+ pci_bus_read_config_dword(s->cap.cb_dev->bus, 0, 0x28, &ptr);
tuple->CISOffset = ptr & ~7;
SPACE(tuple->Flags) = (ptr & 7);
} else
On Fri, Nov 08, 2002 at 12:41:20AM +0900, Osamu Tomita wrote:
> I couldn't compile cistpl.c, that call obsolete function.
>
> Here is trivial patch. This works fine for me.
>
> Regards,
> Osamu Tomita
> --- linux-2.5.45-ac1/drivers/pcmcia/cistpl.c.orig Thu Oct 31 09:42:24 2002
> +++ linux-2.5.45-ac1/drivers/pcmcia/cistpl.c Thu Nov 7 01:03:55 2002
> @@ -429,7 +429,7 @@
> #ifdef CONFIG_CARDBUS
> if (s->state & SOCKET_CARDBUS) {
> u_int ptr;
> - pcibios_read_config_dword(s->cap.cb_dev->subordinate->number, 0, 0x28, &ptr);
> + pci_bus_read_config_dword(s->cap.cb_dev->bus, 0, 0x28, &ptr);
> tuple->CISOffset = ptr & ~7;
> SPACE(tuple->Flags) = (ptr & 7);
> } else
I think dev->bus the bus number for the bus that the Cardbus controller
is connected to? If so, this change is wrong.
bus:device.function = 0:0.0
+--------+
| host |
| bridge >--------+------------------ dev->bus
+--------+ |
|
+----v----+ dev
| Cardbus |
| Bridge |
+---------+
|
| bus number = dev->subordinate->number
|
|
+----v----+ bus = dev->subordinate->number
| Cardbus | device = 0
| card |
+---------+
The device we want to read the CIS offset from is the cardbus card.
In the above case, your change means we'll try to read the CIS offset
from the host bridge, which is obviously wrong.
--
Russell King ([email protected]) The developer of ARM Linux
http://www.arm.linux.org.uk/personal/aboutme.html
Russell King wrote:
>
> On Fri, Nov 08, 2002 at 12:41:20AM +0900, Osamu Tomita wrote:
> > I couldn't compile cistpl.c, that call obsolete function.
> >
> > Here is trivial patch. This works fine for me.
> >
> > Regards,
> > Osamu Tomita
> > --- linux-2.5.45-ac1/drivers/pcmcia/cistpl.c.orig Thu Oct 31 09:42:24 2002
> > +++ linux-2.5.45-ac1/drivers/pcmcia/cistpl.c Thu Nov 7 01:03:55 2002
> > @@ -429,7 +429,7 @@
> > #ifdef CONFIG_CARDBUS
> > if (s->state & SOCKET_CARDBUS) {
> > u_int ptr;
> > - pcibios_read_config_dword(s->cap.cb_dev->subordinate->number, 0, 0x28, &ptr);
> > + pci_bus_read_config_dword(s->cap.cb_dev->bus, 0, 0x28, &ptr);
> > tuple->CISOffset = ptr & ~7;
> > SPACE(tuple->Flags) = (ptr & 7);
> > } else
>
> I think dev->bus the bus number for the bus that the Cardbus controller
> is connected to? If so, this change is wrong.
>
> bus:device.function = 0:0.0
> +--------+
> | host |
> | bridge >--------+------------------ dev->bus
> +--------+ |
> |
> +----v----+ dev
> | Cardbus |
> | Bridge |
> +---------+
> |
> | bus number = dev->subordinate->number
> |
> |
> +----v----+ bus = dev->subordinate->number
> | Cardbus | device = 0
> | card |
> +---------+
>
> The device we want to read the CIS offset from is the cardbus card.
> In the above case, your change means we'll try to read the CIS offset
> from the host bridge, which is obviously wrong.
Thanks for exposition.
Is this right?
--- linux-2.5.45-ac1/drivers/pcmcia/cistpl.c.orig Thu Oct 31 09:42:24 2002
+++ linux-2.5.45-ac1/drivers/pcmcia/cistpl.c Fri Nov 8 01:19:32 2002
@@ -429,7 +429,7 @@
#ifdef CONFIG_CARDBUS
if (s->state & SOCKET_CARDBUS) {
u_int ptr;
- pcibios_read_config_dword(s->cap.cb_dev->subordinate->number, 0, 0x28, &ptr);
+ pci_bus_read_config_dword(s->cap.cb_dev->subordinate, 0, 0x28, &ptr);
tuple->CISOffset = ptr & ~7;
SPACE(tuple->Flags) = (ptr & 7);
} else