Lines Matching refs:dev

39 void mei_irq_compl_handler(struct mei_device *dev, struct mei_cl_cb *compl_list)  in mei_irq_compl_handler()  argument
48 dev_dbg(dev->dev, "completing call back.\n"); in mei_irq_compl_handler()
49 if (cl == &dev->iamthif_cl) in mei_irq_compl_handler()
50 mei_amthif_complete(dev, cb); in mei_irq_compl_handler()
79 void mei_irq_discard_msg(struct mei_device *dev, struct mei_msg_hdr *hdr) in mei_irq_discard_msg() argument
85 mei_read_slots(dev, dev->rd_msg_buf, hdr->length); in mei_irq_discard_msg()
86 dev_dbg(dev->dev, "discarding message " MEI_HDR_FMT "\n", in mei_irq_discard_msg()
103 struct mei_device *dev = cl->dev; in mei_cl_irq_read_msg() local
109 cl_err(dev, cl, "pending read cb not found\n"); in mei_cl_irq_read_msg()
114 cl_dbg(dev, cl, "not connected\n"); in mei_cl_irq_read_msg()
120 cl_err(dev, cl, "response buffer is not allocated.\n"); in mei_cl_irq_read_msg()
127 cl_dbg(dev, cl, "message overflow. size %d len %d idx %ld\n", in mei_cl_irq_read_msg()
142 mei_read_slots(dev, buffer, mei_hdr->length); in mei_cl_irq_read_msg()
148 cl_dbg(dev, cl, "completed read length = %lu\n", cb->buf_idx); in mei_cl_irq_read_msg()
154 mei_irq_discard_msg(dev, mei_hdr); in mei_cl_irq_read_msg()
171 struct mei_device *dev = cl->dev; in mei_cl_irq_disconnect_rsp() local
176 slots = mei_hbuf_empty_slots(dev); in mei_cl_irq_disconnect_rsp()
182 ret = mei_hbm_cl_disconnect_rsp(dev, cl); in mei_cl_irq_disconnect_rsp()
206 struct mei_device *dev = cl->dev; in mei_cl_irq_disconnect() local
211 slots = mei_hbuf_empty_slots(dev); in mei_cl_irq_disconnect()
216 if (mei_hbm_cl_disconnect_req(dev, cl)) { in mei_cl_irq_disconnect()
226 list_move_tail(&cb->list, &dev->ctrl_rd_list.list); in mei_cl_irq_disconnect()
246 struct mei_device *dev = cl->dev; in mei_cl_irq_read() local
252 slots = mei_hbuf_empty_slots(dev); in mei_cl_irq_read()
257 ret = mei_hbm_cl_flow_control_req(dev, cl); in mei_cl_irq_read()
283 struct mei_device *dev = cl->dev; in mei_cl_irq_connect() local
289 slots = mei_hbuf_empty_slots(dev); in mei_cl_irq_connect()
299 ret = mei_hbm_cl_connect_req(dev, cl); in mei_cl_irq_connect()
307 list_move_tail(&cb->list, &dev->ctrl_rd_list.list); in mei_cl_irq_connect()
323 int mei_irq_read_handler(struct mei_device *dev, in mei_irq_read_handler() argument
330 if (!dev->rd_msg_hdr) { in mei_irq_read_handler()
331 dev->rd_msg_hdr = mei_read_hdr(dev); in mei_irq_read_handler()
333 dev_dbg(dev->dev, "slots =%08x.\n", *slots); in mei_irq_read_handler()
335 mei_hdr = (struct mei_msg_hdr *) &dev->rd_msg_hdr; in mei_irq_read_handler()
336 dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM(mei_hdr)); in mei_irq_read_handler()
338 if (mei_hdr->reserved || !dev->rd_msg_hdr) { in mei_irq_read_handler()
339 dev_err(dev->dev, "corrupted message header 0x%08X\n", in mei_irq_read_handler()
340 dev->rd_msg_hdr); in mei_irq_read_handler()
346 dev_err(dev->dev, "less data available than length=%08x.\n", in mei_irq_read_handler()
355 ret = mei_hbm_dispatch(dev, mei_hdr); in mei_irq_read_handler()
357 dev_dbg(dev->dev, "mei_hbm_dispatch failed ret = %d\n", in mei_irq_read_handler()
365 list_for_each_entry(cl, &dev->file_list, link) { in mei_irq_read_handler()
367 cl_dbg(dev, cl, "got a message\n"); in mei_irq_read_handler()
373 if (&cl->link == &dev->file_list) { in mei_irq_read_handler()
374 dev_err(dev->dev, "no destination client found 0x%08X\n", in mei_irq_read_handler()
375 dev->rd_msg_hdr); in mei_irq_read_handler()
380 if (cl == &dev->iamthif_cl) { in mei_irq_read_handler()
389 *slots = mei_count_full_read_slots(dev); in mei_irq_read_handler()
390 dev->rd_msg_hdr = 0; in mei_irq_read_handler()
394 dev_err(dev->dev, "resetting due to slots overflow.\n"); in mei_irq_read_handler()
414 int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list) in mei_irq_write_handler() argument
424 if (!mei_hbuf_acquire(dev)) in mei_irq_write_handler()
427 slots = mei_hbuf_empty_slots(dev); in mei_irq_write_handler()
432 dev_dbg(dev->dev, "complete all waiting for write cb.\n"); in mei_irq_write_handler()
434 list = &dev->write_waiting_list; in mei_irq_write_handler()
439 cl_dbg(dev, cl, "MEI WRITE COMPLETE\n"); in mei_irq_write_handler()
444 if (dev->wd_state == MEI_WD_STOPPING) { in mei_irq_write_handler()
445 dev->wd_state = MEI_WD_IDLE; in mei_irq_write_handler()
446 wake_up(&dev->wait_stop_wd); in mei_irq_write_handler()
449 if (mei_cl_is_connected(&dev->wd_cl)) { in mei_irq_write_handler()
450 if (dev->wd_pending && in mei_irq_write_handler()
451 mei_cl_flow_ctrl_creds(&dev->wd_cl) > 0) { in mei_irq_write_handler()
452 ret = mei_wd_send(dev); in mei_irq_write_handler()
455 dev->wd_pending = false; in mei_irq_write_handler()
460 dev_dbg(dev->dev, "complete control write list cb.\n"); in mei_irq_write_handler()
461 list_for_each_entry_safe(cb, next, &dev->ctrl_wr_list.list, list) { in mei_irq_write_handler()
497 dev_dbg(dev->dev, "complete write list cb.\n"); in mei_irq_write_handler()
498 list_for_each_entry_safe(cb, next, &dev->write_list.list, list) { in mei_irq_write_handler()
500 if (cl == &dev->iamthif_cl) in mei_irq_write_handler()
524 struct mei_device *dev = container_of(work, in mei_timer() local
528 mutex_lock(&dev->device_lock); in mei_timer()
531 if (dev->dev_state == MEI_DEV_INIT_CLIENTS && in mei_timer()
532 dev->hbm_state != MEI_HBM_IDLE) { in mei_timer()
534 if (dev->init_clients_timer) { in mei_timer()
535 if (--dev->init_clients_timer == 0) { in mei_timer()
536 dev_err(dev->dev, "timer: init clients timeout hbm_state = %d.\n", in mei_timer()
537 dev->hbm_state); in mei_timer()
538 mei_reset(dev); in mei_timer()
544 if (dev->dev_state != MEI_DEV_ENABLED) in mei_timer()
548 list_for_each_entry(cl, &dev->file_list, link) { in mei_timer()
551 dev_err(dev->dev, "timer: connect/disconnect timeout.\n"); in mei_timer()
552 mei_reset(dev); in mei_timer()
558 if (!mei_cl_is_connected(&dev->iamthif_cl)) in mei_timer()
561 if (dev->iamthif_stall_timer) { in mei_timer()
562 if (--dev->iamthif_stall_timer == 0) { in mei_timer()
563 dev_err(dev->dev, "timer: amthif hanged.\n"); in mei_timer()
564 mei_reset(dev); in mei_timer()
565 dev->iamthif_canceled = false; in mei_timer()
566 dev->iamthif_state = MEI_IAMTHIF_IDLE; in mei_timer()
567 dev->iamthif_timer = 0; in mei_timer()
569 mei_io_cb_free(dev->iamthif_current_cb); in mei_timer()
570 dev->iamthif_current_cb = NULL; in mei_timer()
572 dev->iamthif_file_object = NULL; in mei_timer()
573 mei_amthif_run_next_cmd(dev); in mei_timer()
577 if (dev->iamthif_timer) { in mei_timer()
579 timeout = dev->iamthif_timer + in mei_timer()
582 dev_dbg(dev->dev, "dev->iamthif_timer = %ld\n", in mei_timer()
583 dev->iamthif_timer); in mei_timer()
584 dev_dbg(dev->dev, "timeout = %ld\n", timeout); in mei_timer()
585 dev_dbg(dev->dev, "jiffies = %ld\n", jiffies); in mei_timer()
592 dev_dbg(dev->dev, "freeing AMTHI for other requests\n"); in mei_timer()
594 mei_io_list_flush(&dev->amthif_rd_complete_list, in mei_timer()
595 &dev->iamthif_cl); in mei_timer()
596 mei_io_cb_free(dev->iamthif_current_cb); in mei_timer()
597 dev->iamthif_current_cb = NULL; in mei_timer()
599 dev->iamthif_file_object->private_data = NULL; in mei_timer()
600 dev->iamthif_file_object = NULL; in mei_timer()
601 dev->iamthif_timer = 0; in mei_timer()
602 mei_amthif_run_next_cmd(dev); in mei_timer()
607 if (dev->dev_state != MEI_DEV_DISABLED) in mei_timer()
608 schedule_delayed_work(&dev->timer_work, 2 * HZ); in mei_timer()
609 mutex_unlock(&dev->device_lock); in mei_timer()