socket_rpmsg: add socket_rpmsg_ioctl support
Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
parent
aab5d3d390
commit
4a5d577483
@ -1544,6 +1544,7 @@ ssize_t net_ioctl_arglen(int cmd)
|
|||||||
{
|
{
|
||||||
switch (cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
|
case FIONSPACE:
|
||||||
case FIONREAD:
|
case FIONREAD:
|
||||||
return sizeof(int);
|
return sizeof(int);
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include <nuttx/mm/circbuf.h>
|
#include <nuttx/mm/circbuf.h>
|
||||||
#include <nuttx/rptun/openamp.h>
|
#include <nuttx/rptun/openamp.h>
|
||||||
#include <nuttx/semaphore.h>
|
#include <nuttx/semaphore.h>
|
||||||
|
#include <nuttx/fs/ioctl.h>
|
||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netpacket/rpmsg.h>
|
#include <netpacket/rpmsg.h>
|
||||||
@ -144,6 +145,8 @@ static ssize_t rpmsg_socket_sendmsg(FAR struct socket *psock,
|
|||||||
static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock,
|
static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock,
|
||||||
FAR struct msghdr *msg, int flags);
|
FAR struct msghdr *msg, int flags);
|
||||||
static int rpmsg_socket_close(FAR struct socket *psock);
|
static int rpmsg_socket_close(FAR struct socket *psock);
|
||||||
|
static int rpmsg_socket_ioctl(FAR struct socket *psock, int cmd,
|
||||||
|
FAR void *arg, size_t arglen);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Data
|
* Public Data
|
||||||
@ -163,7 +166,8 @@ const struct sock_intf_s g_rpmsg_sockif =
|
|||||||
rpmsg_socket_poll, /* si_poll */
|
rpmsg_socket_poll, /* si_poll */
|
||||||
rpmsg_socket_sendmsg, /* si_sendmsg */
|
rpmsg_socket_sendmsg, /* si_sendmsg */
|
||||||
rpmsg_socket_recvmsg, /* si_recvmsg */
|
rpmsg_socket_recvmsg, /* si_recvmsg */
|
||||||
rpmsg_socket_close /* si_close */
|
rpmsg_socket_close, /* si_close */
|
||||||
|
rpmsg_socket_ioctl, /* si_ioctl */
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -1277,3 +1281,39 @@ static int rpmsg_socket_close(FAR struct socket *psock)
|
|||||||
rpmsg_socket_free(conn);
|
rpmsg_socket_free(conn);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int rpmsg_socket_ioctl(FAR struct socket *psock, int cmd,
|
||||||
|
FAR void *arg, size_t arglen)
|
||||||
|
{
|
||||||
|
FAR struct rpmsg_socket_conn_s *conn = psock->s_conn;
|
||||||
|
int ret = OK;
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case FIONREAD:
|
||||||
|
if (arglen != sizeof(int))
|
||||||
|
{
|
||||||
|
ret = -EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(FAR int *)((uintptr_t)arg) = circbuf_used(&conn->recvbuf);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case FIONSPACE:
|
||||||
|
if (arglen != sizeof(int))
|
||||||
|
{
|
||||||
|
ret = -EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(FAR int *)((uintptr_t)arg) = rpmsg_socket_get_space(conn);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = -ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user