source: svn/trunk/newcon3bcm2_21bu/magnum/portinginterface/xpt/7552/bxpt_spid.c

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 6.8 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2003-2010, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: bxpt_spid.c $
11 * $brcm_Revision: Hydra_Software_Devel/2 $
12 * $brcm_Date: 10/28/10 2:08p $
13 *
14 * Porting interface code for the data transport core.
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /magnum/portinginterface/xpt/base2/bxpt_spid.c $
19 *
20 * Hydra_Software_Devel/2   10/28/10 2:08p gmullen
21 * SW7422-20: Checkin ported files
22 *
23 * Hydra_Software_Devel/14   8/30/10 5:24p gmullen
24 * SW7403-924: Protected access to the PID and SPID table from other
25 * modules in the PI
26 *
27 * Hydra_Software_Devel/13   6/17/09 6:46p gmullen
28 * PR56110: Added support.xpt/7550/uif_image/a0
29 *
30 * Hydra_Software_Devel/12   4/7/09 5:26p piyushg
31 * PR52986: Add support for 7635
32 * Added directory element "7635".
33 *
34 * Hydra_Software_Devel/11   1/27/09 1:10p gmullen
35 * PR51625: Added 7336 support
36 *
37 * Hydra_Software_Devel/10   11/26/08 4:15p gmullen
38 * PR47755: Added support for 7420.
39 *
40 * Hydra_Software_Devel/9   3/26/08 11:24a gmullen
41 * PR38954: Added 3548 support to XPT PI.
42 *
43 * Hydra_Software_Devel/8   11/28/07 12:14p gmullen
44 * PR36900: Added 7335 support
45 *
46 * Hydra_Software_Devel/7   10/30/07 3:12p gmullen
47 * PR35018: Added support for 7325
48 *
49 * Hydra_Software_Devel/6   2/14/07 1:10p gmullen
50 * PR27642: Added support for 7405.
51 *
52 * Hydra_Software_Devel/5   2/6/07 7:05p gmullen
53 * PR26217: Added B0 support.
54 *
55 * Hydra_Software_Devel/4   11/21/06 3:59p gmullen
56 * PR26109: Ported files to 7403.
57 *
58 * Hydra_Software_Devel/3   8/17/06 6:01p katrep
59 * PR23114: Added Support for 7440 chip
60 *
61 * Hydra_Software_Devel/2   3/31/06 4:21p gmullen
62 * PR 18998: Finished implementation.
63 *
64 * Hydra_Software_Devel/1   7/28/05 3:40p gmullen
65 * PR15309: Initial version for building.
66 *
67 *
68 ***************************************************************************/
69
70#include "bstd.h"
71#include "bxpt_priv.h"
72#include "bxpt_spid.h"
73#include "bchp_xpt_fe.h"
74
75#include "bxpt.h"
76
77#if( BDBG_DEBUG_BUILD == 1 )
78BDBG_MODULE( xpt_spid );
79#endif
80
81BERR_Code BXPT_Spid_ConfigureChannel(
82        BXPT_Handle hXpt,                               /* [in] Handle for this transport */
83        unsigned int ChannelNum,        /* [in] Which secondary channel to configure. */
84    unsigned int Spid,                          /* [in] Secondary PID to use. */
85        BXPT_Spid_eChannelMode Mode     /* [in] Mode for secondary PIDs on this channel. */
86        )
87{
88        uint32_t Reg, RegAddr;
89
90        BERR_Code ExitCode = BERR_SUCCESS;
91
92        BDBG_ASSERT( hXpt );
93
94        /* Sanity check on the arguments. */
95        if( Spid >= 0x2000 )
96        {                                                                 
97                /* Bad PID. Complain. */
98                BDBG_ERR(( "Spid %lu is out of range!", ( unsigned long ) Spid ));
99                ExitCode = BERR_TRACE( BERR_INVALID_PARAMETER );
100        }
101        else if( ChannelNum >= hXpt->MaxPidChannels )
102        {
103                /* Bad PID channel number. Complain. */
104                BDBG_ERR(( "PidChannelNum %lu is out of range!", ( unsigned long ) ChannelNum ));
105                ExitCode = BERR_TRACE( BERR_INVALID_PARAMETER );
106        }
107        else                                                                     
108        {
109                RegAddr = BCHP_XPT_FE_SPID_TABLE_i_ARRAY_BASE + ( 4 * ChannelNum );
110                Reg = BREG_Read32( hXpt->hRegister, RegAddr );
111
112                Reg &= ~( 
113                        BCHP_MASK( XPT_FE_SPID_TABLE_i, SPID_MODE ) |
114            BCHP_MASK( XPT_FE_SPID_TABLE_i, PID_FUNCTIONS_SPID_CHANNEL_PID ) 
115                        );
116
117                Reg |= ( 
118                        BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, SPID_MODE, Mode ) |
119                        BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, PID_FUNCTIONS_SPID_CHANNEL_PID, Spid )
120                        );
121                BREG_Write32( hXpt->hRegister, RegAddr, Reg );
122        }
123
124        return( ExitCode );
125}
126
127
128BERR_Code BXPT_Spid_P_ConfigureChannelFilter(
129        BXPT_Handle hXpt,                               /* [in] Handle for this transport */
130        unsigned int ChannelNum,        /* [in] Which secondary channel to configure. */
131        BXPT_Spid_eChannelFilter Filter /* [in] Set a filter to use with this channel */
132        )
133{
134        uint32_t Reg, RegAddr,i;
135
136        BERR_Code ExitCode = BERR_SUCCESS;
137
138        BDBG_ASSERT( hXpt );
139
140        if( ChannelNum >= hXpt->MaxPidChannels )
141        {
142                /* Bad PID channel number. Complain. */
143                BDBG_ERR(( "PidChannelNum %lu is out of range!", ( unsigned long ) ChannelNum ));
144                ExitCode = BERR_TRACE( BERR_INVALID_PARAMETER );
145        }
146        else                                                                     
147        {
148                RegAddr = BCHP_XPT_FE_SPID_TABLE_i_ARRAY_BASE + ( 4 * ChannelNum );
149                Reg = BREG_Read32( hXpt->hRegister, RegAddr );
150
151        i = BCHP_GET_FIELD_DATA( Reg, XPT_FE_SPID_TABLE_i, SPID_MODE );
152
153        /* throw an error if SPID channel is being used for SPID functions */
154        if(i > BXPT_Spid_eChannelMode_Disable && i <= BXPT_Spid_eChannelMode_Remap)
155        {
156            BDBG_ERR(("PidChannelNum %lu already in use for SPID functions!",( unsigned long ) ChannelNum ));
157            ExitCode = BERR_TRACE( BERR_UNKNOWN );
158        }
159                Reg &= ~( 
160                        BCHP_MASK( XPT_FE_SPID_TABLE_i, SPID_MODE ) |
161                        BCHP_MASK( XPT_FE_SPID_TABLE_i, STREAM_ID_RANGE_STREAM_ID_HI ) |
162            BCHP_MASK( XPT_FE_SPID_TABLE_i, STREAM_ID_RANGE_STREAM_ID_LO )
163                        );
164
165                Reg |= BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, SPID_MODE, Filter.Mode );
166
167        switch(Filter.Mode)
168        {
169        case BXPT_Spid_eChannelFilterMode_StreamId:
170            Reg |= BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, STREAM_ID_FILTER_STREAM_ID, Filter.FilterConfig.StreamId );
171            break;
172        case BXPT_Spid_eChannelFilterMode_StreamIdRange:
173            Reg |= ( BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, STREAM_ID_RANGE_STREAM_ID_HI, Filter.FilterConfig.StreamIdRange.Hi ) |
174                     BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, STREAM_ID_RANGE_STREAM_ID_LO, Filter.FilterConfig.StreamIdRange.Lo )
175                     );
176            break;
177        case BXPT_Spid_eChannelFilterMode_StreamIdExtension:
178            Reg |= ( BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, STREAM_ID_EXTENSION_FILTER_STREAM_ID, Filter.FilterConfig.StreamIdAndExtension.Id ) |
179                     BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, STREAM_ID_EXTENSION_FILTER_STREAM_ID_EXTENSION, Filter.FilterConfig.StreamIdAndExtension.Extension )
180                     );
181            break;
182        case BXPT_Spid_eChannelFilterMode_SubStreamId:
183            Reg |= ( BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, SUBSTREAM_ID_FILTER_STREAM_ID, Filter.FilterConfig.StreamIdAndSubStreamId.Id ) |
184                     BCHP_FIELD_DATA( XPT_FE_SPID_TABLE_i, SUBSTREAM_ID_FILTER_SUBSTREAM_ID, Filter.FilterConfig.StreamIdAndSubStreamId.SubStreamId )
185                     );
186            break;
187        case BXPT_Spid_eChannelFilterMode_Disable:
188            break;
189        default:
190            BDBG_ERR(("Invalid filter mode %lu",Filter.Mode));
191            ExitCode = BERR_TRACE( BERR_INVALID_PARAMETER );
192        }
193        BREG_Write32( hXpt->hRegister, RegAddr, Reg );
194        }
195
196        return( ExitCode );
197}
198
199
200
201
202
Note: See TracBrowser for help on using the repository browser.