297 lines
13 KiB
C
Executable file
297 lines
13 KiB
C
Executable file
/****************************************************************************
|
|
*
|
|
* Copyright (c) 2014 - 2018 Samsung Electronics Co., Ltd. All rights reserved
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __HIP4_SAMPLER_H__
|
|
#define __HIP4_SAMPLER_H__
|
|
|
|
#include <linux/proc_fs.h>
|
|
#include <linux/version.h>
|
|
#include <linux/seq_file.h>
|
|
#include <net/tcp.h>
|
|
|
|
#include "dev.h"
|
|
|
|
#define HIP4_SAMPLER_SIGNAL_CTRLTX 0x20
|
|
#define HIP4_SAMPLER_SIGNAL_CTRLRX 0x21
|
|
#define HIP4_SAMPLER_THROUG 0x22
|
|
#define HIP4_SAMPLER_THROUG_K 0x23
|
|
#define HIP4_SAMPLER_THROUG_M 0x24
|
|
#define HIP4_SAMPLER_STOP_Q 0x25
|
|
#define HIP4_SAMPLER_START_Q 0x26
|
|
#define HIP4_SAMPLER_QREF 0x27
|
|
#define HIP4_SAMPLER_PEER 0x29
|
|
#define HIP4_SAMPLER_BOT_RX 0x2a
|
|
#define HIP4_SAMPLER_BOT_TX 0x2b
|
|
#define HIP4_SAMPLER_BOT_ADD 0x2c
|
|
#define HIP4_SAMPLER_BOT_REMOVE 0x2d
|
|
#define HIP4_SAMPLER_BOT_STOP_Q 0x2e
|
|
#define HIP4_SAMPLER_BOT_START_Q 0x2f
|
|
#define HIP4_SAMPLER_BOT_QMOD_RX 0x30
|
|
#define HIP4_SAMPLER_BOT_QMOD_TX 0x31
|
|
#define HIP4_SAMPLER_BOT_QMOD_STOP 0x32
|
|
#define HIP4_SAMPLER_BOT_QMOD_START 0x33
|
|
#define HIP4_SAMPLER_PKT_TX 0x40
|
|
#define HIP4_SAMPLER_PKT_TX_HIP4 0x41
|
|
#define HIP4_SAMPLER_PKT_TX_FB 0x42
|
|
#define HIP4_SAMPLER_SUSPEND 0x50
|
|
#define HIP4_SAMPLER_RESUME 0x51
|
|
|
|
#define HIP4_SAMPLER_TCP_SYN 0x60
|
|
#define HIP4_SAMPLER_TCP_FIN 0x61
|
|
#define HIP4_SAMPLER_TCP_DATA 0x62
|
|
#define HIP4_SAMPLER_TCP_ACK 0x63
|
|
#define HIP4_SAMPLER_TCP_RWND 0x64
|
|
#define HIP4_SAMPLER_TCP_CWND 0x65
|
|
#define HIP4_SAMPLER_TCP_SEND_BUF 0x66
|
|
#define HIP4_SAMPLER_TCP_DATA_IN 0x67
|
|
#define HIP4_SAMPLER_TCP_ACK_IN 0x68
|
|
|
|
#define HIP4_SAMPLER_MBULK 0xaa
|
|
#define HIP4_SAMPLER_QFULL 0xbb
|
|
#define HIP4_SAMPLER_MFULL 0xcc
|
|
#define HIP4_SAMPLER_INT 0xdd
|
|
#define HIP4_SAMPLER_INT_OUT 0xee
|
|
#define HIP4_SAMPLER_INT_BH 0xde
|
|
#define HIP4_SAMPLER_INT_OUT_BH 0xef
|
|
#define HIP4_SAMPLER_RESET 0xff
|
|
|
|
#define SCSC_HIP4_INTERFACES 1
|
|
|
|
#define SCSC_HIP4_STREAM_CH 1
|
|
#define SCSC_HIP4_OFFLINE_CH SCSC_HIP4_STREAM_CH
|
|
|
|
#if (SCSC_HIP4_OFFLINE_CH != SCSC_HIP4_STREAM_CH)
|
|
#error "SCSC_HIP4_STREAM_CH has to be equal to SCSC_HIP4_OFFLINE_CH"
|
|
#endif
|
|
|
|
#define SCSC_HIP4_DEBUG_INTERFACES ((SCSC_HIP4_INTERFACES) * (SCSC_HIP4_STREAM_CH + SCSC_HIP4_OFFLINE_CH))
|
|
|
|
struct scsc_mx;
|
|
|
|
void hip4_sampler_create(struct slsi_dev *sdev, struct scsc_mx *mx);
|
|
void hip4_sampler_destroy(struct slsi_dev *sdev, struct scsc_mx *mx);
|
|
|
|
/* Register hip4 instance with the logger */
|
|
/* return char device minor associated with the maxwell instance*/
|
|
int hip4_sampler_register_hip(struct scsc_mx *mx);
|
|
|
|
void hip4_sampler_update_record(u32 minor, u8 param1, u8 param2, u8 param3, u8 param4, u32 param5);
|
|
void hip4_sampler_tcp_decode(struct slsi_dev *sdev, struct net_device *dev, u8 *frame, bool from_ba);
|
|
|
|
#ifdef CONFIG_SCSC_WLAN_HIP4_PROFILING
|
|
#define SCSC_HIP4_SAMPLER_Q(minor, q, idx_rw, value, rw) \
|
|
hip4_sampler_update_record(minor, q, idx_rw, value, rw, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_QREF(minor, ref, q) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_QREF, (ref & 0xff0000) >> 16, (ref & 0xff00) >> 8, (ref & 0xf0) | q, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_SIGNAL_CTRLTX(minor, bytes16_h, bytes16_l) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_SIGNAL_CTRLTX, 0, bytes16_h, bytes16_l, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_SIGNAL_CTRLRX(minor, bytes16_h, bytes16_l) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_SIGNAL_CTRLRX, 0, bytes16_h, bytes16_l, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_DECODE(sdev, dev, frame, from_ba) \
|
|
hip4_sampler_tcp_decode(sdev, dev, frame, from_ba)
|
|
|
|
#define SCSC_HIP4_SAMPLER_THROUG(minor, rx_tx, bytes16_h, bytes16_l) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_THROUG, rx_tx, bytes16_h, bytes16_l, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_THROUG_K(minor, rx_tx, bytes16_h, bytes16_l) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_THROUG_K, rx_tx, bytes16_h, bytes16_l, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_THROUG_M(minor, rx_tx, bytes16_h, bytes16_l) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_THROUG_M, rx_tx, bytes16_h, bytes16_l, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_STOP_Q(minor, vif_id) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_STOP_Q, 0, 0, vif_id, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_START_Q(minor, vif_id) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_START_Q, 0, 0, vif_id, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_MBULK(minor, bytes16_h, bytes16_l, clas) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_MBULK, clas, bytes16_h, bytes16_l, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_QFULL(minor, q) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_QFULL, 0, 0, q, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_MFULL(minor) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_MFULL, 0, 0, 0, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_INT(minor, id) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_INT, 0, 0, id, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_INT_OUT(minor, id) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_INT_OUT, 0, 0, id, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_INT_BH(minor, id) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_INT_BH, 0, 0, id, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_INT_OUT_BH(minor, id) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_INT_OUT_BH, 0, 0, id, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_RESET(minor) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_RESET, 0, 0, 0, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_VIF_PEER(minor, tx, vif, peer_index) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_PEER, tx, vif, peer_index, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_RX(minor, vif, peer_index, pri, smod_and_scod) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_RX, vif, peer_index, pri, smod_and_scod)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_TX(minor, vif, peer_index, pri, smod_and_scod) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_TX, vif, peer_index, pri, smod_and_scod)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_ADD(minor, vif, peer_index, addr_0_to_3) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_ADD, vif, peer_index, 0, addr_0_to_3)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_REMOVE(minor, vif, peer_index) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_REMOVE, vif, peer_index, 0, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_START_Q(minor, vif, peer_index) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_START_Q, vif, peer_index, 0, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_STOP_Q(minor, vif, peer_index) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_STOP_Q, vif, peer_index, 0, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_QMOD_RX(minor, vif, peer_index, pri, qmod_and_qcod) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_QMOD_RX, vif, peer_index, pri, qmod_and_qcod)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_QMOD_TX(minor, vif, peer_index, pri, qmod_and_qcod) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_QMOD_TX, vif, peer_index, pri, qmod_and_qcod)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_QMOD_START(minor, vif, peer_index, priority) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_QMOD_START, vif, peer_index, priority, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_BOT_QMOD_STOP(minor, vif, peer_index, priority) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_BOT_QMOD_STOP, vif, peer_index, priority, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_PKT_TX(minor, host_tag) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_PKT_TX, 0, (host_tag >> 8) & 0xff, host_tag & 0xff, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_PKT_TX_HIP4(minor, host_tag) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_PKT_TX_HIP4, 0, (host_tag >> 8) & 0xff, host_tag & 0xff, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_PKT_TX_FB(minor, host_tag) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_PKT_TX_FB, 0, (host_tag >> 8) & 0xff, host_tag & 0xff, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_SUSPEND(minor) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_SUSPEND, 0, 0, 0, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_RESUME(minor) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_RESUME, 0, 0, 0, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_SYN(minor, id, mss) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_SYN, id, 0, 0, mss)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_FIN(minor, id) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_FIN, id, 0, 0, 0)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_DATA(minor, id, seq_num) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_DATA, id, 0, 0, seq_num)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_ACK(minor, id, ack_num) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_ACK, id, 0, 0, ack_num)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_DATA_IN(minor, id, seq_num) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_DATA_IN, id, 0, 0, seq_num)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_ACK_IN(minor, id, ack_num) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_ACK_IN, id, 0, 0, ack_num)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_RWND(minor, id, rwnd) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_RWND, id, 0, 0, rwnd)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_CWND(minor, id, cwnd) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_CWND, id, 0, 0, cwnd)
|
|
|
|
#define SCSC_HIP4_SAMPLER_TCP_SEND_BUF(minor, id, send_buff_size) \
|
|
hip4_sampler_update_record(minor, HIP4_SAMPLER_TCP_SEND_BUF, id, 0, 0, send_buff_size)
|
|
|
|
#else
|
|
#define SCSC_HIP4_SAMPLER_Q(minor, q, idx_rw, value, rw)
|
|
#define SCSC_HIP4_SAMPLER_QREF(minor, ref, q)
|
|
#define SCSC_HIP4_SAMPLER_SIGNAL_CTRLTX(minor, bytes16_h, bytes16_l)
|
|
#define SCSC_HIP4_SAMPLER_SIGNAL_CTRLRX(minor, bytes16_h, bytes16_l)
|
|
#define SCSC_HIP4_SAMPLER_TPUT(minor, rx_tx, payload)
|
|
#define SCSC_HIP4_SAMPLER_THROUG(minor, bytes16_h, bytes16_l)
|
|
#define SCSC_HIP4_SAMPLER_THROUG_K(minor, bytes16_h, bytes16_l)
|
|
#define SCSC_HIP4_SAMPLER_THROUG_M(minor, bytes16_h, bytes16_l)
|
|
#define SCSC_HIP4_SAMPLER_MBULK(minor, bytes16_h, bytes16_l, clas)
|
|
#define SCSC_HIP4_SAMPLER_QFULL(minor, q)
|
|
#define SCSC_HIP4_SAMPLER_MFULL(minor)
|
|
#define SCSC_HIP4_SAMPLER_INT(minor, id)
|
|
#define SCSC_HIP4_SAMPLER_INT_BH(minor, id)
|
|
#define SCSC_HIP4_SAMPLER_INT_OUT(minor, id)
|
|
#define SCSC_HIP4_SAMPLER_INT_OUT_BH(minor, id)
|
|
#define SCSC_HIP4_SAMPLER_RESET(minor)
|
|
#define SCSC_HIP4_SAMPLER_VIF_PEER(minor, tx, vif, peer_index)
|
|
#define SCSC_HIP4_SAMPLER_BOT_RX(minor, vif, peer_index, pri, smod_and_scod)
|
|
#define SCSC_HIP4_SAMPLER_BOT_TX(minor, vif, peer_index, pri, smod_and_scod)
|
|
#define SCSC_HIP4_SAMPLER_BOT_ADD(minor, vif, peer_index, addr_0_to_3)
|
|
#define SCSC_HIP4_SAMPLER_BOT_REMOVE(minor, vif, peer_index)
|
|
#define SCSC_HIP4_SAMPLER_BOT_START_Q(minor, vif, peer_index)
|
|
#define SCSC_HIP4_SAMPLER_BOT_STOP_Q(minor, vif, peer_index)
|
|
#define SCSC_HIP4_SAMPLER_BOT_QMOD_RX(minor, vif, peer_index, pri, qmod_and_qcod)
|
|
#define SCSC_HIP4_SAMPLER_BOT_QMOD_TX(minor, vif, peer_index, pri, qmod_and_qcod)
|
|
#define SCSC_HIP4_SAMPLER_BOT_QMOD_START(minor, vif, peer_index, priority)
|
|
#define SCSC_HIP4_SAMPLER_BOT_QMOD_STOP(minor, vif, peer_index, priority)
|
|
#define SCSC_HIP4_SAMPLER_PKT_TX(minor, host_tag)
|
|
#define SCSC_HIP4_SAMPLER_PKT_TX_HIP4(minor, host_tag)
|
|
#define SCSC_HIP4_SAMPLER_PKT_TX_FB(minor, host_tag)
|
|
#define SCSC_HIP4_SAMPLER_SUSPEND(minor)
|
|
#define SCSC_HIP4_SAMPLER_RESUME(minor)
|
|
#define SCSC_HIP4_SAMPLER_TCP_SYN(minor, id, mss)
|
|
#define SCSC_HIP4_SAMPLER_TCP_FIN(minor, id)
|
|
#define SCSC_HIP4_SAMPLER_TCP_DATA(minor, id, seq_num)
|
|
#define SCSC_HIP4_SAMPLER_TCP_ACK(minor, id, ack_num)
|
|
#define SCSC_HIP4_SAMPLER_TCP_DATA_IN(minor, id, seq_num)
|
|
#define SCSC_HIP4_SAMPLER_TCP_ACK_IN(minor, id, ack_num)
|
|
#define SCSC_HIP4_SAMPLER_TCP_RWND(minor, id, rwnd)
|
|
#define SCSC_HIP4_SAMPLER_TCP_CWND(minor, id, cwnd)
|
|
#define SCSC_HIP4_SAMPLER_TCP_SEND_BUF(minor, id, send_buff_size)
|
|
#define SCSC_HIP4_SAMPLER_TCP_DECODE(sdev, dev, frame, from_ba)
|
|
#endif /* CONFIG_SCSC_WLAN_HIP4_PROFILING */
|
|
|
|
/* HIP4 sample headers */
|
|
#define SCSC_HIP4_SAMPLER_HEADER_VERSION_MAJOR 0x01
|
|
#define SCSC_HIP4_SAMPLER_HEADER_VERSION_MINOR 0x01
|
|
|
|
#define SCSC_HIP4_SAMPLER_RESERVED (1)
|
|
#define SCSC_HIP4_SAMPLER_RESERVED_2 (10)
|
|
|
|
#define SCSC_HIP4_SAMPLER_MAGIC "HIP4"
|
|
|
|
enum scsc_hip4_sampler_type {
|
|
SCSC_HIP4_SAMPLER_TYPE_PRE_TCP = 0,
|
|
SCSC_HIP4_SAMPLER_TYPE_TCP,
|
|
/* Add others */
|
|
};
|
|
|
|
enum scsc_hip4_sampler_platform {
|
|
SCSC_HIP4_SAMPLER_EXYNOS9610 = 1,
|
|
SCSC_HIP4_SAMPLER_EXYNOS9630,
|
|
SCSC_HIP4_SAMPLER_EXYNOS7885,
|
|
SCSC_HIP4_SAMPLER_EXYNOS8825,
|
|
/* Add others */
|
|
SCSC_HIP4_SAMPLER_UNDEF = 0xffff
|
|
};
|
|
|
|
/* HIP4 sampler HEADER v 0.0*/
|
|
struct scsc_hip4_sampler_header {
|
|
char magic[4]; /* HIP4 */
|
|
u16 offset_data;
|
|
u8 version_major; /* Major version */
|
|
u8 version_minor; /* Minor version */
|
|
u16 platform; /* Enumeration containing platform information */
|
|
u8 sample_type; /* Enumerate type of HIP4 sample captured */
|
|
u8 reserved[SCSC_HIP4_SAMPLER_RESERVED];
|
|
u16 hip4_status; /* hip4 sampling settings */
|
|
u64 num_samples; /* For file validation in post-processing */
|
|
u8 reserved_2[SCSC_HIP4_SAMPLER_RESERVED_2];
|
|
} __packed;
|
|
|
|
#endif /* __HIP4_SAMPLER_H__ */
|