mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-10-31 06:11:10 -04:00
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@193 4ee2a332-4b2b-5046-8439-1ba90f034370
178 lines
6.5 KiB
C
178 lines
6.5 KiB
C
/*---------------------------------------------------------------------------*
|
|
Project: TwlSDK - library - aes
|
|
File: aes_transfer.h
|
|
|
|
Copyright 2007 Nintendo. All rights reserved.
|
|
|
|
These coded instructions, statements, and computer programs contain
|
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
Company Ltd., and are protected by Federal copyright law. They may
|
|
not be disclosed to third parties or copied or duplicated in any form,
|
|
in whole or in part, without the prior written consent of Nintendo.
|
|
|
|
$Log: $
|
|
$NoKeywords: $
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef TWL_AES_TRANSFER_H_
|
|
#define TWL_AES_TRANSFER_H_
|
|
|
|
#include <twl/types.h>
|
|
#include <twl/mi/exDma.h>
|
|
#include <twl/aes/common/assert.h>
|
|
|
|
#define AES_DMA_ONESHOT_SIZE 16
|
|
#define AES_DMA_BLOCK_SIZE MI_EXDMA_BLOCK_16B
|
|
#define AES_DMA_INTERVAL 8
|
|
#define AES_DMA_PRESCALER MI_EXDMA_PRESCALER_1
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*===========================================================================*/
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: AES_DmaSend
|
|
|
|
Description: AES DMA send by AES input FIFO timing.
|
|
Should call prior to the AES_Start*().
|
|
Sync version.
|
|
|
|
Arguments: dmaNo : DMA channel No. (4 - 7)
|
|
src : source address
|
|
length : transfer length (byte) (multiple of 16 bytes)
|
|
|
|
Returns: None
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void AES_DmaSend(u32 dmaNo, const void *src, u32 length)
|
|
{
|
|
AES_ASSERT_DATA_LENGTH(length);
|
|
MIi_ExDmaSendCore( dmaNo, src, (void*)REG_AES_IFIFO_ADDR, length, AES_DMA_ONESHOT_SIZE,
|
|
AES_DMA_BLOCK_SIZE, AES_DMA_INTERVAL, AES_DMA_PRESCALER,
|
|
MI_EXDMA_CONTINUOUS_OFF, MI_EXDMA_SRC_RLD_OFF, MI_EXDMA_DEST_RLD_OFF,
|
|
MI_EXDMA_TIMING_AES_IN );
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: MIi_AesExDmaSendAsync
|
|
|
|
Description: AES DMA send by AES input FIFO timing.
|
|
Should call prior to the AES_Start*().
|
|
Async version.
|
|
|
|
Arguments: dmaNo : DMA channel No. (4 - 7)
|
|
src : source address
|
|
length : transfer length (byte) (multiple of 16 bytes)
|
|
|
|
Returns: None
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void AES_DmaSendAsync(u32 dmaNo, const void *src, u32 length)
|
|
{
|
|
AES_ASSERT_DATA_LENGTH(length);
|
|
MIi_ExDmaSendAsyncCore( dmaNo, src, (void*)REG_AES_IFIFO_ADDR, length, AES_DMA_ONESHOT_SIZE,
|
|
AES_DMA_BLOCK_SIZE, AES_DMA_INTERVAL, AES_DMA_PRESCALER,
|
|
MI_EXDMA_CONTINUOUS_OFF, MI_EXDMA_SRC_RLD_OFF, MI_EXDMA_DEST_RLD_OFF,
|
|
MI_EXDMA_TIMING_AES_IN );
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: AES_DmaRecv
|
|
|
|
Description: AES DMA receive by AES output FIFO timing.
|
|
Should call prior to the AES_Start*().
|
|
Sync version.
|
|
|
|
Arguments: dmaNo : DMA channel No. (4 - 7)
|
|
dest : destination address
|
|
length : transfer length (byte) (multiple of 16 bytes)
|
|
|
|
Returns: None
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void AES_DmaRecv(u32 dmaNo, void *dest, u32 length)
|
|
{
|
|
AES_ASSERT_DATA_LENGTH(length);
|
|
MIi_ExDmaRecvCore( dmaNo, (void*)REG_AES_OFIFO_ADDR, dest, length, AES_DMA_ONESHOT_SIZE,
|
|
AES_DMA_BLOCK_SIZE, AES_DMA_INTERVAL, AES_DMA_PRESCALER,
|
|
MI_EXDMA_CONTINUOUS_OFF, MI_EXDMA_SRC_RLD_OFF, MI_EXDMA_DEST_RLD_OFF,
|
|
MI_EXDMA_TIMING_AES_OUT );
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: AES_DmaRecvAsync
|
|
|
|
Description: AES DMA receive by AES output FIFO timing.
|
|
Should call prior to the AES_Start*().
|
|
Async version.
|
|
|
|
Arguments: dmaNo : DMA channel No. (4 - 7)
|
|
dest : destination address
|
|
length : transfer length (byte) (multiple of 16 bytes)
|
|
|
|
Returns: None
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void AES_DmaRecvAsync(u32 dmaNo, void *dest, u32 length)
|
|
{
|
|
AES_ASSERT_DATA_LENGTH(length);
|
|
MIi_ExDmaRecvAsyncCore( dmaNo, (void*)REG_AES_OFIFO_ADDR, dest, length, AES_DMA_ONESHOT_SIZE,
|
|
AES_DMA_BLOCK_SIZE, AES_DMA_INTERVAL, AES_DMA_PRESCALER,
|
|
MI_EXDMA_CONTINUOUS_OFF, MI_EXDMA_SRC_RLD_OFF, MI_EXDMA_DEST_RLD_OFF,
|
|
MI_EXDMA_TIMING_AES_OUT );
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: AES_CpuSend
|
|
|
|
Description: send data to AES input fifo by CPU.
|
|
Should call prior to the AES_Start*().
|
|
Sync version.
|
|
|
|
Arguments: src : source address
|
|
length : transfer length (byte) (multiple of 16 bytes)
|
|
|
|
Returns: None
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void AES_CpuSend(const void *src, u32 length)
|
|
{
|
|
const u32 *ptr = src;
|
|
SDK_ASSERT(src && ((u32)src & 0x3) == 0);
|
|
AES_ASSERT_DATA_LENGTH(length);
|
|
while (length > 0) {
|
|
AES_WaitInputFifoNotFull();
|
|
reg_AES_AES_IFIFO = *ptr++;
|
|
length -= sizeof(u32);
|
|
}
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: AES_CpuRecv
|
|
|
|
Description: receive data from AES input fifo by CPU.
|
|
Should call prior to the AES_Start*().
|
|
Sync version.
|
|
|
|
Arguments: dest : destination address
|
|
length : transfer length (byte) (multiple of 16 bytes)
|
|
|
|
Returns: None
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void AES_CpuRecv(void *dest, u32 length)
|
|
{
|
|
u32 *ptr = dest;
|
|
SDK_ASSERT(dest && ((u32)dest & 0x3) == 0);
|
|
AES_ASSERT_DATA_LENGTH(length);
|
|
while (length > 0) {
|
|
AES_WaitOutputFifoNotEmpty();
|
|
*ptr++ = reg_AES_AES_OFIFO;
|
|
length -= sizeof(u32);
|
|
}
|
|
}
|
|
|
|
/*===========================================================================*/
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* TWL_AES_TRANSFER_H_ */
|