Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/ata/ata-pci.c
| Show First 20 Lines • Show All 267 Lines • ▼ Show 20 Lines | if (type == SYS_RES_IRQ) { | ||||
| res = BUS_ALLOC_RESOURCE(device_get_parent(dev), dev, | res = BUS_ALLOC_RESOURCE(device_get_parent(dev), dev, | ||||
| type, rid, start, end, count, flags); | type, rid, start, end, count, flags); | ||||
| } | } | ||||
| } | } | ||||
| return (res); | return (res); | ||||
| } | } | ||||
| int | int | ||||
| ata_pci_release_resource(device_t dev, device_t child, int type, int rid, | ata_pci_release_resource(device_t dev, device_t child, struct resource *r) | ||||
| struct resource *r) | |||||
| { | { | ||||
| int rid = rman_get_rid(r); | |||||
| int type = rman_get_type(r); | |||||
| if (device_get_devclass(child) == ata_devclass) { | if (device_get_devclass(child) == ata_devclass) { | ||||
| struct ata_pci_controller *controller = device_get_softc(dev); | struct ata_pci_controller *controller = device_get_softc(dev); | ||||
| int unit = ((struct ata_channel *)device_get_softc(child))->unit; | |||||
| if (type == SYS_RES_IOPORT) { | if (type == SYS_RES_IOPORT) { | ||||
| switch (rid) { | switch (rid) { | ||||
| case ATA_IOADDR_RID: | case ATA_IOADDR_RID: | ||||
| return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev, | |||||
| SYS_RES_IOPORT, | |||||
| PCIR_BAR(0) + (unit << 3), r); | |||||
| case ATA_CTLADDR_RID: | case ATA_CTLADDR_RID: | ||||
| return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev, | return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev, | ||||
| SYS_RES_IOPORT, | r); | ||||
| PCIR_BAR(1) + (unit << 3), r); | |||||
| default: | default: | ||||
| return ENOENT; | return ENOENT; | ||||
| } | } | ||||
| } | } | ||||
| if (type == SYS_RES_IRQ) { | if (type == SYS_RES_IRQ) { | ||||
| if (rid != ATA_IRQ_RID) | if (rid != ATA_IRQ_RID) | ||||
| return ENOENT; | return ENOENT; | ||||
| if (controller->legacy) { | if (controller->legacy) { | ||||
| return BUS_RELEASE_RESOURCE(device_get_parent(dev), child, | return BUS_RELEASE_RESOURCE(device_get_parent(dev), child, | ||||
| SYS_RES_IRQ, rid, r); | r); | ||||
| } else | } else | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| } else { | } else { | ||||
| if (type == SYS_RES_IRQ) { | if (type == SYS_RES_IRQ) { | ||||
| if (rid != ATA_IRQ_RID) | if (rid != ATA_IRQ_RID) | ||||
| return (ENOENT); | return (ENOENT); | ||||
| return (0); | return (0); | ||||
| } else { | } else { | ||||
| return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child, | return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child, | ||||
| type, rid, r)); | r)); | ||||
| } | } | ||||
| } | } | ||||
| return (EINVAL); | return (EINVAL); | ||||
| } | } | ||||
| int | int | ||||
| ata_pci_setup_intr(device_t dev, device_t child, struct resource *irq, | ata_pci_setup_intr(device_t dev, device_t child, struct resource *irq, | ||||
| int flags, driver_filter_t *filter, driver_intr_t *function, | int flags, driver_filter_t *filter, driver_intr_t *function, | ||||
| ▲ Show 20 Lines • Show All 604 Lines • Show Last 20 Lines | |||||