]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/wireless/libertas/11d.c
[PATCH] libertas: pass boot2 version to firmware
[linux-2.6-omap-h63xx.git] / drivers / net / wireless / libertas / 11d.c
index e0ecc4d483bb773edc269013ecb7000c8c17d869..8b366ef2fe953e024fcce99415ebc2313c51ef86 100644 (file)
@@ -95,7 +95,7 @@ static u8 wlan_get_chan_11d(u8 band, u8 firstchan, u8 nrchan, u8 * chan)
 
        for (i = 0; i < cfp_no; i++) {
                if ((cfp + i)->channel == firstchan) {
-                       lbs_pr_debug(1, "firstchan found\n");
+                       lbs_deb_11d("firstchan found\n");
                        break;
                }
        }
@@ -124,17 +124,17 @@ static u8 wlan_channel_known_11d(u8 chan,
        u8 nr_chan = parsed_region_chan->nr_chan;
        u8 i = 0;
 
-       lbs_dbg_hex("11D:parsed_region_chan:", (char *)chanpwr,
+       lbs_deb_hex(LBS_DEB_11D, "parsed_region_chan", (char *)chanpwr,
                sizeof(struct chan_power_11d) * nr_chan);
 
        for (i = 0; i < nr_chan; i++) {
                if (chan == chanpwr[i].chan) {
-                       lbs_pr_debug(1, "11D: Found Chan:%d\n", chan);
+                       lbs_deb_11d("found chan %d\n", chan);
                        return 1;
                }
        }
 
-       lbs_pr_debug(1, "11D: Not Find Chan:%d\n", chan);
+       lbs_deb_11d("chan %d not found\n", chan);
        return 0;
 }
 
@@ -174,8 +174,8 @@ static int generate_domain_info_11d(struct parsed_region_chan_11d
        memcpy(domaininfo->countrycode, parsed_region_chan->countrycode,
               COUNTRY_CODE_LEN);
 
-       lbs_pr_debug(1, "11D:nrchan=%d\n", nr_chan);
-       lbs_dbg_hex("11D:parsed_region_chan:", (char *)parsed_region_chan,
+       lbs_deb_11d("nrchan %d\n", nr_chan);
+       lbs_deb_hex(LBS_DEB_11D, "parsed_region_chan", (char *)parsed_region_chan,
                sizeof(struct parsed_region_chan_11d));
 
        for (i = 0; i < nr_chan; i++) {
@@ -212,8 +212,8 @@ static int generate_domain_info_11d(struct parsed_region_chan_11d
        }
        domaininfo->nr_subband = nr_subband;
 
-       lbs_pr_debug(1, "nr_subband=%x\n", domaininfo->nr_subband);
-       lbs_dbg_hex("11D:domaininfo:", (char *)domaininfo,
+       lbs_deb_11d("nr_subband=%x\n", domaininfo->nr_subband);
+       lbs_deb_hex(LBS_DEB_11D, "domaininfo", (char *)domaininfo,
                COUNTRY_CODE_LEN + 1 +
                sizeof(struct ieeetypes_subbandset) * nr_subband);
        return 0;
@@ -233,13 +233,13 @@ static void wlan_generate_parsed_region_chan_11d(struct region_channel * region_
        struct chan_freq_power *cfp;
 
        if (region_chan == NULL) {
-               lbs_pr_debug(1, "11D: region_chan is NULL\n");
+               lbs_deb_11d("region_chan is NULL\n");
                return;
        }
 
        cfp = region_chan->CFP;
        if (cfp == NULL) {
-               lbs_pr_debug(1, "11D: cfp equal NULL \n");
+               lbs_deb_11d("cfp is NULL \n");
                return;
        }
 
@@ -248,19 +248,19 @@ static void wlan_generate_parsed_region_chan_11d(struct region_channel * region_
        memcpy(parsed_region_chan->countrycode,
               wlan_code_2_region(region_chan->region), COUNTRY_CODE_LEN);
 
-       lbs_pr_debug(1, "11D: region[0x%x] band[%d]\n", parsed_region_chan->region,
+       lbs_deb_11d("region 0x%x, band %d\n", parsed_region_chan->region,
               parsed_region_chan->band);
 
        for (i = 0; i < region_chan->nrcfp; i++, cfp++) {
                parsed_region_chan->chanpwr[i].chan = cfp->channel;
                parsed_region_chan->chanpwr[i].pwr = cfp->maxtxpower;
-               lbs_pr_debug(1, "11D: Chan[%d] Pwr[%d]\n",
+               lbs_deb_11d("chan %d, pwr %d\n",
                       parsed_region_chan->chanpwr[i].chan,
                       parsed_region_chan->chanpwr[i].pwr);
        }
        parsed_region_chan->nr_chan = region_chan->nrcfp;
 
-       lbs_pr_debug(1, "11D: nrchan[%d]\n", parsed_region_chan->nr_chan);
+       lbs_deb_11d("nrchan %d\n", parsed_region_chan->nr_chan);
 
        return;
 }
@@ -277,8 +277,9 @@ static u8 wlan_region_chan_supported_11d(u8 region, u8 band, u8 chan)
        struct chan_freq_power *cfp;
        int cfp_no;
        u8 idx;
+       int ret = 0;
 
-       ENTER();
+       lbs_deb_enter(LBS_DEB_11D);
 
        cfp = libertas_get_region_cfp_table(region, band, &cfp_no);
        if (cfp == NULL)
@@ -288,16 +289,19 @@ static u8 wlan_region_chan_supported_11d(u8 region, u8 band, u8 chan)
                if (chan == (cfp + idx)->channel) {
                        /* If Mrvl Chip Supported? */
                        if ((cfp + idx)->unsupported) {
-                               return 0;
+                               ret = 0;
                        } else {
-                               return 1;
+                               ret = 1;
                        }
+                       goto done;
                }
        }
 
        /*chan is not in the region table */
-       LEAVE();
-       return 0;
+
+done:
+       lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret);
+       return ret;
 }
 
 /**
@@ -321,7 +325,7 @@ static int parse_domain_info_11d(struct ieeetypes_countryinfofullset*
 
        u8 j, i;
 
-       ENTER();
+       lbs_deb_enter(LBS_DEB_11D);
 
        /*validation Rules:
           1. valid region Code
@@ -332,21 +336,20 @@ static int parse_domain_info_11d(struct ieeetypes_countryinfofullset*
           6. Others
         */
 
-       lbs_dbg_hex("CountryInfo:", (u8 *) countryinfo, 30);
+       lbs_deb_hex(LBS_DEB_11D, "countryinfo", (u8 *) countryinfo, 30);
 
        if ((*(countryinfo->countrycode)) == 0
            || (countryinfo->len <= COUNTRY_CODE_LEN)) {
                /* No region Info or Wrong region info: treat as No 11D info */
-               LEAVE();
-               return 0;
+               goto done;
        }
 
        /*Step1: check region_code */
        parsed_region_chan->region = region =
            wlan_region_2_code(countryinfo->countrycode);
 
-       lbs_pr_debug(1, "regioncode=%x\n", (u8) parsed_region_chan->region);
-       lbs_dbg_hex("CountryCode:", (char *)countryinfo->countrycode,
+       lbs_deb_11d("regioncode=%x\n", (u8) parsed_region_chan->region);
+       lbs_deb_hex(LBS_DEB_11D, "countrycode", (char *)countryinfo->countrycode,
                COUNTRY_CODE_LEN);
 
        parsed_region_chan->band = band;
@@ -361,7 +364,7 @@ static int parse_domain_info_11d(struct ieeetypes_countryinfofullset*
 
                if (countryinfo->subband[j].firstchan <= lastchan) {
                        /*Step2&3. Check First Chan Num increment and no overlap */
-                       lbs_pr_debug(1, "11D: Chan[%d>%d] Overlap\n",
+                       lbs_deb_11d("chan %d>%d, overlap\n",
                               countryinfo->subband[j].firstchan, lastchan);
                        continue;
                }
@@ -374,7 +377,7 @@ static int parse_domain_info_11d(struct ieeetypes_countryinfofullset*
 
                        if (!wlan_get_chan_11d(band, firstchan, i, &curchan)) {
                                /* Chan is not found in UN table */
-                               lbs_pr_debug(1, "chan is not supported: %d \n", i);
+                               lbs_deb_11d("chan is not supported: %d \n", i);
                                break;
                        }
 
@@ -389,8 +392,8 @@ static int parse_domain_info_11d(struct ieeetypes_countryinfofullset*
                                idx++;
                        } else {
                                /*not supported and ignore the chan */
-                               lbs_pr_debug(1,
-                                      "11D:i[%d] chan[%d] unsupported in region[%x] band[%d]\n",
+                               lbs_deb_11d(
+                                      "i %d, chan %d unsupported in region %x, band %d\n",
                                       i, curchan, region, band);
                        }
                }
@@ -401,11 +404,12 @@ static int parse_domain_info_11d(struct ieeetypes_countryinfofullset*
 
        parsed_region_chan->nr_chan = idx;
 
-       lbs_pr_debug(1, "nrchan=%x\n", parsed_region_chan->nr_chan);
-       lbs_dbg_hex("11D:parsed_region_chan:", (u8 *) parsed_region_chan,
+       lbs_deb_11d("nrchan=%x\n", parsed_region_chan->nr_chan);
+       lbs_deb_hex(LBS_DEB_11D, "parsed_region_chan", (u8 *) parsed_region_chan,
                2 + COUNTRY_CODE_LEN + sizeof(struct parsed_region_chan_11d) * idx);
 
-       LEAVE();
+done:
+       lbs_deb_enter(LBS_DEB_11D);
        return 0;
 }
 
@@ -418,18 +422,18 @@ static int parse_domain_info_11d(struct ieeetypes_countryinfofullset*
 u8 libertas_get_scan_type_11d(u8 chan,
                          struct parsed_region_chan_11d * parsed_region_chan)
 {
-       u8 scan_type = cmd_scan_type_passive;
+       u8 scan_type = CMD_SCAN_TYPE_PASSIVE;
 
-       ENTER();
+       lbs_deb_enter(LBS_DEB_11D);
 
        if (wlan_channel_known_11d(chan, parsed_region_chan)) {
-               lbs_pr_debug(1, "11D: Found and do Active Scan\n");
-               scan_type = cmd_scan_type_active;
+               lbs_deb_11d("found, do active scan\n");
+               scan_type = CMD_SCAN_TYPE_ACTIVE;
        } else {
-               lbs_pr_debug(1, "11D: Not Find and do Passive Scan\n");
+               lbs_deb_11d("not found, do passive scan\n");
        }
 
-       LEAVE();
+       lbs_deb_leave_args(LBS_DEB_11D, "ret scan_type %d", scan_type);
        return scan_type;
 
 }
@@ -442,25 +446,6 @@ void libertas_init_11d(wlan_private * priv)
        return;
 }
 
-static int wlan_enable_11d(wlan_private * priv, u8 flag)
-{
-       int ret;
-
-       priv->adapter->enable11d = flag;
-
-       /* send cmd to FW to enable/disable 11D function in FW */
-       ret = libertas_prepare_and_send_command(priv,
-                                   cmd_802_11_snmp_mib,
-                                   cmd_act_set,
-                                   cmd_option_waitforrsp,
-                                   OID_802_11D_ENABLE,
-                                   &priv->adapter->enable11d);
-       if (ret)
-               lbs_pr_debug(1, "11D: Fail to enable 11D \n");
-
-       return 0;
-}
-
 /**
  *  @brief This function sets DOMAIN INFO to FW
  *  @param priv       pointer to wlan_private
@@ -471,15 +456,15 @@ static int set_domain_info_11d(wlan_private * priv)
        int ret;
 
        if (!priv->adapter->enable11d) {
-               lbs_pr_debug(1, "11D: dnld domain Info with 11d disabled\n");
+               lbs_deb_11d("dnld domain Info with 11d disabled\n");
                return 0;
        }
 
-       ret = libertas_prepare_and_send_command(priv, cmd_802_11d_domain_info,
-                                   cmd_act_set,
-                                   cmd_option_waitforrsp, 0, NULL);
+       ret = libertas_prepare_and_send_command(priv, CMD_802_11D_DOMAIN_INFO,
+                                   CMD_ACT_SET,
+                                   CMD_OPTION_WAITFORRSP, 0, NULL);
        if (ret)
-               lbs_pr_debug(1, "11D: Fail to dnld domain Info\n");
+               lbs_deb_11d("fail to dnld domain info\n");
 
        return ret;
 }
@@ -501,7 +486,7 @@ int libertas_set_universaltable(wlan_private * priv, u8 band)
 
        adapter->universal_channel[i].nrcfp =
            sizeof(channel_freq_power_UN_BG) / size;
-       lbs_pr_debug(1, "11D: BG-band nrcfp=%d\n",
+       lbs_deb_11d("BG-band nrcfp %d\n",
               adapter->universal_channel[i].nrcfp);
 
        adapter->universal_channel[i].CFP = channel_freq_power_UN_BG;
@@ -531,19 +516,18 @@ int libertas_cmd_802_11d_domain_info(wlan_private * priv,
        wlan_adapter *adapter = priv->adapter;
        u8 nr_subband = adapter->domainreg.nr_subband;
 
-       ENTER();
+       lbs_deb_enter(LBS_DEB_11D);
 
-       lbs_pr_debug(1, "nr_subband=%x\n", nr_subband);
+       lbs_deb_11d("nr_subband=%x\n", nr_subband);
 
        cmd->command = cpu_to_le16(cmdno);
        pdomaininfo->action = cpu_to_le16(cmdoption);
-       if (cmdoption == cmd_act_get) {
+       if (cmdoption == CMD_ACT_GET) {
                cmd->size =
                    cpu_to_le16(sizeof(pdomaininfo->action) + S_DS_GEN);
-               lbs_dbg_hex("11D: 802_11D_DOMAIN_INFO:", (u8 *) cmd,
+               lbs_deb_hex(LBS_DEB_11D, "802_11D_DOMAIN_INFO", (u8 *) cmd,
                        (int)(cmd->size));
-               LEAVE();
-               return 0;
+               goto done;
        }
 
        domain->header.type = cpu_to_le16(TLV_TYPE_DOMAIN);
@@ -567,35 +551,10 @@ int libertas_cmd_802_11d_domain_info(wlan_private * priv,
                    cpu_to_le16(sizeof(pdomaininfo->action) + S_DS_GEN);
        }
 
-       lbs_dbg_hex("11D:802_11D_DOMAIN_INFO:", (u8 *) cmd, (int)(cmd->size));
-
-       LEAVE();
+       lbs_deb_hex(LBS_DEB_11D, "802_11D_DOMAIN_INFO", (u8 *) cmd, le16_to_cpu(cmd->size));
 
-       return 0;
-}
-
-/**
- *  @brief This function implements private cmd: enable/disable 11D
- *  @param priv    pointer to wlan_private
- *  @param wrq     pointer to user data
- *  @return       0 or -1
- */
-int libertas_cmd_enable_11d(wlan_private * priv, struct iwreq *wrq)
-{
-       int data = 0;
-       int *val;
-
-       ENTER();
-       data = SUBCMD_DATA(wrq);
-
-       lbs_pr_debug(1, "enable 11D: %s\n",
-              (data == 1) ? "enable" : "Disable");
-
-       wlan_enable_11d(priv, data);
-       val = (int *)wrq->u.name;
-       *val = priv->adapter->enable11d;
-
-       LEAVE();
+done:
+       lbs_deb_enter(LBS_DEB_11D);
        return 0;
 }
 
@@ -608,41 +567,40 @@ int libertas_cmd_enable_11d(wlan_private * priv, struct iwreq *wrq)
 int libertas_ret_802_11d_domain_info(wlan_private * priv,
                                 struct cmd_ds_command *resp)
 {
-       struct cmd_ds_802_11d_domain_info
-       *domaininfo = &resp->params.domaininforesp;
+       struct cmd_ds_802_11d_domain_info *domaininfo = &resp->params.domaininforesp;
        struct mrvlietypes_domainparamset *domain = &domaininfo->domain;
        u16 action = le16_to_cpu(domaininfo->action);
        s16 ret = 0;
        u8 nr_subband = 0;
 
-       ENTER();
+       lbs_deb_enter(LBS_DEB_11D);
 
-       lbs_dbg_hex("11D DOMAIN Info Rsp Data:", (u8 *) resp,
+       lbs_deb_hex(LBS_DEB_11D, "domain info resp", (u8 *) resp,
                (int)le16_to_cpu(resp->size));
 
-       nr_subband = (domain->header.len - 3) / sizeof(struct ieeetypes_subbandset);
-       /* countrycode 3 bytes */
+       nr_subband = (le16_to_cpu(domain->header.len) - COUNTRY_CODE_LEN) /
+                     sizeof(struct ieeetypes_subbandset);
 
-       lbs_pr_debug(1, "11D Domain Info Resp: nr_subband=%d\n", nr_subband);
+       lbs_deb_11d("domain info resp: nr_subband %d\n", nr_subband);
 
        if (nr_subband > MRVDRV_MAX_SUBBAND_802_11D) {
-               lbs_pr_debug(1, "Invalid Numrer of Subband returned!!\n");
+               lbs_deb_11d("Invalid Numrer of Subband returned!!\n");
                return -1;
        }
 
        switch (action) {
-       case cmd_act_set:       /*Proc Set action */
+       case CMD_ACT_SET:       /*Proc Set action */
                break;
 
-       case cmd_act_get:
+       case CMD_ACT_GET:
                break;
        default:
-               lbs_pr_debug(1, "Invalid action:%d\n", domaininfo->action);
+               lbs_deb_11d("Invalid action:%d\n", domaininfo->action);
                ret = -1;
                break;
        }
 
-       LEAVE();
+       lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret);
        return ret;
 }
 
@@ -651,23 +609,22 @@ int libertas_ret_802_11d_domain_info(wlan_private * priv,
  *  @param priv    pointer to wlan_private
  *  @return       0; -1
  */
-int libertas_parse_dnld_countryinfo_11d(wlan_private * priv)
+int libertas_parse_dnld_countryinfo_11d(wlan_private * priv,
+                                        struct bss_descriptor * bss)
 {
        int ret;
        wlan_adapter *adapter = priv->adapter;
 
-       ENTER();
+       lbs_deb_enter(LBS_DEB_11D);
        if (priv->adapter->enable11d) {
                memset(&adapter->parsed_region_chan, 0,
                       sizeof(struct parsed_region_chan_11d));
-               ret = parse_domain_info_11d(&adapter->pattemptedbssdesc->
-                                              countryinfo, 0,
+               ret = parse_domain_info_11d(&bss->countryinfo, 0,
                                               &adapter->parsed_region_chan);
 
                if (ret == -1) {
-                       lbs_pr_debug(1, "11D: Err Parse domain_info from AP..\n");
-                       LEAVE();
-                       return ret;
+                       lbs_deb_11d("error parsing domain_info from AP\n");
+                       goto done;
                }
 
                memset(&adapter->domainreg, 0,
@@ -678,13 +635,15 @@ int libertas_parse_dnld_countryinfo_11d(wlan_private * priv)
                ret = set_domain_info_11d(priv);
 
                if (ret) {
-                       lbs_pr_debug(1, "11D: Err set domainInfo to FW\n");
-                       LEAVE();
-                       return ret;
+                       lbs_deb_11d("error setting domain info\n");
+                       goto done;
                }
        }
-       LEAVE();
-       return 0;
+       ret = 0;
+
+done:
+       lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret);
+       return ret;
 }
 
 /**
@@ -699,8 +658,8 @@ int libertas_create_dnld_countryinfo_11d(wlan_private * priv)
        struct region_channel *region_chan;
        u8 j;
 
-       ENTER();
-       lbs_pr_debug(1, "11D:curbssparams.band[%d]\n", adapter->curbssparams.band);
+       lbs_deb_enter(LBS_DEB_11D);
+       lbs_deb_11d("curbssparams.band %d\n", adapter->curbssparams.band);
 
        if (priv->adapter->enable11d) {
                /* update parsed_region_chan_11; dnld domaininf to FW */
@@ -709,7 +668,7 @@ int libertas_create_dnld_countryinfo_11d(wlan_private * priv)
                     sizeof(adapter->region_channel[0]); j++) {
                        region_chan = &adapter->region_channel[j];
 
-                       lbs_pr_debug(1, "11D:[%d] region_chan->band[%d]\n", j,
+                       lbs_deb_11d("%d region_chan->band %d\n", j,
                               region_chan->band);
 
                        if (!region_chan || !region_chan->valid
@@ -722,10 +681,10 @@ int libertas_create_dnld_countryinfo_11d(wlan_private * priv)
 
                if (j >= sizeof(adapter->region_channel) /
                    sizeof(adapter->region_channel[0])) {
-                       lbs_pr_debug(1, "11D:region_chan not found. band[%d]\n",
+                       lbs_deb_11d("region_chan not found, band %d\n",
                               adapter->curbssparams.band);
-                       LEAVE();
-                       return -1;
+                       ret = -1;
+                       goto done;
                }
 
                memset(&adapter->parsed_region_chan, 0,
@@ -742,13 +701,14 @@ int libertas_create_dnld_countryinfo_11d(wlan_private * priv)
                ret = set_domain_info_11d(priv);
 
                if (ret) {
-                       lbs_pr_debug(1, "11D: Err set domainInfo to FW\n");
-                       LEAVE();
-                       return ret;
+                       lbs_deb_11d("error setting domain info\n");
+                       goto done;
                }
 
        }
+       ret = 0;
 
-       LEAVE();
-       return 0;
+done:
+       lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret);
+       return ret;
 }