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