diff options
author | Nick Clifton <nickc@redhat.com> | 1998-01-08 11:12:39 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 1998-01-08 11:12:39 +0000 |
commit | 3a9c3d120fe4b7cd24f75f275e4b1034577ce056 (patch) | |
tree | b0c06fea2896a37889cdb272d9acbe476689e6e1 /gdb/rdi-share/devsw.h | |
parent | d7ab10784a26a2d5f2174afa9c17450851abbb75 (diff) | |
download | gdb-3a9c3d120fe4b7cd24f75f275e4b1034577ce056.zip gdb-3a9c3d120fe4b7cd24f75f275e4b1034577ce056.tar.gz gdb-3a9c3d120fe4b7cd24f75f275e4b1034577ce056.tar.bz2 |
Applied patches from Tony.Thompson@arm.com to implement the Angel remote
debugging interface and resurrected associated RDI files.
Diffstat (limited to 'gdb/rdi-share/devsw.h')
-rw-r--r-- | gdb/rdi-share/devsw.h | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/gdb/rdi-share/devsw.h b/gdb/rdi-share/devsw.h new file mode 100644 index 0000000..f561768 --- /dev/null +++ b/gdb/rdi-share/devsw.h @@ -0,0 +1,268 @@ +/* + * 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$ + * + */ +#ifndef angsd_devsw_h +#define angsd_devsw_h + +#include "devclnt.h" +#include "adperr.h" +#include "drivers.h" + +#ifndef __cplusplus +typedef struct Packet Packet; +typedef struct DevSWState DevSWState; +#endif + +/* + * the basic structure used for passing packets around + */ +struct Packet +{ + struct Packet *pk_next; /* XXX first field in struct */ + unsigned int pk_length; + unsigned char *pk_buffer; +}; + +/* + * control structure, used for maintaining device switcher state + */ +struct DevSWState +{ + unsigned int ds_opendevchans; /* bitmap of open device channels */ + + /* + * queue of packets read for the various device channels + */ + Packet *ds_readqueue[DC_NUM_CHANNELS]; + + /* + * structures for managing active read and write operations + */ + Packet *ds_nextreadpacket; + DriverCall ds_activeread; + DriverCall ds_activewrite; +}; + +#ifdef __cplusplus + extern "C" { +#endif + +/* + * Function: DevSW_AllocatePacket + * Purpose: Claim some memory to hold a struct Packet, and the buffer for + * that packet. + * + * Params: + * Input: length Size of the buffer in struct Packet. + * + * Returns: + * OK: Pointer to the newly malloc()ed Packet. + * Error: NULL + */ +Packet *DevSW_AllocatePacket(const unsigned int length); + +/* + * Function: DevSW_FreePacket + * Purpose: Free the memory associated with a struct Packet. + * + * Pre-conditions The structure must have been originally claimed + * via DevSW_AllocatePacket. + * + * Params: + * Input: pk The packet to be freed. + * + * Returns: Nothing + */ +void DevSW_FreePacket(Packet *pk); + +/* + * Function: DevSW_Open + * Purpose: Open the specified device driver + * + * 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. + * + * type The type of packet the caller is interested in. Only + * one open is allowed for each type of packet. + * + * In/Out: device The device driver to open + * + * Returns: + * OK: adp_ok + * Error: adp_device_open_failed + * adp_device_already_open + * adp_malloc_failure + */ +AdpErrs DevSW_Open(DeviceDescr *device, const char *name, const char *arg, + const DevChanID type); + +/* + * Function: DevSW_Match + * Purpose: Minimal veneer for DeviceMatch + * + * Params: + * Input: device The device driver to match. + * + * 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: adp_ok + * Error: adp_failed + */ +AdpErrs DevSW_Match(const DeviceDescr *device, const char *name, + const char *arg); + +/* + * Function: DevSW_Close + * Purpose: Close the specified device driver. All packets of the type + * used by the caller held within the switching layer will + * be discarded. + * + * Pre-conditions: Device must have been previously opened. + * + * Params: + * Input: device The device driver to close + * + * type The type of packet the caller was interested in. + * + * Returns: + * OK: adp_ok + * Error: adp_device_not_open + */ +AdpErrs DevSW_Close(const DeviceDescr *device, const DevChanID type); + +/* + * Function: DevSW_Read + * Purpose: Read a packet of appropriate type from the device driver + * + * Params: + * Input: device The device driver to read packet from. + * + * type The type of packet the caller is interested in. + * + * Output: packet Pointer to new packet (if one is available) + * NULL (if no complete packet is available) + * + * Input: 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: adp_ok + * Error: adp_bad_packet + * + * Post-conditions: The calling function is responsible for freeing the + * resources used by the packet when it is no longer + * needed. + */ +AdpErrs DevSW_Read(const DeviceDescr *device, const DevChanID type, + Packet **packet, bool block); + +/* + * Function: DevSW_Write + * Purpose: Try to write a packet to the device driver. The write will + * be bounced if another write is still in progress. + * + * Params: + * Input: device The device driver to write a packet to. + * + * packet The packet to be written. + * + * type The type to be assigned to the packet. + * + * Returns: + * OK: adp_ok + * Error: adp_illegal_args + * adp_write_busy + * + * Post-conditions: The calling function retains "ownership" of the packet, + * i.e. it is responsible for freeing the resources used + * by the packet when it is no longer needed. + */ +AdpErrs DevSW_Write(const DeviceDescr *device, Packet *packet, DevChanID type); + +/* + * Function: DevSW_FlushPendingWrite + * Purpose: If a write is in progress, give it a chance to finish. + * + * Params: + * Input: device The device driver to flush. + * + * Returns: + * adp_ok no pending write, or write flushed completely + * adp_write_busy pending write not flushed completely + */ +AdpErrs DevSW_FlushPendingWrite(const DeviceDescr *device); + +/* + * Function: DevSW_Ioctl + * Purpose: Perform miscellaneous control operations. This is a minimal + * veneer to DeviceIoctl. + * + * Params: + * Input: device The device driver to control. + * + * opcode Reason code indicating the operation to perform. + * + * In/Out: args Pointer to opcode-sensitive arguments/result space. + * + * Returns: + * OK: adp_ok + * Error: adp_failed + */ +AdpErrs DevSW_Ioctl(const DeviceDescr *device, const int opcode, void *args); + +/* + * Function: DevSW_WriteFinished + * Purpose: Return TRUE if the active device has finished writing + * the last packet to be sent, or FALSE if a packet is still + * being transmitted. + * + * Params: + * Input: device The device driver to check. + * + * Returns: + * TRUE: write finished or inactive + * FALSE: write in progress + */ +bool DevSW_WriteFinished(const DeviceDescr *device); + +#ifdef __cplusplus + } +#endif + +#endif /* ndef angsd_devsw_h */ + +/* EOF devsw.h */ |