Ejemplo n.º 1
0
/*----------------------------------------------------------------------------*/
BOOL
kalDevPortWrite(
    P_GLUE_INFO_T  prGlueInfo,
    IN UINT_16     u2Port,
    IN UINT_16     u2Len,
    IN PUINT_8     pucBuf,
    IN UINT_16     u2ValidInBufSize
    )
{
    UINT_32 i;
    GLUE_SPIN_LOCK_DECLARATION();

    ASSERT(prGlueInfo);

    /* 0. acquire spinlock */
    GLUE_ACQUIRE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS);

    /* 1. indicate correct length to HIFSYS if larger than 4-bytes */
    if(u2Len > 4) {
        kalDevRegWrite_impl(prGlueInfo, MCR_EHTCR, ALIGN_4(u2Len));
    }

    /* 2. address cycle */
#if EHPI16
    writew(u2Port, prGlueInfo->rHifInfo.mcr_addr_base);
#elif EHPI8
    writew((u2Port & 0xFF), prGlueInfo->rHifInfo.mcr_addr_base);
    writew(((u2Port & 0xFF00) >> 8), prGlueInfo->rHifInfo.mcr_addr_base);
#endif

    /* 3. data cycle */
    for(i = 0 ; i < ALIGN_4(u2Len) ; i += 4) {
#if EHPI16
        writew((UINT_32)(*((PUINT_16) &(pucBuf[i]))), prGlueInfo->rHifInfo.mcr_data_base);
        writew((UINT_32)(*((PUINT_16) &(pucBuf[i+2]))), prGlueInfo->rHifInfo.mcr_data_base);
#elif EHPI8
        writew((UINT_32)(*((PUINT_8)  &(pucBuf[i]))), prGlueInfo->rHifInfo.mcr_data_base);
        writew((UINT_32)(*((PUINT_8)  &(pucBuf[i+1]))), prGlueInfo->rHifInfo.mcr_data_base);
        writew((UINT_32)(*((PUINT_8)  &(pucBuf[i+2]))), prGlueInfo->rHifInfo.mcr_data_base);
        writew((UINT_32)(*((PUINT_8)  &(pucBuf[i+3]))), prGlueInfo->rHifInfo.mcr_data_base);
#endif
    }
 
    /* 4. restore length to 4 if necessary */
    if(u2Len > 4) {
        kalDevRegWrite_impl(prGlueInfo, MCR_EHTCR, 4);
    }

    /* 5. release spin lock */
    GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_EHPI_BUS);

    return TRUE;
}
Ejemplo n.º 2
0
/*----------------------------------------------------------------------------*/
VOID
staRecInitialize (
    IN P_ADAPTER_T prAdapter
    )
{
    P_STA_INFO_T prStaInfo;
    PUINT_8 pucMemHandle;
    P_STA_RECORD_T prStaRec;
    UINT_32 i;


    ASSERT(prAdapter);
    prStaInfo = &prAdapter->rStaInfo;

    //4 <0> Clear allocated memory.
    kalMemZero((PVOID) prStaInfo->pucStaRecCached, prStaInfo->u4StaRecCachedSize);

    ASSERT(IS_ALIGN_4((UINT_32)prStaInfo->pucStaRecCached));

    pucMemHandle = prStaInfo->pucStaRecCached;

    LINK_INITIALIZE(&prStaInfo->rFreeStaRecList);

    for (i = 0; i < CFG_MAX_NUM_STA_RECORD; i++) {

        prStaRec = (P_STA_RECORD_T)pucMemHandle;

        STA_RECORD_SET_GUID(prStaRec);

        LINK_INSERT_TAIL(&prStaInfo->rFreeStaRecList, &prStaRec->rLinkEntry);

        pucMemHandle += ALIGN_4(sizeof(STA_RECORD_T));
    }

    /* Check if the memory allocation consist with this initialization function */
    ASSERT((UINT_32)(pucMemHandle - prStaInfo->pucStaRecCached) == prStaInfo->u4StaRecCachedSize);

    for (i = 0; i < STA_RECORD_HASH_NUM; i++) {
        LINK_INITIALIZE(&prStaInfo->arValidStaRecList[i]);
    }

    prStaInfo->ucValidStaRecNum = 0;

    return;
} /* end of staRecInitialize() */
Ejemplo n.º 3
0
    void Service::writeEntry(ComponentDesc* i_td,
                             trace_hash_val i_hash,
                             const char * i_fmt,
                             uint32_t i_line,
                             uint32_t i_type,
                             va_list i_args)
    {
        // Skip writing trace if debug is disabled.
        if (unlikely(i_type == TRACE_DEBUG))
        {
            if ((!i_td->iv_debugEnabled) &&
                (!g_debugSettings.globalDebugEnable))
            {
                return;
            }
        }

        #ifdef CONFIG_CONSOLE_OUTPUT_TRACE
        {
            va_list args;
            va_copy(args, i_args);
            #ifdef CONFIG_CONSOLE_OUTPUT_TRACE_COMP_NAME
            if ( !strcmp(i_td->iv_compName,
                         CONFIG_CONSOLE_OUTPUT_TRACE_COMP_NAME) )
            {
            #endif
                CONSOLE::vdisplayf(i_td->iv_compName, i_fmt, i_args);
            #ifdef CONFIG_CONSOLE_OUTPUT_TRACE_COMP_NAME
            }
            #endif
            va_end(args);
        }
        #endif

        do
        {
            // Get the right buffer for this component.
            Buffer* l_buffer = iv_buffers[i_td->iv_bufferType];

            // Copy the current time.
            trace_entry_stamp_t l_time;
            _createTimeStamp(&l_time);

            // Sizes for trace entry.
            uint32_t l_size = 0;
            uint32_t l_num_args = 0;
            uint32_t l_num_words = 0;

            // Maps of arguments to special types.
            uint64_t l_str_map = 0, l_char_map = 0, l_double_map = 0;

            va_list l_args;
            va_copy(l_args, i_args);

            // Parse the fmt list to determine the types/sizes of each
            // argument.
            while(NULL != (i_fmt = strchr(i_fmt, '%')))
            {
                i_fmt++;

                switch (*i_fmt)
                {
                    case '%':
                        break;

                    case 's': // string.
                        l_str_map |= (1 << l_num_args);
                        l_num_args++;
                        l_num_words++;
                        l_size += ALIGN_4(strlen(va_arg(l_args, char*)) + 1);
                        break;

                    case 'c': // character.
                        l_char_map |= (1 << l_num_args);
                        l_num_args++;
                        l_num_words++;
                        va_arg(l_args, uint32_t);
                        l_size += sizeof(uint32_t);
                        break;

                    case 'e': // doubles.
                    case 'f':
                    case 'g':
                        l_double_map |= (1 << l_num_args);
                        l_num_args++;
                        l_num_words += 2;
                        va_arg(l_args, double);
                        l_size += sizeof(double);
                        break;

                    default: // uint64_t-sized argument.
                        l_num_args++;
                        l_num_words += 2;
                        va_arg(l_args, uint64_t);
                        l_size += sizeof(uint64_t);
                        break;
                }
                i_fmt++;
            }

            va_end(l_args);

            // Ensure we don't have too many arguments.
            if (l_num_args > TRAC_MAX_ARGS)
            {
                // Simply reducing the number of arguments and continuing
                // causes FSP trace to crash.  See defect 864438.
                //l_num_args = TRAC_MAX_ARGS;
                break;
            }

            // Claim an entry from the buffer.
            uint32_t l_realSize = ALIGN_4(sizeof(trace_bin_entry_t) + l_size);
            Entry* l_entry = l_buffer->claimEntry(i_td, l_realSize);
            if (NULL == l_entry)
            {
                break;
            }

            // Copy contents into the 'fsp-trace'-style structure.
            trace_bin_entry_t* l_binEntry =
                reinterpret_cast<trace_bin_entry_t*>(&l_entry->data[0]);

            l_binEntry->stamp = l_time;
            l_binEntry->head.length = l_size;
            l_binEntry->head.tag = TRACE_COMP_TRACE;
            l_binEntry->head.hash = i_hash;
            l_binEntry->head.line = i_line;


            // Copy arguments into the 'fsp-trace' entry's data section.
            char* l_dataOut = reinterpret_cast<char*>(&l_binEntry->data[0]);
            for (size_t i = 0; i < l_num_args; i++)
            {
                // String.
                if (l_str_map & (1 << i))
                {
                    char* str = va_arg(i_args, char*);
                    uint32_t strSize = strlen(str);

                    memcpy(l_dataOut, str, strSize+1);
                    l_dataOut += ALIGN_4(strSize + 1);
                }
                // Single character.
                else if (l_char_map & (1 << i))
                {
                    *(reinterpret_cast<uint32_t*>(l_dataOut)) =
                        va_arg(i_args, uint32_t);
                    l_dataOut += sizeof(uint32_t);
                }
                // Doubles.
                else if (l_double_map & (1 << i))
                {
                    *(reinterpret_cast<double*>(l_dataOut)) =
                        va_arg(i_args, double);
                    l_dataOut += sizeof(double);
                }