]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/net/npe/include/IxFeatureCtrl.h
Merge branch 'master' of git://www.denx.de/git/u-boot-cfi-flash
[karo-tx-uboot.git] / drivers / net / npe / include / IxFeatureCtrl.h
1 /**
2  * @file IxFeatureCtrl.h
3  *
4  * @date 30-Jan-2003
5
6  * @brief This file contains the public API of the IXP400 Feature Control
7  *        component.
8  *
9  * 
10  * @par
11  * IXP400 SW Release version 2.0
12  * 
13  * -- Copyright Notice --
14  * 
15  * @par
16  * Copyright 2001-2005, Intel Corporation.
17  * All rights reserved.
18  * 
19  * @par
20  * Redistribution and use in source and binary forms, with or without
21  * modification, are permitted provided that the following conditions
22  * are met:
23  * 1. Redistributions of source code must retain the above copyright
24  *    notice, this list of conditions and the following disclaimer.
25  * 2. Redistributions in binary form must reproduce the above copyright
26  *    notice, this list of conditions and the following disclaimer in the
27  *    documentation and/or other materials provided with the distribution.
28  * 3. Neither the name of the Intel Corporation nor the names of its contributors
29  *    may be used to endorse or promote products derived from this software
30  *    without specific prior written permission.
31  * 
32  * @par
33  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
34  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
35  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
36  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
37  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
38  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
39  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
40  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
41  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
42  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43  * SUCH DAMAGE.
44  * 
45  * @par
46  * -- End of Copyright Notice --
47 */
48 /* ------------------------------------------------------
49    Doxygen group definitions
50    ------------------------------------------------------ */
51 /**
52  * @defgroup IxFeatureCtrlAPI IXP400 Feature Control (IxFeatureCtrl) API
53  *
54  * @brief The Public API for the IXP400 Feature Control.
55  * 
56  * @{
57  */
58
59 #ifndef IXFEATURECTRL_H
60 #define IXFEATURECTRL_H
61
62 /*
63  * User defined include files
64  */
65 #include "IxOsal.h"
66
67 /*
68  * #defines and macros
69  */
70
71 /*************************************************************
72  * The following are IxFeatureCtrlComponentCheck return values.
73  ************************************************************/
74
75 /**
76  * @ingroup IxFeatureCtrlAPI 
77  *
78  * @def  IX_FEATURE_CTRL_COMPONENT_DISABLED
79  *
80  * @brief Hardware Component is disabled/unavailable.
81  *        Return status by ixFeatureCtrlComponentCheck()  
82  */
83 #define  IX_FEATURE_CTRL_COMPONENT_DISABLED 0
84
85 /**
86  * @ingroup IxFeatureCtrlAPI 
87  *
88  * @def  IX_FEATURE_CTRL_COMPONENT_ENABLED
89  *
90  * @brief Hardware Component is available. 
91  *        Return status by ixFeatureCtrlComponentCheck()  
92  */
93 #define  IX_FEATURE_CTRL_COMPONENT_ENABLED  1
94
95 /***********************************************************************************
96  * Product ID in XScale CP15 - Register 0
97  *  - It contains information on the maximum XScale Core Frequency and
98  *    Silicon Stepping.  
99  *  - XScale Core Frequency Id indicates only the maximum XScale frequency
100  *    achievable and not the running XScale frequency (maybe stepped down).    
101  *  - The register is read by using ixFeatureCtrlProductIdRead.
102  *  - Usage example: 
103  *          productId = ixFeatureCtrlProductIdRead();
104  *          if( (productId & IX_FEATURE_CTRL_SILICON_STEPPING_MASK) == 
105  *              IX_FEATURE_CTRL_SILICON_TYPE_A0 )
106  *          if( (productId & IX_FEATURE_CTRL_XSCALE_FREQ_MASK) == 
107  *              IX_FEATURE_CTRL_XSCALE_FREQ_533 )    
108  * 
109  *  31 28 27 24 23 20 19 16 15 12 11        9 8                   4 3              0  
110  *  -------------------------------------------------------------------------------- 
111  * | 0x6 | 0x9 | 0x0 | 0x5 | 0x4 | Device ID | XScale Core Freq Id | Si Stepping Id |    
112  *  --------------------------------------------------------------------------------
113  *
114  *   Maximum Achievable XScale Core Frequency Id :  533MHz  - 0x1C 
115  *                                                  400MHz  - 0x1D 
116  *                                                  266MHz  - 0x1F
117  *
118  *   <b>THE CORE FREQUENCY ID IS NOT APPLICABLE TO IXP46X <\b>
119  *  
120  *   The above is applicable to IXP42X only. CP15 in IXP46X does not contain any
121  *   Frequency ID. 
122  * 
123  *  Si Stepping Id            :  A       - 0x0    
124  *                               B       - 0x1 
125  *  
126  *  XScale Core freq Id - Device ID [11:9] : IXP42X - 0x0
127  *                                           IXP46X - 0x1
128  *************************************************************************************/
129
130 /**
131  * @ingroup IxFeatureCtrlAPI 
132  *
133  * @def IX_FEATURE_CTRL_SILICON_TYPE_A0
134  *
135  * @brief This is the value of A0 Silicon in product ID. 
136  */
137 #define IX_FEATURE_CTRL_SILICON_TYPE_A0   0
138
139 /**
140  * @ingroup IxFeatureCtrlAPI 
141  *
142  * @def IX_FEATURE_CTRL_SILICON_TYPE_B0
143  *
144  * @brief This is the value of B0 Silicon in product ID.
145  */
146 #define IX_FEATURE_CTRL_SILICON_TYPE_B0   1
147
148 /**
149  * @ingroup IxFeatureCtrlAPI 
150  *
151  * @def IX_FEATURE_CTRL_SILICON_STEPPING_MASK
152  *
153  * @brief This is the mask of silicon stepping in product ID. 
154  */
155 #define IX_FEATURE_CTRL_SILICON_STEPPING_MASK  0xF 
156
157 /**
158  * @ingroup IxFeatureCtrlAPI
159  *
160  * @def IX_FEATURE_CTRL_DEVICE_TYPE_MASK
161  *
162  * @brief This is the mask of silicon stepping in product ID.
163  */
164 #define IX_FEATURE_CTRL_DEVICE_TYPE_MASK  (0x7) 
165
166 /**
167  * @ingroup IxFeatureCtrlAPI
168  *
169  * @def IX_FEATURE_CTRL_DEVICE_TYPE_OFFSET
170  *
171  * @brief This is the mask of silicon stepping in product ID.
172  */
173 #define IX_FEATURE_CTRL_DEVICE_TYPE_OFFSET  9
174
175
176 /**
177  * @ingroup IxFeatureCtrlAPI 
178  *
179  * @def IX_FEATURE_CTRL_XSCALE_FREQ_533
180  *
181  * @brief This is the value of 533MHz XScale Core in product ID.
182  */
183 #define IX_FEATURE_CTRL_XSCALE_FREQ_533  ((0x1C)<<4)
184
185 /**
186  * @ingroup IxFeatureCtrlAPI 
187  *
188  * @def IX_FEATURE_CTRL_XSCALE_FREQ_400
189  *
190  * @brief This is the value of 400MHz XScale Core in product ID.
191  */
192 #define IX_FEATURE_CTRL_XSCALE_FREQ_400  ((0x1D)<<4)
193
194 /**
195  * @ingroup IxFeatureCtrlAPI 
196  *
197  * @def IX_FEATURE_CTRL_XSCALE_FREQ_266
198  *
199  * @brief This is the value of 266MHz XScale Core in product ID.
200  */
201 #define IX_FEATURE_CTRL_XSCALE_FREQ_266 ((0x1F)<<4)   
202
203 /**
204  * @ingroup IxFeatureCtrlAPI 
205  *
206  * @def IX_FEATURE_CTRL_XSCALE_FREQ_MASK
207  *
208  * @brief This is the mask of XScale Core in product ID.
209  */
210 #define IX_FEATURE_CTRL_XSCALE_FREQ_MASK ((0xFF)<<4)  
211
212 /**
213  * @ingroup IxFeatureCtrlAPI 
214  *
215  * @def IX_FEATURECTRL_REG_UTOPIA_32PHY
216  *
217  * @brief Maximum  UTOPIA PHY available is 32.  
218  * 
219  */
220 #define IX_FEATURECTRL_REG_UTOPIA_32PHY  0x0
221
222 /**
223  * @ingroup IxFeatureCtrlAPI 
224  *
225  * @def IX_FEATURECTRL_REG_UTOPIA_16PHY
226  *
227  * @brief Maximum  UTOPIA PHY available is 16.  
228  * 
229  */
230 #define IX_FEATURECTRL_REG_UTOPIA_16PHY  0x1
231
232 /**
233  * @ingroup IxFeatureCtrlAPI 
234  *
235  * @def IX_FEATURECTRL_REG_UTOPIA_8PHY
236  *
237  * @brief Maximum  UTOPIA PHY available to is 8.  
238  * 
239  */
240 #define IX_FEATURECTRL_REG_UTOPIA_8PHY   0x2
241
242 /**
243  * @ingroup IxFeatureCtrlAPI 
244  *
245  * @def IX_FEATURECTRL_REG_UTOPIA_4PHY
246  *
247  * @brief Maximum  UTOPIA PHY available to is 4.  
248  * 
249  */
250 #define IX_FEATURECTRL_REG_UTOPIA_4PHY   0x3
251
252 #ifdef __ixp46X
253
254 /**
255  * @ingroup IxFeatureCtrlAPI
256  *
257  * @def IX_FEATURECTRL_REG_XSCALE_533FREQ
258  *
259  * @brief Maximum  frequency available to IXP46x is 533 MHz.
260  *
261  */
262 #define IX_FEATURECTRL_REG_XSCALE_533FREQ   0x0
263
264 /**
265  * @ingroup IxFeatureCtrlAPI
266  *
267  * @def IX_FEATURECTRL_REG_XSCALE_667FREQ
268  *
269  * @brief Maximum  frequency available to IXP46x is 667 MHz.
270  *
271  */
272 #define IX_FEATURECTRL_REG_XSCALE_667FREQ   0x1
273
274 /**
275  * @ingroup IxFeatureCtrlAPI
276  *
277  * @def IX_FEATURECTRL_REG_XSCALE_400FREQ
278  *
279  * @brief Maximum  frequency available to IXP46x is 400 MHz.
280  *
281  */
282 #define IX_FEATURECTRL_REG_XSCALE_400FREQ   0x2
283
284 /**
285  * @ingroup IxFeatureCtrlAPI
286  *
287  * @def IX_FEATURECTRL_REG_XSCALE_266FREQ
288  *
289  * @brief Maximum  frequency available to IXP46x is 266 MHz.
290  *
291  */
292 #define IX_FEATURECTRL_REG_XSCALE_266FREQ   0x3
293
294 #endif /* __ixp46X */
295
296 /**
297  * @ingroup IxFeatureCtrlAPI
298  *
299  * @def IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE
300  *
301  * @brief Component selected is not available for device
302  *
303  */
304 #define IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE  0x0000
305
306 /**
307  * @ingroup IxFeatureCtrlAPI
308  *
309  * @def IX_FEATURECTRL_COMPONENT_ALWAYS_AVAILABLE
310  *
311  * @brief Component selected is not available for device
312  *
313  */
314 #define IX_FEATURECTRL_COMPONENT_ALWAYS_AVAILABLE  0xffff
315
316 /**
317  * @defgroup IxFeatureCtrlSwConfig Software Configuration for Access Component
318  *
319  * @ingroup IxFeatureCtrlAPI 
320  *
321  * @brief This section describes software configuration in access component. The
322  *        configuration can be changed at run-time. ixFeatureCtrlSwConfigurationCheck( )
323  *        will be used across applicable access component to check the configuration.
324  *        ixFeatureCtrlSwConfigurationWrite( ) is used to write the software configuration.
325  *
326  * @note <b>All software configurations are default to be enabled.</b> 
327  *
328  * @{
329  */
330 /**
331  * @ingroup IxFeatureCtrlSwConfig
332  *
333  * @def IX_FEATURE_CTRL_SWCONFIG_DISABLED
334  *
335  * @brief Software configuration is disabled. 
336  * 
337  */
338 #define IX_FEATURE_CTRL_SWCONFIG_DISABLED 0  
339
340 /**
341  * @ingroup IxFeatureCtrlSwConfig
342  *
343  * @def IX_FEATURE_CTRL_SWCONFIG_ENABLED
344  *
345  * @brief Software configuration is enabled. 
346  * 
347  */
348 #define IX_FEATURE_CTRL_SWCONFIG_ENABLED 1  
349
350 /**
351  * Section for enums
352  **/
353
354 /**
355  * @ingroup IxFeatureCtrlBuildDevice
356  *
357  * @enum IxFeatureCtrlBuildDevice
358  *
359  * @brief Indicates software build type.
360  *
361  * Default build type is IXP42X
362  *
363  */
364 typedef enum
365 {
366     IX_FEATURE_CTRL_SW_BUILD_IXP42X = 0, /**<Build type is IXP42X */
367     IX_FEATURE_CTRL_SW_BUILD_IXP46X      /**<Build type is IXP46X */
368 } IxFeatureCtrlBuildDevice;
369
370 /**
371  * @ingroup IxFeatureCtrlSwConfig
372  *
373  * @enum IxFeatureCtrlSwConfig
374  *
375  * @brief Enumeration for software configuration in access components.
376  *
377  * Entry for new run-time software configuration should be added here.
378  */
379 typedef enum
380 {
381     IX_FEATURECTRL_ETH_LEARNING = 0,       /**< EthDB Learning Feature */
382     IX_FEATURECTRL_ORIGB0_DISPATCHER,  /**< IXP42X B0 and IXP46X dispatcher without 
383                                             livelock prevention functionality Feature */
384     IX_FEATURECTRL_SWCONFIG_MAX        /**< Maximum boudary for IxFeatureCtrlSwConfig  */
385 } IxFeatureCtrlSwConfig;
386
387
388 /************************************************************************
389  * IXP400 Feature Control Register
390  * - It contains the information (available/unavailable) of IXP425&IXP46X
391  *   hardware components in their corresponding bit location.
392  * - Bit value of 0 means the hardware component is available
393  *   or not software disabled. Hardware component that is available
394  *   can be software disabled.
395  * - Bit value of 1 means the hardware is unavailable or software
396  *   disabled.Hardware component that is unavailable cannot be software
397  *   enabled.
398  * - Use ixFeatureCtrlHwCapabilityRead() to read the hardware component's
399  *   availability.
400  * - Use ixFeatureCtrlRead() to get the current IXP425/IXP46X feature control
401  *   register value.
402  *
403  *   Bit            Field Description (Hardware Component Availability)
404  *   ---            ---------------------------------------------------
405  *    0             RComp Circuitry
406  *    1             USB Controller
407  *    2             Hashing Coprocessor
408  *    3             AES Coprocessor
409  *    4             DES Coprocessor
410  *    5             HDLC Coprocessor
411  *    6             AAL Coprocessor         - Always available in IXP46X
412  *    7             HSS Coprocesspr
413  *    8             Utopia Coprocessor
414  *    9             Ethernet 0 Coprocessor
415  *   10             Ethernet 1 Coprocessor
416  *   11             NPE A
417  *   12             NPE B
418  *   13             NPE C
419  *   14             PCI Controller
420  *   15             ECC/TimeSync Coprocessor -  Only applicable to IXP46X
421  *  16-17           Utopia PHY Limit Status : 0x0 - 32 PHY
422  *                                            0x1 - 16 PHY
423  *                                            0x2 -  8 PHY
424  *                                            0x3 -  4 PHY
425  *
426  *  Portions below are only applicable to IXP46X
427  *   18             USB Host Coprocessor
428  *   19             NPE A Ethernet - 0 for Enable if Utopia = 1
429  *   20             NPE B Ethernet coprocessor 1-3.
430  *   21             RSA Crypto Block coprocessor.
431  *  22-23           Processor frequency : 0x0 - 533 MHz
432  *                                        0x1 - 667 MHz
433  *                                        0x2 - 400 MHz
434  *                                        0x3 - 266 MHz
435  *  24-31           Reserved
436  *
437  ************************************************************************/
438 /*Section generic to both IXP42X and IXP46X*/
439
440 /**
441  * @ingroup IxFeatureCtrlAPI
442  *
443  * @enum IxFeatureCtrlComponentType
444  *
445  * @brief Enumeration for components availavble
446  *
447  */
448 typedef enum
449 {
450     IX_FEATURECTRL_RCOMP = 0, /**<bit location for RComp Circuitry*/
451     IX_FEATURECTRL_USB,       /**<bit location for USB Controller*/
452     IX_FEATURECTRL_HASH,      /**<bit location for Hashing Coprocessor*/
453     IX_FEATURECTRL_AES,       /**<bit location for AES Coprocessor*/
454     IX_FEATURECTRL_DES,       /**<bit location for DES Coprocessor*/
455     IX_FEATURECTRL_HDLC,      /**<bit location for HDLC Coprocessor*/
456     IX_FEATURECTRL_AAL,       /**<bit location for AAL Coprocessor*/
457     IX_FEATURECTRL_HSS,       /**<bit location for HSS Coprocessor*/
458     IX_FEATURECTRL_UTOPIA,    /**<bit location for UTOPIA Coprocessor*/
459     IX_FEATURECTRL_ETH0,      /**<bit location for Ethernet 0 Coprocessor*/
460     IX_FEATURECTRL_ETH1,      /**<bit location for Ethernet 1 Coprocessor*/
461     IX_FEATURECTRL_NPEA,      /**<bit location for NPE A*/
462     IX_FEATURECTRL_NPEB,      /**<bit location for NPE B*/
463     IX_FEATURECTRL_NPEC,      /**<bit location for NPE C*/
464     IX_FEATURECTRL_PCI,       /**<bit location for PCI Controller*/
465     IX_FEATURECTRL_ECC_TIMESYNC,     /**<bit location for TimeSync Coprocessor*/
466     IX_FEATURECTRL_UTOPIA_PHY_LIMIT, /**<bit location for Utopia PHY Limit Status*/
467     IX_FEATURECTRL_UTOPIA_PHY_LIMIT_BIT2, /**<2nd bit of PHY limit status*/
468     IX_FEATURECTRL_USB_HOST_CONTROLLER, /**<bit location for USB host controller*/
469     IX_FEATURECTRL_NPEA_ETH,  /**<bit location for NPE-A Ethernet Disable*/
470     IX_FEATURECTRL_NPEB_ETH,  /**<bit location for NPE-B Ethernet 1-3 Coprocessors Disable*/
471     IX_FEATURECTRL_RSA,       /**<bit location for RSA Crypto block Coprocessors Disable*/
472     IX_FEATURECTRL_XSCALE_MAX_FREQ, /**<bit location for XScale max frequency*/
473     IX_FEATURECTRL_XSCALE_MAX_FREQ_BIT2, /**<2nd xscale max freq bit NOT TO BE USED */
474     IX_FEATURECTRL_MAX_COMPONENTS
475 } IxFeatureCtrlComponentType;
476
477 /**
478  * @ingroup IxFeatureCtrlDeviceId
479  *
480  * @enum IxFeatureCtrlDeviceId
481  *
482  * @brief Enumeration for device type.
483  *
484  * @warning This enum is closely related to the npe image. Its format should comply
485  *          with formats used in the npe image ImageID. This is indicated by the  
486  *          first nibble of the image ID. This should also be in sync with the
487  *          with what is defined in CP15.  Current available formats are
488  *          - IXP42X - 0000
489  *          - IXP46X - 0001
490  *
491  */
492 typedef enum
493 {
494     IX_FEATURE_CTRL_DEVICE_TYPE_IXP42X = 0, /**<Device type is IXP42X */
495     IX_FEATURE_CTRL_DEVICE_TYPE_IXP46X, /**<Device type is IXP46X */
496     IX_FEATURE_CTRL_DEVICE_TYPE_MAX /**<Max devices */
497 } IxFeatureCtrlDeviceId;
498
499
500 /**
501  * @} addtogroup IxFeatureCtrlSwConfig
502  */
503
504 /*
505  * Typedefs
506  */
507
508 /**
509  * @ingroup IxFeatureCtrlAPI 
510  * 
511  * @typedef IxFeatureCtrlReg
512  *
513  * @brief Feature Control Register that contains hardware components'
514  *        availability information.
515  */
516 typedef UINT32 IxFeatureCtrlReg;
517
518 /**
519  * @ingroup IxFeatureCtrlAPI 
520  * 
521  * @typedef IxFeatureCtrlProductId
522  *
523  * @brief Product ID of Silicon that contains Silicon Stepping and 
524  *        Maximum XScale Core Frequency information.  
525  */
526 typedef UINT32 IxFeatureCtrlProductId;
527
528 /*
529  * Prototypes for interface functions
530  */
531
532 /**
533  * @ingroup IxFeatureCtrlAPI 
534  *
535  * @fn IxFeatureCtrlReg ixFeatureCtrlRead (void)
536  * 
537  * @brief This function reads out the CURRENT value of Feature Control Register.
538  *        The current value may not be the same as that of the hardware component 
539  *        availability.    
540  * 
541  * The bit location of each hardware component is defined above. 
542  * A value of '1' in bit means the hardware component is not available.  A value of '0'   
543  * means the hardware component is available.
544  *
545  * @return 
546  *      - IxFeatureCtrlReg - the current value of IXP400 Feature Control Register
547  */ 
548 PUBLIC IxFeatureCtrlReg
549 ixFeatureCtrlRead (void);
550
551 /**
552  * @ingroup IxFeatureCtrlAPI
553  *
554  * @fn IxFeatureDeviceId ixFeatureCtrlDeviceRead (void)
555  *
556  * @brief This function gets the type of device that the software is currently running
557  *        on
558  *
559  * This function reads the feature Ctrl register specifically to obtain the device id.
560  * The definitions of the avilable IDs are as above.
561  *
562  * @return
563  *      - IxFeatureCtrlDeviceId - the type of device currently running
564  */
565 IxFeatureCtrlDeviceId
566 ixFeatureCtrlDeviceRead (void);
567
568 /**
569  * @ingroup IxFeatureCtrlAPI
570  *
571  * @fn IxFeatureCtrlBuildDevice ixFeatureCtrlSoftwareBuildGet (void)
572  *
573  * @brief This function refers to  the value set by the compiler flag to determine
574  *        the type of device the software is built for.
575  *
576  * The function reads the compiler flag to determine the device the software is
577  * built for. When the user executes build in the command line, 
578  * a compile time flag (__ixp42X/__ixp46X is set. This API reads this 
579  * flag and returns the software build type to the calling client.
580  *
581  * @return
582  *      - IxFeatureCtrlBuildDevice - the type of device software is built for.
583  */
584 IxFeatureCtrlBuildDevice
585 ixFeatureCtrlSoftwareBuildGet (void);
586
587 /**
588  * @ingroup IxFeatureCtrlAPI 
589  *
590  * @fn IxFeatureCtrlReg ixFeatureCtrlHwCapabilityRead (void)
591  * 
592  * @brief This function reads out the hardware capability of a silicon type as defined in 
593  * feature control register.This value is different from that returned by 
594  * ixFeatureCtrlRead() because this function returns the actual hardware component
595  * availability.     
596  *
597  * The bit location of each hardware component is defined above. 
598  * A value of '1' in bit means the hardware component is not available.  A value of '0'   
599  * means the hardware component is available.
600  *
601  * @return 
602  *      - IxFeatureCtrlReg - the hardware capability of IXP400. 
603  *
604  * @warning
605  *      - This function must not be called when IXP400 is running as the result
606  *        is undefined.    
607  */ 
608 PUBLIC IxFeatureCtrlReg
609 ixFeatureCtrlHwCapabilityRead (void);
610
611 /**
612  * @ingroup IxFeatureCtrlAPI 
613  *
614  * @fn void ixFeatureCtrlWrite (IxFeatureCtrlReg expUnitReg)
615  * 
616  * @brief This function write the value stored in IxFeatureCtrlReg expUnitReg  
617  *        to the Feature Control Register. 
618  * 
619  * The bit location of each hardware component is defined above.
620  * The write is only effective on available hardware components. Writing '1' in a  
621  * bit will software disable the respective hardware component. A '0' will mean that  
622  * the hardware component will remain to be operable. 
623  *
624  * @param expUnitReg @ref IxFeatureCtrlReg [in] - The value to be written to feature control 
625  *                                          register.
626  *
627  * @return none
628  *
629  */ 
630 PUBLIC void
631 ixFeatureCtrlWrite (IxFeatureCtrlReg expUnitReg);
632
633 /**
634  * @ingroup IxFeatureCtrlAPI 
635  *
636  * @fn IX_STATUS ixFeatureCtrlComponentCheck (IxFeatureCtrlComponentType componentType)
637  * 
638  * @brief This function will check the availability of hardware component specified
639  *        as componentType value. 
640  *
641  *        Usage Example:<br> 
642  *         -  if(IX_FEATURE_CTRL_COMPONENT_DISABLED != 
643  *              ixFeatureCtrlComponentCheck(IX_FEATURECTRL_ETH0)) <br>
644  *         -  if(IX_FEATURE_CTRL_COMPONENT_ENABLED == 
645  *              ixFeatureCtrlComponentCheck(IX_FEATURECTRL_PCI)) <br>
646  *
647  * This function is typically called during component initialization time. 
648  *
649  * @param componentType @ref IxFeatureCtrlComponentType [in] - the type of a component as
650  *        defined above as IX_FEATURECTRL_XXX (Exp: IX_FEATURECTRL_PCI, IX_FEATURECTRL_ETH0)           
651
652  *        
653  * @return 
654  *      - IX_FEATURE_CTRL_COMPONENT_ENABLED if component is available 
655  *      - IX_FEATURE_CTRL_COMPONENT_DISABLED if component is unavailable            
656  */ 
657 PUBLIC IX_STATUS
658 ixFeatureCtrlComponentCheck (IxFeatureCtrlComponentType componentType);
659
660 /**
661  * @ingroup IxFeatureCtrlAPI 
662  * 
663  * @fn IxFeatureCtrlProductId ixFeatureCtrlProductIdRead (void)
664  * 
665  * @brief This function will return IXP400 product ID i.e. CP15,
666  *        Register 0.
667  *                                                
668  * @return 
669  *      - IxFeatureCtrlProductId - the value of product ID.
670  *
671  */ 
672 PUBLIC IxFeatureCtrlProductId
673 ixFeatureCtrlProductIdRead (void) ;
674
675 /**
676  * @ingroup IxFeatureCtrlAPI 
677  *
678  * @fn IX_STATUS ixFeatureCtrlSwConfigurationCheck (IxFeatureCtrlSwConfig swConfigType)
679  * 
680  * @brief This function checks whether the specified software configuration is
681  *        enabled or disabled. 
682  *
683  *        Usage Example:<br> 
684  *        - if(IX_FEATURE_CTRL_SWCONFIG_DISABLED != 
685  *            ixFeatureCtrlSwConfigurationCheck(IX_FEATURECTRL_ETH_LEARNING)) <br>
686  *        - if(IX_FEATURE_CTRL_SWCONFIG_ENABLED == 
687  *            ixFeatureCtrlSwConfigurationCheck(IX_FEATURECTRL_ETH_LEARNING)) <br>
688  *
689  * This function is typically called during access component initialization time. 
690  *
691  * @param swConfigType @ref IxFeatureCtrlSwConfig [in] - the type of a software configuration
692  *        defined in IxFeatureCtrlSwConfig enumeration.          
693  *        
694  * @return 
695  *      - IX_FEATURE_CTRL_SWCONFIG_ENABLED if software configuration is enabled. 
696  *      - IX_FEATURE_CTRL_SWCONFIG_DISABLED if software configuration is disabled.            
697  */ 
698 PUBLIC IX_STATUS
699 ixFeatureCtrlSwConfigurationCheck (IxFeatureCtrlSwConfig swConfigType);
700
701 /**
702  * @ingroup IxFeatureCtrlAPI 
703  *
704  * @fn void ixFeatureCtrlSwConfigurationWrite (IxFeatureCtrlSwConfig swConfigType, BOOL enabled)
705  * 
706  * @brief This function enable/disable the specified software configuration.  
707  *
708  *        Usage Example:<br> 
709  *        - ixFeatureCtrlSwConfigurationWrite(IX_FEATURECTRL_ETH_LEARNING, true) is used
710  *          to enable Ethernet Learning Feature <br>
711  *        - ixFeatureCtrlSwConfigurationWrite(IX_FEATURECTRL_ETH_LEARNING, false) is used
712  *          to disable Ethernet Learning Feature <br> 
713  *
714  * @param swConfigType IxFeatureCtrlSwConfig [in] - the type of a software configuration
715  *        defined in IxFeatureCtrlSwConfig enumeration. 
716  * @param enabled BOOL [in] - To enable(true) / disable (false) the specified software
717  *                           configuration.            
718  *
719  * @return none
720  *          
721  */ 
722 PUBLIC void
723 ixFeatureCtrlSwConfigurationWrite (IxFeatureCtrlSwConfig swConfigType, BOOL enabled);
724
725 /**
726  * @ingroup IxFeatureCtrlAPI 
727  *
728  * @fn void ixFeatureCtrlIxp400SwVersionShow (void)
729  * 
730  * @brief This function shows the current software release information for IXP400 
731  *          
732  * @return none
733  *          
734  */ 
735 PUBLIC void
736 ixFeatureCtrlIxp400SwVersionShow (void);
737
738 #endif /* IXFEATURECTRL_H */
739
740 /**
741  * @} defgroup IxFeatureCtrlAPI
742  */