Lines Matching refs:card

49 status_t auich_init(auich_dev * card);
98 auich_mem_new(auich_dev *card, size_t size)
126 auich_mem_alloc(auich_dev *card, size_t size)
130 mem = auich_mem_new(card, size);
134 LIST_INSERT_HEAD(&(card->mems), mem, next);
141 auich_mem_free(auich_dev *card, void *ptr)
145 LIST_FOREACH(mem, &card->mems, next) {
170 auich_mem_free(stream->card, stream->buffer->log_base);
179 stream->buffer = auich_mem_alloc(stream->card, stream->bufframes * frame_size * stream->bufcount);
196 auich_reg_write_8(&stream->card->config, stream->base + AUICH_REG_X_CR, 0);
199 auich_reg_write_8(&stream->card->config,
202 if (0 == auich_reg_read_8(&stream->card->config,
219 / (IS_SIS7012(&stream->card->config) ? 1 : 2));
223 auich_reg_write_32(&stream->card->config, stream->base + AUICH_REG_X_BDBAR,
227 auich_codec_write(&stream->card->config, AC97_PCM_L_R_ADC_RATE, (uint16)stream->sample_rate);
229 auich_codec_write(&stream->card->config, AC97_PCM_FRONT_DAC_RATE, (uint16)stream->sample_rate);
232 LOG(("rate : %d\n", auich_codec_read(&stream->card->config, AC97_PCM_L_R_ADC_RATE)));
234 LOG(("rate : %d\n", auich_codec_read(&stream->card->config, AC97_PCM_FRONT_DAC_RATE)));
260 uint8 index = auich_reg_read_8(&stream->card->config, stream->base + AUICH_REG_X_CIV);
277 civ = auich_reg_read_8(&stream->card->config, stream->base + AUICH_REG_X_CIV);
280 auich_reg_write_16(&stream->card->config,
281 stream->base + GET_REG_SR(&stream->card->config),
282 auich_reg_read_16(&stream->card->config, stream->base + GET_REG_SR(&stream->card->config)));
283 auich_reg_read_16(&stream->card->config, stream->base + GET_REG_SR(&stream->card->config));
285 auich_reg_write_8(&stream->card->config, stream->base + AUICH_REG_X_LVI, (civ + 2) % AUICH_DMALIST_MAX);
286 auich_reg_read_8(&stream->card->config, stream->base + AUICH_REG_X_LVI);
288 auich_reg_write_8(&stream->card->config, stream->base + AUICH_REG_X_CR, CR_RPBM | CR_LVBIE | CR_FEIE | CR_IOCE);
289 auich_reg_read_8(&stream->card->config, stream->base + AUICH_REG_X_CR);
292 dump_hardware_regs(&stream->card->config);
304 auich_reg_write_8(&stream->card->config, stream->base + AUICH_REG_X_CR,
305 auich_reg_read_8(&stream->card->config, stream->base + AUICH_REG_X_CR) & ~CR_RPBM);
310 auich_stream_new(auich_dev *card, uint8 use, uint32 bufframes, uint8 bufcount)
319 stream->card = card;
358 LIST_INSERT_HEAD((&card->streams), stream, next);
374 auich_reg_write_8(&stream->card->config, stream->base + AUICH_REG_X_CR, 0);
377 auich_reg_write_8(&stream->card->config, stream->base + AUICH_REG_X_CR, CR_RR);
379 if (0 == auich_reg_read_8(&stream->card->config, stream->base + AUICH_REG_X_CR)) {
390 auich_reg_write_32(&stream->card->config, stream->base + AUICH_REG_X_BDBAR, 0);
396 auich_mem_free(stream->card, stream->buffer->log_base);
410 auich_dev *card = arg;
417 // TRACE(("auich_int(%p)\n", card));
419 sta = auich_reg_read_32(&card->config, AUICH_REG_GLOB_STA) & STA_INTMASK;
422 auich_reg_write_32(&card->config, AUICH_REG_GLOB_STA, sta & (STA_S0RI | STA_S1RI | STA_S2RI));
428 if (sta & card->interrupt_mask) {
431 LIST_FOREACH(stream, &card->streams, next)
433 sr = auich_reg_read_16(&card->config,
434 stream->base + GET_REG_SR(&stream->card->config));
445 auich_reg_write_8(&card->config, stream->base + AUICH_REG_X_LVI,
456 auich_reg_write_16(&card->config,
457 stream->base + GET_REG_SR(&stream->card->config), sr);
458 auich_reg_write_32(&card->config, AUICH_REG_GLOB_STA, stream->sta);
464 auich_reg_write_32(&card->config, AUICH_REG_GLOB_STA, sta);
468 card->interrupt_mask, sta);
593 auich_dev * card)
595 sprintf(card->name, "audio/hmulti/auich/%ld", card-cards+1);
596 names[num_names++] = card->name;
603 auich_init(auich_dev * card)
605 card->interrupt_mask = STA_PIINT | STA_POINT; //STA_INTMASK;
608 LIST_INIT(&(card->streams));
611 LIST_INIT(&(card->mems));
618 auich_setup(auich_dev * card)
625 PRINT(("auich_setup(%p)\n", card));
627 make_device_names(card);
629 card->config.subvendor_id = card->info.u.h0.subsystem_vendor_id;
630 card->config.subsystem_id = card->info.u.h0.subsystem_id;
631 card->config.nabmbar = card->info.u.h0.base_registers[0];
632 card->config.irq = card->info.u.h0.interrupt_line;
633 card->config.type = 0;
634 if ((card->info.device_id == INTEL_82801DB_AC97_DEVICE_ID)
635 || (card->info.device_id == INTEL_82801EB_AC97_DEVICE_ID)
636 || (card->info.device_id == INTEL_82801FB_AC97_DEVICE_ID)
637 || (card->info.device_id == INTEL_82801GB_AC97_DEVICE_ID)
638 || (card->info.device_id == INTEL_6300ESB_AC97_DEVICE_ID))
639 card->config.type |= TYPE_ICH4;
640 if (card->info.device_id == SIS_SI7012_AC97_DEVICE_ID)
641 card->config.type |= TYPE_SIS7012;
645 card->name, card->info.device_id, card->info.revision,
646 card->info.u.h0.subsystem_id, card->config.nabmbar));
648 if (IS_ICH4(&card->config)) {
650 card->config.mmbar = 0xfffffffe & (*pci->read_pci_config)
651 (card->info.bus, card->info.device, card->info.function, 0x18, 4);
652 card->config.mbbar = 0xfffffffe & (*pci->read_pci_config)
653 (card->info.bus, card->info.device, card->info.function, 0x1C, 4);
654 if (card->config.mmbar == 0 || card->config.mbbar == 0) {
660 card->config.nambar = 0xfffffffe & (*pci->read_pci_config)
661 (card->info.bus, card->info.device, card->info.function, 0x10, 4);
662 card->config.nabmbar = 0xfffffffe & (*pci->read_pci_config)
663 (card->info.bus, card->info.device, card->info.function, 0x14, 4);
664 if (card->config.nambar == 0 || card->config.nabmbar == 0) {
671 rv = map_io_memory(&card->config);
677 cmd = (*pci->read_pci_config)(card->info.bus, card->info.device,
678 card->info.function, PCI_command, 2);
681 if (IS_ICH4(&card->config)) {
682 (*pci->write_pci_config)(card->info.bus, card->info.device,
683 card->info.function, PCI_command, 2, cmd | PCI_command_memory);
685 (*pci->write_pci_config)(card->info.bus, card->info.device,
686 card->info.function, PCI_command, 2, cmd | PCI_command_io);
688 cmd = (*pci->read_pci_config)(card->info.bus, card->info.device,
689 card->info.function, PCI_command, 2);
694 auich_reg_write_32(&card->config, AUICH_REG_GLOB_CNT, 0);
696 auich_reg_write_32(&card->config, AUICH_REG_GLOB_CNT, CNT_COLD | CNT_PRIE);
698 rv = auich_reg_read_32(&card->config, AUICH_REG_GLOB_CNT);
704 rv = auich_reg_read_32(&card->config, AUICH_REG_GLOB_STA);
717 ac97_attach(&card->config.ac97, (codec_reg_read)auich_codec_read,
718 (codec_reg_write)auich_codec_write, &card->config,
719 card->config.subvendor_id, card->config.subsystem_id);
732 if (current_settings.use_thread || card->config.irq == 0
733 || card->config.irq == 0xff) {
735 "auich interrupt poller", B_REAL_TIME_PRIORITY, card);
738 PRINT(("installing interrupt : %" B_PRIx32 "\n", card->config.irq));
739 err = install_io_interrupt_handler(card->config.irq, auich_int,
740 card, 0);
743 ac97_detach(card->config.ac97);
744 unmap_io_memory(&card->config);
749 if ((err = auich_init(card)) != B_OK)
847 //add_debugger_command("auich", auich_debug, "auich [card# (1-n)]");
854 auich_shutdown(auich_dev *card)
856 PRINT(("shutdown(%p)\n", card));
857 ac97_detach(card->config.ac97);
859 card->interrupt_mask = 0;
866 remove_io_interrupt_handler(card->config.irq, auich_int, card);
868 unmap_io_memory(&card->config);