OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [gdb/] [rdi-share/] [channels.h] - Blame information for rev 1767

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/*
2
 * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
3
 *
4
 * This software may be freely used, copied, modified, and distributed
5
 * provided that the above copyright notice is preserved in all copies of the
6
 * software.
7
 */
8
 
9
/* -*-C-*-
10
 *
11
 * $Revision: 1.1.1.1 $
12
 *     $Date: 2002-01-16 10:24:33 $
13
 *
14
 *
15
 *   Project: ANGEL
16
 *
17
 *     Title: User interface to the channels layer
18
 */
19
 
20
#ifndef angel_channels_h
21
#define angel_channels_h
22
 
23
/*
24
 * This provides the public interface to the channels layer read and write
25
 * routines, and buffer management routines.
26
 */
27
 
28
/* Nested header files, if required */
29
 
30
#include "devices.h"
31
#include "chandefs.h"
32
#include "adperr.h"
33
 
34
/* General purpose constants, macros, enums, typedefs */
35
 
36
/* use the default device */
37
#define CH_DEFAULT_DEV ((DeviceID)-1)
38
 
39
/* return codes */
40
typedef enum ChanError {
41
  CE_OKAY,                      /* no error */
42
  CE_ABANDONED,                 /* abandoned due to device switch */
43
  CE_DEV_ERROR,                 /* unexpected error from device driver */
44
  CE_BUSY,                      /* channel in use */
45
  CE_BUFF_ERROR,                /* unable to get buffer */
46
  CE_PRIVATE                    /* start of internal error codes */
47
} ChanError;
48
 
49
 
50
/* Publically-accessible globals */
51
 
52
/*
53
 * The following two globals are only valid after angel_InitialiseChannels()
54
 * has been called.
55
 */
56
 
57
/* the default size of a channel buffer, for global use */
58
extern unsigned Angel_ChanBuffSize;
59
 
60
/* the size of a long buffer, for global use */
61
extern unsigned Angel_ChanLongSize;
62
 
63
#ifdef TARGET
64
AdpErrs send_resend_msg(DeviceID devid);
65
#endif
66
 
67
/*
68
 * Function: angel_InitialiseChannels
69
 *  Purpose: initialise the channels layer
70
 *
71
 *   Params:
72
 *              Input: -
73
 *             Output: -
74
 *             In/Out: -
75
 *
76
 *            Returns: -
77
 *
78
 *      Reads globals: -
79
 *   Modifies globals: -
80
 *
81
 * Other side effects: -
82
 */
83
 
84
void angel_InitialiseChannels( void );
85
 
86
/*
87
 * Function: adp_init_seq
88
 *  Purpose: initialise sequence numbers and free anyt leftover buffers
89
 *
90
 *   Params:
91
 *              Input: -
92
 *             Output: -
93
 *             In/Out: -
94
 *
95
 *            Returns: - adp_ok if things went ok else an error code
96
 *
97
 *      Reads globals: -
98
 *   Modifies globals: -
99
 *
100
 * Other side effects: -
101
 */
102
 
103
AdpErrs adp_init_seq(void);
104
 
105
/*
106
 * Function: angel_ChannelAllocBuffer
107
 *  Purpose: allocate a buffer that is at least req_size bytes long
108
 *
109
 *   Params:
110
 *              Input: req_size        the minimum size required
111
 *             Output: -
112
 *             In/Out: -
113
 *
114
 *            Returns: pointer to allocated buffer, or
115
 *                     NULL if unable to allocate suitable buffer
116
 *
117
 *      Reads globals: -
118
 *   Modifies globals: -
119
 *
120
 * Other side effects: -
121
 */
122
 
123
p_Buffer angel_ChannelAllocBuffer(unsigned req_size);
124
 
125
 
126
/*
127
 * Function: angel_ChannelReleaseBuffer
128
 *  Purpose: release a buffer back to the free pool
129
 *
130
 *   Params:
131
 *              Input: buffer   the buffer to release
132
 *             Output: -
133
 *             In/Out: -
134
 *
135
 *            Returns: -
136
 *
137
 *      Reads globals: -
138
 *   Modifies globals: -
139
 *
140
 * Other side effects: -
141
 */
142
 
143
void angel_ChannelReleaseBuffer(p_Buffer buffer);
144
 
145
 
146
/*
147
 * Function: angel_ChannelSend
148
 *  Purpose: blocking send of a packet via a channel
149
 *
150
 *   Params:
151
 *              Input: devid         Device to use, or CH_DEFAULT_DEV
152
 *                     chanid        Channel to use for tx
153
 *                     buffer        Pointer to data to send
154
 *                     len           Length of data to send
155
 *             Output: -
156
 *             In/Out: -
157
 *
158
 *            Returns: CE_OKAY       Transmission completed
159
 *                     CE_BAD_CHAN   Channel id invalid
160
 *                     CE_ABANDONED  Tx abandoned due to device switch
161
 *
162
 *      Reads globals: -
163
 *   Modifies globals: -
164
 *
165
 * Other side effects: -
166
 */
167
 
168
ChanError angel_ChannelSend(DeviceID devid, ChannelID chanid,
169
                            const p_Buffer buffer, unsigned len);
170
 
171
 
172
/*
173
 * Function: angel_ChannelSendAsync
174
 *  Purpose: asynchronous send of a packet via a channel
175
 *
176
 *   Params:
177
 *              Input: devid         Device to use, or CH_DEFAULT_DEV
178
 *                     chanid        Channel to use for tx
179
 *                     buffer        Pointer to data to send
180
 *                     len           Length of data to send
181
 *                     callback      Function to call on completion
182
 *                     callback_data Pointer to pass to callback
183
 *             Output: -
184
 *             In/Out: -
185
 *
186
 *            Returns: CE_OKAY       Transmission underway
187
 *                     CE_BAD_CHAN   Channel id invalid
188
 *                     CE_ABANDONED  Tx abandoned due to device switch
189
 *
190
 *      Reads globals: -
191
 *   Modifies globals: -
192
 *
193
 * Other side effects: -
194
 *
195
 * register an asynchronous send on the given channel
196
 * (blocks until send can be commenced)
197
 */
198
 
199
typedef void (*ChanTx_CB_Fn)(ChannelID  chanid,         /* which channel  */
200
                             void      *callback_data); /* as supplied... */
201
 
202
 
203
ChanError angel_ChannelSendAsync(          DeviceID      devid,
204
                                           ChannelID     chanid,
205
                                     const p_Buffer      buffer,
206
                                           unsigned      len,
207
                                           ChanTx_CB_Fn  callback,
208
                                           void         *callback_data);
209
 
210
 
211
/*
212
 * Function: angel_ChannelRead
213
 *  Purpose: blocking read of a packet from a channel
214
 *
215
 *   Params:
216
 *              Input: devid         Device to use, or CH_DEFAULT_DEV
217
 *                     chanid        Channel to use for rx
218
 *             Output: buffer        The buffer, supplied and filled
219
 *                     len           How many bytes there are in the buffer
220
 *             In/Out: -
221
 *
222
 *            Returns: CE_OKAY       Reception successful
223
 *                     CE_BAD_CHAN   Channel id invalid
224
 *                     CE_ABANDONED  Tx abandoned due to device switch
225
 *
226
 *      Reads globals: -
227
 *   Modifies globals: -
228
 *
229
 * Other side effects: -
230
 *
231
 * Note that in the present version, if an asynchronous read has been
232
 * registered, a blocking read will be refused with CE_BUSY.
233
 */
234
ChanError angel_ChannelRead(DeviceID      devid,
235
                            ChannelID     chanid,
236
                            p_Buffer     *buffer,
237
                            unsigned     *len);
238
 
239
 
240
/*
241
 * Function: angel_ChannelReadAsync
242
 *  Purpose: asynchronous read of a packet via a channel
243
 *
244
 *   Params:
245
 *              Input: devid         Device to use, or CH_DEFAULT_DEV
246
 *                     chanid        Channel to wait on
247
 *                     callback      Function to call on completion, or NULL
248
 *                     callback_data Pointer to pass to callback
249
 *             Output: -
250
 *             In/Out: -
251
 *
252
 *            Returns: CE_OKAY       Read request registered
253
 *                     CE_BAD_CHAN   Channel id invalid
254
 *                     CE_BUSY       Someone else is using the channel
255
 *                                   (in a single threaded world)
256
 *
257
 *      Reads globals: -
258
 *   Modifies globals: -
259
 *
260
 * Other side effects: -
261
 *
262
 * Register an asynchronous read on the given channel.  There can only be one
263
 * async. reader per channel, and blocking reads are not permitted whilst
264
 * an async. reader is registered.
265
 *
266
 * Reader can unregister by specifying NULL as the callback function.
267
 */
268
 
269
typedef void (*ChanRx_CB_Fn)(DeviceID   devID,   /* ID of receiving device  */
270
                             ChannelID  chanID,  /* ID of receiving channel */
271
                             p_Buffer   buff,    /* pointer to buffer       */
272
                             unsigned   len,     /* length of data          */
273
                             void      *cb_data  /* callback data           */
274
                             );
275
 
276
ChanError angel_ChannelReadAsync(DeviceID      devid,
277
                                 ChannelID     chanid,
278
                                 ChanRx_CB_Fn  callback,
279
                                 void         *callback_data);
280
 
281
 
282
/*
283
 * Function: angel_ChannelReadAll
284
 *  Purpose: register an asynchronous read across all devices
285
 *
286
 *   Params:
287
 *              Input: chanid        Channel to look for (usually HBOOT)
288
 *                     callback      Function to call on completion
289
 *                     callback_data Pointer to pass to callback
290
 *             Output: -
291
 *             In/Out: -
292
 *
293
 *            Returns: CE_OKAY       Read request registered
294
 *                     CE_BAD_CHAN   Channel id invalid
295
 *                     CE_BUSY       Someone else is reading all devices
296
 *
297
 *      Reads globals: -
298
 *   Modifies globals: -
299
 *
300
 * Other side effects: -
301
 *
302
 * Register an asynchronous read across all devices.  This is a 'fallback',
303
 * which will be superseded (temporarily) by a registered reader or blocking
304
 * read on a specific device.
305
 */
306
 
307
ChanError angel_ChannelReadAll(         ChannelID     chanid,
308
                                        ChanRx_CB_Fn  callback,
309
                                        void         *callback_data);
310
 
311
 
312
 
313
/*
314
 * Function: angel_ChannelSendThenRead
315
 *  Purpose: blocking write to followed by read from a channel
316
 *
317
 *   Params:
318
 *              Input: devid         Device to use, or CH_DEFAULT_DEV
319
 *                     chanid        Channel to use for rx
320
 *             In/Out: buffer        On entry:  the packet to be sent
321
 *                                   On return: the packet received
322
 *                     len           On entry:  length of packet to be sent
323
 *                                   On return: length of packet rx'd
324
 *             In/Out: -
325
 *
326
 *            Returns: CE_OKAY       Tx and Reception successful
327
 *                     CE_BAD_CHAN   Channel id invalid
328
 *                     CE_ABANDONED  Tx abandoned due to device switch
329
 *
330
 *      Reads globals: -
331
 *   Modifies globals: -
332
 *
333
 * Other side effects: -
334
 *
335
 * Note that in the present version, if an asynchronous read has been
336
 * registered, this will be refused with CE_BUSY.
337
 */
338
ChanError angel_ChannelSendThenRead(DeviceID      devid,
339
                                    ChannelID     chanid,
340
                                    p_Buffer     *buffer,
341
                                    unsigned     *len);
342
 
343
 
344
/*
345
 * Function: angel_ChannelSelectDevice
346
 *  Purpose: select the device to be used for all channel comms
347
 *
348
 *   Params:
349
 *              Input: device        ID of device to use as the default
350
 *             Output: -
351
 *             In/Out: -
352
 *
353
 *            Returns: CE_OKAY       Default device selected
354
 *                     CE_BAD_DEV    Invalid device ID
355
 *
356
 *      Reads globals: -
357
 *   Modifies globals: -
358
 *
359
 * Other side effects: Any channel operations in progress are
360
 *                     abandoned.
361
 *
362
 * select the device for all channels comms
363
 */
364
 
365
ChanError angel_ChannelSelectDevice(DeviceID device);
366
 
367
 
368
/*
369
 * Function: angel_ChannelReadActiveDevice
370
 *  Purpose: reads the device id of the currently active device
371
 *
372
 *   Params:
373
 *              Input: device        address of a DeviceID variable
374
 *             Output: *device       ID of device currently being used
375
 *             In/Out: -
376
 *
377
 *            Returns: CE_OKAY       Default device selected
378
 */
379
 
380
ChanError angel_ChannelReadActiveDevice(DeviceID *device);
381
 
382
#endif /* ndef angel_channels_h */
383
 
384
/* EOF channels.h */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.