[PATCH] wcn36xx: mac80211 driver for Qualcomm WCN3660/WCN3680 hardware

Joe Perches joe at perches.com
Tue Oct 8 16:54:48 EDT 2013


On Tue, 2013-10-08 at 21:25 +0100, Eugene Krasnikov wrote:
> This is a mac80211 driver for Qualcomm WCN3660/WCN3680 devices. So
> far WCN3660/WCN3680 is available only on MSM platform.

some trivia:

> diff --git a/drivers/net/wireless/ath/wcn36xx/debug.c b/drivers/net/wireless/ath/wcn36xx/debug.c
[]
> +static ssize_t read_file_bool_bmps(struct file *file, char __user *user_buf,
> +				   size_t count, loff_t *ppos)
> +{
> +	struct wcn36xx *wcn = file->private_data;
> +	struct wcn36xx_vif *vif_priv = NULL;
> +	struct ieee80211_vif *vif = NULL;
> +	char buf[3];
> +
> +	list_for_each_entry(vif_priv, &wcn->vif_list, list) {
> +			vif = container_of((void *)vif_priv,
> +				   struct ieee80211_vif,
> +				   drv_priv);
> +			if (NL80211_IFTYPE_STATION == vif->type) {
> +				if (vif_priv->pw_state == WCN36XX_BMPS)
> +					buf[0] = '1';
> +				else
> +					buf[0] = '0';
> +				break;
> +			}

please indent this properly.

	list_for_each...(...) {
		statement...;
		statement...;
	}

[]

> +static ssize_t write_file_bool_bmps(struct file *file,
> +				    const char __user *user_buf,
> +				    size_t count, loff_t *ppos)
> +{
> +	struct wcn36xx *wcn = file->private_data;
> +	struct wcn36xx_vif *vif_priv = NULL;
> +	struct ieee80211_vif *vif = NULL;
> +
> +	char buf[32];
> +	int buf_size;
> +
> +	buf_size = min(count, (sizeof(buf)-1));
> +	if (copy_from_user(buf, user_buf, buf_size))
> +		return -EFAULT;
> +
> +	switch (buf[0]) {
> +	case 'y':
> +	case 'Y':
> +	case '1':
> +		list_for_each_entry(vif_priv, &wcn->vif_list, list) {
> +			vif = container_of((void *)vif_priv,
> +				   struct ieee80211_vif,
> +				   drv_priv);
> +			if (NL80211_IFTYPE_STATION == vif->type) {

trivia:

Please use
			if (test == CONSTANT)

Yes, I know the compiler complains if you
mistakenly leave out one of the = this way.

> +#define ADD_FILE(name, mode, fop, priv_data)		\
> +	do {							\
> +		struct dentry *d;				\
> +		d = debugfs_create_file(__stringify(name),	\
> +					mode, dfs->rootdir,	\
> +					priv_data, fop);	\
> +		dfs->file_##name.dentry = d;			\
> +		if (IS_ERR(d)) {				\
> +			wcn36xx_warn("Create the debugfs entry failed");\

missing "\n" newline

> +			dfs->file_##name.dentry = NULL;		\
[]

> diff --git a/drivers/net/wireless/ath/wcn36xx/dxe.c b/drivers/net/wireless/ath/wcn36xx/dxe.c
[]
> +static int wcn36xx_dxe_init_descs(struct wcn36xx_dxe_ch *wcn_ch)
> +{
> +	struct wcn36xx_dxe_desc *cur_dxe = NULL;
> +	struct wcn36xx_dxe_desc *prev_dxe = NULL;
> +	struct wcn36xx_dxe_ctl *cur_ctl = NULL;
> +	size_t size;
> +	int i;
> +
> +	size = wcn_ch->desc_num * sizeof(struct wcn36xx_dxe_desc);
> +	wcn_ch->cpu_addr = dma_alloc_coherent(NULL, size, &wcn_ch->dma_addr,
> +					      GFP_KERNEL);

	dma_zalloc_coherent

[]
> +	memset(wcn_ch->cpu_addr, 0, size);

No longer required.

> +		if (0 == i) {

too many styles mixing i == 0 and 0 == i

[]

> +int wcn36xx_dxe_allocate_mem_pools(struct wcn36xx *wcn)
> +{
> +	size_t s;

mixing s and size above, please use one style/name.

> +	void *cpu_addr;
> +
> +	/* Allocate BD headers for MGMT frames */
> +
> +	/* Where this come from ask QC */
> +	wcn->mgmt_mem_pool.chunk_size =	WCN36XX_BD_CHUNK_SIZE +
> +		16 - (WCN36XX_BD_CHUNK_SIZE % 8);
> +
> +	s = wcn->mgmt_mem_pool.chunk_size * WCN36XX_DXE_CH_DESC_NUMB_TX_H;
> +	cpu_addr = dma_alloc_coherent(NULL, s, &wcn->mgmt_mem_pool.phy_addr,
> +				      GFP_KERNEL);

	same use of dma_zalloc_coherent(...)

> +	if (!cpu_addr)
> +		goto out_err;
> +
> +	wcn->mgmt_mem_pool.virt_addr = cpu_addr;
> +	memset(cpu_addr, 0, s);

Now unnecessary memset.

too long, stopped reading.







More information about the wcn36xx mailing list