diff mbox series

[RFC,v1,117/256] cl8k: add netlink.c

Message ID 20210617160223.160998-118-viktor.barna@celeno.com (mailing list archive)
State RFC
Delegated to: Kalle Valo
Headers show
Series wireless: cl8k driver for Celeno IEEE 802.11ax devices | expand

Commit Message

Viktor Barna June 17, 2021, 4 p.m. UTC
From: Viktor Barna <viktor.barna@celeno.com>

(Part of the split. Please, take a look at the cover letter for more
details).

Signed-off-by: Viktor Barna <viktor.barna@celeno.com>
---
 drivers/net/wireless/celeno/cl8k/netlink.c | 41 ++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 drivers/net/wireless/celeno/cl8k/netlink.c

--
2.30.0
diff mbox series

Patch

diff --git a/drivers/net/wireless/celeno/cl8k/netlink.c b/drivers/net/wireless/celeno/cl8k/netlink.c
new file mode 100644
index 000000000000..cc03575704ad
--- /dev/null
+++ b/drivers/net/wireless/celeno/cl8k/netlink.c
@@ -0,0 +1,41 @@ 
+// SPDX-License-Identifier: MIT
+/* Copyright(c) 2019-2021, Celeno Communications Ltd. */
+
+#include <linux/kernel.h>
+#include <linux/version.h>
+#include <linux/socket.h>
+#include <linux/rtnetlink.h>
+#include <net/cfg80211.h>
+
+#include "netlink.h"
+
+void cl_netlink_send_async(struct cl_hw *cl_hw, struct cl_nl_event *event)
+{
+       struct sk_buff *skb = NULL;
+       int msg_len;
+
+       msg_len = sizeof(*event);
+       skb = cfg80211_vendor_event_alloc(cl_hw->hw->wiphy, NULL, msg_len,
+                                         CL_VENDOR_EVENT_ASYNC, GFP_ATOMIC);
+       if (!skb) {
+               cl_dbg_err(cl_hw, "vendor_event_alloc(len:%u) failed\n", msg_len);
+               return;
+       }
+
+       if (nla_put(skb, CL_VENDOR_ATTR_DATA, msg_len, event)) {
+               kfree_skb(skb);
+               return;
+       }
+
+       cfg80211_vendor_event(skb, GFP_ATOMIC);
+}
+
+void cl_netlink_send_event_co_locate_update(struct cl_hw *cl_hw)
+{
+       struct cl_nl_event event = {0};
+
+       event.tcv_idx = cl_hw->idx;
+       event.event_id = CL_NL_EVENT_ID_CO_LOCATE_UPDATE;
+
+       cl_netlink_send_async(cl_hw, &event);
+}