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

📄 mmap.c

📁 dspgateway 下mmap 的c程序
💻 C
字号:
/*
 * Copyright (c) 2004-2005, Nokia
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer. 
 *
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution. 
 *
 * Neither the name of Nokia nor the names of its contributors may be used to
 * endorse or promote products derived from this software without specific
 * prior written permission. 
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * Toshihiro Kobayashi <toshihiro.kobayashi@nokia.com>
 * 2004/11/05:  DSP Gateway version 3.3
 */

#include <std.h>
#include <clk.h>
#include "mailbox.h"
#include "tokliBIOS.h"

static Void busywait(LgUns cnt)
{
	LgUns i;
	for (i = 0; i < cnt; i++) {}
}

static Uns mm_rcv_bksnd(struct dsptask *task, Uns bid, Uns cnt)
{
	Int i;
	Uns *ipbp = ipbuf_d[bid];
	Uns off, len;
	#define OFF	228	/* arbitrary */
	Uns bid2;
	Uns *addr = (Uns *)task->udata;

	if (cnt != 2) {
		dbg(task, "[DSP]: illegal data cnt: %d\n", cnt);
		unuse_ipbuf(task, bid);
		return 0;
	}

	off = ipbp[0];	/* offset within the mapped space */
	len = ipbp[1];	/* len (in word count) */
	unuse_ipbuf(task, bid);

	busywait(2000000L);

	dbg(task, "\n"
		  "[DSP]: offset = %d, len = %d\n", off, len);

	for (i = 0; i < len; i++) {
		dbg(task, "[DSP] addr[%d] = %d\n", off+i, addr[off+i]);
		/* increment and copy */
		addr[OFF+i] = addr[off+i] + 1;
	}

	busywait(2000000L);

	dbg(task, "\n"
		  "[DSP]: sending back data to ARM:\n"
		  "       offset = %d, len = %d\n", OFF, len);
	bid2 = get_free_ipbuf(task);
	if(bid2 == MBCMD_BID_NULL)
		return MBCMD_EID_STVBUF;
	ipbp = ipbuf_d[bid2];
	ipbp[0] = OFF;
	ipbp[1] = len;
	bksnd(task, bid2, 2);

	return 0;
}

#pragma DATA_SECTION(my_vma, "shared_buf");
#define BUFSIZ 2048
static Uns my_vma[BUFSIZ];

static struct mmap_info mmap_info = {
	my_vma,	/* start */
	BUFSIZ	/* length */
};

#pragma DATA_SECTION(mmap, "dspgw_task")
struct dsptask mmap = {
	TID_MAGIC,	/* tid */
	"mmap",		/* name */
	MBCMD_TTYP_BKDM | MBCMD_TTYP_BKMD |
	MBCMD_TTYP_ASND | MBCMD_TTYP_PRCV,	/* ttyp */
	mm_rcv_bksnd,	/* rcv_snd */
	NULL,		/* rcv_req */
	NULL,		/* rcv_tctl */
	NULL,		/* tsk_attrs */
	&mmap_info,	/* mmap_info */
	my_vma		/* udata */
};

⌨️ 快捷键说明

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