Lines Matching refs:ei

81  * @ei: Timestamp information.
91 struct hte_ts_info ei[];
120 static void hte_ts_dbgfs_init(const char *name, struct hte_ts_info *ei)
122 if (!ei->gdev->dbg_root || !name)
125 ei->ts_dbg_root = debugfs_create_dir(name, ei->gdev->dbg_root);
127 debugfs_create_atomic_t("dropped_timestamps", 0444, ei->ts_dbg_root,
128 &ei->dropped_ts);
137 static void hte_ts_dbgfs_init(const char *name, struct hte_ts_info *ei)
157 struct hte_ts_info *ei;
162 ei = desc->hte_data;
164 if (!ei || !ei->gdev)
167 gdev = ei->gdev;
169 mutex_lock(&ei->req_mlock);
171 if (unlikely(!test_bit(HTE_TS_REQ, &ei->flags) &&
172 !test_bit(HTE_TS_REGISTERED, &ei->flags))) {
179 if (unlikely(!test_bit(HTE_TS_REQ, &ei->flags) &&
180 test_bit(HTE_TS_REGISTERED, &ei->flags))) {
187 if (test_bit(HTE_TS_REQ, &ei->flags) &&
188 !test_bit(HTE_TS_REGISTERED, &ei->flags)) {
189 clear_bit(HTE_TS_REQ, &ei->flags);
195 ret = gdev->chip->ops->release(gdev->chip, desc, ei->xlated_id);
202 kfree(ei->line_name);
203 if (ei->free_attr_name)
206 debugfs_remove_recursive(ei->ts_dbg_root);
208 spin_lock_irqsave(&ei->slock, flag);
210 if (test_bit(HTE_TS_QUEUE_WK, &ei->flags)) {
211 spin_unlock_irqrestore(&ei->slock, flag);
212 flush_work(&ei->cb_work);
213 spin_lock_irqsave(&ei->slock, flag);
217 atomic_set(&ei->dropped_ts, 0);
219 ei->seq = 1;
220 ei->flags = 0;
223 spin_unlock_irqrestore(&ei->slock, flag);
225 ei->cb = NULL;
226 ei->tcb = NULL;
227 ei->cl_data = NULL;
232 mutex_unlock(&ei->req_mlock);
243 struct hte_ts_info *ei;
250 ei = desc->hte_data;
252 if (!ei || !ei->gdev)
255 gdev = ei->gdev;
258 mutex_lock(&ei->req_mlock);
260 if (!test_bit(HTE_TS_REGISTERED, &ei->flags)) {
266 spin_lock_irqsave(&ei->slock, flag);
269 if (!test_bit(HTE_TS_DISABLE, &ei->flags)) {
274 spin_unlock_irqrestore(&ei->slock, flag);
275 ret = gdev->chip->ops->enable(gdev->chip, ei->xlated_id);
282 spin_lock_irqsave(&ei->slock, flag);
283 clear_bit(HTE_TS_DISABLE, &ei->flags);
285 if (test_bit(HTE_TS_DISABLE, &ei->flags)) {
290 spin_unlock_irqrestore(&ei->slock, flag);
291 ret = gdev->chip->ops->disable(gdev->chip, ei->xlated_id);
298 spin_lock_irqsave(&ei->slock, flag);
299 set_bit(HTE_TS_DISABLE, &ei->flags);
303 spin_unlock_irqrestore(&ei->slock, flag);
305 mutex_unlock(&ei->req_mlock);
342 struct hte_ts_info *ei = container_of(w, struct hte_ts_info, cb_work);
344 if (unlikely(!ei->tcb))
347 ei->tcb(ei->cl_data);
349 spin_lock_irqsave(&ei->slock, flag);
350 clear_bit(HTE_TS_QUEUE_WK, &ei->flags);
351 spin_unlock_irqrestore(&ei->slock, flag);
359 struct hte_ts_info *ei = desc->hte_data;
361 gdev = ei->gdev;
366 mutex_lock(&ei->req_mlock);
368 if (test_bit(HTE_TS_REGISTERED, &ei->flags) ||
369 !test_bit(HTE_TS_REQ, &ei->flags)) {
376 ei->cb = cb;
377 ei->tcb = tcb;
379 INIT_WORK(&ei->cb_work, hte_do_cb_work);
381 ret = gdev->chip->ops->request(gdev->chip, desc, ei->xlated_id);
387 ei->cl_data = data;
388 ei->seq = 1;
392 ei->line_name = NULL;
394 ei->line_name = kzalloc(HTE_TS_NAME_LEN, GFP_KERNEL);
395 if (ei->line_name)
396 scnprintf(ei->line_name, HTE_TS_NAME_LEN, "ts_%u",
401 ei->line_name : desc->attr.name, ei);
402 set_bit(HTE_TS_REGISTERED, &ei->flags);
405 desc->attr.line_id, ei->xlated_id);
410 mutex_unlock(&ei->req_mlock);
415 static int hte_bind_ts_info_locked(struct hte_ts_info *ei,
420 mutex_lock(&ei->req_mlock);
422 if (test_bit(HTE_TS_REQ, &ei->flags)) {
423 dev_dbg(ei->gdev->chip->dev, "id:%u is already requested\n",
429 set_bit(HTE_TS_REQ, &ei->flags);
430 desc->hte_data = ei;
431 ei->xlated_id = x_id;
434 mutex_unlock(&ei->req_mlock);
570 struct hte_ts_info *ei;
619 ei = &gdev->ei[xlated_id];
621 ret = hte_bind_ts_info_locked(ei, desc, xlated_id);
625 ei->free_attr_name = free_name;
660 struct hte_ts_info *ei;
665 ei = desc->hte_data;
666 if (!ei || !ei->gdev)
671 dev_err(ei->gdev->chip->dev,
772 struct hte_ts_info *ei;
779 ei = desc->hte_data;
780 if (!ei->gdev || !ei->gdev->chip)
783 chip = ei->gdev->chip;
808 struct hte_ts_info *ei;
817 ei = &chip->gdev->ei[xlated_id];
819 spin_lock_irqsave(&ei->slock, flag);
822 data->seq = ei->seq++;
824 if (!test_bit(HTE_TS_REGISTERED, &ei->flags) ||
825 test_bit(HTE_TS_DISABLE, &ei->flags)) {
827 atomic_inc(&ei->dropped_ts);
832 ret = ei->cb(data, ei->cl_data);
833 if (ret == HTE_RUN_SECOND_CB && ei->tcb) {
834 queue_work(system_unbound_wq, &ei->cb_work);
835 set_bit(HTE_TS_QUEUE_WK, &ei->flags);
839 spin_unlock_irqrestore(&ei->slock, flag);
858 gdev = kzalloc(struct_size(gdev, ei, chip->nlines), GFP_KERNEL);
868 gdev->ei[i].gdev = gdev;
869 mutex_init(&gdev->ei[i].req_mlock);
870 spin_lock_init(&gdev->ei[i].slock);