IPTR OOP_SetAttrsTags(OOP_Object *obj, IPTR tag1, ...) { AROS_SLOWSTACKTAGS_PRE(tag1) retval = OOP_SetAttrs(obj, AROS_SLOWSTACKTAGS_ARG(tag1)); AROS_SLOWSTACKTAGS_POST }
static AROS_UFH3(void, Enumerator, AROS_UFHA(struct Hook *, hook, A0), AROS_UFHA(OOP_Object *, device, A2), AROS_UFHA(APTR, msg, A1)) { AROS_USERFUNC_INIT ULONG VendorID,ProductID; int i; OOP_GetAttr(device, aHidd_PCIDevice_ProductID, &ProductID); OOP_GetAttr(device, aHidd_PCIDevice_VendorID, &VendorID); D(bug("[ac97] Found audio device %04x:%04x\n", VendorID, ProductID)); for (i=0; support[i].VendorID; i++) { if (VendorID == support[i].VendorID && ProductID == support[i].ProductID) { struct TagItem attrs[] = { { aHidd_PCIDevice_isIO, TRUE }, { aHidd_PCIDevice_isMEM, FALSE }, { aHidd_PCIDevice_isMaster, TRUE }, { TAG_DONE, 0UL }, }; D(bug("[ac97] Found supported '%s' card\n", support[i].Model)); ac97Base->cardfound = TRUE; ac97Base->mixer_set_reg = i8x0_set_reg; ac97Base->mixer_get_reg = i8x0_get_reg; OOP_SetAttrs(device, (struct TagItem *)&attrs); OOP_GetAttr(device, aHidd_PCIDevice_Base0, &ac97Base->mixerbase); OOP_GetAttr(device, aHidd_PCIDevice_Base1, &ac97Base->dmabase); OOP_GetAttr(device, aHidd_PCIDevice_INTLine, &ac97Base->irq_num); D(bug("[ac97] Mixer IO base %x\n", ac97Base->mixerbase)); D(bug("[ac97] DMA IO base %x\n", ac97Base->dmabase)); outl(2, ac97Base->dmabase + GLOB_CNT); ac97Base->mixer_set_reg(ac97Base, AC97_RESET, 0); ac97Base->mixer_set_reg(ac97Base, AC97_POWERDOWN, 0); /* Set master volume to no attenuation, mute off */ ac97Base->mixer_set_reg(ac97Base, AC97_MASTER_VOL, 0x0000); ac97Base->mixer_set_reg(ac97Base, AC97_HEADPHONE_VOL, 0x0000); ac97Base->mixer_set_reg(ac97Base, AC97_TONE, 0x0f0f); D(bug("[ac97] Powerdown = %02x\n", ac97Base->mixer_get_reg(ac97Base, AC97_POWERDOWN))); D(bug("[ac97] GLOB_CNT = %08x\n", inl(ac97Base->dmabase + GLOB_CNT))); D(bug("[ac97] GLOB_STA = %08x\n", inl(ac97Base->dmabase + GLOB_STA))); /* int i; for (i=0; i < 64; i+=2) { D(bug("[ac97] reg %02x = %04x\n", i, ac97Base->mixer_get_reg(ac97Base, i))); } */ outl(ac97Base->PCM_out, ac97Base->dmabase + PO_BDBAR); D(bug("[ac97] PO_BDBAR=%08x\n", inl(ac97Base->dmabase + PO_BDBAR))); D(bug("[ac97] PO_REGS=%08x\n", inl(ac97Base->dmabase + PO_CIV))); D(bug("[ac97] PO_PICB=%04x\n", inw(ac97Base->dmabase + PO_PICB))); D(bug("[ac97] PO_PIV=%02x\n", inb(ac97Base->dmabase + PO_PIV))); D(bug("[ac97] PO_CR=%02x\n", inb(ac97Base->dmabase + PO_CR))); } } AROS_USERFUNC_EXIT }