I am making a driver for a VERY old PCI device. I decided to try using the new 'bus_resource' facilities, and came up with the oddest error. First, here is my 'probe' routine: > static int > digic_probe(device_t dev) > { > static struct digic_type *t; > int vendor = pci_get_vendor(dev); > int did = pci_get_device(dev); > DPRINTF(("myprobe: vendor 0x%x, device 0x%x\n", > vendor, did )); > for( t = digic_devs; t->vid; ++t ){ > if( (t->vid == vendor) && (t->did == did) ){ > DPRINTF(("found '%s'\n", t->name ); > device_set_desc(dev,t->name)); > return(0); > } > } > return( ENXIO ); > } And here is the output it puts out (from dmesg): > Copyright (c) 1992-2000 The FreeBSD Project. > .... > myprobe: vendor 0x1106, device 0x597 > pcib2: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0 > pci1: <PCI bus> on pcib2 > myprobe: vendor 0x1002, device 0x4742 Yes it is seeing things... > pci1: <ATI Mach64-GB graphics accelerator> at 0.0 irq 11 > isab0: <VIA 82C596B PCI-ISA bridge> at device 7.0 on pci0 > isa0: <ISA bus> on isab0 .... > found 'Digi International PCI Classic 8 Serial Adapter' > my0: <Digi International PCI Classic 8 Serial Adapter> \ port 0xdc00-0xdcff,0xd800-0xd87f mem 0xea400000-0xea4000ff,0xea402000-0xea40207f \ irq 12 at device 10.0 on pci0 > digic_attach: unit 0, irq 12, slot 10, progif 0x0, iobase 0xd801, membase >0xea402000, irqline 0x10c > my0: couldn't map memory > device_probe_and_attach: my0 attach returned 6 So it found the card, discovered the vintage hardware id, and printed it out. The we call the attach routine: > static int > digic_attach( device_t dev ) > { > struct digic_softc *digic; > int unit; > int irq, slot, progif, iobase, membase, irqline; > int error = 0; > void *ih = 0; > > /* get the sc structure */ > digic = device_get_softc(dev); > bzero(digic,sizeof(digic[0])); > unit = device_get_unit(dev); > irq = pci_get_irq(dev); > slot = pci_get_slot(dev); > progif = pci_get_progif(dev); > > #define WB_PCI_LOMEM 0x10 > #define WB_PCI_LOIO 0x14 > #define WB_PCI_INTLINE 0x3c > iobase = pci_read_config(dev, WB_PCI_LOIO, 4); > membase = pci_read_config(dev, WB_PCI_LOMEM, 4); > irqline = pci_read_config(dev, WB_PCI_INTLINE, 4); > > DPRINTF(("digic_attach: unit %d, irq %d, slot %d, progif 0x%x, iobase 0x%x, >membase 0x%x, irqline 0x%x\n", > unit, irq, slot, progif, iobase, membase, irqline )); > > > switch( pci_get_device(dev) ){ > case PCI_CLASSIC_4: digic->digic_ports = 4; break; > case PCI_CLASSIC_8: digic->digic_ports = 8; break; > default: > device_printf(dev,"digic_attach: bad device id! %d", >pci_get_device(dev)); > goto fail; > } > > /* now get the memory resources */ > digic->digic_mem_res = bus_alloc_resource(dev, SYS_RES_MEMORY, > &digic->digic_mem_rid, > 0, ~0, 256, RF_ACTIVE|RF_SHAREABLE); > if (!digic->digic_mem_res) { > device_printf(dev, "couldn't map memory\n"); > goto fail; > } Now, I am SURE that I must be doing something stupid here - but I snipped this code right out of the code for another driver, and this one works. The only puzzle is: > my0: <Digi International PCI Classic 8 Serial Adapter> \ port 0xdc00-0xdcff,0xd800-0xd87f mem 0xea400000-0xea4000ff,0xea402000-0xea40207f \ irq 12 at device 10.0 on pci0 Note that the diagnostic output indicates some VERY strange ranges. Could this be the problem? Patrick Powell Patrick Powell Astart Technologies, [EMAIL PROTECTED] 9475 Chesapeake Drive, Suite D, Network and System San Diego, CA 92123 Consulting 858-874-6543 FAX 858-279-8424 LPRng - Print Spooler (http://www.astart.com) To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-hackers" in the body of the message