diff options
Diffstat (limited to 'gdb/rdi-share/drivers.h')
-rw-r--r-- | gdb/rdi-share/drivers.h | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/gdb/rdi-share/drivers.h b/gdb/rdi-share/drivers.h new file mode 100644 index 00000000000..3655c18b0a2 --- /dev/null +++ b/gdb/rdi-share/drivers.h @@ -0,0 +1,193 @@ +/* + * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved. + * + * This software may be freely used, copied, modified, and distributed + * provided that the above copyright notice is preserved in all copies of the + * software. + */ + +/* -*-C-*- + * + * $Revision$ + * $Date$ + * + * + * Project: ANGEL + * + * Title: Definitions for device driver interface. + */ +#ifndef angsd_drivers_h +#define angsd_drivers_h + +#include "rxtx.h" + +#ifndef __cplusplus +typedef struct DeviceDescr DeviceDescr; +typedef struct DriverCall DriverCall; +#endif + +/* + * used to pass packets across the driver interface + */ +struct DriverCall +{ + struct data_packet dc_packet; + void *dc_context; +}; + +/* + * used to describe a device driver + */ +struct DeviceDescr +{ + char *DeviceName; + int (*DeviceOpen)(const char *name, const char *arg); + int (*DeviceMatch)(const char *name, const char *arg); + void (*DeviceClose)(void); + int (*DeviceRead)(DriverCall *dc, bool block); + int (*DeviceWrite)(DriverCall *dc); + int (*DeviceIoctl)(const int opcode, void *args); + void *SwitcherState; /* used by switcher interface */ +}; + +/* + * Function: DeviceOpen + * + * Purpose: Open a communications device + * + * Pre-conditions: No previous open is still active + * + * Params: + * Input: name Identifies which device to open. This can either be + * a host specific identifier (e.g. "/dev/ttya", + * "COM1:"), or a number which is used to refer to + * `standard' interfaces, so "1" would be the first host + * interface, "2" the second, and so on. + * + * arg Driver specific arguments. For example, some serial + * drivers accept speed and control arguments such as + * "9600" or "19200/NO_BREAK". These arguments are + * completely free-form: it is the individual drivers + * which do the necessary interpretation. + * + * Returns: + * OK: 0 + * Error: -1 + */ +extern int DeviceOpen(const char *name, const char *arg); + +/* + * Function: DeviceMatch + * + * Purpose: Check whether parameters are OK to be passed to DeviceOpen + * + * Params: + * Input: name Identifies which device to open. This can either be + * a host specific identifier (e.g. "/dev/ttya", + * "COM1:"), or a number which is used to refer to + * `standard' interfaces, so "1" would be the first host + * interface, "2" the second, and so on. + * + * arg Driver specific arguments. For example, some serial + * drivers accept speed and control arguments such as + * "9600" or "19200/NO_BREAK". These arguments are + * completely free-form: it is the individual drivers + * which do the necessary interpretation. + * + * Returns: + * OK: 0 + * Error: -1 + */ +extern int DeviceMatch(const char *name, const char *arg); + +/* + * Function: DeviceClose + * + * Purpose: Close a communications device + * + * Pre-conditions: Device must have been previously opened + * + * Params: None + * + * Returns: Nothing + */ +extern void DeviceClose(void); + +/* + * Function: DeviceRead + * + * Purpose: Try to read a complete packet from a communications device. + * This read must usually be non-blocking, i.e. it should read as + * many data from the device as needed to complete the packet, + * but it should not wait if the packet is not complete, and no + * more data are currently available from the device. + * As an optimisation the read can optionally block when 'block' + * is TRUE, but only for a short time. It is acceptable for the + * 'block' parameter to be ignored in which case all reads + * should be non-blocking. + * + * Pre-conditions: Device has been opened via DeviceOpen() + * + * Params: + * In/Out: dc Describes the packet being read (dc->dc_packet); + * dc->dc_context is for the driver to store private + * context, and is guaranteed to be NULL the first + * time DeviceRead is called for a given packet. + * + * In: block If TRUE, read may safely block for a short period + * of time (say up to 20ms), to avoid high CPU load + * whilst waiting for a reply. + * If FALSE, read MUST NOT block. + * + * Returns: + * OK: 1 (packet is complete) + * 0 (packet is not yet complete) + * Error: -1 bad packet + * + * Post-conditions: should a calamatous error occur panic() will be called + */ +extern int DeviceRead(DriverCall *dc, bool block); + +/* + * Function: DeviceWrite + * + * Purpose: Try to write a packet to a communications device. This write + * must be non-blocking, i.e. it should write as many data to + * the device as is immediately possible, but should not wait + * for space to send any more after that. + * + * Pre-conditions: Device has been opened via DeviceOpen() + * + * Params: + * In/Out: dc Describes the packet being written (dc->dc_packet); + * dc->dc_context is for the driver to store private + * context, and is guaranteed to be NULL the first + * time DeviceWrite is called for a given packet. + * + * Returns: + * OK: 1 (all of the packet has been written) + * 0 (some of the packet remains to be written) + * Error: -1 + */ +extern int DeviceWrite(DriverCall *dc); + +/* + * Function: DeviceIoctl + * + * Purpose: Perform miscellaneous driver operations + * + * Pre-conditions: Device has been open via DeviceOpen() + * + * Params: + * Input: opcode Reason code indicating the operation to perform + * In/Out: args Pointer to opcode-sensitive arguments/result space + * + * Returns: + * OK: 0 + * Error: -1 + */ +extern int DeviceIoctl(const int opcode, void *args); + +#endif /* !defined(angsd_drivers_h) */ + +/* EOF drivers.h */ |