WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
hcc_bus_types.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2021-2023. All rights reserved.
3 * Description: hcc bus types.
4 */
5
6#ifndef HCC_BUS_TYPES_HEADER
7#define HCC_BUS_TYPES_HEADER
8
9#include "td_type.h"
10#include "hcc_types.h"
11#include "soc_osal.h"
12#include "hcc_queue.h"
13#include "hcc_cfg_comm.h"
14
15#ifdef __cplusplus
16#if __cplusplus
17extern "C" {
18#endif
19#endif
20
21#define HCC_BUS_STATE_TX (1 << 0)
22#define HCC_BUS_STATE_RX (1 << 1)
23#define HCC_BUS_STATE_ALL (HCC_BUS_STATE_TX | HCC_BUS_STATE_RX)
24
25#define HCC_RX_MAX_MESSAGE 32
26#define HCC_TX_MAX_MESSAGE 32
27
28/* Power Action */
30 HCC_BUS_POWER_DOWN, /* The action when wlan power down */
31 HCC_BUS_POWER_UP, /* The action when wlan power up */
32 HCC_BUS_POWER_PATCH_LOAD_PREPARE, /* The action before patch downlaod */
33 HCC_BUS_POWER_PATCH_LAUCH, /* The action after patch download before channel enabled */
36
37/*
38 * bus层传输约束
39 */
40enum {
41 HCC_ADDR_ALIGN_MIN = 1, /* 数据首地址1字节对齐 */
42 HCC_ADDR_ALIGN_WORD = 4, /* 数据首地址4字节对齐 */
43};
44
45enum {
46 HCC_DATA_LEN_ALIGN_MIN = 1, /* 数据长度1字节对齐 */
47 HCC_DATA_LEN_ALIGN_WORD = 4, /* 数据长度4字节对齐 */
48 HCC_DATA_LEN_ALIGN_DWORD = 8, /* 数据长度8字节对齐 */
49 HCC_DATA_LEN_ALIGN_QWORD = 16, /* 数据长度16字节对齐 */
50 HCC_DATA_LEN_ALIGN_32BYTES = 32, /* 数据长度32字节对齐 */
51};
52
53#define HCC_ADAPT_BUS_ASSEMBLE_CNT_MIN 1 /* 支持的最小聚合长度,为1则和不聚合一致 */
54#define HCC_ADAPT_BUS_DESCR_ALIGN_BIT_MIN 0 /* 描述符需要左移几bit位,与描述符对齐长度相对应 */
55
57typedef struct _hcc_bus_ hcc_bus;
58typedef struct _bus_dev_ops {
59 td_u32 (*tx_proc)(hcc_bus *bus, hcc_trans_queue *queue, td_u16 *remain_pkt_nums);
62 td_void (*update_credit)(TD_CONST hcc_bus *bus, td_u32 free_cnt); /* credit流控方式,在SDIO上只有 device->host */
63 td_s32 (*get_credit)(hcc_bus *bus, td_u32 *free_cnt);
64#ifdef CONFIG_HCC_SUPPORT_REG_OPT
65 td_s32 (*read_reg)(td_u32 addr, td_u32 *value);
66 td_s32 (*write_reg)(td_u32 addr, td_u32 value);
67#endif
68#ifdef CONFIG_HCC_SUPPORT_PATCH_OPT
69 td_s32 (*patch_read)(hcc_bus *pst_bus, td_u8 *buff, td_u32 len, td_u32 timeout);
70 td_s32 (*patch_write)(hcc_bus *pst_bus, td_u8 *buff, td_u32 len);
71#endif
72 td_s32 (*reinit)(hcc_bus *pst_bus); /* ip reinit */
76 td_void (*flow_on)(hcc_bus *bus, td_bool unc_alloc);
77 td_s32 (*power_action)(hcc_bus *pst_bus, hcc_bus_power_action_type action); /* do something before power on/off */
80 td_s32 (*pm_notify_register)(hcc_bus *pst_bus, bus_pm_notify suspend_func, bus_pm_notify resume_func);
82
88
90typedef td_s32 (*hcc_service_f)(hcc_bus *bus, hcc_service_type service_type);
91struct _hcc_bus_ {
92 td_u32 bus_type : 4; /* Current bus type: HCC_BUS_TYPE */
93 td_u32 max_trans_size : 12; /* Max size for each package */
94 td_u32 addr_align : 8; /* Buffer address of each package must aligned to this */
95 td_u32 len_align : 8; /* Buffer length of each package must aligned to this */
96 td_u32 max_assemble_cnt : 8; /* Max assemble count if bus support assemble. Fill 1 if not support. */
97 td_u32 descr_align_bit : 4; /* Description aligned bits. */
98 td_void *hcc; /* HCC handler, struct type: hcc_handler */
99 td_void *data; /* device driver structure reference */
100 hcc_unc_struc *rsv_buf; /* 预留缓存,由bus层根据驱动需要申请。
101 * 使用场景(sdio为例):驱动获取不到内存可使用该缓存,但不会传给hcc,
102 * 预留内存中的数据会被丢弃,以防止因获取不到内存导致驱动异常。
103 */
107
111 td_u32 tx_sched_count : 8; /* 发送聚合度 */
112 td_u32 force_update_queue_id : 8; /* 是否需要强制发送hcc队列信息 */
114};
115
116#ifdef __cplusplus
117#if __cplusplus
118}
119#endif
120#endif
121
122#endif /* HCC_BUS_TYPES_HEADER */
enum _hcc_bus_power_action_type_ hcc_bus_power_action_type
#define HCC_RX_MAX_MESSAGE
Definition hcc_bus_types.h:25
struct _bus_dev_ops bus_dev_ops
td_s32(* bus_pm_notify)(td_void)
Definition hcc_bus_types.h:56
_hcc_bus_power_action_type_
Definition hcc_bus_types.h:29
@ HCC_BUS_POWER_PATCH_LAUCH
Definition hcc_bus_types.h:33
@ HCC_BUS_POWER_DOWN
Definition hcc_bus_types.h:30
@ HCC_BUS_POWER_PATCH_LOAD_PREPARE
Definition hcc_bus_types.h:32
@ HCC_BUS_POWER_UP
Definition hcc_bus_types.h:31
@ HCC_BUS_POWER_BUTT
Definition hcc_bus_types.h:34
td_void(* hcc_bus_dfx_f)(td_void)
Definition hcc_bus_types.h:89
@ HCC_ADDR_ALIGN_WORD
Definition hcc_bus_types.h:42
@ HCC_ADDR_ALIGN_MIN
Definition hcc_bus_types.h:41
td_s32(* hcc_service_f)(hcc_bus *bus, hcc_service_type service_type)
Definition hcc_bus_types.h:90
@ HCC_DATA_LEN_ALIGN_MIN
Definition hcc_bus_types.h:46
@ HCC_DATA_LEN_ALIGN_DWORD
Definition hcc_bus_types.h:48
@ HCC_DATA_LEN_ALIGN_QWORD
Definition hcc_bus_types.h:49
@ HCC_DATA_LEN_ALIGN_32BYTES
Definition hcc_bus_types.h:50
@ HCC_DATA_LEN_ALIGN_WORD
Definition hcc_bus_types.h:47
enum _hcc_serv_main_type hcc_service_type
enum _hcc_queue_dir_ hcc_queue_dir
td_u32(* hcc_msg_rx)(td_u8 *cb_data)
Definition hcc_types.h:38
ext_errno
Definition soc_errno.h:9
Definition hcc_bus_types.h:58
td_u32(* tx_proc)(hcc_bus *bus, hcc_trans_queue *queue, td_u16 *remain_pkt_nums)
Definition hcc_bus_types.h:59
td_void(* update_credit)(TD_CONST hcc_bus *bus, td_u32 free_cnt)
Definition hcc_bus_types.h:62
td_s32(* sleep_request)(hcc_bus *pst_bus)
Definition hcc_bus_types.h:78
td_s32(* wakeup_request)(hcc_bus *pst_bus)
Definition hcc_bus_types.h:79
td_s32(* get_credit)(hcc_bus *bus, td_u32 *free_cnt)
Definition hcc_bus_types.h:63
td_s32(* pm_notify_register)(hcc_bus *pst_bus, bus_pm_notify suspend_func, bus_pm_notify resume_func)
Definition hcc_bus_types.h:80
td_void(* flow_off)(hcc_bus *bus, td_bool check)
Definition hcc_bus_types.h:75
td_s32(* power_action)(hcc_bus *pst_bus, hcc_bus_power_action_type action)
Definition hcc_bus_types.h:77
td_s32(* reinit)(hcc_bus *pst_bus)
Definition hcc_bus_types.h:72
ext_errno(* send_and_clear_msg)(TD_CONST hcc_bus *bus, td_u32 msg)
Definition hcc_bus_types.h:60
td_s32(* resume_xfer)(td_void)
Definition hcc_bus_types.h:74
td_bool(* is_busy)(hcc_queue_dir dir)
Definition hcc_bus_types.h:61
td_void(* stop_xfer)(td_void)
Definition hcc_bus_types.h:73
td_void(* flow_on)(hcc_bus *bus, td_bool unc_alloc)
Definition hcc_bus_types.h:76
Definition hcc_bus_types.h:91
td_void * hcc
Definition hcc_bus_types.h:98
td_u32 addr_align
Definition hcc_bus_types.h:94
bus_dev_ops * bus_ops
Definition hcc_bus_types.h:106
td_u32 bus_type
Definition hcc_bus_types.h:92
td_u32 state
Definition hcc_bus_types.h:110
td_u32 max_assemble_cnt
Definition hcc_bus_types.h:96
hcc_bus_dfx_f hcc_bus_dfx
Definition hcc_bus_types.h:104
td_u32 cap_max_trans_size
Definition hcc_bus_types.h:113
td_u32 tx_sched_count
Definition hcc_bus_types.h:111
td_u32 len_align
Definition hcc_bus_types.h:95
struct bus_msg_stru msg[32]
Definition hcc_bus_types.h:108
td_u32 force_update_queue_id
Definition hcc_bus_types.h:112
hcc_unc_struc * rsv_buf
Definition hcc_bus_types.h:100
hcc_service_f hcc_srv_hook
Definition hcc_bus_types.h:105
td_u32 max_trans_size
Definition hcc_bus_types.h:93
td_void * data
Definition hcc_bus_types.h:99
td_u32 last_msg
Definition hcc_bus_types.h:109
td_u32 descr_align_bit
Definition hcc_bus_types.h:97
Definition hcc_queue.h:41
Definition hcc_queue.h:27
Definition hcc_bus_types.h:83
td_void * data
Definition hcc_bus_types.h:85
hcc_msg_rx msg_rx
Definition hcc_bus_types.h:84
osal_atomic count
Definition hcc_bus_types.h:86
Definition osal_atomic.h:18
#define TD_CONST
Definition td_base.h:18
unsigned short td_u16
Definition td_type.h:37
unsigned char td_u8
Definition td_type.h:36
td_u8 td_bool
Definition td_type.h:50
void td_void
Definition td_type.h:49
unsigned int td_u32
Definition td_type.h:38
int td_s32
Definition td_type.h:44