summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan McFarlane <i.mcfarlane2002@gmail.com>2025-04-18 19:21:58 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-20 23:44:38 -0400
commit1d4f14974119aaccac35027539c4d893cbb49cbb (patch)
treed1aeaf504fec2c17be32fba5fdb37f6dd83fce09
parentswitch __FUNCTION__ to __func__ (diff)
downloadcomus-1d4f14974119aaccac35027539c4d893cbb49cbb.tar.gz
comus-1d4f14974119aaccac35027539c4d893cbb49cbb.tar.bz2
comus-1d4f14974119aaccac35027539c4d893cbb49cbb.zip
adding code from osdev and reading
-rw-r--r--kernel/drivers/ata.c51
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;
}