User Tools

Site Tools


en:users:drivers:ath10k:codingstyle

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:users:drivers:ath10k:codingstyle [2015/11/06 10:27]
Mohammed Shafi Shajakhan
en:users:drivers:ath10k:codingstyle [2023/08/01 21:12] (current)
Jeff Johnson [Error path]
Line 7: Line 7:
 ===== ath10k Coding Style ===== ===== ath10k Coding Style =====
  
 +
 +==== Linux coding style ====
 +
 +ath10k mostly follows [[https://​www.kernel.org/​doc/​html/​latest/​process/​coding-style.html|Linux Coding Style]], so read that first. ​
 +
 +==== Checking code ====
 +
 +For checking the code we have a dedicated script [[https://​github.com/​qca/​qca-swiss-army-knife/​blob/​master/​tools/​scripts/​ath10k/​ath10k-check|ath10k-check]] which runs various tests, including sparse and checkpatch. Run the script with ''​--help''​ to see the installation and usage instructions. Strongly recommended to run this before submitting patches as it can catch common problems. Example:
 +
 +<​code>​
 +~$ cd ~/ath
 +~/ath$ ls
 +arch/    debian/ ​        ​include/ ​ lib/                               ​Module.symvers ​ sound/
 +block/ ​  ​Documentation/ ​ init/     ​localversion-wireless-testing ​     net/            tools/
 +certs/ ​  ​drivers/ ​       ipc/      localversion-wireless-testing-ath ​ README ​         usr/
 +COPYING ​ firmware/ ​      ​Kbuild ​   MAINTAINERS ​                       samples/ ​       virt/
 +CREDITS ​ fs/             ​Kconfig ​  ​Makefile ​                          ​scripts/ ​       vmlinux-gdb.py@
 +crypto/ ​ GNUmakefile ​    ​kernel/ ​  ​mm/ ​                               security/
 +~/ath$ ath10k-check
 +drivers/​net/​wireless/​ath/​ath10k/​debug.h:​207:​ return is not a function, parentheses are not required
 +drivers/​net/​wireless/​ath/​ath10k/​debug.h:​209:​ return is not a function, parentheses are not required
 +drivers/​net/​wireless/​ath/​ath10k/​debug.h:​210:​ return is not a function, parentheses are not required
 +drivers/​net/​wireless/​ath/​ath10k/​debug.h:​214:​ Alignment should match open parenthesis
 +drivers/​net/​wireless/​ath/​ath10k/​debug.h:​218:​ Alignment should match open parenthesis
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2430:​ code indent should use tabs where possible
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2430:​ please, no spaces at the start of a line
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2431:​ code indent should use tabs where possible
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2431:​ please, no spaces at the start of a line
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2464:​ code indent should use tabs where possible
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2464:​ please, no spaces at the start of a line
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2465:​ code indent should use tabs where possible
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2465:​ please, no spaces at the start of a line
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2493:​ Please don't use multiple blank lines
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2525:​ Symbolic permissions '​S_IRUSR'​ are not preferred. Consider using octal permissions '​0400'​.
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2527:​ Symbolic permissions '​S_IRUSR'​ are not preferred. Consider using octal permissions '​0400'​.
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2620:​ Alignment should match open parenthesis
 +drivers/​net/​wireless/​ath/​ath10k/​debug.c:​2640:​ Alignment should match open parenthesis
 +~/ath$
 +</​code>​
  
 ==== Status/​error variables ==== ==== Status/​error variables ====
Line 31: Line 70:
  
 <​code>​struct ath10k *ar = ptr; <​code>​struct ath10k *ar = ptr;
-struct ath10k_pci *ar_sdio ​= ath10k_pci_priv(ar);</​code>​+struct ath10k_pci *ar_pci ​= ath10k_pci_priv(ar);</​code>​
 For consistency always use the main context (struct ath10k *ar) as function parameter, don't use hif specific context. ​ For consistency always use the main context (struct ath10k *ar) as function parameter, don't use hif specific context. ​
  
Line 66: Line 105:
  
  
-<​code>​ath10k_warn("​failed to associate peer STA %pM\n: %d",+<​code>​ath10k_warn("​failed to associate peer STA %pM: %d\n",
             sta->​addr,​ ret);</​code>​             sta->​addr,​ ret);</​code>​
-Try to start the warning messages with the the verb "​failed"​ if possible. Warning and error messages start with lower case. +Try to start the warning messages with the verb "​failed"​ if possible. Warning and error messages start with lower case. 
  
 ath10k_warn() is used for errors where it might be possible to recover and ath10k_err() for errors when it's not possible to recover in any way.  ath10k_warn() is used for errors where it might be possible to recover and ath10k_err() for errors when it's not possible to recover in any way. 
  
-Dan Carpenters g+ post about error paths: [[https://plus.google.com/u/0/106378716002406849458/posts/dnanfhQ4mHQ|https://plus.google.com/u/0/106378716002406849458/posts/dnanfhQ4mHQ]] +Dan Carpenter'​s ​post about error paths: [[https://staticthinking.wordpress.com/2022/04/28/free-the-last-thing-style/|https://staticthinking.wordpress.com/2022/04/28/free-the-last-thing-style/]] 
  
  
Line 86: Line 125:
 Example: ​ Example: ​
  
 +<​code>​int ath10k_mac_start(struct ath10k *ar)</​code>​
  
-<​code>​int ath10k_init_hw(struct ath10k *ar)</​code>​ +For each component use function names create/​destroy for allocating and freeing something, ​register/unregister ​for initializing ​and cleaning up them afterwards and start/stop to temporarily pause something. ​
-For each component use function names create/​destroy for allocating and freeing something, ​init/cleanup ​for initialising variables ​and cleaning up them afterwards and start/stop to temporarily pause something. ​+
  
 Example: ​ Example: ​
Line 94: Line 133:
  
 <​code>​int ath10k_cfg80211_create(struct ath10k *ar) <​code>​int ath10k_cfg80211_create(struct ath10k *ar)
 +int ath10k_cfg80211_register(struct ath10k *ar)
 int ath10k_cfg80211_start(struct ath10k *ar) int ath10k_cfg80211_start(struct ath10k *ar)
 void ath10k_cfg80211_stop(struct ath10k *ar) void ath10k_cfg80211_stop(struct ath10k *ar)
-void ath10k_cfg80211_destory(struct ath10k *ar)</​code>​+int ath10k_cfg80211_unregister(struct ath10k *ar) 
 +void ath10k_cfg80211_destroy(struct ath10k *ar)</​code>​
  
 ==== Comments ==== ==== Comments ====
Line 107: Line 148:
  ​*/</​code>​  ​*/</​code>​
  
-==== Things NOT to do ====+==== Error messages ​====
  
-Don't use void pointers+For warning and error messages we have ath10k_warn() and ath10k_err().
  
-Don't use typedef+ath10k_warn() should be used when ath10k still continues to work, for example then some limit has been reached or an unknown event has been received. It's also rate limited.
  
 +ath10k_err() should be used when a fatal error has been detected and ath10k will shut itself down, for example during driver initialization or firmware recover fails. It is NOT rate limited.
  
-==== Linux style ====+Examples:
  
-Follow [[http://​git.kernel.org/?​p=linux/​kernel/​git/​torvalds/​linux.git;a=blob;​f=Documentation/​CodingStyle;hb=HEAD|Linux Coding Style]]. ​+  ath10k_warn(ar,​ "​failed to submit frame %d%d\n", frame_index,​ ret); 
 +  ath10k_err(ar,​ "​failed to wake up the device from sleep: %d\n", ret);
  
 +==== Debug messages ====
  
-==== Checking code ====+Use ath10k_dbg() or ath10k_dbg_dump().
  
-Run sparse: ​+The format string for ath10k_dbg() should start with debug level followed by name of the command or event and then parameters. All lowercase and no commas, colons or periods.
  
 +Examples:
 +
 +<​code>​ath10k_dbg(ar,​ ATH10K_DBG_BOOT,​ "boot suspend complete\n"​);​
 +
 +ath10k_dbg(ar,​ ATH10K_DBG_WMI,​ "wmi mgmt tx skb %pK len %d ftype %02x stype %02x\n",​
 +    msdu, skb->​len,​ fc & IEEE80211_FCTL_FTYPE,​
 +    fc & IEEE80211_FCTL_STYPE);​
 +
 +ath10k_dbg(ar,​ ATH10K_DBG_MAC,​ "mac update sta %pM peer bw %d\n",
 +    ​sta->​addr,​ bw);
 +</​code>​
 +==== Things NOT to do ====
 +
 +Don't use void pointers. ​
 +
 +Don't use typedef. ​
  
-<​code>​make drivers/​net/​wireless/​ath/​ath10k/​ C=2 CF="​-D__CHECK_ENDIAN__"</​code>​ 
en/users/drivers/ath10k/codingstyle.1446805672.txt.gz · Last modified: 2015/11/06 10:27 by Mohammed Shafi Shajakhan