nt9856x/code/driver/source/net/18211_nvtfmac/include/nvt_bus.h
2023-03-28 15:07:53 +08:00

117 lines
2.9 KiB
C
Executable File

#ifndef _NVT_BUS_H_
#define _NVT_BUS_H_
#include <linux/types.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include "nvt_diag.h"
#include "nvt_bus_usbif.h"
#include "nvt_bus_sdioif.h"
#include "nvt_bus_mailboxif.h"
/**
*@NVT_BUS_STATE_DOWN: bus is not ready for transfering
*@NVT_BUS_STATE_UP: bus is ready for transfering
*
*/
enum nvt_bus_state {
NVT_BUS_STATE_DOWN,
NVT_BUS_STATE_UP,
};
struct _nvt_bus;
struct _nvt_wdev_bus_ops {
s32 (*init)(struct _nvt_bus *);
s32 (*stop)(struct _nvt_bus *);
s32 (*tx_data)(struct _nvt_bus *, struct sk_buff *);
s32 (*tx_ctrl)(struct _nvt_bus *, u8 *data, u32 data_len);
s32 (*rx_ctrl)(struct _nvt_bus *, u8 *data, u32 data_len);
s32 (*suspend)(struct _nvt_bus *);
s32 (*resume)(struct _nvt_bus *);
};
struct _nvt_bus_statistic {
u64 pkt_tx_cnt;
u64 pkt_rx_cnt;
u64 pkt_tx_err_cnt;
u64 pkt_rx_err_cnt;
u64 ctl_tx_cnt;
u64 ctl_rx_cnt;
u64 ctl_tx_err_cnt;
u64 ctl_rx_err_cnt;
};
#ifdef BUS_UTILIZATION
enum nvt_bus_utilization_tx_mode {
NVT_BUS_BU_TX_VARIABLE_LEN = 0,
NVT_BUS_BU_TX_ALL_ONE,
NVT_BUS_BU_TX_ALL_ZERO,
NVT_BUS_BU_TX_SEQ,
NVT_BUS_BU_TX_RANDOM,
NVT_BUS_BU_TX_MAX
};
struct _nvt_bus_utilization {
bool tx_enable;
bool rx_enable;
u32 tx_mode;
s32 tx_total_cnt;
s32 tx_runtime_cnt;
s32 rx_total_cnt;
s32 rx_runtime_cnt;
u64 start_time;
u64 end_time;
u64 total_pkt_size_in_byte;
};
#endif
struct _nvt_bus {
u32 chip;
u32 chip_rev;
union {
struct _nvt_wdev_usb *nvt_wdev_usb;
struct _nvt_wdev_sdio *nvt_wdev_sdio;
struct _nvt_wdev_mailbox wdev_mailbox;
} type;
struct _nvt_wdev_bus_ops nvt_wdev_bus_ops;
struct _nvt_diag nvt_diag;
struct device *dev;
struct _nvt_adapter *nvt_adapter;
enum nvt_bus_state state;
struct _nvt_bus_statistic statistic;
struct _nvt_icfg_pkt_buff *icfg_pkg_buff;
void (*tx_done_callback)(struct sk_buff *, s32 status_code);
s32 fw_rdy_completed;
wait_queue_head_t fw_rdy_wait;
#ifdef BUS_UTILIZATION
struct _nvt_bus_utilization *nvt_bu;
#endif
};
extern s32 nvt_bus_txdata(struct _nvt_bus *nvt_bus, struct sk_buff *skb);
extern struct _nvt_bus *nvt_bus_attach(struct device *,
struct _nvt_wdev_bus_ops);
extern s32 nvt_bus_detach(struct device *);
extern s32 nvt_bus_register_txdone_callback(struct _nvt_bus *nvt_bus,
void (*txdone_cb)(struct sk_buff *, s32 status_code));
#ifdef BUS_UTILIZATION
extern s32 nvt_bus_bu_tx_on(struct _nvt_bus *nvt_bus, bool on,
u32 pkt_cnt);
extern s32 nvt_bus_bu_rx_on(struct _nvt_bus *nvt_bus, bool on,
u32 pkt_cnt);
extern void nvt_bus_bu_show_result(struct _nvt_bus *nvt_bus, bool is_tx);
#endif
#endif