static void audrec_dsp_event(void *data, unsigned id, size_t len, void (*getevent) (void *ptr, size_t len)) { struct msm_audio *prtd = data; unsigned long flag = 0; switch (id) { case AUDREC_CMD_MEM_CFG_DONE_MSG: { MM_DBG("AUDREC_CMD_MEM_CFG_DONE_MSG\n"); prtd->running = 1; alsa_in_record_config(prtd, 1); break; } case AUDREC_FATAL_ERR_MSG: { struct audrec_fatal_err_msg fatal_err_msg; getevent(&fatal_err_msg, AUDREC_FATAL_ERR_MSG_LEN); MM_ERR("FATAL_ERR_MSG: err id %d\n", fatal_err_msg.audrec_err_id); /* Error stop the encoder */ prtd->stopped = 1; wake_up(&the_locks.wait); break; } case AUDREC_UP_PACKET_READY_MSG: { struct audrec_up_pkt_ready_msg pkt_ready_msg; MM_DBG("AUDREC_UP_PACKET_READY_MSG\n"); getevent(&pkt_ready_msg, AUDREC_UP_PACKET_READY_MSG_LEN); MM_DBG("UP_PACKET_READY_MSG: write cnt lsw %d \ write cnt msw %d read cnt lsw %d read cnt msw %d \n",\ pkt_ready_msg.audrec_packet_write_cnt_lsw, \ pkt_ready_msg.audrec_packet_write_cnt_msw, \ pkt_ready_msg.audrec_up_prev_read_cnt_lsw, \ pkt_ready_msg.audrec_up_prev_read_cnt_msw); alsa_get_dsp_frames(prtd); ++intcnt; if (prtd->channel_mode == 1) { spin_lock_irqsave(&the_locks.read_dsp_lock, flag); prtd->pcm_irq_pos += prtd->pcm_count; if (prtd->pcm_irq_pos >= prtd->pcm_size) prtd->pcm_irq_pos = 0; spin_unlock_irqrestore(&the_locks.read_dsp_lock, flag); if (prtd->ops->capture) prtd->ops->capture(prtd); } else if ((prtd->channel_mode == 0) && (intcnt % 2 == 0)) { spin_lock_irqsave(&the_locks.read_dsp_lock, flag); prtd->pcm_irq_pos += prtd->pcm_count; if (prtd->pcm_irq_pos >= prtd->pcm_size) prtd->pcm_irq_pos = 0; spin_unlock_irqrestore(&the_locks.read_dsp_lock, flag); if (prtd->ops->capture) prtd->ops->capture(prtd); } break; } default: MM_DBG("Unknown Event id %d\n", id); } }
static void vfe_7x_ops(void *driver_data, unsigned id, size_t len, void (*getevent)(void *ptr, size_t len)) { uint32_t evt_buf[3]; struct msm_vfe_resp *rp; void *data; CDBG("%s:id=%d\n", __func__, id); len = (id == VFE_ADSP_EVENT) ? 0 : len; data = resp->vfe_alloc(sizeof(struct msm_vfe_resp) + len, vfe_syncdata, GFP_ATOMIC); if (!data) { pr_err("%s: rp: cannot allocate buffer\n", __func__); return; } rp = (struct msm_vfe_resp *)data; rp->evt_msg.len = len; if (id == VFE_ADSP_EVENT) { /* event */ rp->type = VFE_EVENT; rp->evt_msg.type = MSM_CAMERA_EVT; getevent(evt_buf, sizeof(evt_buf)); rp->evt_msg.msg_id = evt_buf[0]; CDBG("%s:event:msg_id=%d\n", __func__, rp->evt_msg.msg_id); resp->vfe_resp(rp, MSM_CAM_Q_VFE_EVT, vfe_syncdata, GFP_ATOMIC); } else { /* messages */ rp->evt_msg.type = MSM_CAMERA_MSG; rp->evt_msg.msg_id = id; rp->evt_msg.data = rp + 1; getevent(rp->evt_msg.data, len); CDBG("%s:messages:msg_id=%d\n", __func__, rp->evt_msg.msg_id); switch (rp->evt_msg.msg_id) { case MSG_SNAPSHOT: update_axi_qos(MSM_AXI_QOS_PREVIEW); rp->type = VFE_MSG_SNAPSHOT; break; case MSG_OUTPUT1: case MSG_OUTPUT2: rp->type = VFE_MSG_OUTPUT_P; vfe_7x_convert(&(rp->phy), VFE_MSG_OUTPUT_P, rp->evt_msg.data, &(rp->extdata), &(rp->extlen)); break; case MSG_STATS_AF: rp->type = VFE_MSG_STATS_AF; vfe_7x_convert(&(rp->phy), VFE_MSG_STATS_AF, rp->evt_msg.data, NULL, NULL); break; case MSG_STATS_WE: rp->type = VFE_MSG_STATS_WE; vfe_7x_convert(&(rp->phy), VFE_MSG_STATS_WE, rp->evt_msg.data, NULL, NULL); CDBG("MSG_STATS_WE: phy = 0x%x\n", rp->phy.sbuf_phy); break; case MSG_STOP_ACK: rp->type = VFE_MSG_GENERAL; stopevent.state = 1; wake_up(&stopevent.wait); break; default: rp->type = VFE_MSG_GENERAL; break; } resp->vfe_resp(rp, MSM_CAM_Q_VFE_MSG, vfe_syncdata, GFP_ATOMIC); } }
static void vfe_7x_ops(void *driver_data, unsigned id, size_t len, void (*getevent)(void *ptr, size_t len)) { uint32_t evt_buf[3]; struct msm_vfe_resp *rp; rp = kmalloc(sizeof(struct msm_vfe_resp), GFP_ATOMIC); if (!rp) { CDBG_ERR("vfe_7x_ops:rp cannot allocate buffer\n"); return; } if (id == VFE_ADSP_EVENT) { /* event */ getevent(evt_buf, sizeof(evt_buf)); rp->type = VFE_EVENT; rp->evt_msg.type = MSM_CAMERA_EVT; rp->evt_msg.len = 0; rp->evt_msg.msg_id = evt_buf[0]; resp->vfe_resp(rp, MSM_CAM_Q_VFE_EVT, vfe_syncdata); } else { /* messages */ rp->evt_msg.type = MSM_CAMERA_MSG; rp->evt_msg.msg_id = id; rp->evt_msg.len = len; rp->evt_msg.data = kmalloc(rp->evt_msg.len, GFP_ATOMIC); if (!(rp->evt_msg.data)) { kfree(rp); CDBG_ERR("vfe_7x_ops:rp->evt_msg.data: cannot allocate buffer\n"); return; } getevent(rp->evt_msg.data, len); switch (rp->evt_msg.msg_id) { case MSG_SNAPSHOT: rp->type = VFE_MSG_SNAPSHOT; break; case MSG_OUTPUT1: rp->type = VFE_MSG_OUTPUT1; vfe_7x_convert(&(rp->phy), VFE_MSG_OUTPUT1, rp->evt_msg.data, &(rp->extdata), &(rp->extlen)); break; case MSG_OUTPUT2: rp->type = VFE_MSG_OUTPUT2; vfe_7x_convert(&(rp->phy), VFE_MSG_OUTPUT2, rp->evt_msg.data, &(rp->extdata), &(rp->extlen)); break; case MSG_STATS_AF: rp->type = VFE_MSG_STATS_AF; vfe_7x_convert(&(rp->phy), VFE_MSG_STATS_AF, rp->evt_msg.data, NULL, NULL); break; case MSG_STATS_WE: rp->type = VFE_MSG_STATS_WE; vfe_7x_convert(&(rp->phy), VFE_MSG_STATS_WE, rp->evt_msg.data, NULL, NULL); CDBG("MSG_STATS_WE: phy = 0x%x\n", rp->phy.sbuf_phy); break; case MSG_STOP_ACK: rp->type = VFE_MSG_GENERAL; stopevent.state = 1; wake_up(&stopevent.wait); break; default: rp->type = VFE_MSG_GENERAL; break; } resp->vfe_resp(rp, MSM_CAM_Q_VFE_MSG, vfe_syncdata); } }
static void audrec_dsp_event(void *data, unsigned id, size_t len, void (*getevent)(void *ptr, size_t len)) { struct audio_in *audio = NULL; uint16_t msg[3]; if (data) audio = data; else { MM_ERR("invalid data for event %x\n", id); return; } getevent(msg, sizeof(msg)); switch (id) { case AUDREC_MSG_CMD_CFG_DONE_MSG: { if (msg[0] & AUDREC_MSG_CFG_DONE_ENC_ENA) { audio->audrec_obj_idx = msg[1]; MM_INFO("CFG ENABLED\n"); audpcm_in_encmem_config(audio); } else { MM_INFO("CFG SLEEP\n"); audio->running = 0; audio->tx_agc_enable = 0; audio->ns_enable = 0; audio->iir_enable = 0; } break; } case AUDREC_MSG_CMD_AREC_MEM_CFG_DONE_MSG: { MM_DBG("AREC_MEM_CFG_DONE_MSG\n"); audpcm_in_encparam_config(audio); break; } case AUDREC_MSG_CMD_AREC_PARAM_CFG_DONE_MSG: { MM_INFO("PARAM CFG DONE\n"); audio->running = 1; audio_dsp_set_tx_agc(audio); audio_dsp_set_ns(audio); audio_dsp_set_iir(audio); break; } case AUDREC_MSG_NO_EXT_PKT_AVAILABLE_MSG: { MM_DBG("ERROR %x\n", msg[0]); break; } case AUDREC_MSG_PACKET_READY_MSG: { struct audrec_msg_packet_ready_msg pkt_ready_msg; getevent(&pkt_ready_msg, AUDREC_MSG_PACKET_READY_MSG_LEN); MM_DBG("UP_PACKET_READY_MSG: write cnt msw %d \ write cnt lsw %d read cnt msw %d read cnt lsw %d \n",\ pkt_ready_msg.pkt_counter_msw, \ pkt_ready_msg.pkt_counter_lsw, \ pkt_ready_msg.pkt_read_cnt_msw, \ pkt_ready_msg.pkt_read_cnt_lsw); audpcm_in_get_dsp_frames(audio); break; } case ADSP_MESSAGE_ID: { MM_DBG("Received ADSP event: module \ enable/disable(audrectask)\n"); break; } default: MM_ERR("unknown event %d\n", id); } }
/* ------------------- dsp audrec event handler--------------------- */ static void audrec_dsp_event(void *data, unsigned id, size_t len, void (*getevent)(void *ptr, size_t len)) { struct audio_in *audio = data; switch (id) { case AUDREC_CMD_MEM_CFG_DONE_MSG: { MM_DBG("CMD_MEM_CFG_DONE MSG DONE\n"); audio->running = 1; if (audio->mode == MSM_AUD_ENC_MODE_TUNNEL) { if (audio->dev_cnt > 0) audaac_in_record_config(audio, 1); } else { audpreproc_pcm_send_data(audio, 1); wake_up(&audio->wait_enable); } break; } case AUDREC_FATAL_ERR_MSG: { struct audrec_fatal_err_msg fatal_err_msg; getevent(&fatal_err_msg, AUDREC_FATAL_ERR_MSG_LEN); MM_ERR("FATAL_ERR_MSG: err id %d\n", fatal_err_msg.audrec_err_id); /* Error stop the encoder */ audio->stopped = 1; wake_up(&audio->wait); if (audio->mode == MSM_AUD_ENC_MODE_NONTUNNEL) wake_up(&audio->write_wait); break; } case AUDREC_UP_PACKET_READY_MSG: { struct audrec_up_pkt_ready_msg pkt_ready_msg; getevent(&pkt_ready_msg, AUDREC_UP_PACKET_READY_MSG_LEN); MM_DBG("UP_PACKET_READY_MSG: write cnt lsw %d \ write cnt msw %d read cnt lsw %d read cnt msw %d \n",\ pkt_ready_msg.audrec_packet_write_cnt_lsw, \ pkt_ready_msg.audrec_packet_write_cnt_msw, \ pkt_ready_msg.audrec_up_prev_read_cnt_lsw, \ pkt_ready_msg.audrec_up_prev_read_cnt_msw); audaac_in_get_dsp_frames(audio); break; } case AUDREC_CMD_PCM_BUFFER_PTR_UPDATE_ARM_TO_ENC_MSG: { MM_DBG("ptr_update recieved from DSP\n"); audpreproc_pcm_send_data(audio, 1); break; } case AUDREC_CMD_PCM_CFG_ARM_TO_ENC_DONE_MSG: { MM_ERR("AUDREC_CMD_PCM_CFG_ARM_TO_ENC_DONE_MSG"); audaac_in_mem_config(audio); break; } case AUDREC_UP_NT_PACKET_READY_MSG: { struct audrec_up_nt_packet_ready_msg pkt_ready_msg; getevent(&pkt_ready_msg, AUDREC_UP_NT_PACKET_READY_MSG_LEN); MM_DBG("UP_NT_PACKET_READY_MSG: write cnt lsw %d \ write cnt msw %d read cnt lsw %d read cnt msw %d \n",\ pkt_ready_msg.audrec_packetwrite_cnt_lsw, \ pkt_ready_msg.audrec_packetwrite_cnt_msw, \ pkt_ready_msg.audrec_upprev_readcount_lsw, \ pkt_ready_msg.audrec_upprev_readcount_msw); audaac_nt_in_get_dsp_frames(audio); break; } case AUDREC_CMD_EOS_ACK_MSG: { MM_DBG("eos ack recieved\n"); break; } case AUDREC_CMD_FLUSH_DONE_MSG: { audio->wflush = 0; audio->rflush = 0; audio->flush_ack = 1; wake_up(&audio->write_wait); MM_DBG("flush ack recieved\n"); break; } case ADSP_MESSAGE_ID: { MM_DBG("Received ADSP event:module audrectask\n"); break; } default: MM_ERR("Unknown Event id %d\n", id); } }
/** Move the client with the mouse * \param c Client pointer */ static void mouse_move(Client *c) { int ocx, ocy, mx, my; int dint; uint duint; Window dw; XRectangle geo = c->geo; XGCValues xgc; GC gci; XEvent ev; if((c->flags & MaxFlag) || (c->flags & FSSFlag)) return; ocx = c->geo.x; ocy = c->geo.y; if(XGrabPointer(dpy, ROOT, False, MouseMask, GrabModeAsync, GrabModeAsync, None, cursor[CurMove], CurrentTime) != GrabSuccess) return; if(!(c->flags & TileFlag) && !(c->flags & LMaxFlag)) XGrabServer(dpy); /* Set the GC for the rectangle */ xgc.function = GXinvert; xgc.subwindow_mode = IncludeInferiors; xgc.line_width = BORDH; gci = XCreateGC(dpy, ROOT, GCFunction | GCSubwindowMode | GCLineWidth, &xgc); if(!(c->flags & TileFlag) && !(c->flags & LMaxFlag)) mouse_dragborder(c->geo, gci); XQueryPointer(dpy, ROOT, &dw, &dw, &mx, &my, &dint, &dint, &duint); do { XMaskEvent(dpy, MouseMask | SubstructureRedirectMask, &ev); screen_get_sel(); if(ev.type == MotionNotify) { mouse_move_tile_client(&c); mouse_move_tag_client(c); /* To move a client normally, in freelayout */ if(!(c->flags & TileFlag) && !(c->flags & LMaxFlag)) { mouse_dragborder(geo, gci); geo.x = (ocx + (ev.xmotion.x - mx)); geo.y = (ocy + (ev.xmotion.y - my)); /* * Need to draw 2 times the same rectangle because * it is draw with the revert color; revert + revert = normal */ mouse_dragborder(geo, gci); } } else if(ev.type == MapRequest || ev.type == ConfigureRequest) getevent(ev); } while(ev.type != ButtonRelease); /* One time again to delete all the trace on the window */ if(!(c->flags & TileFlag) && !(c->flags & LMaxFlag)) { mouse_dragborder(geo, gci); client_moveresize(c, geo, False); frame_update(c); XUngrabServer(dpy); } client_update_attributes(c); XUngrabPointer(dpy, CurrentTime); XFreeGC(dpy, gci); return; }
static void vfe_7x_ops(void *driver_data, unsigned id, size_t len, void (*getevent)(void *ptr, size_t len)) { uint32_t evt_buf[3]; struct msm_vfe_resp *rp; void *data; len = (id == (uint16_t)-1) ? 0 : len; data = resp->vfe_alloc(sizeof(struct msm_vfe_resp) + len, vfe_syncdata); if (!data) { pr_err("rp: cannot allocate buffer\n"); return; } rp = (struct msm_vfe_resp *)data; rp->evt_msg.len = len; if (id == ((uint16_t)-1)) { rp->type = VFE_EVENT; rp->evt_msg.type = MSM_CAMERA_EVT; getevent(evt_buf, sizeof(evt_buf)); rp->evt_msg.msg_id = evt_buf[0]; resp->vfe_resp(rp, MSM_CAM_Q_VFE_EVT, vfe_syncdata); } else { rp->evt_msg.type = MSM_CAMERA_MSG; rp->evt_msg.msg_id = id; rp->evt_msg.data = rp + 1; getevent(rp->evt_msg.data, len); switch (rp->evt_msg.msg_id) { case MSG_SNAPSHOT: rp->type = VFE_MSG_SNAPSHOT; break; case MSG_OUTPUT1: rp->type = VFE_MSG_OUTPUT1; vfe_7x_convert(&(rp->phy), VFE_MSG_OUTPUT1, rp->evt_msg.data, &(rp->extdata), &(rp->extlen)); break; case MSG_OUTPUT2: rp->type = VFE_MSG_OUTPUT2; vfe_7x_convert(&(rp->phy), VFE_MSG_OUTPUT2, rp->evt_msg.data, &(rp->extdata), &(rp->extlen)); break; case MSG_STATS_AF: rp->type = VFE_MSG_STATS_AF; vfe_7x_convert(&(rp->phy), VFE_MSG_STATS_AF, rp->evt_msg.data, NULL, NULL); break; case MSG_STATS_WE: rp->type = VFE_MSG_STATS_WE; vfe_7x_convert(&(rp->phy), VFE_MSG_STATS_WE, rp->evt_msg.data, NULL, NULL); CDBG("MSG_STATS_WE: phy = 0x%x\n", rp->phy.sbuf_phy); break; case MSG_STOP_ACK: rp->type = VFE_MSG_GENERAL; stopevent.state = 1; wake_up(&stopevent.wait); break; default: rp->type = VFE_MSG_GENERAL; break; } resp->vfe_resp(rp, MSM_CAM_Q_VFE_MSG, vfe_syncdata); } }