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