1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */ 3 4 #ifndef _NET_CNSS_GENETLINK_H_ 5 #define _NET_CNSS_GENETLINK_H_ 6 7 #include <linux/types.h> 8 9 #define CLD80211_MAX_COMMANDS 40 10 #define CLD80211_MAX_NL_DATA 4096 11 12 /** 13 * enum cld80211_attr - Driver/Application embeds the data in nlmsg with the 14 * help of below attributes 15 * 16 * @CLD80211_ATTR_VENDOR_DATA: Embed all other attributes in this nested 17 * attribute. 18 * @CLD80211_ATTR_DATA: Embed complete data in this attribute 19 * @CLD80211_ATTR_META_DATA: Embed meta data for above data. This will help 20 * wlan driver to peek into request message packet without opening up definition 21 * of complete request message. 22 * @CLD80211_ATTR_CMD: cld80211 vendor subcommand in this attribute 23 * @CLD80211_ATTR_CMD_TAG_DATA: cld80211 vendor subcommand data is present in 24 * this attribute. It is a nested attribute with sub attributes of specified 25 * vendor sub command. 26 * @CLD80211_ATTR_IFINDEX: Embed Intrerface indx in this attribute 27 * 28 * Any new message in future can be added as another attribute 29 */ 30 enum cld80211_attr { 31 CLD80211_ATTR_VENDOR_DATA = 1, 32 CLD80211_ATTR_DATA, 33 CLD80211_ATTR_META_DATA, 34 CLD80211_ATTR_CMD, 35 CLD80211_ATTR_CMD_TAG_DATA, 36 CLD80211_ATTR_IFINDEX, 37 /* add new attributes above here */ 38 39 __CLD80211_ATTR_AFTER_LAST, 40 CLD80211_ATTR_MAX = __CLD80211_ATTR_AFTER_LAST - 1 41 }; 42 43 /** 44 * enum cld80211_multicast_groups - List of multicast groups supported 45 * 46 * @CLD80211_MCGRP_SVC_MSGS: WLAN service message will be sent to this group. 47 * Ex: Status ind messages 48 * @CLD80211_MCGRP_HOST_LOGS: All logging related messages from driver will be 49 * sent to this multicast group 50 * @CLD80211_MCGRP_FW_LOGS: Firmware logging messages will be sent to this group 51 * @CLD80211_MCGRP_PER_PKT_STATS: Messages related packet stats debugging infra 52 * will be sent to this group 53 * @CLD80211_MCGRP_DIAG_EVENTS: Driver/Firmware status logging diag events will 54 * be sent to this group 55 * @CLD80211_MCGRP_FATAL_EVENTS: Any fatal message generated in driver/firmware 56 * will be sent to this group 57 * @CLD80211_MCGRP_OEM_MSGS: All OEM message will be sent to this group 58 * Ex: LOWI messages 59 */ 60 enum cld80211_multicast_groups { 61 CLD80211_MCGRP_SVC_MSGS, 62 CLD80211_MCGRP_HOST_LOGS, 63 CLD80211_MCGRP_FW_LOGS, 64 CLD80211_MCGRP_PER_PKT_STATS, 65 CLD80211_MCGRP_DIAG_EVENTS, 66 CLD80211_MCGRP_FATAL_EVENTS, 67 CLD80211_MCGRP_OEM_MSGS, 68 }; 69 70 /** 71 * typedef cld80211_cb - Callback to be called when an nlmsg is received with 72 * the registered cmd_id command from userspace 73 * @data: Payload of the message to be sent to driver 74 * @data_len: Length of the payload 75 * @cb_ctx: callback context to be returned to driver when the callback 76 * is called 77 * @pid: process id of the sender 78 */ 79 typedef void (*cld80211_cb)(const void *data, int data_len, 80 void *cb_ctx, int pid); 81 82 /** 83 * register_cld_cmd_cb() - Allows cld driver to register for commands with 84 * callback 85 * @cmd_id: Command to be registered. Valid range [1, CLD80211_MAX_COMMANDS] 86 * @cb: Callback to be called when an nlmsg is received with cmd_id command 87 * from userspace 88 * @cb_ctx: context provided by driver; Send this as cb_ctx of func() 89 * to driver 90 */ 91 int register_cld_cmd_cb(u8 cmd_id, cld80211_cb cb, void *cb_ctx); 92 93 /** 94 * deregister_cld_cmd_cb() - Allows cld driver to de-register the command it 95 * has already registered 96 * @cmd_id: Command to be deregistered. 97 */ 98 int deregister_cld_cmd_cb(u8 cmd_id); 99 100 /** 101 * cld80211_get_genl_family() - Returns current netlink family context 102 */ 103 struct genl_family *cld80211_get_genl_family(void); 104 105 #endif /* _NET_CNSS_GENETLINK_H_ */ 106