Lines Matching refs:stuser

87 	struct switchtec_user *stuser;  in stuser_create()  local
89 stuser = kzalloc_obj(*stuser); in stuser_create()
90 if (!stuser) in stuser_create()
94 stuser->stdev = stdev; in stuser_create()
95 kref_init(&stuser->kref); in stuser_create()
96 INIT_LIST_HEAD(&stuser->list); in stuser_create()
97 init_waitqueue_head(&stuser->cmd_comp); in stuser_create()
98 stuser->event_cnt = atomic_read(&stdev->event_cnt); in stuser_create()
100 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); in stuser_create()
102 return stuser; in stuser_create()
107 struct switchtec_user *stuser; in stuser_free() local
109 stuser = container_of(kref, struct switchtec_user, kref); in stuser_free()
111 dev_dbg(&stuser->stdev->dev, "%s: %p\n", __func__, stuser); in stuser_free()
113 put_device(&stuser->stdev->dev); in stuser_free()
114 kfree(stuser); in stuser_free()
117 static void stuser_put(struct switchtec_user *stuser) in stuser_put() argument
119 kref_put(&stuser->kref, stuser_free); in stuser_put()
122 static void stuser_set_state(struct switchtec_user *stuser, in stuser_set_state() argument
135 stuser->state = state; in stuser_set_state()
137 dev_dbg(&stuser->stdev->dev, "stuser state %p -> %s", in stuser_set_state()
138 stuser, state_names[state]); in stuser_set_state()
160 struct switchtec_user *stuser; in mrpc_cmd_submit() local
168 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, in mrpc_cmd_submit()
176 stuser_set_state(stuser, MRPC_RUNNING); in mrpc_cmd_submit()
179 stuser->data, stuser->data_len); in mrpc_cmd_submit()
181 iowrite32(stuser->cmd, &stdev->mmio_mrpc->cmd); in mrpc_cmd_submit()
187 static int mrpc_queue_cmd(struct switchtec_user *stuser) in mrpc_queue_cmd() argument
191 struct switchtec_dev *stdev = stuser->stdev; in mrpc_queue_cmd()
193 kref_get(&stuser->kref); in mrpc_queue_cmd()
194 stuser->read_len = sizeof(stuser->data); in mrpc_queue_cmd()
195 stuser_set_state(stuser, MRPC_QUEUED); in mrpc_queue_cmd()
196 stuser->cmd_done = false; in mrpc_queue_cmd()
197 list_add_tail(&stuser->list, &stdev->mrpc_queue); in mrpc_queue_cmd()
208 struct switchtec_user *stuser = list_entry(stdev->mrpc_queue.next, in mrpc_cleanup_cmd() local
211 stuser->cmd_done = true; in mrpc_cleanup_cmd()
212 wake_up_interruptible(&stuser->cmd_comp); in mrpc_cleanup_cmd()
213 list_del_init(&stuser->list); in mrpc_cleanup_cmd()
214 stuser_put(stuser); in mrpc_cleanup_cmd()
224 struct switchtec_user *stuser; in mrpc_complete_cmd() local
229 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, in mrpc_complete_cmd()
233 stuser->status = stdev->dma_mrpc->status; in mrpc_complete_cmd()
235 stuser->status = ioread32(&stdev->mmio_mrpc->status); in mrpc_complete_cmd()
237 if (stuser->status == SWITCHTEC_MRPC_STATUS_INPROGRESS) in mrpc_complete_cmd()
240 stuser_set_state(stuser, MRPC_DONE); in mrpc_complete_cmd()
241 stuser->return_code = 0; in mrpc_complete_cmd()
243 if (stuser->status != SWITCHTEC_MRPC_STATUS_DONE && in mrpc_complete_cmd()
244 stuser->status != SWITCHTEC_MRPC_STATUS_ERROR) in mrpc_complete_cmd()
248 stuser->return_code = stdev->dma_mrpc->rtn_code; in mrpc_complete_cmd()
250 stuser->return_code = ioread32(&stdev->mmio_mrpc->ret_value); in mrpc_complete_cmd()
251 if (stuser->return_code != 0) in mrpc_complete_cmd()
255 memcpy(stuser->data, &stdev->dma_mrpc->data, in mrpc_complete_cmd()
256 stuser->read_len); in mrpc_complete_cmd()
258 memcpy_fromio(stuser->data, &stdev->mmio_mrpc->output_data, in mrpc_complete_cmd()
259 stuser->read_len); in mrpc_complete_cmd()
281 struct switchtec_user *stuser; in mrpc_error_complete_cmd() local
286 stuser = list_entry(stdev->mrpc_queue.next, in mrpc_error_complete_cmd()
289 stuser_set_state(stuser, MRPC_IO_ERROR); in mrpc_error_complete_cmd()
469 struct switchtec_user *stuser; in switchtec_dev_open() local
473 stuser = stuser_create(stdev); in switchtec_dev_open()
474 if (IS_ERR(stuser)) in switchtec_dev_open()
475 return PTR_ERR(stuser); in switchtec_dev_open()
477 filp->private_data = stuser; in switchtec_dev_open()
480 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); in switchtec_dev_open()
487 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_release() local
489 stuser_put(stuser); in switchtec_dev_release()
510 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_write() local
511 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_write()
514 if (size < sizeof(stuser->cmd) || in switchtec_dev_write()
515 size > sizeof(stuser->cmd) + sizeof(stuser->data)) in switchtec_dev_write()
518 stuser->data_len = size - sizeof(stuser->cmd); in switchtec_dev_write()
524 if (stuser->state != MRPC_IDLE) { in switchtec_dev_write()
529 rc = copy_from_user(&stuser->cmd, data, sizeof(stuser->cmd)); in switchtec_dev_write()
534 if (((MRPC_CMD_ID(stuser->cmd) == MRPC_GAS_WRITE) || in switchtec_dev_write()
535 (MRPC_CMD_ID(stuser->cmd) == MRPC_GAS_READ)) && in switchtec_dev_write()
541 data += sizeof(stuser->cmd); in switchtec_dev_write()
542 rc = copy_from_user(&stuser->data, data, size - sizeof(stuser->cmd)); in switchtec_dev_write()
548 rc = mrpc_queue_cmd(stuser); in switchtec_dev_write()
562 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_read() local
563 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_read()
566 if (size < sizeof(stuser->cmd) || in switchtec_dev_read()
567 size > sizeof(stuser->cmd) + sizeof(stuser->data)) in switchtec_dev_read()
574 if (stuser->state == MRPC_IDLE) { in switchtec_dev_read()
579 stuser->read_len = size - sizeof(stuser->return_code); in switchtec_dev_read()
584 if (!stuser->cmd_done) in switchtec_dev_read()
587 rc = wait_event_interruptible(stuser->cmd_comp, in switchtec_dev_read()
588 stuser->cmd_done); in switchtec_dev_read()
597 if (stuser->state == MRPC_IO_ERROR) { in switchtec_dev_read()
602 if (stuser->state != MRPC_DONE) { in switchtec_dev_read()
607 rc = copy_to_user(data, &stuser->return_code, in switchtec_dev_read()
608 sizeof(stuser->return_code)); in switchtec_dev_read()
614 data += sizeof(stuser->return_code); in switchtec_dev_read()
615 rc = copy_to_user(data, &stuser->data, in switchtec_dev_read()
616 size - sizeof(stuser->return_code)); in switchtec_dev_read()
622 stuser_set_state(stuser, MRPC_IDLE); in switchtec_dev_read()
626 if (stuser->status == SWITCHTEC_MRPC_STATUS_DONE || in switchtec_dev_read()
627 stuser->status == SWITCHTEC_MRPC_STATUS_ERROR) in switchtec_dev_read()
629 else if (stuser->status == SWITCHTEC_MRPC_STATUS_INTERRUPTED) in switchtec_dev_read()
637 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_poll() local
638 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_poll()
641 poll_wait(filp, &stuser->cmd_comp, wait); in switchtec_dev_poll()
649 if (stuser->cmd_done) in switchtec_dev_poll()
652 if (stuser->event_cnt != atomic_read(&stdev->event_cnt)) in switchtec_dev_poll()
889 struct switchtec_user *stuser, in ioctl_event_summary() argument
921 stuser->event_cnt = atomic_read(&stdev->event_cnt); in ioctl_event_summary()
1205 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_ioctl() local
1206 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_ioctl()
1222 rc = ioctl_event_summary(stdev, stuser, argp, in switchtec_dev_ioctl()
1235 rc = ioctl_event_summary(stdev, stuser, argp, in switchtec_dev_ioctl()
1317 struct switchtec_user *stuser, *tmpuser; in stdev_kill() local
1328 list_for_each_entry_safe(stuser, tmpuser, &stdev->mrpc_queue, list) { in stdev_kill()
1329 stuser->cmd_done = true; in stdev_kill()
1330 wake_up_interruptible(&stuser->cmd_comp); in stdev_kill()
1331 list_del_init(&stuser->list); in stdev_kill()
1332 stuser_put(stuser); in stdev_kill()