Ignore:
Timestamp:
Dec 3, 2015, 4:40:49 PM (9 years ago)
Author:
alain
Message:

Modify the mjpeg application to support an optional
DCT hardware coprocessor.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/applications/coproc/coproc.c

    r708 r736  
    1 ///////////////////////////////////////////////////////////////////////////////////////
     1/////////////////////////////////////////////////////////////////////////////////////
    22//  file   : coproc.c
    33//  date   : avril 2015
    44//  author : Alain Greiner
    5 ///////////////////////////////////////////////////////////////////////////////////////
     5/////////////////////////////////////////////////////////////////////////////////////
    66//  This file describes the single thread "coproc" application.
    77//  It uses the GCD (Greater Common Divider) hardware coprocessor
    88//  to make the GCD computation between two vectors of 32 bits integers.
     9//  It supports two coprocessor operating modes: MODE_DMA_IRQ or MODE_DMA_NO_IRQ.
    910//  The vectors size is defined by the VECTOR_SIZE parameter.
    10 ///////////////////////////////////////////////////////////////////////////////////////
     11/////////////////////////////////////////////////////////////////////////////////////
    1112
    1213
     
    4142                    x, y, lpid, giet_proctime() );
    4243
     44    // check coprocessor operating mode
     45    giet_pthread_assert( (DMA_MODE == MODE_DMA_IRQ) || (DMA_MODE == MODE_DMA_NO_IRQ),
     46    "\n[COPROC ERROR] only MODE_DMA_IRQ and MODE_DMA_NO_IRQ modes are supported");
     47
    4348    // initializes opa & opb buffers
    4449    unsigned int word;
     
    5055
    5156    unsigned int coproc_info;
     57    unsigned int cluster_xy  = (x << 4) + y;
     58    unsigned int coproc_type = MWR_SUBTYPE_GCD;
    5259
    53     /////////////////////// request a GCD coprocessor
    54     giet_coproc_alloc( MWR_SUBTYPE_GCD, &coproc_info );
     60    // get a GCD coprocessor in local cluster
     61    giet_coproc_alloc( cluster_xy,
     62                       coproc_type,
     63                       &coproc_info );
    5564
    5665    // check coprocessor ports
     
    6978#endif
    7079
    71     //////////////////////// initializes channel for OPA
     80    // initializes OPA channel
    7281    giet_coproc_channel_t opa_desc;
    7382    opa_desc.channel_mode = DMA_MODE;
    7483    opa_desc.buffer_size  = VECTOR_SIZE<<2;
    7584    opa_desc.buffer_vaddr = (unsigned int)opa;
    76     giet_coproc_channel_init( 0 , &opa_desc );
     85    giet_coproc_channel_init( cluster_xy,
     86                              coproc_type,
     87                              0,
     88                              &opa_desc );
    7789   
    78     //////////////////////// initializes channel for OPB
     90    // initializes OPB channel
    7991    giet_coproc_channel_t opb_desc;
    8092    opb_desc.channel_mode = DMA_MODE;
    8193    opb_desc.buffer_size  = VECTOR_SIZE<<2;
    8294    opb_desc.buffer_vaddr = (unsigned int)opb;
    83     giet_coproc_channel_init( 1 , &opb_desc );
     95    giet_coproc_channel_init( cluster_xy,
     96                              coproc_type,
     97                              1,
     98                              &opb_desc );
    8499   
    85     //////////////////////// initializes channel for RES
     100    // initializes RES channel
    86101    giet_coproc_channel_t res_desc;
    87102    res_desc.channel_mode = DMA_MODE;
    88103    res_desc.buffer_size  = VECTOR_SIZE<<2;
    89104    res_desc.buffer_vaddr = (unsigned int)res;
    90     giet_coproc_channel_init( 2 , &res_desc );
     105    giet_coproc_channel_init( cluster_xy,
     106                              coproc_type,
     107                              2,
     108                              &res_desc );
    91109   
    92110#if  VERBOSE
     
    94112#endif
    95113
    96     /////////////////////// starts communication channels
    97     giet_coproc_run( 0 );
     114    // starts coprocessor
     115    giet_coproc_run( cluster_xy,
     116                     coproc_type );
    98117
    99118#if  VERBOSE
     
    101120#endif
    102121
    103     /////////////////////// wait coprocessor completion
     122    // wait coprocessor completion
    104123    if ( DMA_MODE == MODE_DMA_NO_IRQ )
    105124    {
    106         giet_coproc_completed( );
     125        giet_coproc_completed( cluster_xy,
     126                               coproc_type );
    107127    }
    108128
     
    118138    }
    119139
    120     ////////////////////// release GCD coprocessor
    121     giet_coproc_release( 0 );
     140    // release GCD coprocessor
     141    giet_coproc_release( cluster_xy,
     142                         coproc_type );
    122143
    123144    giet_pthread_exit("completed");
Note: See TracChangeset for help on using the changeset viewer.