diff options
author | Ian McFarlane <i.mcfarlane2002@gmail.com> | 2025-04-18 19:21:58 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-20 23:44:38 -0400 |
commit | 1d4f14974119aaccac35027539c4d893cbb49cbb (patch) | |
tree | d1aeaf504fec2c17be32fba5fdb37f6dd83fce09 /kernel/drivers/ata.c | |
parent | switch __FUNCTION__ to __func__ (diff) | |
download | comus-1d4f14974119aaccac35027539c4d893cbb49cbb.tar.gz comus-1d4f14974119aaccac35027539c4d893cbb49cbb.tar.bz2 comus-1d4f14974119aaccac35027539c4d893cbb49cbb.zip |
adding code from osdev and reading
Diffstat (limited to '')
-rw-r--r-- | kernel/drivers/ata.c | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/kernel/drivers/ata.c b/kernel/drivers/ata.c index e940ad4..9117d85 100644 --- a/kernel/drivers/ata.c +++ b/kernel/drivers/ata.c @@ -19,8 +19,49 @@ #define IDE_PROG_IF_SECONDARY_CHANNEL_CAN_SWITCH_TO_AND_FROM_PCI_NATIVE_FLAG 0x4 #define IDE_PROG_IF_DMA_SUPPORT_FLAG 0x7 -#include <comus/drivers/pci.h> +// ATA statuses, read off of the command/status port +// clang-format off +#define ATA_SR_BUSY 0x80 +#define ATA_SR_DRIVEREADY 0x40 +#define ATA_SR_DRIVEWRITEFAULT 0x20 +#define ATA_SR_DRIVESEEKCOMPLETE 0x10 +#define ATA_SR_DRIVEREQUESTREADY 0x08 +#define ATA_SR_CORRECTEDATA 0x04 +#define ATA_SR_INDEX 0x02 +#define ATA_SR_ERROR 0x01 +// clang-format on + +// ATA errors, ready off of the features/error port +// clang-format off +#define ATA_ER_BADBLOCK 0x80 +#define ATA_ER_UNCORRECTABLE 0x40 +#define ATA_ER_MEDIACHANGED 0x20 +#define ATA_ER_IDMARKNOTFOUND 0x10 +#define ATA_ER_MEDIACHANGEREQUEST 0x08 +#define ATA_ER_COMMANDABORTED 0x04 +#define ATA_ER_TRACK0NOTFOUND 0x02 +#define ATA_ER_NOADDRESSMARK 0x01 +// clang-format on + +// ATA commands +// clang-format off +#define ATA_CMD_READ_PIO 0x20 +#define ATA_CMD_READ_PIO_EXT 0x24 +#define ATA_CMD_READ_DMA 0xC8 +#define ATA_CMD_READ_DMA_EXT 0x25 +#define ATA_CMD_WRITE_PIO 0x30 +#define ATA_CMD_WRITE_PIO_EXT 0x34 +#define ATA_CMD_WRITE_DMA 0xCA +#define ATA_CMD_WRITE_DMA_EXT 0x35 +#define ATA_CMD_CACHE_FLUSH 0xE7 +#define ATA_CMD_CACHE_FLUSH_EXT 0xEA +#define ATA_CMD_PACKET 0xA0 +#define ATA_CMD_IDENTIFY_PACKET 0xA1 +#define ATA_CMD_IDENTIFY 0xEC +// clang-format on + #include <comus/drivers/ata.h> +#include <comus/drivers/pci.h> #include <lib.h> bool ata_find_primary_drive(struct pci_device *out) @@ -33,10 +74,10 @@ bool ata_find_primary_drive(struct pci_device *out) const uint8_t prog_if = pci_rcfg_b(*out, PCI_PROG_IF_B); const uint8_t header_type = pci_rcfg_b(*out, PCI_HEADER_TYPE_B); - if (header_type != 0x0) { - TRACE("Wrong header type for IDE_CONTROLLER device, not reading BARs"); - return false; - } + if (header_type != 0x0) { + TRACE("Wrong header type for IDE_CONTROLLER device, not reading BARs"); + return false; + } return true; } |