source: svn/newcon3bcm2_21bu/magnum/portinginterface/aob/7552/baob.c @ 22

Last change on this file since 22 was 22, checked in by phkim, 11 years ago
  1. phkim
  2. newcon3sk 를 kctv 로 브랜치 함
  • Property svn:executable set to *
File size: 24.3 KB
Line 
1/**************************************************************************
2 *     (c)2005-2011 Broadcom Corporation
3 * 
4 *  This program is the proprietary software of Broadcom Corporation and/or its licensors,
5 *  and may only be used, duplicated, modified or distributed pursuant to the terms and
6 *  conditions of a separate, written license agreement executed between you and Broadcom
7 *  (an "Authorized License").  Except as set forth in an Authorized License, Broadcom grants
8 *  no license (express or implied), right to use, or waiver of any kind with respect to the
9 *  Software, and Broadcom expressly reserves all rights in and to the Software and all
10 *  intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU
11 *  HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY
12 *  NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE. 
13 *   
14 *  Except as expressly set forth in the Authorized License,
15 *   
16 *  1.     This program, including its structure, sequence and organization, constitutes the valuable trade
17 *  secrets of Broadcom, and you shall use all reasonable efforts to protect the confidentiality thereof,
18 *  and to use this information only in connection with your use of Broadcom integrated circuit products.
19 *   
20 *  2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
21 *  AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
22 *  WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
23 *  THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND ALL IMPLIED WARRANTIES
24 *  OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE,
25 *  LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION
26 *  OR CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF
27 *  USE OR PERFORMANCE OF THE SOFTWARE.
28 * 
29 *  3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR ITS
30 *  LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL, INDIRECT, OR
31 *  EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY RELATING TO YOUR
32 *  USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF
33 *  THE POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT
34 *  ACTUALLY PAID FOR THE SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE
35 *  LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF
36 *  ANY LIMITED REMEDY.
37 *
38 * $brcm_Workfile: baob.c $
39 * $brcm_Revision: Hydra_Software_Devel/18 $
40 * $brcm_Date: 3/12/12 10:35a $
41 *
42 * Module Description:
43 *
44 * Revision History:
45 *
46 * $brcm_Log: /magnum/portinginterface/aob/7552/baob.c $
47 *
48 * Hydra_Software_Devel/18   3/12/12 10:35a farshidf
49 * SW3128-1: add callback to tuner through Nexus
50 *
51 * Hydra_Software_Devel/17   3/1/12 12:01p farshidf
52 * SW7574-105: 7572 Constellation function
53 *
54 * Hydra_Software_Devel/16   3/1/12 11:57a farshidf
55 * SW7574-105: 7572 Constellation function
56 *
57 * Hydra_Software_Devel/15   2/29/12 12:05p farshidf
58 * SW7574-105: 7572 Constellation function
59 *
60 * Hydra_Software_Devel/14   2/1/12 5:57p farshidf
61 * SW3128-1: fix the OOb reset issue
62 *
63 * Hydra_Software_Devel/13   1/18/12 4:37p farshidf
64 * SW7574-69: fix the BBS interface
65 *
66 * Hydra_Software_Devel/12   1/16/12 4:17p farshidf
67 * SW7574-69: fix the get lock status call
68 *
69 * Hydra_Software_Devel/11   1/12/12 6:59p farshidf
70 * SW7574-69: fix the get lock status call
71 *
72 * Hydra_Software_Devel/10   1/12/12 5:43p farshidf
73 * SW7574-69: fix the get lock status call
74 *
75 * Hydra_Software_Devel/9   1/2/12 2:05p farshidf
76 * SW7552-170: update lock status update
77 *
78 * Hydra_Software_Devel/8   12/16/11 5:49p farshidf
79 * SW7552-170: remove the LSFR_ENABLE bit settings
80 *
81 * Hydra_Software_Devel/7   12/15/11 11:45a farshidf
82 * SW7552-170: add the BBS support
83 *
84 * Hydra_Software_Devel/6   12/14/11 4:07p farshidf
85 * SW7552-170: fix the OOB callback
86 *
87 * Hydra_Software_Devel/5   12/14/11 3:58p farshidf
88 * SW7552-170: fix the AOB interface
89 *
90 * Hydra_Software_Devel/4   12/14/11 10:40a farshidf
91 * SW7552-170: add the reset
92 *
93 * Hydra_Software_Devel/3   12/12/11 2:38p farshidf
94 * SW7552-170: add get default settings
95 *
96 * Hydra_Software_Devel/2   12/12/11 12:01p farshidf
97 * SW7552-170: fix the AOB pi
98 *
99 * Hydra_Software_Devel/1   11/9/11 4:49p farshidf
100 * SW7552-139: add aob support
101 *
102 ***************************************************************************/
103#include "bstd.h"
104#include "bads.h"
105#include "btmr.h"
106#include "bmth.h"
107#include "bkni.h"
108#include "baob.h"
109#include "baob_struct.h"
110#include "baob_priv.h"
111#include "baob_acquire.h"
112#include "baob_status.h"
113#include "baob_utils.h"
114#include "bchp_oob.h"
115#include "bchp_ds_topm.h"
116#include "bchp_ds_tops.h"
117BDBG_MODULE(baob);
118
119/*******************************************************************************
120*
121*   Default Module Settings
122*
123*******************************************************************************/
124static const BAOB_Settings defDevSettings =
125{
126    0,                   
127    NULL,                       /* Hab handle, must be provided by application*/
128    BAOB_SETTINGS_XTALFREQ, 
129    false,   
130    true,                       /* Default is open drain mode. */
131    true,                        /* Default is serial data. */ 
132        NULL,
133        NULL,
134        BAOB_NyquistFilter_eRaisedCosine_50
135};
136/*******************************************************************************
137*   BAOB_3x7x_Open
138*******************************************************************************/
139
140BERR_Code BAOB_Open(
141        BAOB_Handle *pAob,                  /* [out] Returns handle */
142    BCHP_Handle hChip,                  /* [in] Chip handle */
143    BREG_Handle hRegister,              /* [in] Register handle */
144    BINT_Handle hInterrupt,             /* [in] Interrupt handle */
145    const BAOB_Settings *pDefSettings   /* [in] Default settings */
146    )
147{
148    BERR_Code retCode = BERR_SUCCESS;
149    BAOB_Handle hDev;
150        BTMR_Settings sTimerSettings;
151        BAOB_3x7x_Handle hImplDev = NULL;
152        uint32_t BufSrc;
153    BDBG_ENTER(BAOB_Open);
154    BDBG_MSG(("BAOB_Open"));
155
156
157    hDev = (BAOB_Handle) BKNI_Malloc( sizeof(BAOB_P_Handle ) );
158    if( hDev == NULL )
159    {
160        retCode = BERR_TRACE(BERR_OUT_OF_SYSTEM_MEMORY);
161        BDBG_ERR(("BAOB_Open: BKNI_malloc() failed"));
162        goto done;
163    }
164    BKNI_Memset( hDev, 0x00, sizeof(BAOB_P_Handle ) );
165        BKNI_Memcpy(&hDev->settings, pDefSettings, sizeof(*pDefSettings));
166
167    /* Alloc memory from the system heap */
168    hImplDev = (BAOB_3x7x_Handle) BKNI_Malloc( sizeof(BAOB_P_3x7x_Handle ) );
169    if( hImplDev == NULL )
170    {
171        retCode = BERR_TRACE(BERR_OUT_OF_SYSTEM_MEMORY);
172        BDBG_ERR(("BAOB_3x7x_Open: BKNI_malloc() failed"));
173        goto done;
174    }
175   
176    BKNI_Memset( hImplDev, 0x00, sizeof(BAOB_P_3x7x_Handle ) );
177    hImplDev->magicId = DEV_MAGIC_ID;
178        hImplDev->hChip = hChip;
179    hImplDev->hRegister = hRegister;
180    hImplDev->hInterrupt = hInterrupt;
181        hDev->pImpl = hImplDev;
182
183        hImplDev->pAcqParam = (BAOB_AcqParams_t *)BMEM_AllocAligned(pDefSettings->hHeap, sizeof(BAOB_AcqParams_t), 0, 0 );
184        if (! hImplDev->pAcqParam )
185        {
186                        BDBG_ERR(("BAOB_Open: BMEM_malloc() failed"));
187                        goto done;
188        }
189        BMEM_ConvertAddressToOffset(pDefSettings->hHeap, hImplDev->pAcqParam, &BufSrc );
190        BKNI_Memset( hImplDev->pAcqParam, 0x00, sizeof(BAOB_AcqParams_t ) );
191        hImplDev->pAcqParam->BAOB_Local_Params.BBSAcqAdd = BufSrc;
192
193
194
195        hImplDev->pStatus = (BAOB_Status_t *)BMEM_AllocAligned(pDefSettings->hHeap, sizeof(BAOB_Status_t), 0, 0 );
196        if (! hImplDev->pStatus )
197        {
198                        BDBG_ERR(("BAOB_Open: BMEM_malloc() failed"));
199                        goto done;
200        }
201        BMEM_ConvertAddressToOffset(pDefSettings->hHeap, hImplDev->pStatus, &BufSrc );
202        BKNI_Memset( hImplDev->pStatus, 0x00, sizeof(BAOB_Status_t ) );
203        hImplDev->pAcqParam->BAOB_Local_Params.BBSStaAdd = BufSrc;     
204
205        if (hDev->settings.enableFEC)
206                hImplDev->pAcqParam->BAOB_Acquire_Params.BYP = BAOB_Acquire_Params_eEnable;
207        else
208                hImplDev->pAcqParam->BAOB_Acquire_Params.BYP = BAOB_Acquire_Params_eDisable;
209
210    BKNI_CreateEvent(&(hImplDev->hIntEvent));
211        /* Create timer for status lock check */
212
213        sTimerSettings.type = BTMR_Type_ePeriodic;
214        sTimerSettings.cb_isr = (BTMR_CallbackFunc)BAOB_P_TimerFunc;
215        sTimerSettings.pParm1 = (void*)hImplDev;
216        sTimerSettings.parm2 = 0;
217        retCode = BTMR_CreateTimer (hDev->settings.hTmr, &hImplDev->hTimer, &sTimerSettings);
218        if ( retCode != BERR_SUCCESS )
219        {
220           BDBG_ERR(("BAOB_Open: Create Timer Failed"));
221           goto done;
222    }   
223
224    *pAob = hDev;
225
226done:
227    if( retCode != BERR_SUCCESS )
228    {
229        if( hImplDev != NULL )
230        {
231            BKNI_Free( hImplDev );
232        } 
233                if( hDev != NULL )
234        {
235            BKNI_Free( hDev );
236        }
237        *pAob = NULL;
238    }
239        BDBG_LEAVE(BAOB_3x7x_Open);
240    return( retCode );
241}
242
243
244/*******************************************************************************
245*  BAOB_3x7x_Close
246*******************************************************************************/
247
248BERR_Code BAOB_Close(
249   BAOB_Handle hDev                    /* [in] Device handle */
250    )
251{
252    BERR_Code retCode = BERR_SUCCESS;
253        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
254        BDBG_ENTER(BAOB_Close);
255        BDBG_ASSERT( hDev );
256    BDBG_ASSERT( hImplDev->magicId == DEV_MAGIC_ID );
257       
258        BTMR_DestroyTimer(hImplDev->hTimer);
259        BKNI_DestroyEvent(hImplDev->hIntEvent);
260    hImplDev->magicId = 0x00;       /* clear it to catch improper use */
261        BMEM_Free(hDev->settings.hHeap ,(void *)(hImplDev->pStatus) );
262        BMEM_Free(hDev->settings.hHeap,(void *)(hImplDev->pAcqParam ) );
263    BKNI_Free( (void *) hImplDev );
264        BKNI_Free( (void *) hDev );
265           
266        BDBG_LEAVE(BAOB_Close);
267    return retCode;
268}
269
270
271/*******************************************************************************
272*  BAOB_3x7x_Acquire
273*******************************************************************************/
274BERR_Code BAOB_Acquire(
275    BAOB_Handle hDev,                    /* [in] Device channel handle */
276    BAOB_AcquireParam *obParams           /* [in] Device  handle */
277    )
278{
279 
280        BERR_Code retCode = BERR_SUCCESS;
281
282        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
283    BDBG_ENTER(BAOB_Acquire);
284        BDBG_ASSERT( hDev );
285    BDBG_ASSERT( hImplDev->magicId == DEV_MAGIC_ID );
286    BDBG_MSG(("BAOB_Acquire"));
287
288        if (hImplDev->PowerStatus != BAOB_ePower_On)
289        {
290                BDBG_ERR(("!!!!!BAOB_Acquire: The channel is not power on yet "));
291        return BERR_NOT_INITIALIZED;
292        }
293        hImplDev->pAcqParam->BAOB_Acquire_Params.Nyq = hDev->settings.nyquist;
294   
295                if (obParams->autoAcquire)
296                        hImplDev->pAcqParam->BAOB_Acquire_Params.Auto =BAOB_Acquire_Params_eEnable ;
297                else
298                        hImplDev->pAcqParam->BAOB_Acquire_Params.Auto = BAOB_Acquire_Params_eDisable;
299
300                if (obParams->spectrum == BAOB_SpectrumMode_eAuto)
301                        hImplDev->pAcqParam->BAOB_Acquire_Params.AI = BAOB_Acquire_Params_eEnable;
302                else
303                {
304                        hImplDev->pAcqParam->BAOB_Acquire_Params.AI = BAOB_Acquire_Params_eDisable;
305                        if(obParams->spectrum == BAOB_SpectrumMode_eNoInverted)
306                                hImplDev->pAcqParam->BAOB_Acquire_Params.IS = BAOB_Acquire_Params_eDisable;
307                        else
308                                hImplDev->pAcqParam->BAOB_Acquire_Params.IS = BAOB_Acquire_Params_eEnable;
309                }
310
311                switch(obParams->berSrc)
312                {
313                        case BAOB_BerInputSrc_eRcvIChOutput:
314                                hImplDev->pAcqParam->BAOB_Acquire_Params.BERSRC = BAOB_Acquire_Params_BERT_Source_eI; 
315                                break;
316                        case BAOB_BerInputSrc_eRcvQChOutput:
317                                hImplDev->pAcqParam->BAOB_Acquire_Params.BERSRC = BAOB_Acquire_Params_BERT_Source_eQ; 
318                                break;
319                        case BAOB_BerInputSrc_eRcvIQChOutputIntrlv:
320                                hImplDev->pAcqParam->BAOB_Acquire_Params.BERSRC = BAOB_Acquire_Params_BERT_Source_eIQ; 
321                                break;
322                        case BAOB_BerInputSrc_eFecOutput:
323                                hImplDev->pAcqParam->BAOB_Acquire_Params.BERSRC = BAOB_Acquire_Params_BERT_Source_eFEC; 
324                                break;
325                        default:
326                                BDBG_ERR(("Unsupported berSrc"));
327                }
328                switch(obParams->modType)
329                {
330                        case BAOB_ModulationType_eDvs167Qpsk:
331                                hImplDev->pAcqParam->BAOB_Acquire_Params.AA = BAOB_Acquire_Params_BPS_eDVS167; 
332                                break;
333                        case BAOB_ModulationType_eDvs178Qpsk:
334                                hImplDev->pAcqParam->BAOB_Acquire_Params.AA = BAOB_Acquire_Params_BPS_eDVS178; 
335                                break;
336                        default:
337                                BDBG_ERR(("Unsupported modulation type"));
338
339                }
340
341                switch (obParams->symbolRate)
342                {
343                        case 1024000:
344                                hImplDev->pAcqParam->BAOB_Acquire_Params.BPS = BAOB_Acquire_Params_BPS_eDVS_178;
345                                break;
346                        case 772000:
347                                hImplDev->pAcqParam->BAOB_Acquire_Params.BPS = BAOB_Acquire_Params_BPS_eDVS_167_GradeA;
348                                break;
349                        case 1544000:
350                                hImplDev->pAcqParam->BAOB_Acquire_Params.BPS = BAOB_Acquire_Params_BPS_eDVS_167_GradeB;
351                                break;
352                        default:
353                                BDBG_ERR(("Unsupported symbolRate %d", obParams->symbolRate));
354                }
355                hImplDev->pAcqParam->BAOB_Acquire_Params.PLBW = BAOB_Acquire_Params_PLBW_eMed;
356        hImplDev->pAcqParam->BAOB_Local_Params.LockUpdate = false;
357        hImplDev->pAcqParam->BAOB_Local_Params.LockStatus = 0xFF;
358                BAOB_P_Acquire(hImplDev);       
359
360        BTMR_StartTimer(hImplDev->hTimer, 25000);   /* the timer is in Micro second */;
361        BDBG_LEAVE(BAOB_Acquire);
362        return retCode;
363}
364
365
366/*******************************************************************************
367*  BAOB_3x7x_GetStatus (Read status from status struct)
368*******************************************************************************/
369BERR_Code BAOB_GetStatus(
370   BAOB_Handle hDev,          /* [in] Device  handle */
371   BAOB_Status *pStatus
372    )
373{
374
375        BERR_Code retCode = BERR_SUCCESS;
376        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
377        BDBG_ENTER(BAOB_3x7x_Status);
378        BDBG_ASSERT( hDev );
379    BDBG_ASSERT( hImplDev->magicId == DEV_MAGIC_ID );
380    BDBG_ASSERT( NULL != (hImplDev->pStatus) );
381
382        if (hImplDev->PowerStatus != BAOB_ePower_On)
383        {
384                BDBG_ERR(("!!!!!BAOB_GetStatus: The channel is not power on yet "));
385        return BERR_NOT_INITIALIZED;
386        }
387    else if ( NULL == pStatus )
388    {
389        return BERR_INVALID_PARAMETER;
390    }
391    else
392    {
393                BAOB_P_Get_Status(hImplDev);       
394                switch(hImplDev->pStatus->AA)
395                {
396                case BAOB_Acquire_Params_BPS_eDVS167:
397                        pStatus->modType = BAOB_ModulationType_eDvs167Qpsk;
398                        break;
399                case BAOB_Acquire_Params_BPS_eDVS178:
400                        pStatus->modType = BAOB_ModulationType_eDvs178Qpsk;
401                        break;
402                }
403                pStatus->isFecLock = hImplDev->pStatus->FLK;
404                pStatus->symbolRate = hImplDev->pStatus->Symbol_Rate;
405                pStatus->sysXtalFreq = 54000000;
406                pStatus->snrEstimate = hImplDev->pStatus->SNR;
407            pStatus->carrierFreqOffset = hImplDev->pStatus->Frequency_Error;
408                pStatus->carrierPhaseOffset = 0; /* not supported */
409                pStatus->uncorrectedCount = hImplDev->pStatus->FEC_UCorr_RS_Blocks;
410                pStatus->correctedCount = hImplDev->pStatus->FEC_Corr_RS_Blocks;
411                pStatus->berErrorCount = hImplDev->pStatus->BERT;
412                pStatus->isQamLock = hImplDev->pStatus->RLK;
413
414        return BERR_SUCCESS;
415    }
416        BDBG_LEAVE(BAOB_Status);
417        return retCode;
418
419}
420
421/*******************************************************************************
422*  BAOB_3x7x_GetLockStatus
423*******************************************************************************/
424BERR_Code BAOB_GetLockStatus(
425   BAOB_Handle hDev,                                    /* [in] Device  handle */
426    bool *isLock                        /* [out] Returns lock status, 0=not lock, 1=locked */
427    )
428{
429    BERR_Code retCode = BERR_SUCCESS;
430        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
431    BDBG_ENTER(BAOB_GetLockStatus);
432        BDBG_ASSERT( hDev );
433    BDBG_ASSERT( hImplDev->magicId == DEV_MAGIC_ID );
434        if (hImplDev->PowerStatus != BAOB_ePower_On)
435        {
436                BDBG_ERR(("!!!!!BAOB_GetLockStatus: The channel is not power on yet "));
437        return BERR_NOT_INITIALIZED;
438        }
439    else
440    {
441                BAOB_P_GetLock_Status(hImplDev);
442        *isLock = (hImplDev->pStatus->RLK && hImplDev->pStatus->FLK);
443    }
444    BDBG_LEAVE(BAOB_GetLockStatus);
445    return( retCode );
446}
447
448/*******************************************************************************
449*  BAOB_P_GetSoftDecisionBuf
450*******************************************************************************/
451BERR_Code BAOB_GetSoftDecisionBuf(
452    BAOB_Handle hDev,                                   /* [in] Device channel handle */
453    int16_t nbrToGet,                   /* [in] Number values to get */
454    int16_t *iVal,                      /* [out] Ptr to array to store output I soft decision */
455    int16_t *qVal,                      /* [out] Ptr to array to store output Q soft decision */
456    int16_t *nbrGotten                  /* [out] Number of values gotten/read */
457    )
458{
459        BERR_Code retCode = BERR_SUCCESS;
460        uint8_t i;
461        int32_t ReadReg;
462        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
463        BDBG_ENTER(BAOB_GetSoftDecisionBuf);
464    BDBG_ASSERT( hDev );
465
466
467    for (i = 0; i < nbrToGet ; i++)
468    {
469        ReadReg = BREG_Read32(hImplDev->hRegister, BCHP_OOB_LDSFT);
470        iVal[i] = ((ReadReg & 0xff000000) >> 16);    /* still use 16 bit for I and Q value   */           
471        qVal[i] = ((ReadReg & 0x00ff0000) >> 8);
472
473    }
474    *nbrGotten = nbrToGet; 
475
476    BDBG_LEAVE(BAOB_GetSoftDecisionBuf);
477    return( retCode );
478}
479
480/*******************************************************************************
481*  BAOB_3x7x_DisablePowerSaver
482*******************************************************************************/
483BERR_Code BAOB_DisablePowerSaver ( 
484   BAOB_Handle hDev            /* [in] Device  handle */
485    )
486{
487        BERR_Code retCode = BERR_SUCCESS;
488        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
489        BDBG_ENTER(BAOB_DisablePowerSaver);
490        BDBG_ASSERT( hDev );
491    BDBG_ASSERT( hImplDev->magicId == DEV_MAGIC_ID );
492    if (hImplDev->PowerStatus == BAOB_ePower_On)
493        return BERR_SUCCESS;
494        hImplDev->PowerStatus = BAOB_ePower_On;
495
496        BREG_WriteField(hImplDev->hRegister, DS_TOPM_PD, OOB_60_DISABLE, 0);            /* power up the DS core */     
497        BREG_WriteField(hImplDev->hRegister, DS_TOPM_RST_MASK, OB_RSTEN, 1);
498        BREG_WriteField(hImplDev->hRegister, DS_TOPM_GBL, RESET, 1);
499        BREG_WriteField(hImplDev->hRegister, DS_TOPM_GBL, RESET, 0);
500        BKNI_Delay(20);
501
502        /* reset the FE Fifo */
503        BREG_WriteField(hImplDev->hRegister, DS_TOPS_CNTL, FIFO_RESET_OB, 1);
504        BREG_WriteField(hImplDev->hRegister, DS_TOPS_CNTL, FIFO_RESET_OB, 0);
505
506        BREG_Write32(hImplDev->hRegister, BCHP_DS_TOPS_SW_SPARE2, hImplDev->pAcqParam->BAOB_Local_Params.BBSAcqAdd);
507        BREG_Write32(hImplDev->hRegister, BCHP_DS_TOPS_SW_SPARE1, hImplDev->pAcqParam->BAOB_Local_Params.BBSStaAdd);
508
509    BAOB_P_PowerUp(hImplDev);
510       
511    BDBG_LEAVE(BAOB_DisablePowerSaver);
512    return( retCode );
513}
514
515/*******************************************************************************
516*  BAOB_3x7x_EnablePowerSaver
517*******************************************************************************/
518
519BERR_Code BAOB_EnablePowerSaver(
520   BAOB_Handle hDev            /* [in] Device  handle */
521    )
522{
523        BERR_Code retCode = BERR_SUCCESS;
524        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
525        BDBG_ENTER(BAOB_EnablePowerSaver);
526        BDBG_ASSERT( hDev );
527    BDBG_ASSERT( hImplDev->magicId == DEV_MAGIC_ID );
528    if (hImplDev->PowerStatus == BAOB_ePower_Off)
529        return BERR_SUCCESS;
530        hImplDev->PowerStatus = BAOB_ePower_Off;
531        BAOB_P_PowerDn(hImplDev);
532
533        BDBG_LEAVE(BAOB_EnablePowerSaver);
534    return( retCode );
535}
536
537
538/*******************************************************************************
539*  BAOB_3x7x_ResetStatus
540*******************************************************************************/
541BERR_Code BAOB_ResetStatus(
542   BAOB_Handle hDev            /* [in] Device  handle */
543    )
544{
545        BERR_Code retCode = BERR_SUCCESS;
546        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
547        BDBG_ENTER(BAOB_ResetStatus);
548    BDBG_ASSERT( hDev );
549    BDBG_ASSERT( hImplDev->magicId == DEV_MAGIC_ID );
550        BAOB_P_Reset_Status(hImplDev);
551        BDBG_LEAVE(BAOB_ResetStatus);
552    return( retCode );
553}
554
555/******************************************************************************
556* BAOB_3x7x_P_TimerFunc()
557******************************************************************************/
558void BAOB_P_TimerFunc(void *myParam1, int myParam2)
559{
560
561        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) myParam1;
562        BDBG_ASSERT( hImplDev );
563        BSTD_UNUSED(myParam2);
564
565        if (hImplDev->PowerStatus != BAOB_ePower_On) 
566        {
567                BDBG_ERR(("BAOB_P_TimerFunc: power is still off  "));
568                return;
569        }
570        BAOB_P_GetLock_Status(hImplDev);
571
572        if( hImplDev->pCallback[BAOB_Callback_eLockChange] != NULL )
573        {
574         if (hImplDev->pStatus->FLK)
575                 {
576                            if (hImplDev->pAcqParam->BAOB_Local_Params.LockUpdate)
577                                {
578                                        hImplDev->pAcqParam->BAOB_Local_Params.LockUpdate = false;
579                                        (hImplDev->pCallback[BAOB_Callback_eLockChange])(hImplDev->pCallbackParam[BAOB_Callback_eLockChange] );
580                                }
581
582                 }
583                 else
584                 {
585                            if (hImplDev->pAcqParam->BAOB_Local_Params.LockStatus != hImplDev->pStatus->FLK )
586                {       
587                                        hImplDev->pAcqParam->BAOB_Local_Params.LockUpdate = true;
588                                        (hImplDev->pCallback[BAOB_Callback_eLockChange])(hImplDev->pCallbackParam[BAOB_Callback_eLockChange] );
589                                }
590                 }
591        }
592        hImplDev->pAcqParam->BAOB_Local_Params.LockStatus = hImplDev->pStatus->FLK;
593
594        if (hImplDev->pAcqParam->BAOB_Acquire_Params.AcquireStartMode & BAOB_AcquireStartMode_ResetStatus)
595        {
596                hImplDev->pAcqParam->BAOB_Acquire_Params.AcquireStartMode &= (~BAOB_AcquireStartMode_ResetStatus);
597                BAOB_P_Reset_Status(hImplDev);
598        }
599        if (hImplDev->pAcqParam->BAOB_Acquire_Params.AcquireStartMode & BAOB_AcquireStartMode_UpdateStatus)
600        {
601                hImplDev->pAcqParam->BAOB_Acquire_Params.AcquireStartMode &= (~BAOB_AcquireStartMode_UpdateStatus);
602                BAOB_P_Get_Status(hImplDev);
603        }
604        if (hImplDev->pAcqParam->BAOB_Acquire_Params.AcquireStartMode & BAOB_AcquireStartMode_Acquire)
605        {
606                hImplDev->pAcqParam->BAOB_Acquire_Params.AcquireStartMode &= (~BAOB_AcquireStartMode_Acquire);
607                BKNI_SetEvent(hImplDev->hIntEvent);
608        }
609        else
610        {
611                if (hImplDev->pAcqParam->BAOB_Acquire_Params.Auto == BAOB_Acquire_Params_eEnable)
612                {
613                 if (hImplDev->pAcqParam->BAOB_Acquire_Params.BYP == BAOB_Acquire_Params_eEnable)
614                 {
615                  if (hImplDev->pStatus->RLK == BAOB_Status_eUnlock)
616                        BKNI_SetEvent(hImplDev->hIntEvent);
617                 }
618                 else
619                 {
620                  if (hImplDev->pStatus->FLK == BAOB_Status_eUnlock)
621                        BKNI_SetEvent(hImplDev->hIntEvent);
622                 }
623                }
624        }
625}
626
627/******************************************************************************
628*BAOB_3x7x_ProcessInterruptEvent()
629******************************************************************************/
630BERR_Code BAOB_InstallCallback(
631    BAOB_Handle hDev,                   /* [in] Device handle */
632    BAOB_Callback callbackType,         /* [in] Type of callback */
633    BAOB_CallbackFunc pCallback,        /* [in] Function Ptr to callback */
634    void *pParam                        /* [in] Generic parameter send on callback */
635    )
636{
637    BERR_Code retCode = BERR_SUCCESS;
638        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
639    BDBG_ENTER(BAOB_InstallCallback);
640    BDBG_ASSERT( hDev );
641    BDBG_ASSERT( hImplDev->magicId == DEV_MAGIC_ID );
642
643    switch( callbackType )
644    {
645        case BAOB_Callback_eLockChange:
646            hImplDev->pCallback[callbackType] = pCallback;
647            hImplDev->pCallbackParam[callbackType] = pParam;
648            break;
649                case BAOB_Callback_eTuner:
650            hImplDev->pCallback[callbackType] = pCallback;
651            hImplDev->pCallbackParam[callbackType] = pParam;
652            break;
653       
654        default:
655            retCode = BERR_TRACE(BERR_INVALID_PARAMETER);
656            break;
657    }
658
659    BDBG_LEAVE(BAOB_InstallCallback);
660    return( retCode );
661}
662
663/******************************************************************************
664*BAOB_3x7x_ProcessInterruptEvent()
665******************************************************************************/
666
667void BAOB_ProcessInterruptEvent (BAOB_Handle hDev)
668{       
669        BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) hDev->pImpl;
670
671        BTMR_StopTimer(hImplDev->hTimer);  /* the timer is in Micro second */
672        BKNI_ResetEvent(hImplDev->hIntEvent);
673                        BAOB_P_Acquire(hImplDev);
674        BTMR_StartTimer(hImplDev->hTimer, 25000);   /* the timer is in Micro second */;
675}
676
677/******************************************************************************
678*BAOB_GetDefaultSettings()
679******************************************************************************/
680BERR_Code BAOB_GetDefaultSettings(
681    BAOB_Settings *pDefSettings,        /* [out] Returns default setting */
682    BCHP_Handle hChip                   /* [in] Chip handle */
683    )
684{
685    BERR_Code retCode = BERR_SUCCESS;
686
687    BSTD_UNUSED(hChip);
688    BDBG_ENTER(BAOB_GetDefaultSettings);
689
690    *pDefSettings = defDevSettings;
691
692    BDBG_LEAVE(BAOB_GetDefaultSettings);
693    return( retCode );
694}
695
696
697
698/******************************************************************************
699  BAOB_GetInterruptEventHandle()
700 ******************************************************************************/
701BERR_Code BAOB_GetInterruptEventHandle(BAOB_Handle h, BKNI_EventHandle* hEvent)
702{
703    BAOB_3x7x_Handle hImplDev = (BAOB_3x7x_Handle) h->pImpl;
704        *hEvent = hImplDev->hIntEvent;
705    return BERR_SUCCESS;
706}
707
Note: See TracBrowser for help on using the repository browser.