Subject: Re: cardbus/pcmcia
To: Bill Sommerfeld <sommerfeld@orchard.arlington.ma.us>
From: Patrick Welche <prlw1@newn.cam.ac.uk>
List: current-users
Date: 05/25/2001 18:55:37
On Fri, May 18, 2001 at 04:31:23PM -0400, Bill Sommerfeld wrote:
>    fxp0: interrupting at irq 9
>    cbb0: interrupting at irq 9
>    cardslot0 at cbb0 slot 0 flags 0
>    cardbus0 at cardslot0: bus 2 device 0 cacheline 0x0, lattimer 0x20
>    pcmcia0 at cardslot0
> 
> Sharing irq's between serial devices and non-serial devices is
> problematic at the moment.

In the meantime I tried kernels with and without fxp0. The problem seems
to arrive at:

#5  0xc0100bc9 in calltrap ()
#6  0xc039f16d in pcmcia_read_cis (sc=0xc0ac1200)
    at ../../../../dev/pcmcia/pcmcia_cis.c:87
#7  0xc039dd99 in pcmcia_card_attach (dev=0xc0ac1200)
    at ../../../../dev/pcmcia/pcmcia.c:158
#8  0xc0392028 in cardslot_event_thread (arg=0xc0acb280)
    at ../../../../dev/cardbus/cardslot.c:376

What I don't understand is that everything looks benign around there:

pcmcia_read_cis 87:
        if (pcmcia_scan_cis((struct device *)sc, pcmcia_parse_cis_tuple,
            &state) == -1)
                state.card->error++;                    
...
int                              
pcmcia_scan_cis(dev, fct, arg)
        struct device *dev;
        int (*fct) __P((struct pcmcia_tuple *, void *));
        void *arg;


(gdb) print *sc
$1 = {dev = {dv_class = DV_DULL, dv_list = {tqe_next = 0xc0ace800, 
      tqe_prev = 0xc0acb204}, dv_cfdata = 0xc0801ee4, dv_unit = 0, 
    dv_xname = "pcmcia0\000\000\000\000\000\000\000\000", 
    dv_parent = 0xc0acb280, dv_flags = 1}, pct = 0xc0807c20, pch = 0xc0ac18e0, 
  card = {cis1_major = -1, cis1_minor = -1, 
    cis1_info_buf = '\000' <repeats 255 times>, cis1_info = {0x0, 0x0, 0x0, 
      0x0}, manufacturer = -1, product = -1, error = 0, pf_head = {
      sqh_first = 0x0, sqh_last = 0xc0ac1358}}, ih = 0x0, 
  sc_enabled_count = 0, iobase = 8192, iosize = 4096}
(gdb) whatis pcmcia_parse_cis_tuple
type = int (struct pcmcia_tuple *, void *)


Where does calltrap() come from?

Cheers,

Patrick