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
Last revision Both sides next revision
en:users:drivers:ath10k:codingstyle [2015/11/06 10:27]
Mohammed Shafi Shajakhan
en:users:drivers:ath10k:codingstyle [2023/08/01 18:24]
Jeff Johnson nits
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. 
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.txt · Last modified: 2023/08/01 21:12 by Jeff Johnson