Lines Matching refs:card

140 void set_direct(cmedia_pci_dev * card, int regno, uchar value, uchar mask)
146 uchar old = PCI_IO_RD(card->enhanced+regno);
149 PCI_IO_WR(card->enhanced+regno, value);
154 uchar get_direct(cmedia_pci_dev * card, int regno)
156 uchar ret = PCI_IO_RD(card->enhanced+regno);
162 void set_indirect(cmedia_pci_dev * card, int regno, uchar value, uchar mask)
164 PCI_IO_WR(card->enhanced+0x23, regno);
170 uchar old = PCI_IO_RD(card->enhanced+0x22);
173 PCI_IO_WR(card->enhanced+0x22, value);
180 uchar get_indirect(cmedia_pci_dev * card,int regno)
183 PCI_IO_WR(card->enhanced+0x23, regno);
185 ret = PCI_IO_RD(card->enhanced+0x22);
190 void dump_card(cmedia_pci_dev* card);
192 void dump_card(cmedia_pci_dev* card)
199 else dprintf(" %02x", get_direct(card, ix));
205 dprintf(" %02x", get_indirect(card, ix));
211 void dump_card(cmedia_pci_dev* card)
218 disable_card_interrupts(cmedia_pci_dev * card)
220 set_direct(card, 0x0e, 0x00, 0x03);
225 setup_dma(cmedia_pci_dev * card)
229 const uint16 base = card->enhanced + 0x80;
233 card->dma_base = base;
239 set_default_registers(cmedia_pci_dev * card)
266 set_direct(card, ptr[0], ptr[1], ptr[2]);
273 make_device_names(cmedia_pci_dev * card)
275 char * name = card->name;
276 sprintf(name, "cmedia_pci/%ld", card-cards + 1);
279 sprintf(card->midi.name, "midi/%s", name);
280 names[num_names++] = card->midi.name;
283 sprintf(card->joy.name1, "joystick/%s", name);
284 names[num_names++] = card->joy.name1;
290 sprintf(card->pcm.name, "audio/raw/%s", name);
291 names[num_names++] = card->pcm.name;
292 sprintf(card->pcm.oldname, "audio/old/%s", name);
293 names[num_names++] = card->pcm.oldname;
297 sprintf(card->mux.name, "audio/mux/%s", name);
298 names[num_names++] = card->mux.name;
301 sprintf(card->mixer.name, "audio/mix/%s", name);
302 names[num_names++] = card->mixer.name;
313 find_low_memory(cmedia_pci_dev * card)
323 sprintf(name, "%s_low", card->name);
403 card->low_size = low_size;
404 card->low_mem = addr;
405 card->low_phys = where.address;
406 card->map_low = curarea;
412 setup_cmedia_pci(cmedia_pci_dev * card)
417 ddprintf(("cmedia_pci: setup_cmedia_pci(%p)\n", card));
419 if ((card->pcm.init_sem = create_sem(1, "cm pcm init")) < B_OK)
422 if ((*mpu401->create_device)(0x330, &card->midi.driver,
424 if ((*mpu401->create_device)(card->info.u.h0.base_registers[3], &card->midi.driver,
426 0, midi_interrupt_op, &card->midi) < B_OK)
429 if ((*gameport->create_device)(0x201, &card->joy.driver) < B_OK)
431 if ((*gameport->create_device)(card->info.u.h0.base_registers[4], &card->joy.driver) < B_OK)
434 ddprintf(("midi %p gameport %p\n", card->midi.driver, card->joy.driver));
435 card->midi.card = card;
437 err = find_low_memory(card);
443 //acquire_spinlock(&card->hardware);
445 make_device_names(card);
446 card->enhanced = card->info.u.h0.base_registers[0];
447 ddprintf(("cmedia_pci: %s enhanced at %x\n", card->name, card->enhanced));
449 ddprintf(("cmedia_pci: revision %x\n", get_indirect(card, 0x15)));
451 disable_card_interrupts(card);
452 if (setup_dma(card) != B_OK) {
457 set_default_registers(card);
459 //release_spinlock(&card->hardware);
467 (*gameport->delete_device)(card->joy.driver);
469 (*mpu401->delete_device)(card->midi.driver);
471 delete_sem(card->pcm.init_sem);
573 add_debugger_command("cmedia", debug_cmedia, "cmedia [card# (1-n)]");
580 teardown_cmedia_pci(cmedia_pci_dev * card)
594 (*gameport->delete_device)(card->joy.driver);
595 (*mpu401->delete_device)(card->midi.driver);
598 acquire_spinlock(&card->hardware);
601 set_direct(card, ptr[0], ptr[1], ptr[2]);
604 disable_card_interrupts(card);
606 release_spinlock(&card->hardware);
609 delete_sem(card->pcm.init_sem);
612 (*pci->unreserve_device)(card->info.bus, card->info.device,
613 card->info.function, DRIVER_NAME, card);
698 cmedia_pci_dev * card = (cmedia_pci_dev *)data;
703 acquire_spinlock(&card->hardware);
705 status = get_direct(card, 0x10);
712 if (dma_c_interrupt(card)) {
719 set_direct(card, 0x0e, 0x00, 0x02);
720 set_direct(card, 0x0e, 0x02, 0x02);
723 if (dma_a_interrupt(card)) {
730 set_direct(card, 0x0e, 0x00, 0x01);
731 set_direct(card, 0x0e, 0x01, 0x01);
735 status = get_direct(card, 0x12);
737 if (midi_interrupt(card)) {
752 if (midi_interrupt(card)) {
758 release_spinlock(&card->hardware);
767 increment_interrupt_handler(cmedia_pci_dev * card)
770 if (atomic_add(&card->inth_count, 1) == 0) {
772 KPRINTF(("cmedia_pci: intline %d int %p\n", card->info.u.h0.interrupt_line, cmedia_pci_interrupt));
773 install_io_interrupt_handler(card->info.u.h0.interrupt_line,
774 cmedia_pci_interrupt, card, 0);
780 decrement_interrupt_handler(cmedia_pci_dev * card)
783 if (atomic_add(&card->inth_count, -1) == 1) {
785 remove_io_interrupt_handler(card->info.u.h0.interrupt_line, cmedia_pci_interrupt, card);