2 * $Copyright Open 2009 Broadcom Corporation$
3 * $Id: dhd_wlfc.h 501046 2014-09-06 01:25:16Z $
6 #ifndef __wlfc_host_driver_definitions_h__
7 #define __wlfc_host_driver_definitions_h__
13 /* #define OOO_DEBUG */
15 #define WLFC_UNSUPPORTED -9999
17 #define WLFC_NO_TRAFFIC -1
18 #define WLFC_MULTI_TRAFFIC 0
20 #define BUS_RETRIES 1 /* # of retries before aborting a bus tx operation */
22 /* 16 bits will provide an absolute max of 65536 slots */
23 #define WLFC_HANGER_MAXITEMS 3072
25 #define WLFC_HANGER_ITEM_STATE_FREE 1
26 #define WLFC_HANGER_ITEM_STATE_INUSE 2
27 #define WLFC_HANGER_ITEM_STATE_INUSE_SUPPRESSED 3
29 #define WLFC_HANGER_PKT_STATE_TXSTATUS 1
30 #define WLFC_HANGER_PKT_STATE_TXCOMPLETE 2
31 #define WLFC_HANGER_PKT_STATE_CLEANUP 4
38 typedef enum ewlfc_packet_state {
40 eWLFC_PKTTYPE_DELAYED,
41 eWLFC_PKTTYPE_SUPPRESSED,
43 } ewlfc_packet_state_t;
45 typedef enum ewlfc_mac_entry_action {
46 eWLFC_MAC_ENTRY_ACTION_ADD,
47 eWLFC_MAC_ENTRY_ACTION_DEL,
48 eWLFC_MAC_ENTRY_ACTION_UPDATE,
49 eWLFC_MAC_ENTRY_ACTION_MAX
50 } ewlfc_mac_entry_action_t;
52 typedef struct wlfc_hanger_item {
59 #ifdef PROP_TXSTATUS_DEBUG
62 struct wlfc_hanger_item *next;
65 typedef struct wlfc_hanger {
69 uint32 failed_to_push;
71 uint32 failed_slotfind;
73 wlfc_hanger_item_t items[1];
76 #define WLFC_HANGER_SIZE(n) ((sizeof(wlfc_hanger_t) - \
77 sizeof(wlfc_hanger_item_t)) + ((n)*sizeof(wlfc_hanger_item_t)))
79 #define WLFC_STATE_OPEN 1
80 #define WLFC_STATE_CLOSE 2
82 #define WLFC_PSQ_PREC_COUNT ((AC_COUNT + 1) * 2) /* 2 for each AC traffic and bc/mc */
83 #define WLFC_AFQ_PREC_COUNT (AC_COUNT + 1)
85 #define WLFC_PSQ_LEN 2048
87 #define WLFC_FLOWCONTROL_HIWATER (2048 - 256)
88 #define WLFC_FLOWCONTROL_LOWATER 256
90 #define WLFC_LOG_BUF_SIZE (1024*1024)
92 typedef struct wlfc_mac_descriptor {
97 uint8 ac_bitmap; /* for APSD */
98 uint8 requested_credit;
99 uint8 requested_packet;
100 uint8 ea[ETHER_ADDR_LEN];
102 maintain (MAC,AC) based seq count for
103 packets going to the device. As well as bc/mc.
105 uint8 seq[AC_COUNT + 1];
108 /* packets at firmware */
110 /* The AC pending bitmap that was reported to the fw at last change */
111 uint8 traffic_lastreported_bmp;
112 /* The new AC pending bitmap */
113 uint8 traffic_pending_bmp;
114 /* 1= send on next opportunity */
115 uint8 send_tim_signal;
117 /* Number of packets at dongle for this entry. */
119 /* Numbe of suppression to wait before evict from delayQ */
120 int suppr_transit_count;
121 /* flag. TRUE when in suppress state */
126 #endif /* QMONITOR */
128 #ifdef PROP_TXSTATUS_DEBUG
129 uint32 dstncredit_sent_packets;
130 uint32 dstncredit_acks;
134 struct wlfc_mac_descriptor* prev;
135 struct wlfc_mac_descriptor* next;
136 } wlfc_mac_descriptor_t;
138 typedef struct dhd_wlfc_commit_info {
140 uint8 ac_fifo_credit_spent;
141 ewlfc_packet_state_t pkt_type;
142 wlfc_mac_descriptor_t* mac_entry;
144 } dhd_wlfc_commit_info_t;
146 #define WLFC_DECR_SEQCOUNT(entry, prec) do { if (entry->seq[(prec)] == 0) {\
147 entry->seq[prec] = 0xff; } else entry->seq[prec]--;} while (0)
149 #define WLFC_INCR_SEQCOUNT(entry, prec) entry->seq[(prec)]++
150 #define WLFC_SEQCOUNT(entry, prec) entry->seq[(prec)]
152 typedef struct athost_wl_stat_counters {
157 uint32 tlv_parse_failed;
159 uint32 rollback_failed;
160 uint32 delayq_full_error;
161 uint32 credit_request_failed;
162 uint32 packet_request_failed;
163 uint32 mac_update_failed;
164 uint32 psmode_update_failed;
165 uint32 interface_update_failed;
166 uint32 wlfc_header_only_pkt;
173 uint32 psq_wlsup_retx;
174 uint32 psq_wlsup_enq;
175 uint32 psq_d11sup_retx;
176 uint32 psq_d11sup_enq;
177 uint32 psq_hostq_retx;
178 uint32 psq_hostq_enq;
179 uint32 mac_handle_notfound;
180 uint32 wlc_tossed_pkts;
182 uint32 generic_error;
183 /* an extra one for bc/mc traffic */
184 uint32 send_pkts[AC_COUNT + 1];
185 uint32 drop_pkts[WLFC_PSQ_PREC_COUNT];
186 uint32 ooo_pkts[AC_COUNT + 1];
187 #ifdef PROP_TXSTATUS_DEBUG
188 /* all pkt2bus -> txstatus latency accumulated */
189 uint32 latency_sample_count;
190 uint32 total_status_latency;
191 uint32 latency_most_recent;
194 uint32 fifo_credits_sent[6];
195 uint32 fifo_credits_back[6];
196 uint32 dropped_qfull[6];
197 uint32 signal_only_pkts_sent;
198 uint32 signal_only_pkts_freed;
200 uint32 cleanup_txq_cnt;
201 uint32 cleanup_psq_cnt;
202 uint32 cleanup_fw_cnt;
203 } athost_wl_stat_counters_t;
205 #ifdef PROP_TXSTATUS_DEBUG
206 #define WLFC_HOST_FIFO_CREDIT_INC_SENTCTRS(ctx, ac) do { \
207 (ctx)->stats.fifo_credits_sent[(ac)]++;} while (0)
208 #define WLFC_HOST_FIFO_CREDIT_INC_BACKCTRS(ctx, ac) do { \
209 (ctx)->stats.fifo_credits_back[(ac)]++;} while (0)
210 #define WLFC_HOST_FIFO_DROPPEDCTR_INC(ctx, ac) do { \
211 (ctx)->stats.dropped_qfull[(ac)]++;} while (0)
213 #define WLFC_HOST_FIFO_CREDIT_INC_SENTCTRS(ctx, ac) do {} while (0)
214 #define WLFC_HOST_FIFO_CREDIT_INC_BACKCTRS(ctx, ac) do {} while (0)
215 #define WLFC_HOST_FIFO_DROPPEDCTR_INC(ctx, ac) do {} while (0)
218 #define WLFC_FCMODE_NONE 0
219 #define WLFC_FCMODE_IMPLIED_CREDIT 1
220 #define WLFC_FCMODE_EXPLICIT_CREDIT 2
221 #define WLFC_ONLY_AMPDU_HOSTREORDER 3
223 /* Reserved credits ratio when borrowed by hihger priority */
224 #define WLFC_BORROW_LIMIT_RATIO 4
226 /* How long to defer borrowing in milliseconds */
227 #define WLFC_BORROW_DEFER_PERIOD_MS 100
229 /* How long to defer flow control in milliseconds */
230 #define WLFC_FC_DEFER_PERIOD_MS 200
232 /* How long to detect occurance per AC in miliseconds */
233 #define WLFC_RX_DETECTION_THRESHOLD_MS 100
235 /* Mask to represent available ACs (note: BC/MC is ignored */
236 #define WLFC_AC_MASK 0xF
238 typedef struct athost_wl_status_info {
239 uint8 last_seqid_to_wlc;
247 athost_wl_stat_counters_t stats;
249 int Init_FIFO_credit[AC_COUNT + 2];
251 /* the additional ones are for bc/mc and ATIM FIFO */
252 int FIFO_credit[AC_COUNT + 2];
254 /* Credit borrow counts for each FIFO from each of the other FIFOs */
255 int credits_borrowed[AC_COUNT + 2][AC_COUNT + 2];
257 /* packet hanger and MAC->handle lookup table */
260 /* table for individual nodes */
261 wlfc_mac_descriptor_t nodes[WLFC_MAC_DESC_TABLE_SIZE];
262 /* table for interfaces */
263 wlfc_mac_descriptor_t interfaces[WLFC_MAX_IFNUM];
264 /* OS may send packets to unknown (unassociated) destinations */
265 /* A place holder for bc/mc and packets to unknown destinations */
266 wlfc_mac_descriptor_t other;
267 } destination_entries;
269 wlfc_mac_descriptor_t *active_entry_head;
270 int active_entry_count;
272 wlfc_mac_descriptor_t* requested_entry[WLFC_MAC_DESC_TABLE_SIZE];
273 int requested_entry_count;
275 /* pkt counts for each interface and ac */
276 int pkt_cnt_in_q[WLFC_MAX_IFNUM][AC_COUNT+1];
277 int pkt_cnt_per_ac[AC_COUNT+1];
278 int pkt_cnt_in_drv[WLFC_MAX_IFNUM][AC_COUNT+1];
280 uint32 fc_defer_timestamp;
281 uint32 rx_timestamp[AC_COUNT+1];
282 /* ON/OFF state for flow control to the host network interface */
283 uint8 hostif_flow_state[WLFC_MAX_IFNUM];
285 /* to flow control an OS interface */
286 uint8 toggle_host_if;
288 /* To borrow credits */
289 uint8 allow_credit_borrow;
291 /* ac number for the first single ac traffic */
294 /* Timestamp for the first single ac traffic */
295 uint32 single_ac_timestamp;
297 bool bcmc_credit_supported;
299 } athost_wl_status_info_t;
301 /* Please be mindful that total pkttag space is 32 octets only */
302 typedef struct dhd_pkttag {
304 b[15] - 1 = wlfc packet
305 b[14:13] - encryption exemption
306 b[12 ] - 1 = event channel
307 b[11 ] - 1 = this packet was sent in response to one time packet request,
308 do not increment credit on status for this one. [WLFC_CTL_TYPE_MAC_REQUEST_PACKET].
309 b[10 ] - 1 = signal-only-packet to firmware [i.e. nothing to piggyback on]
310 b[9 ] - 1 = packet is host->firmware (transmit direction)
311 - 0 = packet received from firmware (firmware->host)
312 b[8 ] - 1 = packet was sent due to credit_request (pspoll),
313 packet does not count against FIFO credit.
314 - 0 = normal transaction, packet counts against FIFO credit
315 b[7 ] - 1 = AP, 0 = STA
316 b[6:4] - AC FIFO number
317 b[3:0] - interface index
320 /* destination MAC address for this packet so that not every
321 module needs to open the packet to find this
323 uint8 dstn_ether[ETHER_ADDR_LEN];
325 This 32-bit goes from host to device for every packet.
330 This 16-bit is original seq number for every suppress packet.
335 This address is mac entry for every packet.
338 /* bus specific stuff */
352 #define DHD_PKTTAG_WLFCPKT_MASK 0x1
353 #define DHD_PKTTAG_WLFCPKT_SHIFT 15
354 #define DHD_PKTTAG_WLFCPKT_SET(tag, value) ((dhd_pkttag_t*)(tag))->if_flags = \
355 (((dhd_pkttag_t*)(tag))->if_flags & \
356 ~(DHD_PKTTAG_WLFCPKT_MASK << DHD_PKTTAG_WLFCPKT_SHIFT)) | \
357 (((value) & DHD_PKTTAG_WLFCPKT_MASK) << DHD_PKTTAG_WLFCPKT_SHIFT)
358 #define DHD_PKTTAG_WLFCPKT(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
359 DHD_PKTTAG_WLFCPKT_SHIFT) & DHD_PKTTAG_WLFCPKT_MASK)
361 #define DHD_PKTTAG_EXEMPT_MASK 0x3
362 #define DHD_PKTTAG_EXEMPT_SHIFT 13
363 #define DHD_PKTTAG_EXEMPT_SET(tag, value) ((dhd_pkttag_t*)(tag))->if_flags = \
364 (((dhd_pkttag_t*)(tag))->if_flags & \
365 ~(DHD_PKTTAG_EXEMPT_MASK << DHD_PKTTAG_EXEMPT_SHIFT)) | \
366 (((value) & DHD_PKTTAG_EXEMPT_MASK) << DHD_PKTTAG_EXEMPT_SHIFT)
367 #define DHD_PKTTAG_EXEMPT(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
368 DHD_PKTTAG_EXEMPT_SHIFT) & DHD_PKTTAG_EXEMPT_MASK)
370 #define DHD_PKTTAG_EVENT_MASK 0x1
371 #define DHD_PKTTAG_EVENT_SHIFT 12
372 #define DHD_PKTTAG_SETEVENT(tag, event) ((dhd_pkttag_t*)(tag))->if_flags = \
373 (((dhd_pkttag_t*)(tag))->if_flags & \
374 ~(DHD_PKTTAG_EVENT_MASK << DHD_PKTTAG_EVENT_SHIFT)) | \
375 (((event) & DHD_PKTTAG_EVENT_MASK) << DHD_PKTTAG_EVENT_SHIFT)
376 #define DHD_PKTTAG_EVENT(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
377 DHD_PKTTAG_EVENT_SHIFT) & DHD_PKTTAG_EVENT_MASK)
379 #define DHD_PKTTAG_ONETIMEPKTRQST_MASK 0x1
380 #define DHD_PKTTAG_ONETIMEPKTRQST_SHIFT 11
381 #define DHD_PKTTAG_SETONETIMEPKTRQST(tag) ((dhd_pkttag_t*)(tag))->if_flags = \
382 (((dhd_pkttag_t*)(tag))->if_flags & \
383 ~(DHD_PKTTAG_ONETIMEPKTRQST_MASK << DHD_PKTTAG_ONETIMEPKTRQST_SHIFT)) | \
384 (1 << DHD_PKTTAG_ONETIMEPKTRQST_SHIFT)
385 #define DHD_PKTTAG_ONETIMEPKTRQST(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
386 DHD_PKTTAG_ONETIMEPKTRQST_SHIFT) & DHD_PKTTAG_ONETIMEPKTRQST_MASK)
388 #define DHD_PKTTAG_SIGNALONLY_MASK 0x1
389 #define DHD_PKTTAG_SIGNALONLY_SHIFT 10
390 #define DHD_PKTTAG_SETSIGNALONLY(tag, signalonly) ((dhd_pkttag_t*)(tag))->if_flags = \
391 (((dhd_pkttag_t*)(tag))->if_flags & \
392 ~(DHD_PKTTAG_SIGNALONLY_MASK << DHD_PKTTAG_SIGNALONLY_SHIFT)) | \
393 (((signalonly) & DHD_PKTTAG_SIGNALONLY_MASK) << DHD_PKTTAG_SIGNALONLY_SHIFT)
394 #define DHD_PKTTAG_SIGNALONLY(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
395 DHD_PKTTAG_SIGNALONLY_SHIFT) & DHD_PKTTAG_SIGNALONLY_MASK)
397 #define DHD_PKTTAG_PKTDIR_MASK 0x1
398 #define DHD_PKTTAG_PKTDIR_SHIFT 9
399 #define DHD_PKTTAG_SETPKTDIR(tag, dir) ((dhd_pkttag_t*)(tag))->if_flags = \
400 (((dhd_pkttag_t*)(tag))->if_flags & \
401 ~(DHD_PKTTAG_PKTDIR_MASK << DHD_PKTTAG_PKTDIR_SHIFT)) | \
402 (((dir) & DHD_PKTTAG_PKTDIR_MASK) << DHD_PKTTAG_PKTDIR_SHIFT)
403 #define DHD_PKTTAG_PKTDIR(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
404 DHD_PKTTAG_PKTDIR_SHIFT) & DHD_PKTTAG_PKTDIR_MASK)
406 #define DHD_PKTTAG_CREDITCHECK_MASK 0x1
407 #define DHD_PKTTAG_CREDITCHECK_SHIFT 8
408 #define DHD_PKTTAG_SETCREDITCHECK(tag, check) ((dhd_pkttag_t*)(tag))->if_flags = \
409 (((dhd_pkttag_t*)(tag))->if_flags & \
410 ~(DHD_PKTTAG_CREDITCHECK_MASK << DHD_PKTTAG_CREDITCHECK_SHIFT)) | \
411 (((check) & DHD_PKTTAG_CREDITCHECK_MASK) << DHD_PKTTAG_CREDITCHECK_SHIFT)
412 #define DHD_PKTTAG_CREDITCHECK(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
413 DHD_PKTTAG_CREDITCHECK_SHIFT) & DHD_PKTTAG_CREDITCHECK_MASK)
415 #define DHD_PKTTAG_IFTYPE_MASK 0x1
416 #define DHD_PKTTAG_IFTYPE_SHIFT 7
417 #define DHD_PKTTAG_SETIFTYPE(tag, isAP) ((dhd_pkttag_t*)(tag))->if_flags = \
418 (((dhd_pkttag_t*)(tag))->if_flags & \
419 ~(DHD_PKTTAG_IFTYPE_MASK << DHD_PKTTAG_IFTYPE_SHIFT)) | \
420 (((isAP) & DHD_PKTTAG_IFTYPE_MASK) << DHD_PKTTAG_IFTYPE_SHIFT)
421 #define DHD_PKTTAG_IFTYPE(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
422 DHD_PKTTAG_IFTYPE_SHIFT) & DHD_PKTTAG_IFTYPE_MASK)
424 #define DHD_PKTTAG_FIFO_MASK 0x7
425 #define DHD_PKTTAG_FIFO_SHIFT 4
426 #define DHD_PKTTAG_SETFIFO(tag, fifo) ((dhd_pkttag_t*)(tag))->if_flags = \
427 (((dhd_pkttag_t*)(tag))->if_flags & ~(DHD_PKTTAG_FIFO_MASK << DHD_PKTTAG_FIFO_SHIFT)) | \
428 (((fifo) & DHD_PKTTAG_FIFO_MASK) << DHD_PKTTAG_FIFO_SHIFT)
429 #define DHD_PKTTAG_FIFO(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
430 DHD_PKTTAG_FIFO_SHIFT) & DHD_PKTTAG_FIFO_MASK)
432 #define DHD_PKTTAG_IF_MASK 0xf
433 #define DHD_PKTTAG_IF_SHIFT 0
434 #define DHD_PKTTAG_SETIF(tag, if) ((dhd_pkttag_t*)(tag))->if_flags = \
435 (((dhd_pkttag_t*)(tag))->if_flags & ~(DHD_PKTTAG_IF_MASK << DHD_PKTTAG_IF_SHIFT)) | \
436 (((if) & DHD_PKTTAG_IF_MASK) << DHD_PKTTAG_IF_SHIFT)
437 #define DHD_PKTTAG_IF(tag) ((((dhd_pkttag_t*)(tag))->if_flags >> \
438 DHD_PKTTAG_IF_SHIFT) & DHD_PKTTAG_IF_MASK)
440 #define DHD_PKTTAG_SETDSTN(tag, dstn_MAC_ea) memcpy(((dhd_pkttag_t*)((tag)))->dstn_ether, \
441 (dstn_MAC_ea), ETHER_ADDR_LEN)
442 #define DHD_PKTTAG_DSTN(tag) ((dhd_pkttag_t*)(tag))->dstn_ether
444 #define DHD_PKTTAG_SET_H2DTAG(tag, h2dvalue) ((dhd_pkttag_t*)(tag))->htod_tag = (h2dvalue)
445 #define DHD_PKTTAG_H2DTAG(tag) (((dhd_pkttag_t*)(tag))->htod_tag)
447 #define DHD_PKTTAG_SET_H2DSEQ(tag, seq) ((dhd_pkttag_t*)(tag))->htod_seq = (seq)
448 #define DHD_PKTTAG_H2DSEQ(tag) (((dhd_pkttag_t*)(tag))->htod_seq)
450 #define DHD_PKTTAG_SET_ENTRY(tag, entry) ((dhd_pkttag_t*)(tag))->entry = (entry)
451 #define DHD_PKTTAG_ENTRY(tag) (((dhd_pkttag_t*)(tag))->entry)
453 #define PSQ_SUP_IDX(x) (x * 2 + 1)
454 #define PSQ_DLY_IDX(x) (x * 2)
456 typedef int (*f_commitpkt_t)(void* ctx, void* p);
457 typedef bool (*f_processpkt_t)(void* p, void* arg);
459 #ifdef PROP_TXSTATUS_DEBUG
460 #define DHD_WLFC_CTRINC_MAC_CLOSE(entry) do { (entry)->closed_ct++; } while (0)
461 #define DHD_WLFC_CTRINC_MAC_OPEN(entry) do { (entry)->opened_ct++; } while (0)
463 #define DHD_WLFC_CTRINC_MAC_CLOSE(entry) do {} while (0)
464 #define DHD_WLFC_CTRINC_MAC_OPEN(entry) do {} while (0)
467 /* public functions */
468 int dhd_wlfc_parse_header_info(dhd_pub_t *dhd, void* pktbuf, int tlv_hdr_len,
469 uchar *reorder_info_buf, uint *reorder_info_len);
470 int dhd_wlfc_commit_packets(dhd_pub_t *dhdp, f_commitpkt_t fcommit,
471 void* commit_ctx, void *pktbuf, bool need_toggle_host_if);
472 int dhd_wlfc_txcomplete(dhd_pub_t *dhd, void *txp, bool success);
473 int dhd_wlfc_init(dhd_pub_t *dhd);
474 #ifdef SUPPORT_P2P_GO_PS
475 int dhd_wlfc_suspend(dhd_pub_t *dhd);
476 int dhd_wlfc_resume(dhd_pub_t *dhd);
477 #endif /* SUPPORT_P2P_GO_PS */
478 int dhd_wlfc_hostreorder_init(dhd_pub_t *dhd);
479 int dhd_wlfc_cleanup_txq(dhd_pub_t *dhd, f_processpkt_t fn, void *arg);
480 int dhd_wlfc_cleanup(dhd_pub_t *dhd, f_processpkt_t fn, void* arg);
481 int dhd_wlfc_deinit(dhd_pub_t *dhd);
482 int dhd_wlfc_interface_event(dhd_pub_t *dhdp, uint8 action, uint8 ifid, uint8 iftype, uint8* ea);
483 int dhd_wlfc_FIFOcreditmap_event(dhd_pub_t *dhdp, uint8* event_data);
484 int dhd_wlfc_BCMCCredit_support_event(dhd_pub_t *dhdp);
485 int dhd_wlfc_enable(dhd_pub_t *dhdp);
486 int dhd_wlfc_dump(dhd_pub_t *dhdp, struct bcmstrbuf *strbuf);
487 int dhd_wlfc_clear_counts(dhd_pub_t *dhd);
488 int dhd_wlfc_get_enable(dhd_pub_t *dhd, bool *val);
489 int dhd_wlfc_get_mode(dhd_pub_t *dhd, int *val);
490 int dhd_wlfc_set_mode(dhd_pub_t *dhd, int val);
491 bool dhd_wlfc_is_supported(dhd_pub_t *dhd);
492 bool dhd_wlfc_is_header_only_pkt(dhd_pub_t * dhd, void *pktbuf);
493 int dhd_wlfc_flowcontrol(dhd_pub_t *dhdp, bool state, bool bAcquireLock);
494 int dhd_wlfc_save_rxpath_ac_time(dhd_pub_t * dhd, uint8 prio);
496 int dhd_wlfc_get_module_ignore(dhd_pub_t *dhd, int *val);
497 int dhd_wlfc_set_module_ignore(dhd_pub_t *dhd, int val);
498 int dhd_wlfc_get_credit_ignore(dhd_pub_t *dhd, int *val);
499 int dhd_wlfc_set_credit_ignore(dhd_pub_t *dhd, int val);
500 int dhd_wlfc_get_txstatus_ignore(dhd_pub_t *dhd, int *val);
501 int dhd_wlfc_set_txstatus_ignore(dhd_pub_t *dhd, int val);
503 int dhd_wlfc_get_rxpkt_chk(dhd_pub_t *dhd, int *val);
504 int dhd_wlfc_set_rxpkt_chk(dhd_pub_t *dhd, int val);
505 #endif /* __wlfc_host_driver_definitions_h__ */