Lines Matching refs:stuser

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