Bluetooth: Add MGMT tizen_handlers and TIZEN_OP_BASE_CODE. 60/306560/1
authorh.sandeep <h.sandeep@samsung.com>
Thu, 1 Sep 2016 06:30:57 +0000 (12:00 +0530)
committerJaehoon Chung <jh80.chung@samsung.com>
Fri, 23 Feb 2024 02:12:05 +0000 (11:12 +0900)
Added the basic skeleton code for tizen_mgmt_handlers and
mgmt_tizen.h header file.

Change-Id: Icf56610f76cfcae9565b2a44634fa72f3f8a7c91
Signed-off-by: h.sandeep <h.sandeep@samsung.com>
Signed-off-by: Amit Purwar <amit.purwar@samsung.com>
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
include/net/bluetooth/hci_core.h
include/net/bluetooth/mgmt_tizen.h [new file with mode: 0644]
net/bluetooth/hci_sock.c
net/bluetooth/mgmt.c

index b83cfcf666648d4ebb2136b0e3757898bac238d7..5bc8fded5551d418981210b6a84985d27e3d440c 100644 (file)
@@ -2171,6 +2171,10 @@ struct hci_mgmt_chan {
        unsigned short channel;
        size_t handler_count;
        const struct hci_mgmt_handler *handlers;
+#ifdef TIZEN_BT
+       size_t tizen_handler_count;
+       const struct hci_mgmt_handler *tizen_handlers;
+#endif
        void (*hdev_init) (struct sock *sk, struct hci_dev *hdev);
 };
 
diff --git a/include/net/bluetooth/mgmt_tizen.h b/include/net/bluetooth/mgmt_tizen.h
new file mode 100644 (file)
index 0000000..6bad3c9
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (c) 2015-2016 Samsung Electronics Co., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __MGMT_TIZEN_H
+#define __MGMT_TIZEN_H
+
+#define TIZEN_OP_CODE_BASE     0xff00
+#define TIZEN_EV_BASE          0xff00
+
+#endif /* __MGMT_TIZEN_H */
index 3e7cd330d731aceda4e4ea11d60269cb3d0216ad..aa53f7d69f1267687e89534251ad6db4dc192c4d 100644 (file)
@@ -33,6 +33,9 @@
 #include <net/bluetooth/hci_core.h>
 #include <net/bluetooth/hci_mon.h>
 #include <net/bluetooth/mgmt.h>
+#ifdef TIZEN_BT
+#include <net/bluetooth/mgmt_tizen.h>
+#endif
 
 #include "mgmt_util.h"
 
@@ -1636,6 +1639,22 @@ static int hci_mgmt_cmd(struct hci_mgmt_chan *chan, struct sock *sk,
                goto done;
        }
 
+#ifdef TIZEN_BT
+   if (opcode >= TIZEN_OP_CODE_BASE) {
+       u16 tizen_opcode_index = opcode - TIZEN_OP_CODE_BASE;
+       if (tizen_opcode_index >= chan->tizen_handler_count ||
+           chan->tizen_handlers[tizen_opcode_index].func == NULL) {
+           BT_DBG("Unknown op %u", opcode);
+           err = mgmt_cmd_status(sk, index, opcode,
+                         MGMT_STATUS_UNKNOWN_COMMAND);
+           goto done;
+       }
+
+       handler = &chan->tizen_handlers[tizen_opcode_index];
+
+   } else {
+#endif
+
        if (chan->channel == HCI_CHANNEL_CONTROL) {
                struct sk_buff *cmd;
 
@@ -1658,6 +1677,9 @@ static int hci_mgmt_cmd(struct hci_mgmt_chan *chan, struct sock *sk,
        }
 
        handler = &chan->handlers[opcode];
+#ifdef TIZEN_BT
+       }
+#endif
 
        if (!hci_sock_test_flag(sk, HCI_SOCK_TRUSTED) &&
            !(handler->flags & HCI_MGMT_UNTRUSTED)) {
index 9dd815b6603feb69461937f5d83986bff532ed0c..a877d447616f575521f0476aeb3637163403d43e 100644 (file)
@@ -32,6 +32,9 @@
 #include <net/bluetooth/hci_sock.h>
 #include <net/bluetooth/l2cap.h>
 #include <net/bluetooth/mgmt.h>
+#ifdef TIZEN_BT
+#include <net/bluetooth/mgmt_tizen.h>
+#endif
 
 #include "hci_request.h"
 #include "smp.h"
@@ -9375,6 +9378,12 @@ static const struct hci_mgmt_handler mgmt_handlers[] = {
        { mesh_send_cancel,        MGMT_MESH_SEND_CANCEL_SIZE },
 };
 
+#ifdef TIZEN_BT
+static const struct hci_mgmt_handler tizen_mgmt_handlers[] = {
+       { NULL }, /* 0x0000 (no command) */
+};
+#endif
+
 void mgmt_index_added(struct hci_dev *hdev)
 {
        struct mgmt_ev_ext_index ev;
@@ -10538,6 +10547,10 @@ static struct hci_mgmt_chan chan = {
        .channel        = HCI_CHANNEL_CONTROL,
        .handler_count  = ARRAY_SIZE(mgmt_handlers),
        .handlers       = mgmt_handlers,
+#ifdef TIZEN_BT
+       .tizen_handler_count    = ARRAY_SIZE(tizen_mgmt_handlers),
+       .tizen_handlers = tizen_mgmt_handlers,
+#endif
        .hdev_init      = mgmt_init_hdev,
 };