+++ /dev/null
-/*
- * Copyright (c) 2003 Cray Inc.
- *
- * The contents of this file is proprietary information of Cray Inc.
- * and may not be disclosed without prior written consent.
- *
- */
-/*
- * This code is licensed under the GNU General Public License,
- * Version 2. See the file COPYING for more details.
- */
-
-#ifndef __RCA_L0_H__
-#define __RCA_L0_H__
-
-#include <rca/l0rca_config.h>
-
-
-/*
- * Macros to read/write Seastar Scratch RAM for everyone else.
- */
-#define SSMEMPUT(dest,src,nb) memcpy((void *)dest,(void *)src,nb)
-#define SSMEMGET(dest,src,nb) memcpy((void *)dest,(void *)src,nb)
-
-#define SSPUT64(to_ptr,value) (*(to_ptr) = (value))
-#define SSPUT32(to_ptr,value) (*(to_ptr) = (value))
-
-#define SSGET64(from_ptr,to_var) ((to_var) = *(from_ptr))
-#define SSGET32(from_ptr,to_var) ((to_var) = *(from_ptr))
-
-/* TODO - Revisit these later */
-#define LOCK_CHANNEL(chn_num)
-#define UNLOCK_CHANNEL(chn_num)
-
-typedef int (*l0rca_down_handle_t)(int chn_num, rs_event_t* buf, int32_t num);
-typedef int (*l0rca_up_handle_t)(int chn_num);
-
-typedef struct l0rca_ch_status {
- uint32_t num_obj; /* number of objects */
- uint32_t ridx; /* read index */
- uint32_t widx; /* write index */
- uint32_t reg_count;
- rs_event_t* ch_buf_ptr;
-} l0rca_ch_status_t;
-
-/*
- * API defines
- * TODO - All API calls defined here may not be implemented in l0rca.c.
- * These are to be implemented as needed.
- */
-
-/* NOTE
- * download means data transfer from the L0 to the Opteron
- * upload means data transfer from the Opteron to the LO;
- */
-
-#ifdef STANDALONE_DIAGS
-/*
- * Checks if the channel is ready or not (full).
- * Argument: int channel
- * Returns:
- * 1 if ready (not_full)
- * 0 if not ready
- */
-int l0rca_ch_send_ready(int ch_num);
-
-/*
- * Clears l0rca_early_cfg.initialized.
- * This function is required for memtest. Memtest has to move the location
- * of the storage area for the config in order to move on to the next
- * region to do the memory test.
- */
-void l0rca_clear_initialized(void);
-#endif
-
-/*
- * Function: l0rca_init_config
- *
- * Description: Read L0 - RCA communication config structure and populate
- * our personal copy. If there is any error, the OS panics
- * as not being able to communicate with L0 is a total disaster.
- * If already initialized then returns siliently.
- *
- * Arguments: None.
- *
- * Returns: None
- */
-void l0rca_init_config(void);
-
-/*
- * Function: register_ch_down
- *
- * Description: Register function for the download channel. It is expected that
- * there be at most one registered user for a download channel. This user
- * provides a callback to be invoked when data from L0 arrives on the channel.
- *
- * Arguments: int ch_num IN: channel number to register on
- * l0rca_down_handle_t handler IN: callback routine
- * int poll IN: if > zero - duration in ms to check for event
- * if = zero - event arrival is interrupt driven.
- * if < zero - do nothing. It is assumed that the user
- * has her own means to check for event arrival.
- *
- * Returns: EBUSY - If another user is already registered.
- * zero (SUCCESS) otherwise.
- */
-int register_ch_down(int ch_num, l0rca_down_handle_t handler, int poll);
-
-/*
- * Function: unregister_ch_down
- *
- * Description: Unregister function for the download channel. Use to indicate
- * that the channel is no longer to be used.
- *
- * Arguments: int ch_num IN: channel number to unregister
- *
- * Returns: zero (SUCCESS)
- */
-int unregister_ch_down(int ch_num);
-
-/*
- * Function: register_ch_up
- *
- * Description: Register function for the upload channel. It is expected that
- * there be at most one registered user for an upload channel. This user
- * provides a callback to be invoked when the buffer drains below tshhld
- * (only if the buffer became full last time the tshhld was crossed)
- *
- * Arguments: int ch_num IN: channel number to register on
- * l0rca_up_handle_t handler IN: callback routine
- * int tshhld IN: buffer to drain before invoking callback; ignored
- * if poll is negative.
- * int poll IN: if > zero - duration in ms to check for buffer drain
- * if = zero - tx done interrupt invokes callback
- * if < zero - do nothing. It is assumed that the user
- * has her own means to check for buffer drain
- *
- * Returns: -EBUSY - If another user is already registered.
- * -EINVAL - if ch_num is not in range.
- * zero (SUCCESS) otherwise.
- */
-int register_ch_up(int ch_num, l0rca_up_handle_t handler, int tshhld, int poll);
-
-/*
- * Function: unregister_ch_up
- *
- * Description: Unregister function for the download channel. Use to indicate
- * that the channel is no longer to be used.
- *
- * Arguments: int ch_num IN: channel number to unregister
- *
- * Returns: zero (SUCCESS)
- */
-int unregister_ch_up(int ch_num);
-
-/*
- * Function: ch_send_data
- *
- * Description: Sends data towards the L0.
- * The data that buf points to is sent as the payload in an rs_event structure.
- * The header is a separate parameter and the send routine directly copies
- * the header and the data into the circular buffer, thus avoiding a copy.
- *
- * Arguments: int ch_num IN: channel number on which to send data
- * rs_event_t *ev_hdr IN: Header without len & timestamp
- * void* buf IN: Buffer with data
- * unsigned int len IN: length of data to transfer
- *
- * Returns: EBUSY - If the circular channel buffer is full.
- * EINVAL - if no user registered on the channel (Debug only)
- * EFAULT - if buf or ev_hdr is NULL (Debug only)
- * E2BIG - if len exceeds max event payload (RS_MSG_LEN) (Debug only)
- * zero (SUCCESS) otherwise.
- *
- * Notes: data in buf will be copied to the channel buffer, therfore, upon
- * return, user can free the buf.
- */
-int ch_send_data(int ch_num, const rs_event_t *ev_hdr,
- void* buf, unsigned int len);
-
-/*
- * Function: ch_send_event
- *
- * Description: Sends an event to L0.
- *
- * Arguments: int ch_num IN: channel number on which to send the event
- * const rs_event_t *evp IN: EVent to send
- *
- * Returns: -EINVAL - if no user registered on the channel (Debug only)
- * -EFAULT - if ev_hdr is NULL (Debug only)
- * zero - SUCCESS, event sent.
- * +EBUSY - Event not sent. Sender should retry.
- *
- * Notes: The event will be copied to the channel buffer, therfore, upon
- * return, user may free the space associated with the event
- */
-int ch_send_event(int ch_num, const rs_event_t *evp);
-
-/*
- * Function: ch_status
- *
- * Description: Obtain status on the channel
- *
- * Arguments: int ch_num IN: channel number for which to obtain status
- * Arguments: l0rca_ch_status_t *st OUT: status of the channel.
- *
- * Returns: zero (SUCCESS).
- *
- * Notes: The status represents the snapshot at the time of invocation.
- */
-int ch_status(int ch_num, l0rca_ch_status_t *st);
-
-/*
- * Function: l0rca_ch_get_event
- *
- * Description: Read the next available event (if any). This allows the caller
- * to check for incoming events. It is usefult for those callers
- * that do not have a receive callback.
- *
- * Arguments: int ch_num IN: channel number from which to return event
- * Arguments: rs_event_t *evp: Pointer where the event may be placed
- *
- * Returns: 0 or 1 - No of events returned (0 ==> No event otherwise always 1)
- * < 0 - errors such as channel not registered etc.
- *
- * Note: The receive callback is the preferred way to handle incoming events.
- * This API call should only be used in cases where a receive callback
- * mechanism is not feasible. For example, when interupts are disabled and
- * incoming events need to be serviced. An example user is a kernel
- * debugger.
- */
-int l0rca_ch_get_event(int ch_num, rs_event_t *evp);
-
-/*
- * Function: l0rca_poll_callback
- *
- * Description: Scan the incoming channels and call the receive callback
- * (if any) in case an event is pending to be processed.
- * Update the read pointer. Next scan the outgoing channels
- * and if the channel was full, call the transmit done callback
- * so that events may be sent.
- *
- * Arguments: None
- *
- * Returns: 0 if no events were processed, else 1.
- *
- * Note: It is possible that this routine is called from interrupt
- * context. The callbacks invoked *must* not block.
- */
-int l0rca_poll_callback(void);
-
-/*
- * Function: l0rca_get_proc_id
- *
- * Description: Return the node/processor id.
- *
- * Arguments: None
- *
- * Returns: The proc id.
- */
-rs_node_t l0rca_get_proc_id(void);
-
-/*
- * Function: l0rca_get_max_xyz
- *
- * Description: Returns the current system dimensions. This information
- * can be used find the coordinates of the node in the system.
- *
- * Arguments: int32_t *mx OUT: The x value is stored here after return
- * int32_t *my OUT: The y value is stored here after return
- * int32_t *mz OUT: The z value is stored here after return
- *
- * Returns: No return value.
- */
-void l0rca_get_max_xyz(int32_t *mx, int32_t *my, int32_t *mz);
-
-/*
- * Function: l0rca_event_data
- *
- * Description: Return a pointer to the data portion and length of the
- * data portion of the event.
- *
- * Arguments: rs_event_t *evp IN: Event whose data is of interest
- * void **data OUT: Upon return will point to data portion of event
- * int32_t *len OUT: Upon return will have the length of the data
- * portion of the event
- *
- * Returns: No Return Value.
- */
-void l0rca_event_data(rs_event_t *evp, void **data, int32_t *len);
-
-
-#ifdef __KERNEL__
-extern int l0_gdb_init(void);
-extern int l0rca_kgdb_down_getc(void);
-extern int gdb_hook(void);
-extern int gdb_getc(int wait);
-extern int gdb_putc(char chr);
-extern int putDebugPacket(char *buf, int n);
-#endif
-
-#endif /* __RCA_L0_H__ */