From d740a8e73cdba61d761beed43be83d03f10ddbfa Mon Sep 17 00:00:00 2001 From: zhanghongyu Date: Mon, 5 Aug 2024 18:02:36 +0800 Subject: [PATCH] netdev_lowerhalf: add reclaim callback in netdev_ops_s Signed-off-by: zhanghongyu --- drivers/net/netdev_upperhalf.c | 11 ++++++++++- include/nuttx/net/netdev_lowerhalf.h | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/net/netdev_upperhalf.c b/drivers/net/netdev_upperhalf.c index 898a70bee14..18858893dcf 100644 --- a/drivers/net/netdev_upperhalf.c +++ b/drivers/net/netdev_upperhalf.c @@ -264,7 +264,16 @@ netdev_upper_alloc(FAR struct netdev_lowerhalf_s *dev) static inline bool netdev_upper_can_tx(FAR struct netdev_upperhalf_s *upper) { - return netdev_lower_quota_load(upper->lower, NETPKT_TX) > 0; + FAR struct netdev_lowerhalf_s *lower = upper->lower; + int quota = netdev_lower_quota_load(lower, NETPKT_TX); + + if (quota <= 0 && lower->ops->reclaim) + { + lower->ops->reclaim(lower); + quota = netdev_lower_quota_load(lower, NETPKT_TX); + } + + return quota > 0; } /**************************************************************************** diff --git a/include/nuttx/net/netdev_lowerhalf.h b/include/nuttx/net/netdev_lowerhalf.h index bfe4089225c..c13157d823c 100644 --- a/include/nuttx/net/netdev_lowerhalf.h +++ b/include/nuttx/net/netdev_lowerhalf.h @@ -168,6 +168,10 @@ struct netdev_ops_s int (*ioctl)(FAR struct netdev_lowerhalf_s *dev, int cmd, unsigned long arg); #endif + + /* reclaim - try to reclaim packets sent by netdev. */ + + void (*reclaim)(FAR struct netdev_lowerhalf_s *dev); }; /* This structure is a set of wireless handlers, leave unsupported operations