xref: /openbsd-src/gnu/usr.bin/binutils/gdb/rdi-share/devclnt.h (revision 63addd46c1e40ca0f49488ddcdc4ab598023b0c1)
1b725ae77Skettenis /*
2b725ae77Skettenis  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
3b725ae77Skettenis  *
4b725ae77Skettenis  * This software may be freely used, copied, modified, and distributed
5b725ae77Skettenis  * provided that the above copyright notice is preserved in all copies of the
6b725ae77Skettenis  * software.
7b725ae77Skettenis  */
8b725ae77Skettenis 
9b725ae77Skettenis /* -*-C-*-
10b725ae77Skettenis  *
11*63addd46Skettenis  * $Revision: 1.3 $
12*63addd46Skettenis  *     $Date: 2004/12/27 14:00:54 $
13b725ae77Skettenis  *
14b725ae77Skettenis  *
15b725ae77Skettenis  *   Project: ANGEL
16b725ae77Skettenis  *
17b725ae77Skettenis  *     Title: Public client interface to devices
18b725ae77Skettenis  */
19b725ae77Skettenis 
20b725ae77Skettenis #ifndef angel_devclnt_h
21b725ae77Skettenis #define angel_devclnt_h
22b725ae77Skettenis 
23b725ae77Skettenis /*
24b725ae77Skettenis  * This header exports the public interface to Angel-compliant device
25b725ae77Skettenis  * drivers.
26b725ae77Skettenis  *
27b725ae77Skettenis  * They are intended to be used solely by Angel, not by the User
28b725ae77Skettenis  * Application.  See devappl.h for the User Application interface to
29b725ae77Skettenis  * the device drivers.
30b725ae77Skettenis  */
31b725ae77Skettenis 
32b725ae77Skettenis #include "devices.h"
33b725ae77Skettenis 
34b725ae77Skettenis /* General purpose constants, macros, enums, typedefs */
35b725ae77Skettenis 
36b725ae77Skettenis /*
37b725ae77Skettenis  * possible channels at device level
38b725ae77Skettenis  *
39b725ae77Skettenis  * XXX
40b725ae77Skettenis  *
41b725ae77Skettenis  * these are used as array indices, so be specific about their values
42b725ae77Skettenis  */
43b725ae77Skettenis typedef enum DevChanID {
44b725ae77Skettenis   DC_DBUG = 0,                  /* reliable debug packets
45b725ae77Skettenis                                  * containing SDBG, CLIB,UDBG, etc.) */
46b725ae77Skettenis   DC_APPL = 1,                  /* application packets */
47b725ae77Skettenis   DC_NUM_CHANNELS
48b725ae77Skettenis } DevChanID;
49b725ae77Skettenis 
50b725ae77Skettenis /* Publically-accessible globals */
51b725ae77Skettenis /* none */
52b725ae77Skettenis 
53b725ae77Skettenis /* Public functions */
54b725ae77Skettenis 
55b725ae77Skettenis /*
56b725ae77Skettenis  * Function: angel_DeviceWrite
57b725ae77Skettenis  *  Purpose: The main entry point for asynchronous writes to a device.
58b725ae77Skettenis  *
59b725ae77Skettenis  *   Params:
60b725ae77Skettenis  *              Input: devID     index of the device to write to
61b725ae77Skettenis  *                     buff      data to write
62b725ae77Skettenis  *                     length    how much data to write
63b725ae77Skettenis  *                     callback  callback here when write finished
64b725ae77Skettenis  *                                or error
65b725ae77Skettenis  *                     cb_data   data to be passed to callback
66b725ae77Skettenis  *                     chanID    device channel to use
67b725ae77Skettenis  *             Output: -
68b725ae77Skettenis  *             In/Out: -
69b725ae77Skettenis  *
70b725ae77Skettenis  *            Returns: DE_OKAY     write request is underway
71b725ae77Skettenis  *                     DE_NO_DEV   no such device
72b725ae77Skettenis  *                     DE_BAD_DEV  device does not support angel writes
73b725ae77Skettenis  *                     DE_BAD_CHAN no such device channel
74b725ae77Skettenis  *                     DE_BUSY     device busy with another write
75b725ae77Skettenis  *                     DE_INVAL    silly length
76b725ae77Skettenis  *
77b725ae77Skettenis  *      Reads globals: -
78b725ae77Skettenis  *   Modifies globals: -
79b725ae77Skettenis  *
80b725ae77Skettenis  * Other side effects: -
81b725ae77Skettenis  *
82b725ae77Skettenis  * Commence asynchronous transmission of a buffer on a device.  The
83b725ae77Skettenis  * callback will occur when the write completes or if there is an
84b725ae77Skettenis  * error.
85b725ae77Skettenis  *
86b725ae77Skettenis  * This must be called for each packet to be sent.
87b725ae77Skettenis  */
88b725ae77Skettenis 
89b725ae77Skettenis DevError angel_DeviceWrite(DeviceID devID, p_Buffer buff,
90b725ae77Skettenis                            unsigned length, DevWrite_CB_Fn callback,
91b725ae77Skettenis                            void *cb_data, DevChanID chanID);
92b725ae77Skettenis 
93b725ae77Skettenis 
94b725ae77Skettenis /*
95b725ae77Skettenis  * Function: angel_DeviceRegisterRead
96b725ae77Skettenis  *  Purpose: The main entry point for asynchronous reads from a device.
97b725ae77Skettenis  *
98b725ae77Skettenis  *   Params:
99b725ae77Skettenis  *              Input: devID     index of the device to read from
100b725ae77Skettenis  *                     callback  callback here when read finished
101b725ae77Skettenis  *                                or error
102b725ae77Skettenis  *                     cb_data   data to be passed to callback
103b725ae77Skettenis  *                     get_buff  callback to be used to acquire buffer
104b725ae77Skettenis  *                                for incoming packets
105b725ae77Skettenis  *                     getb_data data to be passed to get_buff
106b725ae77Skettenis  *                     chanID    device channel to use
107b725ae77Skettenis  *             Output: -
108b725ae77Skettenis  *             In/Out: -
109b725ae77Skettenis  *
110b725ae77Skettenis  *            Returns: DE_OKAY     read request is underway
111b725ae77Skettenis  *                     DE_NO_DEV   no such device
112b725ae77Skettenis  *                     DE_BAD_DEV  device does not support angel reads
113b725ae77Skettenis  *                     DE_BAD_CHAN no such device channel
114b725ae77Skettenis  *                     DE_BUSY     device busy with another read
115b725ae77Skettenis  *                     DE_INVAL    silly length
116b725ae77Skettenis  *
117b725ae77Skettenis  *      Reads globals: -
118b725ae77Skettenis  *   Modifies globals: -
119b725ae77Skettenis  *
120b725ae77Skettenis  * Other side effects: -
121b725ae77Skettenis  *
122b725ae77Skettenis  * Register asynchronous packet read from a device.  The callback will
123b725ae77Skettenis  * occur when the read completes or if there is an error.
124b725ae77Skettenis  *
125b725ae77Skettenis  * This is persistent: the read remains registered for all incoming
126b725ae77Skettenis  * packets on the device channel.
127b725ae77Skettenis  */
128b725ae77Skettenis 
129b725ae77Skettenis DevError angel_DeviceRegisterRead(DeviceID devID,
130b725ae77Skettenis                                   DevRead_CB_Fn callback, void *cb_data,
131b725ae77Skettenis                                   DevGetBuff_Fn get_buff, void *getb_data,
132b725ae77Skettenis                                   DevChanID chanID);
133b725ae77Skettenis 
134b725ae77Skettenis 
135b725ae77Skettenis /*
136b725ae77Skettenis  * Function: angel_DeviceControl
137b725ae77Skettenis  *  Purpose: Call a control function for a device
138b725ae77Skettenis  *
139b725ae77Skettenis  *   Params:
140b725ae77Skettenis  *              Input: devID     index of the device to control to
141b725ae77Skettenis  *                     op        operation to perform
142b725ae77Skettenis  *                     arg       parameter depending on op
143b725ae77Skettenis  *
144b725ae77Skettenis  *            Returns: DE_OKAY     control request is underway
145b725ae77Skettenis  *                     DE_NO_DEV   no such device
146b725ae77Skettenis  *                     DE_BAD_OP   device does not support operation
147b725ae77Skettenis  *
148b725ae77Skettenis  *      Reads globals: -
149b725ae77Skettenis  *   Modifies globals: -
150b725ae77Skettenis  *
151b725ae77Skettenis  * Other side effects: -
152b725ae77Skettenis  *
153b725ae77Skettenis  * Have a device perform a control operation.  Extra parameters vary
154b725ae77Skettenis  * according to the operation requested.
155b725ae77Skettenis  */
156b725ae77Skettenis 
157b725ae77Skettenis DevError angel_DeviceControl(DeviceID devID, DeviceControl op, void *arg);
158b725ae77Skettenis 
159b725ae77Skettenis 
160b725ae77Skettenis /*
161b725ae77Skettenis  * Function: angel_ReceiveMode
162b725ae77Skettenis  *  Purpose: enable or disable reception across all devices
163b725ae77Skettenis  *
164b725ae77Skettenis  *   Params:
165b725ae77Skettenis  *              Input: mode   choose enable or disable
166b725ae77Skettenis  *
167b725ae77Skettenis  * Pass the mode parameter to the receive_mode control method of each device
168b725ae77Skettenis  */
169b725ae77Skettenis 
170b725ae77Skettenis void angel_ReceiveMode(DevRecvMode mode);
171b725ae77Skettenis 
172b725ae77Skettenis 
173b725ae77Skettenis /*
174b725ae77Skettenis  * Function: angel_ResetDevices
175b725ae77Skettenis  *  Purpose: reset all devices
176b725ae77Skettenis  *
177b725ae77Skettenis  *   Params: none
178b725ae77Skettenis  *
179b725ae77Skettenis  * Call the reset control method for each device
180b725ae77Skettenis  */
181b725ae77Skettenis 
182b725ae77Skettenis void angel_ResetDevices(void);
183b725ae77Skettenis 
184b725ae77Skettenis 
185b725ae77Skettenis /*
186b725ae77Skettenis  * Function: angel_InitialiseDevices
187b725ae77Skettenis  *  Purpose: initialise the device driver layer
188b725ae77Skettenis  *
189b725ae77Skettenis  *   Params: none
190b725ae77Skettenis  *
191b725ae77Skettenis  * Set up the device driver layer and call the init method for each device
192b725ae77Skettenis  */
193b725ae77Skettenis 
194b725ae77Skettenis void angel_InitialiseDevices(void);
195b725ae77Skettenis 
196b725ae77Skettenis 
197b725ae77Skettenis /*
198b725ae77Skettenis  * Function: angel_IsAngelDevice
199b725ae77Skettenis  *  Purpose: Find out if a device supports Angel packets
200b725ae77Skettenis  *
201b725ae77Skettenis  *   Params:
202b725ae77Skettenis  *              Input: devID     index of the device to control to
203b725ae77Skettenis  *
204b725ae77Skettenis  *            Returns: TRUE      supports Angel packets
205b725ae77Skettenis  *                     FALSE     raw device
206b725ae77Skettenis  *
207b725ae77Skettenis  *      Reads globals: -
208b725ae77Skettenis  *   Modifies globals: -
209b725ae77Skettenis  *
210b725ae77Skettenis  * Other side effects: -
211b725ae77Skettenis  */
212b725ae77Skettenis 
213b725ae77Skettenis bool angel_IsAngelDevice(DeviceID devID);
214b725ae77Skettenis 
215b725ae77Skettenis 
216b725ae77Skettenis #if !defined(MINIMAL_ANGEL) || MINIMAL_ANGEL == 0
217b725ae77Skettenis 
218b725ae77Skettenis /*
219b725ae77Skettenis  * Function: angel_ApplDeviceHandler
220b725ae77Skettenis  *  Purpose: The entry point for User Application Device Driver requests
221b725ae77Skettenis  *           in a full functiionality version of Angel.
222b725ae77Skettenis  *           It will never be called directly by the User Application,
223b725ae77Skettenis  *           but gets called indirectly, via the SWI handler.
224b725ae77Skettenis  *
225b725ae77Skettenis  *  Params:
226b725ae77Skettenis  *      Input: swi_r0    Argument to SWI indicating that
227b725ae77Skettenis  *                       angel_ApplDeviceHandler was to be called.  This
228b725ae77Skettenis  *                       will not be used in this function, but is needed
229b725ae77Skettenis  *                       by the SWI handler.
230b725ae77Skettenis  *             arg_blk   pointer to block of arguments
231b725ae77Skettenis  *                       arg_blk[0] is one of
232b725ae77Skettenis  *                       angel_SWIreason_ApplDevice_{Read,Write,Yield}
233b725ae77Skettenis  *                       which indicates which angel_Device* fn is to
234b725ae77Skettenis  *                       be called.  arg_blk[1] - arg_blk[n] are the
235b725ae77Skettenis  *                       arguments to the corresponding
236b725ae77Skettenis  *                       angel_ApplDevice* function.
237b725ae77Skettenis  *             Output: -
238b725ae77Skettenis  *             In/Out: -
239b725ae77Skettenis  *
240b725ae77Skettenis  *            Returns:   whatever the specified angel_Device* function
241b725ae77Skettenis  *                       returns.
242b725ae77Skettenis  *
243b725ae77Skettenis  *      Reads globals: -
244b725ae77Skettenis  *   Modifies globals: -
245b725ae77Skettenis  *
246b725ae77Skettenis  * Other side effects: -
247b725ae77Skettenis  *
248b725ae77Skettenis  * This has the side effects of angel_Device{Read,Write,Yield}
249b725ae77Skettenis  * depending upon which is operation is specified as described above.
250b725ae77Skettenis  */
251b725ae77Skettenis 
252b725ae77Skettenis DevError angel_ApplDeviceHandler(
253b725ae77Skettenis   unsigned swi_r0, unsigned *arg_blk
254b725ae77Skettenis );
255b725ae77Skettenis 
256b725ae77Skettenis #endif /* ndef MINIMAL_ANGEL */
257b725ae77Skettenis 
258b725ae77Skettenis #endif /* ndef angel_devclnt_h */
259b725ae77Skettenis 
260b725ae77Skettenis /* EOF devclnt.h */
261