Lines Matching refs:stuser

85 	struct switchtec_user *stuser;  in stuser_create()  local
87 stuser = kzalloc(sizeof(*stuser), GFP_KERNEL); in stuser_create()
88 if (!stuser) in stuser_create()
92 stuser->stdev = stdev; in stuser_create()
93 kref_init(&stuser->kref); in stuser_create()
94 INIT_LIST_HEAD(&stuser->list); in stuser_create()
95 init_waitqueue_head(&stuser->cmd_comp); in stuser_create()
96 stuser->event_cnt = atomic_read(&stdev->event_cnt); in stuser_create()
98 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); in stuser_create()
100 return stuser; in stuser_create()
105 struct switchtec_user *stuser; in stuser_free() local
107 stuser = container_of(kref, struct switchtec_user, kref); in stuser_free()
109 dev_dbg(&stuser->stdev->dev, "%s: %p\n", __func__, stuser); in stuser_free()
111 put_device(&stuser->stdev->dev); in stuser_free()
112 kfree(stuser); in stuser_free()
115 static void stuser_put(struct switchtec_user *stuser) in stuser_put() argument
117 kref_put(&stuser->kref, stuser_free); in stuser_put()
120 static void stuser_set_state(struct switchtec_user *stuser, in stuser_set_state() argument
133 stuser->state = state; in stuser_set_state()
135 dev_dbg(&stuser->stdev->dev, "stuser state %p -> %s", in stuser_set_state()
136 stuser, state_names[state]); in stuser_set_state()
158 struct switchtec_user *stuser; in mrpc_cmd_submit() local
166 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, in mrpc_cmd_submit()
174 stuser_set_state(stuser, MRPC_RUNNING); in mrpc_cmd_submit()
177 stuser->data, stuser->data_len); in mrpc_cmd_submit()
179 iowrite32(stuser->cmd, &stdev->mmio_mrpc->cmd); in mrpc_cmd_submit()
185 static int mrpc_queue_cmd(struct switchtec_user *stuser) in mrpc_queue_cmd() argument
189 struct switchtec_dev *stdev = stuser->stdev; in mrpc_queue_cmd()
191 kref_get(&stuser->kref); in mrpc_queue_cmd()
192 stuser->read_len = sizeof(stuser->data); in mrpc_queue_cmd()
193 stuser_set_state(stuser, MRPC_QUEUED); in mrpc_queue_cmd()
194 stuser->cmd_done = false; in mrpc_queue_cmd()
195 list_add_tail(&stuser->list, &stdev->mrpc_queue); in mrpc_queue_cmd()
206 struct switchtec_user *stuser = list_entry(stdev->mrpc_queue.next, in mrpc_cleanup_cmd() local
209 stuser->cmd_done = true; in mrpc_cleanup_cmd()
210 wake_up_interruptible(&stuser->cmd_comp); in mrpc_cleanup_cmd()
211 list_del_init(&stuser->list); in mrpc_cleanup_cmd()
212 stuser_put(stuser); in mrpc_cleanup_cmd()
222 struct switchtec_user *stuser; in mrpc_complete_cmd() local
227 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, in mrpc_complete_cmd()
231 stuser->status = stdev->dma_mrpc->status; in mrpc_complete_cmd()
233 stuser->status = ioread32(&stdev->mmio_mrpc->status); in mrpc_complete_cmd()
235 if (stuser->status == SWITCHTEC_MRPC_STATUS_INPROGRESS) in mrpc_complete_cmd()
238 stuser_set_state(stuser, MRPC_DONE); in mrpc_complete_cmd()
239 stuser->return_code = 0; in mrpc_complete_cmd()
241 if (stuser->status != SWITCHTEC_MRPC_STATUS_DONE && in mrpc_complete_cmd()
242 stuser->status != SWITCHTEC_MRPC_STATUS_ERROR) in mrpc_complete_cmd()
246 stuser->return_code = stdev->dma_mrpc->rtn_code; in mrpc_complete_cmd()
248 stuser->return_code = ioread32(&stdev->mmio_mrpc->ret_value); in mrpc_complete_cmd()
249 if (stuser->return_code != 0) in mrpc_complete_cmd()
253 memcpy(stuser->data, &stdev->dma_mrpc->data, in mrpc_complete_cmd()
254 stuser->read_len); in mrpc_complete_cmd()
256 memcpy_fromio(stuser->data, &stdev->mmio_mrpc->output_data, in mrpc_complete_cmd()
257 stuser->read_len); in mrpc_complete_cmd()
280 struct switchtec_user *stuser; in mrpc_error_complete_cmd() local
285 stuser = list_entry(stdev->mrpc_queue.next, in mrpc_error_complete_cmd()
288 stuser_set_state(stuser, MRPC_IO_ERROR); in mrpc_error_complete_cmd()
468 struct switchtec_user *stuser; in switchtec_dev_open() local
472 stuser = stuser_create(stdev); in switchtec_dev_open()
473 if (IS_ERR(stuser)) in switchtec_dev_open()
474 return PTR_ERR(stuser); in switchtec_dev_open()
476 filp->private_data = stuser; in switchtec_dev_open()
479 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); in switchtec_dev_open()
486 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_release() local
488 stuser_put(stuser); in switchtec_dev_release()
509 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_write() local
510 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_write()
513 if (size < sizeof(stuser->cmd) || in switchtec_dev_write()
514 size > sizeof(stuser->cmd) + sizeof(stuser->data)) in switchtec_dev_write()
517 stuser->data_len = size - sizeof(stuser->cmd); in switchtec_dev_write()
523 if (stuser->state != MRPC_IDLE) { in switchtec_dev_write()
528 rc = copy_from_user(&stuser->cmd, data, sizeof(stuser->cmd)); in switchtec_dev_write()
533 if (((MRPC_CMD_ID(stuser->cmd) == MRPC_GAS_WRITE) || in switchtec_dev_write()
534 (MRPC_CMD_ID(stuser->cmd) == MRPC_GAS_READ)) && in switchtec_dev_write()
540 data += sizeof(stuser->cmd); in switchtec_dev_write()
541 rc = copy_from_user(&stuser->data, data, size - sizeof(stuser->cmd)); in switchtec_dev_write()
547 rc = mrpc_queue_cmd(stuser); in switchtec_dev_write()
561 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_read() local
562 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_read()
565 if (size < sizeof(stuser->cmd) || in switchtec_dev_read()
566 size > sizeof(stuser->cmd) + sizeof(stuser->data)) in switchtec_dev_read()
573 if (stuser->state == MRPC_IDLE) { in switchtec_dev_read()
578 stuser->read_len = size - sizeof(stuser->return_code); in switchtec_dev_read()
583 if (!stuser->cmd_done) in switchtec_dev_read()
586 rc = wait_event_interruptible(stuser->cmd_comp, in switchtec_dev_read()
587 stuser->cmd_done); in switchtec_dev_read()
596 if (stuser->state == MRPC_IO_ERROR) { in switchtec_dev_read()
601 if (stuser->state != MRPC_DONE) { in switchtec_dev_read()
606 rc = copy_to_user(data, &stuser->return_code, in switchtec_dev_read()
607 sizeof(stuser->return_code)); in switchtec_dev_read()
613 data += sizeof(stuser->return_code); in switchtec_dev_read()
614 rc = copy_to_user(data, &stuser->data, in switchtec_dev_read()
615 size - sizeof(stuser->return_code)); in switchtec_dev_read()
621 stuser_set_state(stuser, MRPC_IDLE); in switchtec_dev_read()
625 if (stuser->status == SWITCHTEC_MRPC_STATUS_DONE || in switchtec_dev_read()
626 stuser->status == SWITCHTEC_MRPC_STATUS_ERROR) in switchtec_dev_read()
628 else if (stuser->status == SWITCHTEC_MRPC_STATUS_INTERRUPTED) in switchtec_dev_read()
636 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_poll() local
637 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_poll()
640 poll_wait(filp, &stuser->cmd_comp, wait); in switchtec_dev_poll()
648 if (stuser->cmd_done) in switchtec_dev_poll()
651 if (stuser->event_cnt != atomic_read(&stdev->event_cnt)) in switchtec_dev_poll()
888 struct switchtec_user *stuser, in ioctl_event_summary() argument
920 stuser->event_cnt = atomic_read(&stdev->event_cnt); in ioctl_event_summary()
1204 struct switchtec_user *stuser = filp->private_data; in switchtec_dev_ioctl() local
1205 struct switchtec_dev *stdev = stuser->stdev; in switchtec_dev_ioctl()
1221 rc = ioctl_event_summary(stdev, stuser, argp, in switchtec_dev_ioctl()
1234 rc = ioctl_event_summary(stdev, stuser, argp, in switchtec_dev_ioctl()
1323 struct switchtec_user *stuser, *tmpuser; in stdev_kill() local
1334 list_for_each_entry_safe(stuser, tmpuser, &stdev->mrpc_queue, list) { in stdev_kill()
1335 stuser->cmd_done = true; in stdev_kill()
1336 wake_up_interruptible(&stuser->cmd_comp); in stdev_kill()
1337 list_del_init(&stuser->list); in stdev_kill()
1338 stuser_put(stuser); in stdev_kill()