Lines Matching refs:dev

29 void mei_irq_compl_handler(struct mei_device *dev, struct list_head *cmpl_list)  in mei_irq_compl_handler()  argument
38 dev_dbg(dev->dev, "completing call back.\n"); in mei_irq_compl_handler()
66 static void mei_irq_discard_msg(struct mei_device *dev, struct mei_msg_hdr *hdr, in mei_irq_discard_msg() argument
70 mei_dma_ring_read(dev, NULL, in mei_irq_discard_msg()
71 hdr->extension[dev->rd_msg_hdr_count - 2]); in mei_irq_discard_msg()
78 mei_read_slots(dev, dev->rd_msg_buf, discard_len); in mei_irq_discard_msg()
79 dev_dbg(dev->dev, "discarding message " MEI_HDR_FMT "\n", in mei_irq_discard_msg()
98 struct mei_device *dev = cl->dev; in mei_cl_irq_read_msg() local
118 cl_err(dev, cl, "pending read cb not found\n"); in mei_cl_irq_read_msg()
145 cl_err(dev, cl, "unknown extended header\n"); in mei_cl_irq_read_msg()
154 cl_dbg(dev, cl, "no vtag or gsc found in extended header.\n"); in mei_cl_irq_read_msg()
161 cl_dbg(dev, cl, "vtag: %d\n", vtag_hdr->vtag); in mei_cl_irq_read_msg()
163 cl_err(dev, cl, "mismatched tag: %d != %d\n", in mei_cl_irq_read_msg()
174 if (!dev->hbm_f_gsc_supported) { in mei_cl_irq_read_msg()
175 cl_err(dev, cl, "gsc extended header is not supported\n"); in mei_cl_irq_read_msg()
181 cl_err(dev, cl, "no data allowed in cb with gsc\n"); in mei_cl_irq_read_msg()
186 cl_err(dev, cl, "gsc extended header is too big %u\n", ext_hdr_len); in mei_cl_irq_read_msg()
194 cl_dbg(dev, cl, "not connected\n"); in mei_cl_irq_read_msg()
205 cl_err(dev, cl, "message is too big len %d idx %zu\n", in mei_cl_irq_read_msg()
212 cl_dbg(dev, cl, "message overflow. size %zu len %d idx %zu\n", in mei_cl_irq_read_msg()
219 mei_dma_ring_read(dev, cb->buf.data + cb->buf_idx, length); in mei_cl_irq_read_msg()
221 mei_read_slots(dev, cb->buf.data + cb->buf_idx, 0); in mei_cl_irq_read_msg()
223 mei_read_slots(dev, cb->buf.data + cb->buf_idx, length); in mei_cl_irq_read_msg()
229 cl_dbg(dev, cl, "completed read length = %zu\n", cb->buf_idx); in mei_cl_irq_read_msg()
232 pm_runtime_mark_last_busy(dev->dev); in mei_cl_irq_read_msg()
233 pm_request_autosuspend(dev->dev); in mei_cl_irq_read_msg()
241 mei_irq_discard_msg(dev, mei_hdr, length); in mei_cl_irq_read_msg()
257 struct mei_device *dev = cl->dev; in mei_cl_irq_disconnect_rsp() local
263 slots = mei_hbuf_empty_slots(dev); in mei_cl_irq_disconnect_rsp()
270 ret = mei_hbm_cl_disconnect_rsp(dev, cl); in mei_cl_irq_disconnect_rsp()
289 struct mei_device *dev = cl->dev; in mei_cl_irq_read() local
298 slots = mei_hbuf_empty_slots(dev); in mei_cl_irq_read()
305 ret = mei_hbm_cl_flow_control_req(dev, cl); in mei_cl_irq_read()
313 pm_runtime_mark_last_busy(dev->dev); in mei_cl_irq_read()
314 pm_request_autosuspend(dev->dev); in mei_cl_irq_read()
360 int mei_irq_read_handler(struct mei_device *dev, in mei_irq_read_handler() argument
372 if (!dev->rd_msg_hdr[0]) { in mei_irq_read_handler()
373 dev->rd_msg_hdr[0] = mei_read_hdr(dev); in mei_irq_read_handler()
374 dev->rd_msg_hdr_count = 1; in mei_irq_read_handler()
376 dev_dbg(dev->dev, "slots =%08x.\n", *slots); in mei_irq_read_handler()
378 ret = hdr_is_valid(dev->rd_msg_hdr[0]); in mei_irq_read_handler()
380 dev_err(dev->dev, "corrupted message header 0x%08X\n", in mei_irq_read_handler()
381 dev->rd_msg_hdr[0]); in mei_irq_read_handler()
386 mei_hdr = (struct mei_msg_hdr *)dev->rd_msg_hdr; in mei_irq_read_handler()
387 dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM(mei_hdr)); in mei_irq_read_handler()
390 dev_err(dev->dev, "less data available than length=%08x.\n", in mei_irq_read_handler()
401 if (!dev->rd_msg_hdr[1]) { in mei_irq_read_handler()
402 dev->rd_msg_hdr[1] = mei_read_hdr(dev); in mei_irq_read_handler()
403 dev->rd_msg_hdr_count++; in mei_irq_read_handler()
405 dev_dbg(dev->dev, "extended header is %08x\n", dev->rd_msg_hdr[1]); in mei_irq_read_handler()
407 meta_hdr = ((struct mei_ext_meta_hdr *)&dev->rd_msg_hdr[1]); in mei_irq_read_handler()
411 dev_err(dev->dev, "extended message size too big %d\n", in mei_irq_read_handler()
416 dev_err(dev->dev, "corrupted message header len %d\n", in mei_irq_read_handler()
423 for (i = dev->rd_msg_hdr_count; i < ext_hdr_end; i++) { in mei_irq_read_handler()
424 dev->rd_msg_hdr[i] = mei_read_hdr(dev); in mei_irq_read_handler()
425 dev_dbg(dev->dev, "extended header %d is %08x\n", i, in mei_irq_read_handler()
426 dev->rd_msg_hdr[i]); in mei_irq_read_handler()
427 dev->rd_msg_hdr_count++; in mei_irq_read_handler()
433 if (hdr_size_left != sizeof(dev->rd_msg_hdr[ext_hdr_end])) { in mei_irq_read_handler()
434 dev_err(dev->dev, "corrupted message header len %d\n", in mei_irq_read_handler()
439 dev->rd_msg_hdr[ext_hdr_end] = mei_read_hdr(dev); in mei_irq_read_handler()
440 dev->rd_msg_hdr_count++; in mei_irq_read_handler()
442 mei_hdr->length -= sizeof(dev->rd_msg_hdr[ext_hdr_end]); in mei_irq_read_handler()
447 ret = mei_hbm_dispatch(dev, mei_hdr); in mei_irq_read_handler()
449 dev_dbg(dev->dev, "mei_hbm_dispatch failed ret = %d\n", in mei_irq_read_handler()
457 list_for_each_entry(cl, &dev->file_list, link) { in mei_irq_read_handler()
459 cl_dbg(dev, cl, "got a message\n"); in mei_irq_read_handler()
472 dev->dev_state == MEI_DEV_POWER_DOWN) { in mei_irq_read_handler()
473 mei_irq_discard_msg(dev, mei_hdr, mei_hdr->length); in mei_irq_read_handler()
477 dev_err(dev->dev, "no destination client found 0x%08X\n", dev->rd_msg_hdr[0]); in mei_irq_read_handler()
483 memset(dev->rd_msg_hdr, 0, sizeof(dev->rd_msg_hdr)); in mei_irq_read_handler()
484 dev->rd_msg_hdr_count = 0; in mei_irq_read_handler()
485 *slots = mei_count_full_read_slots(dev); in mei_irq_read_handler()
488 dev_err(dev->dev, "resetting due to slots overflow.\n"); in mei_irq_read_handler()
508 int mei_irq_write_handler(struct mei_device *dev, struct list_head *cmpl_list) in mei_irq_write_handler() argument
517 if (!mei_hbuf_acquire(dev)) in mei_irq_write_handler()
520 slots = mei_hbuf_empty_slots(dev); in mei_irq_write_handler()
528 dev_dbg(dev->dev, "complete all waiting for write cb.\n"); in mei_irq_write_handler()
530 list_for_each_entry_safe(cb, next, &dev->write_waiting_list, list) { in mei_irq_write_handler()
534 cl_dbg(dev, cl, "MEI WRITE COMPLETE\n"); in mei_irq_write_handler()
540 dev_dbg(dev->dev, "complete control write list cb.\n"); in mei_irq_write_handler()
541 list_for_each_entry_safe(cb, next, &dev->ctrl_wr_list, list) { in mei_irq_write_handler()
594 dev_dbg(dev->dev, "complete write list cb.\n"); in mei_irq_write_handler()
595 list_for_each_entry_safe(cb, next, &dev->write_list, list) { in mei_irq_write_handler()
613 struct mei_device *dev = cl->dev; in mei_connect_timeout() local
616 if (dev->hbm_f_dot_supported) { in mei_connect_timeout()
622 mei_reset(dev); in mei_connect_timeout()
633 void mei_schedule_stall_timer(struct mei_device *dev) in mei_schedule_stall_timer() argument
635 schedule_delayed_work(&dev->timer_work, MEI_STALL_TIMER_FREQ); in mei_schedule_stall_timer()
647 struct mei_device *dev = container_of(work, in mei_timer() local
651 mutex_lock(&dev->device_lock); in mei_timer()
654 if (dev->dev_state == MEI_DEV_INIT_CLIENTS && in mei_timer()
655 dev->hbm_state != MEI_HBM_IDLE) { in mei_timer()
657 if (dev->init_clients_timer) { in mei_timer()
658 if (--dev->init_clients_timer == 0) { in mei_timer()
659 dev_err(dev->dev, "timer: init clients timeout hbm_state = %d.\n", in mei_timer()
660 dev->hbm_state); in mei_timer()
661 mei_reset(dev); in mei_timer()
668 if (dev->dev_state != MEI_DEV_ENABLED) in mei_timer()
672 list_for_each_entry(cl, &dev->file_list, link) { in mei_timer()
675 dev_err(dev->dev, "timer: connect/disconnect timeout.\n"); in mei_timer()
684 if (dev->dev_state != MEI_DEV_DISABLED && reschedule_timer) in mei_timer()
685 mei_schedule_stall_timer(dev); in mei_timer()
687 mutex_unlock(&dev->device_lock); in mei_timer()