Exemplo 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;
}
Exemplo n.º 2
0
/*----------------------------------------------------------------------------*/
BOOL
kalDevWriteWithSdioCmd52 (
    IN P_GLUE_INFO_T    prGlueInfo,
    IN UINT_32          u4Addr,
    IN UINT_8           ucData
    )
{
    UINT_32 u4RegValue;
    BOOLEAN bRet;
    GLUE_SPIN_LOCK_DECLARATION();

    ASSERT(prGlueInfo);

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

    /* 1. there is no single byte access support for eHPI, use 4-bytes write-after-read approach instead */
    if(kalDevRegRead_impl(prGlueInfo, u4Addr, &u4RegValue) == TRUE) {
        u4RegValue &= 0x00;
        u4RegValue |= ucData;

        bRet = kalDevRegWrite_impl(prGlueInfo, u4Addr, u4RegValue);
    }
    else {
        bRet = FALSE;
    }

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

    return bRet;
}
Exemplo n.º 3
0
/*----------------------------------------------------------------------------*/
BOOL kalDevRegWrite(P_GLUE_INFO_T prGlueInfo, IN UINT_32 u4Register, IN UINT_32 u4Value)
{
	GLUE_SPIN_LOCK_DECLARATION();

	ASSERT(prGlueInfo);

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

	/* 1. I/O stuff */
	kalDevRegWrite_impl(prGlueInfo, u4Register, u4Value);

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

	return TRUE;
}