Lines Matching defs:mgr
58 static int mixart_set_pipe_state(struct mixart_mgr *mgr,
76 dev_err(&mgr->pci->dev,
90 err = snd_mixart_send_msg_wait_notif(mgr, &request, system_msg_uid);
92 dev_err(&mgr->pci->dev,
112 err = snd_mixart_send_msg(mgr, &request, sizeof(group_state_resp), &group_state_resp);
114 dev_err(&mgr->pci->dev,
125 err = snd_mixart_send_msg(mgr, &request, sizeof(group_state_resp), &group_state_resp);
127 dev_err(&mgr->pci->dev,
140 err = snd_mixart_send_msg(mgr, &request, sizeof(stat), &stat);
142 dev_err(&mgr->pci->dev,
157 static int mixart_set_clock(struct mixart_mgr *mgr,
176 dev_err(&mgr->pci->dev,
190 dev_dbg(&mgr->pci->dev, "mixart_set_clock to %d kHz\n", rate);
193 request.uid = mgr->uid_console_manager;
197 err = snd_mixart_send_msg(mgr, &request, sizeof(clock_prop_resp), &clock_prop_resp);
199 dev_err(&mgr->pci->dev,
289 flowinfo = (struct mixart_flowinfo *)chip->mgr->flowinfo.area;
290 flowinfo[j].bufferinfo_array_phy_address = (u32)chip->mgr->bufferinfo.addr + (j * sizeof(struct mixart_bufferinfo));
293 bufferinfo = (struct mixart_bufferinfo *)chip->mgr->bufferinfo.area;
304 err = snd_mixart_send_msg(chip->mgr, &request, sizeof(buf->sgroup_resp), &buf->sgroup_resp);
328 int snd_mixart_kill_ref_pipe(struct mixart_mgr *mgr,
347 err = mixart_set_clock( mgr, pipe, 0);
349 dev_err(&mgr->pci->dev,
354 err = mixart_set_pipe_state(mgr, pipe, 0);
356 dev_err(&mgr->pci->dev, "error stopping pipe!\n");
365 err = snd_mixart_send_msg(mgr, &request, sizeof(delete_resp), &delete_resp);
367 dev_err(&mgr->pci->dev,
409 return snd_mixart_send_msg_nonblock(chip->mgr, &request);
460 static int mixart_sync_nonblock_events(struct mixart_mgr *mgr)
463 while (atomic_read(&mgr->msg_processed) > 0) {
465 dev_err(&mgr->pci->dev,
486 mixart_sync_nonblock_events(chip->mgr);
490 if(chip->mgr->ref_count_rate == 1)
491 chip->mgr->sample_rate = subs->runtime->rate;
495 if( mixart_set_clock(chip->mgr, stream->pipe, subs->runtime->rate) )
518 stream_param.sampling_freq = chip->mgr->sample_rate;
576 err = snd_mixart_send_msg(chip->mgr, &request, sizeof(resp), &resp);
594 struct mixart_mgr *mgr = chip->mgr;
606 mutex_lock(&mgr->setup_mutex);
622 mutex_unlock(&mgr->setup_mutex);
633 bufferinfo = (struct mixart_bufferinfo *)chip->mgr->bufferinfo.area;
644 mutex_unlock(&mgr->setup_mutex);
652 mixart_sync_nonblock_events(chip->mgr);
707 struct mixart_mgr *mgr = chip->mgr;
715 mutex_lock(&mgr->setup_mutex);
750 err = mixart_set_pipe_state(chip->mgr, pipe, 1);
753 snd_mixart_kill_ref_pipe(chip->mgr, pipe, 0);
770 if(mgr->ref_count_rate++) {
771 if(mgr->sample_rate) {
772 runtime->hw.rate_min = runtime->hw.rate_max = mgr->sample_rate;
777 mutex_unlock(&mgr->setup_mutex);
786 struct mixart_mgr *mgr = chip->mgr;
794 mutex_lock(&mgr->setup_mutex);
831 err = mixart_set_pipe_state(chip->mgr, pipe, 1);
834 snd_mixart_kill_ref_pipe(chip->mgr, pipe, 0);
851 if(mgr->ref_count_rate++) {
852 if(mgr->sample_rate) {
853 runtime->hw.rate_min = runtime->hw.rate_max = mgr->sample_rate;
858 mutex_unlock(&mgr->setup_mutex);
868 struct mixart_mgr *mgr = chip->mgr;
871 mutex_lock(&mgr->setup_mutex);
877 if(--mgr->ref_count_rate == 0) {
878 mgr->sample_rate = 0;
882 if (snd_mixart_kill_ref_pipe(mgr, stream->pipe, 0 ) < 0) {
893 mutex_unlock(&mgr->setup_mutex);
944 &chip->mgr->pci->dev,
1030 static int snd_mixart_create(struct mixart_mgr *mgr, struct snd_card *card, int idx)
1044 chip->mgr = mgr;
1045 card->sync_irq = mgr->irq;
1053 mgr->chip[idx] = chip;
1065 if(chip->mgr->board_type == MIXART_DAUGHTER_TYPE_AES) {
1078 static int snd_mixart_free(struct mixart_mgr *mgr)
1082 for (i = 0; i < mgr->num_cards; i++) {
1083 if (mgr->chip[i])
1084 snd_card_free(mgr->chip[i]->card);
1088 snd_mixart_exit_mailbox(mgr);
1091 if (mgr->irq >= 0)
1092 free_irq(mgr->irq, mgr);
1095 if(mgr->dsp_loaded) {
1096 snd_mixart_reset_board(mgr);
1097 dev_dbg(&mgr->pci->dev, "reset miXart !\n");
1102 iounmap(mgr->mem[i].virt);
1104 pci_release_regions(mgr->pci);
1107 if(mgr->flowinfo.area) {
1108 snd_dma_free_pages(&mgr->flowinfo);
1109 mgr->flowinfo.area = NULL;
1112 if(mgr->bufferinfo.area) {
1113 snd_dma_free_pages(&mgr->bufferinfo);
1114 mgr->bufferinfo.area = NULL;
1117 pci_disable_device(mgr->pci);
1118 kfree(mgr);
1134 struct mixart_mgr *mgr = entry->private_data;
1137 if (copy_to_user_fromio(buf, MIXART_MEM(mgr, pos), count))
1150 struct mixart_mgr *mgr = entry->private_data;
1153 if (copy_to_user_fromio(buf, MIXART_REG(mgr, pos), count))
1176 if (chip->mgr->dsp_loaded & ( 1 << MIXART_MOTHERBOARD_ELF_INDEX)) {
1178 switch (chip->mgr->board_type ) {
1189 ref = readl_be( MIXART_MEM( chip->mgr, MIXART_PSEUDOREG_PERF_SYSTEM_LOAD_OFFSET));
1192 u32 mailbox = 100 * readl_be( MIXART_MEM( chip->mgr, MIXART_PSEUDOREG_PERF_MAILBX_LOAD_OFFSET)) / ref;
1193 u32 streaming = 100 * readl_be( MIXART_MEM( chip->mgr, MIXART_PSEUDOREG_PERF_STREAM_LOAD_OFFSET)) / ref;
1194 u32 interr = 100 * readl_be( MIXART_MEM( chip->mgr, MIXART_PSEUDOREG_PERF_INTERR_LOAD_OFFSET)) / ref;
1213 entry->private_data = chip->mgr;
1219 entry->private_data = chip->mgr;
1234 struct mixart_mgr *mgr;
1264 mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
1265 if (! mgr) {
1270 mgr->pci = pci;
1271 mgr->irq = -1;
1276 kfree(mgr);
1281 mgr->mem[i].phys = pci_resource_start(pci, i);
1282 mgr->mem[i].virt = pci_ioremap_bar(pci, i);
1283 if (!mgr->mem[i].virt) {
1285 mgr->mem[i].phys);
1286 snd_mixart_free(mgr);
1293 KBUILD_MODNAME, mgr)) {
1295 snd_mixart_free(mgr);
1298 mgr->irq = pci->irq;
1301 mgr->msg_fifo_readptr = 0;
1302 mgr->msg_fifo_writeptr = 0;
1304 mutex_init(&mgr->lock);
1305 mutex_init(&mgr->msg_lock);
1306 init_waitqueue_head(&mgr->msg_sleep);
1307 atomic_set(&mgr->msg_processed, 0);
1310 mutex_init(&mgr->setup_mutex);
1313 mgr->num_cards = MIXART_MAX_CARDS; /* 4 FIXME: configurable? */
1314 for (i = 0; i < mgr->num_cards; i++) {
1329 snd_mixart_free(mgr);
1338 mgr->mem[0].phys, mgr->mem[1].phys, mgr->irq, i);
1340 err = snd_mixart_create(mgr, card, i);
1343 snd_mixart_free(mgr);
1349 snd_mixart_proc_init(mgr->chip[i]);
1354 snd_mixart_free(mgr);
1359 /* init firmware status (mgr->dsp_loaded reset in hwdep_new) */
1360 mgr->board_type = MIXART_DAUGHTER_TYPE_NONE;
1366 size, &mgr->flowinfo) < 0) {
1367 snd_mixart_free(mgr);
1371 memset(mgr->flowinfo.area, 0, size);
1377 size, &mgr->bufferinfo) < 0) {
1378 snd_mixart_free(mgr);
1382 memset(mgr->bufferinfo.area, 0, size);
1385 err = snd_mixart_setup_firmware(mgr);
1387 snd_mixart_free(mgr);
1391 pci_set_drvdata(pci, mgr);