mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
ramdisk: Sypport variable size
This commit is contained in:
parent
a25c82a8ce
commit
a31bedda97
6 changed files with 44 additions and 23 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Ramdisk driver for Tegra X1
|
* Ramdisk driver for Tegra X1
|
||||||
*
|
*
|
||||||
* Copyright (c) 2019 CTCaer
|
* Copyright (c) 2019-2021 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -19,23 +19,40 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "ramdisk.h"
|
#include "ramdisk.h"
|
||||||
|
#include <libs/fatfs/diskio.h>
|
||||||
#include <mem/heap.h>
|
#include <mem/heap.h>
|
||||||
#include <utils/types.h>
|
#include <utils/types.h>
|
||||||
|
|
||||||
#include <memory_map.h>
|
#include <memory_map.h>
|
||||||
|
|
||||||
int ram_disk_init(FATFS *ram_fs)
|
static u32 disk_size = 0;
|
||||||
|
|
||||||
|
int ram_disk_init(FATFS *ram_fs, u32 ramdisk_size)
|
||||||
{
|
{
|
||||||
int res;
|
int res = 0;
|
||||||
u8 *buf = malloc(0x400000);
|
disk_size = ramdisk_size;
|
||||||
|
|
||||||
f_mount(NULL, "ram:", 1); // Unmount ramdisk.
|
// If ramdisk is not raw, format it.
|
||||||
|
if (ram_fs)
|
||||||
|
{
|
||||||
|
u8 *buf = malloc(0x400000);
|
||||||
|
|
||||||
res = f_mkfs("ram:", FM_EXFAT, RAMDISK_CLUSTER_SZ, buf, 0x400000); // Format as exFAT w/ 32KB cluster.
|
// Set ramdisk size.
|
||||||
if (!res)
|
ramdisk_size >>= 9;
|
||||||
res = f_mount(ram_fs, "ram:", 1); // Mount ramdisk.
|
disk_set_info(DRIVE_RAM, SET_SECTOR_COUNT, &ramdisk_size);
|
||||||
|
|
||||||
free(buf);
|
// Unmount ramdisk.
|
||||||
|
f_mount(NULL, "ram:", 1);
|
||||||
|
|
||||||
|
// Format as exFAT w/ 32KB cluster with no MBR.
|
||||||
|
res = f_mkfs("ram:", FM_EXFAT | FM_SFD, RAMDISK_CLUSTER_SZ, buf, 0x400000);
|
||||||
|
|
||||||
|
// Mount ramdisk.
|
||||||
|
if (!res)
|
||||||
|
res = f_mount(ram_fs, "ram:", 1);
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -45,7 +62,7 @@ int ram_disk_read(u32 sector, u32 sector_count, void *buf)
|
||||||
u32 sector_off = RAM_DISK_ADDR + (sector << 9);
|
u32 sector_off = RAM_DISK_ADDR + (sector << 9);
|
||||||
u32 bytes_count = sector_count << 9;
|
u32 bytes_count = sector_count << 9;
|
||||||
|
|
||||||
if ((sector_off - RAM_DISK_ADDR) > RAM_DISK_SZ)
|
if ((sector_off - RAM_DISK_ADDR) > disk_size)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
memcpy(buf, (void *)sector_off, bytes_count);
|
memcpy(buf, (void *)sector_off, bytes_count);
|
||||||
|
@ -58,7 +75,7 @@ int ram_disk_write(u32 sector, u32 sector_count, const void *buf)
|
||||||
u32 sector_off = RAM_DISK_ADDR + (sector << 9);
|
u32 sector_off = RAM_DISK_ADDR + (sector << 9);
|
||||||
u32 bytes_count = sector_count << 9;
|
u32 bytes_count = sector_count << 9;
|
||||||
|
|
||||||
if ((sector_off - RAM_DISK_ADDR) > RAM_DISK_SZ)
|
if ((sector_off - RAM_DISK_ADDR) > disk_size)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
memcpy((void *)sector_off, buf, bytes_count);
|
memcpy((void *)sector_off, buf, bytes_count);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Ramdisk driver for Tegra X1
|
* Ramdisk driver for Tegra X1
|
||||||
*
|
*
|
||||||
* Copyright (c) 2019 CTCaer
|
* Copyright (c) 2019-2021 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
#define RAMDISK_CLUSTER_SZ 32768
|
#define RAMDISK_CLUSTER_SZ 32768
|
||||||
|
|
||||||
int ram_disk_init(FATFS *ram_fs);
|
int ram_disk_init(FATFS *ram_fs, u32 ramdisk_size);
|
||||||
int ram_disk_read(u32 sector, u32 sector_count, void *buf);
|
int ram_disk_read(u32 sector, u32 sector_count, void *buf);
|
||||||
int ram_disk_write(u32 sector, u32 sector_count, const void *buf);
|
int ram_disk_write(u32 sector, u32 sector_count, const void *buf);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018-2019 CTCaer
|
* Copyright (c) 2018-2021 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
|
|
@ -1366,7 +1366,7 @@ static lv_res_t _create_mbox_start_partitioning(lv_obj_t *btn)
|
||||||
lv_label_set_text(lbl_paths[0], "Please wait...");
|
lv_label_set_text(lbl_paths[0], "Please wait...");
|
||||||
lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
|
lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
|
||||||
manual_system_maintenance(true);
|
manual_system_maintenance(true);
|
||||||
if (ram_disk_init(&ram_fs))
|
if (ram_disk_init(&ram_fs, RAM_DISK_SZ))
|
||||||
{
|
{
|
||||||
lv_label_set_text(lbl_status, "#FFDD00 Error:# Failed to initialize Ramdisk!");
|
lv_label_set_text(lbl_status, "#FFDD00 Error:# Failed to initialize Ramdisk!");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
#include <storage/ramdisk.h>
|
#include <storage/ramdisk.h>
|
||||||
#include <storage/sdmmc.h>
|
#include <storage/sdmmc.h>
|
||||||
|
|
||||||
|
static u32 sd_rsvd_sectors = 0;
|
||||||
|
static u32 ramdisk_sectors = 0;
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Get Drive Status */
|
/* Get Drive Status */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
@ -88,7 +90,6 @@ DRESULT disk_write (
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Miscellaneous Functions */
|
/* Miscellaneous Functions */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
static u32 part_rsvd_size = 0;
|
|
||||||
DRESULT disk_ioctl (
|
DRESULT disk_ioctl (
|
||||||
BYTE pdrv, /* Physical drive nmuber (0..) */
|
BYTE pdrv, /* Physical drive nmuber (0..) */
|
||||||
BYTE cmd, /* Control code */
|
BYTE cmd, /* Control code */
|
||||||
|
@ -102,7 +103,7 @@ DRESULT disk_ioctl (
|
||||||
switch (cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case GET_SECTOR_COUNT:
|
case GET_SECTOR_COUNT:
|
||||||
*buf = sd_storage.sec_cnt - part_rsvd_size;
|
*buf = sd_storage.sec_cnt - sd_rsvd_sectors;
|
||||||
break;
|
break;
|
||||||
case GET_BLOCK_SIZE:
|
case GET_BLOCK_SIZE:
|
||||||
*buf = 32768; // Align to 16MB.
|
*buf = 32768; // Align to 16MB.
|
||||||
|
@ -114,7 +115,7 @@ DRESULT disk_ioctl (
|
||||||
switch (cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case GET_SECTOR_COUNT:
|
case GET_SECTOR_COUNT:
|
||||||
*buf = RAM_DISK_SZ >> 9; // 1GB.
|
*buf = ramdisk_sectors;
|
||||||
break;
|
break;
|
||||||
case GET_BLOCK_SIZE:
|
case GET_BLOCK_SIZE:
|
||||||
*buf = 2048; // Align to 1MB.
|
*buf = 2048; // Align to 1MB.
|
||||||
|
@ -133,12 +134,15 @@ DRESULT disk_set_info (
|
||||||
{
|
{
|
||||||
DWORD *buf = (DWORD *)buff;
|
DWORD *buf = (DWORD *)buff;
|
||||||
|
|
||||||
if (pdrv == DRIVE_SD)
|
if (cmd == SET_SECTOR_COUNT)
|
||||||
{
|
{
|
||||||
switch (cmd)
|
switch (pdrv)
|
||||||
{
|
{
|
||||||
case SET_SECTOR_COUNT:
|
case DRIVE_SD:
|
||||||
part_rsvd_size = *buf;
|
sd_rsvd_sectors = *buf;
|
||||||
|
break;
|
||||||
|
case DRIVE_RAM:
|
||||||
|
ramdisk_sectors = *buf;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018-2019 CTCaer
|
* Copyright (c) 2018-2021 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
|
Loading…
Reference in a new issue