0
0
Fork 0
hgicf/hgic_def.h

387 lines
10 KiB
C
Raw Normal View History

2023-05-16 09:13:19 +00:00
#ifndef _HUGE_IC_DEF_H_
#define _HUGE_IC_DEF_H_
#include "hgic.h"
#include "version.h"
#define HGIC_VERSION "v1.3.0"
#ifndef SVN_VERSION
#error "SVN_VERSION undefined"
#endif
#define VERSOIN_SHOW(name) do{\
printk("** HUGE-IC WLAN Card Driver("name") "HGIC_VERSION"-"SVN_VERSION"\r\n");\
}while(0)
#define HGIC_WDEV_ID_AP 0
#define HGIC_WDEV_ID_STA 1
#define HGIC_SCAN_MAX_NUM 32
#define HGIC_HDR_TX_MAGIC 0x1A2B
#define HGIC_HDR_RX_MAGIC 0x2B1A
#define HGIC_VENDOR_ID (0xA012)
#define HGIC_WLAN_AH_4001 (0x4001)
#define HGIC_WLAN_AH_4002 (0x4002)
#define HGIC_WLAN_AH_4102 (0x4102)
#define HGIC_CTRL_TIMEOUT 100
#define HGIC_CMD_PRIORITY 0
#define HGIC_TX_WINDOW 20
#define HGIC_TX_COOKIE_MASK 0x7FFF
#define HGIC_BLOCK_ACK_CNT 256
#define hgic_dbg(fmt, ...) printk("%s:%d::"fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define hgic_err(fmt, ...) printk("%s:%d::"fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define hgic_enter() printk("enter %s\r\n", __FUNCTION__)
#define hgic_leave() printk("leave %s\r\n", __FUNCTION__)
#define HGIC_CMD_TIMEOUT 500
#define HGIC_TX_TIMEOUT 10
#define HGIC_ALIVE_TIMER 5000
enum hgic_bus_type {
HGIC_BUS_SDIO = 0x1,
HGIC_BUS_USB,
HGIC_BUS_HWSIM,
HGIC_BUS_WLOE,
HGIC_BUS_SDSPI,
};
enum hgic_hdr_type {
HGIC_HDR_TYPE_ACK = 0x1,
HGIC_HDR_TYPE_FRM,
HGIC_HDR_TYPE_CMD,
HGIC_HDR_TYPE_EVENT,
HGIC_HDR_TYPE_FIRMWARE,
HGIC_HDR_TYPE_NLMSG,
HGIC_HDR_TYPE_BOOTDL,
HGIC_HDR_TYPE_TEST,
HGIC_HDR_TYPE_FRM2,
HGIC_HDR_TYPE_TEST2,
HGIC_HDR_TYPE_SOFTFC,
HGIC_HDR_TYPE_OTA,
HGIC_HDR_TYPE_CMD2,
HGIC_HDR_TYPE_EVENT2,
HGIC_HDR_TYPE_BOOTDL_DATA,
HGIC_HDR_TYPE_MAX,
};
enum hgic_hdr_flags2 {
HGIC_HDR_FLAGS2_AFT_BEACON = BIT(0),
};
enum hgic_bus_flag {
HGIC_BUS_FLAGS_DISABLE_REINIT,
HGIC_BUS_FLAGS_SLEEP,
HGIC_BUS_FLAGS_INBOOT,
HGIC_BUS_FLAGS_NOPOLL,
};
struct hgic_txq_param {
unsigned short txop;
unsigned short cw_min;
unsigned short cw_max;
unsigned char aifs;
unsigned char acm;
};
struct hgic_mcast_txparam {
unsigned char dupcnt;
unsigned char tx_bw;
unsigned char tx_mcs;
unsigned char clearch;
};
/*data packet header*/
struct hgic_hdr {
unsigned short magic;
unsigned char type;
unsigned char ifidx: 4, flags: 4;
unsigned short length;
unsigned short cookie;
} __packed;
struct hgic_rx_info {
unsigned char band;
unsigned char mcs: 4, bw: 4;
char evm;
char signal;
unsigned short freq;
s16 freq_off;
unsigned char rx_flags;
unsigned char antenna;
unsigned char nss : 4, s1g_nss : 4;
unsigned char vht_flag : 3, s1g_flag : 5;
};
struct hgic_tx_info {
unsigned char band;
unsigned char tx_bw;
unsigned char tx_mcs;
unsigned char antenna;
unsigned int tx_flags;
unsigned int tx_flags2;
};
struct hgic_key_info {
unsigned int cipher;
unsigned char icv_len;
unsigned char iv_len;
unsigned char hw_key_idx;
unsigned char flags;
char keyidx;
unsigned char keylen;
unsigned char key[0];
};
struct hgic_frm_hdr {
struct hgic_hdr hdr;
union {
struct hgic_rx_info rx_info;
struct hgic_tx_info tx_info;
unsigned char rev[24];
};
} __packed;
struct hgic_frm_hdr2 {
struct hgic_hdr hdr;
} __packed;
#define HDR_CMDID(ctl) ((ctl)->hdr.type==HGIC_HDR_TYPE_CMD2?(ctl)->cmd2.cmd_id:(ctl)->cmd.cmd_id)
#define HDR_EVTID(ctl) ((ctl)->hdr.type==HGIC_HDR_TYPE_EVENT2?(ctl)->event2.event_id:(ctl)->event.event_id)
#define HDR_CMDID_SET(ctl, id) if(id>255){\
(ctl)->hdr.type =HGIC_HDR_TYPE_CMD2;\
(ctl)->cmd2.cmd_id = id;\
}else{\
(ctl)->hdr.type =HGIC_HDR_TYPE_CMD;\
(ctl)->cmd.cmd_id = id;\
}
#define HDR_EVTID_SET(ctl, id) if(id>255){\
(ctl)->hdr.type =HGIC_HDR_TYPE_EVENT2;\
(ctl)->event2.event_id = id;\
}else{\
(ctl)->hdr.type =HGIC_HDR_TYPE_EVENT;\
(ctl)->event.event_id = id;\
}
/*contro pakcet header*/
struct hgic_ctrl_hdr {
struct hgic_hdr hdr;
union {
struct {
unsigned char cmd_id;
short status;
} cmd;
struct {
unsigned short cmd_id;
short status;
} cmd2;
struct {
unsigned char event_id;
short value;
} event;
struct {
unsigned short event_id;
short value;
} event2;
unsigned char info[4];
};
} __packed;
//ack packet
struct hgic_dack_hdr {
struct hgic_hdr hdr;
uint16_t cookies[0];
} __packed;
struct hgic_nlmsg_hdr {
struct hgic_hdr hdr;
uint32_t group;
uint32_t portid;
};
struct hgic_bootdl_resp_hdr {
struct hgic_hdr hdr;
unsigned char cmd;
unsigned char rsp;
unsigned char rsp_data[4];
unsigned char reserved;
unsigned char check;
} __attribute__((packed));
struct hgic_bootdl_cmd_hdr {
struct hgic_hdr hdr;
unsigned char cmd;
unsigned char cmd_len;
unsigned char cmd_flag;
unsigned char addr[4];
unsigned char len[4];
unsigned char check;
} __attribute__((packed));
struct hgic_ota_hdr {
unsigned int version;
unsigned int off;
unsigned int tot_len;
unsigned short len;
unsigned short checksum;
unsigned short chipid;
unsigned short err_code;
unsigned char data[0];
};
///////////////////////////////////////////////////////////////////////////////////////////////////
enum hgic_rom_cmd {
HGIC_ROM_CMD_ENTER = 0,
HGIC_ROM_CMD_LDFW,
HGIC_ROM_CMD_RUN,
};
struct hgic_fw_ldinfo {
unsigned int run_addr;
unsigned int encrypt: 1,
resv: 31;
};
struct hgic_rom_hdr {
unsigned char cmd;
unsigned char subcmd;
unsigned char data[0];
};
struct hgic_sta_status {
unsigned short aid;
unsigned char addr[6];
char rssi;
char evm;
char evm_std;
unsigned char tx_mcs;
unsigned char tx_bw;
};
struct hgic_fw_status {
unsigned short rxq;
unsigned short txq;
unsigned short acq[4];
unsigned short sta_count;
struct hgic_sta_status sta[0];
};
enum HGIC_BUS_BOOTDL_CKSUM{
HGIC_BUS_BOOTDL_CHECK_SUM = 0,
HGIC_BUS_BOOTDL_CHECK_CRC8,
HGIC_BUS_BOOTDL_CHECK_0XFD,
HGIC_BUS_BOOTDL_CHECK_OFF = 0xFF
} ;
struct hgic_bus {
int type;
int dev_id;
int drv_tx_headroom;
void *bus_priv;
unsigned long flags;
int bootdl_pktlen;
int bootdl_cksum;
int blk_size;
int (*tx_packet)(void *bus, struct sk_buff *skb);
void (*tx_complete)(void *hg, struct sk_buff *skb, int success);
int (*rx_packet)(void *hg, struct sk_buff *skb, int len);
int (*reinit)(void *bus);
};
extern int hgic_core_probe(void *dev, struct hgic_bus *bus);
extern void hgic_core_probe_post(void *priv);
extern int hgic_core_remove(void *arg);
extern int hgic_core_suspend(void *hgobj);
extern int hgic_core_resume(void *hgobj);
#ifdef __RTOS__
#define ALLOC_ORDERED_WORKQUEUE alloc_ordered_workqueue
#define ALLOC_NETDEV_MQS alloc_netdev_mqs
#define netif_queue_stopped(n) (0)
#define netif_start_queue(n)
#define netif_stop_queue(n)
#else
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,36)
#define ALLOC_ORDERED_WORKQUEUE alloc_ordered_workqueue
#else
#define ALLOC_ORDERED_WORKQUEUE(n,f) create_singlethread_workqueue(n)
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)
#define ALLOC_NETDEV_MQS(size,name,setup,txqs,rxqs) alloc_netdev_mqs(size,name,0,setup,txqs,rxqs)
#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,36)
#define ALLOC_NETDEV_MQS(size,name,setup,txqs,rxqs) alloc_netdev_mq(size,name,setup,txqs)
#else
#define ALLOC_NETDEV_MQS(size,name,setup,txqs,rxqs) alloc_netdev_mqs(size,name,setup,txqs,rxqs)
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,1)
#define _KERNEL_READ(fp, buff, size, off) kernel_read(fp, buff, size, off)
#define _KERNEL_WRITE(fp, buff, size, off) kernel_write(fp, buff, size, off)
#else
#define _KERNEL_READ(fp, buff, size, off) kernel_read(fp, 0, buff, size)
#define _KERNEL_WRITE(fp, buff, size, off) kernel_write(fp, buff, size, off)
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)
#define setup_timer(a, b, c) timer_setup(a, b, 0)
#define init_timer(...)
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0)
#define ACCESS_OK(type, addr, size) access_ok(addr, size)
#define DEV_OPEN(x) dev_open(x, NULL)
#else
#define ACCESS_OK(type, addr, size) access_ok(type, addr, size)
#define DEV_OPEN(x) dev_open(x)
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0) && defined CONFIG_HGIC_2G
#define IEEE80211_NUM_BANDS NUM_NL80211_BANDS
#define IEEE80211_BAND_2GHZ NL80211_BAND_2GHZ
#define IEEE80211_BAND_5GHZ NL80211_BAND_5GHZ
#endif
#ifndef IEEE80211_NUM_ACS
#define IEEE80211_NUM_ACS 4
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0) && defined CONFIG_HGIC_2G
#define vht_nss nss
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0) && defined CONFIG_HGIC_2G
#define IEEE80211_CHAN_NO_IBSS IEEE80211_CHAN_NO_IR
#define IEEE80211_CHAN_PASSIVE_SCAN IEEE80211_CHAN_NO_IR
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,5,0)
#define proc_ops file_operations
#define proc_open open
#define proc_read read
#define proc_lseek llseek
#define proc_write write
#define proc_release release
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)
#define ieee80211_free_txskb(hw, skb) dev_kfree_skb_any(skb)
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
#define RX_FLAG_MACTIME_START RX_FLAG_MACTIME_MPDU
#define IEEE80211_ITERATE_ACTIVE_INTERFACES_ATOMIC(hw, flags, iterator, vif) ieee80211_iterate_active_interfaces_atomic(hw, iterator, vif)
#else
#define IEEE80211_ITERATE_ACTIVE_INTERFACES_ATOMIC(hw, flags, iterator, vif) ieee80211_iterate_active_interfaces_atomic(hw, flags, iterator, vif)
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
static inline void *__PDE_DATA(const struct inode *inode)
{
return PDE(inode)->data;
}
static inline void *PDE_DATA(const struct inode *inode)
{
return __PDE_DATA(inode);
}
#endif
#endif
#endif