Re: [PATCH 5/9] staging: lustre: fid: packing ost_idx in IDIF

2016-05-10 Thread Dan Carpenter
On Wed, May 04, 2016 at 10:28:56AM -0400, James Simmons wrote:
> From: Fan Yong 
> 
> For a normal FID, we can know on which target the related object
> is allocated via querying FLDB; but it is not true for an IDIF.
> 
> To locate the OST via the given IDIF, when the IDIF is generated,
> we pack the OST index in it. Then for any given FID, in spite of
> t is a normal FID or not, we has the method to know which target

Missing words.  "in spite of *whether it* is a normal FID or not."

> it belongs to. That is useful for LFSCK.
> 
> For old IDIF, the OST index is not part of the IDIF, means that
> ifferent OSTs may have the same IDIFs, that may cause the IFID

different.

> in LMA does not match the read FID.

s/does/to/

> Under such case, we need to
> make some compatible check to avoid to trigger unexpected.
> 
> tgt_validate_obdo() converts the ostid contained in the RPC body
> to fid and changes the "struct ost_id" union, then the users can
> access ost_id::oi_fid directly without call ostid_to_fid() again.

calling.

> 
> It also contains some other fixing and cleanup.

These are trigger words to avoid.

> 
> Signed-off-by: wang di 
> Signed-off-by: Fan Yong 
> Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3569
> Reviewed-on: http://review.whamcloud.com/7053
> Reviewed-by: Andreas Dilger 
> Reviewed-by: Alex Zhuravlev 
> Signed-off-by: James Simmons 
> ---
>  .../lustre/lustre/include/lustre/lustre_idl.h  | 76 
> +++---
>  drivers/staging/lustre/lustre/include/lustre_fid.h | 22 ++-
>  2 files changed, 57 insertions(+), 41 deletions(-)
> 
> diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
> b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
> index a70545a..9c53c17 100644
> --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
> +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
> @@ -584,7 +584,7 @@ static inline __u64 ostid_seq(const struct ost_id *ostid)
>   if (fid_seq_is_mdt0(ostid->oi.oi_seq))
>   return FID_SEQ_OST_MDT0;
>  
> - if (fid_seq_is_default(ostid->oi.oi_seq))
> + if (unlikely(fid_seq_is_default(ostid->oi.oi_seq)))

Adding unlikely() is the opposite of a cleanup.  It's now messier.  That
sort of thing needs to be justified by benchmarks.  Please remove all
the new likely/unlikelys and add them in a separate patch later.


>   return FID_SEQ_LOV_DEFAULT;
>  
>   if (fid_is_idif(&ostid->oi_fid))
> @@ -596,9 +596,12 @@ static inline __u64 ostid_seq(const struct ost_id *ostid)
>  /* extract OST objid from a wire ost_id (id/seq) pair */
>  static inline __u64 ostid_id(const struct ost_id *ostid)
>  {
> - if (fid_seq_is_mdt0(ostid_seq(ostid)))
> + if (fid_seq_is_mdt0(ostid->oi.oi_seq))
>   return ostid->oi.oi_id & IDIF_OID_MASK;
>  
> + if (unlikely(fid_seq_is_default(ostid->oi.oi_seq)))
> + return ostid->oi.oi_id;
> +
>   if (fid_is_idif(&ostid->oi_fid))
>   return fid_idif_id(fid_seq(&ostid->oi_fid),
>  fid_oid(&ostid->oi_fid), 0);
> @@ -642,12 +645,22 @@ static inline void ostid_set_seq_llog(struct ost_id *oi)
>   */
>  static inline void ostid_set_id(struct ost_id *oi, __u64 oid)
>  {
> - if (fid_seq_is_mdt0(ostid_seq(oi))) {
> + if (fid_seq_is_mdt0(oi->oi.oi_seq)) {
>   if (oid >= IDIF_MAX_OID) {
>   CERROR("Bad %llu to set " DOSTID "\n", oid, POSTID(oi));
>   return;
>   }
>   oi->oi.oi_id = oid;
> + } else if (fid_is_idif(&oi->oi_fid)) {
> + if (oid >= IDIF_MAX_OID) {
> + CERROR("Bad %llu to set "DOSTID"\n",
> +oid, POSTID(oi));
> + return;
> + }
> + oi->oi_fid.f_seq = fid_idif_seq(oid,
> + fid_idif_ost_idx(&oi->oi_fid));
> + oi->oi_fid.f_oid = oid;
> + oi->oi_fid.f_ver = oid >> 48;
>   } else {
>   if (oid > OBIF_MAX_OID) {
>   CERROR("Bad %llu to set " DOSTID "\n", oid, POSTID(oi));
> @@ -657,25 +670,31 @@ static inline void ostid_set_id(struct ost_id *oi, 
> __u64 oid)
>   }
>  }
>  
> -static inline void ostid_inc_id(struct ost_id *oi)
> +static inline int fid_set_id(struct lu_fid *fid, __u64 oid)
>  {
> - if (fid_seq_is_mdt0(ostid_seq(oi))) {
> - if (unlikely(ostid_id(oi) + 1 > IDIF_MAX_OID)) {
> - CERROR("Bad inc "DOSTID"\n", POSTID(oi));
> - return;
> + if (unlikely(fid_seq_is_igif(fid->f_seq))) {
> + CERROR("bad IGIF, "DFID"\n", PFID(fid));
> + return -EBADF;
> + }
> +
> + if (fid_is_idif(fid)) {
> + if (oid >= IDIF_MAX_OID) {
> + CERROR("Too large OID %#llx to set IDIF "DFID"\n",
> +(unsigned long long)oid, PFID(fid));
> +

[PATCH 04/27] staging: ks7010: remove checks for WIRELESS_EXT version

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

We are by far newer than that anyhow.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.c   | 23 ---
 drivers/staging/ks7010/ks_wlan_net.c | 14 --
 2 files changed, 37 deletions(-)

diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 0295bb4921fa20..6bea699655eec4 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -22,12 +22,7 @@
 #include 
 
 /* Include Wireless Extension definition and check version */
-#ifndef WIRELESS_EXT
-#include 
-#endif /* WIRELESS_EXT */
-#if WIRELESS_EXT > 12
 #include /* New driver API */
-#endif /* WIRELESS_EXT > 12 */
 
 extern int ks_wlan_hw_tx(ks_wlan_private *priv, void *p, unsigned long size,
 void (*complete_handler)(void *arg1, void *arg2),
@@ -121,10 +116,8 @@ static
 int get_current_ap(ks_wlan_private *priv, struct link_ap_info_t *ap_info)
 {
struct local_ap_t *ap;
-#if WIRELESS_EXT > 13
union iwreq_data wrqu;
struct net_device *netdev=priv->net_dev;
-#endif /* WIRELESS_EXT > 13 */
int rc=0;
 
DPRINTK(3,"\n");
@@ -190,7 +183,6 @@ int get_current_ap(ks_wlan_private *priv, struct 
link_ap_info_t *ap_info)
ap->wpa_ie.size = 0;
}
 
-#if WIRELESS_EXT > 13
wrqu.data.length = 0;
wrqu.data.flags = 0;
wrqu.ap_addr.sa_family = ARPHRD_ETHER;
@@ -203,7 +195,6 @@ int get_current_ap(ks_wlan_private *priv, struct 
link_ap_info_t *ap_info)
(unsigned char)wrqu.ap_addr.sa_data[4],(unsigned 
char)wrqu.ap_addr.sa_data[5]);
wireless_send_event(netdev, SIOCGIWAP, &wrqu, NULL);
}
-#endif
DPRINTK(4,"\nLink AP\n");
DPRINTK(4,"bssid=%02X:%02X:%02X:%02X:%02X:%02X\n \
essid=%s\nrate_set=%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X\n
channel=%d\n \
@@ -338,9 +329,7 @@ void hostif_data_indication(ks_wlan_private *priv)
struct ieee802_1x_hdr *aa1x_hdr;
struct wpa_eapol_key *eap_key;
struct michel_mic_t michel_mic;
-#if WIRELESS_EXT > 14
union iwreq_data wrqu;
-#endif /* WIRELESS_EXT > 14 */
 
DPRINTK(3,"\n");
 
@@ -412,7 +401,6 @@ void hostif_data_indication(ks_wlan_private *priv)
mic_failure->counter = 
1;
}
priv->wpa.mic_failure.last_failure_time 
= now;
-#if WIRELESS_EXT > 14
/*  needed parameters: count, keyid, 
key type, TSC */
sprintf(buf, 
"MLME-MICHAELMICFAILURE.indication(keyid=%d %scast addr="

"%02x:%02x:%02x:%02x:%02x:%02x)",
@@ -424,7 +412,6 @@ void hostif_data_indication(ks_wlan_private *priv)
wrqu.data.length = strlen(buf);

DPRINTK(4,"IWEVENT:MICHAELMICFAILURE\n");
wireless_send_event(priv->net_dev, 
IWEVCUSTOM, &wrqu, buf);
-#endif /* WIRELESS_EXT > 14 */
return;
}
}
@@ -754,9 +741,7 @@ void hostif_connect_indication(ks_wlan_private *priv)
unsigned int tmp=0;
unsigned int old_status=priv->connect_status;
struct net_device *netdev=priv->net_dev;
-#if WIRELESS_EXT > 13
union iwreq_data wrqu0;
-#endif /* WIRELESS_EXT > 13 */
connect_code = get_WORD(priv);
 
switch(connect_code){
@@ -791,7 +776,6 @@ void hostif_connect_indication(ks_wlan_private *priv)
}
ks_wlan_do_power_save(priv);
 
-#if WIRELESS_EXT > 13
wrqu0.data.length = 0;
wrqu0.data.flags = 0;
wrqu0.ap_addr.sa_family = ARPHRD_ETHER;
@@ -802,7 +786,6 @@ void hostif_connect_indication(ks_wlan_private *priv)
DPRINTK(3,"disconnect :: 
scan_ind_count=%d\n",priv->scan_ind_count);
wireless_send_event(netdev, SIOCGIWAP, &wrqu0, NULL);
}
-#endif /* WIRELESS_EXT > 13 */
priv->scan_ind_count=0;
 }
 
@@ -904,7 +887,6 @@ void hostif_adhoc_set_confirm(ks_wlan_private *priv)
 static
 void hostif_associate_indication(ks_wlan_private *priv)
 {
-#if WIRELESS_EXT > 14
struct association_request_t *assoc_req;
struct association_response_t *assoc_resp;
unsigned char *pb;
@@ -944,29 +926,24 @@ void hostif_associate_indication(ks_wlan_private *priv)
 
DPRINTK(3,"IWEVENT:ASSOCINFO\n");
wireless_send_event(priv->net_dev, IWEVCUSTOM, &wrqu, buf);
-#endif /* WIRELESS_EXT > 14 */
 }
 
 static
 void hostif_bss_scan_confirm(ks_wlan_private *priv)
 {
unsigned int result_code;
-#if WIRELESS_EXT > 13
struct net_device *dev = priv->net_dev;
union iwreq_data wrqu;
-#endif /* WIRELESS_EXT > 13 */
result_code =

[PATCH 08/27] staging: ks7010: use kernel helper to print buffer

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

No need for an open coded one.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/Makefile  |  2 +-
 drivers/staging/ks7010/ks7010_sdio.c |  9 +
 drivers/staging/ks7010/ks_debug.c| 30 --
 drivers/staging/ks7010/ks_debug.h|  2 --
 4 files changed, 6 insertions(+), 37 deletions(-)
 delete mode 100644 drivers/staging/ks7010/ks_debug.c

diff --git a/drivers/staging/ks7010/Makefile b/drivers/staging/ks7010/Makefile
index 32b0efc7bd00e8..f6a2cc8fd0276d 100644
--- a/drivers/staging/ks7010/Makefile
+++ b/drivers/staging/ks7010/Makefile
@@ -1,5 +1,5 @@
 obj-$(CONFIG_KS7010) += ks7010.o
 
 ccflags-y   += -DKS_WLAN_DEBUG=0
-ks7010-y:= michael_mic.o ks_hostif.o ks_wlan_net.o ks_debug.o \
+ks7010-y:= michael_mic.o ks_hostif.o ks_wlan_net.o \
ks7010_sdio.o ks7010_config.o
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 5b78522fad1ec1..1a1a43ff306aae 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -441,10 +441,11 @@ static void ks_wlan_hw_rx(void *dev, uint16_t size)
 
/* length check */
if(size > 2046 || size == 0){
-
-   DPRINTK(5,"-INVAILED DATA dump\n");
-   print_buffer(&rx_buffer->data[0],32);
-
+#ifdef KS_WLAN_DEBUG
+   if (KS_WLAN_DEBUG > 5)
+   print_hex_dump_bytes("INVALID DATA dump: ", 
DUMP_PREFIX_OFFSET,
+rx_buffer->data, 32);
+#endif
/* rx_status update */
read_status = READ_STATUS_IDLE;
retval = ks7010_sdio_write(priv, READ_STATUS, &read_status, 
sizeof(read_status));
diff --git a/drivers/staging/ks7010/ks_debug.c 
b/drivers/staging/ks7010/ks_debug.c
deleted file mode 100644
index 009f5f6df8f4e6..00
--- a/drivers/staging/ks7010/ks_debug.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *   Driver for KeyStream 11b/g wireless LAN cards.
- *   
- *   ks_debug.c
- *   $Id: ks_debug.c 991 2009-09-14 01:38:58Z sekine $
- *
- *   Copyright (C) 2005-2008 KeyStream Corp.
- *   Copyright (C) 2009 Renesas Technology Corp.
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it undr the terms of the GNU General Public License version 2 as
- *   published by the Free Sotware Foundation.
- */
-#include "ks_wlan.h"
-#include "ks_debug.h"
-
-void print_buffer(unsigned char *p, int length)
-{
-#ifdef KS_WLAN_DEBUG
-int i;
-#define HEX_OFFSET "\
-   +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F"
-printk(HEX_OFFSET);
-for (i=0; ihttp://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 13/27] staging: ks7010: add example cfg file as a reference

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

We want to remove it, but to do so properly, it is good to have a
working example. Needs to be copied to /lib/firmware in order to be
used.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks79xx.cfg | 116 ++
 1 file changed, 116 insertions(+)
 create mode 100644 drivers/staging/ks7010/ks79xx.cfg

diff --git a/drivers/staging/ks7010/ks79xx.cfg 
b/drivers/staging/ks7010/ks79xx.cfg
new file mode 100644
index 00..0f2d24d4e66a89
--- /dev/null
+++ b/drivers/staging/ks7010/ks79xx.cfg
@@ -0,0 +1,116 @@
+#ks79xx.cfg
+#KS79xx configuration file
+#
+
+#
+#BeaconLostCount   default 20
+BeaconLostCount=20
+#
+
+#
+#Ap List Scan Type default ACTIVE_SCAN ACTIVE_SCAN or PASSIVE_SCAN
+ScanType=ACTIVE_SCAN
+#
+
+#
+#Channel   default 10  min 1   max 14
+Channel=10
+#
+
+#
+#FragmentThreshold default 2346min 256 max 2346
+FragmentThreshold=2346
+#
+
+#
+#OperationMode default Infrastructure  Pseudo-Ad-Hoc or 802.11-Ad-Hoc 
or Infrastructure
+OperationMode=Infrastructure
+#
+
+#
+#PowerManagementMode   default ACTIVE ACTIVE or SAVE1 or SAVE2
+PowerManagementMode=ACTIVE
+#
+
+#
+#RTSThreshold  default 2347min 0   max 2347
+RTSThreshold=2347
+#
+
+#
+#SSID  default ""  max 32 character
+SSID="default"
+#
+
+#
+#TxRatedefault Auto1, 2, 5.5, 11   ex. 
TxRate=1,2 TxRate=11 TxRate=Auto ...
+TxRate=Auto
+#
+
+#
+#Wep   default OFF OFF or 64bit or 128bit
+Wep=OFF
+#
+
+#
+#WepType   default STRING  STRING or HEX
+WepType=STRING
+#
+
+#
+#WepIndex=1
+#
+
+#
+#WepKeyValue1
+#  character_wep_key:64bit key_length = 5;  128bit key_length = 13
+#hex_wep_key:64bit key_length = 10; 128bit key_length = 26
+#
+
+#
+#WepKeyValue2
+#  character_wep_key:64bit key_length = 5;  128bit key_length = 13
+#hex_wep_key:64bit key_length = 10; 128bit key_length = 26
+#
+
+#
+#WepKeyValue3
+#  character_wep_key:64bit key_length = 5;  128bit key_length = 13
+#hex_wep_key:64bit key_length = 10; 128bit key_length = 26
+#
+
+#
+#WepKeyValue4
+#  character_wep_key:64bit key_length = 5;  128bit key_length = 13
+#hex_wep_key:64bit key_length = 10; 128bit key_length = 26
+#
+
+#
+#AuthenticationAlgorithm default OPEN_SYSTEM   OPEN_SYSTEM or  SHARED_KEY
+AuthenticationAlgorithm=OPEN_SYSTEM
+#
+
+#
+#PREAMBLE_TYPE default LONGLONG or  SHORT
+PREAMBLE_TYPE=SHORT
+#
+
+#
+# PhyType default BG_MODE  B_MODE, G_MODE or BG_MODE
+PhyType=BG_MODE
+#
+
+#
+# CtsMode defalut FALSETURE or FALSE
+CtsMode=FALSE
+#
+
+#
+# PhyInformationTimer defalut 0  uint 100msec 
+PhyInformationTimer=0
+#
+
+#
+#ROM_FILE default "ks7010sd.rom"
+ROM_FILE="ks7010sd.rom"
+#
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 11/27] staging: ks7010: make loading config file optional

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

We have sane defaults, so we don't need to bail out if there is no
config file. Note that the config file should go away completely in
favour of configuration mechanisms already upstream.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c | 8 +++-
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 7f273dafaf3583..06ff8852e17f33 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -203,7 +203,6 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
 
const struct firmware *fw_entry;
struct device *dev = NULL;
-   int retval;
char cfg_file[]=CFG_FILE;
char *cur_p, *end_p;
char wk_buff[256], *wk_p;
@@ -254,10 +253,9 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
priv->reg.rate_set.size = 12;
 
dev = &priv->ks_wlan_hw.sdio_card->func->dev;
-   if((retval = request_firmware(&fw_entry, cfg_file, dev)) !=0 ){
-   DPRINTK(1, "error request_firmware() file=%s ret=%d\n", 
cfg_file, retval);
-   return 1;
-   }
+   /* If no cfg file, stay with the defaults */
+   if (request_firmware_direct(&fw_entry, cfg_file, dev))
+   return 0;
 
DPRINTK(4, "success request_firmware() file=%s size=%d\n", cfg_file, 
fw_entry->size);
cur_p = fw_entry->data;
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 16/27] staging: ks7010: indent ks7010_config.c

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c | 353 +
 1 file changed, 184 insertions(+), 169 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 48809bcc779739..4b495cbef48165 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -15,7 +15,8 @@ static int wep_type;
 #defineWEP_KEY_HEX   1
 
 static
-void analyze_character_wep_key(struct ks_wlan_parameter *param, int 
wep_key_index, char *value)
+void analyze_character_wep_key(struct ks_wlan_parameter *param,
+  int wep_key_index, char *value)
 {
int i;
unsigned char wep_key[26], key_length;
@@ -23,64 +24,69 @@ void analyze_character_wep_key(struct ks_wlan_parameter 
*param, int wep_key_inde
key_length = (wep_on_off == WEP_ON_64BIT) ? 5 : 13;
/* 64bit key_length = 5; 128bit key_length = 13; */
 
-   for (i=0; i 3)
+   if (wep_key_index < 0 || wep_key_index > 3)
return;
 
param->wep_key[wep_key_index].size = key_length;
-   for (i=0; i<(param->wep_key[wep_key_index].size); i++) {
+   for (i = 0; i < (param->wep_key[wep_key_index].size); i++) {
param->wep_key[wep_key_index].val[i] = wep_key[i];
}
 }
 
 static
-void analyze_hex_wep_key(struct ks_wlan_parameter *param, int wep_key_index, 
char *value)
+void analyze_hex_wep_key(struct ks_wlan_parameter *param, int wep_key_index,
+char *value)
 {
unsigned char wep_end[26], i, j, key_length;
 
key_length = (wep_on_off == WEP_ON_64BIT) ? 10 : 26;
/* 64bit key_length = 10; 128bit key_length = 26; */
 
-   for (i=0; i 3)
-   return ;
+   if (wep_key_index < 0 || wep_key_index > 3)
+   return;
 
-   param->wep_key[wep_key_index].size = key_length/2;
-   for (i=0; i<(param->wep_key[wep_key_index].size); i++) {
+   param->wep_key[wep_key_index].size = key_length / 2;
+   for (i = 0; i < (param->wep_key[wep_key_index].size); i++) {
param->wep_key[wep_key_index].val[i] = wep_end[i];
}
 
@@ -89,62 +95,57 @@ void analyze_hex_wep_key(struct ks_wlan_parameter *param, 
int wep_key_index, cha
 static
 int rate_set_configuration(struct ks_wlan_private *priv, char *value)
 {
-   int rc=0;
+   int rc = 0;
 
priv->reg.tx_rate = TX_RATE_FIXED;
priv->reg.rate_set.size = 1;
 
-   switch(*value){
-   case '1': /* 1M 11M 12M 18M */
-   if(*(value+1) == '8'){
+   switch (*value) {
+   case '1':   /* 1M 11M 12M 18M */
+   if (*(value + 1) == '8') {
priv->reg.rate_set.body[0] = TX_RATE_18M;
-   }
-   else if(*(value+1) == '2'){
-   priv->reg.rate_set.body[0] = TX_RATE_12M|BASIC_RATE;
-   }
-   else if(*(value+1) == '1'){
-   priv->reg.rate_set.body[0] = TX_RATE_11M|BASIC_RATE;
-   }
-   else{
-   priv->reg.rate_set.body[0] = TX_RATE_1M|BASIC_RATE;
+   } else if (*(value + 1) == '2') {
+   priv->reg.rate_set.body[0] = TX_RATE_12M | BASIC_RATE;
+   } else if (*(value + 1) == '1') {
+   priv->reg.rate_set.body[0] = TX_RATE_11M | BASIC_RATE;
+   } else {
+   priv->reg.rate_set.body[0] = TX_RATE_1M | BASIC_RATE;
}
break;
-   case '2': /* 2M 24M */
-   if(*(value+1) == '4'){
-   priv->reg.rate_set.body[0] = TX_RATE_24M|BASIC_RATE;
-   }
-   else{
-   priv->reg.rate_set.body[0] = TX_RATE_2M|BASIC_RATE;
+   case '2':   /* 2M 24M */
+   if (*(value + 1) == '4') {
+   priv->reg.rate_set.body[0] = TX_RATE_24M | BASIC_RATE;
+   } else {
+   priv->reg.rate_set.body[0] = TX_RATE_2M | BASIC_RATE;
}
break;
-   case '3': /* 36M */
+   case '3':   /* 36M */
priv->reg.rate_set.body[0] = TX_RATE_36M;
break;
-   case '4': /* 48M */
+   case '4':   /* 48M */
priv->reg.rate_set.body[0] = TX_RATE_48M;
break;
-   case '5': /* 5.5M 54M */
-   if(*(value+1) == '4'){
+   case '5':   /* 5.5M 54M */
+   if (*(value + 1) == '4') {
priv->reg.rate_set.body[0] = TX_RATE_54M;
-   }
-   else{
-   priv->reg.rate_set.body[0] = TX_RATE_5M|BASIC_RATE;
+   } else {
+   priv->reg.rate_set.body[0] = TX_RATE_5M | BASIC_RATE;
}
break;
-   case '6': /* 6M */
-

[PATCH 07/27] staging: ks7010: use long preamble as default

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

I had a problem connecting to a network with a short preamble, so let's
make the safer option the default.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 7d33070b3428e7..abe99a52ae1ad8 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -193,7 +193,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
{8,"WepIndex","1"}, /* 13 */
{7,"WepType","STRING"}, /* 14 */
{3,"Wep","OFF"},/* 15 */
-   {13,"PREAMBLE_TYPE","SHORT"},   /* 16 */
+   {13,"PREAMBLE_TYPE","LONG"},/* 16 */
{8,"ScanType","ACTIVE_SCAN"},   /* 17 */
{8,"ROM_FILE", ROM_FILE},   /* 18 */
{7,"PhyType", "BG_MODE"},   /* 19 */
@@ -216,7 +216,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
priv->reg.ssid.body[0] = '\0';  /* SSID */
priv->reg.ssid.size = 0;/* SSID size */
priv->reg.tx_rate = TX_RATE_AUTO;   /* TxRate Fully Auto */
-   priv->reg.preamble = SHORT_PREAMBLE;/* Preamble = SHORT */
+   priv->reg.preamble = LONG_PREAMBLE; /* Preamble = LONG */
priv->reg.powermgt = POWMGT_ACTIVE_MODE;/* POWMGT_ACTIVE_MODE */
priv->reg.scan_type = ACTIVE_SCAN;  /* Active */
priv->reg.beacon_lost_count = 20;   /* Beacon Lost Count */
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 17/27] staging: ks7010: indent ks7010_sdio.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_sdio.h | 64 +---
 1 file changed, 30 insertions(+), 34 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.h 
b/drivers/staging/ks7010/ks7010_sdio.h
index 1d16673e5dae02..aea3727caf483b 100644
--- a/drivers/staging/ks7010/ks7010_sdio.h
+++ b/drivers/staging/ks7010/ks7010_sdio.h
@@ -21,7 +21,7 @@
 #define DEVICE_ALIGNMENT 32
 
 /*  SDIO KeyStream vendor and device */
-#define SDIO_VENDOR_ID_KS_CODE_A   0x005b 
+#define SDIO_VENDOR_ID_KS_CODE_A   0x005b
 #define SDIO_VENDOR_ID_KS_CODE_B   0x0023
 #define SDIO_DEVICE_ID_KS_7010 0x7910
 
@@ -48,8 +48,8 @@
  * for network packet (less than 2048 bytes data)
  */
 #define WSTATUS_RSIZE  0x14
-#define WSTATUS_MASK   0x80 /* Write Status Register value */
-#define RSIZE_MASK 0x7F /* Read Data Size Register value [10:4] */
+#define WSTATUS_MASK   0x80/* Write Status Register value */
+#define RSIZE_MASK 0x7F/* Read Data Size Register value [10:4] 
*/
 
 /* ARM to SD interrupt Enable */
 #define INT_ENABLE 0x20
@@ -88,52 +88,48 @@
 
 #define KS7010_IRAM_ADDRESS0x0600
 
-
 /* 
  * struct define
  */
 struct hw_info_t {
-   struct ks_sdio_card *sdio_card; 
+   struct ks_sdio_card *sdio_card;
struct completion ks7010_sdio_wait;
struct workqueue_struct *ks7010sdio_wq;
struct delayed_work rw_wq;
-   unsigned char   *read_buf;
+   unsigned char *read_buf;
struct tasklet_struct rx_bh_task;
 };
 
 struct ks_sdio_packet {
-struct ks_sdio_packet   *next;
-u16 nb;
-u8  buffer[0] __attribute__((aligned(4)));
+   struct ks_sdio_packet *next;
+   u16 nb;
+   u8 buffer[0] __attribute__ ((aligned(4)));
 };
 
-
 struct ks_sdio_card {
-   struct sdio_func*func;
+   struct sdio_func *func;
struct ks_wlan_private *priv;
-   int model;
-   const char  *firmware;
-spinlock_t  lock;
+   int model;
+   const char *firmware;
+   spinlock_t lock;
 };
 
-
-
 /* Tx Device struct */
-#defineTX_DEVICE_BUFF_SIZE 1024 
+#defineTX_DEVICE_BUFF_SIZE 1024
 
 struct tx_device_buffer {
-unsigned char *sendp;  /* pointer of send req data */
-unsigned int  size;
-   void(*complete_handler)(void *arg1, void *arg2);
-   void*arg1;
-   void*arg2;
+   unsigned char *sendp;   /* pointer of send req data */
+   unsigned int size;
+   void (*complete_handler) (void *arg1, void *arg2);
+   void *arg1;
+   void *arg2;
 };
 
-struct tx_device{
-struct tx_device_buffer tx_dev_buff[TX_DEVICE_BUFF_SIZE];
-unsigned int   qhead; /* tx buffer queue first pointer */
-unsigned int   qtail; /* tx buffer queue last pointer */
-spinlock_t  tx_dev_lock;
+struct tx_device {
+   struct tx_device_buffer tx_dev_buff[TX_DEVICE_BUFF_SIZE];
+   unsigned int qhead; /* tx buffer queue first pointer */
+   unsigned int qtail; /* tx buffer queue last pointer */
+   spinlock_t tx_dev_lock;
 };
 
 /* Rx Device struct */
@@ -141,15 +137,15 @@ struct tx_device{
 #defineRX_DEVICE_BUFF_SIZE 32
 
 struct rx_device_buffer {
-   unsigned char   data[RX_DATA_SIZE];
-   unsigned intsize;
+   unsigned char data[RX_DATA_SIZE];
+   unsigned int size;
 };
 
-struct rx_device{
-struct rx_device_buffer rx_dev_buff[RX_DEVICE_BUFF_SIZE];
-unsigned int   qhead; /* rx buffer queue first pointer */
-   unsigned intqtail; /* rx buffer queue last pointer */
-   spinlock_t  rx_dev_lock;
+struct rx_device {
+   struct rx_device_buffer rx_dev_buff[RX_DEVICE_BUFF_SIZE];
+   unsigned int qhead; /* rx buffer queue first pointer */
+   unsigned int qtail; /* rx buffer queue last pointer */
+   spinlock_t rx_dev_lock;
 };
 #defineROM_FILE "ks7010sd.rom"
 #defineCFG_FILE "ks79xx.cfg"
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 19/27] staging: ks7010: indent ks_hostif.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.h | 525 ++---
 1 file changed, 262 insertions(+), 263 deletions(-)

diff --git a/drivers/staging/ks7010/ks_hostif.h 
b/drivers/staging/ks7010/ks_hostif.h
index c333ce1a4baa6e..01de478d45ea60 100644
--- a/drivers/staging/ks7010/ks_hostif.h
+++ b/drivers/staging/ks7010/ks_hostif.h
@@ -62,141 +62,140 @@
  */
 
 struct hostif_hdr {
-   uint16_tsize;
-   uint16_tevent;
-} __attribute__((packed));
+   uint16_t size;
+   uint16_t event;
+} __attribute__ ((packed));
 
 struct hostif_data_request_t {
struct hostif_hdr header;
-   uint16_tauth_type;
+   uint16_t auth_type;
 #define TYPE_DATA 0x
 #define TYPE_AUTH 0x0001
-   uint16_treserved;
-   uint8_t data[0];
-} __attribute__((packed));
+   uint16_t reserved;
+   uint8_t data[0];
+} __attribute__ ((packed));
 
 struct hostif_data_indication_t {
struct hostif_hdr header;
-   uint16_tauth_type;
+   uint16_t auth_type;
 /* #define TYPE_DATA 0x */
 #define TYPE_PMK1 0x0001
 #define TYPE_GMK1 0x0002
 #define TYPE_GMK2 0x0003
-   uint16_treserved;
-   uint8_t data[0];
-} __attribute__((packed));
+   uint16_t reserved;
+   uint8_t data[0];
+} __attribute__ ((packed));
 
 #define CHANNEL_LIST_MAX_SIZE 14
 struct channel_list_t {
-   uint8_t size;
-   uint8_t body[CHANNEL_LIST_MAX_SIZE];
-   uint8_t pad;
-} __attribute__((packed));
+   uint8_t size;
+   uint8_t body[CHANNEL_LIST_MAX_SIZE];
+   uint8_t pad;
+} __attribute__ ((packed));
 
 /* MIB Attribute */
-#define DOT11_MAC_ADDRESS 0x21010100 /* MAC Address (R) */
-#define DOT11_PRODUCT_VERSION 0x31024100 /* FirmWare Version (R)*/
-#define DOT11_RTS_THRESHOLD   0x21020100 /* RTS Threshold (R/W) */
-#define DOT11_FRAGMENTATION_THRESHOLD 0x21050100 /* Fragment Threshold 
(R/W) */
-#define DOT11_PRIVACY_INVOKED 0x15010100 /* WEP ON/OFF (W) */
-#define DOT11_WEP_DEFAULT_KEY_ID  0x15020100 /* WEP Index (W) */
-#define DOT11_WEP_DEFAULT_KEY_VALUE1  0x13020101 /* WEP Key#1(TKIP AES: 
PairwiseTemporalKey) (W) */
-#define DOT11_WEP_DEFAULT_KEY_VALUE2  0x13020102 /* WEP Key#2(TKIP AES: 
GroupKey1) (W) */
-#define DOT11_WEP_DEFAULT_KEY_VALUE3  0x13020103 /* WEP Key#3(TKIP AES: 
GroupKey2) (W) */
-#define DOT11_WEP_DEFAULT_KEY_VALUE4  0x13020104 /* WEP Key#4 (W) */
-#define DOT11_WEP_LIST0x13020100 /* WEP LIST */
-#defineDOT11_DESIRED_SSID0x11090100 /* SSID */
-#defineDOT11_CURRENT_CHANNEL 0x45010100 /* channel set */
-#defineDOT11_OPERATION_RATE_SET  0x0100 /* rate set */
-
-#define LOCAL_AP_SEARCH_INTEAVAL  0xF1010100 /* AP search interval 
(R/W) */
-#define LOCAL_CURRENTADDRESS  0xF1050100 /* MAC Adress change (W) 
*/
-#define LOCAL_MULTICAST_ADDRESS   0xF1060100 /* Multicast Adress (W) */
-#define LOCAL_MULTICAST_FILTER0xF1060200 /* Multicast Adress 
Filter enable/disable (W) */
-#define LOCAL_SEARCHED_AP_LIST0xF1030100 /* AP list (R) */
-#define LOCAL_LINK_AP_STATUS  0xF1040100 /* Link AP status (R) */
-#defineLOCAL_PACKET_STATISTICS   0xF1020100 /* tx,rx packets 
statistics */
-#define LOCAL_AP_SCAN_LIST_TYPE_SET  0xF1030200 /* AP_SCAN_LIST_TYPE */
-
-#define DOT11_RSN_ENABLED 0x15070100 /* WPA enable/disable (W) 
*/
-#define LOCAL_RSN_MODE0x56010100 /* RSN mode WPA/WPA2 (W) 
*/
-#define DOT11_RSN_CONFIG_MULTICAST_CIPHER 0x51040100 /* GroupKeyCipherSuite 
(W) */
-#define DOT11_RSN_CONFIG_UNICAST_CIPHER   0x52020100 /* PairwiseKeyCipherSuite 
(W) */
-#define DOT11_RSN_CONFIG_AUTH_SUITE   0x53020100 /* 
AuthenticationKeyManagementSuite (W) */
-#define DOT11_RSN_CONFIG_VERSION  0x51020100 /* RSN version (W) */
-#define LOCAL_RSN_CONFIG_ALL  0x5F010100 /* RSN CONFIG ALL (W) */
-#define DOT11_PMK_TSC 0x55010100 /* PMK_TSC (W) */
-#define DOT11_GMK1_TSC0x55010101 /* GMK1_TSC (W) */
-#define DOT11_GMK2_TSC0x55010102 /* GMK2_TSC (W) */
-#define DOT11_GMK3_TSC   0x55010103 /* GMK3_TSC */
-#define LOCAL_PMK 0x58010100 /* Pairwise Master Key 
cache (W) */
-
-#define LOCAL_REGION  0xF10A0100 /* Region setting */
+#define DOT11_MAC_ADDRESS 0x21010100   /* MAC Address (R) */
+#define DOT11_PRODUCT_VERSION 0x31024100   /* FirmWare Version (R) 
*/
+#define DOT11_RTS_THRESHOLD   0x21020100   /* RTS Threshold (R/W) 
*/
+#define DOT11_FRAGMENTATION_THRESHOLD 0x21050100   /* Fragment Threshold 
(R/W) */
+#define DOT11_PRIVACY_INVOKED 0x15010100   /* WEP ON/OFF (W) */
+#define DOT1

[PATCH 27/27] staging: ks7010: fix module annotations

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

List all authors, beautify description, match license to what is stated
in file headers, add firmware information.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_sdio.c | 10 --
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 8e8476b52cedbc..8c0d1bb58dcd9c 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -1261,9 +1261,7 @@ static void __exit ks7010_sdio_exit(void)
 module_init(ks7010_sdio_init);
 module_exit(ks7010_sdio_exit);
 
-MODULE_AUTHOR("Qi-Hardware based on KeyStream driver");
-MODULE_DESCRIPTION("Driver for KeyStream, KS7010 based SDIO cards. ");
-#ifdef MODULE_LICENSE
-MODULE_LICENSE("GPL");
-#endif
-MODULE_SUPPORTED_DEVICE("KS7910");
+MODULE_AUTHOR("Sang Engineering, Qi-Hardware, KeyStream");
+MODULE_DESCRIPTION("Driver for KeyStream KS7010 based SDIO cards");
+MODULE_LICENSE("GPL v2");
+MODULE_FIRMWARE(ROM_FILE);
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 02/27] staging: ks7010: remove non-SDIO code and #ifdefs

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

I couldn't find any trace of code or even products using ks7010 with
something else than SDIO. So, remove the conditionals.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/Makefile|  2 +-
 drivers/staging/ks7010/ks7010_config.c |  6 ---
 drivers/staging/ks7010/ks_hostif.c | 70 --
 drivers/staging/ks7010/ks_wlan.h   | 10 -
 4 files changed, 1 insertion(+), 87 deletions(-)

diff --git a/drivers/staging/ks7010/Makefile b/drivers/staging/ks7010/Makefile
index 68b7ebf57bebd6..32b0efc7bd00e8 100644
--- a/drivers/staging/ks7010/Makefile
+++ b/drivers/staging/ks7010/Makefile
@@ -1,5 +1,5 @@
 obj-$(CONFIG_KS7010) += ks7010.o
 
-ccflags-y   += -D_SDIO_ -DKS_WLAN_DEBUG=0
+ccflags-y   += -DKS_WLAN_DEBUG=0
 ks7010-y:= michael_mic.o ks_hostif.o ks_wlan_net.o ks_debug.o \
ks7010_sdio.o ks7010_config.o
diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 4a8098452cdd28..e8a42077a4b381 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -268,13 +268,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
priv->reg.rate_set.size = 12;
 
 #ifndef NO_FIRMWARE_CLASS
-#if (defined _PCMCIA_)
-   dev = &priv->ks_wlan_hw.pcmcia_dev->dev;
-#elif (defined _PCI_)
-   dev = &priv->ks_wlan_hw.pci_dev->dev;
-#elif (defined _SDIO_)
dev = &priv->ks_wlan_hw.sdio_card->func->dev;
-#endif
if((retval = request_firmware(&fw_entry, cfg_file, dev)) !=0 ){
DPRINTK(1, "error request_firmware() file=%s ret=%d\n", 
cfg_file, retval);
return 1;
diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 402ddba400ffdd..0295bb4921fa20 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -108,51 +108,12 @@ int ks_wlan_do_power_save(ks_wlan_private *priv)
 
DPRINTK(4,"psstatus.status=%d\n",atomic_read(&priv->psstatus.status));
 
-#ifdef _SDIO_
if((priv->connect_status & CONNECT_STATUS_MASK) == CONNECT_STATUS){
hostif_sme_enqueue(priv, SME_POW_MNGMT_REQUEST);
}
else{
priv->dev_state = DEVICE_STATE_READY;
}
-#else
-   if((priv->connect_status & CONNECT_STATUS_MASK) == CONNECT_STATUS){
-   switch(atomic_read(&priv->psstatus.status)){
-   case PS_ACTIVE_SET:
-   case PS_WAKEUP:
-   case PS_SAVE_SET:
-   case PS_SNOOZE:
-   break;
-   case PS_CONF_WAIT:
-   atomic_set(&priv->psstatus.confirm_wait,0);
-   break;
-   case PS_NONE:
-   default:
-   hostif_sme_enqueue(priv, SME_POW_MNGMT_REQUEST);
-   break;
-   }
-
-   }
-   else{
-   switch(atomic_read(&priv->psstatus.status)){
-   case PS_ACTIVE_SET:
-   case PS_WAKEUP:
-   case PS_SAVE_SET:
-   break;
-   case PS_CONF_WAIT:
-   atomic_set(&priv->psstatus.confirm_wait,0);
-   atomic_set(&priv->psstatus.status, PS_WAKEUP);
-   break;
-   case PS_SNOOZE:
-   ks_wlan_hw_power_save(priv);
-   break;
-   case PS_NONE:
-   default:
-   hostif_sme_enqueue(priv, SME_POW_MNGMT_REQUEST);
-   break;
-   }
-   }
-#endif
return rc;
 }
 
@@ -750,17 +711,11 @@ void hostif_power_mngmt_confirm(ks_wlan_private *priv)
 
if(priv->reg.powermgt > POWMGT_ACTIVE_MODE &&
   priv->reg.operation_mode == MODE_INFRASTRUCTURE){
-#if !defined(_SDIO_)
-   atomic_set(&priv->psstatus.status,PS_SAVE_SET);
-#endif
atomic_set(&priv->psstatus.confirm_wait, 0);
priv->dev_state = DEVICE_STATE_SLEEP;
ks_wlan_hw_power_save(priv);
}else{
priv->dev_state = DEVICE_STATE_READY;
-#if !defined(_SDIO_)
-   atomic_set(&priv->psstatus.status,PS_ACTIVE_SET);
-#endif
}
 
 }
@@ -833,9 +788,6 @@ void hostif_connect_indication(ks_wlan_private *priv)
/* for power save */
atomic_set(&priv->psstatus.snooze_guard, 0);
atomic_set(&priv->psstatus.confirm_wait,0);
-#if !defined(_SDIO_)
-   atomic_set(&priv->psstatus.status, PS_NONE);
-#endif
}
ks_wlan_do_power_save(priv);
 
@@ -894,10 +846,8 @@ void hostif_stop_confirm(ks_wlan_private *priv)
union iwreq_data wrqu0;
 
DPRINTK(3,"\n");
-#ifdef _SDIO_
if(priv->dev_state == DEVICE_STATE_SLEEP)
priv->dev_state = DEVICE_STATE_READY;
-#endif
 
/* discon

[PATCH 26/27] staging: ks7010: remove supported card table with one element

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

There is only this card supported, no need to iterate over the table.
The resulting firmware filename wasn't used anyway, but came from the
config file or hardcoded default.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_sdio.c | 31 ++-
 drivers/staging/ks7010/ks7010_sdio.h |  2 --
 2 files changed, 2 insertions(+), 31 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index ed4d579300ad96..8e8476b52cedbc 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -35,19 +35,6 @@ static const struct sdio_device_id if_sdio_ids[] = {
{ /* all zero */ }
 };
 
-struct ks_sdio_model {
-   int model;
-   const char *firmware;
-};
-
-static struct ks_sdio_model ks_sdio_models[] = {
-   {
-   /* ks7010 */
-   .model = 0x10,
-   .firmware = "ks7010sd.rom",
-   },
-};
-
 static int ks7910_sdio_probe(struct sdio_func *function,
 const struct sdio_device_id *device);
 static void ks7910_sdio_remove(struct sdio_func *function);
@@ -996,7 +983,7 @@ static int ks7910_sdio_probe(struct sdio_func *func,
struct ks_sdio_card *card;
struct net_device *netdev;
unsigned char rw_data;
-   int i = 0, ret;
+   int ret;
 
DPRINTK(5, "ks7910_sdio_probe()\n");
 
@@ -1009,22 +996,8 @@ static int ks7910_sdio_probe(struct sdio_func *func,
return -ENOMEM;
 
card->func = func;
-   card->model = 0x10;
spin_lock_init(&card->lock);
 
-   /* select model */
-   for (i = 0; i < ARRAY_SIZE(ks_sdio_models); i++) {
-   if (card->model == ks_sdio_models[i].model)
-   break;
-   }
-
-   if (i == ARRAY_SIZE(ks_sdio_models)) {
-   DPRINTK(5, "unkown card model 0x%x\n", card->model);
-   goto error;
-   }
-
-   card->firmware = ks_sdio_models[i].firmware;
-
/*** Initialize  SDIO ***/
sdio_claim_host(func);
 
@@ -1172,7 +1145,7 @@ static int ks7910_sdio_probe(struct sdio_func *func,
sdio_release_host(func);
sdio_set_drvdata(func, NULL);
kfree(card);
- error:
+
return -ENODEV;
 }
 
diff --git a/drivers/staging/ks7010/ks7010_sdio.h 
b/drivers/staging/ks7010/ks7010_sdio.h
index aea3727caf483b..2d7be5dae157c7 100644
--- a/drivers/staging/ks7010/ks7010_sdio.h
+++ b/drivers/staging/ks7010/ks7010_sdio.h
@@ -109,8 +109,6 @@ struct ks_sdio_packet {
 struct ks_sdio_card {
struct sdio_func *func;
struct ks_wlan_private *priv;
-   int model;
-   const char *firmware;
spinlock_t lock;
 };
 
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 12/27] staging: ks7010: fix printk format warnings

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Use proper type for size_t.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c | 2 +-
 drivers/staging/ks7010/ks7010_sdio.c   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 06ff8852e17f33..4b00d25cd8f575 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -257,7 +257,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
if (request_firmware_direct(&fw_entry, cfg_file, dev))
return 0;
 
-   DPRINTK(4, "success request_firmware() file=%s size=%d\n", cfg_file, 
fw_entry->size);
+   DPRINTK(4, "success request_firmware() file=%s size=%zu\n", cfg_file, 
fw_entry->size);
cur_p = fw_entry->data;
end_p = cur_p + fw_entry->size;
*end_p = '\0';
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 3fb432c9dd314d..50364909449aec 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -750,7 +750,7 @@ static int ks79xx_upload_firmware(ks_wlan_private *priv, 
struct ks_sdio_card *ca
DPRINTK(1,"error request_firmware() file=%s\n", 
priv->reg.rom_file);
return 1;
}
-   DPRINTK(4,"success request_firmware() file=%s size=%d\n", 
priv->reg.rom_file, fw_entry->size);
+   DPRINTK(4,"success request_firmware() file=%s size=%zu\n", 
priv->reg.rom_file, fw_entry->size);
length = fw_entry->size;
 
/* Load Program */
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 21/27] staging: ks7010: indent ks_wlan_ioctl.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_wlan_ioctl.h | 11 ++-
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/ks7010/ks_wlan_ioctl.h 
b/drivers/staging/ks7010/ks_wlan_ioctl.h
index e7469f7338f7af..cc4669eddcc1f7 100644
--- a/drivers/staging/ks7010/ks_wlan_ioctl.h
+++ b/drivers/staging/ks7010/ks_wlan_ioctl.h
@@ -36,8 +36,8 @@
 #define KS_WLAN_GET_SCAN_TYPE  SIOCIWFIRSTPRIV+13
 #define KS_WLAN_SET_RX_GAINSIOCIWFIRSTPRIV+14
 #define KS_WLAN_GET_RX_GAINSIOCIWFIRSTPRIV+15
-#define KS_WLAN_HOSTT  SIOCIWFIRSTPRIV+16  /* unused */
-//#define KS_WLAN_SET_REGION   SIOCIWFIRSTPRIV+17
+#define KS_WLAN_HOSTT  SIOCIWFIRSTPRIV+16  /* unused */
+//#define KS_WLAN_SET_REGIONSIOCIWFIRSTPRIV+17
 #define KS_WLAN_SET_BEACON_LOSTSIOCIWFIRSTPRIV+18
 #define KS_WLAN_GET_BEACON_LOSTSIOCIWFIRSTPRIV+19
 
@@ -51,8 +51,8 @@
 #define KS_WLAN_GET_CTS_MODE   SIOCIWFIRSTPRIV+25
 /* SIOCIWFIRSTPRIV+26 */
 /* SIOCIWFIRSTPRIV+27 */
-#define KS_WLAN_SET_SLEEP_MODE SIOCIWFIRSTPRIV+28 /* sleep mode */
-#define KS_WLAN_GET_SLEEP_MODE SIOCIWFIRSTPRIV+29 /* sleep mode */
+#define KS_WLAN_SET_SLEEP_MODE SIOCIWFIRSTPRIV+28  /* sleep mode */
+#define KS_WLAN_GET_SLEEP_MODE SIOCIWFIRSTPRIV+29  /* sleep mode */
 /* SIOCIWFIRSTPRIV+30 */
 /* SIOCIWFIRSTPRIV+31 */
 
@@ -62,7 +62,8 @@
 #include 
 
 extern int ks_wlan_read_config_file(struct ks_wlan_private *priv);
-extern int ks_wlan_setup_parameter(struct ks_wlan_private *priv, unsigned int 
commit_flag);
+extern int ks_wlan_setup_parameter(struct ks_wlan_private *priv,
+  unsigned int commit_flag);
 
 #endif /* __KERNEL__ */
 
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 06/27] staging: ks7010: avoid workqueue races

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

My Spectec SDW823 card oopsed when it was already inserted during boot.
When debugging this, I noticed that the card init was done in a seperate
workqueue which was only activated once in probe. After removing the
workqueue and calling the card init directly from probe, the OOPS went
away. It turned out this is the same OOPS which happened when removing
the card, so this seems possible now. Note: There is still a
not-understood card-removed event during boot, but at least it doesn't
crash anymore and the card will be re-probed right away.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/README|  1 -
 drivers/staging/ks7010/ks7010_sdio.c | 28 ++--
 drivers/staging/ks7010/ks7010_sdio.h |  2 --
 3 files changed, 2 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/ks7010/README b/drivers/staging/ks7010/README
index 390e821efc0bcf..5cbb4ca999747e 100644
--- a/drivers/staging/ks7010/README
+++ b/drivers/staging/ks7010/README
@@ -28,7 +28,6 @@ Now the TODOs:
   should understand the change you submit.
 - drop using a config file and use an upstream technique for configuration
 - fix the 'card removal' event when card is inserted when booting
-- driver crashes when removing the card
 - check what other upstream wireless mechanisms can be used instead of the
   custom ones here
 
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 9300658c4aed8d..5b78522fad1ec1 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -817,14 +817,8 @@ static int ks79xx_upload_firmware(ks_wlan_private *priv, 
struct ks_sdio_card *ca
return rc;
 }
 
-static void card_init_task(struct work_struct *work)
+static void ks7010_card_init(struct ks_wlan_private *priv)
 {
-   struct hw_info_t *hw;
-   struct ks_wlan_private *priv;
-
-   hw = container_of(work, struct hw_info_t, init_task);
-   priv = container_of(hw, struct ks_wlan_private, ks_wlan_hw);
-
DPRINTK(5,"\ncard_init_task()\n");
 
/* init_waitqueue_head(&priv->confirm_wait); */
@@ -1052,23 +1046,11 @@ static int ks7910_sdio_probe(struct sdio_func *func, 
const struct sdio_device_id
goto error_free_read_buf;
}
 
-   priv->ks_wlan_hw.ks7010sdio_init = 
create_singlethread_workqueue("ks7010sdio_init");
-   if(!priv->ks_wlan_hw.ks7010sdio_init){
-   DPRINTK(1, "create_workqueue failed !!\n");
-   goto error_free_sdio_wq;
-   }
-
-   INIT_WORK(&priv->ks_wlan_hw.init_task, card_init_task);
INIT_DELAYED_WORK(&priv->ks_wlan_hw.rw_wq, ks7010_rw_function);
-
-   queue_work(priv->ks_wlan_hw.ks7010sdio_init, 
&priv->ks_wlan_hw.init_task);
+   ks7010_card_init(priv);
 
return 0;
 
-error_free_sdio_wq:
-   flush_workqueue(priv->ks_wlan_hw.ks7010sdio_wq);
-   destroy_workqueue(priv->ks_wlan_hw.ks7010sdio_wq);
-   priv->ks_wlan_hw.ks7010sdio_wq = NULL;
 error_free_read_buf:
kfree(priv->ks_wlan_hw.read_buf);
priv->ks_wlan_hw.read_buf = NULL;
@@ -1139,12 +1121,6 @@ static void ks7910_sdio_remove(struct sdio_func *func)
}
DPRINTK(1, 
"destroy_workqueue(priv->ks_wlan_hw.ks7010sdio_wq);\n");
 
-   if(priv->ks_wlan_hw.ks7010sdio_init){
-   flush_workqueue(priv->ks_wlan_hw.ks7010sdio_init);
-   destroy_workqueue(priv->ks_wlan_hw.ks7010sdio_init);
-   }
-   DPRINTK(1, 
"destroy_workqueue(priv->ks_wlan_hw.ks7010sdio_init);\n");
-
hostif_exit(priv);
DPRINTK(1, "hostif_exit\n");
 
diff --git a/drivers/staging/ks7010/ks7010_sdio.h 
b/drivers/staging/ks7010/ks7010_sdio.h
index 5bf01abbf2ab6c..93823837f19e65 100644
--- a/drivers/staging/ks7010/ks7010_sdio.h
+++ b/drivers/staging/ks7010/ks7010_sdio.h
@@ -96,8 +96,6 @@ struct hw_info_t {
struct ks_sdio_card *sdio_card; 
struct completion ks7010_sdio_wait;
struct workqueue_struct *ks7010sdio_wq;
-   struct workqueue_struct *ks7010sdio_init;
-   struct work_struct init_task;
struct delayed_work rw_wq;
unsigned char   *read_buf;
struct tasklet_struct rx_bh_task;
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 20/27] staging: ks7010: indent ks_wlan.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_wlan.h | 246 +++
 1 file changed, 121 insertions(+), 125 deletions(-)

diff --git a/drivers/staging/ks7010/ks_wlan.h b/drivers/staging/ks7010/ks_wlan.h
index 58e3a5a6b44472..f0f9f8ef7d6185 100644
--- a/drivers/staging/ks7010/ks_wlan.h
+++ b/drivers/staging/ks7010/ks_wlan.h
@@ -22,16 +22,16 @@
 #include 
 #include 
 
-#include /* spinlock_t   
*/
-#include/* wait_queue_head_t
*/
-#include/* pid_t
*/
-#include/* struct net_device_stats,  struct sk_buff 
*/
+#include /* spinlock_t   
*/
+#include/* wait_queue_head_t
*/
+#include/* pid_t
*/
+#include/* struct net_device_stats,  struct sk_buff 
*/
 #include 
 #include 
-#include /* struct atmic_t   
*/
+#include /* struct atmic_t   
*/
 #include/* struct timer_list */
 #include 
-#include/* struct completion */
+#include   /* struct completion */
 #include 
 
 #include 
@@ -46,37 +46,37 @@
 #endif
 
 struct ks_wlan_parameter {
-   uint8_t operation_mode;/* Operation Mode */
-   uint8_t channel;   /*  Channel */
-   uint8_t tx_rate;   /*  Transmit Rate */
+   uint8_t operation_mode; /* Operation Mode */
+   uint8_t channel;/*  Channel */
+   uint8_t tx_rate;/*  Transmit Rate */
struct {
uint8_t size;
uint8_t body[16];
} rate_set;
-   uint8_t bssid[ETH_ALEN];/* BSSID */
+   uint8_t bssid[ETH_ALEN];/* BSSID */
struct {
uint8_t size;
-   uint8_t body[32+1];
-   } ssid;/*  SSID */
-   uint8_t preamble;  /*  Preamble */
-   uint8_t powermgt;  /*  PowerManagementMode */
-   uint32_tscan_type; /*  AP List Scan Type */
+   uint8_t body[32 + 1];
+   } ssid; /*  SSID */
+   uint8_t preamble;   /*  Preamble */
+   uint8_t powermgt;   /*  PowerManagementMode */
+   uint32_t scan_type; /*  AP List Scan Type */
 #define BEACON_LOST_COUNT_MIN 0
 #define BEACON_LOST_COUNT_MAX 65535
-   uint32_tbeacon_lost_count; /*  Beacon Lost Count */
-   uint32_trts;   /*  RTS Threashold */
-   uint32_tfragment;  /*  Fragmentation Threashold */
-   uint32_tprivacy_invoked;
-   uint32_twep_index;
+   uint32_t beacon_lost_count; /*  Beacon Lost Count */
+   uint32_t rts;   /*  RTS Threashold */
+   uint32_t fragment;  /*  Fragmentation Threashold */
+   uint32_t privacy_invoked;
+   uint32_t wep_index;
struct {
uint8_t size;
-   uint8_t val[13*2+1];
+   uint8_t val[13 * 2 + 1];
} wep_key[4];
-   uint16_tauthenticate_type;  
-   uint16_tphy_type; /* 11b/11g/11bg mode type*/
-   uint16_tcts_mode; /* for 11g/11bg mode cts mode */
-   uint16_tphy_info_timer; /* phy information timer */
-   charrom_file[256];
+   uint16_t authenticate_type;
+   uint16_t phy_type;  /* 11b/11g/11bg mode type */
+   uint16_t cts_mode;  /* for 11g/11bg mode cts mode */
+   uint16_t phy_info_timer;/* phy information timer */
+   char rom_file[256];
 };
 
 enum {
@@ -157,7 +157,6 @@ enum {
SME_START_REQUEST,
SME_GET_EEPROM_CKSUM,
 
-
SME_MIC_FAILURE_CONFIRM,
SME_START_CONFIRM,
 
@@ -187,7 +186,7 @@ enum {
SME_WEP_SET_CONFIRM,
SME_TERMINATE,
 
-   SME_EVENT_SIZE/* end */
+   SME_EVENT_SIZE  /* end */
 };
 
 /* SME Status */
@@ -200,58 +199,58 @@ enum {
 
 #defineSME_EVENT_BUFF_SIZE 128
 
-struct sme_info{
-   int sme_status;
-   int event_buff[SME_EVENT_BUFF_SIZE];
-   unsigned intqhead;
-   unsigned intqtail;
+struct sme_info {
+   int sme_status;
+   int event_buff[SME_EVENT_BUFF_SIZE];
+   unsigned int qhead;
+   unsigned int qtail;
 #ifdef KS_WLAN_DEBUG
-  /* for debug */
+   /* for debug */
unsigned int max_event_count;
 #endif
-   spinlock_tsme_spin;
+   spinlock_t sme_spin;
unsigned long sme_flag;
 };
 
-struct hostt_t{
-   int buff[SME_EVENT_BUFF_SIZE];
-   unsigned intqhead;
-   unsigned intqtail;
+struct hostt_t {
+   int buff[SME_EVENT_BUFF_SIZE];
+   unsigned int qhead;
+   unsigned int qtail;
 };
 
 #define RSN_IE_BODY_MAX 64
 struct rsn_ie_t {
-   uint8_t id; /* 0xdd = WPA or 0x3

[PATCH 14/27] staging: ks7010: remove unecessary typedef

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Let's simply specify the struct to keep in sync with kernel coding
style.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c |   4 +-
 drivers/staging/ks7010/ks7010_sdio.c   |  44 -
 drivers/staging/ks7010/ks7010_sdio.h   |   2 +-
 drivers/staging/ks7010/ks_hostif.c | 114 +++---
 drivers/staging/ks7010/ks_hostif.h |  10 +-
 drivers/staging/ks7010/ks_wlan.h   |   4 +-
 drivers/staging/ks7010/ks_wlan_ioctl.h |   4 +-
 drivers/staging/ks7010/ks_wlan_net.c   | 168 -
 8 files changed, 175 insertions(+), 175 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index 4b00d25cd8f575..48809bcc779739 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -87,7 +87,7 @@ void analyze_hex_wep_key(struct ks_wlan_parameter *param, int 
wep_key_index, cha
 }
 
 static
-int rate_set_configuration(ks_wlan_private *priv, char *value)
+int rate_set_configuration(struct ks_wlan_private *priv, char *value)
 {
int rc=0;
 
@@ -169,7 +169,7 @@ int rate_set_configuration(ks_wlan_private *priv, char 
*value)
 }
 
 #include 
-int ks_wlan_read_config_file(ks_wlan_private *priv)
+int ks_wlan_read_config_file(struct ks_wlan_private *priv)
 {
struct {
const int key_len;
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 50364909449aec..fb9f0b533d867e 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -51,9 +51,9 @@ static struct ks_sdio_model ks_sdio_models[] = {
 static int ks7910_sdio_probe(struct sdio_func *function, const struct 
sdio_device_id *device);
 static void ks7910_sdio_remove(struct sdio_func *function);
 static void ks7010_rw_function(struct work_struct *work);
-static int ks7010_sdio_read( ks_wlan_private *priv, unsigned int address,
+static int ks7010_sdio_read( struct ks_wlan_private *priv, unsigned int 
address,
 unsigned char *buffer, int length );
-static int ks7010_sdio_write( ks_wlan_private *priv, unsigned int address,
+static int ks7010_sdio_write( struct ks_wlan_private *priv, unsigned int 
address,
  unsigned char *buffer, int length );
 /* macro */
 
@@ -71,7 +71,7 @@ static int ks7010_sdio_write( ks_wlan_private *priv, unsigned 
int address,
 #define cnt_rxqbody(priv) \
 (((priv->rx_dev.qtail + RX_DEVICE_BUFF_SIZE) - (priv->rx_dev.qhead)) % 
RX_DEVICE_BUFF_SIZE )
 
-void ks_wlan_hw_sleep_doze_request(ks_wlan_private *priv)
+void ks_wlan_hw_sleep_doze_request(struct ks_wlan_private *priv)
 {
unsigned char rw_data;
int retval;
@@ -102,7 +102,7 @@ out:
return;
 }
 
-void ks_wlan_hw_sleep_wakeup_request(ks_wlan_private *priv)
+void ks_wlan_hw_sleep_wakeup_request(struct ks_wlan_private *priv)
 {
unsigned char rw_data;
int retval;
@@ -134,7 +134,7 @@ out:
 }
 
 
-void ks_wlan_hw_wakeup_request(ks_wlan_private *priv)
+void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv)
 {
unsigned char rw_data;
int retval;
@@ -155,7 +155,7 @@ void ks_wlan_hw_wakeup_request(ks_wlan_private *priv)
}
 }
 
-int _ks_wlan_hw_power_save(ks_wlan_private *priv)
+int _ks_wlan_hw_power_save(struct ks_wlan_private *priv)
 {
int rc=0;
unsigned char rw_data;
@@ -220,13 +220,13 @@ int _ks_wlan_hw_power_save(ks_wlan_private *priv)
return rc;
 }
 
-int ks_wlan_hw_power_save(ks_wlan_private *priv)
+int ks_wlan_hw_power_save(struct ks_wlan_private *priv)
 {

queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,&priv->ks_wlan_hw.rw_wq, 1);
return 0;
 }
 
-static int ks7010_sdio_read(ks_wlan_private *priv, unsigned int address,
+static int ks7010_sdio_read(struct ks_wlan_private *priv, unsigned int address,
unsigned char *buffer, int length)
 {
int rc = -1;
@@ -249,7 +249,7 @@ static int ks7010_sdio_read(ks_wlan_private *priv, unsigned 
int address,
return rc;
 }
 
-static int ks7010_sdio_write(ks_wlan_private *priv, unsigned int address,
+static int ks7010_sdio_write(struct ks_wlan_private *priv, unsigned int 
address,
 unsigned char *buffer, int length)
 {
int rc = -1;
@@ -272,7 +272,7 @@ static int ks7010_sdio_write(ks_wlan_private *priv, 
unsigned int address,
return rc;
 }
 
-static int enqueue_txdev(ks_wlan_private *priv, unsigned char *p, unsigned 
long size,
+static int enqueue_txdev(struct ks_wlan_private *priv, unsigned char *p, 
unsigned long size,
  void (*complete_handler)(void *arg1, void *arg2),
  void *arg1, void *arg2 )
 {
@@ -306,7 +306,7 @@ static int enqueue_txdev(ks_wlan_private *priv, unsigned 
char *p, unsigned long
 }
 
 /* write data */
-static int write_to_device(ks_wlan_private *priv, unsigned char *buffer, 
u

[PATCH 05/27] staging: ks7010: remove code for old kernel versions

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

No need to be backwards compatible.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.c   |  9 -
 drivers/staging/ks7010/ks_wlan.h | 28 +---
 drivers/staging/ks7010/ks_wlan_net.c |  3 ---
 3 files changed, 1 insertion(+), 39 deletions(-)

diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 6bea699655eec4..146a1357909b39 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -2103,11 +2103,7 @@ void hostif_sme_multicast_set(ks_wlan_private *priv)
 
 struct net_device *dev = priv->net_dev;
int mc_count;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
struct netdev_hw_addr *ha;
-#else
-   struct dev_mc_list *mclist;
-#endif
charset_address[NIC_MAX_MCAST_LIST*ETH_ALEN];
unsigned long filter_type;
int i;
@@ -2131,14 +2127,9 @@ void hostif_sme_multicast_set(ks_wlan_private *priv)
else {
if (priv->sme_i.sme_flag & SME_MULTICAST){
mc_count = netdev_mc_count(dev);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
netdev_for_each_mc_addr(ha, dev) {
memcpy(&set_address[i*ETH_ALEN], ha->addr, 
ETH_ALEN);
}
-#else
-   for (i = 0, mclist = dev->mc_list; mclist && i < 
mc_count; i++, mclist = mclist->next)
-   memcpy(&set_address[i*ETH_ALEN], 
mclist->dmi_addr, ETH_ALEN);
-#endif
priv->sme_i.sme_flag &= ~SME_MULTICAST;
hostif_mib_set_request(priv, LOCAL_MULTICAST_ADDRESS,
   (ETH_ALEN*mc_count), 
MIB_VALUE_TYPE_OSTRING, &set_address[0]);
diff --git a/drivers/staging/ks7010/ks_wlan.h b/drivers/staging/ks7010/ks_wlan.h
index 329a062419fe4a..6bd016414a4f1d 100644
--- a/drivers/staging/ks7010/ks_wlan.h
+++ b/drivers/staging/ks7010/ks_wlan.h
@@ -18,9 +18,6 @@
 #define WPS
 
 #include 
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) 
-#include 
-#endif
 #include 
 #include 
 #include 
@@ -35,32 +32,9 @@
 #include/* struct timer_list */
 #include 
 #include/* struct completion */
-
-#include 
-
-/* Workqueue / task queue backwards compatibility stuff */
-#if ((LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41)) || (defined _MVL31_) || 
(defined _CELF3_))
 #include 
-#else
-#include 
-#define work_struct tq_struct
-#define INIT_WORK INIT_TQUEUE
-#define schedule_work schedule_task
-#endif
 
-/* Interrupt handler backwards compatibility stuff */
-/*
-#ifndef IRQ_NONE
-#define IRQ_NONE
-#define IRQ_HANDLED
-typedef void irqreturn_t;
-#endif
-*/
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23)
-#define free_netdev(x) kfree(x) 
-#define pci_name(x) x->slot_name 
-#endif
+#include 
 
 #include "ks7010_sdio.h"
 
diff --git a/drivers/staging/ks7010/ks_wlan_net.c 
b/drivers/staging/ks7010/ks_wlan_net.c
index 185630cb423d5e..776a544031495f 100644
--- a/drivers/staging/ks7010/ks_wlan_net.c
+++ b/drivers/staging/ks7010/ks_wlan_net.c
@@ -13,9 +13,6 @@
  */
 
 #include 
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
-#include 
-#endif
 #include 
 #include 
 #include 
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 24/27] staging: ks7010: indent michael_mic.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/michael_mic.h | 16 
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/ks7010/michael_mic.h 
b/drivers/staging/ks7010/michael_mic.h
index f14f160ad46549..57ecbe34153202 100644
--- a/drivers/staging/ks7010/michael_mic.h
+++ b/drivers/staging/ks7010/michael_mic.h
@@ -16,14 +16,14 @@
 struct michel_mic_t {
uint32_t K0;// Key 
uint32_t K1;// Key 
-   uint32_t L; // Current state 
-   uint32_t R; // Current state 
-   uint8_t M[4];   // Message accumulator (single word) 
-   int nBytesInM;  // # bytes in M 
-   uint8_t Result[8];
+   uint32_t L; // Current state 
+   uint32_t R; // Current state 
+   uint8_t M[4];   // Message accumulator (single word) 
+   int nBytesInM;  // # bytes in M 
+   uint8_t Result[8];
 };
 
 extern
-void MichaelMICFunction( struct michel_mic_t *Mic, uint8_t *Key, 
-uint8_t *Data, int Len, uint8_t priority, 
-uint8_t *Result );
+void MichaelMICFunction(struct michel_mic_t *Mic, uint8_t * Key,
+   uint8_t * Data, int Len, uint8_t priority,
+   uint8_t * Result);
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 03/27] staging: ks7010: remove custom firmware loader

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

FW_LOADER works fine, no need for a open coded fallback.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/Kconfig |  1 +
 drivers/staging/ks7010/ks7010_config.c | 62 --
 drivers/staging/ks7010/ks7010_sdio.c   | 56 --
 drivers/staging/ks7010/ks7010_sdio.h   |  5 ---
 4 files changed, 1 insertion(+), 123 deletions(-)

diff --git a/drivers/staging/ks7010/Kconfig b/drivers/staging/ks7010/Kconfig
index dfd4eed539bebc..0b9217674d5b54 100644
--- a/drivers/staging/ks7010/Kconfig
+++ b/drivers/staging/ks7010/Kconfig
@@ -3,6 +3,7 @@ config KS7010
depends on MMC && WIRELESS
select WIRELESS_EXT
select WEXT_PRIV
+   select FW_LOADER
help
  This is a driver for KeyStream KS7010 based SDIO WIFI cards. It is
  found on at least later Spectec SDW-821 (FCC-ID "S2Y-WLAN-11G-K" only,
diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index e8a42077a4b381..7d33070b3428e7 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -169,11 +169,7 @@ int rate_set_configuration(ks_wlan_private *priv, char 
*value)
return rc;
 }
 
-#ifndef NO_FIRMWARE_CLASS
 #include 
-#else
-#define MAX_CONFIG_FILE_SIZE (1024*10)
-#endif
 int ks_wlan_read_config_file(ks_wlan_private *priv)
 {
struct {
@@ -206,18 +202,9 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
{0,"",""},
};
 
-#ifndef NO_FIRMWARE_CLASS
const struct firmware *fw_entry;
struct device *dev = NULL;
int retval;
-#else
-   struct file *srcf;
-   int nr_read ;
-   int retval;
-   char *cfg_buf=NULL;
-   int orgfsuid, orgfsgid;
-   mm_segment_t orgfs;
-#endif
char cfg_file[]=CFG_FILE;
char *cur_p, *end_p;
char wk_buff[256], *wk_p;
@@ -267,7 +254,6 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
priv->reg.tx_rate = TX_RATE_FULL_AUTO;
priv->reg.rate_set.size = 12;
 
-#ifndef NO_FIRMWARE_CLASS
dev = &priv->ks_wlan_hw.sdio_card->func->dev;
if((retval = request_firmware(&fw_entry, cfg_file, dev)) !=0 ){
DPRINTK(1, "error request_firmware() file=%s ret=%d\n", 
cfg_file, retval);
@@ -277,46 +263,6 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
DPRINTK(4, "success request_firmware() file=%s size=%d\n", cfg_file, 
fw_entry->size);
cur_p = fw_entry->data;
end_p = cur_p + fw_entry->size;
-#else
-   orgfsuid=current->fsuid;
-   orgfsgid=current->fsgid;
-   orgfs=get_fs();
-   set_fs(KERNEL_DS);
-
-   srcf = filp_open(cfg_file, O_RDONLY, 0);
-   if (IS_ERR(srcf)) {
-   printk(KERN_ERR "error %ld opening %s\n", 
-PTR_ERR(srcf),cfg_file);
-   goto no_config_file;
-   }
-
-   if (!(srcf->f_op && srcf->f_op->read)) {
-   printk(KERN_ERR "%s does not have a read 
method\n", cfg_file);
-   goto no_config_file;
-   }
-
-   cfg_buf = (char *)kzalloc(MAX_CONFIG_FILE_SIZE, GFP_ATOMIC);
-   if (!cfg_buf) {
-   printk(KERN_ERR "%s does not read : out of 
memory \n", cfg_file);
-   goto no_config_file;
-   }
-
-   nr_read = srcf->f_op->read(srcf, (unsigned char *)cfg_buf, 
MAX_CONFIG_FILE_SIZE, &srcf->f_pos);
-
-   DPRINTK(1, "read retval=%d  file=%s\n", nr_read, priv->reg.cfg_file);
-   retval=filp_close(srcf ,NULL);
-   if (retval)
-   DPRINTK(1, "error %d closing %s\n", -retval,priv->reg.cfg_file);
-
-   if (nr_read < 1) {
-   printk(KERN_ERR "%s does not read : file is 
empty  num=%d\n", cfg_file, nr_read);
-   goto no_config_file;
-   }else if(nr_read > MAX_CONFIG_FILE_SIZE){
-   printk(KERN_ERR "%s does not read : file is too 
big \n", cfg_file);
-   goto no_config_file;
-   }
-   cur_p = cfg_buf;
-   end_p = cur_p + nr_read;
-#endif
*end_p = '\0';
 
while (cur_p < end_p) {
@@ -524,15 +470,7 @@ int ks_wlan_read_config_file(ks_wlan_private *priv)
}
 
}
-#ifndef NO_FIRMWARE_CLASS
release_firmware(fw_entry);
-#else
-no_config_file:
-   kfree(cfg_buf);
-   set_fs(orgfs);
-   current->fsuid=orgfsuid;
-   current->fsgid=orgfsgid;
-#endif
 
DPRINTK(3,"\noperation_mode = %d\nchannel = %d\nssid = %s\n 
   tx_rate = %d\n \
preamble = %d\npowermgt = %d\nscan_type = %d\nbeacon_lost_count 
= %d\nrts = %d\n \
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 7cc49a4ccac549..9300658c4aed8d 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -56,10 +56,6 @@ static

[PATCH 23/27] staging: ks7010: indent michael_mic.c

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/michael_mic.c | 43 ++--
 1 file changed, 21 insertions(+), 22 deletions(-)

diff --git a/drivers/staging/ks7010/michael_mic.c 
b/drivers/staging/ks7010/michael_mic.c
index ec8769a974427a..adb17df46f939b 100644
--- a/drivers/staging/ks7010/michael_mic.c
+++ b/drivers/staging/ks7010/michael_mic.c
@@ -34,11 +34,11 @@
A->nBytesInM = 0;
 
 static
-void MichaelInitializeFunction( struct michel_mic_t *Mic, uint8_t *key )
+void MichaelInitializeFunction(struct michel_mic_t *Mic, uint8_t * key)
 {
// Set the key
-   Mic->K0 = getUInt32( key , 0 );
-   Mic->K1 = getUInt32( key , 4 );
+   Mic->K0 = getUInt32(key, 0);
+   Mic->K1 = getUInt32(key, 4);
 
//clear();
MichaelClear(Mic);
@@ -56,11 +56,10 @@ do{ 
\
L += R; \
 }while(0)
 
-
 static
-void MichaelAppend( struct michel_mic_t *Mic, uint8_t *src, int nBytes )
+void MichaelAppend(struct michel_mic_t *Mic, uint8_t * src, int nBytes)
 {
-   int addlen ;
+   int addlen;
if (Mic->nBytesInM) {
addlen = 4 - Mic->nBytesInM;
if (addlen > nBytes)
@@ -73,13 +72,13 @@ void MichaelAppend( struct michel_mic_t *Mic, uint8_t *src, 
int nBytes )
if (Mic->nBytesInM < 4)
return;
 
-   Mic->L ^= getUInt32(Mic->M,0);
+   Mic->L ^= getUInt32(Mic->M, 0);
MichaelBlockFunction(Mic->L, Mic->R);
Mic->nBytesInM = 0;
}
 
-   while(nBytes >= 4){
-   Mic->L ^= getUInt32(src,0);
+   while (nBytes >= 4) {
+   Mic->L ^= getUInt32(src, 0);
MichaelBlockFunction(Mic->L, Mic->R);
src += 4;
nBytes -= 4;
@@ -92,7 +91,7 @@ void MichaelAppend( struct michel_mic_t *Mic, uint8_t *src, 
int nBytes )
 }
 
 static
-void MichaelGetMIC( struct michel_mic_t *Mic, uint8_t *dst )
+void MichaelGetMIC(struct michel_mic_t *Mic, uint8_t * dst)
 {
uint8_t *data = Mic->M;
switch (Mic->nBytesInM) {
@@ -107,24 +106,24 @@ void MichaelGetMIC( struct michel_mic_t *Mic, uint8_t 
*dst )
break;
case 3:
Mic->L ^= data[0] | (data[1] << 8) | (data[2] << 16) |
-   0x5a00;
+   0x5a00;
break;
}
MichaelBlockFunction(Mic->L, Mic->R);
MichaelBlockFunction(Mic->L, Mic->R);
// The appendByte function has already computed the result.
-   putUInt32( dst, 0, Mic->L );
-   putUInt32( dst, 4, Mic->R );
+   putUInt32(dst, 0, Mic->L);
+   putUInt32(dst, 4, Mic->R);
 
// Reset to the empty message.
MichaelClear(Mic);
 }
 
-void MichaelMICFunction( struct michel_mic_t *Mic, uint8_t *Key,
-uint8_t *Data, int Len, uint8_t priority,
-uint8_t *Result )
+void MichaelMICFunction(struct michel_mic_t *Mic, uint8_t * Key,
+   uint8_t * Data, int Len, uint8_t priority,
+   uint8_t * Result)
 {
-   uint8_t pad_data[4] = {priority,0,0,0};
+   uint8_t pad_data[4] = { priority, 0, 0, 0 };
// Compute the MIC value
/*
 * IEEE802.11i  page 47
@@ -135,9 +134,9 @@ void MichaelMICFunction( struct michel_mic_t *Mic, uint8_t 
*Key,
 * |DA|SA|Priority|0 |Data|M0|M1|M2|M3|M4|M5|M6|M7|
 * +--+--++--++--+--+--+--+--+--+--+--+
 */
-   MichaelInitializeFunction( Mic, Key ) ;
-   MichaelAppend( Mic, (uint8_t*)Data, 12 ); /* |DA|SA| */
-   MichaelAppend( Mic, pad_data, 4 ); /* |Priority|0|0|0| */
-   MichaelAppend( Mic, (uint8_t*)(Data+12), Len -12 ); /* |Data| */
-   MichaelGetMIC( Mic, Result ) ;
+   MichaelInitializeFunction(Mic, Key);
+   MichaelAppend(Mic, (uint8_t *) Data, 12);   /* |DA|SA| */
+   MichaelAppend(Mic, pad_data, 4);/* |Priority|0|0|0| */
+   MichaelAppend(Mic, (uint8_t *) (Data + 12), Len - 12);  /* |Data| */
+   MichaelGetMIC(Mic, Result);
 }
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 25/27] staging: ks7010: indent ks7010_sdio.c

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Unlike the previous patches which are plain indent outcomes, this has
some manual fixups to be not overly strict with the 80 char limit.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_sdio.c | 807 ---
 1 file changed, 460 insertions(+), 347 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index fb9f0b533d867e..ed4d579300ad96 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -30,31 +30,32 @@
 static int reg_net = 0;
 
 static const struct sdio_device_id if_sdio_ids[] = {
-   { SDIO_DEVICE(SDIO_VENDOR_ID_KS_CODE_A, SDIO_DEVICE_ID_KS_7010) },
-   { SDIO_DEVICE(SDIO_VENDOR_ID_KS_CODE_B, SDIO_DEVICE_ID_KS_7010) },
+   {SDIO_DEVICE(SDIO_VENDOR_ID_KS_CODE_A, SDIO_DEVICE_ID_KS_7010)},
+   {SDIO_DEVICE(SDIO_VENDOR_ID_KS_CODE_B, SDIO_DEVICE_ID_KS_7010)},
{ /* all zero */ }
 };
 
 struct ks_sdio_model {
-int model;
-const char *firmware;
+   int model;
+   const char *firmware;
 };
 
 static struct ks_sdio_model ks_sdio_models[] = {
-{
-/* ks7010 */
-.model = 0x10,
-.firmware = "ks7010sd.rom",
-},
+   {
+   /* ks7010 */
+   .model = 0x10,
+   .firmware = "ks7010sd.rom",
+   },
 };
 
-static int ks7910_sdio_probe(struct sdio_func *function, const struct 
sdio_device_id *device);
+static int ks7910_sdio_probe(struct sdio_func *function,
+const struct sdio_device_id *device);
 static void ks7910_sdio_remove(struct sdio_func *function);
 static void ks7010_rw_function(struct work_struct *work);
-static int ks7010_sdio_read( struct ks_wlan_private *priv, unsigned int 
address,
-unsigned char *buffer, int length );
-static int ks7010_sdio_write( struct ks_wlan_private *priv, unsigned int 
address,
- unsigned char *buffer, int length );
+static int ks7010_sdio_read(struct ks_wlan_private *priv, unsigned int address,
+   unsigned char *buffer, int length);
+static int ks7010_sdio_write(struct ks_wlan_private *priv, unsigned int 
address,
+unsigned char *buffer, int length);
 /* macro */
 
 #define inc_txqhead(priv) \
@@ -79,25 +80,25 @@ void ks_wlan_hw_sleep_doze_request(struct ks_wlan_private 
*priv)
DPRINTK(4, "\n");
 
/* clear request */
-   atomic_set(&priv->sleepstatus.doze_request,0);
+   atomic_set(&priv->sleepstatus.doze_request, 0);
 
-   if( atomic_read(&priv->sleepstatus.status) == 0){
+   if (atomic_read(&priv->sleepstatus.status) == 0) {
rw_data = GCR_B_DOZE;
-   retval = ks7010_sdio_write(priv, GCR_B, &rw_data, 
sizeof(rw_data));
-   if(retval){
+   retval =
+   ks7010_sdio_write(priv, GCR_B, &rw_data, sizeof(rw_data));
+   if (retval) {
DPRINTK(1, " error : GCR_B=%02X\n", rw_data);
goto out;
}
DPRINTK(4, "PMG SET!! : GCR_B=%02X\n", rw_data);
-   DPRINTK(3,"sleep_mode=SLP_SLEEP\n");
+   DPRINTK(3, "sleep_mode=SLP_SLEEP\n");
atomic_set(&priv->sleepstatus.status, 1);
-   priv->last_doze = jiffies;
-   }
-   else{
-   DPRINTK(1,"sleep_mode=%d\n",priv->sleep_mode);
+   priv->last_doze = jiffies;
+   } else {
+   DPRINTK(1, "sleep_mode=%d\n", priv->sleep_mode);
}
 
-out:
+ out:
priv->sleep_mode = atomic_read(&priv->sleepstatus.status);
return;
 }
@@ -110,110 +111,126 @@ void ks_wlan_hw_sleep_wakeup_request(struct 
ks_wlan_private *priv)
DPRINTK(4, "\n");
 
/* clear request */
-   atomic_set(&priv->sleepstatus.wakeup_request,0);
+   atomic_set(&priv->sleepstatus.wakeup_request, 0);
 
-   if( atomic_read(&priv->sleepstatus.status) == 1){
+   if (atomic_read(&priv->sleepstatus.status) == 1) {
rw_data = WAKEUP_REQ;
-   retval = ks7010_sdio_write(priv, WAKEUP, &rw_data, 
sizeof(rw_data));
-   if(retval){
+   retval =
+   ks7010_sdio_write(priv, WAKEUP, &rw_data, sizeof(rw_data));
+   if (retval) {
DPRINTK(1, " error : WAKEUP=%02X\n", rw_data);
goto out;
}
DPRINTK(4, "wake up : WAKEUP=%02X\n", rw_data);
atomic_set(&priv->sleepstatus.status, 0);
-   priv->last_wakeup = jiffies;
+   priv->last_wakeup = jiffies;
++priv->wakeup_count;
-   }
-   else{
-   DPRINTK(1,"sleep_mode=%d\n",priv->sleep_mode);
+   } else {
+   DPRINTK(1, "sleep_mode=%d\n", priv->sleep_mode);
}
 
-out:

[PATCH 18/27] staging: ks7010: indent ks_hostif.c

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.c | 1960 
 1 file changed, 1080 insertions(+), 880 deletions(-)

diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 497b8aaf6daef8..f2a65c0ae630a2 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -23,9 +23,10 @@
 /* Include Wireless Extension definition and check version */
 #include /* New driver API */
 
-extern int ks_wlan_hw_tx(struct ks_wlan_private *priv, void *p, unsigned long 
size,
-void (*complete_handler)(void *arg1, void *arg2),
-void *arg1, void *arg2 );
+extern int ks_wlan_hw_tx(struct ks_wlan_private *priv, void *p,
+unsigned long size,
+void (*complete_handler) (void *arg1, void *arg2),
+void *arg1, void *arg2);
 extern void send_packet_complete(void *, void *);
 
 extern void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv);
@@ -55,7 +56,7 @@ static
 inline u16 get_WORD(struct ks_wlan_private *priv)
 {
u16 data;
-   data  = (get_BYTE(priv) & 0xff);
+   data = (get_BYTE(priv) & 0xff);
data |= ((get_BYTE(priv) << 8) & 0xff00);
return data;
 }
@@ -64,7 +65,7 @@ static
 inline u32 get_DWORD(struct ks_wlan_private *priv)
 {
u32 data;
-   data  = (get_BYTE(priv) & 0xff);
+   data = (get_BYTE(priv) & 0xff);
data |= ((get_BYTE(priv) << 8) & 0xff00);
data |= ((get_BYTE(priv) << 16) & 0x00ff);
data |= ((get_BYTE(priv) << 24) & 0xff00);
@@ -73,24 +74,24 @@ inline u32 get_DWORD(struct ks_wlan_private *priv)
 
 void ks_wlan_hw_wakeup_task(struct work_struct *work)
 {
-   struct ks_wlan_private *priv = container_of(work, struct 
ks_wlan_private, ks_wlan_wakeup_task);
+   struct ks_wlan_private *priv =
+   container_of(work, struct ks_wlan_private, ks_wlan_wakeup_task);
int ps_status = atomic_read(&priv->psstatus.status);
 
-   if(ps_status==PS_SNOOZE){
+   if (ps_status == PS_SNOOZE) {
ks_wlan_hw_wakeup_request(priv);
-   
if(!wait_for_completion_interruptible_timeout(&priv->psstatus.wakeup_wait,HZ/50)){
 /* 20ms timeout */
-   DPRINTK(1,"wake up timeout !!!\n");
+   if 
(!wait_for_completion_interruptible_timeout(&priv->psstatus.wakeup_wait, HZ / 
50)) { /* 20ms timeout */
+   DPRINTK(1, "wake up timeout !!!\n");
schedule_work(&priv->ks_wlan_wakeup_task);
return;
}
-   }
-   else{
-   DPRINTK(1,"ps_status=%d\n",ps_status);
+   } else {
+   DPRINTK(1, "ps_status=%d\n", ps_status);
}
 
/* power save */
-   if(atomic_read(&priv->sme_task.count) > 0){
-   DPRINTK(4,"sme task enable.\n");
+   if (atomic_read(&priv->sme_task.count) > 0) {
+   DPRINTK(4, "sme task enable.\n");
tasklet_enable(&priv->sme_task);
}
 }
@@ -98,14 +99,13 @@ void ks_wlan_hw_wakeup_task(struct work_struct *work)
 static
 int ks_wlan_do_power_save(struct ks_wlan_private *priv)
 {
-   int rc=0;
+   int rc = 0;
 
-   DPRINTK(4,"psstatus.status=%d\n",atomic_read(&priv->psstatus.status));
+   DPRINTK(4, "psstatus.status=%d\n", atomic_read(&priv->psstatus.status));
 
-   if((priv->connect_status & CONNECT_STATUS_MASK) == CONNECT_STATUS){
+   if ((priv->connect_status & CONNECT_STATUS_MASK) == CONNECT_STATUS) {
hostif_sme_enqueue(priv, SME_POW_MNGMT_REQUEST);
-   }
-   else{
+   } else {
priv->dev_state = DEVICE_STATE_READY;
}
return rc;
@@ -116,26 +116,28 @@ int get_current_ap(struct ks_wlan_private *priv, struct 
link_ap_info_t *ap_info)
 {
struct local_ap_t *ap;
union iwreq_data wrqu;
-   struct net_device *netdev=priv->net_dev;
-   int rc=0;
+   struct net_device *netdev = priv->net_dev;
+   int rc = 0;
 
-   DPRINTK(3,"\n");
+   DPRINTK(3, "\n");
ap = &(priv->current_ap);
 
-   if((priv->connect_status & CONNECT_STATUS_MASK)== DISCONNECT_STATUS){
-   memset(ap,0,sizeof(struct local_ap_t));
+   if ((priv->connect_status & CONNECT_STATUS_MASK) == DISCONNECT_STATUS) {
+   memset(ap, 0, sizeof(struct local_ap_t));
return 1;
}
 
/* bssid */
-   memcpy(&(ap->bssid[0]),&(ap_info->bssid[0]),ETH_ALEN);
+   memcpy(&(ap->bssid[0]), &(ap_info->bssid[0]), ETH_ALEN);
/* essid */
-   
memcpy(&(ap->ssid.body[0]),&(priv->reg.ssid.body[0]),priv->reg.ssid.size);
+   memcpy(&(ap->ssid.body[0]), &(priv->reg.ssid.body[0]),
+  priv->reg.ssid.size);
ap->ssid.size = priv->reg.ssid.size;
/* rate_set */
-   
memcpy(&(ap->r

[PATCH 15/27] staging: ks7010: indent eap_packet.h

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/eap_packet.h | 49 ++---
 1 file changed, 24 insertions(+), 25 deletions(-)

diff --git a/drivers/staging/ks7010/eap_packet.h 
b/drivers/staging/ks7010/eap_packet.h
index b664bdd8c961db..88384fb19d9580 100644
--- a/drivers/staging/ks7010/eap_packet.h
+++ b/drivers/staging/ks7010/eap_packet.h
@@ -14,13 +14,13 @@
 #endif
 
 struct ether_hdr {
-   unsigned char   h_dest[ETH_ALEN];   /* destination eth addr */
-   unsigned char   h_source[ETH_ALEN]; /* source ether addr*/
-   unsigned char   h_dest_snap;
-   unsigned char   h_source_snap;
-   unsigned char   h_command;
-   unsigned char   h_vendor_id[3];
-   unsigned short  h_proto;/* packet type ID field */
+   unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
+   unsigned char h_source[ETH_ALEN];   /* source ether addr*/
+   unsigned char h_dest_snap;
+   unsigned char h_source_snap;
+   unsigned char h_command;
+   unsigned char h_vendor_id[3];
+   unsigned short h_proto; /* packet type ID field */
 #define ETHER_PROTOCOL_TYPE_EAP0x888e
 #define ETHER_PROTOCOL_TYPE_IP 0x0800
 #define ETHER_PROTOCOL_TYPE_ARP0x0806
@@ -37,15 +37,15 @@ struct ieee802_1x_hdr {
 #define EAPOL_VERSION 2
 
 enum { IEEE802_1X_TYPE_EAP_PACKET = 0,
-   IEEE802_1X_TYPE_EAPOL_START = 1,
-   IEEE802_1X_TYPE_EAPOL_LOGOFF = 2,
-   IEEE802_1X_TYPE_EAPOL_KEY = 3,
-   IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT = 4
+   IEEE802_1X_TYPE_EAPOL_START = 1,
+   IEEE802_1X_TYPE_EAPOL_LOGOFF = 2,
+   IEEE802_1X_TYPE_EAPOL_KEY = 3,
+   IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT = 4
 };
 
 enum { EAPOL_KEY_TYPE_RC4 = 1, EAPOL_KEY_TYPE_RSN = 2,
-   EAPOL_KEY_TYPE_WPA = 254 };
-
+   EAPOL_KEY_TYPE_WPA = 254
+};
 
 #define IEEE8021X_REPLAY_COUNTER_LEN 8
 #define IEEE8021X_KEY_SIGN_LEN 16
@@ -60,11 +60,11 @@ struct ieee802_1x_eapol_key {
/* does not repeat within the life of the keying material used to
 * encrypt the Key field; 64-bit NTP timestamp MAY be used here */
unsigned char replay_counter[IEEE8021X_REPLAY_COUNTER_LEN];
-   unsigned char key_iv[IEEE8021X_KEY_IV_LEN]; /* cryptographically random 
number */
-   unsigned char key_index; /* key flag in the most significant bit:
-  * 0 = broadcast (default key),
-  * 1 = unicast (key mapping key); key index is in the
-  * 7 least significant bits */
+   unsigned char key_iv[IEEE8021X_KEY_IV_LEN]; /* cryptographically 
random number */
+   unsigned char key_index;/* key flag in the most significant bit:
+* 0 = broadcast (default key),
+* 1 = unicast (key mapping key); key 
index is in the
+* 7 least significant bits */
/* HMAC-MD5 message integrity check computed with MS-MPPE-Send-Key as
 * the key */
unsigned char key_signature[IEEE8021X_KEY_SIGN_LEN];
@@ -77,19 +77,18 @@ struct ieee802_1x_eapol_key {
 * RC4 key used in encryption = Key-IV + MS-MPPE-Recv-Key */
 } __attribute__ ((packed));
 
-
 #define WPA_NONCE_LEN 32
 #define WPA_REPLAY_COUNTER_LEN 8
 
 struct wpa_eapol_key {
unsigned char type;
-   unsigned short key_info;
+   unsigned short key_info;
unsigned short key_length;
unsigned char replay_counter[WPA_REPLAY_COUNTER_LEN];
unsigned char key_nonce[WPA_NONCE_LEN];
unsigned char key_iv[16];
unsigned char key_rsc[8];
-   unsigned char key_id[8]; /* Reserved in IEEE 802.11i/RSN */
+   unsigned char key_id[8];/* Reserved in IEEE 802.11i/RSN */
unsigned char key_mic[16];
unsigned short key_data_length;
/* followed by key_data_length bytes of key_data */
@@ -98,18 +97,18 @@ struct wpa_eapol_key {
 #define WPA_KEY_INFO_TYPE_MASK (WBIT(0) | WBIT(1) | WBIT(2))
 #define WPA_KEY_INFO_TYPE_HMAC_MD5_RC4 WBIT(0)
 #define WPA_KEY_INFO_TYPE_HMAC_SHA1_AES WBIT(1)
-#define WPA_KEY_INFO_KEY_TYPE WBIT(3) /* 1 = Pairwise, 0 = Group key */
+#define WPA_KEY_INFO_KEY_TYPE WBIT(3)  /* 1 = Pairwise, 0 = Group key */
 /* bit4..5 is used in WPA, but is reserved in IEEE 802.11i/RSN */
 #define WPA_KEY_INFO_KEY_INDEX_MASK (WBIT(4) | WBIT(5))
 #define WPA_KEY_INFO_KEY_INDEX_SHIFT 4
-#define WPA_KEY_INFO_INSTALL WBIT(6) /* pairwise */
-#define WPA_KEY_INFO_TXRX WBIT(6) /* group */
+#define WPA_KEY_INFO_INSTALL WBIT(6)   /* pairwise */
+#define WPA_KEY_INFO_TXRX WBIT(6)  /* group */
 #define WPA_KEY_INFO_ACK WBIT(7)
 #define WPA_KEY_INFO_MIC WBIT(8)
 #define WPA_KEY_INFO_SECURE WBIT(9)
 #define WPA_KEY_INFO_ERROR WBIT(10)
 #define WPA_KEY_INFO_REQUEST WBIT(11)
-#define WPA_KEY_INFO_ENCR_KEY_DATA WBIT(12) /* IEEE 802.11i/RSN only */

[PATCH 00/27] staging: add driver for KS7010 based SDIO cards

2016-05-10 Thread Wolfram Sang
This driver can be used with later Spectec SDW-821 and all SDW-823 cards.
See patch 1 and README for more details about its origin. To have the card
working, you need another patch which is already in mmc/next:

https://patchwork.kernel.org/patch/9043341/

A working topic branch for the Renesas H3 can be found here:

git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git 
renesas/topic/gen3-sdio

This series only can be found here:

git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git staging/ks7010

Note: I needed this driver to verify SDIO capabilities for the new Renesas H3
SoC. The fact that the original KS7010 driver also comes from Renesas is a
coincidence. It does not mean official support for this driver. Parts of this
work were backed by the above mentioned SDIO verification task while other
parts were my personal interest. Future patches and reviews will also done by
me as a private person (unless something very surprising happens ;))

Please comment, review, apply...

Thanks,

   Wolfram

Wolfram Sang (27):
  staging: ks7010: add driver from Nanonote extra-repository
  staging: ks7010: remove non-SDIO code and #ifdefs
  staging: ks7010: remove custom firmware loader
  staging: ks7010: remove checks for WIRELESS_EXT version
  staging: ks7010: remove code for old kernel versions
  staging: ks7010: avoid workqueue races
  staging: ks7010: use long preamble as default
  staging: ks7010: use kernel helper to print buffer
  staging: ks7010: delete seperate debug header
  staging: ks7010: really iterate over multicast addresses
  staging: ks7010: make loading config file optional
  staging: ks7010: fix printk format warnings
  staging: ks7010: add example cfg file as a reference
  staging: ks7010: remove unecessary typedef
  staging: ks7010: indent eap_packet.h
  staging: ks7010: indent ks7010_config.c
  staging: ks7010: indent ks7010_sdio.h
  staging: ks7010: indent ks_hostif.c
  staging: ks7010: indent ks_hostif.h
  staging: ks7010: indent ks_wlan.h
  staging: ks7010: indent ks_wlan_ioctl.h
  staging: ks7010: indent ks_wlan_net.c
  staging: ks7010: indent michael_mic.c
  staging: ks7010: indent michael_mic.h
  staging: ks7010: indent ks7010_sdio.c
  staging: ks7010: remove supported card table with one element
  staging: ks7010: fix module annotations

 drivers/staging/Kconfig|2 +
 drivers/staging/Makefile   |1 +
 drivers/staging/ks7010/Kconfig |   10 +
 drivers/staging/ks7010/Makefile|5 +
 drivers/staging/ks7010/README  |   37 +
 drivers/staging/ks7010/eap_packet.h|  135 ++
 drivers/staging/ks7010/ks7010_config.c |  500 +
 drivers/staging/ks7010/ks7010_sdio.c   | 1267 
 drivers/staging/ks7010/ks7010_sdio.h   |  152 ++
 drivers/staging/ks7010/ks79xx.cfg  |  116 ++
 drivers/staging/ks7010/ks_hostif.c | 2763 +
 drivers/staging/ks7010/ks_hostif.h |  647 ++
 drivers/staging/ks7010/ks_wlan.h   |  508 +
 drivers/staging/ks7010/ks_wlan_ioctl.h |   70 +
 drivers/staging/ks7010/ks_wlan_net.c   | 3547 
 drivers/staging/ks7010/michael_mic.c   |  142 ++
 drivers/staging/ks7010/michael_mic.h   |   29 +
 17 files changed, 9931 insertions(+)
 create mode 100644 drivers/staging/ks7010/Kconfig
 create mode 100644 drivers/staging/ks7010/Makefile
 create mode 100644 drivers/staging/ks7010/README
 create mode 100644 drivers/staging/ks7010/eap_packet.h
 create mode 100644 drivers/staging/ks7010/ks7010_config.c
 create mode 100644 drivers/staging/ks7010/ks7010_sdio.c
 create mode 100644 drivers/staging/ks7010/ks7010_sdio.h
 create mode 100644 drivers/staging/ks7010/ks79xx.cfg
 create mode 100644 drivers/staging/ks7010/ks_hostif.c
 create mode 100644 drivers/staging/ks7010/ks_hostif.h
 create mode 100644 drivers/staging/ks7010/ks_wlan.h
 create mode 100644 drivers/staging/ks7010/ks_wlan_ioctl.h
 create mode 100644 drivers/staging/ks7010/ks_wlan_net.c
 create mode 100644 drivers/staging/ks7010/michael_mic.c
 create mode 100644 drivers/staging/ks7010/michael_mic.h

-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 10/27] staging: ks7010: really iterate over multicast addresses

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

The loop variable was defined but not really used. Fix this.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks_hostif.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 367d487cef1ba8..b0a0a53d3a00bf 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -2105,7 +2105,7 @@ void hostif_sme_multicast_set(ks_wlan_private *priv)
struct netdev_hw_addr *ha;
charset_address[NIC_MAX_MCAST_LIST*ETH_ALEN];
unsigned long filter_type;
-   int i;
+   int i = 0;
 
DPRINTK(3,"\n");
 
@@ -2128,6 +2128,7 @@ void hostif_sme_multicast_set(ks_wlan_private *priv)
mc_count = netdev_mc_count(dev);
netdev_for_each_mc_addr(ha, dev) {
memcpy(&set_address[i*ETH_ALEN], ha->addr, 
ETH_ALEN);
+   i++;
}
priv->sme_i.sme_flag &= ~SME_MULTICAST;
hostif_mib_set_request(priv, LOCAL_MULTICAST_ADDRESS,
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 09/27] staging: ks7010: delete seperate debug header

2016-05-10 Thread Wolfram Sang
From: Wolfram Sang 

Move the one debug macro to the generic wlan header.

Signed-off-by: Wolfram Sang 
---
 drivers/staging/ks7010/ks7010_config.c |  1 -
 drivers/staging/ks7010/ks7010_sdio.c   |  1 -
 drivers/staging/ks7010/ks_debug.h  | 28 
 drivers/staging/ks7010/ks_hostif.c |  1 -
 drivers/staging/ks7010/ks_wlan.h   |  7 +++
 drivers/staging/ks7010/ks_wlan_net.c   |  1 -
 6 files changed, 7 insertions(+), 32 deletions(-)
 delete mode 100644 drivers/staging/ks7010/ks_debug.h

diff --git a/drivers/staging/ks7010/ks7010_config.c 
b/drivers/staging/ks7010/ks7010_config.c
index abe99a52ae1ad8..7f273dafaf3583 100644
--- a/drivers/staging/ks7010/ks7010_config.c
+++ b/drivers/staging/ks7010/ks7010_config.c
@@ -4,7 +4,6 @@
 #include "ks_wlan.h"
 #include "ks_hostif.h"
 #include "ks_wlan_ioctl.h"
-#include "ks_debug.h"
 
 static int wep_on_off;
 #defineWEP_OFF 0
diff --git a/drivers/staging/ks7010/ks7010_sdio.c 
b/drivers/staging/ks7010/ks7010_sdio.c
index 1a1a43ff306aae..3fb432c9dd314d 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -19,7 +19,6 @@
 
 #include "ks_wlan.h"
 #include "ks_wlan_ioctl.h"
-#include "ks_debug.h"
 #include "ks_hostif.h"
 
 #include "ks7010_sdio.h"
diff --git a/drivers/staging/ks7010/ks_debug.h 
b/drivers/staging/ks7010/ks_debug.h
deleted file mode 100644
index adad5f927dfda9..00
--- a/drivers/staging/ks7010/ks_debug.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *   Driver for KeyStream 11b/g wireless LAN cards.
- *   
- *   ks_debug.h
- *   $Id: ks_debug.h 991 2009-09-14 01:38:58Z sekine $
- *
- *   Copyright (C) 2005-2008 KeyStream Corp.
- *   Copyright (C) 2009 Renesas Technology Corp.
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it undr the terms of the GNU General Public License version 2 as
- *   published by the Free Sotware Foundation.
- */
-
-#ifndef _KS_DEBUG_H
-#define _KS_DEBUG_H
-
-#include 
-
-
-#ifdef KS_WLAN_DEBUG
-#define DPRINTK(n, fmt, args...) \
- if (KS_WLAN_DEBUG>(n)) printk(KERN_NOTICE "%s: "fmt, 
__FUNCTION__, ## args)
-#else
-#define DPRINTK(n, fmt, args...)
-#endif
-
-#endif /* _KS_DEBUG_H */
diff --git a/drivers/staging/ks7010/ks_hostif.c 
b/drivers/staging/ks7010/ks_hostif.c
index 146a1357909b39..367d487cef1ba8 100644
--- a/drivers/staging/ks7010/ks_hostif.c
+++ b/drivers/staging/ks7010/ks_hostif.c
@@ -13,7 +13,6 @@
  */
 
 #include "ks_wlan.h"
-#include "ks_debug.h"
 #include "ks_hostif.h"
 #include "eap_packet.h"
 #include "michael_mic.h"
diff --git a/drivers/staging/ks7010/ks_wlan.h b/drivers/staging/ks7010/ks_wlan.h
index 6bd016414a4f1d..c460741c6606ee 100644
--- a/drivers/staging/ks7010/ks_wlan.h
+++ b/drivers/staging/ks7010/ks_wlan.h
@@ -38,6 +38,13 @@
 
 #include "ks7010_sdio.h"
 
+#ifdef KS_WLAN_DEBUG
+#define DPRINTK(n, fmt, args...) \
+ if (KS_WLAN_DEBUG>(n)) printk(KERN_NOTICE "%s: "fmt, 
__FUNCTION__, ## args)
+#else
+#define DPRINTK(n, fmt, args...)
+#endif
+
 struct ks_wlan_parameter {
uint8_t operation_mode;/* Operation Mode */
uint8_t channel;   /*  Channel */
diff --git a/drivers/staging/ks7010/ks_wlan_net.c 
b/drivers/staging/ks7010/ks_wlan_net.c
index 776a544031495f..1da2768ea9f31b 100644
--- a/drivers/staging/ks7010/ks_wlan_net.c
+++ b/drivers/staging/ks7010/ks_wlan_net.c
@@ -40,7 +40,6 @@ static int wep_on_off;
 #include "ks_wlan.h"
 #include "ks_hostif.h"
 #include "ks_wlan_ioctl.h"
-#include "ks_debug.h"
 
 /* Include Wireless Extension definition and check version */
 #include 
-- 
2.8.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 1/1] Staging: comedi: comedi_fops.c: Fixed coding style issue

2016-05-10 Thread Shyam Saini
Fixed following checkpatch.pl warnings
WARNING: Prefer WRITE_ONCE(, ) over ACCESS_ONCE() = 

WARNING: Prefer READ_ONCE() over ACCESS_ONCE()

Signed-off-by: Shyam Saini 
---
 drivers/staging/comedi/comedi_fops.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/comedi/comedi_fops.c 
b/drivers/staging/comedi/comedi_fops.c
index 629080f..4d87596 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -312,8 +312,8 @@ static void comedi_file_reset(struct file *file)
}
cfp->last_attached = dev->attached;
cfp->last_detach_count = dev->detach_count;
-   ACCESS_ONCE(cfp->read_subdev) = read_s;
-   ACCESS_ONCE(cfp->write_subdev) = write_s;
+   WRITE_ONCE(cfp->read_subdev, read_s);
+   WRITE_ONCE(cfp->write_subdev, write_s);
 }
 
 static void comedi_file_check(struct file *file)
@@ -331,7 +331,7 @@ static struct comedi_subdevice 
*comedi_file_read_subdevice(struct file *file)
struct comedi_file *cfp = file->private_data;
 
comedi_file_check(file);
-   return ACCESS_ONCE(cfp->read_subdev);
+   return READ_ONCE(cfp->read_subdev);
 }
 
 static struct comedi_subdevice *comedi_file_write_subdevice(struct file *file)
@@ -339,7 +339,7 @@ static struct comedi_subdevice 
*comedi_file_write_subdevice(struct file *file)
struct comedi_file *cfp = file->private_data;
 
comedi_file_check(file);
-   return ACCESS_ONCE(cfp->write_subdev);
+   return READ_ONCE(cfp->write_subdev);
 }
 
 static int resize_async_buffer(struct comedi_device *dev,
@@ -1992,7 +1992,7 @@ static int do_setrsubd_ioctl(struct comedi_device *dev, 
unsigned long arg,
!(s_old->async->cmd.flags & CMDF_WRITE))
return -EBUSY;
 
-   ACCESS_ONCE(cfp->read_subdev) = s_new;
+   WRITE_ONCE(cfp->read_subdev, s_new);
return 0;
 }
 
@@ -2034,7 +2034,7 @@ static int do_setwsubd_ioctl(struct comedi_device *dev, 
unsigned long arg,
(s_old->async->cmd.flags & CMDF_WRITE))
return -EBUSY;
 
-   ACCESS_ONCE(cfp->write_subdev) = s_new;
+   WRITE_ONCE(cfp->write_subdev, s_new);
return 0;
 }
 
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 1/1] Staging: comedi: comedi_fops.c: Fixed coding style issue

2016-05-10 Thread Ian Abbott

On 10/05/16 16:51, Shyam Saini wrote:

Fixed following checkpatch.pl warnings
WARNING: Prefer WRITE_ONCE(, ) over ACCESS_ONCE() = 

WARNING: Prefer READ_ONCE() over ACCESS_ONCE()

Signed-off-by: Shyam Saini 
---
  drivers/staging/comedi/comedi_fops.c | 12 ++--
  1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/comedi/comedi_fops.c 
b/drivers/staging/comedi/comedi_fops.c
index 629080f..4d87596 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -312,8 +312,8 @@ static void comedi_file_reset(struct file *file)
}
cfp->last_attached = dev->attached;
cfp->last_detach_count = dev->detach_count;
-   ACCESS_ONCE(cfp->read_subdev) = read_s;
-   ACCESS_ONCE(cfp->write_subdev) = write_s;
+   WRITE_ONCE(cfp->read_subdev, read_s);
+   WRITE_ONCE(cfp->write_subdev, write_s);
  }

  static void comedi_file_check(struct file *file)
@@ -331,7 +331,7 @@ static struct comedi_subdevice 
*comedi_file_read_subdevice(struct file *file)
struct comedi_file *cfp = file->private_data;

comedi_file_check(file);
-   return ACCESS_ONCE(cfp->read_subdev);
+   return READ_ONCE(cfp->read_subdev);
  }

  static struct comedi_subdevice *comedi_file_write_subdevice(struct file *file)
@@ -339,7 +339,7 @@ static struct comedi_subdevice 
*comedi_file_write_subdevice(struct file *file)
struct comedi_file *cfp = file->private_data;

comedi_file_check(file);
-   return ACCESS_ONCE(cfp->write_subdev);
+   return READ_ONCE(cfp->write_subdev);
  }

  static int resize_async_buffer(struct comedi_device *dev,
@@ -1992,7 +1992,7 @@ static int do_setrsubd_ioctl(struct comedi_device *dev, 
unsigned long arg,
!(s_old->async->cmd.flags & CMDF_WRITE))
return -EBUSY;

-   ACCESS_ONCE(cfp->read_subdev) = s_new;
+   WRITE_ONCE(cfp->read_subdev, s_new);
return 0;
  }

@@ -2034,7 +2034,7 @@ static int do_setwsubd_ioctl(struct comedi_device *dev, 
unsigned long arg,
(s_old->async->cmd.flags & CMDF_WRITE))
return -EBUSY;

-   ACCESS_ONCE(cfp->write_subdev) = s_new;
+   WRITE_ONCE(cfp->write_subdev, s_new);
return 0;
  }




Thanks!

Reviewed-by: Ian Abbott 

--
-=( Ian Abbott @ MEV Ltd.E-mail:  )=-
-=(  Web: http://www.mev.co.uk/  )=-
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


流程与其他管理要素的关系

2016-05-10 Thread 周蓓媛


_《可_否单独签(订试用期协(议.xls
Description: Binary data
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 00/27] staging: add driver for KS7010 based SDIO cards

2016-05-10 Thread Greg KH
On Tue, May 10, 2016 at 03:52:13PM +0200, Wolfram Sang wrote:
> This driver can be used with later Spectec SDW-821 and all SDW-823 cards.
> See patch 1 and README for more details about its origin. To have the card
> working, you need another patch which is already in mmc/next:
> 
> https://patchwork.kernel.org/patch/9043341/
> 
> A working topic branch for the Renesas H3 can be found here:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git 
> renesas/topic/gen3-sdio
> 
> This series only can be found here:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git staging/ks7010
> 
> Note: I needed this driver to verify SDIO capabilities for the new Renesas H3
> SoC. The fact that the original KS7010 driver also comes from Renesas is a
> coincidence. It does not mean official support for this driver. Parts of this
> work were backed by the above mentioned SDIO verification task while other
> parts were my personal interest. Future patches and reviews will also done by
> me as a private person (unless something very surprising happens ;))
> 
> Please comment, review, apply...

Can you change the README file to be named TODO to match all of the
other staging driver files?  That way people can look at them by just
doing a staging/*/TODO match.

thanks

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v1] ION: Sys_heap: Add cached pool to spead up cached buffer alloc

2016-05-10 Thread Laura Abbott

On 05/09/2016 04:35 AM, Chen Feng wrote:

Add ion cached pool in system heap. This patch add a cached pool
in system heap. It has a great improvement of alloc for cached
buffer.



Can you give some benchmark numbers here?


v1: Makes the cached buffer zeroed before going to pool

Signed-off-by: Chen Feng 
Signed-off-by: Xia  Qing 
Reviewed-by: Fu Jun 
---
 drivers/staging/android/ion/ion_system_heap.c | 155 +-
 1 file changed, 103 insertions(+), 52 deletions(-)

diff --git a/drivers/staging/android/ion/ion_system_heap.c 
b/drivers/staging/android/ion/ion_system_heap.c
index b69dfc7..4b14a0b 100644
--- a/drivers/staging/android/ion/ion_system_heap.c
+++ b/drivers/staging/android/ion/ion_system_heap.c
@@ -49,47 +49,55 @@ static inline unsigned int order_to_size(int order)

 struct ion_system_heap {
struct ion_heap heap;
-   struct ion_page_pool *pools[0];
+   struct ion_page_pool *uncached_pools[0];
+   struct ion_page_pool *cached_pools[0];
 };




I don't think this is correct based on 
https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
and some discussions with others. Their tests showed this may just result in the
two struct members aliasing, which is not what we want.

The flexible array isn't really necessary here anyway. The number of orders we 
want
is known at compile time and

-static const int num_orders = ARRAY_SIZE(orders);
+
+#define NUM_ORDERS ARRAY_SIZE(orders)
+

should let the NUM_ORDERS be used as a constant initializer in the struct.


+/**
+ * The page from page-pool are all zeroed before. We need do cache
+ * clean for cached buffer. The uncached buffer are always non-cached
+ * since it's allocated. So no need for non-cached pages.
+ */
 static struct page *alloc_buffer_page(struct ion_system_heap *heap,
  struct ion_buffer *buffer,
  unsigned long order)
 {
bool cached = ion_buffer_cached(buffer);
-   struct ion_page_pool *pool = heap->pools[order_to_index(order)];
+   struct ion_page_pool *pool;
struct page *page;

-   if (!cached) {
-   page = ion_page_pool_alloc(pool);
-   } else {
-   gfp_t gfp_flags = low_order_gfp_flags;
+   if (!cached)
+   pool = heap->uncached_pools[order_to_index(order)];
+   else
+   pool = heap->cached_pools[order_to_index(order)];

-   if (order > 4)
-   gfp_flags = high_order_gfp_flags;
-   page = alloc_pages(gfp_flags | __GFP_COMP, order);
-   if (!page)
-   return NULL;
-   ion_pages_sync_for_device(NULL, page, PAGE_SIZE << order,
-   DMA_BIDIRECTIONAL);
-   }
+   page = ion_page_pool_alloc(pool);

+   if (cached)
+   ion_pages_sync_for_device(NULL, page, PAGE_SIZE << order,
+ DMA_BIDIRECTIONAL);
return page;
 }



This is doing an extra sync for newly allocated pages. If the buffer was
just allocated the sync should be skipped.


 static void free_buffer_page(struct ion_system_heap *heap,
 struct ion_buffer *buffer, struct page *page)
 {
+   struct ion_page_pool *pool;
unsigned int order = compound_order(page);
bool cached = ion_buffer_cached(buffer);

-   if (!cached && !(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE)) {
-   struct ion_page_pool *pool = heap->pools[order_to_index(order)];
-
-   ion_page_pool_free(pool, page);
-   } else {
+   /* go to system */
+   if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) {
__free_pages(page, order);
+   return;
}
+
+   if (!cached)
+   pool = heap->uncached_pools[order_to_index(order)];
+   else
+   pool = heap->cached_pools[order_to_index(order)];
+
+   ion_page_pool_free(pool, page);
 }


@@ -181,16 +189,11 @@ static void ion_system_heap_free(struct ion_buffer 
*buffer)
struct ion_system_heap,
heap);
struct sg_table *table = buffer->sg_table;
-   bool cached = ion_buffer_cached(buffer);
struct scatterlist *sg;
int i;

-   /*
-*  uncached pages come from the page pools, zero them before returning
-*  for security purposes (other allocations are zerod at
-*  alloc time
-*/
-   if (!cached && !(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
+   /* zero the buffer before goto page pool */
+   if (!(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
ion_heap_buffer_zero(buffer);

for_each_sg(table->sgl, sg, table->nents, i)
@@ -224,19 +227,29 @@ static int ion_system_heap_shrink(struct ion_heap *heap, 
gfp_t gfp_mas

Re: [PATCH] Staging: wlan-ng: fix comments style

2016-05-10 Thread YU Bo

Hi Greg,
On Mon, May 09, 2016 at 02:26:13PM +0200, Kroah-Hartman wrote:

On Sun, May 08, 2016 at 10:45:16AM -0400, YU Bo wrote:

The patch fixed warning reported by checkpatch.pl: Block comments use a
trailing */ on a separate line.

Signed-off-by: YU Bo 
---
 drivers/staging/wlan-ng/prism2mgmt.h |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)


Patch doesn't apply to my tree, what branch did you make this against?

Thanks for your reply.
I made two branches on your tree:little,greg.
Each time i went into a branch and type:
git fetch origin && git rebase origin/staging-testing
then i repated on different branch.
Sure,i will reset my commit before these operations.
Due to network issue,i have to make patch on local kernel and `scp`
patch to my VPS then send you via mutt.It's ok for me to git am xx_xx.patch
but fail to apply git am xx_xx.mbox which save from mutt sometime:(
I will try to send you a series of patch and test it ok.
Thanks again.


thanks,

greg k-h

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v1] ION: Sys_heap: Add cached pool to spead up cached buffer alloc

2016-05-10 Thread Chen Feng


On 2016/5/11 6:48, Laura Abbott wrote:
> On 05/09/2016 04:35 AM, Chen Feng wrote:
>> Add ion cached pool in system heap. This patch add a cached pool
>> in system heap. It has a great improvement of alloc for cached
>> buffer.
>>
> 
> Can you give some benchmark numbers here?
> 

ok, My test is using iontest userspace.
I will share the result next version.
By the way, which benchmark you prefer to use for ION test?

>> v1: Makes the cached buffer zeroed before going to pool
>>
>> Signed-off-by: Chen Feng 
>> Signed-off-by: Xia  Qing 
>> Reviewed-by: Fu Jun 
>> ---
>>  drivers/staging/android/ion/ion_system_heap.c | 155 
>> +-
>>  1 file changed, 103 insertions(+), 52 deletions(-)
>>
>> diff --git a/drivers/staging/android/ion/ion_system_heap.c 
>> b/drivers/staging/android/ion/ion_system_heap.c
>> index b69dfc7..4b14a0b 100644
>> --- a/drivers/staging/android/ion/ion_system_heap.c
>> +++ b/drivers/staging/android/ion/ion_system_heap.c
>> @@ -49,47 +49,55 @@ static inline unsigned int order_to_size(int order)
>>
>>  struct ion_system_heap {
>>  struct ion_heap heap;
>> -struct ion_page_pool *pools[0];
>> +struct ion_page_pool *uncached_pools[0];
>> +struct ion_page_pool *cached_pools[0];
>>  };
>>
> 
> 
> I don't think this is correct based on 
> https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
> and some discussions with others. Their tests showed this may just result in 
> the
> two struct members aliasing, which is not what we want.
> 
> The flexible array isn't really necessary here anyway. The number of orders 
> we want
> is known at compile time and
> 
Yes, change this latter.

> -static const int num_orders = ARRAY_SIZE(orders);
> +
> +#define NUM_ORDERS ARRAY_SIZE(orders)
> +
> 
> should let the NUM_ORDERS be used as a constant initializer in the struct.
> 
ok.
>> +/**
>> + * The page from page-pool are all zeroed before. We need do cache
>> + * clean for cached buffer. The uncached buffer are always non-cached
>> + * since it's allocated. So no need for non-cached pages.
>> + */
>>  static struct page *alloc_buffer_page(struct ion_system_heap *heap,
>>struct ion_buffer *buffer,
>>unsigned long order)
>>  {
>>  bool cached = ion_buffer_cached(buffer);
>> -struct ion_page_pool *pool = heap->pools[order_to_index(order)];
>> +struct ion_page_pool *pool;
>>  struct page *page;
>>
>> -if (!cached) {
>> -page = ion_page_pool_alloc(pool);
>> -} else {
>> -gfp_t gfp_flags = low_order_gfp_flags;
>> +if (!cached)
>> +pool = heap->uncached_pools[order_to_index(order)];
>> +else
>> +pool = heap->cached_pools[order_to_index(order)];
>>
>> -if (order > 4)
>> -gfp_flags = high_order_gfp_flags;
>> -page = alloc_pages(gfp_flags | __GFP_COMP, order);
>> -if (!page)
>> -return NULL;
>> -ion_pages_sync_for_device(NULL, page, PAGE_SIZE << order,
>> -DMA_BIDIRECTIONAL);
>> -}
>> +page = ion_page_pool_alloc(pool);
>>
>> +if (cached)
>> +ion_pages_sync_for_device(NULL, page, PAGE_SIZE << order,
>> +  DMA_BIDIRECTIONAL);
>>  return page;
>>  }
>>
> 
> This is doing an extra sync for newly allocated pages. If the buffer was
> just allocated the sync should be skipped.
> 


Yes, if we want not to do this extra sync for newly allocated pages.

I will add a new parameter in the ion page-pool to distinguish from
it's cached or not.

>>  static void free_buffer_page(struct ion_system_heap *heap,
>>   struct ion_buffer *buffer, struct page *page)
>>  {
>> +struct ion_page_pool *pool;
>>  unsigned int order = compound_order(page);
>>  bool cached = ion_buffer_cached(buffer);
>>
>> -if (!cached && !(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE)) {
>> -struct ion_page_pool *pool = heap->pools[order_to_index(order)];
>> -
>> -ion_page_pool_free(pool, page);
>> -} else {
>> +/* go to system */
>> +if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) {
>>  __free_pages(page, order);
>> +return;
>>  }
>> +
>> +if (!cached)
>> +pool = heap->uncached_pools[order_to_index(order)];
>> +else
>> +pool = heap->cached_pools[order_to_index(order)];
>> +
>> +ion_page_pool_free(pool, page);
>>  }
>>
>>
>> @@ -181,16 +189,11 @@ static void ion_system_heap_free(struct ion_buffer 
>> *buffer)
>>  struct ion_system_heap,
>>  heap);
>>  struct sg_table *table = buffer->sg_table;
>> -bool cached = ion_buffer_cached(buffer);
>>  struct scatterlist *sg;
>>  int i;
>>
>> -/*
>> - *  uncached pages come from the page pools, zero them before returning
>> - *  for security purposes (other allocations are zerod at
>> - *  alloc time
>> - */
>> -if (!cached && !(buffer->

Re: [PATCH] Staging: wlan-ng: fix comments style

2016-05-10 Thread Kroah-Hartman
On Tue, May 10, 2016 at 09:05:15PM -0400, YU Bo wrote:
> Hi Greg,
> On Mon, May 09, 2016 at 02:26:13PM +0200, Kroah-Hartman wrote:
> > On Sun, May 08, 2016 at 10:45:16AM -0400, YU Bo wrote:
> > > The patch fixed warning reported by checkpatch.pl: Block comments use a
> > > trailing */ on a separate line.
> > > 
> > > Signed-off-by: YU Bo 
> > > ---
> > >  drivers/staging/wlan-ng/prism2mgmt.h |4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > Patch doesn't apply to my tree, what branch did you make this against?
> Thanks for your reply.
> I made two branches on your tree:little,greg.
> Each time i went into a branch and type:
> git fetch origin && git rebase origin/staging-testing

Ok, good, that is the correct branch, I guess we just got out of sync
here, sorry about that.  Try to rebase and resend.

thanks,

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 00/27] staging: add driver for KS7010 based SDIO cards

2016-05-10 Thread Wolfram Sang
On Tue, May 10, 2016 at 11:05:34PM +0200, Greg KH wrote:
> On Tue, May 10, 2016 at 03:52:13PM +0200, Wolfram Sang wrote:
> > This driver can be used with later Spectec SDW-821 and all SDW-823 cards.
> > See patch 1 and README for more details about its origin. To have the card
> > working, you need another patch which is already in mmc/next:
> > 
> > https://patchwork.kernel.org/patch/9043341/
> > 
> > A working topic branch for the Renesas H3 can be found here:
> > 
> > git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git 
> > renesas/topic/gen3-sdio
> > 
> > This series only can be found here:
> > 
> > git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git staging/ks7010
> > 
> > Note: I needed this driver to verify SDIO capabilities for the new Renesas 
> > H3
> > SoC. The fact that the original KS7010 driver also comes from Renesas is a
> > coincidence. It does not mean official support for this driver. Parts of 
> > this
> > work were backed by the above mentioned SDIO verification task while other
> > parts were my personal interest. Future patches and reviews will also done 
> > by
> > me as a private person (unless something very surprising happens ;))
> > 
> > Please comment, review, apply...
> 
> Can you change the README file to be named TODO to match all of the
> other staging driver files?  That way people can look at them by just
> doing a staging/*/TODO match.

Will do. Do you want a) an incremental patch, b) and updated branch to
pull from, or c) the whole series resend?



signature.asc
Description: PGP signature
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel