MCPcopy Create free account
hub / github.com/apache/nuttx / rpmsgdev_ioctl

Function rpmsgdev_ioctl

drivers/misc/rpmsgdev.c:651–702  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

649 ****************************************************************************/
650
651static int rpmsgdev_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
652{
653 FAR struct rpmsgdev_s *dev;
654 FAR struct rpmsgdev_priv_s *priv;
655 FAR struct rpmsgdev_ioctl_s *msg;
656 uint32_t space;
657 ssize_t arglen;
658 size_t msglen;
659 int ret;
660
661 /* Recover our private data from the struct file instance */
662
663 dev = filep->f_inode->i_private;
664 priv = filep->f_priv;
665 DEBUGASSERT(dev != NULL && priv != NULL);
666
667 /* Call our internal routine to perform the ioctl */
668
669 arglen = rpmsgdev_ioctl_arglen(cmd, arg);
670 if (arglen < 0)
671 {
672 return arglen;
673 }
674
675 msglen = sizeof(*msg) + arglen - 1;
676
677 msg = rpmsgdev_get_tx_payload_buffer(dev, &space);
678 if (msg == NULL)
679 {
680 return -ENOMEM;
681 }
682
683 msg->filep = priv->filep;
684 msg->request = cmd;
685 msg->arg = arg;
686 msg->arglen = arglen;
687
688 if (arglen > 0)
689 {
690 memcpy(msg->buf, (FAR void *)(uintptr_t)arg, arglen);
691 }
692
693 ret = rpmsgdev_send_recv(dev, RPMSGDEV_IOCTL, false, &msg->header,
694 msglen, arglen > 0 ? (FAR void *)arg : NULL);
695 if (cmd == FIONBIO && ret >= 0)
696 {
697 FAR int *nonblock = (FAR int *)(uintptr_t)arg;
698 priv->nonblock = *nonblock;
699 }
700
701 return ret;
702}
703
704/****************************************************************************
705 * Name: rpmsgdev_poll

Callers

nothing calls this directly

Calls 4

rpmsgdev_ioctl_arglenFunction · 0.85
rpmsgdev_send_recvFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected