This section summarizes the specified data structures upon which the libspe API relies. These data structures are defined in the <libspe2.h> header file. Any libspe application should include this header file.
/* * spe_context_ptr_t * This pointer serves as the identifier for a specific * SPE context throughout the API (where needed) */ typedef struct spe_context * spe_context_ptr_t;
/* * spe_gang_context_ptr_t * This pointer serves as the identifier for a specific * SPE gang context throughout the API (where needed) */ typedef struct spe_gang_context * spe_gang_context_ptr_t;
/*
* SPE program handle
* Structure spe_program_handle per CESOF specification
* libspe2 applications usually only keep a pointer
* to the program handle and do not use the structure
* directly.
*/
typedef struct spe_program_handle {
/*
* handle_size allows for future extensions of the spe_program_handle
* struct by new fields, without breaking compatibility with existing users.
* Users of the new field would check whether the size is large enough.
*/
unsigned int handle_size;
void *elf_image;
void *toe_shadow;
} spe_program_handle_t;
/*
* SPE stop information
* This structure is used to return all information available
* on the reason why an SPE program stopped execution.
* This information is important for some advanced programming
* patterns and/or detailed error reporting.
*/
/* spe_stop_info_t
*/
typedef struct spe_stop_info {
unsigned int stop_reason;
union {
int spe_exit_code;
int spe_signal_code;
int spe_runtime_error;
int spe_runtime_exception;
int spe_runtime_fatal;
int spe_callback_error;
void *__reserved_ptr;
unsigned long long __reserved_u64;
} result;
int spu_status;
} spe_stop_info_t;
/* spe problem state areas
*/
typedef struct spe_mssync_area {
unsigned int MFC_MSSync;
} spe_mssync_area_t;
typedef struct spe_mfc_command_area {
unsigned char reserved_0_3[4];
unsigned int MFC_LSA;
unsigned int MFC_EAH;
unsigned int MFC_EAL;
unsigned int MFC_Size_Tag;
union {
unsigned int MFC_ClassID_CMD;
unsigned int MFC_CMDStatus;
};
unsigned char reserved_18_103[236];
unsigned int MFC_QStatus;
unsigned char reserved_108_203[252];
unsigned int Prxy_QueryType;
unsigned char reserved_208_21B[20];
unsigned int Prxy_QueryMask;
unsigned char reserved_220_22B[12];
unsigned int Prxy_TagStatus;
} spe_mfc_command_area_t;
typedef struct spe_spu_control_area {
unsigned char reserved_0_3[4];
unsigned int SPU_Out_Mbox;
unsigned char reserved_8_B[4];
unsigned int SPU_In_Mbox;
unsigned char reserved_10_13[4];
unsigned int SPU_Mbox_Stat;
unsigned char reserved_18_1B[4];
unsigned int SPU_RunCntl;
unsigned char reserved_20_23[4];
unsigned int SPU_Status;
unsigned char reserved_28_33[12];
unsigned int SPU_NPC;
} spe_spu_control_area_t;
typedef struct spe_sig_notify_1_area {
unsigned char reserved_0_B[12];
unsigned int SPU_Sig_Notify_1;
} spe_sig_notify_1_area_t;
typedef struct spe_sig_notify_2_area {
unsigned char reserved_0_B[12];
unsigned int SPU_Sig_Notify_2;
} spe_sig_notify_2_area_t;
/*
* SPE event structure
* This structure is used for SPE event handling
*/
/*
* spe_event_data_t
* User data to be associated with an event
*/
typedef union spe_event_data {
void *ptr;
unsigned int u32;
unsigned long long u64;
} spe_event_data_t;
/* spe_event_t
*/
typedef struct spe_event_unit {
unsigned int events;
spe_context_ptr_t spe;
spe_event_data_t data;
} spe_event_unit_t;