pf2: cache init functions

This commit is contained in:
Michael Scire 2020-11-26 12:52:48 -08:00
parent 102e1e0e74
commit 8719e6da02
3 changed files with 58 additions and 4 deletions

View file

@ -30,6 +30,7 @@ namespace ams::prfile2 {
u32 mode;
u16 num_fat_pages;
u16 num_data_pages;
pf::CachePage *pages;
pf::CachePage *current_fat;
pf::CachePage *current_data;
pf::SectorBuffer *buffers;
@ -38,10 +39,14 @@ namespace ams::prfile2 {
void *signature;
};
struct Volume;
}
namespace ams::prfile2::cache {
/* ... */
void SetCache(Volume *vol, pf::CachePage *cache_page, pf::SectorBuffer *cache_buf, u16 num_fat_pages, u16 num_data_pages);
void SetFatBufferSize(Volume *vol, u32 size);
void SetDataBufferSize(Volume *vol, u32 size);
}

View file

@ -0,0 +1,49 @@
/*
* Copyright (c) 2018-2020 Atmosphère-NX
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if defined(ATMOSPHERE_IS_STRATOSPHERE)
#include <stratosphere.hpp>
#elif defined(ATMOSPHERE_IS_MESOSPHERE)
#include <mesosphere.hpp>
#elif defined(ATMOSPHERE_IS_EXOSPHERE)
#include <exosphere.hpp>
#else
#include <vapours.hpp>
#endif
namespace ams::prfile2::cache {
void SetCache(Volume *vol, pf::CachePage *cache_page, pf::SectorBuffer *cache_buf, u16 num_fat_pages, u16 num_data_pages) {
/* Set the cache fields. */
vol->cache.pages = cache_page;
vol->cache.buffers = cache_buf;
vol->cache.num_fat_pages = num_fat_pages;
vol->cache.num_data_pages = num_data_pages;
std::memset(vol->cache.pages, 0, sizeof(*vol->cache.pages) * (num_fat_pages + num_data_pages));
}
void SetFatBufferSize(Volume *vol, u32 size) {
if (size > 0) {
vol->cache.fat_buf_size = size;
}
}
void SetDataBufferSize(Volume *vol, u32 size) {
if (size > 0) {
vol->cache.data_buf_size = size;
}
}
}

View file

@ -278,9 +278,9 @@ namespace ams::prfile2::vol {
}
/* Setup the cache. */
/* TODO: cache::SetCache(vol, drive_table->cache->pages, drive_table->cache->buffers, drive_table->cache->num_fat_pages, drive_table->cache->num_data_pages); */
/* TODO: cache::SetFatBufferSize(vol, drive_table->cache->fat_buf_size); */
/* TODO: cache::SetDataBufferSize(vol, drive_table->cache->data_buf_size); */
cache::SetCache(vol, drive_table->cache->pages, drive_table->cache->buffers, drive_table->cache->num_fat_pages, drive_table->cache->num_data_pages);
cache::SetFatBufferSize(vol, drive_table->cache->fat_buf_size);
cache::SetDataBufferSize(vol, drive_table->cache->data_buf_size);
/* Set flags. */
vol->SetAttached(true);