Lines Matching defs:group
46 * Define group sort order: HT40 -> SGI -> #streams
59 /* MCS rate information for an MCS group */
283 * Look up an MCS group index based on mac80211 rate information
306 int group, idx;
309 group = minstrel_ht_get_group_idx(rate);
312 group = minstrel_vht_get_group_idx(rate);
315 group = MINSTREL_CCK_GROUP;
322 if ((mi->supported[group] & BIT(idx + 4)) &&
326 return &mi->groups[group].rates[idx];
349 minstrel_ht_get_tp_avg(struct minstrel_ht_sta *mi, int group, int rate,
358 if (group != MINSTREL_CCK_GROUP)
361 nsecs += minstrel_mcs_groups[group].duration[rate] <<
362 minstrel_mcs_groups[group].shift;
417 * Find and set the topmost probability rate per sta and per group
472 * rate (max_tp_rate[0]) is from CCK group. This prohibits such sorted
511 int tmp_max_streams, group, tmp_idx, tmp_prob;
516 for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
517 mg = &mi->groups[group];
518 if (!mi->supported[group] || group == MINSTREL_CCK_GROUP)
522 tmp_prob = mi->groups[group].rates[tmp_idx].prob_avg;
524 if (tmp_tp < minstrel_ht_get_tp_avg(mi, group, tmp_idx, tmp_prob) &&
525 (minstrel_mcs_groups[group].streams < tmp_max_streams)) {
527 tmp_tp = minstrel_ht_get_tp_avg(mi, group,
537 const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES];
538 unsigned int duration = group->duration[index % MCS_GROUP_RATES];
539 return duration << group->shift;
544 int tp_idx, const struct mcs_group *group)
546 if (group->bw < tp_group->bw)
549 if (group->streams == tp_group->streams)
552 if (tp_idx < 4 && group->streams == tp_group->streams - 1)
555 return group->streams == tp_group->streams + 1;
562 const struct mcs_group *group, *tp_group;
579 group = &minstrel_mcs_groups[g];
580 if (!minstrel_ht_probe_group(mi, tp_group, tp_idx, group))
589 if ((group->duration[i] << group->shift) > max_dur)
632 /* If no suitable rate was found, try to pick the next one in the group */
676 int group, i, j, cur_prob;
721 for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
723 mg = &mi->groups[group];
724 if (!mi->supported[group])
729 /* (re)Initialize group rate indexes */
731 tmp_group_tp_rate[j] = MCS_GROUP_RATES * group;
734 if (!(mi->supported[group] & BIT(i)))
737 index = MCS_GROUP_RATES * group + i;
744 if (minstrel_ht_get_tp_avg(mi, group, i, cur_prob) == 0)
748 if (group != MINSTREL_CCK_GROUP) {
751 } else if (group == MINSTREL_CCK_GROUP) {
756 /* Find max throughput rate set within a group */
760 /* Find max probability rate per group and global */
841 int group, orig_group;
843 orig_group = group = *idx / MCS_GROUP_RATES;
844 while (group > 0) {
845 group--;
847 if (!mi->supported[group])
850 if (minstrel_mcs_groups[group].streams >
855 *idx = mi->groups[group].max_group_tp_rate[0];
857 *idx = mi->groups[group].max_group_tp_rate[1];
1064 const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES];
1067 u16 flags = group->flags;
1086 idx = ((group->streams - 1) << 4) |
1089 idx = index % MCS_GROUP_RATES + (group->streams - 1) * 8;
1097 group->streams > 1)) {
1109 int group = rate / MCS_GROUP_RATES;
1111 return mi->groups[group].rates[rate].prob_avg;
1117 int group = mi->max_prob_rate / MCS_GROUP_RATES;
1118 const struct mcs_group *g = &minstrel_mcs_groups[group];
1123 if (mi->groups[group].rates[rate].prob_avg < MINSTREL_FRAC(50, 100))
1258 * below the per-group max throughput rate, and only use one sampling