This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 6ec74d8d364d7bfb6a4bdef6dc80efc1cebe769b
Author: Xiang Xiao <xiaoxi...@xiaomi.com>
AuthorDate: Sun Oct 2 03:34:17 2022 +0800

    bluetooth: Forward ioctl to btuart lowerhalf driver
    
    Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com>
---
 drivers/wireless/bluetooth/bt_uart.c          | 20 ++++++++++++++++++++
 drivers/wireless/bluetooth/bt_uart.h          |  2 ++
 drivers/wireless/bluetooth/bt_uart_bcm4343x.c |  1 +
 drivers/wireless/bluetooth/bt_uart_cc2564.c   |  1 +
 drivers/wireless/bluetooth/bt_uart_generic.c  |  1 +
 include/nuttx/wireless/bluetooth/bt_uart.h    |  5 +++++
 6 files changed, 30 insertions(+)

diff --git a/drivers/wireless/bluetooth/bt_uart.c 
b/drivers/wireless/bluetooth/bt_uart.c
index a50f1b0498..b56be92dbd 100644
--- a/drivers/wireless/bluetooth/bt_uart.c
+++ b/drivers/wireless/bluetooth/bt_uart.c
@@ -306,3 +306,23 @@ void btuart_close(FAR struct bt_driver_s *dev)
 
   lower->rxattach(lower, NULL, NULL);
 }
+
+int btuart_ioctl(FAR struct bt_driver_s *dev,
+                 int cmd, unsigned long arg)
+{
+  FAR struct btuart_upperhalf_s *upper;
+  FAR const struct btuart_lowerhalf_s *lower;
+
+  upper = (FAR struct btuart_upperhalf_s *)dev;
+  DEBUGASSERT(upper != NULL && upper->lower != NULL);
+  lower = upper->lower;
+
+  if (lower->ioctl)
+    {
+      return lower->ioctl(lower, cmd, arg);
+    }
+  else
+    {
+      return -ENOTTY;
+    }
+}
diff --git a/drivers/wireless/bluetooth/bt_uart.h 
b/drivers/wireless/bluetooth/bt_uart.h
index 1abaa507ef..9aeb32c297 100644
--- a/drivers/wireless/bluetooth/bt_uart.h
+++ b/drivers/wireless/bluetooth/bt_uart.h
@@ -92,5 +92,7 @@ int btuart_send(FAR struct bt_driver_s *dev,
                 FAR void *data, size_t len);
 int btuart_open(FAR struct bt_driver_s *dev);
 void btuart_close(FAR struct bt_driver_s *dev);
+int btuart_ioctl(FAR struct bt_driver_s *dev,
+                 int cmd, unsigned long arg);
 
 #endif /* __DRIVER_WIRELESS_BLUETOOTH_BT_UART_H */
diff --git a/drivers/wireless/bluetooth/bt_uart_bcm4343x.c 
b/drivers/wireless/bluetooth/bt_uart_bcm4343x.c
index b19252c89b..620b05884b 100644
--- a/drivers/wireless/bluetooth/bt_uart_bcm4343x.c
+++ b/drivers/wireless/bluetooth/bt_uart_bcm4343x.c
@@ -424,6 +424,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s 
*lower)
   upper->dev.open = btuart_open;
   upper->dev.send = btuart_send;
   upper->dev.close = btuart_close;
+  upper->dev.ioctl = btuart_ioctl;
   upper->lower = lower;
 
   /* Load firmware */
diff --git a/drivers/wireless/bluetooth/bt_uart_cc2564.c 
b/drivers/wireless/bluetooth/bt_uart_cc2564.c
index ff39218d54..aa2c1da688 100644
--- a/drivers/wireless/bluetooth/bt_uart_cc2564.c
+++ b/drivers/wireless/bluetooth/bt_uart_cc2564.c
@@ -190,6 +190,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s 
*lower)
   upper->dev.open         = btuart_open;
   upper->dev.send         = btuart_send;
   upper->dev.close        = btuart_close;
+  upper->dev.ioctl        = btuart_ioctl;
   upper->lower            = lower;
 
   /* Load firmware */
diff --git a/drivers/wireless/bluetooth/bt_uart_generic.c 
b/drivers/wireless/bluetooth/bt_uart_generic.c
index d194360d36..6b462cf2ff 100644
--- a/drivers/wireless/bluetooth/bt_uart_generic.c
+++ b/drivers/wireless/bluetooth/bt_uart_generic.c
@@ -84,6 +84,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s 
*lower)
   upper->dev.open         = btuart_open;
   upper->dev.send         = btuart_send;
   upper->dev.close        = btuart_close;
+  upper->dev.ioctl        = btuart_ioctl;
   upper->lower            = lower;
 
   /* And register the driver with the network and the Bluetooth stack. */
diff --git a/include/nuttx/wireless/bluetooth/bt_uart.h 
b/include/nuttx/wireless/bluetooth/bt_uart.h
index 98bdda78ee..bd92e478a3 100644
--- a/include/nuttx/wireless/bluetooth/bt_uart.h
+++ b/include/nuttx/wireless/bluetooth/bt_uart.h
@@ -137,6 +137,11 @@ struct btuart_lowerhalf_s
   /* Flush/drain all buffered RX data */
 
   CODE ssize_t (*rxdrain)(FAR const struct btuart_lowerhalf_s *lower);
+
+  /* Lower-half logic may support platform-specific ioctl commands */
+
+  CODE int (*ioctl)(FAR const struct btuart_lowerhalf_s *lower,
+                    int cmd, unsigned long arg);
 };
 
 /****************************************************************************

Reply via email to