mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-06-18 16:55:31 -04:00
(shirait) buddyアロケータ追加(OSにヒープ機能が出来るまでのつなぎ)
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@277 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
ba4a3554cf
commit
4ec6c49ec0
46
trunk/firmware/build/libraries/heap/ARM11/Makefile
Normal file
46
trunk/firmware/build/libraries/heap/ARM11/Makefile
Normal file
@ -0,0 +1,46 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: CtrBrom - libraries - mi
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2008-2009 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.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev$
|
||||
# $Author$
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS =
|
||||
SUBMAKES =
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# build ARM & THUMB libraries
|
||||
FIRM_CODEGEN_ALL ?= TRUE
|
||||
|
||||
SRCDIR = . ../common
|
||||
|
||||
SRCS = \
|
||||
buddy_allocator.c \
|
||||
|
||||
TARGET_LIB = libheap$(FIRM_LIBSUFFIX).a
|
||||
|
||||
include $(CTRFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(FIRM_INSTALL_LIBDIR)
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build: $(TARGETS)
|
||||
|
||||
include $(CTRFIRM_ROOT)/build/buildtools/modulerules
|
||||
|
||||
#===== End of Makefile =====
|
54
trunk/firmware/build/libraries/heap/ARM9/Makefile
Normal file
54
trunk/firmware/build/libraries/heap/ARM9/Makefile
Normal file
@ -0,0 +1,54 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: CtrBrom - libraries_sp - mi
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2008-2009 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.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev$
|
||||
# $Author$
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS =
|
||||
#SUBMAKES = Makefile.CALLTRACE \
|
||||
# Makefile.FUNCTIONCOST
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# build ARM & THUMB libraries
|
||||
FIRM_CODEGEN_ALL ?= TRUE
|
||||
|
||||
# Codegen for sub processer
|
||||
FIRM_PROC = ARM9
|
||||
|
||||
SRCDIR = . ../common
|
||||
|
||||
SRCS = \
|
||||
buddy_allocator.c \
|
||||
|
||||
TARGET_LIB = libheap_sp$(FIRM_LIBSUFFIX).a
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(CTRFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(FIRM_INSTALL_LIBDIR)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build: $(TARGETS)
|
||||
|
||||
include $(CTRFIRM_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
34
trunk/firmware/build/libraries/heap/Makefile
Normal file
34
trunk/firmware/build/libraries/heap/Makefile
Normal file
@ -0,0 +1,34 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: CtrBrom - libraries - mi
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2008 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.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev$
|
||||
# $Author$
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(CTRFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM11
|
||||
|
||||
#ifdef CTR_WITH_ARM9
|
||||
SUBDIRS += ARM9
|
||||
#endif
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(CTRFIRM_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
445
trunk/firmware/build/libraries/heap/common/buddy_allocator.c
Normal file
445
trunk/firmware/build/libraries/heap/common/buddy_allocator.c
Normal file
@ -0,0 +1,445 @@
|
||||
|
||||
#include <brom.h>
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
定数定義
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define MIN_ORDER 1 /* たぶん意味なし */
|
||||
#define MAX_ORDER 14 /* このシステムが管理できるメモリ容量が(2のMAX_ORDER乗)*PAGE_SIZEバイトになる */
|
||||
#define PAGE_SIZE 512 /* 最小管理単位(バイト) */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
マクロ
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define CHECK(exp) ((void)0)
|
||||
#define i_osAlign(x, a) (((x)+(a)-1)&~((a)-1)) /*アラインメントを取る*/
|
||||
#define o2num( order ) (1 << (order)) /*2のorder乗*/
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
型定義
|
||||
*---------------------------------------------------------------------------*/
|
||||
typedef unsigned int uint;
|
||||
typedef unsigned char byte;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
構造体定義
|
||||
*---------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
uint max_order; /* Buddyシステムで扱うサイズを2のsize_order乗として表したもの */
|
||||
/* max_order=14なら16384バイト */
|
||||
|
||||
uint page_size; /* 最小管理単位のサイズ */
|
||||
|
||||
void *map; /* 二分木ビットマップへのポインタ */
|
||||
/* 1バイト以上かつ(2のmax_order乗)*2/8 バイト以上必要 */
|
||||
/* max_order=14なら4096 Byte */
|
||||
|
||||
void *mem; /* Buddyシステムが管理するメモリへのポインタ */
|
||||
/* (2のmax_order乗)*page_size バイト必要 */
|
||||
/* max_order=14,page_size=4なら65536 Byte */
|
||||
} Buddy;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
static変数
|
||||
*---------------------------------------------------------------------------*/
|
||||
static Buddy my_buddy; //実体
|
||||
static Buddy *buddy = &my_buddy; //これを使う
|
||||
//static byte map[4096];
|
||||
//static byte mem[16384 * PAGE_SIZE];
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
static関数
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void mapclr( void *map, uint i );
|
||||
static void mapset( void *map, uint i );
|
||||
static int mapget( void *map, uint i );
|
||||
//static uint map_search( void *map, uint index_order );
|
||||
static uint map_alloc( void *map, uint index_order );
|
||||
static void map_free( void *map, uint i );
|
||||
static void *buddy_alloc( Buddy *buddy, uint order );
|
||||
static void buddy_free( Buddy *buddy, uint order, void *ptr );
|
||||
static BOOL buddy_init( Buddy *buddy, uint max_order, uint page_size, void *map, void *mem );
|
||||
|
||||
asm u32 i_clz( u32 r0);
|
||||
asm uint map_search( u32 map, u32 i); //こちらのmap_searchの方が6.7倍速い
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
管理領域のビットマップを操作する低レベル関数
|
||||
*---------------------------------------------------------------------------*/
|
||||
/* map の i番目のビットを0(使用中)にする */
|
||||
static void mapclr( void *map, uint i )
|
||||
{
|
||||
u32 *temp_ptr;
|
||||
u32 word_count;
|
||||
u32 bit_count;
|
||||
|
||||
// osTPrintf("%s n=%d\n",__FUNCTION__,i);
|
||||
word_count = i / 32;
|
||||
bit_count = 31 - (i % 32);
|
||||
|
||||
temp_ptr = (u32 *)map + word_count;
|
||||
*temp_ptr &= ~(1 << bit_count);
|
||||
}
|
||||
|
||||
/* map の i番目のビットを1(未使用)にする */
|
||||
static void mapset( void *map, uint i )
|
||||
{
|
||||
u32 *temp_ptr;
|
||||
u32 word_count;
|
||||
u32 bit_count;
|
||||
|
||||
// osTPrintf("%s n=%d\n",__FUNCTION__,i);
|
||||
word_count = i / 32;
|
||||
bit_count = 31 - (i % 32);
|
||||
|
||||
temp_ptr = (u32 *)map + word_count;
|
||||
*temp_ptr |= (1 << bit_count);
|
||||
}
|
||||
|
||||
/* map の i番目のビットを取得する */
|
||||
static int mapget( void *map, uint i )
|
||||
{
|
||||
u32 *temp_ptr;
|
||||
u32 word_count;
|
||||
u32 bit_count;
|
||||
|
||||
word_count = i / 32;
|
||||
bit_count = 31 - (i % 32);
|
||||
|
||||
temp_ptr = (u32 *)map + word_count;
|
||||
|
||||
if( *temp_ptr & (1 << bit_count) ) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: map_search
|
||||
|
||||
Description: 指定のオーダーから空きを探し、mapの何番目にあるかを返す。
|
||||
無ければ0を返す。指定以外のオーダーは調べない。
|
||||
|
||||
Arguments: map :
|
||||
index_order : Bitmap中の 2 の index_order 乗番目という意味
|
||||
|
||||
Returns:
|
||||
*---------------------------------------------------------------------------*/
|
||||
#if 0
|
||||
static uint map_search( void *map, uint index_order )
|
||||
{
|
||||
uint num, end_of_num;
|
||||
uint i;
|
||||
|
||||
/*search開始位置を求める*/
|
||||
num = ( 1 << index_order);
|
||||
|
||||
/* num から空き(ビット1)を探す */
|
||||
end_of_num = (num << 1) - 1;
|
||||
while( 1 ) {
|
||||
if( mapget( map, num ) ) {
|
||||
return num;
|
||||
}
|
||||
num++;
|
||||
if( num > end_of_num ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#include <brom/code32.h>
|
||||
asm uint map_search( u32 map, u32 index_order)
|
||||
{
|
||||
mov r2, #1
|
||||
mov r2, r2, lsl r1 //r2:num = 1 << index_order; 以降r1壊してOK
|
||||
mov r3, r2, lsl #1 //
|
||||
sub r3, r3, #1 //r3:end_of_num = (num << 1) - 1;
|
||||
mov r1, r2, lsr #5 //r1:word_count = num/32;
|
||||
mov r1, r1, lsl #2 //r1:byte_count = word_count*4
|
||||
add r1, r1, r0 //r1:word_adr = byte_count+ map; 以降r0壊してOK
|
||||
_ms2_loop
|
||||
ldr r12, [r1] //r12:temp_ptr = *(u32*)(word_adr);
|
||||
and r0, r2, #31 //オーダー開始ビット位置がword倍数でない場合は
|
||||
mov r12, r12, lsl r0 //予めシフトしておく
|
||||
clz r12, r12
|
||||
subs r0, r12, #32 //r0:r12-32
|
||||
bne _ms2_found //if( r0!=0) jump; //見つかったらジャンプ
|
||||
add r2, r2, #32 //num += 32;
|
||||
add r1, r1, #4 //word_adr += 4;
|
||||
subs r0, r3, r2 //r0:end_of_num - num
|
||||
bcc _ms2_notfound //ボロー時ジャンプ
|
||||
b _ms2_loop //繰り返し
|
||||
_ms2_found
|
||||
add r2, r2, r12 //r2:num=num+r12
|
||||
subs r0, r3, r2 //r0:end_of_num - num
|
||||
bcc _ms2_notfound //ボロー時ジャンプ
|
||||
mov r0, r2
|
||||
bx lr
|
||||
_ms2_notfound
|
||||
mov r0, #0;
|
||||
bx lr
|
||||
}
|
||||
#include <brom/codereset.h>
|
||||
#endif
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: map_alloc
|
||||
|
||||
Description: 指定のオーダーから空きを探し、なければより小さいオーダー
|
||||
(サイズの大きい方)から再帰的に分割する。
|
||||
空きがあればそのビットを0にして、その位置を返す。
|
||||
|
||||
Arguments: map :
|
||||
index_order : Bitmap中の 2 の index_order 乗番目という意味
|
||||
|
||||
Returns:
|
||||
*---------------------------------------------------------------------------*/
|
||||
static uint map_alloc( void *map, uint index_order )
|
||||
{
|
||||
uint found;
|
||||
uint i;
|
||||
|
||||
// osTPrintf( "map_search:0x%x\n", index_order);
|
||||
found = map_search( (u32)map, index_order );
|
||||
|
||||
if( found == 0 ) {
|
||||
if( index_order == 0 ) {
|
||||
return 0;
|
||||
}
|
||||
i = map_alloc( map, index_order - 1 );
|
||||
if( i == 0 ) {
|
||||
return 0 ;
|
||||
}
|
||||
found = i*2;
|
||||
mapset( map, i*2+1 );
|
||||
}
|
||||
mapclr( map, found );
|
||||
return found;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: map_free
|
||||
|
||||
Description: map_alloc で得た位置iにあたる領域を開放する。
|
||||
相棒も空きだったら、より粗いオーダーレベルで解放する(領域を繋げる)。
|
||||
|
||||
Arguments: map :
|
||||
i :
|
||||
|
||||
Returns:
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void map_free( void *map, uint i )
|
||||
{
|
||||
/*(i^1)は相棒を表す*/
|
||||
if( mapget( map, i^1)) {
|
||||
mapclr( map, i^1);
|
||||
map_free( map, i/2);
|
||||
}else {
|
||||
mapset( map, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: buddy_alloc
|
||||
|
||||
Description: メモリ割り当て
|
||||
map_alloc で領域を確保し、実際のメモリアドレスを算出する
|
||||
|
||||
Arguments: buddy :
|
||||
order :
|
||||
|
||||
Returns:
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void *buddy_alloc( Buddy *buddy, uint order )
|
||||
{
|
||||
uint found, offset;
|
||||
|
||||
if( buddy->max_order < order ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
found = map_alloc( buddy->map, buddy->max_order - order ); //オーダーが0~max_orderになる
|
||||
if( found == 0 ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CHECK( (found >= o2num(buddy->max_order - order)) );
|
||||
|
||||
offset = (found - o2num(buddy->max_order - order)) * o2num(order);
|
||||
return (void *)((uint)(buddy->mem) + offset * buddy->page_size);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: buddy_free
|
||||
|
||||
Description: メモリ解放
|
||||
実際のメモリアドレスから map の位置を算出し、map_freeで解放する
|
||||
|
||||
Arguments: buddy :
|
||||
order :
|
||||
|
||||
Returns:
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void buddy_free( Buddy *buddy, uint order, void *ptr )
|
||||
{
|
||||
uint i, offset;
|
||||
|
||||
CHECK( ptr >= buddy->mem );
|
||||
|
||||
offset = ((uint)ptr - (uint)buddy->mem) / buddy->page_size;
|
||||
i = offset / o2num(order) + o2num(buddy->max_order - order);
|
||||
map_free( buddy->map, i );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: buddy_init
|
||||
|
||||
Description: メモリ確保システムのコンフィグレーション
|
||||
ヒープの大きさや最小管理サイズなどを設定する
|
||||
|
||||
Arguments:
|
||||
|
||||
Returns: TRUE / FALSE
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL buddy_init( Buddy *buddy, uint max_order, uint page_size, void *map, void *mem )
|
||||
{
|
||||
if ( (max_order < MIN_ORDER) && (MAX_ORDER < max_order) ) {
|
||||
return FALSE;
|
||||
}
|
||||
miCpuFill8( map, 0, o2num(max_order) * 2 / 8 ); //8で割ってバイト単位にする
|
||||
mapset( map, 1 );
|
||||
buddy->max_order = max_order;
|
||||
buddy->page_size = page_size;
|
||||
buddy->map = map;
|
||||
buddy->mem = mem;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*ここからAPI*/
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: buddy_allocator_init
|
||||
|
||||
Description: メモリ確保システムの初期化
|
||||
sizeによっては、使われないheap領域が大きくなることに注意
|
||||
|
||||
Arguments: none
|
||||
|
||||
Returns: none
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL buddy_allocator_init( void* heap, u32 size)
|
||||
{
|
||||
u32 map;
|
||||
u32 mem;
|
||||
u32 aligned_size;
|
||||
u32 max_order;
|
||||
u32 mult_of_2;
|
||||
u32 map_size, mem_size;
|
||||
|
||||
/*heapアドレスとサイズから、管理領域とメモリ領域を算出*/
|
||||
map = i_osAlign( (u32)(heap), 4);
|
||||
if( (map - (u32)(heap)) >= size) {
|
||||
return( FALSE);
|
||||
}
|
||||
aligned_size = size - (map - (u32)(heap));
|
||||
mult_of_2 = (8 * aligned_size) / (8 * PAGE_SIZE + 2);
|
||||
max_order = 31 - i_clz( mult_of_2);
|
||||
map_size = ((1 << max_order) * 2) / 8;
|
||||
mem = map + map_size;
|
||||
mem_size = ((1 << max_order) * PAGE_SIZE);
|
||||
|
||||
/* Buddy *buddy, uint max_order, uint page_size, void *map, void *mem */
|
||||
if( buddy_init( buddy, (uint)max_order, (uint)PAGE_SIZE, (void *)map, (void *)mem)) {
|
||||
osTPrintf( "buddy allocator init success!\n");
|
||||
osTPrintf( "heap address : 0x%x, heap size : 0x%x\n", heap, size);
|
||||
osTPrintf( "map address : 0x%x, map size : 0x%x\n", map, map_size);
|
||||
osTPrintf( "mem address : 0x%x, mem size : 0x%x\n", mem, mem_size);
|
||||
osTPrintf( "max order : 0x%x\n", max_order);
|
||||
return( TRUE);
|
||||
}else {
|
||||
osTPrintf( "buddy allocator init fail!\n");
|
||||
return( FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
#include <brom/code32.h>
|
||||
asm u32 i_clz( u32 r0)
|
||||
{
|
||||
clz r0, r0
|
||||
bx lr
|
||||
}
|
||||
#include <brom/codereset.h>
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: malloc
|
||||
|
||||
Description: メモリ確保(アラインメント指定できない)
|
||||
|
||||
Arguments: size : サイズ
|
||||
|
||||
Returns: void* : アドレス
|
||||
*---------------------------------------------------------------------------*/
|
||||
void *osAlloc( uint size )
|
||||
{
|
||||
void *ptr;
|
||||
uint order;
|
||||
|
||||
/*指定のサイズに一番近いオーダーを探す*/
|
||||
for( order=0; order<=MAX_ORDER; order++) {
|
||||
if( (size + sizeof(uint)) <= (o2num(order) * PAGE_SIZE) ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( order > MAX_ORDER ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ptr = buddy_alloc( buddy, order ); //order は 0~MAX_ORDER
|
||||
if( ptr == NULL ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* 割り当てた領域の先頭に order を格納し、その分ポインタをずらす
|
||||
*/
|
||||
*(*(uint**)&ptr) = order;
|
||||
*(uint*)&ptr += sizeof(uint);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: free
|
||||
|
||||
Description: メモリ解放
|
||||
|
||||
Arguments: mem : アドレス
|
||||
|
||||
Returns: none
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osFree( void *mem )
|
||||
{
|
||||
void *ptr;
|
||||
uint order;
|
||||
|
||||
/*order を得る*/
|
||||
ptr = (void *)((uint)mem - sizeof(uint));
|
||||
order = *(uint*)ptr;
|
||||
|
||||
buddy_free( buddy, order, ptr );
|
||||
}
|
25
trunk/firmware/build/libraries/heap/common/buddy_allocator.h
Normal file
25
trunk/firmware/build/libraries/heap/common/buddy_allocator.h
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
#ifndef _BUDDY_ALLOCATOR_H_
|
||||
#define _BUDDY_ALLOCATOR_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
|
||||
extern BOOL buddy_allocator_init( void* heap, u32 size);
|
||||
extern void *osAlloc( unsigned int size );
|
||||
extern void osFree( void *mem );
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif /* _BUDDY_ALLOCATOR_H_ */
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
End of file
|
||||
*---------------------------------------------------------------------------*/
|
40
trunk/firmware/include/firm/heap/heap.h
Normal file
40
trunk/firmware/include/firm/heap/heap.h
Normal file
@ -0,0 +1,40 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlSDK - STD - include
|
||||
File: string.h
|
||||
|
||||
Copyright 2005-2008 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.
|
||||
|
||||
$Date:: $
|
||||
$Rev$
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef FIRM_HEAP_HEAP_H_
|
||||
#define FIRM_HEAP_HEAP_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <brom/misc.h>
|
||||
#include <brom/types.h>
|
||||
#include <brom/mi/memory.h>
|
||||
|
||||
typedef int OSHeapHandle;
|
||||
|
||||
extern BOOL buddy_allocator_init( void* heap, u32 size);
|
||||
extern void *osAlloc( unsigned int size );
|
||||
extern void osFree( void *mem );
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
/* FIRM_HEAP_HEAP_H_ */
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user