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: Devices header file 18 */ 19 20 #ifndef angel_devices_h 21 #define angel_devices_h 22 23 /* 24 * Provides common types for using devices, and provides access to the 25 * device table. 26 */ 27 28 #include "angel.h" 29 #include "buffers.h" 30 31 /* General purpose constants, macros, enums, typedefs */ 32 33 /* a non-enum holder for device IDs */ 34 typedef unsigned int DeviceID; 35 36 /* device error codes */ 37 typedef enum DevError { 38 DE_OKAY, /* no error */ 39 DE_NO_DEV, /* no such device */ 40 DE_BAD_DEV, /* device does not support angel */ 41 DE_BAD_CHAN, /* no such device channel */ 42 DE_BAD_OP, /* operation not supported by this device */ 43 DE_BUSY, /* device already busy */ 44 DE_INVAL, /* length invalid */ 45 DE_FAILED /* something else went wrong */ 46 } DevError; 47 48 /* return codes from asynchronous calls - primarily for channels' benefit */ 49 typedef enum DevStatus { 50 DS_DONE, /* operation succeeded */ 51 DS_OVERFLOW, /* not enough buffer space */ 52 DS_BAD_PACKET, /* packet failed */ 53 DS_DEV_ERROR, /* device error */ 54 DS_INT_ERROR /* internal error */ 55 } DevStatus; 56 57 /* Callback for async. writes */ 58 typedef void (*DevWrite_CB_Fn)( 59 void *buff, /* pointer to data -- cast to p_Buffer */ 60 void *length, /* how much done -- cast to unsigned */ 61 void *status, /* success code -- cast to DevStatus */ 62 void *cb_data /* as supplied */ 63 ); 64 65 /* Callback for async. reads */ 66 typedef void (*DevRead_CB_Fn)( 67 void *buff, /* pointer to data -- cast to p_Buffer */ 68 void *length, /* how much read -- cast to unsigned */ 69 void *status, /* success code -- cast to DevStatus */ 70 void *cb_data /* as supplied */ 71 ); 72 73 /* control operations */ 74 typedef enum DeviceControl { 75 DC_INIT, /* initialise device */ 76 DC_RESET, /* reset device */ 77 DC_RECEIVE_MODE, /* control reception */ 78 DC_SET_PARAMS, /* set parameters of device */ 79 #ifndef TARGET 80 DC_GET_USER_PARAMS, /* params set by user at open */ 81 DC_GET_DEFAULT_PARAMS, /* device default parameters */ 82 DC_RESYNC, /* resynchronise with new agent */ 83 #endif 84 DC_PRIVATE /* start of private device codes */ 85 } DeviceControl; 86 87 typedef enum DevRecvMode { 88 DR_DISABLE, 89 DR_ENABLE 90 } DevRecvMode; 91 92 /* 93 * callback to allow a device driver to request a buffer, to be filled 94 * with an incoming packet 95 */ 96 typedef p_Buffer (*DevGetBuff_Fn)(unsigned req_size, void *cb_data); 97 98 99 /* Publically-accessible globals */ 100 /* none */ 101 102 #endif /* ndef angel_devices_h */ 103 104 /* EOF devices.h */ 105