From 453ae0c8389a13b56de39365e74255774bf2437e Mon Sep 17 00:00:00 2001 From: David Alonso de la Torre Date: Thu, 15 Aug 2024 16:06:17 +0200 Subject: [PATCH 1/4] drivers: wifi: eswifi: Use peer_addr as addr in eswifi_socket_recvfrom --- drivers/wifi/eswifi/eswifi_socket_offload.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/wifi/eswifi/eswifi_socket_offload.c b/drivers/wifi/eswifi/eswifi_socket_offload.c index 8775062e2c4ff..58a542a1121b8 100644 --- a/drivers/wifi/eswifi/eswifi_socket_offload.c +++ b/drivers/wifi/eswifi/eswifi_socket_offload.c @@ -391,8 +391,9 @@ static ssize_t eswifi_socket_recvfrom(void *obj, void *buf, size_t len, socklen_t *fromlen) { if (fromlen != NULL) { - errno = EOPNOTSUPP; - return -1; + int sock = OBJ_TO_SD(obj); + struct eswifi_off_socket *socket = &eswifi->socket[sock]; + *from = socket->peer_addr; } return eswifi_socket_recv(obj, buf, len, flags); From 47b63c31b46e835eb766227ecf5f954ff4001aa1 Mon Sep 17 00:00:00 2001 From: David Alonso de la Torre Date: Thu, 15 Aug 2024 16:07:23 +0200 Subject: [PATCH 2/4] drivers: wifi: eswifi: Add ZSOCK_POLLOUT revent in eswifi_socket_poll to enable send operation. --- drivers/wifi/eswifi/eswifi_socket_offload.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/wifi/eswifi/eswifi_socket_offload.c b/drivers/wifi/eswifi/eswifi_socket_offload.c index 58a542a1121b8..a2e18b49cd5aa 100644 --- a/drivers/wifi/eswifi/eswifi_socket_offload.c +++ b/drivers/wifi/eswifi/eswifi_socket_offload.c @@ -14,6 +14,7 @@ LOG_MODULE_DECLARE(LOG_MODULE_NAME); #include #include +#include #include #include @@ -515,6 +516,10 @@ static int eswifi_socket_poll(struct zsock_pollfd *fds, int nfds, int msecs) return -1; } + if ((fds[0].events & ZSOCK_POLLOUT)) { + fds[0].revents = ZSOCK_POLLOUT; + } + if (!k_fifo_is_empty(&socket->fifo)) { goto done; } From 679ad39558dd6caf976e0e7af95665f5052af7a3 Mon Sep 17 00:00:00 2001 From: David Alonso de la Torre Date: Thu, 15 Aug 2024 16:18:57 +0200 Subject: [PATCH 3/4] drivers: wifi: eswifi: Ignore F_GETFL and F_SETFL ioctl calls. --- drivers/wifi/eswifi/eswifi_socket_offload.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/wifi/eswifi/eswifi_socket_offload.c b/drivers/wifi/eswifi/eswifi_socket_offload.c index a2e18b49cd5aa..ace65d3dfc281 100644 --- a/drivers/wifi/eswifi/eswifi_socket_offload.c +++ b/drivers/wifi/eswifi/eswifi_socket_offload.c @@ -610,6 +610,12 @@ int eswifi_socket_create(int family, int type, int proto) static int eswifi_socket_ioctl(void *obj, unsigned int request, va_list args) { switch (request) { + case F_GETFL: + LOG_WRN("F_GETFL not supported, returning flags as 0"); + return 0; + case F_SETFL: + LOG_WRN("F_SETFL not supported, ignoring flags"); + return 0; case ZFD_IOCTL_POLL_PREPARE: return -EXDEV; From 0843da1e7204c3f9ee66de71d8891b8360201143 Mon Sep 17 00:00:00 2001 From: David Alonso de la Torre Date: Fri, 23 Aug 2024 18:01:44 +0200 Subject: [PATCH 4/4] drivers: wifi: eswifi: Return 0 in poll if read times out. --- drivers/wifi/eswifi/eswifi_socket_offload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/wifi/eswifi/eswifi_socket_offload.c b/drivers/wifi/eswifi/eswifi_socket_offload.c index ace65d3dfc281..42d02a882f159 100644 --- a/drivers/wifi/eswifi/eswifi_socket_offload.c +++ b/drivers/wifi/eswifi/eswifi_socket_offload.c @@ -533,7 +533,7 @@ static int eswifi_socket_poll(struct zsock_pollfd *fds, int nfds, int msecs) ret = k_sem_take(&socket->read_sem, timeout); if (ret) { errno = ETIMEDOUT; - return -1; + return 0; } done: