tizen 2.4 release
[kernel/u-boot-tm1.git] / arch / arm / cpu / ixp / npe / include / IxParityENAcc.h
1 /**
2  * @file IxParityENAcc.h
3  *
4  * @author Intel Corporation
5  * @date 24 Mar 2004
6  *
7  * @brief This file contains the public API for the IXP400 Parity Error 
8  * Notifier access component.
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 /**
50  * @defgroup IxParityENAcc IXP400 Parity Error Notifier (IxParityENAcc) API
51  *
52  * @brief The public API for the Parity Error Notifier 
53  * 
54  * @{
55  */
56
57 #ifndef IXPARITYENACC_H
58 #define IXPARITYENACC_H
59
60 #ifdef __ixp46X
61
62 #include "IxOsal.h"
63
64 /*
65  * #defines for function return types, etc.
66  */
67
68 /**
69  * @ingroup IxParityENAcc
70  *
71  * @enum IxParityENAccStatus
72  *
73  * @brief The status as returend from the API
74  */
75 typedef enum /**< IxParityENAccStatus */
76 {
77   IX_PARITYENACC_SUCCESS = IX_SUCCESS, /**< The request is successful */
78   IX_PARITYENACC_INVALID_PARAMETERS,   /**< Invalid or NULL parameters passed */
79   IX_PARITYENACC_NOT_INITIALISED,      /**< Access layer has not been initialised before accessing the APIs */
80   IX_PARITYENACC_ALREADY_INITIALISED,  /**< Access layer has already been initialised */ 
81   IX_PARITYENACC_OPERATION_FAILED,     /**< Operation did not succeed due to hardware failure */
82   IX_PARITYENACC_NO_PARITY             /**< No parity condition exits or has already been cleared */
83 } IxParityENAccStatus;
84
85 /**
86  * @ingroup IxParityENAcc
87  *
88  * @enum IxParityENAccParityType
89  * 
90  * @brief Odd or Even Parity Type
91  */
92 typedef enum  /**< IxParityENAccParityType */
93 {
94   IX_PARITYENACC_EVEN_PARITY,    /**< Even Parity */
95   IX_PARITYENACC_ODD_PARITY      /**< Odd Parity */
96 } IxParityENAccParityType;
97
98 /**
99  * @ingroup IxParityENAcc
100  *
101  * @enum IxParityENAccConfigOption
102  *
103  * @brief The parity error enable/disable configuration option
104  */
105 typedef enum /**< IxParityENAccConfigOption */
106 {
107   IX_PARITYENACC_DISABLE,       /**< Disable parity error detection */
108   IX_PARITYENACC_ENABLE         /**< Enable parity error detection */
109 } IxParityENAccConfigOption;
110
111 /**
112  * @ingroup IxParityENAcc
113  *
114  * @struct IxParityENAccNpeConfig
115  *
116  * @brief NPE parity detection is to be enabled/disabled
117  */
118 typedef struct /**< IxParityENAccNpeConfig */
119 {
120   IxParityENAccConfigOption ideEnabled; /**< NPE IMem, DMem and External */
121   IxParityENAccParityType parityOddEven; /**< Parity - Odd or Even */
122 } IxParityENAccNpeConfig ;
123
124
125 /**
126  * @ingroup IxParityENAcc
127  *
128  * @struct IxParityENAccMcuConfig
129  *
130  * @brief MCU pairty detection is to be enabled/disabled
131  */
132 typedef struct /**< IxParityENAccMcuConfig */ 
133 {
134   IxParityENAccConfigOption singlebitDetectEnabled;      /**< Single-bit parity error detection */
135   IxParityENAccConfigOption singlebitCorrectionEnabled;  /**< Single-bit parity error correction */
136   IxParityENAccConfigOption multibitDetectionEnabled;    /**< Multi-bit  parity error detection */
137 } IxParityENAccMcuConfig ;
138
139
140 /**
141  * @ingroup IxParityENAcc
142  *
143  * @struct IxParityENAccEbcConfig
144  *
145  * @brief Expansion Bus Controller parity detection is to be enabled or disabled 
146  *
147  * Note: All the Chip Select(s) and External Masters will have the same parity
148  */
149 typedef struct /**< IxParityENAccEbcConfig */
150 {
151   IxParityENAccConfigOption ebcCs0Enabled;    /**< Expansion Bus Controller - Chip Select 0 */
152   IxParityENAccConfigOption ebcCs1Enabled;    /**< Expansion Bus Controller - Chip Select 1 */
153   IxParityENAccConfigOption ebcCs2Enabled;    /**< Expansion Bus Controller - Chip Select 2 */
154   IxParityENAccConfigOption ebcCs3Enabled;    /**< Expansion Bus Controller - Chip Select 3 */
155   IxParityENAccConfigOption ebcCs4Enabled;    /**< Expansion Bus Controller - Chip Select 4 */
156   IxParityENAccConfigOption ebcCs5Enabled;    /**< Expansion Bus Controller - Chip Select 5 */
157   IxParityENAccConfigOption ebcCs6Enabled;    /**< Expansion Bus Controller - Chip Select 6 */
158   IxParityENAccConfigOption ebcCs7Enabled;    /**< Expansion Bus Controller - Chip Select 7 */
159   IxParityENAccConfigOption ebcExtMstEnabled; /**< External Master on Expansion bus */
160   IxParityENAccParityType parityOddEven;      /**< Parity - Odd or Even */
161 } IxParityENAccEbcConfig ;
162
163 /**
164  * @ingroup IxParityENAcc
165  *
166  * @struct IxParityENAccHWParityConfig
167  *
168  * @brief Parity error configuration of the Hardware Blocks
169  */
170 typedef struct /**< IxParityENAccHWParityConfig */
171
172   IxParityENAccNpeConfig npeAConfig;     /**< NPE A parity detection is to be enabled/disabled */
173   IxParityENAccNpeConfig npeBConfig;     /**< NPE B parity detection is to be enabled/disabled */
174   IxParityENAccNpeConfig npeCConfig;     /**< NPE C parity detection is to be enabled/disabled */
175   IxParityENAccMcuConfig mcuConfig;      /**< MCU pairty detection is to be enabled/disabled */
176   IxParityENAccConfigOption swcpEnabled; /**< SWCP parity detection is to be enabled */
177   IxParityENAccConfigOption aqmEnabled;  /**< AQM parity detection is to be enabled */
178   IxParityENAccEbcConfig ebcConfig;      /**< Expansion Bus Controller parity detection is to be enabled/disabled */
179 } IxParityENAccHWParityConfig;
180
181
182 /**
183  * @ingroup IxParityENAcc
184  *
185  * @struct IxParityENAccNpeParityErrorStats
186  *
187  * @brief NPE parity error statistics
188  */
189 typedef struct  /* IxParityENAccNpeParityErrorStats */
190 {
191   UINT32 parityErrorsIMem;         /**< Parity errors in Instruction Memory */
192   UINT32 parityErrorsDMem;         /**< Parity errors in Data Memory */
193   UINT32 parityErrorsExternal;     /**< Parity errors in NPE External Entities */
194 } IxParityENAccNpeParityErrorStats;
195
196 /**
197  * @ingroup IxParityENAcc
198  *
199  * @struct IxParityENAccMcuParityErrorStats
200  *
201  * @brief DDR Memory Control Unit parity error statistics
202  * 
203  * Note: There could be two outstanding parity errors at any given time whose address
204  * details captured. If there is no room for the new interrupt then it would be treated
205  * as overflow parity condition.
206  */
207 typedef struct  /* IxParityENAccMcuParityErrorStats */
208 {
209   UINT32 parityErrorsSingleBit;    /**< Parity errors of the type Single-Bit */
210   UINT32 parityErrorsMultiBit;     /**< Parity errors of the type Multi-Bit */
211   UINT32 parityErrorsOverflow;     /**< Parity errors when more than two parity errors occured */
212 } IxParityENAccMcuParityErrorStats;
213
214 /**
215  * @ingroup IxParityENAcc
216  *
217  * @struct IxParityENAccEbcParityErrorStats
218  *
219  * @brief Expansion Bus Controller parity error statistics
220  */
221 typedef struct  /* IxParityENAccEbcParityErrorStats */
222 {
223   UINT32 parityErrorsInbound;      /**< Odd bit parity errors on inbound transfers */
224   UINT32 parityErrorsOutbound;     /**< Odd bit parity errors on outbound transfers */
225 } IxParityENAccEbcParityErrorStats;
226
227
228 /**
229  * @ingroup IxParityENAcc
230  *
231  * @struct IxParityENAccParityErrorStats
232  *
233  * @brief Parity Error Statistics for the all the hardware blocks
234  */
235 typedef struct  /**< IxParityENAccParityErrorStats */
236 {
237   IxParityENAccNpeParityErrorStats  npeStats;  /**< NPE parity error statistics */
238   IxParityENAccMcuParityErrorStats  mcuStats;  /**< MCU parity error statistics */
239   IxParityENAccEbcParityErrorStats  ebcStats;  /**< EBC parity error statistics */
240   UINT32                            swcpStats; /**< SWCP parity error statistics */
241   UINT32                            aqmStats;  /**< AQM parity error statistics */
242 } IxParityENAccParityErrorStats;
243
244
245 /**
246  * @ingroup IxParityENAcc
247  *
248  * @enum IxParityENAccParityErrorSource
249  *
250  * @brief The source of the parity error notification 
251  */
252 typedef enum  /**< IxParityENAccParityErrorSource  */
253 {
254   IX_PARITYENACC_NPE_A_IMEM,     /**< NPE A - Instruction memory */
255   IX_PARITYENACC_NPE_A_DMEM,     /**< NPE A - Data memory */
256   IX_PARITYENACC_NPE_A_EXT,      /**< NPE A - External Entity*/
257   IX_PARITYENACC_NPE_B_IMEM,     /**< NPE B - Instruction memory */
258   IX_PARITYENACC_NPE_B_DMEM,     /**< NPE B - Data memory */
259   IX_PARITYENACC_NPE_B_EXT,      /**< NPE B - External Entity*/
260   IX_PARITYENACC_NPE_C_IMEM,     /**< NPE C - Instruction memory */
261   IX_PARITYENACC_NPE_C_DMEM,     /**< NPE C - Data memory */
262   IX_PARITYENACC_NPE_C_EXT,      /**< NPE C - External Entity*/
263   IX_PARITYENACC_SWCP,           /**< SWCP */
264   IX_PARITYENACC_AQM,            /**< AQM */
265   IX_PARITYENACC_MCU_SBIT,       /**< DDR Memory Controller Unit - Single bit parity */
266   IX_PARITYENACC_MCU_MBIT,       /**< DDR Memory Controller Unit - Multi bit parity */
267   IX_PARITYENACC_MCU_OVERFLOW,   /**< DDR Memory Controller Unit - Parity errors in excess of two */
268   IX_PARITYENACC_EBC_CS,         /**< Expansion Bus Controller - Chip Select */
269   IX_PARITYENACC_EBC_EXTMST      /**< Expansion Bus Controller - External Master */
270 } IxParityENAccParityErrorSource;
271
272 /**
273  * @ingroup IxParityENAcc
274  *
275  * @enum IxParityENAccParityErrorAccess
276  *
277  * @brief The type of access resulting in parity error
278  */
279 typedef enum  /**< IxParityENAccParityErrorAccess  */
280 {
281   IX_PARITYENACC_READ,   /**< Read Access  */
282   IX_PARITYENACC_WRITE   /**< Write Access */
283 } IxParityENAccParityErrorAccess;
284
285 /**
286  * @ingroup IxParityENAcc
287  *
288  * @typedef IxParityENAccParityErrorAddress
289  *
290  * @brief The memory location which has parity error
291  */
292 typedef UINT32 IxParityENAccParityErrorAddress;
293
294 /**
295  * @ingroup IxParityENAcc
296  *
297  * @typedef IxParityENAccParityErrorData
298  *
299  * @brief The data read from the memory location which has parity error
300  */
301 typedef UINT32 IxParityENAccParityErrorData;
302
303 /**
304  * @ingroup IxParityENAcc
305  *
306  * @enum IxParityENAccParityErrorRequester
307  *
308  * @brief The requester interface through which the SDRAM memory access 
309  * resulted in the parity error.
310  */
311 typedef enum  /**< IxParityENAccParityErrorRequester  */
312 {
313   IX_PARITYENACC_MPI,     /**< Direct Memory Port Interface  */
314   IX_PARITYENACC_AHB_BUS  /**< South or North AHB Bus */
315 } IxParityENAccParityErrorRequester;
316
317 /**
318  * @ingroup IxParityENAcc
319  *
320  * @enum IxParityENAccAHBErrorMaster
321  *
322  * @brief The Master on the AHB bus interface whose transaction might have 
323  * resulted in the parity error notification to XScale.
324  */
325 typedef enum  /**< IxParityENAccAHBErrorMaster */
326 {
327   IX_PARITYENACC_AHBN_MST_NPE_A,       /**< NPE - A */
328   IX_PARITYENACC_AHBN_MST_NPE_B,       /**< NPE - B */
329   IX_PARITYENACC_AHBN_MST_NPE_C,       /**< NPE - C */
330   IX_PARITYENACC_AHBS_MST_XSCALE,      /**< XScale Bus Interface Unit */
331   IX_PARITYENACC_AHBS_MST_PBC,         /**< PCI Bus Controller */
332   IX_PARITYENACC_AHBS_MST_EBC,         /**< Expansion Bus Controller */
333   IX_PARITYENACC_AHBS_MST_AHB_BRIDGE,  /**< AHB Bridge */
334   IX_PARITYENACC_AHBS_MST_USBH         /**< USB Host Controller */
335 } IxParityENAccAHBErrorMaster;
336
337 /**
338  * @ingroup IxParityENAcc
339  *
340  * @enum IxParityENAccAHBErrorSlave
341  *
342  * @brief The Slave on the AHB bus interface whose transaction might have 
343  * resulted in the parity error notification to XScale.
344  */
345 typedef enum  /**< IxParityENAccAHBErrorSlave */
346 {
347   IX_PARITYENACC_AHBN_SLV_MCU,         /**< Memory Control Unit */
348   IX_PARITYENACC_AHBN_SLV_AHB_BRIDGE,  /**< AHB Bridge */
349   IX_PARITYENACC_AHBS_SLV_MCU,         /**< XScale Bus Interface Unit */
350   IX_PARITYENACC_AHBS_SLV_APB_BRIDGE,  /**< APB Bridge */
351   IX_PARITYENACC_AHBS_SLV_AQM,         /**< AQM */
352   IX_PARITYENACC_AHBS_SLV_RSA,         /**< RSA (Crypto Bus) */
353   IX_PARITYENACC_AHBS_SLV_PBC,         /**< PCI Bus Controller */
354   IX_PARITYENACC_AHBS_SLV_EBC,         /**< Expansion Bus Controller */
355   IX_PARITYENACC_AHBS_SLV_USBH         /**< USB Host Controller */
356 } IxParityENAccAHBErrorSlave;
357
358 /**
359  * @ingroup IxParityENAcc
360  *
361  * @struct IxParityENAccAHBErrorTransaction
362  *
363  * @brief The Master and Slave on the AHB bus interface whose transaction might
364  * have resulted in the parity error notification to XScale.
365  *
366  * NOTE: This information may be used in the data abort exception handler
367  * to differentiate between the XScale and non-XScale access to the SDRAM
368  * memory.
369  */
370 typedef struct  /**< IxParityENAccAHBErrorTransaction  */
371 {
372   IxParityENAccAHBErrorMaster  ahbErrorMaster; /**< Master on AHB bus */
373   IxParityENAccAHBErrorSlave   ahbErrorSlave;  /**< Slave  on AHB bus */
374 } IxParityENAccAHBErrorTransaction;
375
376 /**
377  * @ingroup IxParityENAcc
378  *
379  * @struct IxParityENAccParityErrorContextMessage
380  *
381  * @brief Parity Error Context Message
382  */
383 typedef struct /**< IxParityENAccParityErrorContextMessage */
384 {
385   IxParityENAccParityErrorSource     pecParitySource; /**< Source info of parity error */
386   IxParityENAccParityErrorAccess     pecAccessType;   /**< Read or Write Access
387                                                            Read  - NPE, SWCP, AQM, DDR MCU,
388                                                                    Exp Bus Ctrlr (Outbound)
389                                                            Write - DDR MCU,
390                                                                    Exp Bus Ctrlr (Inbound 
391                                                                    i.e., External Master) */
392   IxParityENAccParityErrorAddress    pecAddress;      /**< Address faulty location
393                                                            Valid only for AQM, DDR MCU, 
394                                                            Exp Bus Ctrlr */
395   IxParityENAccParityErrorData       pecData;         /**< Data read from the faulty location
396                                                            Valid only for AQM and DDR MCU
397                                                            For DDR MCU it is the bit location
398                                                            of the Single-bit parity */
399   IxParityENAccParityErrorRequester  pecRequester;    /**< Requester of SDRAM memory access
400                                                            Valid only for the DDR MCU */
401   IxParityENAccAHBErrorTransaction   ahbErrorTran;    /**< Master and Slave information on the
402                                                            last AHB Error Transaction */
403 } IxParityENAccParityErrorContextMessage;
404
405 /**
406  * @ingroup IxParityENAcc
407  *
408  * @typedef IxParityENAccCallback
409  *
410  * @brief This prototype shows the format of a callback function.
411  *
412  * The callback will be used to notify the parity error to the client application.
413  * The callback will be registered  by @ref ixParityENAccCallbackRegister.
414  *
415  * It will be called from an ISR when a parity error is detected and thus
416  * needs to follow the interrupt callable function conventions.
417  *
418  */
419 typedef void (*IxParityENAccCallback) (void);
420
421
422 /*
423  * Prototypes for interface functions.
424  */
425
426 /**
427  * @ingroup IxParityENAcc
428  *
429  * @fn IxParityENAccStatus ixParityENAccInit(void)
430  *
431  * @brief This function will initialise the IxParityENAcc component.
432  *
433  * This function will initialise the IxParityENAcc component. It should only be
434  * called once, prior to using the IxParityENAcc component.
435  *
436  * <OL><LI>It initialises the internal data structures, registers the ISR that 
437  * will be triggered when a parity error occurs in IXP4xx silicon.</LI></OL>
438  *
439  * @li Re-entrant   : No
440  * @li ISR Callable : No
441  * 
442  * @return @li IX_PARITYENACC_SUCCESS - Initialization is successful
443  *         @li IX_PARITYENACC_ALREADY_INITIALISED - The access layer has already 
444  *             been initialized
445  *         @li IX_PARITYENACC_OPERATION_FAILED - The request failed because the 
446  *             operation didn't succeed on the hardware. Refer to error trace/log
447  *             for details.
448  */
449
450 PUBLIC IxParityENAccStatus ixParityENAccInit(void);
451
452 /**
453  * @ingroup IxParityENAcc
454  *
455  * @fn IxParityENAccStatus ixParityENAccCallbackRegister (
456            IxParityENAccCallback parityErrNfyCallBack)
457  *
458  * @brief This function will register a new callback with IxParityENAcc component. 
459  * It can also reregister a new callback replacing the old callback.
460  *
461  * @param parityErrNfyCallBack [in] - This parameter will specify the call-back
462  * function supplied by the client application.
463  *
464  * This interface registers the user application supplied call-back handler with
465  * the parity error handling access component after the init.
466  *
467  * The callback function will be called from an ISR that will be triggered by the 
468  * parity error in the IXP400 silicon.
469  *
470  * The following actions will be performed by this function:
471  * <OL><LI>Check for the prior initialisation of the module before registering or
472  * re-registering of the callback.
473  * Check for parity error detection disabled before re-registration of the callback.
474  * </LI></OL>
475  *
476  * @li   Re-entrant   : No
477  * @li   ISR Callable : No
478  *
479  * @return @li IX_PARITYENACC_SUCCESS - The parameters check passed and the 
480  *             registration is successful.
481  *         @li IX_PARITYENACC_INVALID_PARAMETERS - Request failed due to NULL 
482  *             parameter passed.
483  *         @li IX_PARITYENACC_OPERATION_FAILED - The request failed because the 
484  *             parity error detection not yet disabled.
485  *         @li IX_PARITYENACC_NOT_INITIALISED - The operation requested prior to
486  *             the initialisation of the access layer.
487  */
488
489 PUBLIC IxParityENAccStatus ixParityENAccCallbackRegister (
490            IxParityENAccCallback parityErrNfyCallBack);
491
492 /**
493  * @ingroup IxParityENAcc
494  *
495  * @fn IxParityENAccStatus ixParityENAccParityDetectionConfigure (
496            const IxParityENAccHWParityConfig *hwParityConfig)
497  *
498  * @brief This interface allows the client application to enable the parity 
499  * error detection on the underlying hardware block.
500  *
501  * @param hwParityConfig [in] - Hardware blocks for which the parity error 
502  * detection is to be enabled or disabled.
503  *
504  * The client application allocates and provides the reference to the buffer.
505  *
506  * It will also verify whether the specific hardware block is functional or not.
507  *
508  * NOTE: Failure in enabling or disabling of one or more components result in
509  * trace message but still returns IX_PARITYENACC_SUCCESS. Refer to the function 
510  * @ref ixParityENAccParityDetectionQuery on how to verify the failures while 
511  * enabling/disabling paritys error detection.
512  *
513  * It shall be invoked after the Init and CallbackRegister functions but before
514  * any other function of the IxParityENAcc layer.
515  *
516  * @li   Re-entrant   : No
517  * @li   ISR Callable : No
518  *
519  * @return @li IX_PARITYENACC_SUCCESS - The parameters check passed and the 
520  *             request to enable/disable is successful.
521  *         @li IX_PARITYENACC_INVALID_PARAMETERS-The request failed due to  
522  *             NULL parameter supplied.
523  *         @li IX_PARITYENACC_OPERATION_FAILED - The request failed because the 
524  *             operation didn't succeed on the hardware.
525  *         @li IX_PARITYENACC_NOT_INITIALISED - The operation requested prior to
526  *             the initialisation of the access layer.
527  */
528
529 PUBLIC IxParityENAccStatus ixParityENAccParityDetectionConfigure (
530            const IxParityENAccHWParityConfig *hwParityConfig);
531
532 /**
533  * @ingroup IxParityENAcc
534  *
535  * @fn IxParityENAccStatus ixParityENAccParityDetectionQuery (
536            IxParityENAccHWParityConfig * const hwParityConfig)
537  *
538  * @brief This interface allows the client application to determine the 
539  * status of the parity error detection on the specified hardware blocks
540  *
541  * @param hwParityConfig [out] - Hardware blocks whose parity error detection 
542  * has been enabled or disabled.
543  *
544  * The client application allocates and provides the reference to the buffer.
545  *
546  * This interface can be used immediately after the interface @ref
547  * ixParityENAccParityDetectionConfigure to see on which of the hardware blocks
548  * the parity error detection has either been enabled or disabled based on the
549  * client application request.
550  *
551  * @li   Re-entrant   : No
552  * @li   ISR Callable : No
553  *
554  * @return @li IX_PARITYENACC_SUCCESS - The parameters check passed and the 
555  *             request to query on whether the hardware parity error detection
556  *             is enabled or disabled is successful.
557  *         @li IX_PARITYENACC_INVALID_PARAMETERS-The request failed due to  
558  *             NULL parameter or invalid values supplied.
559  *         @li IX_PARITYENACC_NOT_INITIALISED - The operation requested prior 
560  *             to the initialisation of the access layer.
561  */
562
563 PUBLIC IxParityENAccStatus ixParityENAccParityDetectionQuery(
564            IxParityENAccHWParityConfig * const hwParityConfig);
565
566 /**
567  * @ingroup IxParityENAcc
568  *
569  * @fn IxParityENAccStatus ixParityENAccParityErrorContextGet( 
570            IxParityENAccParityErrorContextMessage * const pecMessage)
571  *
572  * @brief This interface allows the client application to determine the 
573  * status of the parity error context on hardware block for which the
574  * current parity error interrupt triggered.
575  *
576  * @param pecMessage [out] - The parity error context information of the
577  * parity interrupt currently being process.
578  *
579  * The client application allocates and provides the reference to the buffer.
580  *
581  * Refer to the data structure @ref IxParityENAccParityErrorContextMessage
582  * for details.
583  *
584  * The routine will will fetch the parity error context in the following
585  * priority, if multiple parity errors observed.
586  * 
587  * <pre>
588  * 0 - MCU (Multi-bit and single-bit in that order)
589  * 1 - NPE-A
590  * 2 - NPE-B
591  * 3 - NPE-C
592  * 4 - SWCP
593  * 5 - QM
594  * 6 - EXP
595  *
596  * NOTE: The information provided in the @ref IxParityENAccAHBErrorTransaction
597  * may be of help for the client application to decide on the course of action 
598  * to take. This info is taken from the Performance Monitoring Unit register
599  * which records most recent error observed on the AHB bus. This information
600  * might have been overwritten by some other error by the time it is retrieved.
601  * </pre>
602  *
603  * @li   Re-entrant   : No
604  * @li   ISR Callable : Yes
605  *
606  * @return @li IX_PARITYENACC_SUCCESS-The parameters check passed and the 
607  *             request to get the parity error context information is successful.
608  *         @li IX_PARITYENACC_INVALID_PARAMETERS-The request failed due to  
609  *             NULL parameter is passed
610  *         @li IX_PARITYENACC_OPERATION_FAILED - The request failed because 
611  *             the operation didn't succeed on the hardware.
612  *         @li IX_PARITYENACC_NOT_INITIALISED - The operation requested prior
613  *             to the initialisation of the access layer.
614  *         @li IX_PARITYENACC_NO_PARITY - No parity condition exits or has 
615  *             already been cleared
616  */
617
618 PUBLIC IxParityENAccStatus ixParityENAccParityErrorContextGet( 
619            IxParityENAccParityErrorContextMessage * const pecMessage);
620
621 /**
622  * @ingroup IxParityENAcc
623  *
624  * @fn IxParityENAccStatus ixParityENAccParityErrorInterruptClear (
625           const IxParityENAccParityErrorContextMessage *pecMessage)
626  *
627  * @brief This interface helps the client application to clear off the
628  * interrupt condition on the hardware block identified in the parity
629  * error context message.  Please refer to the table below as the operation
630  * varies depending on the interrupt source.
631  * 
632  * @param pecMessage [in] - The parity error context information of the
633  * hardware block whose parity error interrupt condition is to disabled.
634  *
635  * The client application allocates and provides the reference to the buffer.
636  *
637  * <pre>
638  * ****************************************************************************
639  * Following actions will be taken during the interrupt clear for respective
640  * hardware blocks.
641  * 
642  *  Parity Source     Actions taken during Interrupt clear 
643  *  -------------     -------------------------------------------------------
644  *  NPE-A             Interrupt will be masked off at the interrupt controller 
645  *                    so that it will not trigger continuously.
646  *                      Client application has to take appropriate action and 
647  *                      re-configure the parity error detection subsequently. 
648  *                      The client application will not be notified of further 
649  *                      interrupts, until the re-configuration is done using
650  *                      @ref ixParityENAccParityDetectionConfigure.
651  *
652  *  NPE-B             Interrupt will be masked off at the interrupt controller 
653  *                    so that it will not trigger continuously.
654  *                      Client application has to take appropriate action and 
655  *                      re-configure the parity error detection subsequently. 
656  *                      The client application will not be notified of further
657  *                      interrupts, until the re-configuration is done using
658  *                      @ref ixParityENAccParityDetectionConfigure.
659  *
660  *  NPE-C             Interrupt will be masked off at the interrupt controller 
661  *                      Client application has to take appropriate action and 
662  *                      re-configure the parity error detection subsequently. 
663  *                      The client application will not be notified of further
664  *                      interrupts, until the re-configuration is done using
665  *                      @ref ixParityENAccParityDetectionConfigure.
666  *
667  *  SWCP              Interrupt will be masked off at the interrupt controller.
668  *                      Client application has to take appropriate action and 
669  *                      re-configure the parity error detection subsequently. 
670  *                      The client application will not be notified of further
671  *                      interrupts, until the re-configuration is done using
672  *                      @ref ixParityENAccParityDetectionConfigure.
673  *
674  *  AQM               Interrupt will be masked off at the interrupt controller.
675  *                         Client application has to take appropriate action and 
676  *                         re-configure the parity error detection subsequently. 
677  *                         The client application will not be notified of further
678  *                         interrupts, until the re-configuration is done using
679  *                         @ref ixParityENAccParityDetectionConfigure.
680  *
681  *  MCU               Parity interrupt condition is cleared at the SDRAM MCU for 
682  *                    the following:
683  *                    1. Single-bit
684  *                    2. Multi-bit
685  *                    3. Overflow condition i.e., more than two parity conditions 
686  *                       occurred
687  *                    Note that single-parity errors do not result in data abort
688  *                    and not all data aborts caused by multi-bit parity error.
689  *
690  *  EXP               Parity interrupt condition is cleared at the expansion bus 
691  *                    controller for the following:
692  *                    1. External master initiated Inbound write
693  *                    2. Internal master (IXP400) initiated Outbound read
694  * ****************************************************************************
695  * </pre>
696  * @li   Re-entrant   : No
697  * @li   ISR Callable : No
698  *
699  * @return @li IX_PARITYENACC_SUCCESS-The parameters check passed and the request
700  *             to clear the parity error interrupt condition is successful.
701  *         @li IX_PARITYENACC_INVALID_PARAMETERS-The request failed due to 
702  *             NULL parameters have been passed or contents have been
703  *             supplied with invalid values.
704  *         @li IX_PARITYENACC_OPERATION_FAILED - The request failed because 
705  *             the operation didn't succeed on the hardware.
706  *         @li IX_PARITYENACC_NOT_INITIALISED - The operation requested prior
707  *             to the initialisation of the access layer.
708  */
709
710 PUBLIC IxParityENAccStatus ixParityENAccParityErrorInterruptClear (
711           const IxParityENAccParityErrorContextMessage *pecMessage);
712
713 /**
714  * @ingroup IxParityENAcc
715  *
716  * @fn IxParityENAccStatus ixParityENAccStatsGet (
717             IxParityENAccParityErrorStats * const ixParityErrorStats)
718  *
719  * @brief This interface allows the client application to retrieve parity 
720  * error statistics for all the hardware blocks 
721  *
722  * @param ixParityErrorStats - [out] The statistics for all the hardware blocks.
723  *
724  * The client application allocates and provides the reference to the buffer.
725  *
726  * @li   Re-entrant   : No
727  * @li   ISR Callable : Yes
728  *
729  * @return @li IX_PARITYENACC_SUCCESS-The parameters check passed and the 
730  *             request to retrieve parity error statistics for the hardware
731  *             block is successful.
732  *         @li IX_PARITYENACC_INVALID_PARAMETERS-The request failed due to a
733  *             NULL parameter passed.
734  *         @li IX_PARITYENACC_NOT_INITIALISED - The operation requested prior
735  *             to the initialisation of the access layer.
736  */
737
738 PUBLIC IxParityENAccStatus ixParityENAccStatsGet (
739             IxParityENAccParityErrorStats * const ixParityErrorStats);
740
741 /**
742  * @ingroup IxParityENAcc
743  *
744  * @fn IxParityENAccStatus ixParityENAccStatsShow (void)
745  *
746  * @brief This interface allows the client application to print all the
747  * parity error statistics.
748  *
749  * @li   Re-entrant   : No
750  * @li   ISR Callable : No
751  *
752  * @return @li IX_PARITYENACC_SUCCESS - The request to show the pairty 
753  *             error statistics is successful.
754  *         @li IX_PARITYENACC_NOT_INITIALISED - The operation requested
755  *             prior to the initialisation of the access layer.
756  */
757
758 PUBLIC IxParityENAccStatus ixParityENAccStatsShow (void);
759
760 /**
761  * @ingroup IxParityENAcc
762  *
763  * @fn IxParityENAccStatus ixParityENAccStatsReset (void)
764  *
765  * @brief This interface allows the client application to reset all the 
766  * parity error statistics.
767  *
768  * @li   Re-entrant   : No
769  * @li   ISR Callable : No
770  *
771  * @return @li IX_PARITYENACC_SUCCESS - The request to reset the parity 
772  *             error statistics is successful.
773  *         @li IX_PARITYENACC_NOT_INITIALISED - The operation requested 
774  *             prior to the initialisation of the access layer.
775  */
776
777 PUBLIC IxParityENAccStatus ixParityENAccStatsReset (void);
778
779 #endif /* IXPARITYENACC_H */
780 #endif /* __ixp46X */
781
782 /**
783  * @} defgroup IxParityENAcc
784  */
785