⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memlib.c

📁 Boot code for ADM5120 with serial console for Edimax router.
💻 C
字号:
/*****************************************************************************;;   (C) Unpublished Work of ADMtek Incorporated.  All Rights Reserved.;;       THIS WORK IS AN UNPUBLISHED WORK AND CONTAINS CONFIDENTIAL,;       PROPRIETARY AND TRADESECRET INFORMATION OF ADMTEK INCORPORATED.;       ACCESS TO THIS WORK IS RESTRICTED TO (I) ADMTEK EMPLOYEES WHO HAVE A;       NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF THEIR ASSIGNMENTS;       AND (II) ENTITIES OTHER THAN ADMTEK WHO HAVE ENTERED INTO APPROPRIATE;       LICENSE AGREEMENTS.  NO PART OF THIS WORK MAY BE USED, PRACTICED,;       PERFORMED, COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED,;       ABBRIDGED, CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST,;       TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF ADMTEK.;       ANY USE OR EXPLOITATION OF THIS WORK WITHOUT AUTHORIZATION COULD;       SUBJECT THE PERPERTRATOR TO CRIMINAL AND CIVIL LIABILITY.;;------------------------------------------------------------------------------;;    Project : ADM5120;    Creator : ;    File    : memlib.c;    Abstract: ;;Modification History:; ;;*****************************************************************************/#include <ctype.h>#include <mips.h>#include <mips4kc.h>#include <adm5120.h>#include <except.h>#include <linuxld.h>void *MemAlloc(UINT32 NumOfByte, UINT32 clear);void *SharedMemAlloc(UINT32 NumOfByte, UINT32 clear);/*********  Global Variables ********/#define MEM_ALIGN				4#define SHARED_MEM_ALIGN		16#define MEM_HEAP_PAEND			LINUXLD_MEMPOOL_START+LINUXLD_MEMPOOL_SIZEvoid *_heap_h;UINT32 AvilMemHead;/**********************************************************************************//* MemAlloc:																	  *//**********************************************************************************/void *MemAlloc(UINT32 NumOfByte, UINT32 clear){	int s;	UINT32 MemStart, MemEnd;	// Critical section starts. Disable the interrupts	s = mips_int_lock();	MemEnd = AvilMemHead + NumOfByte;	if (MemEnd & (MEM_ALIGN - 1))		MemEnd = (MemEnd + MEM_ALIGN - 1) & ~(MEM_ALIGN - 1);	if (MemEnd >= MEM_HEAP_PAEND) {		mips_int_unlock(s);		return NULL;	}	MemStart = AvilMemHead;	AvilMemHead = MemEnd;	// Critical section ends. Restore the interrupts mode	mips_int_unlock(s);	MemStart = MIPS_KSEG0A(PA2VA(MemStart));#ifndef RTL_SIMULATION	if (clear) {		memset((void *) MemStart, 0, NumOfByte);	}#endif	return (void *) MemStart;}/**********************************************************************************//* SharedMemAlloc:																  *//**********************************************************************************/void *SharedMemAlloc(UINT32 NumOfByte, UINT32 clear){	int s;	UINT32 MemStart, MemEnd;	// Critical section starts. Disable the interrupts	s = mips_int_lock();	// Align the start address to cache line boundry	if (AvilMemHead & (SHARED_MEM_ALIGN - 1))		AvilMemHead = (AvilMemHead + SHARED_MEM_ALIGN - 1) & ~(SHARED_MEM_ALIGN - 1);	MemEnd = AvilMemHead + NumOfByte;	// !! Always keep the shared memory block aligned on cache line boundry	if (MemEnd & (SHARED_MEM_ALIGN - 1))		MemEnd = (MemEnd + SHARED_MEM_ALIGN - 1) & ~(SHARED_MEM_ALIGN - 1);	if (MemEnd >= MEM_HEAP_PAEND) {		mips_int_unlock(s);		return NULL;	}	MemStart = AvilMemHead;	AvilMemHead = MemEnd;	// Critical section ends. Restore the interrupts mode	mips_int_unlock(s);	MemStart = MIPS_KSEG1A(PA2VA(MemStart));#ifndef RTL_SIMULATION	if (clear) {		memset((void *) MemStart, 0, NumOfByte);	}#endif	return (void *) MemStart;}/****************************************************************************//*  memlib_init:															*//****************************************************************************/void memlib_init(void){	int s, i;	unsigned long reg_offset, reg;	_heap_h = (void *) LINUXLD_MEMPOOL_START;	s = mips_int_lock();	// map VA to PA	AvilMemHead = KVA2PA((UINT32) _heap_h);	if (AvilMemHead & (MEM_ALIGN - 1)) {		AvilMemHead = (AvilMemHead + MEM_ALIGN - 1) & ~(MEM_ALIGN - 1);	}	mips_int_unlock(s);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -