mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-31 13:53:45 +08:00
Initial creation of sourceware repository
This commit is contained in:
384
gdb/rdi-share/channels.h
Normal file
384
gdb/rdi-share/channels.h
Normal file
@ -0,0 +1,384 @@
|
||||
/*
|
||||
* 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: User interface to the channels layer
|
||||
*/
|
||||
|
||||
#ifndef angel_channels_h
|
||||
#define angel_channels_h
|
||||
|
||||
/*
|
||||
* This provides the public interface to the channels layer read and write
|
||||
* routines, and buffer management routines.
|
||||
*/
|
||||
|
||||
/* Nested header files, if required */
|
||||
|
||||
#include "devices.h"
|
||||
#include "chandefs.h"
|
||||
#include "adperr.h"
|
||||
|
||||
/* General purpose constants, macros, enums, typedefs */
|
||||
|
||||
/* use the default device */
|
||||
#define CH_DEFAULT_DEV ((DeviceID)-1)
|
||||
|
||||
/* return codes */
|
||||
typedef enum ChanError {
|
||||
CE_OKAY, /* no error */
|
||||
CE_ABANDONED, /* abandoned due to device switch */
|
||||
CE_DEV_ERROR, /* unexpected error from device driver */
|
||||
CE_BUSY, /* channel in use */
|
||||
CE_BUFF_ERROR, /* unable to get buffer */
|
||||
CE_PRIVATE /* start of internal error codes */
|
||||
} ChanError;
|
||||
|
||||
|
||||
/* Publically-accessible globals */
|
||||
|
||||
/*
|
||||
* The following two globals are only valid after angel_InitialiseChannels()
|
||||
* has been called.
|
||||
*/
|
||||
|
||||
/* the default size of a channel buffer, for global use */
|
||||
extern unsigned Angel_ChanBuffSize;
|
||||
|
||||
/* the size of a long buffer, for global use */
|
||||
extern unsigned Angel_ChanLongSize;
|
||||
|
||||
#ifdef TARGET
|
||||
AdpErrs send_resend_msg(DeviceID devid);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Function: angel_InitialiseChannels
|
||||
* Purpose: initialise the channels layer
|
||||
*
|
||||
* Params:
|
||||
* Input: -
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: -
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*/
|
||||
|
||||
void angel_InitialiseChannels( void );
|
||||
|
||||
/*
|
||||
* Function: adp_init_seq
|
||||
* Purpose: initialise sequence numbers and free anyt leftover buffers
|
||||
*
|
||||
* Params:
|
||||
* Input: -
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: - adp_ok if things went ok else an error code
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*/
|
||||
|
||||
AdpErrs adp_init_seq(void);
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelAllocBuffer
|
||||
* Purpose: allocate a buffer that is at least req_size bytes long
|
||||
*
|
||||
* Params:
|
||||
* Input: req_size the minimum size required
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: pointer to allocated buffer, or
|
||||
* NULL if unable to allocate suitable buffer
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*/
|
||||
|
||||
p_Buffer angel_ChannelAllocBuffer(unsigned req_size);
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelReleaseBuffer
|
||||
* Purpose: release a buffer back to the free pool
|
||||
*
|
||||
* Params:
|
||||
* Input: buffer the buffer to release
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: -
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*/
|
||||
|
||||
void angel_ChannelReleaseBuffer(p_Buffer buffer);
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelSend
|
||||
* Purpose: blocking send of a packet via a channel
|
||||
*
|
||||
* Params:
|
||||
* Input: devid Device to use, or CH_DEFAULT_DEV
|
||||
* chanid Channel to use for tx
|
||||
* buffer Pointer to data to send
|
||||
* len Length of data to send
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: CE_OKAY Transmission completed
|
||||
* CE_BAD_CHAN Channel id invalid
|
||||
* CE_ABANDONED Tx abandoned due to device switch
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*/
|
||||
|
||||
ChanError angel_ChannelSend(DeviceID devid, ChannelID chanid,
|
||||
const p_Buffer buffer, unsigned len);
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelSendAsync
|
||||
* Purpose: asynchronous send of a packet via a channel
|
||||
*
|
||||
* Params:
|
||||
* Input: devid Device to use, or CH_DEFAULT_DEV
|
||||
* chanid Channel to use for tx
|
||||
* buffer Pointer to data to send
|
||||
* len Length of data to send
|
||||
* callback Function to call on completion
|
||||
* callback_data Pointer to pass to callback
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: CE_OKAY Transmission underway
|
||||
* CE_BAD_CHAN Channel id invalid
|
||||
* CE_ABANDONED Tx abandoned due to device switch
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*
|
||||
* register an asynchronous send on the given channel
|
||||
* (blocks until send can be commenced)
|
||||
*/
|
||||
|
||||
typedef void (*ChanTx_CB_Fn)(ChannelID chanid, /* which channel */
|
||||
void *callback_data); /* as supplied... */
|
||||
|
||||
|
||||
ChanError angel_ChannelSendAsync( DeviceID devid,
|
||||
ChannelID chanid,
|
||||
const p_Buffer buffer,
|
||||
unsigned len,
|
||||
ChanTx_CB_Fn callback,
|
||||
void *callback_data);
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelRead
|
||||
* Purpose: blocking read of a packet from a channel
|
||||
*
|
||||
* Params:
|
||||
* Input: devid Device to use, or CH_DEFAULT_DEV
|
||||
* chanid Channel to use for rx
|
||||
* Output: buffer The buffer, supplied and filled
|
||||
* len How many bytes there are in the buffer
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: CE_OKAY Reception successful
|
||||
* CE_BAD_CHAN Channel id invalid
|
||||
* CE_ABANDONED Tx abandoned due to device switch
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*
|
||||
* Note that in the present version, if an asynchronous read has been
|
||||
* registered, a blocking read will be refused with CE_BUSY.
|
||||
*/
|
||||
ChanError angel_ChannelRead(DeviceID devid,
|
||||
ChannelID chanid,
|
||||
p_Buffer *buffer,
|
||||
unsigned *len);
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelReadAsync
|
||||
* Purpose: asynchronous read of a packet via a channel
|
||||
*
|
||||
* Params:
|
||||
* Input: devid Device to use, or CH_DEFAULT_DEV
|
||||
* chanid Channel to wait on
|
||||
* callback Function to call on completion, or NULL
|
||||
* callback_data Pointer to pass to callback
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: CE_OKAY Read request registered
|
||||
* CE_BAD_CHAN Channel id invalid
|
||||
* CE_BUSY Someone else is using the channel
|
||||
* (in a single threaded world)
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*
|
||||
* Register an asynchronous read on the given channel. There can only be one
|
||||
* async. reader per channel, and blocking reads are not permitted whilst
|
||||
* an async. reader is registered.
|
||||
*
|
||||
* Reader can unregister by specifying NULL as the callback function.
|
||||
*/
|
||||
|
||||
typedef void (*ChanRx_CB_Fn)(DeviceID devID, /* ID of receiving device */
|
||||
ChannelID chanID, /* ID of receiving channel */
|
||||
p_Buffer buff, /* pointer to buffer */
|
||||
unsigned len, /* length of data */
|
||||
void *cb_data /* callback data */
|
||||
);
|
||||
|
||||
ChanError angel_ChannelReadAsync(DeviceID devid,
|
||||
ChannelID chanid,
|
||||
ChanRx_CB_Fn callback,
|
||||
void *callback_data);
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelReadAll
|
||||
* Purpose: register an asynchronous read across all devices
|
||||
*
|
||||
* Params:
|
||||
* Input: chanid Channel to look for (usually HBOOT)
|
||||
* callback Function to call on completion
|
||||
* callback_data Pointer to pass to callback
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: CE_OKAY Read request registered
|
||||
* CE_BAD_CHAN Channel id invalid
|
||||
* CE_BUSY Someone else is reading all devices
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*
|
||||
* Register an asynchronous read across all devices. This is a 'fallback',
|
||||
* which will be superseded (temporarily) by a registered reader or blocking
|
||||
* read on a specific device.
|
||||
*/
|
||||
|
||||
ChanError angel_ChannelReadAll( ChannelID chanid,
|
||||
ChanRx_CB_Fn callback,
|
||||
void *callback_data);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelSendThenRead
|
||||
* Purpose: blocking write to followed by read from a channel
|
||||
*
|
||||
* Params:
|
||||
* Input: devid Device to use, or CH_DEFAULT_DEV
|
||||
* chanid Channel to use for rx
|
||||
* In/Out: buffer On entry: the packet to be sent
|
||||
* On return: the packet received
|
||||
* len On entry: length of packet to be sent
|
||||
* On return: length of packet rx'd
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: CE_OKAY Tx and Reception successful
|
||||
* CE_BAD_CHAN Channel id invalid
|
||||
* CE_ABANDONED Tx abandoned due to device switch
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: -
|
||||
*
|
||||
* Note that in the present version, if an asynchronous read has been
|
||||
* registered, this will be refused with CE_BUSY.
|
||||
*/
|
||||
ChanError angel_ChannelSendThenRead(DeviceID devid,
|
||||
ChannelID chanid,
|
||||
p_Buffer *buffer,
|
||||
unsigned *len);
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelSelectDevice
|
||||
* Purpose: select the device to be used for all channel comms
|
||||
*
|
||||
* Params:
|
||||
* Input: device ID of device to use as the default
|
||||
* Output: -
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: CE_OKAY Default device selected
|
||||
* CE_BAD_DEV Invalid device ID
|
||||
*
|
||||
* Reads globals: -
|
||||
* Modifies globals: -
|
||||
*
|
||||
* Other side effects: Any channel operations in progress are
|
||||
* abandoned.
|
||||
*
|
||||
* select the device for all channels comms
|
||||
*/
|
||||
|
||||
ChanError angel_ChannelSelectDevice(DeviceID device);
|
||||
|
||||
|
||||
/*
|
||||
* Function: angel_ChannelReadActiveDevice
|
||||
* Purpose: reads the device id of the currently active device
|
||||
*
|
||||
* Params:
|
||||
* Input: device address of a DeviceID variable
|
||||
* Output: *device ID of device currently being used
|
||||
* In/Out: -
|
||||
*
|
||||
* Returns: CE_OKAY Default device selected
|
||||
*/
|
||||
|
||||
ChanError angel_ChannelReadActiveDevice(DeviceID *device);
|
||||
|
||||
#endif /* ndef angel_channels_h */
|
||||
|
||||
/* EOF channels.h */
|
Reference in New Issue
Block a user