diff --git a/wilink_6_1/platforms/os/linux/src/ipc_k.c b/wilink_6_1/platforms/os/linux/src/ipc_k.c
index e9c9778..c0b439a 100644
--- a/wilink_6_1/platforms/os/linux/src/ipc_k.c
+++ b/wilink_6_1/platforms/os/linux/src/ipc_k.c
@@ -65,61 +65,58 @@
 /*******************************************************/
 TI_INT32 IPC_EventSend(TI_HANDLE hAdapter, TI_UINT8* pEvData, TI_UINT32 EvDataSize)
 {
-	 struct sk_buff *skb;
-     int res;
-     TWlanDrvIfObj *drv = (TWlanDrvIfObj *) hAdapter;
-     TI_UINT32 realSize = 0;
-     TI_UINT32 msgSize;
-	 struct nlmsghdr *nlh;
-     TI_UINT8 *msg;
+	struct sk_buff *skb;
+	int res;
+	TWlanDrvIfObj *drv = (TWlanDrvIfObj *) hAdapter;
+	TI_UINT32 realSize = 0;
+	TI_UINT32 msgSize;
+	struct nlmsghdr *nlh;
+	TI_UINT8 *msg;
 
-     /* This event is targetted to the OS process Id 0 is not a valid pId for LINUX*/
+	os_wake_lock_timeout_enable(drv);
+	/* This event is targetted to the OS process Id 0 is not a valid pId for LINUX*/
+	if (((IPC_EVENT_PARAMS *)pEvData)->uProcessID == 0)
+	{
+		((IPC_EVENT_PARAMS *)pEvData)->pfEventCallback(( IPC_EV_DATA *)pEvData);
+		return 0;
+	}
 
-     if ((( IPC_EVENT_PARAMS *) pEvData) ->uProcessID == 0) 
-     {
-         (( IPC_EVENT_PARAMS *) pEvData) ->pfEventCallback(( IPC_EV_DATA *) pEvData);
-         return 0;
-     }
+	/* set the payload size */
+	msgSize = (( IPC_EV_DATA *) pEvData) ->uBufferSize + offsetof(IPC_EV_DATA,uBuffer);
 
-     /* set the payload size */
-	 msgSize = (( IPC_EV_DATA *) pEvData) ->uBufferSize + offsetof(IPC_EV_DATA,uBuffer);
-     
-	 /* add the netlink header size */
-	 realSize = NLMSG_SPACE(msgSize);
+	/* add the netlink header size */
+	realSize = NLMSG_SPACE(msgSize);
 
-	 /* allocate the complete message */
-	 skb = dev_alloc_skb(realSize);
-	 if (!skb) {
+	/* allocate the complete message */
+	skb = dev_alloc_skb(realSize);
+	if (!skb) {
 		printk(KERN_ERR "Failed to allocate new skb with size=%u.\n",realSize);
 		return -1;
-	 }
+	}
 
-	 /* set the netlink header params */
-	 nlh = NLMSG_PUT(skb, 0, 0, NLMSG_DONE, realSize - sizeof(*nlh));
-	 
-	 /* get the payload pointer */
-	 msg = (char *)NLMSG_DATA(nlh);
-	 
-	 /* copy the data to the payload */ 
-     memcpy(msg,pEvData,msgSize);
+	/* set the netlink header params */
+	nlh = NLMSG_PUT(skb, 0, 0, NLMSG_DONE, realSize - sizeof(*nlh));
 
-	 NETLINK_CB(skb).pid = 0;   /* from kernel */
+	/* get the payload pointer */
+	msg = (char *)NLMSG_DATA(nlh);
+
+	/* copy the data to the payload */
+	memcpy(msg,pEvData,msgSize);
+
+	NETLINK_CB(skb).pid = 0;   /* from kernel */
 #define RTMGRP_LINK 1
-     NETLINK_CB(skb).dst_group = RTMGRP_LINK;
+	NETLINK_CB(skb).dst_group = RTMGRP_LINK;
 
-	 /* send the message*/
-	 res = netlink_unicast(drv->wl_sock, skb, (( IPC_EVENT_PARAMS *) pEvData) ->uProcessID, MSG_DONTWAIT);
+	/* send the message*/
+	res = netlink_unicast(drv->wl_sock, skb, (( IPC_EVENT_PARAMS *) pEvData) ->uProcessID, MSG_DONTWAIT);
 
-     /* Sanity checks. As far as we're concerned this error is unrecovarable.*/
-     if (res >= 0)
-     {
+	/* Sanity checks. As far as we're concerned this error is unrecovarable.*/
+	if (res >= 0)
+	{
 		return 0;
-     }
+	}
 
 nlmsg_failure:
-    ti_dprintf(TIWLAN_LOG_INFO,"IPC kernel: did not send the netlink message\n");
+	ti_dprintf(TIWLAN_LOG_INFO,"IPC kernel: did not send the netlink message\n");
 	return -1;
-
 }
-
-
