Lines Matching +full:max +full:- +full:cur

24  * <<Broadcom-WL-IPTag/Open:>>
112 ASSERT(flowid <= dhdp->max_tx_flowid); in dhd_flow_ring_node()
113 if (flowid > dhdp->max_tx_flowid) { in dhd_flow_ring_node()
117 flow_ring_node = &(((flow_ring_node_t*)(dhdp->flow_ring_table))[flowid]); in dhd_flow_ring_node()
119 ASSERT(flow_ring_node->flowid == flowid); in dhd_flow_ring_node()
131 return &flow_ring_node->queue; in dhd_flow_queue()
140 dhd_flow_queue_reinit(dhd_pub_t *dhdp, flow_queue_t *queue, int max) in dhd_flow_queue_reinit() argument
142 ASSERT((queue != NULL) && (max > 0)); in dhd_flow_queue_reinit()
144 queue->head = queue->tail = NULL; in dhd_flow_queue_reinit()
145 queue->len = 0; in dhd_flow_queue_reinit()
148 ASSERT(max > 1); in dhd_flow_queue_reinit()
149 DHD_FLOW_QUEUE_SET_MAX(queue, max); in dhd_flow_queue_reinit()
150 DHD_FLOW_QUEUE_SET_THRESHOLD(queue, max); in dhd_flow_queue_reinit()
151 DHD_FLOW_QUEUE_SET_CLEN(queue, &dhdp->cumm_ctr); in dhd_flow_queue_reinit()
152 DHD_FLOW_QUEUE_SET_L2CLEN(queue, &dhdp->l2cumm_ctr); in dhd_flow_queue_reinit()
154 queue->failures = 0U; in dhd_flow_queue_reinit()
155 queue->cb = &dhd_flow_queue_overflow; in dhd_flow_queue_reinit()
160 dhd_flow_queue_init(dhd_pub_t *dhdp, flow_queue_t *queue, int max) in dhd_flow_queue_init() argument
162 ASSERT((queue != NULL) && (max > 0)); in dhd_flow_queue_init()
164 dll_init(&queue->list); in dhd_flow_queue_init()
165 dhd_flow_queue_reinit(dhdp, queue, max); in dhd_flow_queue_init()
173 queue->cb = cb; in dhd_flow_queue_register()
188 queue->failures++; in BCMFASTPATH()
189 ret = (*queue->cb)(queue, pkt); in BCMFASTPATH()
193 if (queue->head) { in BCMFASTPATH()
194 FLOW_QUEUE_PKT_SETNEXT(queue->tail, pkt); in BCMFASTPATH()
196 queue->head = pkt; in BCMFASTPATH()
201 queue->tail = pkt; /* at tail */ in BCMFASTPATH()
203 queue->len++; in BCMFASTPATH()
221 queue->failures++; in BCMFASTPATH()
222 ret = (*queue->cb)(queue, pkt); in BCMFASTPATH()
226 if (queue->head) { in BCMFASTPATH()
227 FLOW_QUEUE_PKT_SETNEXT(pkt, queue->head); in BCMFASTPATH()
228 queue->head = pkt; in BCMFASTPATH()
231 queue->head = pkt; in BCMFASTPATH()
233 queue->tail = pkt; /* at tail */ in BCMFASTPATH()
236 queue->len++; in BCMFASTPATH()
254 pkt = queue->head; /* from head */ in BCMFASTPATH()
257 ASSERT((queue->len == 0) && (queue->tail == NULL)); in BCMFASTPATH()
261 queue->head = FLOW_QUEUE_PKT_NEXT(pkt); in BCMFASTPATH()
262 if (queue->head == NULL) in BCMFASTPATH()
263 queue->tail = NULL; in BCMFASTPATH()
265 queue->len--; in BCMFASTPATH()
281 if (queue->head == NULL) { in BCMFASTPATH()
282 queue->tail = pkt; in BCMFASTPATH()
285 FLOW_QUEUE_PKT_SETNEXT(pkt, queue->head); in BCMFASTPATH()
286 queue->head = pkt; in BCMFASTPATH()
287 queue->len++; in BCMFASTPATH()
311 DHD_FLOW_QUEUE_SET_MAX(queue, queue_budget); /* Max queue length */ in dhd_flow_ring_config_thresholds()
339 if (dhdp->flow_prio_map[i] == dhdp->flow_prio_map[j]) { in dhd_num_prio_supported_per_flow_ring()
357 uint8 max_multi_client_flow_rings = total_tx_flow_rings - reserved_infra_sta_flow_rings; in dhd_get_max_multi_client_flow_rings()
365 uint16 max_normal_tx_flow_rings = max_tx_flow_rings - HTPUT_TOTAL_FLOW_RINGS; in dhd_flowid_map_init()
371 * (max_normal_tx_flow_rings - 1) in dhd_flowid_map_init()
373 dhdp->flowid_allocator = id16_map_init(dhdp->osh, max_normal_tx_flow_rings, in dhd_flowid_map_init()
375 if (dhdp->flowid_allocator == NULL) { in dhd_flowid_map_init()
382 dhdp->htput_flow_ring_start = max_normal_tx_flow_rings + FLOWID_RESERVED; in dhd_flowid_map_init()
384 * (htput_flow_ring_start + HTPUT_TOTAL_FLOW_RINGS - 1) in dhd_flowid_map_init()
386 dhdp->htput_flowid_allocator = id16_map_init(dhdp->osh, HTPUT_TOTAL_FLOW_RINGS, in dhd_flowid_map_init()
387 dhdp->htput_flow_ring_start); in dhd_flowid_map_init()
388 if (dhdp->htput_flowid_allocator == NULL) { in dhd_flowid_map_init()
392 dhdp->htput_client_flow_rings = 0u; in dhd_flowid_map_init()
402 if (dhdp->flowid_allocator) { in dhd_flowid_map_deinit()
403 dhdp->flowid_allocator = id16_map_fini(dhdp->osh, dhdp->flowid_allocator); in dhd_flowid_map_deinit()
405 ASSERT(dhdp->flowid_allocator == NULL); in dhd_flowid_map_deinit()
408 if (dhdp->htput_flowid_allocator) { in dhd_flowid_map_deinit()
409 dhdp->htput_flowid_allocator = id16_map_fini(dhdp->osh, in dhd_flowid_map_deinit()
410 dhdp->htput_flowid_allocator); in dhd_flowid_map_deinit()
411 ASSERT(dhdp->htput_flowid_allocator == NULL); in dhd_flowid_map_deinit()
413 dhdp->htput_client_flow_rings = 0u; in dhd_flowid_map_deinit()
419 * num_h2d_rings - max_h2d_rings including static and dynamic rings
437 * Only 16-bit flowid map will be allocated for actual number of Tx flowrings in dhd_flow_rings_init()
448 dhdp->max_tx_flowid = max_tx_flow_rings + FLOWID_RESERVED - 1; in dhd_flow_rings_init()
452 flow_ring_table = (flow_ring_table_t *)MALLOCZ(dhdp->osh, flow_ring_table_sz); in dhd_flow_rings_init()
459 DHD_CUMM_CTR_INIT(&dhdp->cumm_ctr); in dhd_flow_rings_init()
460 DHD_CUMM_CTR_INIT(&dhdp->l2cumm_ctr); in dhd_flow_rings_init()
465 flow_ring_table[idx].lock = osl_spin_lock_init(dhdp->osh); in dhd_flow_rings_init()
478 dhdp->conf->flow_ring_queue_threshold); in dhd_flow_rings_init()
499 lock = osl_spin_lock_init(dhdp->osh); in dhd_flow_rings_init()
503 list_lock = osl_spin_lock_init(dhdp->osh); in dhd_flow_rings_init()
507 dhdp->flow_prio_map_type = DHD_FLOW_PRIO_AC_MAP; in dhd_flow_rings_init()
508 bcopy(prio2ac, dhdp->flow_prio_map, sizeof(uint8) * NUMPRIO); in dhd_flow_rings_init()
510 dhdp->max_multi_client_flow_rings = dhd_get_max_multi_client_flow_rings(dhdp); in dhd_flow_rings_init()
511 dhdp->multi_client_flow_rings = 0U; in dhd_flow_rings_init()
514 dhdp->dequeue_prec_map = ALLPRIO; in dhd_flow_rings_init()
518 dhdp->num_h2d_rings = num_h2d_rings; in dhd_flow_rings_init()
519 dhdp->flow_ring_table = (void *)flow_ring_table; in dhd_flow_rings_init()
520 dhdp->if_flow_lkup = (void *)if_flow_lkup; in dhd_flow_rings_init()
521 dhdp->flowid_lock = lock; in dhd_flow_rings_init()
522 dhdp->flow_rings_inited = TRUE; in dhd_flow_rings_init()
523 dhdp->flowring_list_lock = list_lock; in dhd_flow_rings_init()
531 osl_spin_lock_deinit(dhdp->osh, lock); in dhd_flow_rings_init()
541 osl_spin_lock_deinit(dhdp->osh, flow_ring_table[idx].lock); in dhd_flow_rings_init()
543 MFREE(dhdp->osh, flow_ring_table, flow_ring_table_sz); in dhd_flow_rings_init()
562 if (!(dhdp->flow_rings_inited)) { in dhd_flow_rings_deinit()
567 if (dhdp->flow_ring_table != NULL) { in dhd_flow_rings_deinit()
569 ASSERT(dhdp->num_h2d_rings > 0); in dhd_flow_rings_deinit()
571 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_flow_rings_deinit()
572 flow_ring_table = (flow_ring_table_t *)dhdp->flow_ring_table; in dhd_flow_rings_deinit()
573 dhdp->flow_ring_table = NULL; in dhd_flow_rings_deinit()
574 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flow_rings_deinit()
575 for (idx = 0; idx < dhdp->num_h2d_rings; idx++) { in dhd_flow_rings_deinit()
577 dhd_bus_clean_flow_ring(dhdp->bus, &flow_ring_table[idx]); in dhd_flow_rings_deinit()
583 osl_spin_lock_deinit(dhdp->osh, flow_ring_table[idx].lock); in dhd_flow_rings_deinit()
590 flow_ring_table_sz = dhdp->num_h2d_rings * sizeof(flow_ring_table_t); in dhd_flow_rings_deinit()
591 MFREE(dhdp->osh, flow_ring_table, flow_ring_table_sz); in dhd_flow_rings_deinit()
594 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_flow_rings_deinit()
597 if (dhdp->if_flow_lkup != NULL) { in dhd_flow_rings_deinit()
599 bzero((uchar *)dhdp->if_flow_lkup, if_flow_lkup_sz); in dhd_flow_rings_deinit()
600 DHD_OS_PREFREE(dhdp, dhdp->if_flow_lkup, if_flow_lkup_sz); in dhd_flow_rings_deinit()
601 dhdp->if_flow_lkup = NULL; in dhd_flow_rings_deinit()
607 dhdp->num_h2d_rings = 0U; in dhd_flow_rings_deinit()
608 bzero(dhdp->flow_prio_map, sizeof(uint8) * NUMPRIO); in dhd_flow_rings_deinit()
610 dhdp->max_multi_client_flow_rings = 0U; in dhd_flow_rings_deinit()
611 dhdp->multi_client_flow_rings = 0U; in dhd_flow_rings_deinit()
613 lock = dhdp->flowid_lock; in dhd_flow_rings_deinit()
614 dhdp->flowid_lock = NULL; in dhd_flow_rings_deinit()
618 osl_spin_lock_deinit(dhdp->osh, lock); in dhd_flow_rings_deinit()
621 osl_spin_lock_deinit(dhdp->osh, dhdp->flowring_list_lock); in dhd_flow_rings_deinit()
622 dhdp->flowring_list_lock = NULL; in dhd_flow_rings_deinit()
624 ASSERT(dhdp->if_flow_lkup == NULL); in dhd_flow_rings_deinit()
625 ASSERT(dhdp->flow_ring_table == NULL); in dhd_flow_rings_deinit()
626 dhdp->flow_rings_inited = FALSE; in dhd_flow_rings_deinit()
633 if_flow_lkup_t *if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_flow_rings_ifindex2role()
642 tdls_peer_node_t *cur = NULL; in is_tdls_destination() local
644 DHD_TDLS_LOCK(&dhdp->tdls_lock, flags); in is_tdls_destination()
646 if (dhdp->peer_tbl.tdls_peer_count && !(ETHER_ISMULTI(da))) { in is_tdls_destination()
647 cur = dhdp->peer_tbl.node; in is_tdls_destination()
649 while (cur != NULL) { in is_tdls_destination()
650 if (!memcmp(da, cur->addr, ETHER_ADDR_LEN)) { in is_tdls_destination()
651 DHD_TDLS_UNLOCK(&dhdp->tdls_lock, flags); in is_tdls_destination()
654 cur = cur->next; in is_tdls_destination()
657 DHD_TDLS_UNLOCK(&dhdp->tdls_lock, flags); in is_tdls_destination()
668 flow_hash_info_t *cur; in dhd_flowid_find() local
676 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_flowid_find()
677 if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_flowid_find()
685 cur = if_flow_lkup[ifindex].fl_hash[hash]; in dhd_flowid_find()
686 while (cur != NULL) { in dhd_flowid_find()
687 if (!memcmp(cur->flow_info.da, da, ETHER_ADDR_LEN)) { in dhd_flowid_find()
688 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_find()
689 return cur->flowid; in dhd_flowid_find()
691 cur = cur->next; in dhd_flowid_find()
693 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_find()
698 cur = if_flow_lkup[ifindex].fl_hash[prio]; in dhd_flowid_find()
699 if (cur) { in dhd_flowid_find()
700 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_find()
701 return cur->flowid; in dhd_flowid_find()
712 cur = if_flow_lkup[ifindex].fl_hash[hash]; in dhd_flowid_find()
714 while (cur) { in dhd_flowid_find()
715 if ((ismcast && ETHER_ISMULTI(cur->flow_info.da)) || in dhd_flowid_find()
716 (!memcmp(cur->flow_info.da, da, ETHER_ADDR_LEN) && in dhd_flowid_find()
717 (cur->flow_info.tid == prio))) { in dhd_flowid_find()
718 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_find()
719 return cur->flowid; in dhd_flowid_find()
721 cur = cur->next; in dhd_flowid_find()
724 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_find()
738 ASSERT(dhdp->flowid_allocator != NULL); in dhd_flowid_map_alloc()
741 if (dhdp->htput_flowid_allocator) { in dhd_flowid_map_alloc()
750 flowid = id16_map_alloc(dhdp->htput_flowid_allocator); in dhd_flowid_map_alloc()
753 if (dhdp->htput_client_flow_rings < HTPUT_NUM_CLIENT_FLOW_RINGS) { in dhd_flowid_map_alloc()
754 flowid = id16_map_alloc(dhdp->htput_flowid_allocator); in dhd_flowid_map_alloc()
757 dhdp->htput_client_flow_rings++; in dhd_flowid_map_alloc()
772 flowid = id16_map_alloc(dhdp->flowid_allocator); in dhd_flowid_map_alloc()
782 flow_hash_info_t *fl_hash_node, *cur; in dhd_flowid_alloc() local
788 fl_hash_node = (flow_hash_info_t *) MALLOCZ(dhdp->osh, sizeof(flow_hash_info_t)); in dhd_flowid_alloc()
793 memcpy(fl_hash_node->flow_info.da, da, sizeof(fl_hash_node->flow_info.da)); in dhd_flowid_alloc()
795 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_flowid_alloc()
797 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_alloc()
800 MFREE(dhdp->osh, fl_hash_node, sizeof(flow_hash_info_t)); in dhd_flowid_alloc()
805 fl_hash_node->flowid = flowid; in dhd_flowid_alloc()
806 fl_hash_node->flow_info.tid = prio; in dhd_flowid_alloc()
807 fl_hash_node->flow_info.ifindex = ifindex; in dhd_flowid_alloc()
808 fl_hash_node->next = NULL; in dhd_flowid_alloc()
810 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_flowid_alloc()
811 if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_flowid_alloc()
818 cur = if_flow_lkup[ifindex].fl_hash[hash]; in dhd_flowid_alloc()
819 if (cur) { in dhd_flowid_alloc()
820 while (cur->next) { in dhd_flowid_alloc()
821 cur = cur->next; in dhd_flowid_alloc()
823 cur->next = fl_hash_node; in dhd_flowid_alloc()
834 cur = if_flow_lkup[ifindex].fl_hash[hash]; in dhd_flowid_alloc()
835 if (cur) { in dhd_flowid_alloc()
836 while (cur->next) { in dhd_flowid_alloc()
837 cur = cur->next; in dhd_flowid_alloc()
839 cur->next = fl_hash_node; in dhd_flowid_alloc()
843 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_alloc()
845 DHD_FLOWRING_INFO(("%s: allocated flowid %d\n", __FUNCTION__, fl_hash_node->flowid)); in dhd_flowid_alloc()
847 if (fl_hash_node->flowid > dhdp->max_tx_flowid) { in dhd_flowid_alloc()
849 __FUNCTION__, fl_hash_node->flowid, dhdp->max_tx_flowid, in dhd_flowid_alloc()
856 return fl_hash_node->flowid; in dhd_flowid_alloc()
872 if (!dhdp->flow_ring_table) { in dhd_flowid_lookup()
880 flow_ring_table = (flow_ring_table_t *)dhdp->flow_ring_table; in dhd_flowid_lookup()
887 if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_flowid_lookup()
898 (dhdp->multi_client_flow_rings >= dhdp->max_multi_client_flow_rings)) { in dhd_flowid_lookup()
899 DHD_ERROR_RLMT(("%s: Max multi client flow rings reached: %d:%d\n", in dhd_flowid_lookup()
900 __FUNCTION__, dhdp->multi_client_flow_rings, in dhd_flowid_lookup()
901 dhdp->max_multi_client_flow_rings)); in dhd_flowid_lookup()
922 ASSERT(id <= dhdp->max_tx_flowid); in dhd_flowid_lookup()
926 dhdp->multi_client_flow_rings++; in dhd_flowid_lookup()
934 DHD_FLOWRING_LOCK(flow_ring_node->lock, flags); in dhd_flowid_lookup()
937 memcpy(flow_ring_node->flow_info.sa, sa, sizeof(flow_ring_node->flow_info.sa)); in dhd_flowid_lookup()
938 memcpy(flow_ring_node->flow_info.da, da, sizeof(flow_ring_node->flow_info.da)); in dhd_flowid_lookup()
939 flow_ring_node->flow_info.tid = prio; in dhd_flowid_lookup()
940 flow_ring_node->flow_info.ifindex = ifindex; in dhd_flowid_lookup()
941 flow_ring_node->active = TRUE; in dhd_flowid_lookup()
942 flow_ring_node->status = FLOW_RING_STATUS_CREATE_PENDING; in dhd_flowid_lookup()
945 flow_ring_node->tx_cmpl = flow_ring_node->tx_cmpl_prev = OSL_SYSUPTIME(); in dhd_flowid_lookup()
946 flow_ring_node->stuck_count = 0; in dhd_flowid_lookup()
949 flow_ring_node->flow_info.num_tx_status = 0; in dhd_flowid_lookup()
950 flow_ring_node->flow_info.cum_tx_status_latency = 0; in dhd_flowid_lookup()
951 flow_ring_node->flow_info.num_tx_pkts = 0; in dhd_flowid_lookup()
954 bzero(&flow_ring_node->flow_info.tx_status[0], in dhd_flowid_lookup()
957 DHD_FLOWRING_UNLOCK(flow_ring_node->lock, flags); in dhd_flowid_lookup()
960 if (dhd_bus_flow_ring_create_request(dhdp->bus, (void *)flow_ring_node) in dhd_flowid_lookup()
962 DHD_FLOWRING_LOCK(flow_ring_node->lock, flags); in dhd_flowid_lookup()
963 flow_ring_node->status = FLOW_RING_STATUS_CLOSED; in dhd_flowid_lookup()
964 flow_ring_node->active = FALSE; in dhd_flowid_lookup()
965 DHD_FLOWRING_UNLOCK(flow_ring_node->lock, flags); in dhd_flowid_lookup()
975 if (id > dhdp->max_tx_flowid) { in dhd_flowid_lookup()
977 __FUNCTION__, id, dhdp->max_tx_flowid)); in dhd_flowid_lookup()
984 DHD_FLOWRING_LOCK(flow_ring_node->lock, flags); in dhd_flowid_lookup()
1008 if (flow_ring_node->status == FLOW_RING_STATUS_DELETE_PENDING || in dhd_flowid_lookup()
1009 flow_ring_node->status == FLOW_RING_STATUS_CLOSED) { in dhd_flowid_lookup()
1017 DHD_FLOWRING_UNLOCK(flow_ring_node->lock, flags); in dhd_flowid_lookup()
1027 flow_hash_info_t *cur; in dhd_flowid_find_by_ifidx() local
1031 if (!dhdp->flow_ring_table) { in dhd_flowid_find_by_ifidx()
1032 DHD_ERROR(("%s : dhd->flow_ring_table is NULL\n", __FUNCTION__)); in dhd_flowid_find_by_ifidx()
1036 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_flowid_find_by_ifidx()
1037 if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_flowid_find_by_ifidx()
1039 cur = if_flow_lkup[ifindex].fl_hash[hashidx]; in dhd_flowid_find_by_ifidx()
1040 if (cur) { in dhd_flowid_find_by_ifidx()
1041 if (cur->flowid == flowid) { in dhd_flowid_find_by_ifidx()
1045 while (!found && cur) { in dhd_flowid_find_by_ifidx()
1046 if (cur->flowid == flowid) { in dhd_flowid_find_by_ifidx()
1050 cur = cur->next; in dhd_flowid_find_by_ifidx()
1054 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_find_by_ifidx()
1059 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_find_by_ifidx()
1078 uint8 *pktdata = (uint8 *)PKTDATA(dhdp->osh, pktbuf); in BCMFASTPATH()
1088 if (!dhdp->flowid_allocator) { in BCMFASTPATH()
1093 if (dhd_flowid_lookup(dhdp, ifindex, prio, (char *)eh->ether_shost, (char *)eh->ether_dhost, in BCMFASTPATH()
1109 if (dhdp->htput_flowid_allocator) { in dhd_flowid_map_free()
1111 id16_map_free(dhdp->htput_flowid_allocator, flowid); in dhd_flowid_map_free()
1114 dhdp->htput_client_flow_rings--; in dhd_flowid_map_free()
1121 id16_map_free(dhdp->flowid_allocator, flowid); in dhd_flowid_map_free()
1131 flow_hash_info_t *cur, *prev; in dhd_flowid_free() local
1140 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_flowid_free()
1141 if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_flowid_free()
1147 cur = if_flow_lkup[ifindex].fl_hash[hashix]; in dhd_flowid_free()
1149 if (cur) { in dhd_flowid_free()
1150 if (cur->flowid == flowid) { in dhd_flowid_free()
1155 while (!found && cur) { in dhd_flowid_free()
1156 if (cur->flowid == flowid) { in dhd_flowid_free()
1160 prev = cur; in dhd_flowid_free()
1161 cur = cur->next; in dhd_flowid_free()
1165 if_flow_lkup[ifindex].fl_hash[hashix] = cur->next; in dhd_flowid_free()
1167 prev->next = cur->next; in dhd_flowid_free()
1172 dhdp->multi_client_flow_rings--; in dhd_flowid_free()
1179 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_free()
1180 MFREE(dhdp->osh, cur, sizeof(flow_hash_info_t)); in dhd_flowid_free()
1187 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_flowid_free()
1208 if (!dhdp->flow_ring_table) in dhd_flow_rings_delete()
1211 flow_ring_table = (flow_ring_table_t *)dhdp->flow_ring_table; in dhd_flow_rings_delete()
1212 for (id = 0; id < dhdp->num_h2d_rings; id++) { in dhd_flow_rings_delete()
1216 dhd_bus_flow_ring_delete_request(dhdp->bus, in dhd_flow_rings_delete()
1234 if (!dhdp->flow_ring_table) in dhd_flow_rings_flush()
1236 flow_ring_table = (flow_ring_table_t *)dhdp->flow_ring_table; in dhd_flow_rings_flush()
1238 for (id = 0; id < dhdp->num_h2d_rings; id++) { in dhd_flow_rings_flush()
1242 dhd_bus_flow_ring_flush_request(dhdp->bus, in dhd_flow_rings_flush()
1261 if (!dhdp->flow_ring_table) in dhd_flow_rings_delete_for_peer()
1264 flow_ring_table = (flow_ring_table_t *)dhdp->flow_ring_table; in dhd_flow_rings_delete_for_peer()
1265 for (id = 0; id < dhdp->num_h2d_rings; id++) { in dhd_flow_rings_delete_for_peer()
1282 dhd_bus_flow_ring_delete_request(dhdp->bus, in dhd_flow_rings_delete_for_peer()
1302 if (!dhdp->flowid_allocator) { in dhd_update_interface_flow_info()
1307 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_update_interface_flow_info()
1308 if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_update_interface_flow_info()
1331 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_update_interface_flow_info()
1347 DHD_FLOWID_LOCK(dhdp->flowid_lock, flags); in dhd_update_interface_link_status()
1348 if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_update_interface_link_status()
1356 DHD_FLOWID_UNLOCK(dhdp->flowid_lock, flags); in dhd_update_interface_link_status()
1371 if (map == dhdp->flow_prio_map_type) in dhd_update_flow_prio_map()
1375 for (flowid = 0; flowid < dhdp->num_h2d_rings; flowid++) { in dhd_update_flow_prio_map()
1377 if (flow_ring_node->active) in dhd_update_flow_prio_map()
1386 dhdp->flow_prio_map_type = map; in dhd_update_flow_prio_map()
1387 if (dhdp->flow_prio_map_type == DHD_FLOW_PRIO_TID_MAP) in dhd_update_flow_prio_map()
1388 bcopy(prio2tid, dhdp->flow_prio_map, sizeof(uint8) * NUMPRIO); in dhd_update_flow_prio_map()
1390 bcopy(prio2ac, dhdp->flow_prio_map, sizeof(uint8) * NUMPRIO); in dhd_update_flow_prio_map()
1392 dhdp->max_multi_client_flow_rings = dhd_get_max_multi_client_flow_rings(dhdp); in dhd_update_flow_prio_map()
1436 dhd_bus_t *bus = dhd->bus; in dhd_active_tx_flowring_bkpq_len()
1439 DHD_FLOWRING_LIST_LOCK(bus->dhd->flowring_list_lock, list_lock_flags); in dhd_active_tx_flowring_bkpq_len()
1441 for (item = dll_tail_p(&bus->flowring_active_list); in dhd_active_tx_flowring_bkpq_len()
1442 !dll_end(&bus->flowring_active_list, item); item = prev) { in dhd_active_tx_flowring_bkpq_len()
1447 if (flow_ring_node->active) { in dhd_active_tx_flowring_bkpq_len()
1448 DHD_INFO(("%s :%d\n", __FUNCTION__, flow_ring_node->queue.len)); in dhd_active_tx_flowring_bkpq_len()
1449 active_tx_flowring_qlen += flow_ring_node->queue.len; in dhd_active_tx_flowring_bkpq_len()
1452 DHD_FLOWRING_LIST_UNLOCK(bus->dhd->flowring_list_lock, list_lock_flags); in dhd_active_tx_flowring_bkpq_len()
1473 if_flow_lkup = (if_flow_lkup_t *)dhdp->if_flow_lkup; in dhd_awdl_peer_op()
1491 if (peer->opcode == AWDL_PEER_OP_DEL) { in dhd_awdl_peer_op()
1492 dhd_del_sta(dhdp, ifindex, &peer->addr.octet[0]); in dhd_awdl_peer_op()
1493 dhd_flow_rings_delete_for_peer(dhdp, ifindex, (char *)&peer->addr.octet[0]); in dhd_awdl_peer_op()
1494 } else if (peer->opcode == AWDL_PEER_OP_ADD) { in dhd_awdl_peer_op()
1495 dhd_findadd_sta(dhdp, ifindex, &peer->addr.octet[0]); in dhd_awdl_peer_op()