1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 03:57:43 +00:00

Kernel: Add an SD card driver for the aarch64 port

Co-authored-by: Ollrogge <nils-ollrogge@outlook.de>
This commit is contained in:
Marco Cutecchia 2023-03-16 10:54:29 +01:00 committed by Linus Groh
parent bb8092d6a1
commit c91db6ec97
13 changed files with 1465 additions and 0 deletions

View file

@ -0,0 +1,49 @@
/*
* Copyright (c) 2023, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Function.h>
#include <AK/Result.h>
#include <AK/Types.h>
#include <Kernel/Locking/Mutex.h>
#include <Kernel/Storage/SD/Registers.h>
#include <Kernel/Storage/StorageDevice.h>
namespace Kernel {
class SDHostController;
class SDMemoryCard : public StorageDevice {
public:
SDMemoryCard(SDHostController& sdhc, StorageDevice::LUNAddress, u32 hardware_relative_controller_id, u32 block_len, u64 capacity_in_blocks, u32 relative_card_address, SD::OperatingConditionRegister ocr, SD::CardIdentificationRegister cid, SD::SDConfigurationRegister scr);
// ^StorageDevice
virtual CommandSet command_set() const override { return CommandSet::SD; }
// ^BlockDevice
virtual void start_request(AsyncBlockDeviceRequest&) override;
private:
enum class CardAddressingMode {
ByteAddressing,
BlockAddressing
};
CardAddressingMode card_addressing_mode() const
{
return m_ocr.card_capacity_status ? CardAddressingMode::BlockAddressing : CardAddressingMode::ByteAddressing;
}
Mutex m_lock { "SDMemoryCard"sv };
SDHostController& m_sdhc;
u32 m_relative_card_address;
SD::OperatingConditionRegister m_ocr;
SD::CardIdentificationRegister m_cid;
SD::SDConfigurationRegister m_scr;
};
}