blob: ede95051e9c470fe62465079df787a7cb49522ec [file] [log] [blame]
/* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _NET_CNSS_GENETLINK_H_
#define _NET_CNSS_GENETLINK_H_
#define CLD80211_MAX_COMMANDS 40
#define CLD80211_MAX_NL_DATA 4096
/**
* enum cld80211_attr - Driver/Application embeds the data in nlmsg with the
* help of below attributes
*
* @CLD80211_ATTR_VENDOR_DATA: Embed all other attributes in this nested
* attribute.
* @CLD80211_ATTR_DATA: Embed complete data in this attribute
* @CLD80211_ATTR_META_DATA: Embed meta data for above data. This will help
* wlan driver to peek into request message packet without opening up definition
* of complete request message.
* @CLD80211_ATTR_CMD: cld80211 vendor subcommand in this attribute
* @CLD80211_ATTR_CMD_TAG_DATA: cld80211 vendor subcommand data is present in
* this attribute. It is a nested attribute with sub attributes of specified
* vendor sub command.
*
* Any new message in future can be added as another attribute
*/
enum cld80211_attr {
CLD80211_ATTR_VENDOR_DATA = 1,
CLD80211_ATTR_DATA,
CLD80211_ATTR_META_DATA,
CLD80211_ATTR_CMD,
CLD80211_ATTR_CMD_TAG_DATA,
/* add new attributes above here */
__CLD80211_ATTR_AFTER_LAST,
CLD80211_ATTR_MAX = __CLD80211_ATTR_AFTER_LAST - 1
};
/**
* enum cld80211_multicast_groups - List of multicast groups supported
*
* @CLD80211_MCGRP_SVC_MSGS: WLAN service message will be sent to this group.
* Ex: Status ind messages
* @CLD80211_MCGRP_HOST_LOGS: All logging related messages from driver will be
* sent to this multicast group
* @CLD80211_MCGRP_FW_LOGS: Firmware logging messages will be sent to this group
* @CLD80211_MCGRP_PER_PKT_STATS: Messages related packet stats debugging infra
* will be sent to this group
* @CLD80211_MCGRP_DIAG_EVENTS: Driver/Firmware status logging diag events will
* be sent to this group
* @CLD80211_MCGRP_FATAL_EVENTS: Any fatal message generated in driver/firmware
* will be sent to this group
* @CLD80211_MCGRP_OEM_MSGS: All OEM message will be sent to this group
* Ex: LOWI messages
*/
enum cld80211_multicast_groups {
CLD80211_MCGRP_SVC_MSGS,
CLD80211_MCGRP_HOST_LOGS,
CLD80211_MCGRP_FW_LOGS,
CLD80211_MCGRP_PER_PKT_STATS,
CLD80211_MCGRP_DIAG_EVENTS,
CLD80211_MCGRP_FATAL_EVENTS,
CLD80211_MCGRP_OEM_MSGS,
};
/**
* typedef cld80211_cb - Callback to be called when an nlmsg is received with
* the registered cmd_id command from userspace
* @data: Payload of the message to be sent to driver
* @data_len: Length of the payload
* @cb_ctx: callback context to be returned to driver when the callback
* is called
* @pid: process id of the sender
*/
typedef void (*cld80211_cb)(const void *data, int data_len,
void *cb_ctx, int pid);
/**
* register_cld_cmd_cb() - Allows cld driver to register for commands with
* callback
* @cmd_id: Command to be registered. Valid range [1, CLD80211_MAX_COMMANDS]
* @cb: Callback to be called when an nlmsg is received with cmd_id command
* from userspace
* @cb_ctx: context provided by driver; Send this as cb_ctx of func()
* to driver
*/
int register_cld_cmd_cb(u8 cmd_id, cld80211_cb cb, void *cb_ctx);
/**
* deregister_cld_cmd_cb() - Allows cld driver to de-register the command it
* has already registered
* @cmd_id: Command to be deregistered.
*/
int deregister_cld_cmd_cb(u8 cmd_id);
/**
* cld80211_get_genl_family() - Returns current netlink family context
*/
struct genl_family *cld80211_get_genl_family(void);
#endif /* _NET_CNSS_GENETLINK_H_ */