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)
|
||||
{
|
||||
case FIONSPACE:
|
||||
case FIONREAD:
|
||||
return sizeof(int);
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include <nuttx/mm/circbuf.h>
|
||||
#include <nuttx/rptun/openamp.h>
|
||||
#include <nuttx/semaphore.h>
|
||||
#include <nuttx/fs/ioctl.h>
|
||||
|
||||
#include <netinet/in.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,
|
||||
FAR struct msghdr *msg, int flags);
|
||||
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
|
||||
@ -163,7 +166,8 @@ const struct sock_intf_s g_rpmsg_sockif =
|
||||
rpmsg_socket_poll, /* si_poll */
|
||||
rpmsg_socket_sendmsg, /* si_sendmsg */
|
||||
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);
|
||||
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