[Cbe-oss-dev] [PATCH/RFC] libspe2: add support for multi source sync
Kazunori Asayama
asayama at sm.sony.co.jp
Mon Jul 2 15:09:46 EST 2007
Gerhard Stenzel <stenzel at de.ibm.com> wrote:
>
> Thanks for the comments
>
> The following patch/RFC adds and implements two API functions
> to support the MFC Multisource Synchronization facility.
>
> Signed-off-by: Gerhard Stenzel <stenzel at de.ibm.com>
It's OK with me.
>
> ===================================================================
> Index: libspe2/libspe2.c
> ===================================================================
> --- libspe2/libspe2.c (revision 57)
> +++ libspe2/libspe2.c (working copy)
> @@ -363,6 +363,29 @@ int spe_out_intr_mbox_status (spe_contex
> }
>
> /*
> + * Multisource Sync Facility
> + */
> +
> +int spe_mssync_start(spe_context_ptr_t spe)
> +{
> + if (spe == NULL ) {
> + errno = ESRCH;
> + return -1;
> + }
> + return _base_spe_mssync_start(spe);
> +}
> +
> +int spe_mssync_status(spe_context_ptr_t spe)
> +{
> + if (spe == NULL ) {
> + errno = ESRCH;
> + return -1;
> + }
> + return _base_spe_mssync_status(spe);
> +}
> +
> +
> +/*
> * SPU SIgnal Notification Facility
> */
>
> Index: libspe2/spebase/dma.c
> ===================================================================
> --- libspe2/spebase/dma.c (revision 57)
> +++ libspe2/spebase/dma.c (working copy)
> @@ -321,3 +321,52 @@ int _base_spe_mfcio_tag_status_read(spe_
> return -1;
> }
> }
> +
> +int _base_spe_mssync_start(spe_context_ptr_t spectx)
> +{
> + int ret, fd;
> + unsigned int data = 1; /* Any value can be written here */
> +
> + volatile struct spe_mssync_area *mss_area =
> + spectx->base_private->mssync_mmap_base;
> +
> + if (spectx->base_private->flags & SPE_MAP_PS) {
> + mss_area->MFC_MSSync = data;
> + return 0;
> + } else {
> + fd = open_if_closed(spectx, FD_MSS, 0);
> + if (fd != -1) {
> + ret = write(fd, &data, sizeof (data));
> + if ((ret < 0) && (errno != EIO)) {
> + perror("spe_mssync_start: internal error");
> + }
> + return ret < 0 ? -1 : 0;
> + } else
> + return -1;
> + }
> +}
> +
> +int _base_spe_mssync_status(spe_context_ptr_t spectx)
> +{
> + int ret, fd;
> + unsigned int data;
> +
> + volatile struct spe_mssync_area *mss_area =
> + spectx->base_private->mssync_mmap_base;
> +
> + if (spectx->base_private->flags & SPE_MAP_PS) {
> + return mss_area->MFC_MSSync;
> + } else {
> + fd = open_if_closed(spectx, FD_MSS, 0);
> + if (fd != -1) {
> + ret = read(fd, &data, sizeof (data));
> + if ((ret < 0) && (errno != EIO)) {
> + perror("spe_mssync_start: internal error");
> + }
> + return ret < 0 ? -1 : data;
> + } else
> + return -1;
> + }
> +}
> +
> +
> Index: libspe2/spebase/spebase.h
> ===================================================================
> --- libspe2/spebase/spebase.h (revision 57)
> +++ libspe2/spebase/spebase.h (working copy)
> @@ -663,6 +663,21 @@ int _base_spe_cpu_info_get(int info_requ
> */
> void __spe_context_update_event(void);
>
> +/**
> + * _base_spe_mssync_start starts Multisource Synchronisation
> + *
> + * @param spectx Specifies the SPE context
> + */
> +int _base_spe_mssync_start(spe_context_ptr_t spectx);
> +
> +/**
> + * _base_spe_mssync_status retrieves status of Multisource Synchronisation
> + *
> + * @param spectx Specifies the SPE context
> + */
> +int _base_spe_mssync_status(spe_context_ptr_t spectx);
> +
> +
> #ifdef __cplusplus
> }
> #endif
> Index: libspe2/libspe2.h
> ===================================================================
> --- libspe2/libspe2.h (revision 57)
> +++ libspe2/libspe2.h (working copy)
> @@ -165,6 +165,13 @@ int spe_out_intr_mbox_read (spe_context_
> int spe_out_intr_mbox_status (spe_context_ptr_t spe);
>
> /*
> + * Multisource Sync Facility
> + */
> +int spe_mssync_start(spe_context_ptr_t spe);
> +
> +int spe_mssync_status(spe_context_ptr_t spe);
> +
> +/*
> * SPU SIgnal Notification Facility
> */
> int spe_signal_write (spe_context_ptr_t spe, unsigned int signal_reg, unsigned int data);
>
> ===================================================================
>
> Best regards,
>
> Gerhard Stenzel, Linux on Cell Development, LTC
> -------------------------------------------------------------------------------------
> IBM Deutschland Entwicklung GmbH
> Vorsitzender des Aufsichtsrats: Martin Jetter | Geschaeftsfuehrung: Herbert Kircher
> Sitz der Gesellschaft: Boeblingen | Registergericht: Amtsgericht Stuttgart, HRB 243294
More information about the cbe-oss-dev
mailing list