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.2 $
12 *     $Date: 1998/01/08 11:11:56 $
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 */
34typedef unsigned int DeviceID;
35
36/* device error codes */
37typedef 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 */
49typedef 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 */
58typedef 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 */
66typedef 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 */
74typedef 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
87typedef 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 */
96typedef 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