2025-05-10 21:58:58 +08:00

199 lines
5.4 KiB
C

/******************************************************************************
*
* Copyright(c) 2019 Realtek Corporation.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License 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 _TRX_TEST_H_
#define _TRX_TEST_H_
#ifdef CONFIG_PHL_TEST_SUITE
#define MAX_TEST_TXREQ_NUM 256
#define MAX_TEST_PAYLOAD_NUM MAX_TEST_TXREQ_NUM
#define MAX_TEST_RXREQ_NUM 256
#define MAX_TEST_PAYLOAD_SIZE 2308
enum test_mode {
TEST_MODE_PHL_TX_RING_TEST = 1,
TEST_MODE_PHL_RX_RING_TEST = 2,
TEST_MODE_PHL_RING_LOOPBACK = 3,
TEST_MODE_PHL_PCIE_LOOPBACK = 4,
TEST_MODE_HAL_TX_TEST = 5,
TEST_MODE_HAL_RX_TEST = 6,
TEST_MODE_HAL_WP_REPORT_PARSE = 7,
TEST_MODE_HAL_RXDESC_PARSE = 8,
TEST_MODE_HAL_RXBD_PARSE = 9
};
enum pkt_type {
TEST_PKT_TYPE_UNI = 1,
TEST_PKT_TYPE_MC = 2,
TEST_PKT_TYPE_BC = 3,
TEST_PKT_TYPE_MAX = 0xFF,
};
struct rtw_tx_cap {
u16 macid;
u8 tid;
u8 wmm; /* for halmac add role */
u8 dma_ch;
u8 band;
u8 force_txcap;
u16 rate;
u8 bw;
u8 gi_ltf;
u8 stbc;
u8 ldpc;
u8 bk;
u8 type;
};
struct rtw_pool {
u8 *buf;
u32 buf_len;
_os_list idle_list;
_os_list busy_list;
_os_lock idle_lock;
_os_lock busy_lock;
u32 total_cnt;
u32 idle_cnt;
u32 busy_cnt;
};
struct rtw_test_rx {
_os_list list;
u32 test_id;
struct rtw_recv_pkt rx;
u8 *tpkt; /* for loopback mode */
};
struct rtw_payload {
_os_list list;
u32 test_id;
struct rtw_pkt_buf_list pkt;
void *os_rsvd[1];
};
struct rtw_trx_test_param {
u8 is_trx_test_end;
u8 mode;
/* parameter for trx resource*/
u32 tx_req_num;
u32 rx_req_num;
u32 tx_payload_num;
u32 tx_payload_size;
enum pkt_type pkt_type;
u8 ap_mode;
u8 trx_mode;
u8 qta_mode;
u8 qos;
u8 cur_addr[6]; /* mac address of this device */
u8 sta_addr[6]; /* mac address of associating device */
u8 bssid[6];
/* parameter for tx capability */
struct rtw_t_meta_data tx_cap;
/* parameter for hw configure */
/* misc */
};
struct phl_trx_test {
_os_list rx_q;
_os_lock rx_q_lock;
struct rtw_pool tx_req_pool;
struct rtw_pool rx_req_pool;
struct rtw_pool tx_pkt_pool;
struct test_obj_ctrl_interface trx_test_obj;
struct rtw_trx_test_param test_param;
struct rtw_phl_handler test_rxq_handler;
};
#define WHDR_OFST_FRAME_CONTROL 0
#define WHDR_OFST_DURATION 2
#define WHDR_OFST_ADDRESS1 4
#define WHDR_OFST_ADDRESS2 10
#define WHDR_OFST_ADDRESS3 16
#define WHDR_OFST_SEQUENCE 22
#define WHDR_OFST_ADDRESS4 24
#define WHDR_QOS_LENGTH 2
#define SET_WHDR_PROTOCOL_VERSION(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 0, 2, _val)
#define SET_WHDR_TYPE(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 2, 2, _val)
#define SET_WHDR_SUBTYPE(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 4, 4, _val)
#define SET_WHDR_TO_DS(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 8, 1, _val)
#define SET_WHDR_FROM_DS(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 9, 1, _val)
#define SET_WHDR_MORE_FRAG(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 10, 1, _val)
#define SET_WHDR_RETRY(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 11, 1, _val)
#define SET_WHDR_PWR_MGNT(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 12, 1, _val)
#define SET_WHDR_MORE_DATA(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 13, 1, _val)
#define SET_WHDR_WEP(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 14, 1, _val)
#define SET_WHDR_ORDER(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 15, 1, _val)
#define SET_WHDR_QOS_EN(_hdr, _val) \
SET_BITS_TO_LE_2BYTE(_hdr, 7, 1, _val)
#define SET_WHDR_DURATION(_hdr, _val) \
WriteLE2Byte(_hdr + WHDR_OFST_DURATION, _val)
#define SET_WHDR_ADDRESS1(_drv, _hdr, _val) \
_os_mem_cpy(_drv, _hdr + WHDR_OFST_ADDRESS1, _val, 6)
#define SET_WHDR_ADDRESS2(_drv, _hdr, _val) \
_os_mem_cpy(_drv, _hdr + WHDR_OFST_ADDRESS2, _val, 6)
#define SET_WHDR_ADDRESS3(_drv, _hdr, _val) \
_os_mem_cpy(_drv, _hdr + WHDR_OFST_ADDRESS3, _val, 6)
#define SET_WHDR_FRAGMENT_SEQUENCE(_hdr, _val) \
WriteLE2Byte(_hdr + WHDR_OFST_SEQUENCE, _val)
#define SET_WHDR_ADDRESS4(_drv, _hdr, _val) \
_os_mem_cpy(_drv, _hdr + WHDR_OFST_ADDRESS4, _val, 6)
#define SET_WHDR_QOS_CTRL_STA_DATA_TID(_qos, _value) \
SET_BITS_TO_LE_2BYTE((u8 *)_qos, 0, 4, (u8)(_value))
#define SET_WHDR_QOS_CTRL_STA_DATA_EOSP(_qos, _value) \
SET_BITS_TO_LE_2BYTE((u8 *)_qos, 4, 1, (u8)(_value))
#define SET_WHDR_QOS_CTRL_STA_DATA_ACK_POLICY(_qos, _value) \
SET_BITS_TO_LE_2BYTE((u8 *)_qos, 5, 2, (u8)(_value))
#define SET_WHDR_QOS_CTRL_STA_DATA_AMSDU(_qos, _value) \
SET_BITS_TO_LE_2BYTE((u8 *)_qos, 7, 1, (u8)(_value))
#define SET_WHDR_QOS_CTRL_STA_DATA_TXOP(_qos, _value) \
SET_BITS_TO_LE_1BYTE((u8 *)_qos + 1, 0, 8, (u8)(_value))
enum rtw_phl_status phl_trx_test_init(void *phl);
void phl_trx_test_deinit(void *phl);
void rtw_phl_trx_default_param(void *phl,
struct rtw_trx_test_param *test_param);
enum rtw_phl_status rtw_phl_trx_testsuite(void *phl,
struct rtw_trx_test_param *test_param);
#else /*!CONFIG_PHL_TEST_SUITE*/
#define phl_trx_test_init(phl)
#define phl_trx_test_deinit(phl)
#define rtw_phl_trx_default_param(phl, test_param)
#define rtw_phl_trx_testsuite(phl, test_param) RTW_PHL_STATUS_SUCCESS
#endif
#endif /*_TRX_TEST_H_*/