mirror of
https://github.com/dingusdev/dingusppc.git
synced 2024-12-26 09:29:28 +00:00
Clean up ATA interface.
This commit is contained in:
parent
df1a56305a
commit
2537751fa7
@ -28,9 +28,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include <cinttypes>
|
||||
|
||||
#define sector_size 512
|
||||
|
||||
using namespace std;
|
||||
using namespace ata_interface;
|
||||
|
||||
AtaBaseDevice::AtaBaseDevice(const std::string name)
|
||||
{
|
||||
@ -46,16 +44,18 @@ void AtaBaseDevice::device_reset()
|
||||
|
||||
this->r_sect_count = 1;
|
||||
this->r_sect_num = 1;
|
||||
this->r_dev_ctrl = 0;
|
||||
|
||||
// set ATA protocol signature
|
||||
this->r_cylinder_lo = 0;
|
||||
this->r_cylinder_hi = 0;
|
||||
this->r_dev_head = 0; // TODO: ATAPI devices shouldn't change this reg!
|
||||
this->r_status = IDE_Status::DRDY | IDE_Status::DSC;
|
||||
}
|
||||
|
||||
uint16_t AtaBaseDevice::read(const uint8_t reg_addr) {
|
||||
switch (reg_addr) {
|
||||
case IDE_Reg::IDE_DATA:
|
||||
case IDE_Reg::DATA:
|
||||
LOG_F(WARNING, "Retrieving data from %s", this->name.c_str());
|
||||
return 0xFFFFU;
|
||||
case IDE_Reg::ERROR:
|
||||
@ -83,7 +83,7 @@ uint16_t AtaBaseDevice::read(const uint8_t reg_addr) {
|
||||
|
||||
void AtaBaseDevice::write(const uint8_t reg_addr, const uint16_t value) {
|
||||
switch (reg_addr) {
|
||||
case IDE_Reg::IDE_DATA:
|
||||
case IDE_Reg::DATA:
|
||||
LOG_F(WARNING, "Pushing data to %s", this->name.c_str());
|
||||
break;
|
||||
case IDE_Reg::FEATURES:
|
||||
@ -106,7 +106,7 @@ void AtaBaseDevice::write(const uint8_t reg_addr, const uint16_t value) {
|
||||
break;
|
||||
case IDE_Reg::COMMAND:
|
||||
this->r_command = value;
|
||||
if (is_selected()) {
|
||||
if (is_selected() || this->r_command == IDE_Cmd::DIAGNOSTICS) {
|
||||
perform_command();
|
||||
}
|
||||
break;
|
||||
|
@ -26,9 +26,11 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include <cinttypes>
|
||||
|
||||
/** IDE register offsets. */
|
||||
namespace ata_interface {
|
||||
|
||||
/** ATA register offsets. */
|
||||
enum IDE_Reg : int {
|
||||
IDE_DATA = 0x0,
|
||||
DATA = 0x0,
|
||||
ERROR = 0x1, // error (read)
|
||||
FEATURES = 0x1, // features (write)
|
||||
SEC_COUNT = 0x2, // sector count
|
||||
@ -67,9 +69,9 @@ enum IDE_Error : int {
|
||||
BBK = 0x80
|
||||
};
|
||||
|
||||
/** Heath IDE commands. */
|
||||
/** ATA commands. */
|
||||
enum IDE_Cmd : int {
|
||||
IDE_NOP = 0x00,
|
||||
NOP = 0x00,
|
||||
RESET_ATAPI = 0x08,
|
||||
RECALIBRATE = 0x10,
|
||||
READ_SECTOR = 0x20,
|
||||
@ -83,6 +85,8 @@ enum IDE_Cmd : int {
|
||||
WRITE_DMA = 0xCA,
|
||||
};
|
||||
|
||||
}; // namespace ata_interface
|
||||
|
||||
/** Interface for ATA devices. */
|
||||
class AtaInterface {
|
||||
public:
|
||||
|
@ -35,6 +35,8 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
using namespace ata_interface;
|
||||
|
||||
IdeChannel::IdeChannel(const std::string name)
|
||||
{
|
||||
this->set_name(name);
|
||||
|
Loading…
Reference in New Issue
Block a user