RTEMS 6.1-rc4
Loading...
Searching...
No Matches
occan.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-2-Clause */
2
9/*
10 * COPYRIGHT (c) 2007.
11 * Cobham Gaisler AB.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 */
34
35#ifndef __OCCAN_DRIVER_H__
36#define __OCCAN_DRIVER_H__
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42/* CAN MESSAGE */
43typedef struct {
44 char extended; /* 1= Extended Frame (29-bit id), 0= STD Frame (11-bit id) */
45 char rtr; /* RTR - Remote Transmission Request */
46 char sshot; /* single shot */
47 unsigned char len;
48 unsigned char data[8];
49 unsigned int id;
50} CANMsg;
51
52typedef struct {
53 /* tx/rx stats */
54 unsigned int rx_msgs;
55 unsigned int tx_msgs;
56
57 /* Error Interrupt counters */
58 unsigned int err_warn;
59 unsigned int err_dovr;
60 unsigned int err_errp;
61 unsigned int err_arb;
62 unsigned int err_bus;
63
64 /**** BUS ERRORS (err_arb) ****/
65
66 /* ALC 4-0 */
67 unsigned int err_arb_bitnum[32]; /* At what bit arbitration is lost */
68
69 /******************************/
70
71 /**** BUS ERRORS (err_bus) ****/
72
73 /* ECC 7-6 */
74 unsigned int err_bus_bit; /* Bit error */
75 unsigned int err_bus_form; /* Form Error */
76 unsigned int err_bus_stuff; /* Stuff Error */
77 unsigned int err_bus_other; /* Other Error */
78
79 /* ECC 5 */
80 unsigned int err_bus_rx; /* Errors during Reception */
81 unsigned int err_bus_tx; /* Errors during Transmission */
82
83 /* ECC 4:0 */
84 unsigned int err_bus_segs[32]; /* Segment (Where in frame error occured)
85 * See OCCAN_SEG_* defines for indexes
86 */
87
88 /******************************/
89
90
91 /* total number of interrupts */
92 unsigned int ints;
93
94 /* software monitoring hw errors */
95 unsigned int tx_buf_error;
96
97 /* Software fifo overrun */
98 unsigned int rx_sw_dovr;
99
101
102/* indexes into occan_stats.err_bus_segs[index] */
103#define OCCAN_SEG_ID28 0x02 /* ID field bit 28:21 */
104#define OCCAN_SEG_ID20 0x06 /* ID field bit 20:18 */
105#define OCCAN_SEG_ID17 0x07 /* ID field bit 17:13 */
106#define OCCAN_SEG_ID12 0x0f /* ID field bit 12:5 */
107#define OCCAN_SEG_ID4 0x0e /* ID field bit 4:0 */
108
109#define OCCAN_SEG_START 0x03 /* Start of Frame */
110#define OCCAN_SEG_SRTR 0x04 /* Bit SRTR */
111#define OCCAN_SEG_IDE 0x05 /* Bit IDE */
112#define OCCAN_SEG_RTR 0x0c /* Bit RTR */
113#define OCCAN_SEG_RSV0 0x09 /* Reserved bit 0 */
114#define OCCAN_SEG_RSV1 0x0d /* Reserved bit 1 */
115
116#define OCCAN_SEG_DLEN 0x0b /* Data Length code */
117#define OCCAN_SEG_DFIELD 0x0a /* Data Field */
118
119#define OCCAN_SEG_CRC_SEQ 0x08 /* CRC Sequence */
120#define OCCAN_SEG_CRC_DELIM 0x18 /* CRC Delimiter */
121
122#define OCCAN_SEG_ACK_SLOT 0x19 /* Acknowledge slot */
123#define OCCAN_SEG_ACK_DELIM 0x1b /* Acknowledge delimiter */
124#define OCCAN_SEG_EOF 0x1a /* End Of Frame */
125#define OCCAN_SEG_INTERMISSION 0x12 /* Intermission */
126#define OCCAN_SEG_ACT_ERR 0x11 /* Active error flag */
127#define OCCAN_SEG_PASS_ERR 0x16 /* Passive error flag */
128#define OCCAN_SEG_DOMINANT 0x13 /* Tolerate dominant bits */
129#define OCCAN_SEG_EDELIM 0x17 /* Error delimiter */
130#define OCCAN_SEG_OVERLOAD 0x1c /* overload flag */
131
132
133#define CANMSG_OPT_RTR 0x40 /* RTR Frame */
134#define CANMSG_OPT_EXTENDED 0x80 /* Exteneded frame */
135#define CANMSG_OPT_SSHOT 0x01 /* Single Shot, no retry */
136
137#define OCCAN_IOC_START 1
138#define OCCAN_IOC_STOP 2
139
140#define OCCAN_IOC_GET_CONF 3
141#define OCCAN_IOC_GET_STATS 4
142#define OCCAN_IOC_GET_STATUS 5
143
144#define OCCAN_IOC_SET_SPEED 6
145#define OCCAN_IOC_SPEED_AUTO 7
146#define OCCAN_IOC_SET_LINK 8
147#define OCCAN_IOC_SET_FILTER 9
148#define OCCAN_IOC_SET_BLK_MODE 10
149#define OCCAN_IOC_SET_BUFLEN 11
150#define OCCAN_IOC_SET_BTRS 12
151
152
154 unsigned char code[4];
155 unsigned char mask[4];
156 int single_mode;
157};
158
159#define OCCAN_STATUS_RESET 0x01
160#define OCCAN_STATUS_OVERRUN 0x02
161#define OCCAN_STATUS_WARN 0x04
162#define OCCAN_STATUS_ERR_PASSIVE 0x08
163#define OCCAN_STATUS_ERR_BUSOFF 0x10
164#define OCCAN_STATUS_QUEUE_ERROR 0x80
165
166#define OCCAN_BLK_MODE_RX 0x1
167#define OCCAN_BLK_MODE_TX 0x2
168
169void occan_register_drv (void);
170
171
172#define OCCAN_SPEED_500K 500000
173#define OCCAN_SPEED_250K 250000
174#define OCCAN_SPEED_125K 125000
175#define OCCAN_SPEED_75K 75000
176#define OCCAN_SPEED_50K 50000
177#define OCCAN_SPEED_25K 25000
178#define OCCAN_SPEED_10K 10000
179
180#ifdef __cplusplus
181}
182#endif
183
184#endif
Definition: grcan.h:142
Definition: inftrees.h:24
Definition: occan.h:153
Definition: occan.h:52