RTEMS
5.1
bsps
include
grlib
grslink.h
1
/*
2
* Header file for RTEMS GRSLINK SLINK master driver
3
*
4
* COPYRIGHT (c) 2009.
5
* Cobham Gaisler AB.
6
*
7
* The license and distribution terms for this file may be
8
* found in the file LICENSE in this distribution or at
9
* http://www.rtems.org/license/LICENSE.
10
*/
11
12
#ifndef __GRSLINK_H__
13
#define __GRSLINK_H__
14
15
#ifdef __cplusplus
16
extern
"C"
{
17
#endif
18
19
/**** Configuration ****/
20
/* Collect statistics ? */
21
#define SLINK_COLLECT_STATISTICS
22
23
/* Frequency of SLINK SCLK */
24
#define SLINK_FREQ_HZ 6000000
25
/* Number of queues used in driver */
26
#define SLINK_NUMQUEUES 4
27
28
/* The four values below are only used in the demo software */
29
#define SLINK_CORE_REGBASE 0x80000600
30
#define SLINK_CORE_IRQ 6
31
#define IRQ_CNTRL_REG 0x80000200
32
#define IRQ_CNTRL_MASK_OFFSET 0x40
33
34
/*
35
* Structure returned by SLINK_statistics if SLINK_COLLECT_STATISTCS has
36
* been defined
37
*/
38
typedef
struct
{
39
unsigned
int
parerr;
/* Number of parity errors */
40
unsigned
int
recov;
/* Number of receive overflows */
41
unsigned
int
reads;
/* Number of completed READs */
42
unsigned
int
writes;
/* Number of performed WRITES */
43
unsigned
int
sequences;
/* Number of started SEQUENCEs */
44
unsigned
int
seqcomp;
/* Number of completed SEQUENCEs */
45
unsigned
int
interrupts;
/* Number of INTERRUPT transfers */
46
unsigned
int
lostwords;
/* Number of lost words due to full queue */
47
}
SLINK_stats
;
48
49
/**** SLINK status codes ****/
50
#define SLINK_ABORTED 0
51
#define SLINK_QFULL 1
52
#define SLINK_ACTIVE 2
53
#define SLINK_AMBAERR 3
54
#define SLINK_COMPLETED 4
55
#define SLINK_PARERR 5
56
#define SLINK_ROV 6
/* Only used internally in driver */
57
58
/**** SLINK master register fields *****/
59
/* Control register */
60
#define SLINK_C_SLEN_POS 16
61
#define SLINK_C_SRO (1 << 8)
62
#define SLINK_C_SCN_POS 4
63
#define SLINK_C_PAR (1 << 3)
64
#define SLINK_C_AS (1 << 2)
65
#define SLINK_C_SE (1 << 1)
66
#define SLINK_C_SLE (1 << 0)
67
68
/* Status register fields */
69
#define SLINK_S_SI_POS 16
70
#define SLINK_S_PERR (1 << 7)
71
#define SLINK_S_AERR (1 << 6)
72
#define SLINK_S_ROV (1 << 5)
73
#define SLINK_S_RNE (1 << 4)
74
#define SLINK_S_TNF (1 << 3)
75
#define SLINK_S_SC (1 << 2)
76
#define SLINK_S_SA (1 << 1)
77
#define SLINK_S_SRX (1 << 0)
78
79
/* Mask register fields */
80
#define SLINK_M_PERRE (1 << 7)
81
#define SLINK_M_AERRE (1 << 6)
82
#define SLINK_M_ROVE (1 << 5)
83
#define SLINK_M_RNEE (1 << 4)
84
#define SLINK_M_TNFE (1 << 3)
85
#define SLINK_M_SCE (1 << 2)
86
#define SLINK_M_SAE (1 << 1)
87
#define SLINK_M_SRXE (1 << 0)
88
89
/**** Macros ****/
90
/* Get channel field from received SLINK word */
91
#define SLINK_WRD_CHAN(x) ((x >> 16) & 0xF)
92
/* Get IO card # from received SLINK word */
93
#define SLINK_WRD_CARDNUM(x) ((x >> 21) & 0x3)
94
/* Get data part from SLINK word */
95
#define SLINK_WRD_PAYLOAD(x) (x & 0xFFFF)
96
97
/* Checks status value to see if transmit queue has free slot */
98
#define SLINK_STS_TRANSFREE(x) (x & SLINK_S_TNF)
99
/* Get Sequence Index value */
100
#define SLINK_STS_SI(x) ((x >> 16) & 0xFF)
101
102
/**** Function declarations, driver interface ****/
103
/* Initializes the SLINK core */
104
int
SLINK_init(
unsigned
int
nullwrd,
int
parity,
int
qsize,
105
void
(*interrupt_trans_handler)(
int
),
106
void
(*sequence_callback)(
int
));
107
108
/* Enables the core */
109
void
SLINK_start(
void
);
110
111
/* Disables the core */
112
void
SLINK_stop(
void
);
113
114
/* Reads one word */
115
int
SLINK_read(
int
data,
int
channel,
int
*reply);
116
117
/* Writes one word */
118
int
SLINK_write(
int
data,
int
channel);
119
120
/* Peforms a SEQUENCE */
121
int
SLINK_seqstart(
int
*a,
int
*b,
int
n,
int
channel,
int
reconly);
122
123
/* Aborts a SEQUENCE */
124
void
SLINK_seqabort(
void
);
125
126
/* Status of current or last SEQUENCE */
127
int
SLINK_seqstatus(
void
);
128
129
/* Number of words transferred in last SEQUENCE */
130
int
SLINK_seqwrds(
void
);
131
132
/* Returns value of core's status register */
133
int
SLINK_hwstatus(
void
);
134
135
/* Returns number of elements in queue associated with IO card */
136
int
SLINK_queuestatus(
int
iocard);
137
138
/* Take first element from queue for IO card # 'iocard' */
139
int
SLINK_dequeue(
int
iocard,
int
*elem);
140
141
/* Returns structure containing core driver statistics */
142
SLINK_stats
*SLINK_statistics(
void
);
143
144
#ifdef __cplusplus
145
}
146
#endif
147
148
#endif
/* __GRSLINK_H__ */
SLINK_stats
Definition:
grslink.h:38
Generated by
1.8.15