📄 mmcmedia.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 + -