]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
hostapd: Split hostapd_set_freq to helper function
authorJanusz Dziedzic <janusz.dziedzic@tieto.com>
Wed, 16 Oct 2013 09:18:52 +0000 (12:18 +0300)
committerJouni Malinen <j@w1.fi>
Thu, 17 Oct 2013 18:05:23 +0000 (21:05 +0300)
This allows the functionality to fill in a struct hostapd_freq_params to
be shared.

Signed-hostap: Janusz Dziedzic <janusz.dziedzic@tieto.com>

src/ap/ap_drv_ops.c

index cedfe8e13ed0c4b42193db57d635764cef8fe269..2cc32230831f35cf7eee254db05dddd013b5f38c 100644 (file)
@@ -463,44 +463,44 @@ int hostapd_flush(struct hostapd_data *hapd)
 }
 
 
-int hostapd_set_freq(struct hostapd_data *hapd, int mode, int freq,
-                    int channel, int ht_enabled, int vht_enabled,
-                    int sec_channel_offset, int vht_oper_chwidth,
-                    int center_segment0, int center_segment1)
+static int hostapd_set_freq_params(struct hostapd_freq_params *data, int mode,
+                                  int freq, int channel, int ht_enabled,
+                                  int vht_enabled, int sec_channel_offset,
+                                  int vht_oper_chwidth, int center_segment0,
+                                  int center_segment1)
 {
-       struct hostapd_freq_params data;
        int tmp;
 
-       os_memset(&data, 0, sizeof(data));
-       data.mode = mode;
-       data.freq = freq;
-       data.channel = channel;
-       data.ht_enabled = ht_enabled;
-       data.vht_enabled = vht_enabled;
-       data.sec_channel_offset = sec_channel_offset;
-       data.center_freq1 = freq + sec_channel_offset * 10;
-       data.center_freq2 = 0;
-       data.bandwidth = sec_channel_offset ? 40 : 20;
+       os_memset(data, 0, sizeof(*data));
+       data->mode = mode;
+       data->freq = freq;
+       data->channel = channel;
+       data->ht_enabled = ht_enabled;
+       data->vht_enabled = vht_enabled;
+       data->sec_channel_offset = sec_channel_offset;
+       data->center_freq1 = freq + sec_channel_offset * 10;
+       data->center_freq2 = 0;
+       data->bandwidth = sec_channel_offset ? 40 : 20;
 
        /*
         * This validation code is probably misplaced, maybe it should be
         * in src/ap/hw_features.c and check the hardware support as well.
         */
-       if (data.vht_enabled) switch (vht_oper_chwidth) {
+       if (data->vht_enabled) switch (vht_oper_chwidth) {
        case VHT_CHANWIDTH_USE_HT:
                if (center_segment1)
                        return -1;
-               if (5000 + center_segment0 * 5 != data.center_freq1)
+               if (5000 + center_segment0 * 5 != data->center_freq1)
                        return -1;
                break;
        case VHT_CHANWIDTH_80P80MHZ:
                if (center_segment1 == center_segment0 + 4 ||
                    center_segment1 == center_segment0 - 4)
                        return -1;
-               data.center_freq2 = 5000 + center_segment1 * 5;
+               data->center_freq2 = 5000 + center_segment1 * 5;
                /* fall through */
        case VHT_CHANWIDTH_80MHZ:
-               data.bandwidth = 80;
+               data->bandwidth = 80;
                if (vht_oper_chwidth == 1 && center_segment1)
                        return -1;
                if (vht_oper_chwidth == 3 && !center_segment1)
@@ -510,13 +510,13 @@ int hostapd_set_freq(struct hostapd_data *hapd, int mode, int freq,
                /* primary 40 part must match the HT configuration */
                tmp = (30 + freq - 5000 - center_segment0 * 5)/20;
                tmp /= 2;
-               if (data.center_freq1 != 5000 +
+               if (data->center_freq1 != 5000 +
                                         center_segment0 * 5 - 20 + 40 * tmp)
                        return -1;
-               data.center_freq1 = 5000 + center_segment0 * 5;
+               data->center_freq1 = 5000 + center_segment0 * 5;
                break;
        case VHT_CHANWIDTH_160MHZ:
-               data.bandwidth = 160;
+               data->bandwidth = 160;
                if (center_segment1)
                        return -1;
                if (!sec_channel_offset)
@@ -524,12 +524,30 @@ int hostapd_set_freq(struct hostapd_data *hapd, int mode, int freq,
                /* primary 40 part must match the HT configuration */
                tmp = (70 + freq - 5000 - center_segment0 * 5)/20;
                tmp /= 2;
-               if (data.center_freq1 != 5000 +
+               if (data->center_freq1 != 5000 +
                                         center_segment0 * 5 - 60 + 40 * tmp)
                        return -1;
-               data.center_freq1 = 5000 + center_segment0 * 5;
+               data->center_freq1 = 5000 + center_segment0 * 5;
                break;
        }
+
+       return 0;
+}
+
+
+int hostapd_set_freq(struct hostapd_data *hapd, int mode, int freq,
+                    int channel, int ht_enabled, int vht_enabled,
+                    int sec_channel_offset, int vht_oper_chwidth,
+                    int center_segment0, int center_segment1)
+{
+       struct hostapd_freq_params data;
+
+       if (hostapd_set_freq_params(&data, mode, freq, channel, ht_enabled,
+                                   vht_enabled, sec_channel_offset,
+                                   vht_oper_chwidth,
+                                   center_segment0, center_segment1))
+               return -1;
+
        if (hapd->driver == NULL)
                return 0;
        if (hapd->driver->set_freq == NULL)