no network access on today's CURRENT
John Baldwin
jhb at freebsd.org
Fri Mar 23 04:00:26 UTC 2007
On Thursday 22 March 2007 10:35:13 pm David Wolfskill wrote:
> On Thu, Mar 22, 2007 at 03:13:41PM -0700, David Wolfskill wrote:
> > ...
> > Following up on Bruce's suggestion, then, I reverted the files that
> > appeared most likely to be involved to 20 Mar 2007 03:00 (US/Pacific;
> > currently 7 hrs. west of UTC) and re-built the kernel.
> >
> > A reboot following that exercise yields a functioning wi0:
> >...
> > Here's a list of the files I reverted (pruned from a list of files that
> > were updated in yesterday's build process), together with the revision
> > level I'm using & the current revision level:
>
> I was able to trim the list by some experimenting:
>
> > File wi0 OK no wi0
> > sys/dev/acpica/acpi.c 1.231 1.233
> > sys/i386/bios/smapi.c 1.13 1.14
> > sys/i386/bios/smbios.c 1.5 1.6
> > sys/i386/bios/vpd.c 1.5 1.6
> > sys/i386/i386/legacy.c 1.61 1.62
> > sys/i386/i386/nexus.c 1.69 1.71
> >...
>
> So: the above set of changes makes the difference between my wi0 device
> being seen (or not) during kernel probes.
>
> The probe messages from this latest (successful) boot related to the wi0
> device are:
>
> ata0-slave: pio=PIO4 wdma=WDMA2 udma=UDMA33 cable=40 wire
> pcib2: pccard2 requested memory range 0xf4000000-0xfbffffff: good
> pccard2: CIS version PC Card Standard 5.0
> pccard2: CIS info: Dell, TrueMobile 1150 Series PC Card, Version 01.01,
> pccard2: Manufacturer code 0x156, product 0x2
> pccard2: function 0: network adapter, ccr addr 3e0 mask 1
> pccard2: function 0, config table entry 1: I/O card; irq mask ffff; iomask
6, iospace 0-3f; io16 irqpulse irqlevel
> pcib2: pccard2 requested I/O range 0xe000-0xffff: in range
> pcib2: pccard2 requested memory range 0xf4000000-0xfbffffff: good
> wi0: <Dell TrueMobile 1150 Series PC Card> at port 0xe000-0xe03f irq 11
function 0 config 1 on pccard2
> wi0: [MPSAFE]
> wi0: [ITHREAD]
> wi0: using Lucent Embedded WaveLAN/IEEE
> wi0: Lucent Firmware: Station (6.14.1)
> wi0: bpf attached
> wi0: Ethernet address: 00:02:2d:5b:2c:78
> wi0: bpf attached
> wi0: bpf attached
> wi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
> ata0-master: pio=PIO4 wdma=WDMA2 udma=UDMA100 cable=80 wire
>
> The corresponding messages from a boot that fails to see wi0:
>
> ata0-slave: pio=PIO4 wdma=WDMA2 udma=UDMA33 cable=40 wire
> pcib2: pccard2 requested memory range 0xf4000000-0xfbffffff: good
> cbb2: set_res_flags: specified resource not active
> CIS is too long -- truncating
> cbb2: set_res_flags: specified resource not active
> pccard2: Card has no functions!
> cbb2: PC Card card activation failed
> ata0-master: pio=PIO4 wdma=WDMA2 udma=UDMA100 cable=80 wire
>
> Thanks for suggestions; still willing to test.
Actually, this may be due to weirdness in exca.c, it tries to use bus tags and
bus handles on a resource before it is activated. I think I see how to fix
it by making exca_activate_resource() calling BUS_ACTIVATE_RESOURCE() first.
Try this patch:
Index: dev/exca/exca.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/exca/exca.c,v
retrieving revision 1.27
diff -u -r1.27 exca.c
--- dev/exca/exca.c 24 Feb 2007 15:56:06 -0000 1.27
+++ dev/exca/exca.c 23 Mar 2007 03:57:09 -0000
@@ -259,11 +259,11 @@
}
}
if (win >= EXCA_MEM_WINS)
- return (1);
+ return (ENOSPC);
if (((rman_get_start(res) >> EXCA_MEMREG_WIN_SHIFT) & 0xff) != 0 &&
(sc->flags & EXCA_HAS_MEMREG_WIN) == 0) {
device_printf(sc->dev, "Does not support mapping above 24M.");
- return (1);
+ return (EINVAL);
}
sc->mem[win].cardaddr = 0;
@@ -477,7 +477,7 @@
}
}
if (win >= EXCA_IO_WINS)
- return (1);
+ return (ENOSPC);
sc->io[win].iot = rman_get_bustag(r);
sc->io[win].ioh = rman_get_bushandle(r);
@@ -789,24 +789,25 @@
int rid, struct resource *res)
{
int err;
- if (!(rman_get_flags(res) & RF_ACTIVE)) { /* not already activated */
- switch (type) {
- case SYS_RES_IOPORT:
- err = exca_io_map(exca, PCCARD_WIDTH_AUTO, res);
- break;
- case SYS_RES_MEMORY:
- err = exca_mem_map(exca, PCCARD_A_MEM_COM, res);
- break;
- default:
- err = 0;
- break;
- }
- if (err)
- return (err);
+ if (rman_get_flags(res) & RF_ACTIVE)
+ return (0);
+ err = BUS_ACTIVATE_RESOURCE(device_get_parent(exca->dev), child,
+ type, rid, res);
+ if (err)
+ return (err);
+ switch (type) {
+ case SYS_RES_IOPORT:
+ err = exca_io_map(exca, PCCARD_WIDTH_AUTO, res);
+ break;
+ case SYS_RES_MEMORY:
+ err = exca_mem_map(exca, PCCARD_A_MEM_COM, res);
+ break;
}
- return (BUS_ACTIVATE_RESOURCE(device_get_parent(exca->dev), child,
- type, rid, res));
+ if (err)
+ BUS_DEACTIVATE_RESOURCE(device_get_parent(exca->dev), child,
+ type, rid, res);
+ return (err);
}
int
--
John Baldwin
More information about the freebsd-current
mailing list