Review comments 20130804

Eugene Krasnikov k.eugene.e at gmail.com
Mon Aug 5 09:59:31 EDT 2013


Fixed the firs part of comments
https://github.com/KrasnikovEugene/wcn36xx/pull/100
Now will focus on implementing platform interface.

2013/8/5 Eugene Krasnikov <k.eugene.e at gmail.com>:
> Hi Kalle,
>
> Thank you very much for review. Let me first fix the most easiest one;)
>
> 2013/8/4 Kalle Valo <kvalo at qca.qualcomm.com>:
>> Hi,
>>
>> I did a quick review of wcn36xx from upstream point of view. In this
>> round I only focused on architectural issues and coding style, will look
>> at functionality on the second round.
>>
>> Here are my comments:
>>
>>      static struct ieee80211_hw *private_hw;
>>
>> need to handle this through platform struct or something like that
>>
>>
>>      if (!(wcn->fw_major == 1 &&
>>         wcn->fw_minor == 2 &&
>>         wcn->fw_version == 2 &&
>>         wcn->fw_revision == 24)) {
>>
>>
>> an inline function for checking firmware versions would be nice
>>
>>    static int wcn36xx_read_mac_addresses(struct wcn36xx *wcn)
>>
>> mac address needs to come from the platform struct
>>
>>     /* Configuring supported rates */
>>     wcn->supported_rates.op_rate_mode = STA_11n;
>>     wcn->supported_rates.dsss_rates[0] = 0x82;
>>     wcn->supported_rates.dsss_rates[1] = 0x84;
>>     wcn->supported_rates.dsss_rates[2] = 0x8b;
>>     wcn->supported_rates.dsss_rates[3] = 0x96;
>>
>>     wcn->supported_rates.ofdm_rates[0] = 0x0C;
>>     wcn->supported_rates.ofdm_rates[1] = 0x12;
>>     wcn->supported_rates.ofdm_rates[2] = 0x18;
>>     wcn->supported_rates.ofdm_rates[3] = 0x24;
>>     wcn->supported_rates.ofdm_rates[4] = 0x30;
>>     wcn->supported_rates.ofdm_rates[5] = 0x48;
>>     wcn->supported_rates.ofdm_rates[6] = 0x60;
>>     wcn->supported_rates.ofdm_rates[7] = 0x6C;
>>
>>     wcn->supported_rates.supported_mcs_set[0] = 0xFF;
>>
>> would be nice to document these
>>
>>       if (cap < 0 || cap > 127) {
>>          wcn36xx_warn("error cap idx %d", cap);
>>                              return -EINVAL;
>>                              } else {
>>
>> unnecessary else branch
>>
>>             if (cap < 0 || cap > 127) {
>>                wcn36xx_warn("error cap idx %d", cap);
>>                } else {
>>
>> with return else branch would not be needed
>>
>>      if (wcn36xx_smd_rsp_status_check(buf, len))
>>         wcn36xx_warn("error response for caps exchange");
>>         return 0;
>>
>> should return error?
>>
>>        ADD_FILE(debug_mask, S_IRUSR | S_IWUSR,
>>                                   &fops_wcn36xx_debug_mask, wcn);
>>
>> there's also /sys/module/wcn36xx/parameters/debug_mask, why do we need
>> this?
>>
>>         #include <linux/wcnss_wlan.h>
>>         wcn->dev = wcnss_wlan_get_device();
>>         wcnss_memory = wcnss_wlan_get_memory_map(wcn->dev);
>>         wcn->tx_irq = wcnss_wlan_get_dxe_tx_irq(wcn->dev);
>>         wcn->rx_irq = wcnss_wlan_get_dxe_rx_irq(wcn->dev);
>>
>> These are not available in upstream kernels, so this
>> information needs to come from the platform struct
>>
>>             /* TODO make a conf file where to read this information from
>>             */
>>             /* TODO read this from config */
>>
>> Upstream drivers cannot use a conffile, most likely that should come
>> from mac80211 or something.
>>
>>      if (wait_for_completion_timeout(&wcn->smd_compl,
>>         msecs_to_jiffies(SMD_MSG_TIMEOUT)) <= 0) {
>>
>> A temporary variable would be good for readibility
>>
>>   int wcn36xx_smd_send_beacon(struct wcn36xx *wcn, struct sk_buff
>>   *skb_beacon,
>>                     u16 tim_off, u16 p2p_off) {
>>                         ...
>>                         };
>>
>> Unnecessary semicolon. Also after wcn36xx_smd_update_proberesp_tmpl().
>>
>>             /* // TODO need to find out why this is needed? */
>>             /* msg_body.beacon_length = skb_beacon->len + 6; */
>>
>> No C++ style comments. Code commented out should be removed, better to
>> describe the problem verbally.
>>
>>          wmb();
>>
>>          wcn36xx_dbg(WCN36XX_DBG_DXE,
>>                     "wcn36xx_dxe_write_register: addr=%x, data=%x",
>>                                                      addr, data);
>>
>> Should we have the debug message before the wmb()?
>>
>>        wcn36xx_dbg(WCN36XX_DBG_DXE,
>>             "wcn36xx_dxe_read_register: addr=%x, data=%x",
>>                                             addr, *data);
>>
>>                                             rmb();
>>
>> And the rmb() before the debug message?
>>
>>     #define RSSI0(x) (100 - ((x->phy_stat0 >> 24) & 0xff))
>>
>> Using an inline function gives type checking.
>>
>> --
>> Kalle Valo
>>
>> _______________________________________________
>> wcn36xx mailing list
>> wcn36xx at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/wcn36xx
>
>
>
> --
> Best regards,
> Eugene



-- 
Best regards,
Eugene



More information about the wcn36xx mailing list