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

📄 mmcmedia.c

📁 基于EPSON 的一种操作系统内核改造的实时嵌入式操作系统ASIXOS,国内一家研发中心开发。精炼可靠
💻 C
字号:
/*
 * Block driver for media (i.e., flash cards)
 *
 * Copyright (c) 2004 ASIC of SOUTHEAST UNIVERSITY
 *
 * Many thanks to PESIA!
 *
 * Based strongly on code by:
 *
 * Author: Yong-iL Joh <tolkien@mizi.com>
 *
 * Date  : $Date: 2004/12/22 10:02:10 $ 
 *
 * Versation : 1.0 $
 *          
 */
 
#include "mmccore.h" 
#include "pcdisk.h"
static int mmc_blk = 512;
static struct mmc_io_request   g_io_request;
int g_busy = 0;
static UINT16 mmc_opencount = 0;
extern struct request g_Request;
extern mmc_nr_sects;
extern struct mmc_dev g_mmc_dev;
extern gptcount1 ;
extern gptcount2 ;

int mmc_open(UINT16 driveno)
{
  


    /* We don't use drive no. You could have multiple drives if wanted */
    driveno = driveno;

    /* mmc is useing now ,return; */
    if ( g_busy )
   		return(NO);
   
    mmc_init( );
    //mmc_cim_init_stack( ) ;  
    mmc_opencount += 1;
    return(YES);

}

int mmc_io(U16 driveno, U32 block, void *buffer, U32 count,int reading)
{
	int retval;
	if ( g_busy )
		return(NO);
	//if ( ( block +count/mmc_blk) > mmc_nr_sects ) {
		
		//if (count++ < 5)
			//prints(request past end of partition\n);
		//return(NO);
	//}
	
     g_busy = 1;
	reading&=0x1;
	g_io_request.cmd        = reading;
	g_io_request.sector     = block;
	g_io_request.block_len  = mmc_blk;
	g_io_request.nr_sectors =count; //count/mmc_blk;
	g_io_request.buffer     = (U8*)buffer;
    g_mmc_dev.io_request = (struct mmc_io_request *)&g_io_request;
    retval = mmc_read_write_dma((struct mmc_dev *)&g_mmc_dev);
    if (retval == 0x0)
    	return 0;	
    return 1;
}

int  mmc_close(UINT16 driveno) 
{
	
	if ( g_busy )
		return(NO);
		
    if (mmc_opencount)
        --mmc_opencount;

    mmc_exit();
    driveno = driveno;
    return(YES);
}


int mmc_media_transfer( struct request *req )
{
	
	unsigned long flags;
	static int count = 0;
	
	if ( req->sector + req->nr_sectors > mmc_nr_sects ) {
		
		if (count++ < 5)
			//prints(request past end of partition\n);
		return 0;
	}
	
	g_busy = 1;
	
	//g_io_request.id         = DEVICE_NR(req->rq_dev);
	g_io_request.cmd        = req->cmd;
	g_io_request.sector     = req->sector;
	g_io_request.nr_sectors = req->nr_sectors;
	g_io_request.block_len  = mmc_blk;
	g_io_request.buffer     = req->buffer;
    g_mmc_dev.io_request = (struct mmc_io_request *)&g_io_request;
    mmc_read_write_dma((struct mmc_dev *)&g_mmc_dev);
	return 1;
}
INT floppy_raw_open(UINT16 driveno)
{
    return(NO);
}

INT floppy_ioctl(UINT16 driveno, UINT16 command, VOID *buffer)
{
    return(NO);
}

⌨️ 快捷键说明

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