All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] staging: wilc1000: support 64bit machine and remove warnings
@ 2015-08-20  7:32 Tony Cho
  2015-08-20  7:32 ` [PATCH 1/5] staging: wilc1000: use the real data type Tony Cho
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Tony Cho @ 2015-08-20  7:32 UTC (permalink / raw)
  To: gregkh
  Cc: devel, linux-wireless, johnny.kim, chris.park, rachel.kim,
	tony.cho, glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

This includes the remaining patches for 64bits. The driver uses the redundant
typecasting to communicate with the chipset, which causes several compile
warnings.

However, this patch uses the real data type and removes unnecessary typecasting.
Also, the driver allocates the ID value to the pointer address representing
the handlers and adds it into the data frames instead of the pointer address.
In results, the driver sends and gets the data frame to/from the chipset
together with ID value instead of pointer address as a handler. The ID value is
vaild from 0 to NUM_CONCURRENT_IFC. Only 0 value is the reserved value to
terminate a handler and to inform it to chipset.

This series of patch removes the warnings which 64 bit issue and the redundant
typecasting cause as well.

Johnny Kim (5):
  staging: wilc1000: use the real data type
  staging: wilc1000: add an argument for Handle_SetWfiDrvHandler
  staging: wilc1000: use id value as argument
  staging: wilc1000: change address to fixed value
  staging: wilc1000: define undefined operation mode

 drivers/staging/wilc1000/host_interface.c     | 271 ++++++++++++++++++--------
 drivers/staging/wilc1000/host_interface.h     |   2 +
 drivers/staging/wilc1000/linux_wlan.c         |   4 +-
 drivers/staging/wilc1000/wilc_wfi_netdevice.h |   1 -
 4 files changed, 195 insertions(+), 83 deletions(-)

-- 
1.9.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/5] staging: wilc1000: use the real data type
  2015-08-20  7:32 [PATCH 0/5] staging: wilc1000: support 64bit machine and remove warnings Tony Cho
@ 2015-08-20  7:32 ` Tony Cho
  2015-08-20  7:32 ` [PATCH 2/5] staging: wilc1000: add an argument for Handle_SetWfiDrvHandler Tony Cho
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Tony Cho @ 2015-08-20  7:32 UTC (permalink / raw)
  To: gregkh
  Cc: devel, linux-wireless, johnny.kim, chris.park, rachel.kim,
	tony.cho, glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

From: Johnny Kim <johnny.kim@atmel.com>

This patch changes the type of gu8FlushedJoinReqDrvHandler with his real
data type becasue typecasting is not necessary. In result, typecasting
which is not necessary and some building warnings is removed.

Signed-off-by: Johnny Kim <johnny.kim@atmel.com>
Signed-off-by: Tony Cho <tony.cho@atmel.com>
---
 drivers/staging/wilc1000/host_interface.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/wilc1000/host_interface.c b/drivers/staging/wilc1000/host_interface.c
index 66fa677..0913d18 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -578,7 +578,7 @@ u8 gu8Flushed11iMode;
 u8 gu8FlushedAuthType;
 u32 gu32FlushedJoinReqSize;
 u32 gu32FlushedInfoElemAsocSize;
-u32 gu8FlushedJoinReqDrvHandler;
+tstrWILC_WFIDrv *gu8FlushedJoinReqDrvHandler;
 #define REAL_JOIN_REQ 0
 #define FLUSHED_JOIN_REQ 1
 #define FLUSHED_BYTE_POS 79     /* Position the byte indicating flushing in the flushed request */
@@ -1940,7 +1940,7 @@ static s32 Handle_Connect(tstrWILC_WFIDrv *drvHandler, tstrHostIFconnectAttr *ps
 	/*BugID_5137*/
 	if (memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7)) {
 		memcpy(gu8FlushedJoinReq, pu8CurrByte, gu32FlushedJoinReqSize);
-		gu8FlushedJoinReqDrvHandler = (u32)pstrWFIDrv;
+		gu8FlushedJoinReqDrvHandler = pstrWFIDrv;
 	}
 
 	PRINT_D(GENERIC_DBG, "send HOST_IF_WAITING_CONN_RESP\n");
@@ -2191,11 +2191,11 @@ static s32 Handle_ConnectTimeout(tstrWILC_WFIDrv *drvHandler)
 	memset(u8ConnectedSSID, 0, ETH_ALEN);
 	/*BugID_5213*/
 	/*Freeing flushed join request params on connect timeout*/
-	if (gu8FlushedJoinReq != NULL && gu8FlushedJoinReqDrvHandler == (u32)drvHandler) {
+	if (gu8FlushedJoinReq != NULL && gu8FlushedJoinReqDrvHandler == drvHandler) {
 		kfree(gu8FlushedJoinReq);
 		gu8FlushedJoinReq = NULL;
 	}
-	if (gu8FlushedInfoElemAsoc != NULL && gu8FlushedJoinReqDrvHandler == (u32)drvHandler) {
+	if (gu8FlushedInfoElemAsoc != NULL && gu8FlushedJoinReqDrvHandler == drvHandler) {
 		kfree(gu8FlushedInfoElemAsoc);
 		gu8FlushedInfoElemAsoc = NULL;
 	}
@@ -2617,11 +2617,11 @@ static s32 Handle_RcvdGnrlAsyncInfo(tstrWILC_WFIDrv *drvHandler, tstrRcvdGnrlAsy
 			/*BugID_5213*/
 			/*Freeing flushed join request params on receiving*/
 			/*MAC_DISCONNECTED while connected*/
-			if (gu8FlushedJoinReq != NULL && gu8FlushedJoinReqDrvHandler == (u32)drvHandler) {
+			if (gu8FlushedJoinReq != NULL && gu8FlushedJoinReqDrvHandler == drvHandler) {
 				kfree(gu8FlushedJoinReq);
 				gu8FlushedJoinReq = NULL;
 			}
-			if (gu8FlushedInfoElemAsoc != NULL && gu8FlushedJoinReqDrvHandler == (u32)drvHandler) {
+			if (gu8FlushedInfoElemAsoc != NULL && gu8FlushedJoinReqDrvHandler == drvHandler) {
 				kfree(gu8FlushedInfoElemAsoc);
 				gu8FlushedInfoElemAsoc = NULL;
 			}
@@ -3117,11 +3117,11 @@ static void Handle_Disconnect(tstrWILC_WFIDrv *drvHandler)
 
 
 		/*BugID_5137*/
-		if (gu8FlushedJoinReq != NULL && gu8FlushedJoinReqDrvHandler == (u32)drvHandler) {
+		if (gu8FlushedJoinReq != NULL && gu8FlushedJoinReqDrvHandler == drvHandler) {
 			kfree(gu8FlushedJoinReq);
 			gu8FlushedJoinReq = NULL;
 		}
-		if (gu8FlushedInfoElemAsoc != NULL && gu8FlushedJoinReqDrvHandler == (u32)drvHandler) {
+		if (gu8FlushedInfoElemAsoc != NULL && gu8FlushedJoinReqDrvHandler == drvHandler) {
 			kfree(gu8FlushedInfoElemAsoc);
 			gu8FlushedInfoElemAsoc = NULL;
 		}
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/5] staging: wilc1000: add an argument for Handle_SetWfiDrvHandler
  2015-08-20  7:32 [PATCH 0/5] staging: wilc1000: support 64bit machine and remove warnings Tony Cho
  2015-08-20  7:32 ` [PATCH 1/5] staging: wilc1000: use the real data type Tony Cho
@ 2015-08-20  7:32 ` Tony Cho
  2015-08-20  7:32 ` [PATCH 3/5] staging: wilc1000: use id value as argument Tony Cho
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Tony Cho @ 2015-08-20  7:32 UTC (permalink / raw)
  To: gregkh
  Cc: devel, linux-wireless, johnny.kim, chris.park, rachel.kim,
	tony.cho, glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

From: Johnny Kim <johnny.kim@atmel.com>

Similar to functions of same layer, this patch add an argument for
Handle_SetWfiDrvHandler function. As a result, the redundant typecasting is
removed.

Signed-off-by: Johnny Kim <johnny.kim@atmel.com>
Signed-off-by: Tony Cho <tony.cho@atmel.com>
---
 drivers/staging/wilc1000/host_interface.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/wilc1000/host_interface.c b/drivers/staging/wilc1000/host_interface.c
index 0913d18..47e43cc 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -637,12 +637,13 @@ static s32 Handle_SetChannel(tstrWILC_WFIDrv *drvHandler, tstrHostIFSetChan *pst
  *  @date
  *  @version	1.0
  */
-static s32 Handle_SetWfiDrvHandler(tstrHostIfSetDrvHandler *pstrHostIfSetDrvHandler)
+static s32 Handle_SetWfiDrvHandler(tstrWILC_WFIDrv *drvHandler,
+				   tstrHostIfSetDrvHandler *pstrHostIfSetDrvHandler)
 {
 
 	s32 s32Error = WILC_SUCCESS;
 	tstrWID	strWID;
-	tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)((pstrHostIfSetDrvHandler->u32Address));
+	tstrWILC_WFIDrv *pstrWFIDrv = drvHandler;
 
 
 	/*prepare configuration packet*/
@@ -656,7 +657,7 @@ static s32 Handle_SetWfiDrvHandler(tstrHostIfSetDrvHandler *pstrHostIfSetDrvHand
 	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
 
 
-	if ((pstrHostIfSetDrvHandler->u32Address) == (u32)NULL)
+	if (pstrWFIDrv == NULL)
 		up(&hSemDeinitDrvHandle);
 
 
@@ -4474,7 +4475,8 @@ static int hostIFthread(void *pvArg)
 			break;
 
 		case HOST_IF_MSG_SET_WFIDRV_HANDLER:
-			Handle_SetWfiDrvHandler(&strHostIFmsg.uniHostIFmsgBody.strHostIfSetDrvHandler);
+			Handle_SetWfiDrvHandler(strHostIFmsg.drvHandler,
+						&strHostIFmsg.uniHostIFmsgBody.strHostIfSetDrvHandler);
 			break;
 
 		case HOST_IF_MSG_SET_OPERATION_MODE:
@@ -5819,7 +5821,7 @@ s32 host_int_set_wfi_drv_handler(tstrWILC_WFIDrv *u32address)
 	memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 	strHostIFmsg.u16MsgId = HOST_IF_MSG_SET_WFIDRV_HANDLER;
 	strHostIFmsg.uniHostIFmsgBody.strHostIfSetDrvHandler.u32Address = u32address;
-	/* strHostIFmsg.drvHandler=hWFIDrv; */
+	strHostIFmsg.drvHandler = u32address;
 
 	s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg));
 	if (s32Error)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/5] staging: wilc1000: use id value as argument
  2015-08-20  7:32 [PATCH 0/5] staging: wilc1000: support 64bit machine and remove warnings Tony Cho
  2015-08-20  7:32 ` [PATCH 1/5] staging: wilc1000: use the real data type Tony Cho
  2015-08-20  7:32 ` [PATCH 2/5] staging: wilc1000: add an argument for Handle_SetWfiDrvHandler Tony Cho
@ 2015-08-20  7:32 ` Tony Cho
  2015-09-03  1:33   ` Greg KH
  2015-08-20  7:32 ` [PATCH 4/5] staging: wilc1000: change address to fixed value Tony Cho
  2015-08-20  7:32 ` [PATCH 5/5] staging: wilc1000: define undefined operation mode Tony Cho
  4 siblings, 1 reply; 11+ messages in thread
From: Tony Cho @ 2015-08-20  7:32 UTC (permalink / raw)
  To: gregkh
  Cc: devel, linux-wireless, johnny.kim, chris.park, rachel.kim,
	tony.cho, glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

From: Johnny Kim <johnny.kim@atmel.com>

The driver communicates with the chipset via the address of handlers
to distinguish async data frame. The SendConfigPkt function gets the
pointer address indicating the handlers as the last argument, but this
requires redundant typecasting and does not support the 64 bit machine.

This patch adds the function which assigns ID values instead of pointer
representing the driver handler to the address and then uses the ID
instead of pointer as the last argument of SendConfigPkt. The driver
also gets the handler's address from the ID in the data frame when it
receives them.

Signed-off-by: Johnny Kim <johnny.kim@atmel.com>
Signed-off-by: Tony Cho <tony.cho@atmel.com>
---
 drivers/staging/wilc1000/host_interface.c     | 241 +++++++++++++++++++-------
 drivers/staging/wilc1000/host_interface.h     |   1 +
 drivers/staging/wilc1000/wilc_wfi_netdevice.h |   1 -
 3 files changed, 176 insertions(+), 67 deletions(-)

diff --git a/drivers/staging/wilc1000/host_interface.c b/drivers/staging/wilc1000/host_interface.c
index 47e43cc..4b5e62a 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -531,8 +531,8 @@ typedef enum {
 /*							Global Variabls	                                                                 */
 /*																			 */
 /*****************************************************************************/
-
-
+/* Zero is not used, because a zero ID means termination */
+static tstrWILC_WFIDrv *wfidrv_list[NUM_CONCURRENT_IFC + 1];
 tstrWILC_WFIDrv *terminated_handle;
 tstrWILC_WFIDrv *gWFiDrvHandle;
 #ifdef DISABLE_PWRSAVE_AND_SCAN_DURING_IP
@@ -592,6 +592,56 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo *ptstrNetworkInfo);
 extern void chip_sleep_manually(u32 u32SleepTime);
 extern int linux_wlan_get_num_conn_ifcs(void);
 
+static int add_handler_in_list(tstrWILC_WFIDrv *handler)
+{
+	int i;
+
+	for (i = 1; i < ARRAY_SIZE(wfidrv_list); i++) {
+		if (!wfidrv_list[i]) {
+			wfidrv_list[i] = handler;
+			return 0;
+		}
+	}
+
+	return -ENOBUFS;
+}
+
+static int remove_handler_in_list(tstrWILC_WFIDrv *handler)
+{
+	int i;
+
+	for (i = 1; i < ARRAY_SIZE(wfidrv_list); i++) {
+		if (wfidrv_list[i] == handler) {
+			wfidrv_list[i] = NULL;
+			return 0;
+		}
+	}
+
+	return -EINVAL;
+}
+
+static int get_id_from_handler(tstrWILC_WFIDrv *handler)
+{
+	int i;
+
+	if (!handler)
+		return 0;
+
+	for (i = 1; i < ARRAY_SIZE(wfidrv_list); i++) {
+		if (wfidrv_list[i] == handler)
+			return i;
+	}
+
+	return 0;
+}
+
+static tstrWILC_WFIDrv *get_handler_from_id(int id)
+{
+	if (id <= 0 || id > ARRAY_SIZE(wfidrv_list))
+		return NULL;
+	return wfidrv_list[id];
+}
+
 /**
  *  @brief Handle_SetChannel
  *  @details    Sending config packet to firmware to set channel
@@ -616,7 +666,8 @@ static s32 Handle_SetChannel(tstrWILC_WFIDrv *drvHandler, tstrHostIFSetChan *pst
 
 	PRINT_D(HOSTINF_DBG, "Setting channel\n");
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Failed to set channel\n");
 		WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
@@ -654,8 +705,8 @@ static s32 Handle_SetWfiDrvHandler(tstrWILC_WFIDrv *drvHandler,
 
 	/*Sending Cfg*/
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
-
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 pstrHostIfSetDrvHandler->u32Address);
 
 	if (pstrWFIDrv == NULL)
 		up(&hSemDeinitDrvHandle);
@@ -699,7 +750,8 @@ static s32 Handle_SetOperationMode(tstrWILC_WFIDrv *drvHandler, tstrHostIfSetOpe
 	/*Sending Cfg*/
 	PRINT_INFO(HOSTINF_DBG, "pstrWFIDrv= %p\n", pstrWFIDrv);
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 
 
 	if ((pstrHostIfSetOperationMode->u32Mode) == (u32)NULL)
@@ -748,8 +800,8 @@ s32 Handle_set_IPAddress(tstrWILC_WFIDrv *drvHandler, u8 *pu8IPAddr, u8 idx)
 	strWID.ps8WidVal = (u8 *)pu8IPAddr;
 	strWID.s32ValueSize = IP_ALEN;
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
-
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 
 
 	host_int_get_ipaddress(drvHandler, firmwareIPAddress, idx);
@@ -792,7 +844,8 @@ s32 Handle_get_IPAddress(tstrWILC_WFIDrv *drvHandler, u8 *pu8IPAddr, u8 idx)
 	strWID.ps8WidVal = WILC_MALLOC(IP_ALEN);
 	strWID.s32ValueSize = IP_ALEN;
 
-	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 
 	PRINT_INFO(HOSTINF_DBG, "%pI4\n", strWID.ps8WidVal);
 
@@ -853,7 +906,8 @@ static s32 Handle_SetMacAddress(tstrWILC_WFIDrv *drvHandler, tstrHostIfSetMacAdd
 	strWID.s32ValueSize = ETH_ALEN;
 	PRINT_D(GENERIC_DBG, "mac addr = :%x:%x:%x:%x:%x:%x\n", strWID.ps8WidVal[0], strWID.ps8WidVal[1], strWID.ps8WidVal[2], strWID.ps8WidVal[3], strWID.ps8WidVal[4], strWID.ps8WidVal[5]);
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Failed to set mac address\n");
 		WILC_ERRORREPORT(s32Error, WILC_FAIL);
@@ -891,7 +945,8 @@ static s32 Handle_GetMacAddress(tstrWILC_WFIDrv *drvHandler, tstrHostIfGetMacAdd
 	strWID.s32ValueSize = ETH_ALEN;
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, false, (u32)drvHandler);
+	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, false,
+				 get_id_from_handler(drvHandler));
 	if (s32Error) {
 		PRINT_ER("Failed to get mac address\n");
 		WILC_ERRORREPORT(s32Error, WILC_FAIL);
@@ -1199,7 +1254,8 @@ static s32 Handle_CfgParam(tstrWILC_WFIDrv *drvHandler, tstrHostIFCfgParamAttr *
 		}
 		u8WidCnt++;
 	}
-	s32Error = SendConfigPkt(SET_CFG, strWIDList, u8WidCnt, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, strWIDList, u8WidCnt, false,
+				 get_id_from_handler(pstrWFIDrv));
 
 	if (s32Error)
 		PRINT_ER("Error in setting CFG params\n");
@@ -1356,7 +1412,8 @@ static s32 Handle_Scan(tstrWILC_WFIDrv *drvHandler, tstrHostIFscanAttr *pstrHost
 	else if (pstrWFIDrv->enuHostIFstate == HOST_IF_IDLE)
 		gbScanWhileConnected = false;
 
-	s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false,
+				 get_id_from_handler(pstrWFIDrv));
 
 	if (s32Error) {
 		PRINT_ER("Failed to send scan paramters config packet\n");
@@ -1433,7 +1490,8 @@ static s32 Handle_ScanDone(tstrWILC_WFIDrv *drvHandler, tenuScanEvent enuEvent)
 		strWID.s32ValueSize = sizeof(char);
 
 		/*Sending Cfg*/
-		s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+		s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+					 get_id_from_handler(pstrWFIDrv));
 		if (s32Error != WILC_SUCCESS) {
 			PRINT_ER("Failed to set abort running scan\n");
 			WILC_ERRORREPORT(s32Error, WILC_FAIL);
@@ -1630,7 +1688,8 @@ static s32 Handle_Connect(tstrWILC_WFIDrv *drvHandler, tstrHostIFconnectAttr *ps
 		gu32WidConnRstHack = 0;
 		/* ////////////////////// */
 
-		s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false, (u32)pstrWFIDrv);
+		s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false,
+					 get_id_from_handler(pstrWFIDrv));
 		if (s32Error) {
 			PRINT_ER("Handle_Connect()] failed to send config packet\n");
 			WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
@@ -1953,7 +2012,8 @@ static s32 Handle_Connect(tstrWILC_WFIDrv *drvHandler, tstrHostIFconnectAttr *ps
 		PRINT_D(GENERIC_DBG, "save bssid = %x:%x:%x:%x:%x:%x\n", (u8ConnectedSSID[0]), (u8ConnectedSSID[1]), (u8ConnectedSSID[2]), (u8ConnectedSSID[3]), (u8ConnectedSSID[4]), (u8ConnectedSSID[5]));
 	}
 
-	s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Handle_Connect()] failed to send config packet\n");
 		WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
@@ -2082,7 +2142,8 @@ static s32 Handle_FlushConnect(tstrWILC_WFIDrv *drvHandler)
 
 	#endif
 
-	s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false, gu8FlushedJoinReqDrvHandler);
+	s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false,
+				 get_id_from_handler(gu8FlushedJoinReqDrvHandler));
 	if (s32Error) {
 		PRINT_ER("Handle_Flush_Connect()] failed to send config packet\n");
 		WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
@@ -2167,7 +2228,8 @@ static s32 Handle_ConnectTimeout(tstrWILC_WFIDrv *drvHandler)
 
 	PRINT_D(HOSTINF_DBG, "Sending disconnect request\n");
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error)
 		PRINT_ER("Failed to send dissconect config packet\n");
 
@@ -2727,7 +2789,8 @@ static int Handle_Key(tstrWILC_WFIDrv *drvHandler, tstrHostIFkeyAttr *pstrHostIF
 			strWIDList[3].ps8WidVal = (s8 *)pu8keybuf;
 
 
-			s32Error = SendConfigPkt(SET_CFG, strWIDList, 4, true, (u32)pstrWFIDrv);
+			s32Error = SendConfigPkt(SET_CFG, strWIDList, 4, true,
+						 get_id_from_handler(pstrWFIDrv));
 			kfree(pu8keybuf);
 
 
@@ -2755,7 +2818,8 @@ static int Handle_Key(tstrWILC_WFIDrv *drvHandler, tstrHostIFkeyAttr *pstrHostIF
 			strWID.ps8WidVal	= (s8 *)pu8keybuf;
 			strWID.s32ValueSize = pstrHostIFkeyAttr->uniHostIFkeyAttr.strHostIFwepAttr.u8WepKeylen + 2;
 
-			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+						 get_id_from_handler(pstrWFIDrv));
 			kfree(pu8keybuf);
 		} else if (pstrHostIFkeyAttr->u8KeyAction & REMOVEKEY)	  {
 
@@ -2767,7 +2831,8 @@ static int Handle_Key(tstrWILC_WFIDrv *drvHandler, tstrHostIFkeyAttr *pstrHostIF
 			strWID.ps8WidVal = s8idxarray;
 			strWID.s32ValueSize = 1;
 
-			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+						 get_id_from_handler(pstrWFIDrv));
 		} else {
 			strWID.u16WIDid	= (u16)WID_KEY_ID;
 			strWID.enuWIDtype	= WID_CHAR;
@@ -2776,7 +2841,8 @@ static int Handle_Key(tstrWILC_WFIDrv *drvHandler, tstrHostIFkeyAttr *pstrHostIF
 
 			PRINT_D(HOSTINF_DBG, "Setting default key index\n");
 
-			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+						 get_id_from_handler(pstrWFIDrv));
 		}
 		up(&(pstrWFIDrv->hSemTestKeyBlock));
 		break;
@@ -2822,7 +2888,8 @@ static int Handle_Key(tstrWILC_WFIDrv *drvHandler, tstrHostIFkeyAttr *pstrHostIF
 			strWIDList[1].ps8WidVal	= (s8 *)pu8keybuf;
 			strWIDList[1].s32ValueSize = RX_MIC_KEY_MSG_LEN;
 
-			s32Error = SendConfigPkt(SET_CFG, strWIDList, 2, true, (u32)pstrWFIDrv);
+			s32Error = SendConfigPkt(SET_CFG, strWIDList, 2, true,
+						 get_id_from_handler(pstrWFIDrv));
 
 			kfree(pu8keybuf);
 
@@ -2868,7 +2935,8 @@ static int Handle_Key(tstrWILC_WFIDrv *drvHandler, tstrHostIFkeyAttr *pstrHostIF
 			strWID.ps8WidVal	= (s8 *)pu8keybuf;
 			strWID.s32ValueSize = RX_MIC_KEY_MSG_LEN;
 
-			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+						 get_id_from_handler(pstrWFIDrv));
 
 			kfree(pu8keybuf);
 
@@ -2925,7 +2993,8 @@ _WPARxGtk_end_case_:
 			strWIDList[1].ps8WidVal	= (s8 *)pu8keybuf;
 			strWIDList[1].s32ValueSize = PTK_KEY_MSG_LEN + 1;
 
-			s32Error = SendConfigPkt(SET_CFG, strWIDList, 2, true, (u32)pstrWFIDrv);
+			s32Error = SendConfigPkt(SET_CFG, strWIDList, 2, true,
+						 get_id_from_handler(pstrWFIDrv));
 			kfree(pu8keybuf);
 
 			/* ////////////////////////// */
@@ -2966,7 +3035,8 @@ _WPARxGtk_end_case_:
 			strWID.ps8WidVal	= (s8 *)pu8keybuf;
 			strWID.s32ValueSize = PTK_KEY_MSG_LEN;
 
-			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+			s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+						 get_id_from_handler(pstrWFIDrv));
 			kfree(pu8keybuf);
 
 			/* ////////////////////////// */
@@ -3005,7 +3075,8 @@ _WPAPtk_end_case_:
 		strWID.ps8WidVal = (s8 *)pu8keybuf;
 		strWID.s32ValueSize = (pstrHostIFkeyAttr->uniHostIFkeyAttr.strHostIFpmkidAttr.numpmkid * PMKSA_KEY_LEN) + 1;
 
-		s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+		s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+					 get_id_from_handler(pstrWFIDrv));
 
 		kfree(pu8keybuf);
 		break;
@@ -3054,7 +3125,8 @@ static void Handle_Disconnect(tstrWILC_WFIDrv *drvHandler)
 
 	memset(u8ConnectedSSID, 0, ETH_ALEN);
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false,
+				 get_id_from_handler(pstrWFIDrv));
 
 	if (s32Error) {
 		PRINT_ER("Failed to send dissconect config packet\n");
@@ -3167,7 +3239,8 @@ static s32 Switch_Log_Terminal(tstrWILC_WFIDrv *drvHandler)
 	strWID.ps8WidVal = &dummy;
 	strWID.s32ValueSize = sizeof(char);
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 
 
 	if (s32Error) {
@@ -3212,7 +3285,8 @@ static s32 Handle_GetChnl(tstrWILC_WFIDrv *drvHandler)
 
 	PRINT_D(HOSTINF_DBG, "Getting channel value\n");
 
-	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	/*get the value by searching the local copy*/
 	if (s32Error) {
 		PRINT_ER("Failed to get channel number\n");
@@ -3256,7 +3330,8 @@ static void Handle_GetRssi(tstrWILC_WFIDrv *drvHandler)
 	/*Sending Cfg*/
 	PRINT_D(HOSTINF_DBG, "Getting RSSI value\n");
 
-	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Failed to get RSSI value\n");
 		WILC_ERRORREPORT(s32Error, WILC_FAIL);
@@ -3287,7 +3362,8 @@ static void Handle_GetLinkspeed(tstrWILC_WFIDrv *drvHandler)
 	/*Sending Cfg*/
 	PRINT_D(HOSTINF_DBG, "Getting LINKSPEED value\n");
 
-	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Failed to get LINKSPEED value\n");
 		WILC_ERRORREPORT(s32Error, WILC_FAIL);
@@ -3337,7 +3413,8 @@ s32 Handle_GetStatistics(tstrWILC_WFIDrv *drvHandler, tstrStatistics *pstrStatis
 	strWIDList[u32WidsCount].ps8WidVal = (s8 *)(&(pstrStatistics->u32TxFailureCount));
 	u32WidsCount++;
 
-	s32Error = SendConfigPkt(GET_CFG, strWIDList, u32WidsCount, false, (u32)drvHandler);
+	s32Error = SendConfigPkt(GET_CFG, strWIDList, u32WidsCount, false,
+				 get_id_from_handler(drvHandler));
 
 	if (s32Error) {
 		PRINT_ER("Failed to send scan paramters config packet\n");
@@ -3385,7 +3462,8 @@ static s32 Handle_Get_InActiveTime(tstrWILC_WFIDrv *drvHandler, tstrHostIfStaIna
 	PRINT_D(CFG80211_DBG, "SETING STA inactive time\n");
 
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	/*get the value by searching the local copy*/
 	if (s32Error) {
 		PRINT_ER("Failed to SET incative time\n");
@@ -3399,7 +3477,8 @@ static s32 Handle_Get_InActiveTime(tstrWILC_WFIDrv *drvHandler, tstrHostIfStaIna
 	strWID.s32ValueSize = sizeof(u32);
 
 
-	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	/*get the value by searching the local copy*/
 	if (s32Error) {
 		PRINT_ER("Failed to get incative time\n");
@@ -3480,7 +3559,8 @@ static void Handle_AddBeacon(tstrWILC_WFIDrv *drvHandler, tstrHostIFSetBeacon *p
 
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Failed to send add beacon config packet\n");
 		WILC_ERRORREPORT(s32Error, WILC_FAIL);
@@ -3525,7 +3605,8 @@ static void Handle_DelBeacon(tstrWILC_WFIDrv *drvHandler, tstrHostIFDelBeacon *p
 	/* TODO: build del beacon message*/
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 
 		PRINT_ER("Failed to send delete beacon config packet\n");
@@ -3621,7 +3702,8 @@ static void Handle_AddStation(tstrWILC_WFIDrv *drvHandler, tstrWILC_AddStaParam
 	pu8CurrByte += WILC_HostIf_PackStaParam(pu8CurrByte, pstrStationParam);
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error != WILC_SUCCESS) {
 
 		PRINT_ER("Failed to send add station config packet\n");
@@ -3678,7 +3760,8 @@ static void Handle_DelAllSta(tstrWILC_WFIDrv *drvHandler, tstrHostIFDelAllSta *p
 	}
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 
 		PRINT_ER("Failed to send add station config packet\n");
@@ -3725,7 +3808,8 @@ static void Handle_DelStation(tstrWILC_WFIDrv *drvHandler, tstrHostIFDelSta *pst
 	memcpy(pu8CurrByte, pstrDelStaParam->au8MacAddr, ETH_ALEN);
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 
 		PRINT_ER("Failed to send add station config packet\n");
@@ -3768,7 +3852,8 @@ static void Handle_EditStation(tstrWILC_WFIDrv *drvHandler, tstrWILC_AddStaParam
 	pu8CurrByte += WILC_HostIf_PackStaParam(pu8CurrByte, pstrStationParam);
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 
 		PRINT_ER("Failed to send edit station config packet\n");
@@ -3844,7 +3929,8 @@ static int Handle_RemainOnChan(tstrWILC_WFIDrv *drvHandler, tstrHostIfRemainOnCh
 	strWID.ps8WidVal[1] = (s8)pstrHostIfRemainOnChan->u16Channel;
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error != WILC_SUCCESS)
 		PRINT_ER("Failed to set remain on channel\n");
 
@@ -3902,7 +3988,8 @@ static int Handle_RegisterFrame(tstrWILC_WFIDrv *drvHandler, tstrHostIfRegisterF
 
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Failed to frame register config packet\n");
 		WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
@@ -3953,7 +4040,8 @@ static u32 Handle_ListenStateExpired(tstrWILC_WFIDrv *drvHandler, tstrHostIfRema
 		strWID.ps8WidVal[1] = FALSE_FRMWR_CHANNEL;
 
 		/*Sending Cfg*/
-		s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+		s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+					 get_id_from_handler(pstrWFIDrv));
 		if (s32Error != WILC_SUCCESS) {
 			PRINT_ER("Failed to set remain on channel\n");
 			goto _done_;
@@ -4038,7 +4126,8 @@ static void Handle_PowerManagement(tstrWILC_WFIDrv *drvHandler, tstrHostIfPowerM
 	PRINT_D(HOSTINF_DBG, "Handling Power Management\n");
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Failed to send power management config packet\n");
 		WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
@@ -4089,7 +4178,8 @@ static void Handle_SetMulticastFilter(tstrWILC_WFIDrv *drvHandler, tstrHostIFSet
 		memcpy(pu8CurrByte, gau8MulticastMacAddrList, ((strHostIfSetMulti->u32count) * ETH_ALEN));
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)drvHandler);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false,
+				 get_id_from_handler(drvHandler));
 	if (s32Error) {
 		PRINT_ER("Failed to send setup multicast config packet\n");
 		WILC_ERRORREPORT(s32Error, WILC_FAIL);
@@ -4157,7 +4247,8 @@ static s32 Handle_AddBASession(tstrWILC_WFIDrv *drvHandler, tstrHostIfBASessionI
 	/* Group Buffer Timeout */
 	*ptr++ = 0;
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error)
 		PRINT_D(HOSTINF_DBG, "Couldn't open BA Session\n");
 
@@ -4181,7 +4272,8 @@ static s32 Handle_AddBASession(tstrWILC_WFIDrv *drvHandler, tstrHostIfBASessionI
 	*ptr++ = ((strHostIfBASessionInfo->u16SessionTimeout >> 16) & 0xFF);
 	/*Ack-Policy */
 	*ptr++ = 3;
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 
 	if (strWID.ps8WidVal != NULL)
 		kfree(strWID.ps8WidVal);
@@ -4231,7 +4323,8 @@ static s32 Handle_DelBASession(tstrWILC_WFIDrv *drvHandler, tstrHostIfBASessionI
 	/* Delba Reason */
 	*ptr++ = 32; /* Unspecific QOS reason */
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error)
 		PRINT_D(HOSTINF_DBG, "Couldn't delete BA Session\n");
 
@@ -4249,7 +4342,8 @@ static s32 Handle_DelBASession(tstrWILC_WFIDrv *drvHandler, tstrHostIfBASessionI
 	/* TID*/
 	*ptr++ = strHostIfBASessionInfo->u8Ted;
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 
 	if (strWID.ps8WidVal != NULL)
 		kfree(strWID.ps8WidVal);
@@ -4300,7 +4394,8 @@ static s32 Handle_DelAllRxBASessions(tstrWILC_WFIDrv *drvHandler, tstrHostIfBASe
 	/* Delba Reason */
 	*ptr++ = 32; /* Unspecific QOS reason */
 
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error)
 		PRINT_D(HOSTINF_DBG, "Couldn't delete BA Session\n");
 
@@ -5327,7 +5422,8 @@ s32 host_int_get_site_survey_results(tstrWILC_WFIDrv *hWFIDrv,
 	astrWIDList[1].ps8WidVal = ppu8RcvdSiteSurveyResults[1];
 	astrWIDList[1].s32ValueSize = u32MaxSiteSrvyFragLen;
 
-	s32Error = SendConfigPkt(GET_CFG, astrWIDList, 2, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(GET_CFG, astrWIDList, 2, true,
+				 get_id_from_handler(pstrWFIDrv));
 
 	/*get the value by searching the local copy*/
 	if (s32Error) {
@@ -5695,7 +5791,8 @@ s32 host_int_get_assoc_res_info(tstrWILC_WFIDrv *hWFIDrv, u8 *pu8AssocRespInfo,
 
 
 	/* Sending Configuration packet */
-	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Failed to send association response config packet\n");
 		*pu32RcvdAssocRespInfoLen = 0;
@@ -5820,7 +5917,7 @@ s32 host_int_set_wfi_drv_handler(tstrWILC_WFIDrv *u32address)
 
 	memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 	strHostIFmsg.u16MsgId = HOST_IF_MSG_SET_WFIDRV_HANDLER;
-	strHostIFmsg.uniHostIFmsgBody.strHostIfSetDrvHandler.u32Address = u32address;
+	strHostIFmsg.uniHostIFmsgBody.strHostIfSetDrvHandler.u32Address = get_id_from_handler(u32address);
 	strHostIFmsg.drvHandler = u32address;
 
 	s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg));
@@ -5941,7 +6038,8 @@ s32 host_int_test_set_int_wid(tstrWILC_WFIDrv *hWFIDrv, u32 u32TestMemAddr)
 	strWID.s32ValueSize = sizeof(u32);
 
 	/*Sending Cfg*/
-	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	if (s32Error) {
 		PRINT_ER("Test Function: Failed to set wid value\n");
 		WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
@@ -6033,7 +6131,8 @@ s32 host_int_test_get_int_wid(tstrWILC_WFIDrv *hWFIDrv, u32 *pu32TestMemAddr)
 	strWID.ps8WidVal = (s8 *)pu32TestMemAddr;
 	strWID.s32ValueSize = sizeof(u32);
 
-	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
+	s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true,
+				 get_id_from_handler(pstrWFIDrv));
 	/*get the value by searching the local copy*/
 	if (s32Error) {
 		PRINT_ER("Test Function: Failed to get wid value\n");
@@ -6478,6 +6577,7 @@ s32 host_int_init(tstrWILC_WFIDrv **phWFIDrv)
 {
 	s32 s32Error = WILC_SUCCESS;
 	tstrWILC_WFIDrv *pstrWFIDrv;
+	int err;
 
 	/*if(u32Intialized == 1)
 	 * {
@@ -6505,6 +6605,11 @@ s32 host_int_init(tstrWILC_WFIDrv **phWFIDrv)
 	/*return driver handle to user*/
 	*phWFIDrv = pstrWFIDrv;
 	/*save into globl handle*/
+	err = add_handler_in_list(pstrWFIDrv);
+	if (err) {
+		s32Error = WILC_FAIL;
+		goto _fail_timer_2;
+	}
 
 	#ifdef DISABLE_PWRSAVE_AND_SCAN_DURING_IP
 
@@ -6638,7 +6743,7 @@ s32 host_int_deinit(tstrWILC_WFIDrv *hWFIDrv)
 {
 	s32 s32Error = WILC_SUCCESS;
 	tstrHostIFmsg strHostIFmsg;
-
+	int ret;
 
 	/*obtain driver handle*/
 	tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
@@ -6728,6 +6833,10 @@ s32 host_int_deinit(tstrWILC_WFIDrv *hWFIDrv)
 	/*Setting the gloabl driver handler with NULL*/
 	u32Intialized = 0;
 	/* gWFiDrvHandle = NULL; */
+	ret = remove_handler_in_list(pstrWFIDrv);
+	if (ret)
+		s32Error = WILC_NOT_FOUND;
+
 	if (pstrWFIDrv != NULL) {
 		kfree(pstrWFIDrv);
 		/* pstrWFIDrv=NULL; */
@@ -6756,11 +6865,11 @@ void NetworkInfoReceived(u8 *pu8Buffer, u32 u32Length)
 {
 	s32 s32Error = WILC_SUCCESS;
 	tstrHostIFmsg strHostIFmsg;
-	u32 drvHandler;
+	int id;
 	tstrWILC_WFIDrv *pstrWFIDrv = NULL;
 
-	drvHandler = ((pu8Buffer[u32Length - 4]) | (pu8Buffer[u32Length - 3] << 8) | (pu8Buffer[u32Length - 2] << 16) | (pu8Buffer[u32Length - 1] << 24));
-	pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
+	id = ((pu8Buffer[u32Length - 4]) | (pu8Buffer[u32Length - 3] << 8) | (pu8Buffer[u32Length - 2] << 16) | (pu8Buffer[u32Length - 1] << 24));
+	pstrWFIDrv = get_handler_from_id(id);
 
 
 
@@ -6802,14 +6911,14 @@ void GnrlAsyncInfoReceived(u8 *pu8Buffer, u32 u32Length)
 {
 	s32 s32Error = WILC_SUCCESS;
 	tstrHostIFmsg strHostIFmsg;
-	u32 drvHandler;
+	int id;
 	tstrWILC_WFIDrv *pstrWFIDrv = NULL;
 
 	/*BugID_5348*/
 	down(&hSemHostIntDeinit);
 
-	drvHandler = ((pu8Buffer[u32Length - 4]) | (pu8Buffer[u32Length - 3] << 8) | (pu8Buffer[u32Length - 2] << 16) | (pu8Buffer[u32Length - 1] << 24));
-	pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
+	id = ((pu8Buffer[u32Length - 4]) | (pu8Buffer[u32Length - 3] << 8) | (pu8Buffer[u32Length - 2] << 16) | (pu8Buffer[u32Length - 1] << 24));
+	pstrWFIDrv = get_handler_from_id(id);
 	PRINT_D(HOSTINF_DBG, "General asynchronous info packet received\n");
 
 
@@ -6863,11 +6972,11 @@ void host_int_ScanCompleteReceived(u8 *pu8Buffer, u32 u32Length)
 {
 	s32 s32Error = WILC_SUCCESS;
 	tstrHostIFmsg strHostIFmsg;
-	u32 drvHandler;
+	int id;
 	tstrWILC_WFIDrv *pstrWFIDrv = NULL;
 
-	drvHandler = ((pu8Buffer[u32Length - 4]) | (pu8Buffer[u32Length - 3] << 8) | (pu8Buffer[u32Length - 2] << 16) | (pu8Buffer[u32Length - 1] << 24));
-	pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
+	id = ((pu8Buffer[u32Length - 4]) | (pu8Buffer[u32Length - 3] << 8) | (pu8Buffer[u32Length - 2] << 16) | (pu8Buffer[u32Length - 1] << 24));
+	pstrWFIDrv = get_handler_from_id(id);
 
 
 	PRINT_D(GENERIC_DBG, "Scan notification received %p\n", pstrWFIDrv);
diff --git a/drivers/staging/wilc1000/host_interface.h b/drivers/staging/wilc1000/host_interface.h
index e66dee9..349d5f5 100644
--- a/drivers/staging/wilc1000/host_interface.h
+++ b/drivers/staging/wilc1000/host_interface.h
@@ -63,6 +63,7 @@
 #define WILC_SUPP_MCS_SET_SIZE	16
 #define WILC_ADD_STA_LENGTH	40 /* Not including the rates field cause it has variable length*/
 #define SCAN_EVENT_DONE_ABORTED
+#define NUM_CONCURRENT_IFC 2
 /*****************************************************************************/
 /* Data Types                                                                */
 /*****************************************************************************/
diff --git a/drivers/staging/wilc1000/wilc_wfi_netdevice.h b/drivers/staging/wilc1000/wilc_wfi_netdevice.h
index 77f320d..6a1aa9e 100644
--- a/drivers/staging/wilc1000/wilc_wfi_netdevice.h
+++ b/drivers/staging/wilc1000/wilc_wfi_netdevice.h
@@ -172,7 +172,6 @@ typedef struct {
 
 } struct_frame_reg;
 
-#define NUM_CONCURRENT_IFC 2
 typedef struct {
 	uint8_t aSrcAddress[ETH_ALEN];
 	uint8_t aBSSID[ETH_ALEN];
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/5] staging: wilc1000: change address to fixed value
  2015-08-20  7:32 [PATCH 0/5] staging: wilc1000: support 64bit machine and remove warnings Tony Cho
                   ` (2 preceding siblings ...)
  2015-08-20  7:32 ` [PATCH 3/5] staging: wilc1000: use id value as argument Tony Cho
@ 2015-08-20  7:32 ` Tony Cho
  2015-08-20  7:32 ` [PATCH 5/5] staging: wilc1000: define undefined operation mode Tony Cho
  4 siblings, 0 replies; 11+ messages in thread
From: Tony Cho @ 2015-08-20  7:32 UTC (permalink / raw)
  To: gregkh
  Cc: devel, linux-wireless, johnny.kim, chris.park, rachel.kim,
	tony.cho, glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

From: Johnny Kim <johnny.kim@atmel.com>

The linux_wlan_init_test_config() is called once when net driver is loaded.
And because the pointer type of the pstrWFIDrv is changed with the interger
type, this patch replaces it with designated value instead of pointer.

Signed-off-by: Johnny Kim <johnny.kim@atmel.com>
Signed-off-by: Tony Cho <tony.cho@atmel.com>
---
 drivers/staging/wilc1000/linux_wlan.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
index b3cc9f5..4b2cba7 100644
--- a/drivers/staging/wilc1000/linux_wlan.c
+++ b/drivers/staging/wilc1000/linux_wlan.c
@@ -1052,7 +1052,7 @@ static int linux_wlan_init_test_config(struct net_device *dev, linux_wlan_t *p_n
 		goto _fail_;
 	}
 
-	*(int *)c_val = (u32)pstrWFIDrv;
+	*(int *)c_val = 1;
 
 	if (!g_linux_wlan->oup.wlan_cfg_set(1, WID_SET_DRV_HANDLER, c_val, 4, 0, 0))
 		goto _fail_;
@@ -1291,7 +1291,7 @@ static int linux_wlan_init_test_config(struct net_device *dev, linux_wlan_t *p_n
 		goto _fail_;
 
 	c_val[0] = 1; /* Enable N with immediate block ack. */
-	if (!g_linux_wlan->oup.wlan_cfg_set(0, WID_11N_IMMEDIATE_BA_ENABLED, c_val, 1, 1, (u32)pstrWFIDrv))
+	if (!g_linux_wlan->oup.wlan_cfg_set(0, WID_11N_IMMEDIATE_BA_ENABLED, c_val, 1, 1, 1))
 		goto _fail_;
 
 	return 0;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 5/5] staging: wilc1000: define undefined operation mode
  2015-08-20  7:32 [PATCH 0/5] staging: wilc1000: support 64bit machine and remove warnings Tony Cho
                   ` (3 preceding siblings ...)
  2015-08-20  7:32 ` [PATCH 4/5] staging: wilc1000: change address to fixed value Tony Cho
@ 2015-08-20  7:32 ` Tony Cho
  4 siblings, 0 replies; 11+ messages in thread
From: Tony Cho @ 2015-08-20  7:32 UTC (permalink / raw)
  To: gregkh
  Cc: devel, linux-wireless, johnny.kim, chris.park, rachel.kim,
	tony.cho, glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

From: Johnny Kim <johnny.kim@atmel.com>

This patch adds new define, IDLE_MODE to change comparison statement which
is wrong due to typecasting to null.

Signed-off-by: Johnny Kim <johnny.kim@atmel.com>
Signed-off-by: Tony Cho <tony.cho@atmel.com>
---
 drivers/staging/wilc1000/host_interface.c | 2 +-
 drivers/staging/wilc1000/host_interface.h | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/wilc1000/host_interface.c b/drivers/staging/wilc1000/host_interface.c
index 4b5e62a..17ecad2 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -754,7 +754,7 @@ static s32 Handle_SetOperationMode(tstrWILC_WFIDrv *drvHandler, tstrHostIfSetOpe
 				 get_id_from_handler(pstrWFIDrv));
 
 
-	if ((pstrHostIfSetOperationMode->u32Mode) == (u32)NULL)
+	if ((pstrHostIfSetOperationMode->u32Mode) == IDLE_MODE)
 		up(&hSemDeinitDrvHandle);
 
 
diff --git a/drivers/staging/wilc1000/host_interface.h b/drivers/staging/wilc1000/host_interface.h
index 349d5f5..a107377 100644
--- a/drivers/staging/wilc1000/host_interface.h
+++ b/drivers/staging/wilc1000/host_interface.h
@@ -23,6 +23,7 @@
 #define BIT1                    ((u32)(1 << 1))
 #define BIT0                    ((u32)(1 << 0))
 
+#define IDLE_MODE	0x00
 #define AP_MODE		0x01
 #define STATION_MODE	0x02
 #define GO_MODE	0x03
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/5] staging: wilc1000: use id value as argument
  2015-08-20  7:32 ` [PATCH 3/5] staging: wilc1000: use id value as argument Tony Cho
@ 2015-09-03  1:33   ` Greg KH
       [not found]     ` <55E7EFF8.2060705@atmel.com>
  0 siblings, 1 reply; 11+ messages in thread
From: Greg KH @ 2015-09-03  1:33 UTC (permalink / raw)
  To: Tony Cho
  Cc: devel, linux-wireless, johnny.kim, chris.park, rachel.kim,
	glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

On Thu, Aug 20, 2015 at 04:32:52PM +0900, Tony Cho wrote:
> From: Johnny Kim <johnny.kim@atmel.com>
> 
> The driver communicates with the chipset via the address of handlers
> to distinguish async data frame. The SendConfigPkt function gets the
> pointer address indicating the handlers as the last argument, but this
> requires redundant typecasting and does not support the 64 bit machine.
> 
> This patch adds the function which assigns ID values instead of pointer
> representing the driver handler to the address and then uses the ID
> instead of pointer as the last argument of SendConfigPkt. The driver
> also gets the handler's address from the ID in the data frame when it
> receives them.
> 

I don't understand this code at all.  You are randomly adding values to
a list, and then assuming that you can use the index into that list for
some type of representation?  As this is a local list, why not just use
the real variables instead of having a list and dealing with them in
this very ackward manner?

In other words, I don't see the need for the list at all, just use the
real types here, you have all the needed information (hint, if you know
the index, you really know the data as well...)

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/5] staging: wilc1000: use id value as argument
       [not found]     ` <55E7EFF8.2060705@atmel.com>
@ 2015-09-03 15:47       ` Greg KH
       [not found]         ` <55E90EED.5010502@atmel.com>
  0 siblings, 1 reply; 11+ messages in thread
From: Greg KH @ 2015-09-03 15:47 UTC (permalink / raw)
  To: johnny.kim
  Cc: Tony Cho, devel, linux-wireless, chris.park, rachel.kim,
	glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

On Thu, Sep 03, 2015 at 04:00:08PM +0900, johnny.kim wrote:
> Hello Greg.
> 
> On 2015년 09월 03일 10:33, Greg KH wrote:
> >On Thu, Aug 20, 2015 at 04:32:52PM +0900, Tony Cho wrote:
> >>From: Johnny Kim <johnny.kim@atmel.com>
> >>
> >>The driver communicates with the chipset via the address of handlers
> >>to distinguish async data frame. The SendConfigPkt function gets the
> >>pointer address indicating the handlers as the last argument, but this
> >>requires redundant typecasting and does not support the 64 bit machine.
> >>
> >>This patch adds the function which assigns ID values instead of pointer
> >>representing the driver handler to the address and then uses the ID
> >>instead of pointer as the last argument of SendConfigPkt. The driver
> >>also gets the handler's address from the ID in the data frame when it
> >>receives them.
> >>
> >I don't understand this code at all.  You are randomly adding values to
> >a list, and then assuming that you can use the index into that list for
> >some type of representation?  As this is a local list, why not just use
> >the real variables instead of having a list and dealing with them in
> >this very ackward manner?
> >
> >In other words, I don't see the need for the list at all, just use the
> >real types here, you have all the needed information (hint, if you know
> >the index, you really know the data as well...)
> >
> The value is needed to send it to chipset and to distinguish async data
> packet mutually.

What is the value, the index or some random pointer?

> The length of the data field is 4byte and the data field has been
> filled with the address of pointer so far.

So the data field can just be any random number, as long as it is
consistent?  What does the chip do with the random number?

> But this patch changes it to unique index value corresponding to the address
> for 64bit address machine. If real type is used as your opinion, new patch
> will have the same meaning with current code.

I'm sorry, but I don't understand.  How exactly does the chip need an
index now, but was using a pointer before?  That sounds like you are
changing the functionality.

confused,

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/5] staging: wilc1000: use id value as argument
       [not found]         ` <55E90EED.5010502@atmel.com>
@ 2015-09-04  3:51           ` Greg KH
       [not found]             ` <55E933D3.4060302@atmel.com>
  0 siblings, 1 reply; 11+ messages in thread
From: Greg KH @ 2015-09-04  3:51 UTC (permalink / raw)
  To: johnny.kim
  Cc: Tony Cho, devel, linux-wireless, chris.park, rachel.kim,
	glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

On Fri, Sep 04, 2015 at 12:24:29PM +0900, johnny.kim wrote:
> 
> 
> On 2015년 09월 04일 00:47, Greg KH wrote:
> >On Thu, Sep 03, 2015 at 04:00:08PM +0900, johnny.kim wrote:
> >>Hello Greg.
> >>
> >>On 2015년 09월 03일 10:33, Greg KH wrote:
> >>>On Thu, Aug 20, 2015 at 04:32:52PM +0900, Tony Cho wrote:
> >>>>From: Johnny Kim <johnny.kim@atmel.com>
> >>>>
> >>>>The driver communicates with the chipset via the address of handlers
> >>>>to distinguish async data frame. The SendConfigPkt function gets the
> >>>>pointer address indicating the handlers as the last argument, but this
> >>>>requires redundant typecasting and does not support the 64 bit machine.
> >>>>
> >>>>This patch adds the function which assigns ID values instead of pointer
> >>>>representing the driver handler to the address and then uses the ID
> >>>>instead of pointer as the last argument of SendConfigPkt. The driver
> >>>>also gets the handler's address from the ID in the data frame when it
> >>>>receives them.
> >>>>
> >>>I don't understand this code at all.  You are randomly adding values to
> >>>a list, and then assuming that you can use the index into that list for
> >>>some type of representation?  As this is a local list, why not just use
> >>>the real variables instead of having a list and dealing with them in
> >>>this very ackward manner?
> >>>
> >>>In other words, I don't see the need for the list at all, just use the
> >>>real types here, you have all the needed information (hint, if you know
> >>>the index, you really know the data as well...)
> >>>
> >>The value is needed to send it to chipset and to distinguish async data
> >>packet mutually.
> >What is the value, the index or some random pointer?
> 
> The value of current patch substitutes the corresponding index for
> some random pointer(= address of device handler).

Ok.

> >>The length of the data field is 4byte and the data field has been
> >>filled with the address of pointer so far.
> >So the data field can just be any random number, as long as it is
> >consistent?  What does the chip do with the random number?
> Current driver normally create a couple of network interface.

Multiple network interfaces for the same hardware?

> The driver can send some commands(data frame) to the network
> interfaces at the same time and wait the results. Both driver and
> chipset need unique value to distinguish whom the interface owner
> of the commands is.
> And the value always has same value while the interface is alive.

But as you created the interfaces, just use a unique number for each.
It could be a #define, as you know how many interfaces you will create,
that's not a dynamic thing.  No need to keep looking up something in an
index and converting to a structure.

> >>But this patch changes it to unique index value corresponding to the address
> >>for 64bit address machine. If real type is used as your opinion, new patch
> >>will have the same meaning with current code.
> >I'm sorry, but I don't understand.  How exactly does the chip need an
> >index now, but was using a pointer before?  That sounds like you are
> >changing the functionality.
> >
> >confused,
> There is a reserved field to distinguish the data frames in chipset.
> Because the field has 4byte space, this patch creates the index
> corresponding to the pointer and uses the index to input the identifier
> in the size instead of the pointer value.
> 
> I'm sorry, too. It's not easy to explain it in English.

It's not easy to explain that in any language :)

As you "know" the interfaces you create, just use a "fixed" number for
them, and refer to them that way.  No need to have an array and iterate
over the whole array every time.

There are lots of wrapper functions and pointers in this driver that
need to be stripped away.  I think you will find the end result of all
of that work to be much simpler, and smaller.  See the patches that I
did for the driver this evening as an example, it removed code, and in
doing so, also fixed a long-time bug.  There's a lot of work to be done
here still...

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/5] staging: wilc1000: use id value as argument
       [not found]             ` <55E933D3.4060302@atmel.com>
@ 2015-09-04 16:24               ` Greg KH
  2015-09-10 11:34                 ` Shin, Austin
  0 siblings, 1 reply; 11+ messages in thread
From: Greg KH @ 2015-09-04 16:24 UTC (permalink / raw)
  To: johnny.kim
  Cc: Tony Cho, devel, linux-wireless, chris.park, rachel.kim,
	glen.lee, leo.kim, jude.lee, robin.hwang, austin.shin,
	adel.noureldin, adham.abozaeid, Nicolas.FERRE

On Fri, Sep 04, 2015 at 03:01:55PM +0900, johnny.kim wrote:
> 
> 
> On 2015년 09월 04일 12:51, Greg KH wrote:
> >On Fri, Sep 04, 2015 at 12:24:29PM +0900, johnny.kim wrote:
> >>
> >>On 2015년 09월 04일 00:47, Greg KH wrote:
> >>>On Thu, Sep 03, 2015 at 04:00:08PM +0900, johnny.kim wrote:
> >>>>Hello Greg.
> >>>>
> >>>>On 2015년 09월 03일 10:33, Greg KH wrote:
> >>>>>On Thu, Aug 20, 2015 at 04:32:52PM +0900, Tony Cho wrote:
> >>>>>>From: Johnny Kim <johnny.kim@atmel.com>
> >>>>>>
> >>>>>>The driver communicates with the chipset via the address of handlers
> >>>>>>to distinguish async data frame. The SendConfigPkt function gets the
> >>>>>>pointer address indicating the handlers as the last argument, but this
> >>>>>>requires redundant typecasting and does not support the 64 bit machine.
> >>>>>>
> >>>>>>This patch adds the function which assigns ID values instead of pointer
> >>>>>>representing the driver handler to the address and then uses the ID
> >>>>>>instead of pointer as the last argument of SendConfigPkt. The driver
> >>>>>>also gets the handler's address from the ID in the data frame when it
> >>>>>>receives them.
> >>>>>>
> >>>>>I don't understand this code at all.  You are randomly adding values to
> >>>>>a list, and then assuming that you can use the index into that list for
> >>>>>some type of representation?  As this is a local list, why not just use
> >>>>>the real variables instead of having a list and dealing with them in
> >>>>>this very ackward manner?
> >>>>>
> >>>>>In other words, I don't see the need for the list at all, just use the
> >>>>>real types here, you have all the needed information (hint, if you know
> >>>>>the index, you really know the data as well...)
> >>>>>
> >>>>The value is needed to send it to chipset and to distinguish async data
> >>>>packet mutually.
> >>>What is the value, the index or some random pointer?
> >>The value of current patch substitutes the corresponding index for
> >>some random pointer(= address of device handler).
> >Ok.
> >
> >>>>The length of the data field is 4byte and the data field has been
> >>>>filled with the address of pointer so far.
> >>>So the data field can just be any random number, as long as it is
> >>>consistent?  What does the chip do with the random number?
> >>Current driver normally create a couple of network interface.
> >Multiple network interfaces for the same hardware?
> Yes. A chipset supports multiple network interface.
> >>The driver can send some commands(data frame) to the network
> >>interfaces at the same time and wait the results. Both driver and
> >>chipset need unique value to distinguish whom the interface owner
> >>of the commands is.
> >>And the value always has same value while the interface is alive.
> >But as you created the interfaces, just use a unique number for each.
> >It could be a #define, as you know how many interfaces you will create,
> >that's not a dynamic thing.  No need to keep looking up something in an
> >index and converting to a structure.
> I think your opinion is right only if the driver send some commands to
> chipset. The driver should look for the network interface corresponding
> to the #define value to know owner of data frame which received from
> chipset. Network interface structure dynamically is allocated as 'ifconfig
> up'
> command of shell. As a result, look-up table is needed.
> 
> >>>>But this patch changes it to unique index value corresponding to the address
> >>>>for 64bit address machine. If real type is used as your opinion, new patch
> >>>>will have the same meaning with current code.
> >>>index now, but was using a pointer before?  That sounds like you are
> >>>changing the functionality.
> >>>
> >>>confused,
> >>There is a reserved field to distinguish the data frames in chipset.
> >>Because the field has 4byte space, this patch creates the index
> >>corresponding to the pointer and uses the index to input the identifier
> >>in the size instead of the pointer value.
> >>
> >>I'm sorry, too. It's not easy to explain it in English.
> >It's not easy to explain that in any language :)
> Thanks for your generous mind.
> >As you "know" the interfaces you create, just use a "fixed" number for
> >them, and refer to them that way.  No need to have an array and iterate
> >over the whole array every time.
> >
> >There are lots of wrapper functions and pointers in this driver that
> >need to be stripped away.  I think you will find the end result of all
> >of that work to be much simpler, and smaller.  See the patches that I
> >did for the driver this evening as an example, it removed code, and in
> >doing so, also fixed a long-time bug.  There's a lot of work to be done
> >here still...
> >
> >
> I know current driver has a lot of stripping code and is heavy . My members
> is waiting to send patches after x64bit issue is closed. And I improve this
> driver continuously.

Ok, I really think this can be solved in a "cleaner" way, but due to all
of the different layers in the code, it's hard to see how to do that at
the moment.  I'll apply the patch, but note that I do think this needs
to be fixed "properly" later on before the code is merged out of
staging.

With this patch applied, there are still 2 build errors on x86_64, can
you fix those up and send patches for them, and then we can turn off the
CONFIG_BROKEN dependency.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: [PATCH 3/5] staging: wilc1000: use id value as argument
  2015-09-04 16:24               ` Greg KH
@ 2015-09-10 11:34                 ` Shin, Austin
  0 siblings, 0 replies; 11+ messages in thread
From: Shin, Austin @ 2015-09-10 11:34 UTC (permalink / raw)
  To: Greg KH, Kim, Johnny
  Cc: Cho, Tony, devel, linux-wireless, Park, Chris, Kim, Rachel, Lee,
	Glen, Kim, Leo, Lee, Jude, Hwang, Robin, Noureldin, Adel,
	Abozaeid, Adham, Ferre, Nicolas

VGVhbSwgVGhhbmtzIGZvciBhbGwgeW91IGhhcmR3b3JraW5nIG9uIGNvbXBsZXggcHJvYmxlbS4g
VGhhbmtzIEpvaG5ueSwgVG9ueSwgTmljb2xhcywgYW5kIGVzcGVjaWFsbHkgR3JlZy4NCkJlc3Qg
cmVnYXJkcywNCkF1c3Rpbg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogR3Jl
ZyBLSCBbbWFpbHRvOmdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnXSANClNlbnQ6IFNhdHVyZGF5
LCBTZXB0ZW1iZXIgMDUsIDIwMTUgMToyNCBBTQ0KVG86IEtpbSwgSm9obm55DQpDYzogQ2hvLCBU
b255OyBkZXZlbEBkcml2ZXJkZXYub3N1b3NsLm9yZzsgbGludXgtd2lyZWxlc3NAdmdlci5rZXJu
ZWwub3JnOyBQYXJrLCBDaHJpczsgS2ltLCBSYWNoZWw7IExlZSwgR2xlbjsgS2ltLCBMZW87IExl
ZSwgSnVkZTsgSHdhbmcsIFJvYmluOyBTaGluLCBBdXN0aW47IE5vdXJlbGRpbiwgQWRlbDsgQWJv
emFlaWQsIEFkaGFtOyBGZXJyZSwgTmljb2xhcw0KU3ViamVjdDogUmU6IFtQQVRDSCAzLzVdIHN0
YWdpbmc6IHdpbGMxMDAwOiB1c2UgaWQgdmFsdWUgYXMgYXJndW1lbnQNCg0KT24gRnJpLCBTZXAg
MDQsIDIwMTUgYXQgMDM6MDE6NTVQTSArMDkwMCwgam9obm55LmtpbSB3cm90ZToNCj4gDQo+IA0K
PiBPbiAyMDE164WEIDA57JuUIDA07J28IDEyOjUxLCBHcmVnIEtIIHdyb3RlOg0KPiA+T24gRnJp
LCBTZXAgMDQsIDIwMTUgYXQgMTI6MjQ6MjlQTSArMDkwMCwgam9obm55LmtpbSB3cm90ZToNCj4g
Pj4NCj4gPj5PbiAyMDE164WEIDA57JuUIDA07J28IDAwOjQ3LCBHcmVnIEtIIHdyb3RlOg0KPiA+
Pj5PbiBUaHUsIFNlcCAwMywgMjAxNSBhdCAwNDowMDowOFBNICswOTAwLCBqb2hubnkua2ltIHdy
b3RlOg0KPiA+Pj4+SGVsbG8gR3JlZy4NCj4gPj4+Pg0KPiA+Pj4+T24gMjAxNeuFhCAwOeyblCAw
M+ydvCAxMDozMywgR3JlZyBLSCB3cm90ZToNCj4gPj4+Pj5PbiBUaHUsIEF1ZyAyMCwgMjAxNSBh
dCAwNDozMjo1MlBNICswOTAwLCBUb255IENobyB3cm90ZToNCj4gPj4+Pj4+RnJvbTogSm9obm55
IEtpbSA8am9obm55LmtpbUBhdG1lbC5jb20+DQo+ID4+Pj4+Pg0KPiA+Pj4+Pj5UaGUgZHJpdmVy
IGNvbW11bmljYXRlcyB3aXRoIHRoZSBjaGlwc2V0IHZpYSB0aGUgYWRkcmVzcyBvZiANCj4gPj4+
Pj4+aGFuZGxlcnMgdG8gZGlzdGluZ3Vpc2ggYXN5bmMgZGF0YSBmcmFtZS4gVGhlIFNlbmRDb25m
aWdQa3QgDQo+ID4+Pj4+PmZ1bmN0aW9uIGdldHMgdGhlIHBvaW50ZXIgYWRkcmVzcyBpbmRpY2F0
aW5nIHRoZSBoYW5kbGVycyBhcyB0aGUgDQo+ID4+Pj4+Pmxhc3QgYXJndW1lbnQsIGJ1dCB0aGlz
IHJlcXVpcmVzIHJlZHVuZGFudCB0eXBlY2FzdGluZyBhbmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUg
NjQgYml0IG1hY2hpbmUuDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj5UaGlzIHBhdGNoIGFkZHMgdGhlIGZ1
bmN0aW9uIHdoaWNoIGFzc2lnbnMgSUQgdmFsdWVzIGluc3RlYWQgb2YgDQo+ID4+Pj4+PnBvaW50
ZXIgcmVwcmVzZW50aW5nIHRoZSBkcml2ZXIgaGFuZGxlciB0byB0aGUgYWRkcmVzcyBhbmQgdGhl
biANCj4gPj4+Pj4+dXNlcyB0aGUgSUQgaW5zdGVhZCBvZiBwb2ludGVyIGFzIHRoZSBsYXN0IGFy
Z3VtZW50IG9mIA0KPiA+Pj4+Pj5TZW5kQ29uZmlnUGt0LiBUaGUgZHJpdmVyIGFsc28gZ2V0cyB0
aGUgaGFuZGxlcidzIGFkZHJlc3MgZnJvbSANCj4gPj4+Pj4+dGhlIElEIGluIHRoZSBkYXRhIGZy
YW1lIHdoZW4gaXQgcmVjZWl2ZXMgdGhlbS4NCj4gPj4+Pj4+DQo+ID4+Pj4+SSBkb24ndCB1bmRl
cnN0YW5kIHRoaXMgY29kZSBhdCBhbGwuICBZb3UgYXJlIHJhbmRvbWx5IGFkZGluZyANCj4gPj4+
Pj52YWx1ZXMgdG8gYSBsaXN0LCBhbmQgdGhlbiBhc3N1bWluZyB0aGF0IHlvdSBjYW4gdXNlIHRo
ZSBpbmRleCANCj4gPj4+Pj5pbnRvIHRoYXQgbGlzdCBmb3Igc29tZSB0eXBlIG9mIHJlcHJlc2Vu
dGF0aW9uPyAgQXMgdGhpcyBpcyBhIA0KPiA+Pj4+PmxvY2FsIGxpc3QsIHdoeSBub3QganVzdCB1
c2UgdGhlIHJlYWwgdmFyaWFibGVzIGluc3RlYWQgb2YgaGF2aW5nIA0KPiA+Pj4+PmEgbGlzdCBh
bmQgZGVhbGluZyB3aXRoIHRoZW0gaW4gdGhpcyB2ZXJ5IGFja3dhcmQgbWFubmVyPw0KPiA+Pj4+
Pg0KPiA+Pj4+PkluIG90aGVyIHdvcmRzLCBJIGRvbid0IHNlZSB0aGUgbmVlZCBmb3IgdGhlIGxp
c3QgYXQgYWxsLCBqdXN0IA0KPiA+Pj4+PnVzZSB0aGUgcmVhbCB0eXBlcyBoZXJlLCB5b3UgaGF2
ZSBhbGwgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbiANCj4gPj4+Pj4oaGludCwgaWYgeW91IGtub3cg
dGhlIGluZGV4LCB5b3UgcmVhbGx5IGtub3cgdGhlIGRhdGEgYXMgDQo+ID4+Pj4+d2VsbC4uLikN
Cj4gPj4+Pj4NCj4gPj4+PlRoZSB2YWx1ZSBpcyBuZWVkZWQgdG8gc2VuZCBpdCB0byBjaGlwc2V0
IGFuZCB0byBkaXN0aW5ndWlzaCBhc3luYyANCj4gPj4+PmRhdGEgcGFja2V0IG11dHVhbGx5Lg0K
PiA+Pj5XaGF0IGlzIHRoZSB2YWx1ZSwgdGhlIGluZGV4IG9yIHNvbWUgcmFuZG9tIHBvaW50ZXI/
DQo+ID4+VGhlIHZhbHVlIG9mIGN1cnJlbnQgcGF0Y2ggc3Vic3RpdHV0ZXMgdGhlIGNvcnJlc3Bv
bmRpbmcgaW5kZXggZm9yIA0KPiA+PnNvbWUgcmFuZG9tIHBvaW50ZXIoPSBhZGRyZXNzIG9mIGRl
dmljZSBoYW5kbGVyKS4NCj4gPk9rLg0KPiA+DQo+ID4+Pj5UaGUgbGVuZ3RoIG9mIHRoZSBkYXRh
IGZpZWxkIGlzIDRieXRlIGFuZCB0aGUgZGF0YSBmaWVsZCBoYXMgYmVlbiANCj4gPj4+PmZpbGxl
ZCB3aXRoIHRoZSBhZGRyZXNzIG9mIHBvaW50ZXIgc28gZmFyLg0KPiA+Pj5TbyB0aGUgZGF0YSBm
aWVsZCBjYW4ganVzdCBiZSBhbnkgcmFuZG9tIG51bWJlciwgYXMgbG9uZyBhcyBpdCBpcyANCj4g
Pj4+Y29uc2lzdGVudD8gIFdoYXQgZG9lcyB0aGUgY2hpcCBkbyB3aXRoIHRoZSByYW5kb20gbnVt
YmVyPw0KPiA+PkN1cnJlbnQgZHJpdmVyIG5vcm1hbGx5IGNyZWF0ZSBhIGNvdXBsZSBvZiBuZXR3
b3JrIGludGVyZmFjZS4NCj4gPk11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcyBmb3IgdGhlIHNh
bWUgaGFyZHdhcmU/DQo+IFllcy4gQSBjaGlwc2V0IHN1cHBvcnRzIG11bHRpcGxlIG5ldHdvcmsg
aW50ZXJmYWNlLg0KPiA+PlRoZSBkcml2ZXIgY2FuIHNlbmQgc29tZSBjb21tYW5kcyhkYXRhIGZy
YW1lKSB0byB0aGUgbmV0d29yayANCj4gPj5pbnRlcmZhY2VzIGF0IHRoZSBzYW1lIHRpbWUgYW5k
IHdhaXQgdGhlIHJlc3VsdHMuIEJvdGggZHJpdmVyIGFuZCANCj4gPj5jaGlwc2V0IG5lZWQgdW5p
cXVlIHZhbHVlIHRvIGRpc3Rpbmd1aXNoIHdob20gdGhlIGludGVyZmFjZSBvd25lciBvZiANCj4g
Pj50aGUgY29tbWFuZHMgaXMuDQo+ID4+QW5kIHRoZSB2YWx1ZSBhbHdheXMgaGFzIHNhbWUgdmFs
dWUgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBhbGl2ZS4NCj4gPkJ1dCBhcyB5b3UgY3JlYXRlZCB0
aGUgaW50ZXJmYWNlcywganVzdCB1c2UgYSB1bmlxdWUgbnVtYmVyIGZvciBlYWNoLg0KPiA+SXQg
Y291bGQgYmUgYSAjZGVmaW5lLCBhcyB5b3Uga25vdyBob3cgbWFueSBpbnRlcmZhY2VzIHlvdSB3
aWxsIA0KPiA+Y3JlYXRlLCB0aGF0J3Mgbm90IGEgZHluYW1pYyB0aGluZy4gIE5vIG5lZWQgdG8g
a2VlcCBsb29raW5nIHVwIA0KPiA+c29tZXRoaW5nIGluIGFuIGluZGV4IGFuZCBjb252ZXJ0aW5n
IHRvIGEgc3RydWN0dXJlLg0KPiBJIHRoaW5rIHlvdXIgb3BpbmlvbiBpcyByaWdodCBvbmx5IGlm
IHRoZSBkcml2ZXIgc2VuZCBzb21lIGNvbW1hbmRzIHRvIA0KPiBjaGlwc2V0LiBUaGUgZHJpdmVy
IHNob3VsZCBsb29rIGZvciB0aGUgbmV0d29yayBpbnRlcmZhY2UgDQo+IGNvcnJlc3BvbmRpbmcg
dG8gdGhlICNkZWZpbmUgdmFsdWUgdG8ga25vdyBvd25lciBvZiBkYXRhIGZyYW1lIHdoaWNoIA0K
PiByZWNlaXZlZCBmcm9tIGNoaXBzZXQuIE5ldHdvcmsgaW50ZXJmYWNlIHN0cnVjdHVyZSBkeW5h
bWljYWxseSBpcyANCj4gYWxsb2NhdGVkIGFzICdpZmNvbmZpZyB1cCcNCj4gY29tbWFuZCBvZiBz
aGVsbC4gQXMgYSByZXN1bHQsIGxvb2stdXAgdGFibGUgaXMgbmVlZGVkLg0KPiANCj4gPj4+PkJ1
dCB0aGlzIHBhdGNoIGNoYW5nZXMgaXQgdG8gdW5pcXVlIGluZGV4IHZhbHVlIGNvcnJlc3BvbmRp
bmcgdG8gDQo+ID4+Pj50aGUgYWRkcmVzcyBmb3IgNjRiaXQgYWRkcmVzcyBtYWNoaW5lLiBJZiBy
ZWFsIHR5cGUgaXMgdXNlZCBhcyANCj4gPj4+PnlvdXIgb3BpbmlvbiwgbmV3IHBhdGNoIHdpbGwg
aGF2ZSB0aGUgc2FtZSBtZWFuaW5nIHdpdGggY3VycmVudCBjb2RlLg0KPiA+Pj5pbmRleCBub3cs
IGJ1dCB3YXMgdXNpbmcgYSBwb2ludGVyIGJlZm9yZT8gIFRoYXQgc291bmRzIGxpa2UgeW91IA0K
PiA+Pj5hcmUgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuDQo+ID4+Pg0KPiA+Pj5jb25mdXNl
ZCwNCj4gPj5UaGVyZSBpcyBhIHJlc2VydmVkIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIHRoZSBkYXRh
IGZyYW1lcyBpbiBjaGlwc2V0Lg0KPiA+PkJlY2F1c2UgdGhlIGZpZWxkIGhhcyA0Ynl0ZSBzcGFj
ZSwgdGhpcyBwYXRjaCBjcmVhdGVzIHRoZSBpbmRleCANCj4gPj5jb3JyZXNwb25kaW5nIHRvIHRo
ZSBwb2ludGVyIGFuZCB1c2VzIHRoZSBpbmRleCB0byBpbnB1dCB0aGUgDQo+ID4+aWRlbnRpZmll
ciBpbiB0aGUgc2l6ZSBpbnN0ZWFkIG9mIHRoZSBwb2ludGVyIHZhbHVlLg0KPiA+Pg0KPiA+Pkkn
bSBzb3JyeSwgdG9vLiBJdCdzIG5vdCBlYXN5IHRvIGV4cGxhaW4gaXQgaW4gRW5nbGlzaC4NCj4g
Pkl0J3Mgbm90IGVhc3kgdG8gZXhwbGFpbiB0aGF0IGluIGFueSBsYW5ndWFnZSA6KQ0KPiBUaGFu
a3MgZm9yIHlvdXIgZ2VuZXJvdXMgbWluZC4NCj4gPkFzIHlvdSAia25vdyIgdGhlIGludGVyZmFj
ZXMgeW91IGNyZWF0ZSwganVzdCB1c2UgYSAiZml4ZWQiIG51bWJlciANCj4gPmZvciB0aGVtLCBh
bmQgcmVmZXIgdG8gdGhlbSB0aGF0IHdheS4gIE5vIG5lZWQgdG8gaGF2ZSBhbiBhcnJheSBhbmQg
DQo+ID5pdGVyYXRlIG92ZXIgdGhlIHdob2xlIGFycmF5IGV2ZXJ5IHRpbWUuDQo+ID4NCj4gPlRo
ZXJlIGFyZSBsb3RzIG9mIHdyYXBwZXIgZnVuY3Rpb25zIGFuZCBwb2ludGVycyBpbiB0aGlzIGRy
aXZlciB0aGF0IA0KPiA+bmVlZCB0byBiZSBzdHJpcHBlZCBhd2F5LiAgSSB0aGluayB5b3Ugd2ls
bCBmaW5kIHRoZSBlbmQgcmVzdWx0IG9mIA0KPiA+YWxsIG9mIHRoYXQgd29yayB0byBiZSBtdWNo
IHNpbXBsZXIsIGFuZCBzbWFsbGVyLiAgU2VlIHRoZSBwYXRjaGVzIA0KPiA+dGhhdCBJIGRpZCBm
b3IgdGhlIGRyaXZlciB0aGlzIGV2ZW5pbmcgYXMgYW4gZXhhbXBsZSwgaXQgcmVtb3ZlZCANCj4g
PmNvZGUsIGFuZCBpbiBkb2luZyBzbywgYWxzbyBmaXhlZCBhIGxvbmctdGltZSBidWcuICBUaGVy
ZSdzIGEgbG90IG9mIA0KPiA+d29yayB0byBiZSBkb25lIGhlcmUgc3RpbGwuLi4NCj4gPg0KPiA+
DQo+IEkga25vdyBjdXJyZW50IGRyaXZlciBoYXMgYSBsb3Qgb2Ygc3RyaXBwaW5nIGNvZGUgYW5k
IGlzIGhlYXZ5IC4gTXkgDQo+IG1lbWJlcnMgaXMgd2FpdGluZyB0byBzZW5kIHBhdGNoZXMgYWZ0
ZXIgeDY0Yml0IGlzc3VlIGlzIGNsb3NlZC4gQW5kIEkgDQo+IGltcHJvdmUgdGhpcyBkcml2ZXIg
Y29udGludW91c2x5Lg0KDQpPaywgSSByZWFsbHkgdGhpbmsgdGhpcyBjYW4gYmUgc29sdmVkIGlu
IGEgImNsZWFuZXIiIHdheSwgYnV0IGR1ZSB0byBhbGwgb2YgdGhlIGRpZmZlcmVudCBsYXllcnMg
aW4gdGhlIGNvZGUsIGl0J3MgaGFyZCB0byBzZWUgaG93IHRvIGRvIHRoYXQgYXQgdGhlIG1vbWVu
dC4gIEknbGwgYXBwbHkgdGhlIHBhdGNoLCBidXQgbm90ZSB0aGF0IEkgZG8gdGhpbmsgdGhpcyBu
ZWVkcyB0byBiZSBmaXhlZCAicHJvcGVybHkiIGxhdGVyIG9uIGJlZm9yZSB0aGUgY29kZSBpcyBt
ZXJnZWQgb3V0IG9mIHN0YWdpbmcuDQoNCldpdGggdGhpcyBwYXRjaCBhcHBsaWVkLCB0aGVyZSBh
cmUgc3RpbGwgMiBidWlsZCBlcnJvcnMgb24geDg2XzY0LCBjYW4geW91IGZpeCB0aG9zZSB1cCBh
bmQgc2VuZCBwYXRjaGVzIGZvciB0aGVtLCBhbmQgdGhlbiB3ZSBjYW4gdHVybiBvZmYgdGhlIENP
TkZJR19CUk9LRU4gZGVwZW5kZW5jeS4NCg0KdGhhbmtzLA0KDQpncmVnIGstaA0K

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-09-10 11:34 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-20  7:32 [PATCH 0/5] staging: wilc1000: support 64bit machine and remove warnings Tony Cho
2015-08-20  7:32 ` [PATCH 1/5] staging: wilc1000: use the real data type Tony Cho
2015-08-20  7:32 ` [PATCH 2/5] staging: wilc1000: add an argument for Handle_SetWfiDrvHandler Tony Cho
2015-08-20  7:32 ` [PATCH 3/5] staging: wilc1000: use id value as argument Tony Cho
2015-09-03  1:33   ` Greg KH
     [not found]     ` <55E7EFF8.2060705@atmel.com>
2015-09-03 15:47       ` Greg KH
     [not found]         ` <55E90EED.5010502@atmel.com>
2015-09-04  3:51           ` Greg KH
     [not found]             ` <55E933D3.4060302@atmel.com>
2015-09-04 16:24               ` Greg KH
2015-09-10 11:34                 ` Shin, Austin
2015-08-20  7:32 ` [PATCH 4/5] staging: wilc1000: change address to fixed value Tony Cho
2015-08-20  7:32 ` [PATCH 5/5] staging: wilc1000: define undefined operation mode Tony Cho

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.