|
Lines 515-520
Link Here
|
| 515 |
return ENXIO; |
515 |
return ENXIO; |
| 516 |
} |
516 |
} |
| 517 |
|
517 |
|
|
|
518 |
#define FXP_PREFER_IOSPACE |
| 519 |
|
| 518 |
static int |
520 |
static int |
| 519 |
fxp_attach(device_t dev) |
521 |
fxp_attach(device_t dev) |
| 520 |
{ |
522 |
{ |
|
Lines 533-544
Link Here
|
| 533 |
* Enable bus mastering. |
535 |
* Enable bus mastering. |
| 534 |
*/ |
536 |
*/ |
| 535 |
val = pci_read_config(dev, PCIR_COMMAND, 2); |
537 |
val = pci_read_config(dev, PCIR_COMMAND, 2); |
|
|
538 |
#ifdef FXP_PREFER_IOSPACE /*XXX*/ |
| 539 |
val |= (PCIM_CMD_PORTEN|PCIM_CMD_BUSMASTEREN); |
| 540 |
#else |
| 536 |
val |= (PCIM_CMD_MEMEN|PCIM_CMD_BUSMASTEREN); |
541 |
val |= (PCIM_CMD_MEMEN|PCIM_CMD_BUSMASTEREN); |
|
|
542 |
#endif |
| 537 |
pci_write_config(dev, PCIR_COMMAND, val, 2); |
543 |
pci_write_config(dev, PCIR_COMMAND, val, 2); |
| 538 |
|
544 |
|
| 539 |
/* |
545 |
/* |
| 540 |
* Map control/status registers. |
546 |
* Map control/status registers. |
| 541 |
*/ |
547 |
*/ |
|
|
548 |
#ifdef FXP_PREFER_IOSPACE /*XXX*/ |
| 549 |
device_printf(dev, "using i/o space access\n"); |
| 550 |
rid = FXP_PCI_IOBA; |
| 551 |
sc->io = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, |
| 552 |
0, ~0, 1, RF_ACTIVE); |
| 553 |
if (!sc->io) { |
| 554 |
device_printf(dev, "could not map memory\n"); |
| 555 |
error = ENXIO; |
| 556 |
goto fail; |
| 557 |
} |
| 558 |
|
| 559 |
sc->sc_st = rman_get_bustag(sc->io); |
| 560 |
sc->sc_sh = rman_get_bushandle(sc->io); |
| 561 |
|
| 562 |
#else |
| 542 |
rid = FXP_PCI_MMBA; |
563 |
rid = FXP_PCI_MMBA; |
| 543 |
sc->mem = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, |
564 |
sc->mem = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, |
| 544 |
0, ~0, 1, RF_ACTIVE); |
565 |
0, ~0, 1, RF_ACTIVE); |
|
Lines 550-556
Link Here
|
| 550 |
|
571 |
|
| 551 |
sc->sc_st = rman_get_bustag(sc->mem); |
572 |
sc->sc_st = rman_get_bustag(sc->mem); |
| 552 |
sc->sc_sh = rman_get_bushandle(sc->mem); |
573 |
sc->sc_sh = rman_get_bushandle(sc->mem); |
| 553 |
|
574 |
#endif |
| 554 |
/* |
575 |
/* |
| 555 |
* Allocate our interrupt. |
576 |
* Allocate our interrupt. |
| 556 |
*/ |
577 |
*/ |
|
Lines 575-581
Link Here
|
| 575 |
/* Failed! */ |
596 |
/* Failed! */ |
| 576 |
bus_teardown_intr(dev, sc->irq, sc->ih); |
597 |
bus_teardown_intr(dev, sc->irq, sc->ih); |
| 577 |
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); |
598 |
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); |
|
|
599 |
#ifdef FXP_PREFER_IOSPACE /* XXX */ |
| 578 |
bus_release_resource(dev, SYS_RES_MEMORY, FXP_PCI_MMBA, sc->mem); |
600 |
bus_release_resource(dev, SYS_RES_MEMORY, FXP_PCI_MMBA, sc->mem); |
|
|
601 |
#else |
| 602 |
bus_release_resource(dev, SYS_RES_IOPORT, FXP_PCI_IOBA, sc->io); |
| 603 |
#endif |
| 579 |
error = ENXIO; |
604 |
error = ENXIO; |
| 580 |
goto fail; |
605 |
goto fail; |
| 581 |
} |
606 |
} |
|
Lines 639-646
Link Here
|
| 639 |
*/ |
664 |
*/ |
| 640 |
bus_teardown_intr(dev, sc->irq, sc->ih); |
665 |
bus_teardown_intr(dev, sc->irq, sc->ih); |
| 641 |
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); |
666 |
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); |
|
|
667 |
#ifdef FXP_PREFER_IOSPACE /* XXX */ |
| 668 |
bus_release_resource(dev, SYS_RES_IOPORT, FXP_PCI_IOBA, sc->io); |
| 669 |
#else |
| 642 |
bus_release_resource(dev, SYS_RES_MEMORY, FXP_PCI_MMBA, sc->mem); |
670 |
bus_release_resource(dev, SYS_RES_MEMORY, FXP_PCI_MMBA, sc->mem); |
| 643 |
|
671 |
#endif |
| 644 |
/* |
672 |
/* |
| 645 |
* Free all the receive buffers. |
673 |
* Free all the receive buffers. |
| 646 |
*/ |
674 |
*/ |