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