]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo_bsp/ps7_cortexa9_0/include/xcanps.h
Preparing for next release...
[freertos] / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo_bsp / ps7_cortexa9_0 / include / xcanps.h
1 /******************************************************************************
2 *
3 * Copyright (C) 2010 - 2014 Xilinx, Inc.  All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * Use of the Software is limited solely to applications:
16 * (a) running on a Xilinx device, or
17 * (b) that interact with a Xilinx device through a bus or interconnect.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
24 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 * SOFTWARE.
26 *
27 * Except as contained in this notice, the name of the Xilinx shall not be used
28 * in advertising or otherwise to promote the sale, use or other dealings in
29 * this Software without prior written authorization from Xilinx.
30 *
31 ******************************************************************************/
32 /*****************************************************************************/
33 /**
34 *
35 * @file xcanps.h
36 *
37 * The Xilinx CAN driver component.  This component supports the Xilinx
38 * CAN Controller.
39 *
40 * The CAN Controller supports the following features:
41 *       - Confirms to the ISO 11898-1, CAN 2.0A and CAN 2.0B standards.
42 *       - Supports both Standard (11 bit Identifier) and Extended (29 bit
43 *         Identifier) frames.
44 *       - Supports Bit Rates up to 1 Mbps.
45 *       - Transmit message object FIFO with a user configurable depth of
46 *         up to 64 message objects.
47 *       - Transmit prioritization through one TX High Priority Buffer.
48 *       - Receive message object FIFO with a user configurable depth of
49 *         up to 64 message objects.
50 *       - Watermark interrupts for Rx FIFO with configurable Watermark.
51 *       - Acceptance filtering with 4 acceptance filters.
52 *       - Sleep mode with automatic wake up.
53 *       - Loop Back mode for diagnostic applications.
54 *       - Snoop mode for diagnostic applications.
55 *       - Maskable Error and Status Interrupts.
56 *       - Readable Error Counters.
57 *       - External PHY chip required.
58 *       - Receive Timestamp.
59 *
60 * The device driver supports all the features listed above, if applicable.
61 *
62 * <b>Driver Description</b>
63 *
64 * The device driver enables higher layer software (e.g., an application) to
65 * communicate to the CAN. The driver handles transmission and reception of
66 * CAN frames, as well as configuration of the controller. The driver is simply a
67 * pass-through mechanism between a protocol stack and the CAN. A single device
68 * driver can support multiple CANs.
69 *
70 * Since the driver is a simple pass-through mechanism between a protocol stack
71 * and the CAN, no assembly or disassembly of CAN frames is done at the
72 * driver-level. This assumes that the protocol stack passes a correctly
73 * formatted CAN frame to the driver for transmission, and that the driver
74 * does not validate the contents of an incoming frame
75 *
76 * <b>Operation Modes</b>
77 *
78 * The CAN controller supports the following modes of operation:
79 *   - <b>Configuration Mode</b>: In this mode the CAN timing parameters and
80 *        Baud Rate Pre-scalar parameters can be changed. In this mode the CAN
81 *        controller loses synchronization with the CAN bus and drives a
82 *        constant recessive bit on the bus line. The Error Counter Register are
83 *        reset. The CAN controller does not receive or transmit any messages
84 *        even if there are pending transmit requests from the TX FIFO or the TX
85 *        High Priority Buffer. The Storage FIFOs and the CAN configuration
86 *        registers are still accessible.
87 *   - <b>Normal Mode</b>:In Normal Mode the CAN controller participates in bus
88 *        communication, by transmitting and receiving messages.
89 *   - <b>Sleep Mode</b>: In Sleep Mode the CAN Controller does not transmit any
90 *        messages. However, if any other node transmits a message, then the CAN
91 *        Controller receives the transmitted message and exits from Sleep Mode.
92 *        If there are new transmission requests from either the TX FIFO or the
93 *        TX High Priority Buffer when the CAN Controller is in Sleep Mode, these
94 *        requests are not serviced, and the CAN Controller continues to remain
95 *        in Sleep Mode. Interrupts are generated when the CAN controller enters
96 *       Sleep mode or Wakes up from Sleep mode.
97 *   - <b>Loop Back Mode</b>: In Loop Back mode, the CAN controller transmits a
98 *        recessive bit stream on to the CAN Bus. Any message that is transmitted
99 *        is looped back to the \91Rx\92 line and acknowledged. The CAN controller
100 *        thus receives any message that it transmits. It does not participate in
101 *        normal bus communication and does not receive any messages that are
102 *        transmitted by other CAN nodes. This mode is used for diagnostic
103 *        purposes.
104 *   - <b>Snoop Mode</b>: In Snoop mode, the CAN controller transmits a
105 *        recessive bit stream on to the CAN Bus and does not participate
106 *        in normal bus communication but receives messages that are transmitted
107 *        by other CAN nodes. This mode is used for diagnostic purposes.
108 *
109 *
110 * <b>Buffer Alignment</b>
111 *
112 * It is important to note that frame buffers passed to the driver must be
113 * 32-bit aligned.
114 *
115 * <b>Receive Address Filtering</b>
116 *
117 * The device can be set to accept frames whose Identifiers match any of the
118 * 4 filters set in the Acceptance Filter Mask/ID registers.
119 *
120 * The incoming Identifier is masked with the bits in the Acceptance Filter Mask
121 * Register. This value is compared with the result of masking the bits in the
122 * Acceptance Filter ID Register with the Acceptance Filter Mask Register. If
123 * both these values are equal, the message will be stored in the RX FIFO.
124 *
125 * Acceptance Filtering is performed by each of the defined acceptance filters.
126 * If the incoming identifier passes through any acceptance filter then the
127 * frame is stored in the RX FIFO.
128 *
129 * If the Accpetance Filters are not set up then all the received messages are
130 * stroed in the RX FIFO.
131 *
132 * <b>PHY Communication</b>
133 *
134 * This driver does not provide any mechanism for directly programming PHY.
135 *
136 * <b>Interrupts</b>
137 *
138 * The driver has no dependencies on the interrupt controller. The driver
139 * provides an interrupt handler. User of this driver needs to provide
140 * callback functions. An interrupt handler example is available with
141 * the driver.
142 *
143 * <b>Threads</b>
144 *
145 * This driver is not thread safe.  Any needs for threads or thread mutual
146 * exclusion must be satisfied by the layer above this driver.
147 *
148 * <b>Device Reset</b>
149 *
150 * Bus Off interrupt that can occur in the device requires a device reset.
151 * The user is responsible for resetting the device and re-configuring it
152 * based on its needs (the driver does not save the current configuration).
153 * When integrating into an RTOS, these reset and re-configure obligations are
154 * taken care of by the OS adapter software if it exists for that RTOS.
155 *
156 * <b>Device Configuration</b>
157 *
158 * The device can be configured in various ways during the FPGA implementation
159 * process. Configuration parameters are stored in the xcanps_g.c files.
160 * A table is defined where each entry contains configuration information
161 * for a CAN device.  This information includes such things as the base address
162 * of the memory-mapped device.
163 *
164 * <b>Asserts</b>
165 *
166 * Asserts are used within all Xilinx drivers to enforce constraints on argument
167 * values. Asserts can be turned off on a system-wide basis by defining, at
168 * compile time, the NDEBUG identifier. By default, asserts are turned on and it
169 * is recommended that users leave asserts on during development.
170 *
171 * <b>Building the driver</b>
172 *
173 * The XCanPs driver is composed of several source files. This allows the user
174 * to build and link only those parts of the driver that are necessary.
175 * <br><br>
176 *
177 * <pre>
178 * MODIFICATION HISTORY:
179 *
180 * Ver   Who    Date     Changes
181 * ----- -----  -------- -----------------------------------------------
182 * 1.00a xd/sv  01/12/10 First release
183 * 1.01a bss    12/27/11 Added the APIs XCanPs_SetTxIntrWatermark and
184 *                       XCanPs_GetTxIntrWatermark.
185 *                       Updated the Register/bit definitions
186 *                       Changed XCANPS_RXFWIR_RXFLL_MASK to XCANPS_WIR_FW_MASK
187 *                       Changed XCANPS_RXWIR_OFFSET to XCANPS_WIR_OFFSET
188 *                       Added XCANPS_IXR_TXFEMP_MASK for Tx Fifo Empty
189 *                       Changed XCANPS_IXR_RXFLL_MASK to
190 *                       XCANPS_IXR_RXFWMFLL_MASK
191 *                       Changed
192 *                       XCANPS_TXBUF_ID_OFFSET to XCANPS_TXHPB_ID_OFFSET
193 *                       XCANPS_TXBUF_DLC_OFFSET to XCANPS_TXHPB_DLC_OFFSET
194 *                       XCANPS_TXBUF_DW1_OFFSET to XCANPS_TXHPB_DW1_OFFSET
195 *                       XCANPS_TXBUF_DW2_OFFSET to XCANPS_TXHPB_DW2_OFFSET
196 * </pre>
197 *
198 ******************************************************************************/
199 #ifndef XCANPS_H                        /* prevent circular inclusions */
200 #define XCANPS_H                        /* by using protection macros */
201
202 #ifdef __cplusplus
203 extern "C" {
204 #endif
205
206 /***************************** Include Files *********************************/
207
208 #include "xstatus.h"
209 #include "xcanps_hw.h"
210
211 /************************** Constant Definitions *****************************/
212
213 /** @name CAN operation modes
214  *  @{
215  */
216 #define XCANPS_MODE_CONFIG      0x00000001 /**< Configuration mode */
217 #define XCANPS_MODE_NORMAL      0x00000002 /**< Normal mode */
218 #define XCANPS_MODE_LOOPBACK    0x00000004 /**< Loop Back mode */
219 #define XCANPS_MODE_SLEEP       0x00000008 /**< Sleep mode */
220 #define XCANPS_MODE_SNOOP       0x00000010 /**< Snoop mode */
221 /* @} */
222
223 /** @name Callback identifiers used as parameters to XCanPs_SetHandler()
224  *  @{
225  */
226 #define XCANPS_HANDLER_SEND 1 /**< Handler type for frame sending interrupt */
227 #define XCANPS_HANDLER_RECV 2 /**< Handler type for frame reception interrupt*/
228 #define XCANPS_HANDLER_ERROR  3 /**< Handler type for error interrupt */
229 #define XCANPS_HANDLER_EVENT  4 /**< Handler type for all other interrupts */
230 /* @} */
231
232 /**************************** Type Definitions *******************************/
233
234 /**
235  * This typedef contains configuration information for a device.
236  */
237 typedef struct {
238         u16 DeviceId;           /**< Unique ID of device */
239         u32 BaseAddr;           /**< Register base address */
240 } XCanPs_Config;
241
242 /******************************************************************************/
243 /**
244  * Callback type for frame sending and reception interrupts.
245  *
246  * @param       CallBackRef is a callback reference passed in by the upper layer
247  *              when setting the callback functions, and passed back to the
248  *              upper layer when the callback is invoked.
249 *******************************************************************************/
250 typedef void (*XCanPs_SendRecvHandler) (void *CallBackRef);
251
252 /******************************************************************************/
253 /**
254  * Callback type for error interrupt.
255  *
256  * @param       CallBackRef is a callback reference passed in by the upper layer
257  *              when setting the callback functions, and passed back to the
258  *              upper layer when the callback is invoked.
259  * @param       ErrorMask is a bit mask indicating the cause of the error. Its
260  *              value equals 'OR'ing one or more XCANPS_ESR_* values defined in
261  *              xcanps_hw.h
262 *******************************************************************************/
263 typedef void (*XCanPs_ErrorHandler) (void *CallBackRef, u32 ErrorMask);
264
265 /******************************************************************************/
266 /**
267  * Callback type for all kinds of interrupts except sending frame interrupt,
268  * receiving frame interrupt, and error interrupt.
269  *
270  * @param       CallBackRef is a callback reference passed in by the upper layer
271  *              when setting the callback functions, and passed back to the
272  *              upper layer when the callback is invoked.
273  * @param       Mask is a bit mask indicating the pending interrupts. Its value
274  *              equals 'OR'ing one or more XCANPS_IXR_* defined in xcanps_hw.h
275 *******************************************************************************/
276 typedef void (*XCanPs_EventHandler) (void *CallBackRef, u32 Mask);
277
278 /**
279  * The XCanPs driver instance data. The user is required to allocate a
280  * variable of this type for every CAN device in the system. A pointer
281  * to a variable of this type is then passed to the driver API functions.
282  */
283 typedef struct {
284         XCanPs_Config CanConfig;        /**< Device configuration */
285         u32 IsReady;                    /**< Device is initialized and ready */
286
287         /**
288          * Callback and callback reference for TXOK interrupt.
289          */
290         XCanPs_SendRecvHandler SendHandler;
291         void *SendRef;
292
293         /**
294          * Callback and callback reference for RXOK/RXNEMP/RXFLL interrupts.
295          */
296         XCanPs_SendRecvHandler RecvHandler;
297         void *RecvRef;
298
299         /**
300          * Callback and callback reference for ERROR interrupt.
301          */
302         XCanPs_ErrorHandler ErrorHandler;
303         void *ErrorRef;
304
305         /**
306          * Callback  and callback reference for RXOFLW/RXUFLW/TXBFLL/TXFLL/
307          * Wakeup/Sleep/Bus off/ARBLST interrupts.
308          */
309         XCanPs_EventHandler EventHandler;
310         void *EventRef;
311
312 } XCanPs;
313
314
315 /***************** Macros (Inline Functions) Definitions *********************/
316
317 /****************************************************************************/
318 /**
319 *
320 * This macro checks if the transmission is complete.
321 *
322 * @param        InstancePtr is a pointer to the XCanPs instance.
323 *
324 * @return
325 *               - TRUE if the transmission is done.
326 *               - FALSE if the transmission is not done.
327 *
328 * @note         C-Style signature:
329 *               int XCanPs_IsTxDone(XCanPs *InstancePtr);
330 *
331 *******************************************************************************/
332 #define XCanPs_IsTxDone(InstancePtr) \
333         ((XCanPs_ReadReg(((InstancePtr)->CanConfig.BaseAddr),           \
334                 XCANPS_ISR_OFFSET) & XCANPS_IXR_TXOK_MASK) ? TRUE : FALSE)
335
336
337 /****************************************************************************/
338 /**
339 *
340 * This macro checks if the transmission FIFO is full.
341 *
342 * @param        InstancePtr is a pointer to the XCanPs instance.
343 *
344 * @return
345 *               - TRUE if TX FIFO is full.
346 *               - FALSE if the TX FIFO is NOT full.
347 *
348 * @note         C-Style signature:
349 *               int XCanPs_IsTxFifoFull(XCanPs *InstancePtr);
350 *
351 *****************************************************************************/
352 #define XCanPs_IsTxFifoFull(InstancePtr) \
353         ((XCanPs_ReadReg(((InstancePtr)->CanConfig.BaseAddr),   \
354                 XCANPS_SR_OFFSET) & XCANPS_SR_TXFLL_MASK) ? TRUE : FALSE)
355
356
357 /****************************************************************************/
358 /**
359 *
360 * This macro checks if the Transmission High Priority Buffer is full.
361 *
362 * @param        InstancePtr is a pointer to the XCanPs instance.
363 *
364 * @return
365 *               - TRUE if the TX High Priority Buffer is full.
366 *               - FALSE if the TX High Priority Buffer is NOT full.
367 *
368 * @note         C-Style signature:
369 *               int XCanPs_IsHighPriorityBufFull(XCanPs *InstancePtr);
370 *
371 *****************************************************************************/
372 #define XCanPs_IsHighPriorityBufFull(InstancePtr) \
373         ((XCanPs_ReadReg(((InstancePtr)->CanConfig.BaseAddr),   \
374                 XCANPS_SR_OFFSET) & XCANPS_SR_TXBFLL_MASK) ? TRUE : FALSE)
375
376
377 /****************************************************************************/
378 /**
379 *
380 * This macro checks if the receive FIFO is empty.
381 *
382 * @param        InstancePtr is a pointer to the XCanPs instance.
383 *
384 * @return
385 *               - TRUE if RX FIFO is empty.
386 *               - FALSE if the RX FIFO is NOT empty.
387 *
388 * @note         C-Style signature:
389 *               int XCanPs_IsRxEmpty(XCanPs *InstancePtr);
390 *
391 *****************************************************************************/
392 #define XCanPs_IsRxEmpty(InstancePtr) \
393         ((XCanPs_ReadReg(((InstancePtr)->CanConfig.BaseAddr),   \
394                 XCANPS_ISR_OFFSET) & XCANPS_IXR_RXNEMP_MASK) ? FALSE : TRUE)
395
396
397 /****************************************************************************/
398 /**
399 *
400 * This macro checks if the CAN device is ready for the driver to change
401 * Acceptance Filter Identifier Registers (AFIR) and Acceptance Filter Mask
402 * Registers (AFMR).
403 *
404 * AFIR and AFMR for a filter are changeable only after the filter is disabled
405 * and this routine returns FALSE. The filter can be disabled using the
406 * XCanPs_AcceptFilterDisable function.
407 *
408 * Use the XCanPs_Accept_* functions for configuring the acceptance filters.
409 *
410 * @param        InstancePtr is a pointer to the XCanPs instance.
411 *
412 * @return
413 *               - TRUE if the device is busy and NOT ready to accept writes to
414 *               AFIR and AFMR.
415 *               - FALSE if the device is ready to accept writes to AFIR and
416 *               AFMR.
417 *
418 * @note         C-Style signature:
419 *               int XCanPs_IsAcceptFilterBusy(XCanPs *InstancePtr);
420 *
421 *****************************************************************************/
422 #define XCanPs_IsAcceptFilterBusy(InstancePtr)          \
423         ((XCanPs_ReadReg(((InstancePtr)->CanConfig.BaseAddr),   \
424                 XCANPS_SR_OFFSET) & XCANPS_SR_ACFBSY_MASK) ? TRUE : FALSE)
425
426
427 /****************************************************************************/
428 /**
429 *
430 * This macro calculates CAN message identifier value given identifier field
431 * values.
432 *
433 * @param        StandardId contains Standard Message ID value.
434 * @param        SubRemoteTransReq contains Substitute Remote Transmission
435 *               Request value.
436 * @param        IdExtension contains Identifier Extension value.
437 * @param        ExtendedId contains Extended Message ID value.
438 * @param        RemoteTransReq contains Remote Transmission Request value.
439 *
440 * @return       Message Identifier value.
441 *
442 * @note         C-Style signature:
443 *               u32 XCanPs_CreateIdValue(u32 StandardId,
444 *                                       u32 SubRemoteTransReq,
445 *                                       u32 IdExtension, u32 ExtendedId,
446 *                                       u32 RemoteTransReq);
447 *
448 *               Read the CAN specification for meaning of each parameter.
449 *
450 *****************************************************************************/
451 #define XCanPs_CreateIdValue(StandardId, SubRemoteTransReq, IdExtension, \
452                 ExtendedId, RemoteTransReq)                             \
453  ((((StandardId) << XCANPS_IDR_ID1_SHIFT) & XCANPS_IDR_ID1_MASK) |      \
454  (((SubRemoteTransReq) << XCANPS_IDR_SRR_SHIFT) & XCANPS_IDR_SRR_MASK)|\
455  (((IdExtension) << XCANPS_IDR_IDE_SHIFT) & XCANPS_IDR_IDE_MASK) |      \
456  (((ExtendedId) << XCANPS_IDR_ID2_SHIFT) & XCANPS_IDR_ID2_MASK) |       \
457  ((RemoteTransReq) & XCANPS_IDR_RTR_MASK))
458
459
460 /****************************************************************************/
461 /**
462 *
463 * This macro calculates value for Data Length Code register given Data
464 * Length Code value.
465 *
466 * @param        DataLengCode indicates Data Length Code value.
467 *
468 * @return       Value that can be assigned to Data Length Code register.
469 *
470 * @note         C-Style signature:
471 *               u32 XCanPs_CreateDlcValue(u32 DataLengCode);
472 *
473 *               Read the CAN specification for meaning of Data Length Code.
474 *
475 *****************************************************************************/
476 #define XCanPs_CreateDlcValue(DataLengCode) \
477         (((DataLengCode) << XCANPS_DLCR_DLC_SHIFT) & XCANPS_DLCR_DLC_MASK)
478
479
480 /****************************************************************************/
481 /**
482 *
483 * This macro clears the timestamp in the Timestamp Control Register.
484 *
485 * @param        InstancePtr is a pointer to the XCanPs instance.
486 *
487 * @return       None.
488 *
489 * @note         C-Style signature:
490 *               void XCanPs_ClearTimestamp(XCanPs *InstancePtr);
491 *
492 *****************************************************************************/
493 #define XCanPs_ClearTimestamp(InstancePtr)                      \
494         XCanPs_WriteReg((InstancePtr)->CanConfig.BaseAddr,              \
495                                 XCANPS_TCR_OFFSET, XCANPS_TCR_CTS_MASK)
496
497 /************************** Function Prototypes ******************************/
498
499 /*
500  * Functions in xcanps.c
501  */
502 int XCanPs_CfgInitialize(XCanPs *InstancePtr, XCanPs_Config *ConfigPtr,
503                                 u32 EffectiveAddr);
504
505 void XCanPs_Reset(XCanPs *InstancePtr);
506 u8 XCanPs_GetMode(XCanPs *InstancePtr);
507 void XCanPs_EnterMode(XCanPs *InstancePtr, u8 OperationMode);
508 u32 XCanPs_GetStatus(XCanPs *InstancePtr);
509 void XCanPs_GetBusErrorCounter(XCanPs *InstancePtr, u8 *RxErrorCount,
510                                  u8 *TxErrorCount);
511 u32 XCanPs_GetBusErrorStatus(XCanPs *InstancePtr);
512 void XCanPs_ClearBusErrorStatus(XCanPs *InstancePtr, u32 Mask);
513 int XCanPs_Send(XCanPs *InstancePtr, u32 *FramePtr);
514 int XCanPs_Recv(XCanPs *InstancePtr, u32 *FramePtr);
515 int XCanPs_SendHighPriority(XCanPs *InstancePtr, u32 *FramePtr);
516 void XCanPs_AcceptFilterEnable(XCanPs *InstancePtr, u32 FilterIndexes);
517 void XCanPs_AcceptFilterDisable(XCanPs *InstancePtr, u32 FilterIndexes);
518 u32 XCanPs_AcceptFilterGetEnabled(XCanPs *InstancePtr);
519 int XCanPs_AcceptFilterSet(XCanPs *InstancePtr, u32 FilterIndex,
520                          u32 MaskValue, u32 IdValue);
521 void XCanPs_AcceptFilterGet(XCanPs *InstancePtr, u32 FilterIndex,
522                           u32 *MaskValue, u32 *IdValue);
523
524 int XCanPs_SetBaudRatePrescaler(XCanPs *InstancePtr, u8 Prescaler);
525 u8 XCanPs_GetBaudRatePrescaler(XCanPs *InstancePtr);
526 int XCanPs_SetBitTiming(XCanPs *InstancePtr, u8 SyncJumpWidth,
527                           u8 TimeSegment2, u8 TimeSegment1);
528 void XCanPs_GetBitTiming(XCanPs *InstancePtr, u8 *SyncJumpWidth,
529                            u8 *TimeSegment2, u8 *TimeSegment1);
530
531 int XCanPs_SetRxIntrWatermark(XCanPs *InstancePtr, u8 Threshold);
532 u8 XCanPs_GetRxIntrWatermark(XCanPs *InstancePtr);
533
534 /*
535  * Diagnostic functions in xcanps_selftest.c
536  */
537 int XCanPs_SelfTest(XCanPs *InstancePtr);
538
539 /*
540  * Functions in xcanps_intr.c
541  */
542 void XCanPs_IntrEnable(XCanPs *InstancePtr, u32 Mask);
543 void XCanPs_IntrDisable(XCanPs *InstancePtr, u32 Mask);
544 u32 XCanPs_IntrGetEnabled(XCanPs *InstancePtr);
545 u32 XCanPs_IntrGetStatus(XCanPs *InstancePtr);
546 void XCanPs_IntrClear(XCanPs *InstancePtr, u32 Mask);
547 void XCanPs_IntrHandler(void *InstancePtr);
548 int XCanPs_SetHandler(XCanPs *InstancePtr, u32 HandlerType,
549                         void *CallBackFunc, void *CallBackRef);
550
551 /*
552  * Functions in xcanps_sinit.c
553  */
554 XCanPs_Config *XCanPs_LookupConfig(u16 DeviceId);
555
556 #ifdef __cplusplus
557 }
558 #endif
559
560 #endif /* end of protection macro */
561