Lines Matching refs:card

84 static void make_device_names(echo_dev * card);
86 static status_t echo_setup(echo_dev * card);
87 static void echo_shutdown(echo_dev *card);
97 echo_mem_new(echo_dev *card, size_t size)
124 echo_mem_alloc(echo_dev *card, size_t size)
128 mem = echo_mem_new(card, size);
132 LIST_INSERT_HEAD(&(card->mems), mem, next);
139 echo_mem_free(echo_dev *card, void *ptr)
143 LIST_FOREACH(mem, &card->mems, next) {
172 status = stream->card->pEG->CloseAudio(&close_params);
186 status = stream->card->pEG->OpenAudio(&open_params, &stream->pipe);
194 status = stream->card->pEG->VerifyAudioOpen(stream->pipe);
214 status = stream->card->pEG->QueryAudioFormat(stream->pipe, &format_params);
221 status = stream->card->pEG->SetAudioFormat(stream->pipe, &format_params);
229 status = stream->card->pEG->QueryAudioSampleRate(sample_rate);
237 status = stream->card->pEG->SetAudioSampleRate(sample_rate);
245 echo_mem_free(stream->card, stream->buffer->log_base);
254 stream->buffer = echo_mem_alloc(stream->card,
261 CDaffyDuck *duck = stream->card->pEG->GetDaffyDuck(stream->pipe);
276 if (stream->card->pEG->GetAudioPositionPtr(stream->pipe, stream->position)!=ECHOSTATUS_OK) {
323 status = stream->card->pEG->Start(stream->pipe);
338 status = stream->card->pEG->Stop(stream->pipe);
346 echo_stream_new(echo_dev *card, uint8 use, uint32 bufframes, uint8 bufcount)
355 stream->card = card;
378 LIST_INSERT_HEAD((&card->streams), stream, next);
396 status = stream->card->pEG->CloseAudio(&close_params);
404 echo_mem_free(stream->card, stream->buffer->log_base);
418 echo_dev* card = (echo_dev*)arg;
424 err = card->pEG->ServiceIrq(midiReceived);
432 release_sem_etc(card->midi.midi_ready_sem, 1, B_DO_NOT_RESCHEDULE);
435 LIST_FOREACH(stream, &card->streams, next) {
455 /* dumps card capabilities */
457 echo_dump_caps(echo_dev *card)
459 PECHOGALS_CAPS caps = &card->caps;
523 PRINT(("no card found\n"));
537 // Get card services client module
636 make_device_names(echo_dev * card)
639 sprintf(card->midi.name, "midi/" DRIVER_NAME "/%ld", card-cards + 1);
640 names[num_names++] = card->midi.name;
642 sprintf(card->name, "audio/hmulti/" DRIVER_NAME "/%ld", card-cards + 1);
643 names[num_names++] = card->name;
651 echo_dev * card, *dev;
657 if (!(*cookie = card = (echo_dev *)malloc(sizeof(echo_dev)))) {
661 memset(card, 0, sizeof(echo_dev));
663 card->info = *info;
664 card->plugged = true;
665 card->index = 0;
668 if (dev->index == card->index) {
669 card->index++;
675 sprintf(card->name, "audio/hmulti/" DRIVER_NAME "/%ld", card->index);
678 LIST_INSERT_HEAD((&devices), card, next);
682 echo_setup(card);
692 echo_dev *card = (echo_dev *) cookie;
696 if (card == NULL) {
697 LOG((": null device 0x%.8x\n", card));
701 echo_shutdown(card);
706 card->plugged = false;
708 if (card->opened) {
709 LOG(("device 0x%.8x %s still in use\n", card, card->name));
711 LOG(("free device 0x%.8x %s\n", card, card->name));
712 LIST_REMOVE(card, next);
713 free(card);
723 echo_setup(echo_dev* card)
728 PRINT(("echo_setup(%p)\n", card));
731 (*pci->write_pci_config)(card->info.bus, card->info.device,
732 card->info.function, PCI_latency, 1, 0xc0 );
734 make_device_names(card);
736 card->bmbar = card->info.u.h0.base_registers[0];
737 card->irq = card->info.u.h0.interrupt_line;
739 card->area_bmbar = map_mem(&card->log_bmbar, card->bmbar,
740 card->info.u.h0.base_register_sizes[0], DRIVER_NAME" bmbar io");
741 if (card->area_bmbar <= B_OK) {
742 LOG(("mapping of bmbar io failed, error = %#x\n",card->area_bmbar));
745 LOG(("mapping of bmbar: area %#x, phys %#x, log %#x\n", card->area_bmbar,
746 card->bmbar, card->log_bmbar));
748 card->pOSS = new COsSupport(card->info.device_id, card->info.revision);
749 if (card->pOSS == NULL)
752 switch (card->type) {
755 card->pEG = new CDarla(card->pOSS);
759 card->pEG = new CGina(card->pOSS);
763 card->pEG = new CLayla(card->pOSS);
767 card->pEG = new CDarla24(card->pOSS);
773 card->pEG = new CGina24(card->pOSS);
777 card->pEG = new CLayla24(card->pOSS);
781 card->pEG = new CMona(card->pOSS);
785 card->pEG = new CMia(card->pOSS);
791 card->pEG = new CIndigo(card->pOSS);
795 card->pEG = new CIndigoIO(card->pOSS);
799 card->pEG = new CIndigoDJ(card->pOSS);
805 card->pEG = new C3g(card->pOSS);
810 PRINT(("card type 0x%x not supported by " DRIVER_NAME "\n",
811 card->type));
815 if (card->pEG == NULL)
819 cmd = (*pci->read_pci_config)(card->info.bus, card->info.device,
820 card->info.function, PCI_command, 2);
822 (*pci->write_pci_config)(card->info.bus, card->info.device,
823 card->info.function, PCI_command, 2, cmd | PCI_command_io);
824 cmd = (*pci->read_pci_config)(card->info.bus, card->info.device,
825 card->info.function, PCI_command, 2);
829 card->pEG->AssignResources(card->log_bmbar, name);
832 status = card->pEG->InitHw();
836 card->pEG->GetCapabilities(&card->caps);
839 LIST_INIT(&(card->streams));
842 LIST_INIT(&(card->mems));
845 card->midi.midi_ready_sem = create_sem(0, "midi sem");
848 PRINT(("installing interrupt : %x\n", card->irq));
849 status = install_io_interrupt_handler(card->irq, echo_int, card, 0);
857 echo_dump_caps(card);
860 if (card->type == ECHO3G) {
861 strlcpy(card->caps.szName, ((C3g*)card->pEG)->Get3gBoxName(),
866 status = card->pEG->OpenMixer(card->mixer);
875 remove_io_interrupt_handler(card->irq, echo_int, card);
878 delete_sem(card->midi.midi_ready_sem);
881 delete card->pEG;
883 delete card->pOSS;
885 delete_area(card->area_bmbar);
890 echo_shutdown(echo_dev *card)
894 PRINT(("shutdown(%p)\n", card));
895 status = card->pEG->CloseMixer(card->mixer);
899 remove_io_interrupt_handler(card->irq, echo_int, card);
902 delete_sem(card->midi.midi_ready_sem);
905 delete card->pEG;
906 delete card->pOSS;
908 delete_area(card->area_bmbar);