Lines Matching refs:ei

89 	struct hte_ts_info ei[] __counted_by(nlines);
118 static void hte_ts_dbgfs_init(const char *name, struct hte_ts_info *ei) in hte_ts_dbgfs_init() argument
120 if (!ei->gdev->dbg_root || !name) in hte_ts_dbgfs_init()
123 ei->ts_dbg_root = debugfs_create_dir(name, ei->gdev->dbg_root); in hte_ts_dbgfs_init()
125 debugfs_create_atomic_t("dropped_timestamps", 0444, ei->ts_dbg_root, in hte_ts_dbgfs_init()
126 &ei->dropped_ts); in hte_ts_dbgfs_init()
135 static void hte_ts_dbgfs_init(const char *name, struct hte_ts_info *ei) in hte_ts_dbgfs_init() argument
155 struct hte_ts_info *ei; in hte_ts_put() local
160 ei = desc->hte_data; in hte_ts_put()
162 if (!ei || !ei->gdev) in hte_ts_put()
165 gdev = ei->gdev; in hte_ts_put()
167 mutex_lock(&ei->req_mlock); in hte_ts_put()
169 if (unlikely(!test_bit(HTE_TS_REQ, &ei->flags) && in hte_ts_put()
170 !test_bit(HTE_TS_REGISTERED, &ei->flags))) { in hte_ts_put()
177 if (unlikely(!test_bit(HTE_TS_REQ, &ei->flags) && in hte_ts_put()
178 test_bit(HTE_TS_REGISTERED, &ei->flags))) { in hte_ts_put()
185 if (test_bit(HTE_TS_REQ, &ei->flags) && in hte_ts_put()
186 !test_bit(HTE_TS_REGISTERED, &ei->flags)) { in hte_ts_put()
187 clear_bit(HTE_TS_REQ, &ei->flags); in hte_ts_put()
193 ret = gdev->chip->ops->release(gdev->chip, desc, ei->xlated_id); in hte_ts_put()
200 kfree(ei->line_name); in hte_ts_put()
201 if (ei->free_attr_name) in hte_ts_put()
204 debugfs_remove_recursive(ei->ts_dbg_root); in hte_ts_put()
206 spin_lock_irqsave(&ei->slock, flag); in hte_ts_put()
208 if (test_bit(HTE_TS_QUEUE_WK, &ei->flags)) { in hte_ts_put()
209 spin_unlock_irqrestore(&ei->slock, flag); in hte_ts_put()
210 flush_work(&ei->cb_work); in hte_ts_put()
211 spin_lock_irqsave(&ei->slock, flag); in hte_ts_put()
215 atomic_set(&ei->dropped_ts, 0); in hte_ts_put()
217 ei->seq = 1; in hte_ts_put()
218 ei->flags = 0; in hte_ts_put()
221 spin_unlock_irqrestore(&ei->slock, flag); in hte_ts_put()
223 ei->cb = NULL; in hte_ts_put()
224 ei->tcb = NULL; in hte_ts_put()
225 ei->cl_data = NULL; in hte_ts_put()
230 mutex_unlock(&ei->req_mlock); in hte_ts_put()
241 struct hte_ts_info *ei; in hte_ts_dis_en_common() local
248 ei = desc->hte_data; in hte_ts_dis_en_common()
250 if (!ei || !ei->gdev) in hte_ts_dis_en_common()
253 gdev = ei->gdev; in hte_ts_dis_en_common()
256 mutex_lock(&ei->req_mlock); in hte_ts_dis_en_common()
258 if (!test_bit(HTE_TS_REGISTERED, &ei->flags)) { in hte_ts_dis_en_common()
264 spin_lock_irqsave(&ei->slock, flag); in hte_ts_dis_en_common()
267 if (!test_bit(HTE_TS_DISABLE, &ei->flags)) { in hte_ts_dis_en_common()
272 spin_unlock_irqrestore(&ei->slock, flag); in hte_ts_dis_en_common()
273 ret = gdev->chip->ops->enable(gdev->chip, ei->xlated_id); in hte_ts_dis_en_common()
280 spin_lock_irqsave(&ei->slock, flag); in hte_ts_dis_en_common()
281 clear_bit(HTE_TS_DISABLE, &ei->flags); in hte_ts_dis_en_common()
283 if (test_bit(HTE_TS_DISABLE, &ei->flags)) { in hte_ts_dis_en_common()
288 spin_unlock_irqrestore(&ei->slock, flag); in hte_ts_dis_en_common()
289 ret = gdev->chip->ops->disable(gdev->chip, ei->xlated_id); in hte_ts_dis_en_common()
296 spin_lock_irqsave(&ei->slock, flag); in hte_ts_dis_en_common()
297 set_bit(HTE_TS_DISABLE, &ei->flags); in hte_ts_dis_en_common()
301 spin_unlock_irqrestore(&ei->slock, flag); in hte_ts_dis_en_common()
303 mutex_unlock(&ei->req_mlock); in hte_ts_dis_en_common()
340 struct hte_ts_info *ei = container_of(w, struct hte_ts_info, cb_work); in hte_do_cb_work() local
342 if (unlikely(!ei->tcb)) in hte_do_cb_work()
345 ei->tcb(ei->cl_data); in hte_do_cb_work()
347 spin_lock_irqsave(&ei->slock, flag); in hte_do_cb_work()
348 clear_bit(HTE_TS_QUEUE_WK, &ei->flags); in hte_do_cb_work()
349 spin_unlock_irqrestore(&ei->slock, flag); in hte_do_cb_work()
357 struct hte_ts_info *ei = desc->hte_data; in __hte_req_ts() local
359 gdev = ei->gdev; in __hte_req_ts()
364 mutex_lock(&ei->req_mlock); in __hte_req_ts()
366 if (test_bit(HTE_TS_REGISTERED, &ei->flags) || in __hte_req_ts()
367 !test_bit(HTE_TS_REQ, &ei->flags)) { in __hte_req_ts()
374 ei->cb = cb; in __hte_req_ts()
375 ei->tcb = tcb; in __hte_req_ts()
377 INIT_WORK(&ei->cb_work, hte_do_cb_work); in __hte_req_ts()
379 ret = gdev->chip->ops->request(gdev->chip, desc, ei->xlated_id); in __hte_req_ts()
385 ei->cl_data = data; in __hte_req_ts()
386 ei->seq = 1; in __hte_req_ts()
391 ei->line_name = NULL; in __hte_req_ts()
393 ei->line_name = kasprintf(GFP_KERNEL, "ts_%u", desc->attr.line_id); in __hte_req_ts()
396 ei->line_name : desc->attr.name, ei); in __hte_req_ts()
397 set_bit(HTE_TS_REGISTERED, &ei->flags); in __hte_req_ts()
400 desc->attr.line_id, ei->xlated_id); in __hte_req_ts()
405 mutex_unlock(&ei->req_mlock); in __hte_req_ts()
410 static int hte_bind_ts_info_locked(struct hte_ts_info *ei, in hte_bind_ts_info_locked() argument
415 mutex_lock(&ei->req_mlock); in hte_bind_ts_info_locked()
417 if (test_bit(HTE_TS_REQ, &ei->flags)) { in hte_bind_ts_info_locked()
418 dev_dbg(ei->gdev->chip->dev, "id:%u is already requested\n", in hte_bind_ts_info_locked()
424 set_bit(HTE_TS_REQ, &ei->flags); in hte_bind_ts_info_locked()
425 desc->hte_data = ei; in hte_bind_ts_info_locked()
426 ei->xlated_id = x_id; in hte_bind_ts_info_locked()
429 mutex_unlock(&ei->req_mlock); in hte_bind_ts_info_locked()
565 struct hte_ts_info *ei; in hte_ts_get() local
614 ei = &gdev->ei[xlated_id]; in hte_ts_get()
616 ret = hte_bind_ts_info_locked(ei, desc, xlated_id); in hte_ts_get()
620 ei->free_attr_name = free_name; in hte_ts_get()
655 struct hte_ts_info *ei; in hte_request_ts_ns() local
660 ei = desc->hte_data; in hte_request_ts_ns()
661 if (!ei || !ei->gdev) in hte_request_ts_ns()
666 dev_err(ei->gdev->chip->dev, in hte_request_ts_ns()
767 struct hte_ts_info *ei; in hte_get_clk_src_info() local
774 ei = desc->hte_data; in hte_get_clk_src_info()
775 if (!ei->gdev || !ei->gdev->chip) in hte_get_clk_src_info()
778 chip = ei->gdev->chip; in hte_get_clk_src_info()
803 struct hte_ts_info *ei; in hte_push_ts_ns() local
812 ei = &chip->gdev->ei[xlated_id]; in hte_push_ts_ns()
814 spin_lock_irqsave(&ei->slock, flag); in hte_push_ts_ns()
817 data->seq = ei->seq++; in hte_push_ts_ns()
819 if (!test_bit(HTE_TS_REGISTERED, &ei->flags) || in hte_push_ts_ns()
820 test_bit(HTE_TS_DISABLE, &ei->flags)) { in hte_push_ts_ns()
822 atomic_inc(&ei->dropped_ts); in hte_push_ts_ns()
827 ret = ei->cb(data, ei->cl_data); in hte_push_ts_ns()
828 if (ret == HTE_RUN_SECOND_CB && ei->tcb) { in hte_push_ts_ns()
829 queue_work(system_unbound_wq, &ei->cb_work); in hte_push_ts_ns()
830 set_bit(HTE_TS_QUEUE_WK, &ei->flags); in hte_push_ts_ns()
834 spin_unlock_irqrestore(&ei->slock, flag); in hte_push_ts_ns()
853 gdev = kzalloc(struct_size(gdev, ei, chip->nlines), GFP_KERNEL); in hte_register_chip()
863 gdev->ei[i].gdev = gdev; in hte_register_chip()
864 mutex_init(&gdev->ei[i].req_mlock); in hte_register_chip()
865 spin_lock_init(&gdev->ei[i].slock); in hte_register_chip()