Example #1
0
/*----------------------------------------------------------------------------
 * Adapter_EIP93_Init
 */
bool
Adapter_EIP93_Init(void)
{
    HWPAL_Device_t Device; //void*
    EIP93_Status_t res93;

    Adapter_EIP93_Mode = ADAPTER_EIP93_MODE_DISABLED;

    if (!HWPAL_Device_Find("eip93", &Device))
    {
        LOG_CRIT("Adapter_EIP93_Init: Failed to find EIP93 device\n");
        return false;
    }

    res93 = EIP93_Initialize(
                &Adapter_EIP93_IOArea,
                Device);

    if (res93 != EIP93_STATUS_OK)
    {
        LOG_CRIT(
            "Adapter_EIP93_Init: "
            "EIP93_Initialize returned %d\n",
            res93);
        return false;
    }

#ifdef ADAPTER_EIP93PE_INTERRUPTS_ENABLE
    // Configure level of Interrupts
    res93 = EIP93_INT_Configure(
                &Adapter_EIP93_IOArea,
                false,
                false);

    if (res93 != EIP93_STATUS_OK)
    {
        LOG_CRIT(
            "Adapter_EIP93_Init: "
            "EIP93_INT_Configure returned %d\n",
            res93);

        return false;
    }

#endif // ADAPTER_EIP93PE_INTERRUPTS_ENABLE



    Adapter_EIP93_Mode = ADAPTER_EIP93_MODE_IDLE;

    return true;
}
Example #2
0
/*----------------------------------------------------------------------------
 * Adapter_EIP93_SetMode_DHM
 *
 * Return Value
 *     true  Success
 *     false Failed
 */
bool
Adapter_EIP93_SetMode_DHM(void)
{
#ifndef ADAPTER_EIP93_PE_MODE_DHM
    return false;
#else
    EIP93_Status_t res93;

    if (Adapter_EIP93_Mode == ADAPTER_EIP93_MODE_DHM)
    {

        LOG_CRIT("Adapter_EIP93_SetMode_DHM: Already in DHM Mode\n");
        return true;
    }

    if (Adapter_EIP93_Mode != ADAPTER_EIP93_MODE_IDLE)
    {
        LOG_CRIT("Adapter_EIP93_SetMode_DHM: Not possible in mode %d\n",
                 Adapter_EIP93_Mode);
        return false;
    }

    {
        bool fEnableAutoSwapForRegisterData = false;

        res93 = EIP93_DHM_Activate(
                    &Adapter_EIP93_IOArea,
                    ADAPTER_EIP93_DHM_THRESHOLD_INPUT,
                    ADAPTER_EIP93_DHM_THRESHOLD_OUTPUT,
                    fEnableAutoSwapForRegisterData);

        if (res93 != EIP93_STATUS_OK)
        {
            LOG_CRIT(
                "Adapter_EIP93_Init: "
                "EIP93_DHM_Activate returned %d\n",
                res93);
            return false;
        }


        LOG_INFO("EIP93_DHM_Activate called \n");

        Adapter_EIP93_Mode = ADAPTER_EIP93_MODE_DHM;

        LOG_INFO("Adapter: Successfully initialized EIP93v2 in DHM mode\n");
    }

    return true;
#endif /* ADAPTER_EIP93_PE_MODE_DHM */
}
Example #3
0
/*----------------------------------------------------------------------------
 * Adapter_EIP93_UnInit
 */
void
Adapter_EIP93_UnInit(void)
{
    EIP93_Status_t res93;

    res93 = EIP93_Shutdown(&Adapter_EIP93_IOArea);

    if (res93 != EIP93_STATUS_OK)
    {
        LOG_CRIT(
            "Adapter_EIP93_UnInit: "
            "EIP93_Shutdown returned %d\n",
            res93);
    }

    if (Adapter_EIP93_Mode == ADAPTER_EIP93_MODE_ARM)
    {
        // free the ring memory blocks
        DMABuf_Release(Adapter_EIP93_CmdRing_Handle);
#ifdef ADAPTER_EIP93_SEPARATE_RINGS
        DMABuf_Release(Adapter_EIP93_ResRing_Handle);
#endif
    }

    Adapter_EIP93_Mode = ADAPTER_EIP93_MODE_DISABLED;
}
Example #4
0
static void kill_squeal()
{
    LOG_TRACE("Releasing networking");

    /*if (event_base_loopexit(evbase_accept, NULL)) {
        perror("Error shutting down server");
    }*/

    LOG_TRACE("Shutting down IO threads");
    squeal_tp_destroy(server->pool);

    LOG_TRACE("Freeing all resources");
    squeal_config_free(server->config);

    LOG_CRIT("Shutting down Squeal");
    log_release();
}
static int
slad_test_fop_open (struct inode *inode, struct file *file)
{
  unsigned int minor = iminor (inode);

  if (minor <= SLAD_TEST_NO)
    {
      //LOG_CRIT ("slad_test_fop_open(); minor %d\n", minor);
      return 0;

    }
  else
    {

      LOG_CRIT ("slad_test_fop_open(); BAD minor %d\n", minor);
      return -1;
    }
}
static ssize_t
slad_test_fop_cread (struct file *filp, char *buf, size_t count,
                     loff_t * ppos)
{
  unsigned int minor = MINOR (filp->f_dentry->d_inode->i_rdev);

  if (minor < SLAD_TEST_NO)
    {

      //  LOG_CRIT ("slad_test_fop_cread(); so what?\n");

    }
  else
    {

      LOG_CRIT ("slad_test_fop_cread(); BAD minor %d\n", minor);
      return -1;
    }

  return 1;
}
/*----------------------------------------------------------------------------
 * Adapter_DHM_Work_Put
 *
 * This function takes the information in Adapter_DHM_Work and calls
 * EIP93_DHM_Packet_Put. Remaining fields of the command descriptor not
 * looked at by Adapter_DHM_Work_Fill are validated here.
 *
 * Returns PEC_STATUS_OK or one of PEC_ERROR_xxx.
 */
PEC_Status_t
Adapter_DHM_Work_Put(
        const PEC_CommandDescriptor_t * const Cmd_p)
{

    EIP93_DHM_CommandDescriptor_t CD = {0};
    EIP93_Status_t res93;

    if (Cmd_p->Bypass_WordCount > 255)
        return PEC_ERROR_BAD_PARAMETER;

    CD.BypassWordsCount = (uint8_t)Cmd_p->Bypass_WordCount;
    CD.SrcPacketByteCount = Cmd_p->SrcPkt_ByteCount;
    CD.ControlWord = Cmd_p->Control1;

    CD.SARecord_p = Adapter_DHM_Work.SARecord_p;
    CD.SARecordLength = Adapter_DHM_Work.SARecordLength;
    CD.SAState_p = Adapter_DHM_Work.SAState_p;
    CD.SAStateLength = Adapter_DHM_Work.SAStateLength;
      CD.ARC4State_p = Adapter_DHM_Work.ARC4State_p;
    CD.ARC4StateLength = Adapter_DHM_Work.ARC4StateLength;

    LOG_INFO("Adapter_DHM: Calling EIP93_DHM_Packet_Put\n");

    res93 = EIP93_DHM_Packet_Put(
                &Adapter_EIP93_IOArea,
                &CD);

    if (res93 != EIP93_STATUS_OK)
    {
        LOG_CRIT(
            "PEC_Packet_Put: "
            "EIP93_DHM_Packet_Put returned %d\n",
            res93);
        return PEC_ERROR_INTERNAL;
    }


    return PEC_STATUS_OK;
}
/*----------------------------------------------------------------------------
 * PEC_SA_Register
 *
 * SA_Handle1 = SA
 * SA_Handle2 = State (optional)
 * SA_Handle3 = ARC4 State (optional)
 */
PEC_Status_t
PEC_SA_Register(
        DMABuf_Handle_t SA_Handle1,
        DMABuf_Handle_t SA_Handle2,
        DMABuf_Handle_t SA_Handle3)
{
    IDENTIFIER_NOT_USED(&SA_Handle1 > &SA_Handle2);
    IDENTIFIER_NOT_USED(&SA_Handle2 > &SA_Handle3);

    LOG_INFO(
        "PEC_SA_Register: "
        "SA_Handle1,2,3 = %p, %p, %p\n",
        SA_Handle1.p,
        SA_Handle2.p,
        SA_Handle3.p);

    // reset the previous handles
    Adapter_DHM_Work.SA_Handle = Adapter_DMABuf_NullHandle;
    Adapter_DHM_Work.SA_State_Handle = Adapter_DMABuf_NullHandle;
    Adapter_DHM_Work.SA_ARC4State_Handle = Adapter_DMABuf_NullHandle;

    if (!Adapter_DMABuf_IsValidHandle(SA_Handle1))
        return PEC_ERROR_BAD_HANDLE;

    // accepted as the SA Handle
    Adapter_DHM_Work.SA_Handle = SA_Handle1;

    if (Adapter_DMABuf_IsValidHandle(SA_Handle2))
    {
        // make sure it is not identical to SA_Handle1
        if (Adapter_DMABuf_IsSameHandle(&SA_Handle1, &SA_Handle2))
            return PEC_ERROR_BAD_HANDLE;

        // State record is of variable size, but depends on the SA format
        // SA_Rev1: 10 words = 40 bytes
        // SA_Rev2: 22 words = 88 bytes
        // DynSA: 4, 18 or 22 bytes = 16, 72 or 88 bytes
        // verify the buffer is large enough
        // by checking it here, we can assume the fixed size in Packet_Put
        {
            HWPAL_DMAResource_Handle_t DMAHandle;
            HWPAL_DMAResource_Record_t * DMARec_p;

            DMAHandle = Adapter_DMABuf_Handle2DMAResourceHandle(SA_Handle2);
            DMARec_p = HWPAL_DMAResource_Handle2RecordPtr(DMAHandle);
            if (DMARec_p == NULL)
            {
                LOG_WARN(
                    "PEC_Register_SA: "
                    "Address look-up for SA_Handle2 failed\n");

                return PEC_ERROR_BAD_HANDLE;
            }

            if (DMARec_p->host.BufferSize < 16)
            {
                LOG_CRIT(
                    "PEC_Register_SA: "
                 "Rejecting SA_Handle2 for State Record because size %d < 16\n",
                    DMARec_p->host.BufferSize);

                return PEC_ERROR_BAD_HANDLE;
            }
        }

        // accepted as the SA State Record buffer
        Adapter_DHM_Work.SA_State_Handle = SA_Handle2;
    }

    if (Adapter_DMABuf_IsValidHandle(SA_Handle3))
    {
        // make sure it is not identical to SA_Handle1 or SA_Handle2
        if (Adapter_DMABuf_IsSameHandle(&SA_Handle1, &SA_Handle3) ||
            Adapter_DMABuf_IsSameHandle(&SA_Handle2, &SA_Handle3))
        {
            return PEC_ERROR_BAD_HANDLE;
        }

        // ARC4 State record is fixed size 256 bytes
        // verify the buffer is large enough
        // by checking it here, we can assume the fixed size in Packet_Put
        {
            HWPAL_DMAResource_Handle_t DMAHandle;
            HWPAL_DMAResource_Record_t * DMARec_p;

            DMAHandle = Adapter_DMABuf_Handle2DMAResourceHandle(SA_Handle3);
            DMARec_p = HWPAL_DMAResource_Handle2RecordPtr(DMAHandle);
            if (DMARec_p == NULL)
            {
                LOG_WARN(
                    "PEC_Register_SA: "
                    "Address look-up for SA_Handle3 failed\n");

                return PEC_ERROR_BAD_HANDLE;
            }

            if (DMARec_p->host.BufferSize < 256)
            {
                LOG_CRIT(
                    "PEC_Register_SA: "
                 "Rejecting SA_Handle3 for ARC4 State because size %d < 256\n",
                    DMARec_p->host.BufferSize);

                return PEC_ERROR_BAD_HANDLE;
            }
        }

        // accept it as the SA ARC4 State buffer
        Adapter_DHM_Work.SA_ARC4State_Handle = SA_Handle3;
    }

    // this call is not required, so we fake it is OK
    return PEC_STATUS_OK;
}
Example #9
0
/*----------------------------------------------------------------------------
 * Adapter_EIP93_SetMode_Idle
 *
 * Return Value
 *     true  Success
 *     false Failed
 */
bool
Adapter_EIP93_SetMode_Idle(void)
{

   EIP93_Status_t res93 ;

    switch (Adapter_EIP93_Mode)
    {
        case ADAPTER_EIP93_MODE_DISABLED:
            // cannot use EIP93
            return false;

        case ADAPTER_EIP93_MODE_IDLE:
            // already idle
            return true;

        case ADAPTER_EIP93_MODE_DHM:
            res93 = EIP93_Deactivate(&Adapter_EIP93_IOArea);
            if (res93 != EIP93_STATUS_OK)
            {
                LOG_CRIT(
                    "Adapter_EIP93_SetMode_Idle: "
                    "EIP93_Deactivate returned %d\n",
                    res93);
            }


            LOG_INFO("Adapter: Successfully deactivated EIP93 \n");
            Adapter_EIP93_Mode = ADAPTER_EIP93_MODE_IDLE;
            LOG_INFO("Adapter: Successfully deactivated EIP93 \n");
            return true;

        case ADAPTER_EIP93_MODE_ARM:

            res93 = EIP93_Deactivate(&Adapter_EIP93_IOArea);
            if (res93 != EIP93_STATUS_OK)
            {
                LOG_CRIT(
                    "Adapter_EIP93_SetMode_Idle: "
                    "EIP93_Deactivate returned %d\n",
                     res93);
            }
            // free the ring memory blocks
            DMABuf_Release(Adapter_EIP93_CmdRing_Handle);
#ifdef ADAPTER_EIP93_SEPARATE_RINGS
            DMABuf_Release(Adapter_EIP93_ResRing_Handle);
#endif

            Adapter_EIP93_Mode = ADAPTER_EIP93_MODE_IDLE;
            LOG_INFO("Adapter: Successfully deactivated EIP93v2\n");
            return true;


        default:
            break;
    } // switch

    LOG_CRIT("Adapter_EIP93_SetMode_Idle: Unexpected mode %d\n",
            Adapter_EIP93_Mode);

    return false;
}
Example #10
0
/*----------------------------------------------------------------------------
 * Adapter_GetEIP93PhysAddr
 *
 * This routine checks if we have already translated the address for EIP93
 * DMA. If not, we translate it now and cache it in the DMAResource Record.
 * We then return the address.
 *
 * Handle
 *     Must be a valid handle.
 *
 * Return Value
 *     Physical address for the start of the buffer referred to by Handle,
 *     or zero if address translation was not possible.
 */
void
Adapter_GetEIP93PhysAddr(
        DMABuf_Handle_t Handle,
        HWPAL_DMAResource_Handle_t * const DMAHandle_p,
        EIP93_DeviceAddress_t * const EIP93PhysAddr_p)
{
    HWPAL_DMAResource_Handle_t DMAHandle;
    HWPAL_DMAResource_Record_t * Rec_p = NULL;

    if (EIP93PhysAddr_p == NULL)
    {
        LOG_CRIT("Adapter_GetEIP93PhysAddr: PANIC\n");
        return;
    }

    // initialize the output parameters
    if (DMAHandle_p)
        *DMAHandle_p = NULL;

    EIP93PhysAddr_p->Addr = 0;
    EIP93PhysAddr_p->UpperAddr = 0;

    if (!Adapter_DMABuf_IsValidHandle(Handle))
        return;

    {
        // translate the handle
        DMAHandle = Adapter_DMABuf_Handle2DMAResourceHandle(Handle);

        // get the record belonging to this handle
        Rec_p = HWPAL_DMAResource_Handle2RecordPtr(DMAHandle);
    }

    if (Rec_p == NULL)
        return;

    if (DMAHandle_p)
        *DMAHandle_p = DMAHandle;

    if (Rec_p->device.DeviceAddr32 > 1)
        goto PHYS_DONE;

    if (0 == Rec_p->device.DeviceAddr32)
    {
        // first time, so translate
        AddrTrans_Pair_t PairIn;
        AddrTrans_Pair_t PairOut;
        AddrTrans_Status_t res;

        // assume address translation will fail
        Rec_p->device.DeviceAddr32 = 1;
                 // value used inside this function only

        if (Rec_p->alloc.AllocatorRef == ADAPTER_DMABUF_ALLOCATORREF_KMALLOC)
        {
            // kmalloc-allocated buffer

            // address translator needs to know this through alternative-ref
            PairIn.Address_p = Rec_p->host.HostAddr_p;
            PairIn.Domain = ADDRTRANS_DOMAIN_ALTERNATIVE;

            res = AddrTrans_Translate(
                            PairIn,
                            ADAPTER_DMABUF_ALLOCATORREF_KMALLOC,
                            ADDRTRANS_DOMAIN_DEVICE_PE,
                            &PairOut);

            if (res == ADDRTRANS_STATUS_OK)
            {
                // support for 32bit addresses only

                // unsigned long will be 64bit only on 64bit systems
                unsigned long Addr64or32 = (unsigned long)PairOut.Address_p;
                unsigned long HighAddr = Addr64or32;
                HighAddr >>= 16;  // shift in two steps avoids
                HighAddr >>= 16;  // side-effect with failing 32bit shift
                if (HighAddr)
                {
                    LOG_CRIT(
                        "Adapter_EIP93: "
                        "Physical Address too > 4GB not supported!"
                        " (handle=%p)\n",
                        Handle.p);
                    return;     // ## RETURN ##
                }

                Rec_p->device.DeviceAddr32 = (uint32_t)Addr64or32;

#ifdef ADAPTER_EIP93_ARMRING_ENABLE_SWAP
                Rec_p->device.fSwapEndianess = true;
#endif

                goto PHYS_DONE;
            }
Example #11
0
/*----------------------------------------------------------------------------
 * Adapter_EIP93_SetMode_ARM
 *
 * Return Value
 *     true  Success
 *     false Failed
 */
bool
Adapter_EIP93_SetMode_ARM(
        const bool fEnableDynamicSA)
{
#ifndef ADAPTER_EIP93_PE_MODE_ARM
    IDENTIFIER_NOT_USED(fEnableDynamicSA);
    return false;
#else
    EIP93_ARM_Settings_t Settings = {0};
    EIP93_ARM_RingMemory_t RingMemory = {0};
    EIP93_Status_t res93;

    if (Adapter_EIP93_Mode != ADAPTER_EIP93_MODE_IDLE)
    {
        LOG_CRIT("Adapter_EIP93_SetMode_ARM: Not possible in mode %d\n",
            Adapter_EIP93_Mode);
        return false;
    }

/**** allocate memory for the ring ****/

    ZEROINIT(RingMemory);
    // bytes to words conversion from ADAPTER_EIP93_RINGSIZE_BYTES
    RingMemory.RingSizeInWords = Adapter_EIP93_RingProps.Size >> 2;

    {
        DMABuf_Status_t dmares;
        DMABuf_HostAddress_t HostAddr;

        dmares = DMABuf_Alloc(
                        Adapter_EIP93_RingProps,
                        &HostAddr,
                        &Adapter_EIP93_CmdRing_Handle);

        if (dmares != DMABUF_STATUS_OK)
        {
            LOG_CRIT(
                "Adapter_EIP93_Init: "
                "DMABuf_Alloc (Command Ring) returned %d\n",
                dmares);

            return false;
        }

        LOG_INFO(
            "Adapter_EIP93_Init: "
            "CmdRing_Handle=%p\n",
            Adapter_EIP93_CmdRing_Handle.p);

        Adapter_GetEIP93PhysAddr(
                Adapter_EIP93_CmdRing_Handle,
                &RingMemory.CommandRingHandle,
                &RingMemory.CommandRingAddr);

        if (RingMemory.CommandRingAddr.Addr == 0)
        {
            LOG_CRIT(
                "Adapter_EIP93_Init: "
                "Failed to get command ring physical address\n");

            // free the command ring memory
            DMABuf_Release(Adapter_EIP93_CmdRing_Handle);

            return false;       // ## RETURN ##
        }
    }

#ifndef ADAPTER_EIP93_SEPARATE_RINGS
    // not separate rings
    RingMemory.fSeparateRings = false;
#else
    // separat rings
    RingMemory.fSeparateRings = true;

    {
        DMABuf_Status_t dmares;
        DMABuf_HostAddress_t HostAddr;

        dmares = DMABuf_Alloc(
                        Adapter_EIP93_RingProps,
                        &HostAddr,
                        &Adapter_EIP93_ResRing_Handle);

        if (dmares != DMABUF_STATUS_OK)
        {
            LOG_CRIT(
                    "Adapter_EIP93_Init: "
                    "DMABuf_Alloc (Result Ring) returned %d\n",
                    dmares);

            // free the command ring memory
            DMABuf_Release(Adapter_EIP93_CmdRing_Handle);

            return false;
        }

        LOG_INFO(
            "Adapter_EIP93_Init: "
            "ResRing_Handle=%p\n",
            Adapter_EIP93_ResRing_Handle.p);

        Adapter_GetEIP93PhysAddr(
                Adapter_EIP93_ResRing_Handle,
                &RingMemory.ResultRingHandle,
                &RingMemory.ResultRingAddr);
 
        if (RingMemory.ResultRingAddr.Addr == 0)
        {
            LOG_CRIT(
                "Adapter_EIP93_Init: "
                "Failed to get result ring physical address\n");

            // free the ring memories
            DMABuf_Release(Adapter_EIP93_CmdRing_Handle);
            DMABuf_Release(Adapter_EIP93_ResRing_Handle);

            return false;
        }
    }
#endif /* ADAPTER_EIP93_SEPARATE_RINGS */

    // create the engine settings block
    Settings.nPEInputThreshold = ADAPTER_EIP93_DMATHRESHOLD_INPUT;
    Settings.nPEOutputThreshold = ADAPTER_EIP93_DMATHRESHOLD_OUTPUT;
    Settings.nDescriptorDoneCount = ADAPTER_EIP93_DESCRIPTORDONECOUNT;
    Settings.nDescriptorDoneTimeout = ADAPTER_EIP93_DESCRIPTORDONETIMEOUT;
    Settings.nDescriptorPendingCount= ADAPTER_EIP93_DESCRIPTORPENDINGCOUNT;
    Settings.nDescriptorSize = 8 ;
//    Settings.nRingPollDivisor = ADAPTER_EIP93_RINGPOLLDIVISOR;

    Adapter_EIP93_MaxDescriptorsInRing =
            RingMemory.RingSizeInWords /
            EIP93_ARM_DESCRIPTOR_SIZE();

    res93 = EIP93_ARM_Activate(
                &Adapter_EIP93_IOArea,
                &Settings,
                &RingMemory);

    if (res93 != EIP93_STATUS_OK)
    {
        LOG_CRIT(
            "Adapter_EIP93_Init: "
            "EIP93_ARM_Activate returned %d\n",
            res93);

        // free the ring memory blocks
        DMABuf_Release(Adapter_EIP93_CmdRing_Handle);
#ifdef ADAPTER_EIP93_SEPARATE_RINGS
        DMABuf_Release(Adapter_EIP93_ResRing_Handle);
#endif
        return false;
    }

    Adapter_EIP93_Mode = ADAPTER_EIP93_MODE_ARM;

    LOG_INFO("Adapter: Successfully initialized EIP93v2 in ARM mode\n");

    return true;
#endif /* ADAPTER_EIP93_PE_MODE_ARM */
}
static ssize_t
slad_test_fop_cwrite (struct file *filp, const char *buf, 
                      size_t count,
                      loff_t * ppos)
{
  unsigned int minor = MINOR (filp->f_dentry->d_inode->i_rdev);

  SLAD_TEST_DRVCMD drvcmd = { 0 };
  UINT32 st = 0;

  osal_copy_from_app (TRUE, &drvcmd, (void *) buf, 
        sizeof (SLAD_TEST_DRVCMD));

  if (minor < SLAD_TEST_NO)
    {
      switch (drvcmd.cmd)
        {
        case SLAD_TEST_CMD_CONFIGURE_PE:

#ifdef SLAD_TEST_BUILD_FOR_PE
          st = _slad_test_configure_pe (TRUE, drvcmd.pe_confs); //will call PEC_Capabilities_Get & PEC_init (CDR/RDR are allocated and ARM mode is activated)
#endif
          break;

        case SLAD_TEST_CMD_CONFIGURE_PKA:
#if defined (SLAD_TEST_BUILD_FOR_EIP28PKA) || defined (SLAD_TEST_BUILD_FOR_EIP154PKA)
          st = _slad_test_configure_pka (TRUE, drvcmd.pka_confs);
#endif
          break;

        case SLAD_TEST_CMD_CONFIGURE_RNG:
#ifdef SLAD_TEST_BUILD_FOR_RNG
          st = _slad_test_configure_rng (TRUE, drvcmd.rng_confs);
#endif
          break;

        case SLAD_TEST_CMD_CONFIGURE_TEST:
#ifdef SLAD_TEST_BUILD_FOR_PE
          st = _slad_test_configure_test (TRUE, drvcmd.test_confs);
#endif
          break;

        case SLAD_TEST_CMD_NOTE_TESTS_N_DEVICE:
          st =
            _slad_test_note_tests_n_device (TRUE, 
                    drvcmd.test_device_params);
          break;

        case SLAD_TEST_CMD_NOTE_PE_TEST_RECORD:
#ifdef SLAD_TEST_BUILD_FOR_PE
          st = _slad_test_note_pe_test_record (TRUE, drvcmd.pe_tr); //will call PEC_Capabilities_Get, PEC_SA_Register, PEC_Packet_Put, PEC_Packet_Get, PEC_SA_UnRegister, PEC_UnInit
#endif
          break;

        case SLAD_TEST_CMD_NOTE_PKA_RECORD:
#if defined (SLAD_TEST_BUILD_FOR_EIP28PKA) || defined (SLAD_TEST_BUILD_FOR_EIP154PKA)
          st = _slad_test_note_pka_record (TRUE, drvcmd.pka_record, drvcmd.num_pka_pkts);
#endif
          break;

        case SLAD_TEST_CMD_NOTE_RNG_RECORD:
#ifdef SLAD_TEST_BUILD_FOR_RNG
          st = _slad_test_note_rng_record (TRUE, drvcmd.rng_record);
#endif
          break;

        case SLAD_TEST_UNINIT_DEVICES:
#ifdef SLAD_TEST_BUILD_FOR_PE
          st = slad_test_uninit_devices (); //will call PEC_UnInit
#endif
          break;

        default:
          printk ("\n Invalid command \n");
          st = SLAD_TEST_STAT_COMMAND_INVALID;
          break;
        }


      drvcmd.status = st;

      osal_copy_to_app (TRUE, (void *) buf, &drvcmd,
                        sizeof (SLAD_TEST_DRVCMD));

    }
  else
    {

      LOG_CRIT ("slad_test_fop_cwrite(); BAD minor %d\n", minor);
      return -1;
    }

  return 1;
}