1a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*
2a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * PowerMgrKeepAlive.c
3a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
4a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * All rights reserved.
6a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
7a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Redistribution and use in source and binary forms, with or without
8a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * modification, are permitted provided that the following conditions
9a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * are met:
10a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
11a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions of source code must retain the above copyright
12a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer.
13a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions in binary form must reproduce the above copyright
14a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer in
15a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    the documentation and/or other materials provided with the
16a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    distribution.
17a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Neither the name Texas Instruments nor the names of its
18a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    contributors may be used to endorse or promote products derived
19a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    from this software without specific prior written permission.
20a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
21a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
33a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
34a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
35a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
36a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \file  PowerMgrKeepAlive.c
37a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief implement user keep-alive messages
38a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
39a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
40a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#define __FILE_ID__  FILE_ID_73
41a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "osTIType.h"
42a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "TWDriver.h"
43a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "STADExternalIf.h"
44a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "txCtrl_Api.h"
45a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
46a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidttypedef struct
47a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
48a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_HANDLE           hTWD;
49a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_HANDLE           hReport;
50a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_HANDLE           hOs;
51a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_HANDLE           hTxCtrl;
52a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TKeepAliveConfig    tCurrentConfig;
53a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_BOOL             bConnected;
54a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT8            wlanHeader[ WLAN_WITH_SNAP_QOS_HEADER_MAX_SIZE + AES_AFTER_HEADER_FIELD_SIZE ];
55a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32           wlanHeaderLength;
56a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT8            tempBuffer[ KEEP_ALIVE_TEMPLATE_MAX_LENGTH + WLAN_WITH_SNAP_QOS_HEADER_MAX_SIZE + AES_AFTER_HEADER_FIELD_SIZE ];
57a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} TPowerMgrKL;
58a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
59a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS powerMgrKLConfigureMessage (TI_HANDLE hPowerMgrKL, TI_UINT32 uMessageIndex);
60a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
61a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
62a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKL_create
63a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Creates the power manager keep-alive sub-module
64a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
65a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Allocates memory for the keep-alive object
66a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
67a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hOS - handle to the os object
68a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return A handle to the power manager keep-alive sub-module
69a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_destroy, powerMgrKL_init
70a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
71a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_HANDLE powerMgrKL_create (TI_HANDLE hOS)
72a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
73a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL     *pPowerMgrKL;
74a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
75a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* allocate memory for the power manager keep-alive object */
76a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL = os_memoryAlloc (hOS, sizeof(TPowerMgrKL));
77a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if ( NULL == pPowerMgrKL)
78a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
79a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return NULL;
80a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
81a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
82a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* store OS handle */
83a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL->hOs = hOS;
84a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
85a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return (TI_HANDLE)pPowerMgrKL;
86a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
87a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
88a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
89a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKL_destroy
90a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Destroys the power manager keep-alive sub-module
91a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
92a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * De-allocates keep-alive object memory
93a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
94a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hPowerMgrKL - handle to the power-manager keep-alive object
95a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return None
96a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_create, powerMgrKL_init
97a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
98a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid powerMgrKL_destroy (TI_HANDLE hPowerMgrKL)
99a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
100a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL     *pPowerMgrKL = (TPowerMgrKL*)hPowerMgrKL;
101a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
102a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    os_memoryFree (pPowerMgrKL->hOs, hPowerMgrKL, sizeof(TPowerMgrKL));
103a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
104a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
105a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
106a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKL_init
107a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Initailize the power manager keep-alive sub-module
108a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
109a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Stores handles to other modules
110a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
111a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hPowerMgrKL - handle to the power-manager keep-alive object
112a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hReport - handle to the report object
113a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hTWD - handle to the TWD object
114a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hTxCtrl - handle to the TX control object
115a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return None
116a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_destroy, powerMgrKL_create, powerMgrKL_setDefaults
117a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
118a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid powerMgrKL_init (TI_HANDLE hPowerMgrKL,
119a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                      TStadHandlesList *pStadHandles)
120a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
121a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL     *pPowerMgrKL = (TPowerMgrKL*)hPowerMgrKL;
122a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
123a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* store handles */
124a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL->hTWD       = pStadHandles->hTWD;
125a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL->hReport    = pStadHandles->hReport;
126a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL->hTxCtrl    = pStadHandles->hTxCtrl;
127a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
128a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
129a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
130a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKL_setDefaults
131a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Set powr-manager keep-aive default initialization values
132a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
133a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Set powr-manager keep-aive default initialization values
134a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
135a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hPowerMgrKL - handle to the power-manager keep-alive object
136a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return None
137a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_init
138a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
139a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid powerMgrKL_setDefaults (TI_HANDLE hPowerMgrKL)
140a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
141a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL     *pPowerMgrKL = (TPowerMgrKL*)hPowerMgrKL;
142a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32       uIndex;
143a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
144a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* mark the global enable / disable flag as enabled */
145a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL->tCurrentConfig.enaDisFlag = TI_TRUE;
146a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
147a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* mark all messages as disabled */
148a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    for (uIndex = 0; uIndex < KEEP_ALIVE_MAX_USER_MESSAGES; uIndex++)
149a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
150a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pPowerMgrKL->tCurrentConfig.templates[ uIndex ].keepAliveParams.enaDisFlag = TI_FALSE;
151a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
152a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
153a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* mark STA as disconnected */
154a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL->bConnected = TI_FALSE;
155a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
156a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
157a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
158a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKL_start
159a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Notifies the power-manager keep-alive upon connection to a BSS
160a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
161a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Set all configured templates to the FW
162a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
163a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hPowerMgrKL - handle to the power-manager keep-alive object
164a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return TI_OK if succesful, TI_NOK otherwise
165a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_stop, powerMgrKL_setParam
166a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
167a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS powerMgrKL_start (TI_HANDLE hPowerMgrKL)
168a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
169a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL     *pPowerMgrKL = (TPowerMgrKL*)hPowerMgrKL;
170a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32       uIndex;
171a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_STATUS       status = TI_OK;
172a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
173a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* mark STA as connected */
174a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL->bConnected = TI_TRUE;
175a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
176a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* build WLAN header */
177a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    status = txCtrlServ_buildWlanHeader (pPowerMgrKL->hTxCtrl, &(pPowerMgrKL->wlanHeader[ 0 ]), &(pPowerMgrKL->wlanHeaderLength));
178a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
179a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* download all enabled templates to the FW (through TWD)*/
180a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    for (uIndex = 0; uIndex < KEEP_ALIVE_MAX_USER_MESSAGES; uIndex++)
181a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
182a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /*
183a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         * if the message is enabled (disabled messages shouldn't be configured on connection,
184a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         * as they are disabled by default in the FW) */
185a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
186a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (TI_TRUE == pPowerMgrKL->tCurrentConfig.templates[ uIndex ].keepAliveParams.enaDisFlag)
187a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
188a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* configure keep-alive to the FW (through command builder */
189a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            status = powerMgrKLConfigureMessage (hPowerMgrKL, uIndex);
190a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
191a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
192a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return status;
193a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
194a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
195a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
196a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKL_stop
197a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Notifies the power-manager keep-alive upon disconnection from a BSS
198a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
199a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Delete all configured templates from the FW and internal storage
200a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
201a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hPowerMgrKL - handle to the power-manager keep-alive object
202a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return TI_OK if succesful, TI_NOK otherwise
203a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_start, powerMgrKL_setParam
204a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
205a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid powerMgrKL_stop (TI_HANDLE hPowerMgrKL, TI_BOOL bDisconnect)
206a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
207a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL     *pPowerMgrKL = (TPowerMgrKL*)hPowerMgrKL;
208a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32       uIndex;
209a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
210a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* mark STA as disconnected */
211a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pPowerMgrKL->bConnected = TI_FALSE;
212a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
213a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* if this is a real disconnect */
214a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if (TI_TRUE == bDisconnect)
215a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
216a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* for all congfiured messages */
217a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        for (uIndex = 0; uIndex < KEEP_ALIVE_MAX_USER_MESSAGES; uIndex++)
218a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
219a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* mark the message as disabled */
220a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pPowerMgrKL->tCurrentConfig.templates[ uIndex ].keepAliveParams.enaDisFlag = TI_FALSE;
221a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
222a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
223a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* for roaming, don't do anything */
224a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
225a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
226a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
227a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKL_setParam
228a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Handles a parametr change from user-mode
229a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
230a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Handles addition / removal of a template and global enable / disable flag
231a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
232a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hPowerMgrKL - handle to the power-manager keep-alive object
233a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  pParam - A pointer to the paramter being set
234a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return TI_OK if succesful, TI_NOK otherwise
235a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_start, powerMgrKL_stop
236a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
237a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS powerMgrKL_setParam (TI_HANDLE hPowerMgrKL, paramInfo_t *pParam)
238a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
239a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL         *pPowerMgrKL = (TPowerMgrKL*)hPowerMgrKL;
240a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32           uIndex;
241a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TKeepAliveTemplate  *pNewTmpl;
242a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_STATUS           status = TI_OK;
243a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
244a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TRACE1(pPowerMgrKL->hReport, REPORT_SEVERITY_INFORMATION , "Keep-alive set param called with param type %d\n", pParam->paramType);
245a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
246a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    switch (pParam->paramType)
247a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
248a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* global keep-alive enable / disable flag */
249a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case POWER_MGR_KEEP_ALIVE_ENA_DIS:
250a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
251a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pPowerMgrKL->tCurrentConfig.enaDisFlag = pParam->content.powerMgrKeepAliveEnaDis;
252a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TWD_CfgKeepAliveEnaDis(pPowerMgrKL->hTWD,
253a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                      (TI_UINT8)pParam->content.powerMgrKeepAliveEnaDis);
254a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
255a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
256a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* keep-alive template and parameters configuration */
257a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case POWER_MGR_KEEP_ALIVE_ADD_REM:
258a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
259a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pNewTmpl = pParam->content.pPowerMgrKeepAliveTemplate;
260a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        uIndex = pNewTmpl->keepAliveParams.index;
261a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
262a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* if STA is connected */
263a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (TI_TRUE == pPowerMgrKL->bConnected)
264a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
265a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* if keep-alive is already configured for this index */
266a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if (TI_TRUE == pPowerMgrKL->tCurrentConfig.templates[ uIndex ].keepAliveParams.enaDisFlag)
267a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            {
268a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                /* disable previous keep-alive */
269a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pPowerMgrKL->tCurrentConfig.templates[ uIndex ].keepAliveParams.enaDisFlag = TI_FALSE;
270a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                status = TWD_CfgKeepAlive (pPowerMgrKL->hTWD, &(pPowerMgrKL->tCurrentConfig.templates[ uIndex ].keepAliveParams));
271a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                if (TI_OK != status)
272a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                {
273a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                    TRACE1(pPowerMgrKL->hReport, REPORT_SEVERITY_ERROR , "powerMgrKL_setParam: error trying to clear current template %d\n", status);
274a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                    return status;
275a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                }
276a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
277a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
278a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* copy configuration */
279a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            os_memoryCopy (pPowerMgrKL->hOs, &(pPowerMgrKL->tCurrentConfig.templates[ uIndex ]),
280a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                           pNewTmpl, sizeof (TKeepAliveTemplate));
281a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
282a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* configure keep-alive to the FW (through command builder */
283a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            return powerMgrKLConfigureMessage (hPowerMgrKL, uIndex);
284a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
285a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* STA disconnected */
286a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        else
287a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
288a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* copy configuration */
289a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            os_memoryCopy (pPowerMgrKL->hOs, &(pPowerMgrKL->tCurrentConfig.templates[ uIndex ]),
290a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                           pNewTmpl, sizeof (TKeepAliveTemplate));
291a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
292a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_OK;
293a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
294a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
295a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    default:
296a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pPowerMgrKL->hReport, REPORT_SEVERITY_ERROR , "power manager keep-alive: set param with unknown param type %d\n", pParam->paramType);
297a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return PARAM_NOT_SUPPORTED;
298a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
299a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
300a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
301a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
302a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
303a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKL_getParam
304a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Handles a parametr request from user-mode
305a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
306a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Retrieves configuration
307a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
308a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hPowerMgrKL - handle to the power-manager keep-alive object
309a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  pParam - A pointer to the paramter being retrieved
310a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return TI_OK if succesful, TI_NOK otherwise
311a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_start, powerMgrKL_stop
312a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
313a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS powerMgrKL_getParam (TI_HANDLE hPowerMgrKL, paramInfo_t *pParam)
314a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
315a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL     *pPowerMgrKL = (TPowerMgrKL*)hPowerMgrKL;
316a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
317a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TRACE1(pPowerMgrKL->hReport, REPORT_SEVERITY_INFORMATION , "Keep-alive get param called with param type %d\n", pParam->paramType);
318a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
319a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    switch (pParam->paramType)
320a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
321a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case POWER_MGR_KEEP_ALIVE_GET_CONFIG:
322a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
323a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pParam->paramLength = sizeof (TKeepAliveConfig);
324a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        os_memoryCopy (pPowerMgrKL->hOs, (void*)pParam->content.pPowerMgrKeepAliveConfig,
325a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                       (void*)&(pPowerMgrKL->tCurrentConfig), sizeof (TKeepAliveConfig));
326a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
327a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_OK;
328a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
329a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
330a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    default:
331a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pPowerMgrKL->hReport, REPORT_SEVERITY_ERROR , "power manager keep-alive: get param with unknown param type %d\n", pParam->paramType);
332a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return PARAM_NOT_SUPPORTED;
333a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
334a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
335a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
336a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
337a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
338a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     powerMgrKLConfigureMessage
339a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Configures keep-alive message (template and parameters)
340a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
341a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Configures a keepa-live message from internal database.
342a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
343a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hPowerMgrKL - handle to the power-manager keep-alive object
344a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  uMessageIndex - index of message to configure (from internal database)
345a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return TI_OK if succesful, TI_NOK otherwise
346a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa     powerMgrKL_start, powerMgrKL_setParam
347a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
348a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS powerMgrKLConfigureMessage (TI_HANDLE hPowerMgrKL, TI_UINT32 uMessageIndex)
349a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
350a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPowerMgrKL     *pPowerMgrKL    = (TPowerMgrKL*)hPowerMgrKL;
351a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_STATUS       status          = TI_OK;
352a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
353a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* if the keep-alive for this index is enabled */
354a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if (TI_TRUE == pPowerMgrKL->tCurrentConfig.templates[ uMessageIndex ].keepAliveParams.enaDisFlag)
355a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
356a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* configure template - first the template itself */
357a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TSetTemplate    tTemplate;
358a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
359a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        tTemplate.type = KEEP_ALIVE_TEMPLATE;
360a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        tTemplate.index = uMessageIndex;
361a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        os_memoryCopy (pPowerMgrKL->hOs, &(pPowerMgrKL->tempBuffer),
362a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                       &(pPowerMgrKL->wlanHeader), pPowerMgrKL->wlanHeaderLength); /* copy WLAN header - was built on connection */
363a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        os_memoryCopy (pPowerMgrKL->hOs, &(pPowerMgrKL->tempBuffer[ pPowerMgrKL->wlanHeaderLength ]),
364a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                       &(pPowerMgrKL->tCurrentConfig.templates[ uMessageIndex ].msgBuffer[ 0 ]),
365a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                       pPowerMgrKL->tCurrentConfig.templates[ uMessageIndex ].msgBufferLength); /* copy template data */
366a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        tTemplate.ptr = &(pPowerMgrKL->tempBuffer[ 0 ]);
367a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        tTemplate.len = pPowerMgrKL->tCurrentConfig.templates[ uMessageIndex ].msgBufferLength + pPowerMgrKL->wlanHeaderLength;
368a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        tTemplate.uRateMask = RATE_MASK_UNSPECIFIED;
369a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        status = TWD_CmdTemplate (pPowerMgrKL->hTWD, &tTemplate, NULL, NULL);
370a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (TI_OK != status)
371a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
372a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE1(pPowerMgrKL->hReport, REPORT_SEVERITY_ERROR , "powerMgrKLConfigureMessage: error trying to set new template %d\n", status);
373a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            return status;
374a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
375a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
376a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* and than the parameters */
377a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        status = TWD_CfgKeepAlive (pPowerMgrKL->hTWD, &(pPowerMgrKL->tCurrentConfig.templates[ uMessageIndex ].keepAliveParams));
378a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (TI_OK != status)
379a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
380a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE1(pPowerMgrKL->hReport, REPORT_SEVERITY_ERROR , "powerMgrKLConfigureMessage: error trying to set new keep-alive params %d\n", status);
381a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            return status;
382a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
383a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
384a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* keep-alive for this index is disabled - just disable it */
385a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    else
386a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
387a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        status = TWD_CfgKeepAlive (pPowerMgrKL->hTWD, &(pPowerMgrKL->tCurrentConfig.templates[ uMessageIndex ].keepAliveParams));
388a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (TI_OK != status)
389a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
390a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE1(pPowerMgrKL->hReport, REPORT_SEVERITY_ERROR , "powerMgrKLConfigureMessage: error trying to set new keep-alive params %d\n", status);
391a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            return status;
392a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
393a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
394a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
395a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return status;
396a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
397