Lines Matching defs:group
44 * Define group sort order: HT40 -> SGI -> #streams
57 /* MCS rate information for an MCS group */
320 minstrel_ht_is_legacy_group(int group)
322 return group == MINSTREL_CCK_GROUP ||
323 group == MINSTREL_OFDM_GROUP;
327 * Look up an MCS group index based on mac80211 rate information
338 * Look up an MCS group index based on new cfg80211 rate_info.
358 * Look up an MCS group index based on new cfg80211 rate_info.
373 int group, idx;
376 group = minstrel_ht_get_group_idx(rate);
382 group = minstrel_vht_get_group_idx(rate);
387 group = MINSTREL_CCK_GROUP;
389 if (!(mi->supported[group] & BIT(idx)))
396 if ((mi->supported[group] & BIT(idx + 4)) &&
402 group = MINSTREL_OFDM_GROUP;
409 return &mi->groups[group].rates[idx];
419 int group, idx;
423 group = minstrel_ht_ri_get_group_idx(rate);
429 group = minstrel_vht_ri_get_group_idx(rate);
434 group = MINSTREL_CCK_GROUP;
440 if ((mi->supported[group] & BIT(idx + 4)) &&
446 group = MINSTREL_OFDM_GROUP;
453 return &mi->groups[group].rates[idx];
464 const struct mcs_group *group = &minstrel_mcs_groups[MI_RATE_GROUP(index)];
465 unsigned int duration = group->duration[MI_RATE_IDX(index)];
467 return duration << group->shift;
500 minstrel_ht_get_tp_avg(struct minstrel_ht_sta *mi, int group, int rate,
510 if (minstrel_ht_is_legacy_group(group))
516 nsecs += minstrel_mcs_groups[group].duration[rate] <<
517 minstrel_mcs_groups[group].shift;
571 * Find and set the topmost probability rate per sta and per group
635 * rate (max_tp_rate[0]) is from CCK group. This prohibits such sorted
674 int tmp_max_streams, group, tmp_idx, tmp_prob;
680 group = MI_RATE_GROUP(mi->max_tp_rate[0]);
681 tmp_max_streams = minstrel_mcs_groups[group].streams;
682 for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
683 mg = &mi->groups[group];
684 if (!mi->supported[group] || group == MINSTREL_CCK_GROUP)
688 tmp_prob = mi->groups[group].rates[tmp_idx].prob_avg;
690 if (tmp_tp < minstrel_ht_get_tp_avg(mi, group, tmp_idx, tmp_prob) &&
691 (minstrel_mcs_groups[group].streams < tmp_max_streams)) {
693 tmp_tp = minstrel_ht_get_tp_avg(mi, group,
850 minstrel_ht_group_min_rate_offset(struct minstrel_ht_sta *mi, int group,
853 u16 supported = mi->supported[group];
860 if (minstrel_get_duration(MI_RATE(group, i)) >= max_duration)
871 * Flip through groups and pick the first group rate that is faster than the
879 u8 group;
881 group = mi->sample[type].sample_group;
883 group = (group + 1) % ARRAY_SIZE(minstrel_mcs_groups);
885 index = minstrel_ht_group_min_rate_offset(mi, group,
890 index = MI_RATE(group, index & 0xf);
897 mi->sample[type].sample_group = group;
903 minstrel_ht_next_group_sample_rate(struct minstrel_ht_sta *mi, int group,
906 struct minstrel_mcs_group_data *mg = &mi->groups[group];
924 return MI_RATE(group, idx);
946 u8 group;
952 group = mi->sample[MINSTREL_SAMPLE_TYPE_JUMP].sample_group;
956 group = (group + 1) % ARRAY_SIZE(minstrel_mcs_groups);
958 supported = mi->supported[group];
962 offset = minstrel_ht_group_min_rate_offset(mi, group,
967 index = minstrel_ht_next_group_sample_rate(mi, group, supported,
1002 mi->sample[MINSTREL_SAMPLE_TYPE_JUMP].sample_group = group;
1063 int group, i, j, cur_prob;
1081 group = MINSTREL_CCK_GROUP;
1083 group = MINSTREL_OFDM_GROUP;
1085 group = 0;
1087 index = MI_RATE(group, 0);
1092 group = MINSTREL_VHT_GROUP_0;
1094 group = MINSTREL_HT_GROUP_0;
1096 group = MINSTREL_CCK_GROUP;
1098 group = MINSTREL_OFDM_GROUP;
1100 index = MI_RATE(group, 0);
1106 for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
1110 mg = &mi->groups[group];
1111 if (!mi->supported[group])
1114 /* (re)Initialize group rate indexes */
1116 tmp_group_tp_rate[j] = MI_RATE(group, 0);
1118 if (group == MINSTREL_CCK_GROUP && ht_supported)
1122 if (!(mi->supported[group] & BIT(i)))
1125 index = MI_RATE(group, i);
1137 if (minstrel_ht_get_tp_avg(mi, group, i, cur_prob) == 0)
1143 /* Find max throughput rate set within a group */
1157 for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
1158 if (!mi->supported[group])
1161 mg = &mi->groups[group];
1162 mg->max_group_prob_rate = MI_RATE(group, 0);
1165 if (!(mi->supported[group] & BIT(i)))
1168 index = MI_RATE(group, i);
1170 /* Find max probability rate per group and global */
1260 int group, orig_group;
1262 orig_group = group = MI_RATE_GROUP(*idx);
1263 while (group > 0) {
1264 group--;
1266 if (!mi->supported[group])
1269 if (minstrel_mcs_groups[group].streams >
1274 *idx = mi->groups[group].max_group_tp_rate[0];
1276 *idx = mi->groups[group].max_group_tp_rate[1];
1446 const struct mcs_group *group = &minstrel_mcs_groups[group_idx];
1449 u16 flags = group->flags;
1472 idx = ((group->streams - 1) << 4) |
1475 idx = index + (group->streams - 1) * 8;
1483 group->streams > 1)) {
1495 int group = MI_RATE_GROUP(rate);
1497 return mi->groups[group].rates[rate].prob_avg;
1503 int group = MI_RATE_GROUP(mi->max_prob_rate);
1504 const struct mcs_group *g = &minstrel_mcs_groups[group];
1509 if (mi->groups[group].rates[rate].prob_avg < MINSTREL_FRAC(50, 100))