source: rtems/c/src/lib/libbsp/sparc/shared/include/occan.h @ e16e0ca

4.104.114.84.95
Last change on this file since e16e0ca was e16e0ca, checked in by Joel Sherrill <joel.sherrill@…>, on Sep 6, 2007 at 1:25:42 PM

2007-09-06 Daniel Hellstrom <daniel@…>

  • Makefile.am: Add the following new drivers: PCI, b1553BRM, SpaceWire?(GRSPW), CAN (GRCAN,OC_CAN), Raw UART.
  • shared/include/apbuart.h, shared/include/apbuart_pci.h, shared/include/apbuart_rasta.h, shared/include/b1553brm.h, shared/include/b1553brm_pci.h, shared/include/b1553brm_rasta.h, shared/include/debug_defs.h, shared/include/grcan.h, shared/include/grcan_rasta.h, shared/include/grcan_spwrtc.h, shared/include/grspw.h, shared/include/grspw_pci.h, shared/include/grspw_rasta.h, shared/include/occan.h, shared/include/occan_pci.h, shared/include/pci.h: New files.
  • Property mode set to 100644
File size: 4.3 KB
Line 
1/*  Gaisler wrapper to OpenCores CAN, driver interface
2 *
3 *  COPYRIGHT (c) 2007.
4 *  Gaisler Research.
5 *
6 *  The license and distribution terms for this file may be
7 *  found in the file LICENSE in this distribution or at
8 *  http://www.rtems.com/license/LICENSE.
9 *
10 *  Author: Daniel Hellström, Gaisler Research AB, www.gaisler.com
11 */
12
13
14#ifndef __OCCAN_H__
15#define __OCCAN_H__
16
17#include <ambapp.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23/* CAN MESSAGE */
24typedef struct {
25        char extended; /* 1= Extended Frame (29-bit id), 0= STD Frame (11-bit id) */
26        char rtr; /* RTR - Remote Transmission Request */
27        char sshot; /* single shot */   
28        unsigned char len;
29        unsigned char data[8];
30        unsigned int id;
31} CANMsg;
32
33typedef struct {
34        /* tx/rx stats */
35        unsigned int rx_msgs;
36        unsigned int tx_msgs;
37       
38        /* Error Interrupt counters */
39        unsigned int err_warn;
40        unsigned int err_dovr;
41        unsigned int err_errp;
42        unsigned int err_arb;
43        unsigned int err_bus;
44       
45        /**** BUS ERRORS (err_arb) ****/
46       
47        /* ALC 4-0 */
48        unsigned int err_arb_bitnum[32]; /* At what bit arbitration is lost */
49       
50        /******************************/
51       
52        /**** BUS ERRORS (err_bus) ****/
53       
54        /* ECC 7-6 */
55        unsigned int err_bus_bit; /* Bit error */
56        unsigned int err_bus_form; /* Form Error */
57        unsigned int err_bus_stuff; /* Stuff Error */
58        unsigned int err_bus_other; /* Other Error */
59       
60        /* ECC 5 */
61        unsigned int err_bus_rx; /* Errors during Reception */
62        unsigned int err_bus_tx; /* Errors during Transmission */
63       
64        /* ECC 4:0 */
65        unsigned int err_bus_segs[32]; /* Segment (Where in frame error occured)
66                                        * See OCCAN_SEG_* defines for indexes
67                                        */
68       
69        /******************************/
70       
71       
72        /* total number of interrupts */
73        unsigned int ints;
74       
75        /* software monitoring hw errors */
76        unsigned int tx_buf_error;
77 
78  /* Software fifo overrun */
79  unsigned int rx_sw_dovr;
80 
81} occan_stats;
82
83/* indexes into occan_stats.err_bus_segs[index] */
84#define OCCAN_SEG_ID28 0x02 /* ID field bit 28:21 */
85#define OCCAN_SEG_ID20 0x06 /* ID field bit 20:18 */
86#define OCCAN_SEG_ID17 0x07 /* ID field bit 17:13 */
87#define OCCAN_SEG_ID12 0x0f /* ID field bit 12:5 */
88#define OCCAN_SEG_ID4 0x0e  /* ID field bit 4:0 */
89
90#define OCCAN_SEG_START 0x03 /* Start of Frame */
91#define OCCAN_SEG_SRTR 0x04  /* Bit SRTR */
92#define OCCAN_SEG_IDE 0x05   /* Bit IDE */
93#define OCCAN_SEG_RTR 0x0c   /* Bit RTR */
94#define OCCAN_SEG_RSV0 0x09  /* Reserved bit 0 */
95#define OCCAN_SEG_RSV1 0x0d  /* Reserved bit 1 */
96
97#define OCCAN_SEG_DLEN 0x0b    /* Data Length code */
98#define OCCAN_SEG_DFIELD 0x0a  /* Data Field */
99
100#define OCCAN_SEG_CRC_SEQ 0x08    /* CRC Sequence */
101#define OCCAN_SEG_CRC_DELIM 0x18  /* CRC Delimiter */
102
103#define OCCAN_SEG_ACK_SLOT 0x19   /* Acknowledge slot */
104#define OCCAN_SEG_ACK_DELIM 0x1b  /* Acknowledge delimiter */
105#define OCCAN_SEG_EOF 0x1a        /* End Of Frame */
106#define OCCAN_SEG_INTERMISSION 0x12 /* Intermission */
107#define OCCAN_SEG_ACT_ERR 0x11    /* Active error flag */
108#define OCCAN_SEG_PASS_ERR 0x16   /* Passive error flag */
109#define OCCAN_SEG_DOMINANT 0x13   /* Tolerate dominant bits */
110#define OCCAN_SEG_EDELIM 0x17     /* Error delimiter */
111#define OCCAN_SEG_OVERLOAD 0x1c   /* overload flag */
112
113
114#define CANMSG_OPT_RTR 0x40                     /* RTR Frame */
115#define CANMSG_OPT_EXTENDED 0x80  /* Exteneded frame */
116#define CANMSG_OPT_SSHOT 0x01     /* Single Shot, no retry */
117
118#define OCCAN_IOC_START 1
119#define OCCAN_IOC_STOP  2
120
121#define OCCAN_IOC_GET_CONF 3
122#define OCCAN_IOC_GET_STATS 4
123#define OCCAN_IOC_GET_STATUS 5
124
125#define OCCAN_IOC_SET_SPEED 6
126#define OCCAN_IOC_SPEED_AUTO 7
127#define OCCAN_IOC_SET_LINK 8
128#define OCCAN_IOC_SET_FILTER 9
129#define OCCAN_IOC_SET_BLK_MODE 10
130#define OCCAN_IOC_SET_BUFLEN 11
131#define OCCAN_IOC_SET_BTRS 12
132
133
134struct occan_afilter {
135        unsigned char code[4];
136        unsigned char mask[4];
137        int single_mode;
138};
139
140#define OCCAN_STATUS_RESET 0x01
141#define OCCAN_STATUS_OVERRUN 0x02
142#define OCCAN_STATUS_WARN 0x04
143#define OCCAN_STATUS_ERR_PASSIVE 0x08
144#define OCCAN_STATUS_ERR_BUSOFF 0x10
145#define OCCAN_STATUS_QUEUE_ERROR 0x80
146
147#define OCCAN_BLK_MODE_RX 0x1
148#define OCCAN_BLK_MODE_TX 0x2
149
150int occan_register(amba_confarea_type *bus);
151
152
153#define OCCAN_SPEED_500K 500000
154#define OCCAN_SPEED_250K 250000
155#define OCCAN_SPEED_125K 125000
156#define OCCAN_SPEED_75K  75000
157#define OCCAN_SPEED_50K  50000
158#define OCCAN_SPEED_25K  25000
159#define OCCAN_SPEED_10K  10000
160
161#ifdef __cplusplus
162}
163#endif
164
165#endif
Note: See TracBrowser for help on using the repository browser.