Lines Matching refs:stuser

71 	struct switchtec_user *stuser;  in stuser_create()  local
73 stuser = kzalloc(sizeof(*stuser), GFP_KERNEL); in stuser_create()
74 if (!stuser) in stuser_create()
78 stuser->stdev = stdev; in stuser_create()
79 kref_init(&stuser->kref); in stuser_create()
80 INIT_LIST_HEAD(&stuser->list); in stuser_create()
81 init_waitqueue_head(&stuser->cmd_comp); in stuser_create()
82 stuser->event_cnt = atomic_read(&stdev->event_cnt); in stuser_create()
84 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); in stuser_create()
86 return stuser; in stuser_create()
91 struct switchtec_user *stuser; in stuser_free() local
93 stuser = container_of(kref, struct switchtec_user, kref); in stuser_free()
95 dev_dbg(&stuser->stdev->dev, "%s: %p\n", __func__, stuser); in stuser_free()
97 put_device(&stuser->stdev->dev); in stuser_free()
98 kfree(stuser); in stuser_free()
101 static void stuser_put(struct switchtec_user *stuser) in stuser_put() argument
103 kref_put(&stuser->kref, stuser_free); in stuser_put()
106 static void stuser_set_state(struct switchtec_user *stuser, in stuser_set_state() argument
118 stuser->state = state; in stuser_set_state()
120 dev_dbg(&stuser->stdev->dev, "stuser state %p -> %s", in stuser_set_state()
121 stuser, state_names[state]); in stuser_set_state()
143 struct switchtec_user *stuser; in mrpc_cmd_submit() local
151 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, in mrpc_cmd_submit()
159 stuser_set_state(stuser, MRPC_RUNNING); in mrpc_cmd_submit()
162 stuser->data, stuser->data_len); in mrpc_cmd_submit()
164 iowrite32(stuser->cmd, &stdev->mmio_mrpc->cmd); in mrpc_cmd_submit()
170 static int mrpc_queue_cmd(struct switchtec_user *stuser) in mrpc_queue_cmd() argument
174 struct switchtec_dev *stdev = stuser->stdev; in mrpc_queue_cmd()
176 kref_get(&stuser->kref); in mrpc_queue_cmd()
177 stuser->read_len = sizeof(stuser->data); in mrpc_queue_cmd()
178 stuser_set_state(stuser, MRPC_QUEUED); in mrpc_queue_cmd()
179 stuser->cmd_done = false; in mrpc_queue_cmd()
180 list_add_tail(&stuser->list, &stdev->mrpc_queue); in mrpc_queue_cmd()
190 struct switchtec_user *stuser; in mrpc_complete_cmd() local
195 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, in mrpc_complete_cmd()
199 stuser->status = stdev->dma_mrpc->status; in mrpc_complete_cmd()
201 stuser->status = ioread32(&stdev->mmio_mrpc->status); in mrpc_complete_cmd()
203 if (stuser->status == SWITCHTEC_MRPC_STATUS_INPROGRESS) in mrpc_complete_cmd()
206 stuser_set_state(stuser, MRPC_DONE); in mrpc_complete_cmd()
207 stuser->return_code = 0; in mrpc_complete_cmd()
209 if (stuser->status != SWITCHTEC_MRPC_STATUS_DONE) in mrpc_complete_cmd()
213 stuser->return_code = stdev->dma_mrpc->rtn_code; in mrpc_complete_cmd()
215 stuser->return_code = ioread32(&stdev->mmio_mrpc->ret_value); in mrpc_complete_cmd()
216 if (stuser->return_code != 0) in mrpc_complete_cmd()
220 memcpy(stuser->data, &stdev->dma_mrpc->data, in mrpc_complete_cmd()
221 stuser->read_len); in mrpc_complete_cmd()
223 memcpy_fromio(stuser->data, &stdev->mmio_mrpc->output_data, in mrpc_complete_cmd()
224 stuser->read_len); in mrpc_complete_cmd()
226 stuser->cmd_done = true; in mrpc_complete_cmd()
227 wake_up_interruptible(&stuser->cmd_comp); in mrpc_complete_cmd()
228 list_del_init(&stuser->list); in mrpc_complete_cmd()
229 stuser_put(stuser); in mrpc_complete_cmd()
419 struct switchtec_user *stuser; in switchtec_dev_open() local
423 stuser = stuser_create(stdev); in switchtec_dev_open()
424 if (IS_ERR(stuser)) in switchtec_dev_open()
425 return PTR_ERR(stuser); in switchtec_dev_open()
427 filp->private_data = stuser; in switchtec_dev_open()
430 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); in switchtec_dev_open()
437 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_release() local
439 stuser_put(stuser); in switchtec_dev_release()
460 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_write() local
461 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_write()
464 if (size < sizeof(stuser->cmd) || in switchtec_dev_write()
465 size > sizeof(stuser->cmd) + sizeof(stuser->data)) in switchtec_dev_write()
468 stuser->data_len = size - sizeof(stuser->cmd); in switchtec_dev_write()
474 if (stuser->state != MRPC_IDLE) { in switchtec_dev_write()
479 rc = copy_from_user(&stuser->cmd, data, sizeof(stuser->cmd)); in switchtec_dev_write()
484 if (((MRPC_CMD_ID(stuser->cmd) == MRPC_GAS_WRITE) || in switchtec_dev_write()
485 (MRPC_CMD_ID(stuser->cmd) == MRPC_GAS_READ)) && in switchtec_dev_write()
491 data += sizeof(stuser->cmd); in switchtec_dev_write()
492 rc = copy_from_user(&stuser->data, data, size - sizeof(stuser->cmd)); in switchtec_dev_write()
498 rc = mrpc_queue_cmd(stuser); in switchtec_dev_write()
512 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_read() local
513 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_read()
516 if (size < sizeof(stuser->cmd) || in switchtec_dev_read()
517 size > sizeof(stuser->cmd) + sizeof(stuser->data)) in switchtec_dev_read()
524 if (stuser->state == MRPC_IDLE) { in switchtec_dev_read()
529 stuser->read_len = size - sizeof(stuser->return_code); in switchtec_dev_read()
534 if (!stuser->cmd_done) in switchtec_dev_read()
537 rc = wait_event_interruptible(stuser->cmd_comp, in switchtec_dev_read()
538 stuser->cmd_done); in switchtec_dev_read()
547 if (stuser->state != MRPC_DONE) { in switchtec_dev_read()
552 rc = copy_to_user(data, &stuser->return_code, in switchtec_dev_read()
553 sizeof(stuser->return_code)); in switchtec_dev_read()
559 data += sizeof(stuser->return_code); in switchtec_dev_read()
560 rc = copy_to_user(data, &stuser->data, in switchtec_dev_read()
561 size - sizeof(stuser->return_code)); in switchtec_dev_read()
567 stuser_set_state(stuser, MRPC_IDLE); in switchtec_dev_read()
572 if (stuser->status == SWITCHTEC_MRPC_STATUS_DONE) in switchtec_dev_read()
574 else if (stuser->status == SWITCHTEC_MRPC_STATUS_INTERRUPTED) in switchtec_dev_read()
582 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_poll() local
583 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_poll()
586 poll_wait(filp, &stuser->cmd_comp, wait); in switchtec_dev_poll()
594 if (stuser->cmd_done) in switchtec_dev_poll()
597 if (stuser->event_cnt != atomic_read(&stdev->event_cnt)) in switchtec_dev_poll()
834 struct switchtec_user *stuser, in ioctl_event_summary() argument
866 stuser->event_cnt = atomic_read(&stdev->event_cnt); in ioctl_event_summary()
1147 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_ioctl() local
1148 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_ioctl()
1164 rc = ioctl_event_summary(stdev, stuser, argp, in switchtec_dev_ioctl()
1177 rc = ioctl_event_summary(stdev, stuser, argp, in switchtec_dev_ioctl()
1266 struct switchtec_user *stuser, *tmpuser; in stdev_kill() local
1277 list_for_each_entry_safe(stuser, tmpuser, &stdev->mrpc_queue, list) { in stdev_kill()
1278 stuser->cmd_done = true; in stdev_kill()
1279 wake_up_interruptible(&stuser->cmd_comp); in stdev_kill()
1280 list_del_init(&stuser->list); in stdev_kill()
1281 stuser_put(stuser); in stdev_kill()