Lines Matching refs:stuser

70 	struct switchtec_user *stuser;  in stuser_create()  local
72 stuser = kzalloc(sizeof(*stuser), GFP_KERNEL); in stuser_create()
73 if (!stuser) in stuser_create()
77 stuser->stdev = stdev; in stuser_create()
78 kref_init(&stuser->kref); in stuser_create()
79 INIT_LIST_HEAD(&stuser->list); in stuser_create()
80 init_completion(&stuser->comp); in stuser_create()
81 stuser->event_cnt = atomic_read(&stdev->event_cnt); in stuser_create()
83 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); in stuser_create()
85 return stuser; in stuser_create()
90 struct switchtec_user *stuser; in stuser_free() local
92 stuser = container_of(kref, struct switchtec_user, kref); in stuser_free()
94 dev_dbg(&stuser->stdev->dev, "%s: %p\n", __func__, stuser); in stuser_free()
96 put_device(&stuser->stdev->dev); in stuser_free()
97 kfree(stuser); in stuser_free()
100 static void stuser_put(struct switchtec_user *stuser) in stuser_put() argument
102 kref_put(&stuser->kref, stuser_free); in stuser_put()
105 static void stuser_set_state(struct switchtec_user *stuser, in stuser_set_state() argument
117 stuser->state = state; in stuser_set_state()
119 dev_dbg(&stuser->stdev->dev, "stuser state %p -> %s", in stuser_set_state()
120 stuser, state_names[state]); in stuser_set_state()
142 struct switchtec_user *stuser; in mrpc_cmd_submit() local
150 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, in mrpc_cmd_submit()
158 stuser_set_state(stuser, MRPC_RUNNING); in mrpc_cmd_submit()
161 stuser->data, stuser->data_len); in mrpc_cmd_submit()
163 iowrite32(stuser->cmd, &stdev->mmio_mrpc->cmd); in mrpc_cmd_submit()
169 static int mrpc_queue_cmd(struct switchtec_user *stuser) in mrpc_queue_cmd() argument
173 struct switchtec_dev *stdev = stuser->stdev; in mrpc_queue_cmd()
175 kref_get(&stuser->kref); in mrpc_queue_cmd()
176 stuser->read_len = sizeof(stuser->data); in mrpc_queue_cmd()
177 stuser_set_state(stuser, MRPC_QUEUED); in mrpc_queue_cmd()
178 init_completion(&stuser->comp); in mrpc_queue_cmd()
179 list_add_tail(&stuser->list, &stdev->mrpc_queue); in mrpc_queue_cmd()
189 struct switchtec_user *stuser; in mrpc_complete_cmd() local
194 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, in mrpc_complete_cmd()
198 stuser->status = stdev->dma_mrpc->status; in mrpc_complete_cmd()
200 stuser->status = ioread32(&stdev->mmio_mrpc->status); in mrpc_complete_cmd()
202 if (stuser->status == SWITCHTEC_MRPC_STATUS_INPROGRESS) in mrpc_complete_cmd()
205 stuser_set_state(stuser, MRPC_DONE); in mrpc_complete_cmd()
206 stuser->return_code = 0; in mrpc_complete_cmd()
208 if (stuser->status != SWITCHTEC_MRPC_STATUS_DONE) in mrpc_complete_cmd()
212 stuser->return_code = stdev->dma_mrpc->rtn_code; in mrpc_complete_cmd()
214 stuser->return_code = ioread32(&stdev->mmio_mrpc->ret_value); in mrpc_complete_cmd()
215 if (stuser->return_code != 0) in mrpc_complete_cmd()
219 memcpy(stuser->data, &stdev->dma_mrpc->data, in mrpc_complete_cmd()
220 stuser->read_len); in mrpc_complete_cmd()
222 memcpy_fromio(stuser->data, &stdev->mmio_mrpc->output_data, in mrpc_complete_cmd()
223 stuser->read_len); in mrpc_complete_cmd()
225 complete_all(&stuser->comp); in mrpc_complete_cmd()
226 list_del_init(&stuser->list); in mrpc_complete_cmd()
227 stuser_put(stuser); in mrpc_complete_cmd()
388 struct switchtec_user *stuser; in switchtec_dev_open() local
392 stuser = stuser_create(stdev); in switchtec_dev_open()
393 if (IS_ERR(stuser)) in switchtec_dev_open()
394 return PTR_ERR(stuser); in switchtec_dev_open()
396 filp->private_data = stuser; in switchtec_dev_open()
399 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); in switchtec_dev_open()
406 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_release() local
408 stuser_put(stuser); in switchtec_dev_release()
429 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_write() local
430 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_write()
433 if (size < sizeof(stuser->cmd) || in switchtec_dev_write()
434 size > sizeof(stuser->cmd) + sizeof(stuser->data)) in switchtec_dev_write()
437 stuser->data_len = size - sizeof(stuser->cmd); in switchtec_dev_write()
443 if (stuser->state != MRPC_IDLE) { in switchtec_dev_write()
448 rc = copy_from_user(&stuser->cmd, data, sizeof(stuser->cmd)); in switchtec_dev_write()
454 data += sizeof(stuser->cmd); in switchtec_dev_write()
455 rc = copy_from_user(&stuser->data, data, size - sizeof(stuser->cmd)); in switchtec_dev_write()
461 rc = mrpc_queue_cmd(stuser); in switchtec_dev_write()
475 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_read() local
476 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_read()
479 if (size < sizeof(stuser->cmd) || in switchtec_dev_read()
480 size > sizeof(stuser->cmd) + sizeof(stuser->data)) in switchtec_dev_read()
487 if (stuser->state == MRPC_IDLE) { in switchtec_dev_read()
492 stuser->read_len = size - sizeof(stuser->return_code); in switchtec_dev_read()
497 if (!try_wait_for_completion(&stuser->comp)) in switchtec_dev_read()
500 rc = wait_for_completion_interruptible(&stuser->comp); in switchtec_dev_read()
509 if (stuser->state != MRPC_DONE) { in switchtec_dev_read()
514 rc = copy_to_user(data, &stuser->return_code, in switchtec_dev_read()
515 sizeof(stuser->return_code)); in switchtec_dev_read()
521 data += sizeof(stuser->return_code); in switchtec_dev_read()
522 rc = copy_to_user(data, &stuser->data, in switchtec_dev_read()
523 size - sizeof(stuser->return_code)); in switchtec_dev_read()
529 stuser_set_state(stuser, MRPC_IDLE); in switchtec_dev_read()
534 if (stuser->status == SWITCHTEC_MRPC_STATUS_DONE) in switchtec_dev_read()
536 else if (stuser->status == SWITCHTEC_MRPC_STATUS_INTERRUPTED) in switchtec_dev_read()
544 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_poll() local
545 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_poll()
548 poll_wait(filp, &stuser->comp.wait, wait); in switchtec_dev_poll()
556 if (try_wait_for_completion(&stuser->comp)) in switchtec_dev_poll()
559 if (stuser->event_cnt != atomic_read(&stdev->event_cnt)) in switchtec_dev_poll()
664 struct switchtec_user *stuser, in ioctl_event_summary() argument
700 stuser->event_cnt = atomic_read(&stdev->event_cnt); in ioctl_event_summary()
978 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_ioctl() local
979 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_ioctl()
995 rc = ioctl_event_summary(stdev, stuser, argp, in switchtec_dev_ioctl()
1008 rc = ioctl_event_summary(stdev, stuser, argp, in switchtec_dev_ioctl()
1097 struct switchtec_user *stuser, *tmpuser; in stdev_kill() local
1108 list_for_each_entry_safe(stuser, tmpuser, &stdev->mrpc_queue, list) { in stdev_kill()
1109 complete_all(&stuser->comp); in stdev_kill()
1110 list_del_init(&stuser->list); in stdev_kill()
1111 stuser_put(stuser); in stdev_kill()