blob: 3af6dc1993c06cac3ef4f60cc5aa0c92fc666562 [file] [log] [blame]
/**
Copyright (c) 2008 - 2013 Quantenna Communications Inc
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
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
#ifndef _QDRV_PKTLOGGER_H
#define _QDRV_PKTLOGGER_H
#include "qdrv_mac.h"
#include "qdrv_wlan.h"
#ifndef BIT
#define BIT(x) (1 << (x))
#endif
#define QDRV_NETLINK_PKTLOGGER 30
#define PKTLOGGER_DEFAULT_DST_IP 0xFFFFFFFF
#define PKTLOGGER_DEFAULT_SRC_IP 0x01010102
/* Arbitrary unused UDP port numbers */
#define PKTLOGGER_UDP_SRC_PORT 6601
#define PKTLOGGER_UDP_DST_PORT 6602
#define PKTLOGGER_IP_MORE_FRAG_BIT 13
#define PKTLOGGER_IP_TTL 64
#define PKTLOGGER_IP_HEADER_LEN 20
#define QDRV_PKTLOGGER_INTERVAL_DFLT_NONE 0
#define QDRV_PKTLOGGER_INTERVAL_DFLT_STATS 1
#define QDRV_PKTLOGGER_INTERVAL_DFLT_SYSMSG 5
#define QDRV_PKTLOGGER_INTERVAL_DFLT_MEM 1
#define QDRV_PKTLOGGER_INTERVAL_DFLT_RATE 1
#define QDRV_PKTLOGGER_INTERVAL_DFLT_VSP 1000
#define QDRV_PKTLOGGER_INTERVAL_DFLT_PHY_STATS 2
#define QDRV_PKTLOGGER_INTERVAL_DFLT_DSP_STATS 1
#define QDRV_PKTLOGGER_INTERVAL_DFLT_FLUSH_DATA 1
#define QDRV_PKTLOGGER_QUEUE_LEN_MAX 32
/*
* Collection of Ethernet device statistics causes severe performance degradation.
*/
#define QDRV_NETDEBUG_ETH_DEV_STATS_ENABLED 0
enum qdrv_netdbg_rectype_e {
QDRV_NETDEBUG_TYPE_STATS = 1,
QDRV_NETDEBUG_TYPE_EVENT = 2,
QDRV_NETDEBUG_TYPE_RADAR = 3,
QDRV_NETDEBUG_TYPE_TXBF = 4,
QDRV_NETDEBUG_TYPE_IWEVENT = 5,
QDRV_NETDEBUG_TYPE_SYSMSG = 6,
QDRV_NETDEBUG_TYPE_MEM = 7,
QDRV_NETDEBUG_TYPE_RATE = 8,
QDRV_NETDEBUG_TYPE_VSP = 9,
QDRV_NETDEBUG_TYPE_PHY_STATS = 10,
QDRV_NETDEBUG_TYPE_DSP_STATS = 11,
QDRV_NETDEBUG_TYPE_CORE_DUMP = 12,
QDRV_NETDEBUG_TYPE_FLUSH_DATA = 20,
QDRV_NETDEBUG_TYPE_MAX,
QDRV_NETDEBUG_TYPE_PKTLOGGER = 100,
};
struct qdrv_pktlogger_types_tbl {
int id;
char *name;
int (*start)(struct qdrv_wlan *qw);
void (*stop)(struct qdrv_wlan *qw);
uint32_t interval;
uint16_t struct_bsize;
uint16_t struct_vsize;
uint32_t history;
};
struct qdrv_pktlogger_data {
void *data;
uint32_t len;
STAILQ_ENTRY(qdrv_pktlogger_data) entries;
};
__be32 qdrv_dev_ipaddr_get(struct net_device *dev);
struct qdrv_pktlogger_types_tbl *qdrv_pktlogger_get_tbls_by_id(int id);
int qdrv_pktlogger_init(struct qdrv_wlan *qw);
void qdrv_pktlogger_exit(struct qdrv_wlan *qw);
int qdrv_pktlogger_set(struct qdrv_wlan *qw, const char *param, const char *value);
void qdrv_pktlogger_show(struct qdrv_wlan *qw);
int qdrv_pktlogger_start_or_stop(struct qdrv_wlan *qw, const char *type, int start,
uint32_t interval);
void qdrv_pktlogger_send(void *data, uint32_t len);
void *qdrv_pktlogger_alloc_buffer(char *description, int data_len);
void qdrv_pktlogger_free_buffer(void *data_buffer);
void qdrv_pktlogger_hdr_init(struct qdrv_wlan *qw, struct qdrv_pktlogger_hdr *hdr, int rec_type, int stats_len);
#endif /* _QDRV_PKTLOGGER_ */