mirror of
https://gitee.com/Vancouver2017/luban-lite-t3e-pro.git
synced 2025-12-16 03:18:54 +00:00
v1.0.3
This commit is contained in:
@@ -14,34 +14,19 @@
|
||||
|
||||
#include "aic_osal.h"
|
||||
#include "sdmc_disk.h"
|
||||
#include "block_dev.h"
|
||||
#include "hexdump.h"
|
||||
#include "mmc.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* Definitons
|
||||
******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Prototypes
|
||||
******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Variables
|
||||
******************************************************************************/
|
||||
|
||||
struct aic_sdmc *g_sdmc_host = NULL;
|
||||
static struct rt_device_blk_geometry info = {0};
|
||||
|
||||
/*******************************************************************************
|
||||
* Code
|
||||
******************************************************************************/
|
||||
DRESULT sdmc_disk_write(uint8_t pdrv, const char *device_name, const uint8_t *buf, uint32_t sector, uint8_t cnt)
|
||||
DRESULT sdmc_disk_write(void *hdisk, const uint8_t *buf, uint32_t sector, uint8_t cnt)
|
||||
{
|
||||
struct block_dev *dev = hdisk;
|
||||
rt_size_t size = 0;
|
||||
|
||||
if (!g_sdmc_host)
|
||||
if (!dev)
|
||||
return RES_NOTRDY;
|
||||
|
||||
size = mmc_bwrite(g_sdmc_host, sector, cnt, buf);
|
||||
size = block_write(dev, sector, cnt, (u8 *)buf);
|
||||
if (size != cnt) {
|
||||
pr_err("write() return %d/%d\n", size, cnt);
|
||||
return RES_ERROR;
|
||||
@@ -50,14 +35,15 @@ DRESULT sdmc_disk_write(uint8_t pdrv, const char *device_name, const uint8_t *bu
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
DRESULT sdmc_disk_read(uint8_t pdrv, const char *device_name, uint8_t *buf, uint32_t sector, uint8_t cnt)
|
||||
DRESULT sdmc_disk_read(void *hdisk, uint8_t *buf, uint32_t sector, uint8_t cnt)
|
||||
{
|
||||
struct block_dev *dev = hdisk;
|
||||
rt_size_t size = 0;
|
||||
|
||||
if (!g_sdmc_host)
|
||||
if (!dev)
|
||||
return RES_NOTRDY;
|
||||
|
||||
size = mmc_bread(g_sdmc_host, sector, cnt, buf);
|
||||
size = block_read(dev, sector, cnt, buf);
|
||||
if (size != cnt) {
|
||||
pr_err("read() return %d/%d\n", size, cnt);
|
||||
return RES_ERROR;
|
||||
@@ -66,14 +52,18 @@ DRESULT sdmc_disk_read(uint8_t pdrv, const char *device_name, uint8_t *buf, uint
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
DRESULT sdmc_disk_ioctl(uint8_t pdrv, const char *device_name, uint8_t command, void *buf)
|
||||
DRESULT sdmc_disk_ioctl(void *hdisk, uint8_t command, void *buf)
|
||||
{
|
||||
struct block_dev *dev = hdisk;
|
||||
DRESULT result = RES_OK;
|
||||
|
||||
if (!dev)
|
||||
return RES_NOTRDY;
|
||||
|
||||
switch (command) {
|
||||
case GET_SECTOR_COUNT:
|
||||
if (buf) {
|
||||
*(uint32_t *)buf = info.sector_count;
|
||||
*(uint32_t *)buf = dev->blk_cnt;
|
||||
} else {
|
||||
result = RES_PARERR;
|
||||
}
|
||||
@@ -82,7 +72,7 @@ DRESULT sdmc_disk_ioctl(uint8_t pdrv, const char *device_name, uint8_t command,
|
||||
|
||||
case GET_SECTOR_SIZE:
|
||||
if (buf) {
|
||||
*(uint32_t *)buf = info.bytes_per_sector;
|
||||
*(uint32_t *)buf = dev->blk_size;
|
||||
} else {
|
||||
result = RES_PARERR;
|
||||
}
|
||||
@@ -91,7 +81,7 @@ DRESULT sdmc_disk_ioctl(uint8_t pdrv, const char *device_name, uint8_t command,
|
||||
|
||||
case GET_BLOCK_SIZE:
|
||||
if (buf) {
|
||||
*(uint32_t *)buf = info.block_size;
|
||||
*(uint32_t *)buf = dev->blk_size;
|
||||
} else {
|
||||
result = RES_PARERR;
|
||||
}
|
||||
@@ -110,20 +100,16 @@ DRESULT sdmc_disk_ioctl(uint8_t pdrv, const char *device_name, uint8_t command,
|
||||
return result;
|
||||
}
|
||||
|
||||
DSTATUS sdmc_disk_status(uint8_t pdrv, const char *device_name)
|
||||
DSTATUS sdmc_disk_status(void *hdisk)
|
||||
{
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
DSTATUS sdmc_disk_initialize(uint8_t pdrv, const char *device_name)
|
||||
void *sdmc_disk_initialize(const char *device_name)
|
||||
{
|
||||
g_sdmc_host = find_mmc_dev_by_index(pdrv);
|
||||
if (!g_sdmc_host)
|
||||
return RES_NOTRDY;
|
||||
struct block_dev *dev;
|
||||
|
||||
info.block_size = g_sdmc_host->dev->max_blk_size;
|
||||
info.bytes_per_sector = info.block_size;
|
||||
info.sector_count = g_sdmc_host->dev->card_capacity * 2; /* unit: block */
|
||||
dev = block_get_device(device_name);
|
||||
|
||||
return RES_OK;
|
||||
return dev;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user