static int bt_mca_probe (device_t dev) { const char * desc; mca_id_t id = mca_get_id(dev); struct bt_probe_info info; u_int32_t iobase = 0; u_int32_t iosize = 0; u_int8_t drq = 0; u_int8_t irq = 0; u_int8_t pos; int result; desc = mca_match_id(id, bt_mca_devs); if (!desc) return (ENXIO); device_set_desc(dev, desc); pos = (mca_pos_read(dev, BT_MCA_IOPORT_POS1) & BT_MCA_IOPORT_MASK1) | (mca_pos_read(dev, BT_MCA_IOPORT_POS2) & BT_MCA_IOPORT_MASK2); iobase = BT_MCA_IOPORT(pos); iosize = BT_MCA_IOPORT_SIZE; pos = mca_pos_read(dev, BT_MCA_DRQ_POS); drq = BT_MCA_DRQ(pos); pos = mca_pos_read(dev, BT_MCA_IRQ_POS); irq = BT_MCA_IRQ(pos); bt_mark_probed_iop(iobase); mca_add_iospace(dev, iobase, iosize); /* And allocate them */ bt_mca_alloc_resources(dev, BT_MCA_PROBE); if (bt_port_probe(dev, &info) != 0) { printf("bt_mca_probe: Probe failed for " "card at slot %d\n", mca_get_slot(dev) + 1); result = ENXIO; } else { mca_add_drq(dev, drq); mca_add_irq(dev, irq); result = BUS_PROBE_DEFAULT; } bt_mca_release_resources(dev); return (result); }
static int ep_mca_probe(device_t dev) { const char *desc; uint32_t iobase = 0; uint8_t irq = 0; uint8_t pos; desc = mca_match_id(mca_get_id(dev), ep_mca_devs); if (!desc) return (ENXIO); device_set_desc(dev, desc); pos = mca_pos_read(dev, EP_MCA_IOPORT_POS); iobase = EP_MCA_IOPORT(pos); pos = mca_pos_read(dev, EP_MCA_IRQ_POS); irq = EP_MCA_IRQ(pos); mca_add_iospace(dev, iobase, EP_MCA_IOPORT_SIZE); mca_add_irq(dev, irq); return (0); }