From b974147dbfef54794debee9065a371384ab6b20f Mon Sep 17 00:00:00 2001 From: VoidNV Date: Wed, 26 May 2021 21:27:49 -0500 Subject: [PATCH] Add DiskAHCI.CC to Kernel, add ATAPI capacity read Export read/write and reset AHCI functions Create SATARep() --- ...o => Zenith-latest-2021-05-26-21_25_20.iso | Bin 34664448 -> 34693120 bytes src/Home/AHCI/ahci.CC | 9 +- src/Home/AHCI/ahcifunctions.CC | 11 + src/Home/AHCI/notes.DD | 4 +- src/Home/satarep.CC | 24 + src/Kernel/BlkDev/DiskAHCI.CC | 582 ++++++++++++++++++ src/Kernel/BlkDev/DiskATAId.CC | 50 -- src/Kernel/BlkDev/DiskAddDev.CC | 2 + src/Kernel/BlkDev/MakeBlkDev.CC | 1 + src/Kernel/KernelA.HH | 2 +- src/Kernel/KernelC.HH | 7 + 11 files changed, 636 insertions(+), 56 deletions(-) rename Zenith-latest-2021-05-26-03_17_44.iso => Zenith-latest-2021-05-26-21_25_20.iso (99%) create mode 100644 src/Home/AHCI/ahcifunctions.CC create mode 100644 src/Home/satarep.CC create mode 100644 src/Kernel/BlkDev/DiskAHCI.CC diff --git a/Zenith-latest-2021-05-26-03_17_44.iso b/Zenith-latest-2021-05-26-21_25_20.iso similarity index 99% rename from Zenith-latest-2021-05-26-03_17_44.iso rename to Zenith-latest-2021-05-26-21_25_20.iso index 63c1c9f350e27a14c37ef3a6446a7172f34255ef..1bcf27337b9d14a9a2cba2c621a92aecba99ce5f 100644 GIT binary patch delta 128195 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 &V&Qc2lfev|3f_ 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 delta 115318 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 = port->interrupt_status; //TODO: Why? - cmd_header = *&port->cmd_list_base(I64 *); //Read cmd_list_base and cmd_list_base_upper as one full I64 value. + cmd_header = *&port->cmd_list_base(I64 *); cmd_header += cmd_slot; //Move up pointer to the slot we have in the command list. //Write Command FIS Length (CFL, a fixed size) in bits 4:0 of the desc. Takes size in U32s. @@ -513,6 +513,8 @@ U0 AHCIPortInit(CBlkDev *bd, CAHCIPort *port, I64 port_num) for (i = 0; i < blkdev.cmd_slot_count; i++) { cmd_header = &port->cmd_list_base(CPortCmdHeader *)[i]; + //Write Command FIS Length (CFL, a fixed size) in bits 4:0 of the desc. Takes size in U32s. + cmd_header->desc = sizeof(CFisH2D) / sizeof(U32); if (blkdev.ahci64) { @@ -613,8 +615,9 @@ U0 Test() "$$PURPLE$$Byte count: %X$$FG$$\n", AHCIAtapiBlksRead(bd, buf2, 240, BLKS); //read // "Capacity %d\n", AHCIAtapiCapacityRead(bd); - D(buf2 + (BLKS - 5) * DVD_BLK_SIZE, 5 * DVD_BLK_SIZE); //Dump last 5 blocks -// D(buf2, DVD_BLK_SIZE); + D(bd->dev_id_record, 512); +// D(buf2 + (BLKS - 5) * DVD_BLK_SIZE, 5 * DVD_BLK_SIZE); //Dump last 5 blocks + D(buf2, DVD_BLK_SIZE); Free(buf); Free(buf2); } diff --git a/src/Home/AHCI/ahcifunctions.CC b/src/Home/AHCI/ahcifunctions.CC new file mode 100644 index 0000000..f7baba0 --- /dev/null +++ b/src/Home/AHCI/ahcifunctions.CC @@ -0,0 +1,11 @@ +#define BLKS 40 + +U0 Test() +{ + CBlkDev *ata_bd = CAlloc(sizeof(CBlkDev)); + CBlkDev *atapi_bd = CAlloc(sizeof(CBlkDev)); + AHCIPortInit(ata_bd, &blkdev.ahci_hba->ports[0], 0); + AHCIPortInit(atapi_bd, &blkdev.ahci_hba->ports[1], 1); +} + +Test; \ No newline at end of file diff --git a/src/Home/AHCI/notes.DD b/src/Home/AHCI/notes.DD index 8d2e64b..0575d4a 100755 --- a/src/Home/AHCI/notes.DD +++ b/src/Home/AHCI/notes.DD @@ -1,10 +1,10 @@ $WW$ -- Pushing back internal_buf by doing $FG,2$internal_buf - buf_size$FG$ instead of using a second variable $FG,2$tmp_buf$FG$ might prove dangerous. - - Perhaps make more references to spec in comments - ATAPI RW +- Remove Buffer alignment check and just do it on every call + $FG,7$ZenithOS IDE DVD Boot function order list and summary$FG$ diff --git a/src/Home/satarep.CC b/src/Home/satarep.CC new file mode 100644 index 0000000..9555ebb --- /dev/null +++ b/src/Home/satarep.CC @@ -0,0 +1,24 @@ +I64 SATARep() +{ + I64 bdf; + CAHCIPort *port; + CPCIDev *pci; + "AHCI version %X.%1X%1X\n", blkdev.ahci_hba->version >> 16, (blkdev.ahci_hba->version & 0xFF00) >> 8, blkdev.ahci_hba->version & 0xFF; + if (dev.pci_head) + { + pci = PCIDevFind(PCIC_STORAGE, PCISC_AHCI); + ClassRep(pci); + "Bus:0x%02X, Dev:0x%02X, Fun:0x%02X\n\n", pci->bus, pci->dev, pci->fun; + "$$PURPLE$$Vendor$$FG$$: $$BLACK$$%s$$FG$$\n", pci->vendor_str; + "$$PURPLE$$Device$$FG$$: $$BLACK$$%s$$FG$$\n", pci->dev_id_str; + } + else + { + bdf = PCIClassFind(PCIC_STORAGE << 16 | PCISC_AHCI << 8 + 1, 0); + "Bus:%02X, Dev:%02X, Fun:%02X", bdf.u8[2], bdf.u8[1], bdf.u8[0]; + "HBA Base Address: 0x%X", PCIReadU32(bdf.u8[2], bdf.u8[1], bdf.u8[0], PCIR_BASE5) & ~0x1F; + } + return 0; +} + +SATARep; \ No newline at end of file diff --git a/src/Kernel/BlkDev/DiskAHCI.CC b/src/Kernel/BlkDev/DiskAHCI.CC new file mode 100644 index 0000000..fcae9a0 --- /dev/null +++ b/src/Kernel/BlkDev/DiskAHCI.CC @@ -0,0 +1,582 @@ +I64 AHCILBA48CapacityGet(U16 *id_record) +{//Get capacity of drive, in LBA blocks. +//Capacity is stored in a U64, so we take the shortcut +//and access the U16-indexed ID record as U64 indexed. Zero-based value. + return (id_record)(U64 *)[ATA_IDENT_LBA48_CAPACITY / 4] - 1; +} + +I64 AHCIPortCmdSlotGet(I64 port_num) +{//Get next free command slot in port; if none, throw error. + I64 i; + CAHCIPort *port = &blkdev.ahci_hba->ports[port_num]; + U32 slots = port->sata_active | port->cmd_issue; + + for (i = 0; i < blkdev.cmd_slot_count; i++) + { + if (!(slots & 1)) + return i; + slots >>= 1; + } + ZenithErr("AHCI: No empty command slots on port %d!\n", port_num); + throw('AHCI'); +} + +Bool AHCIPortIsIdle(I64 port_num) +{//Check if the command engine is running on port. + return !(blkdev.ahci_hba->ports[port_num].command & (AHCI_PxCMDF_ST | AHCI_PxCMDF_CR | AHCI_PxCMDF_FR | AHCI_PxCMDF_FRE)); +} + +U0 AHCIPortCmdStop(I64 port_num) +{//Stop command engine on port. + CAHCIPort *port = &blkdev.ahci_hba->ports[port_num]; + Btr(&port->command, AHCI_PxCMDf_ST); + Btr(&port->command, AHCI_PxCMDf_FRE); +// while (port->command & (AHCI_PxCMDF_CR | AHCI_PxCMDF_FR)); + while (Bt(&port->command, AHCI_PxCMDf_CR) || Bt(&port->command, AHCI_PxCMDf_FR)); +} + +U0 AHCIPortCmdStart(I64 port_num) +{//Start command engine on port. + CAHCIPort *port = &blkdev.ahci_hba->ports[port_num]; + while (Bt(&port->command, AHCI_PxCMDf_CR)); + Bts(&port->command, AHCI_PxCMDf_FRE); + Bts(&port->command, AHCI_PxCMDf_ST); +} + +Bool AHCIPortWait(I64 port_num, F64 timeout, Bool throwing=TRUE) +{//Wait until DRQ & BSY are clear in port task file. + CAHCIPort *port = &blkdev.ahci_hba->ports[port_num]; + do + { + if (!(port->task_file_data & (ATAS_DRQ | ATAS_BSY))) + return TRUE; + } + while (timeout > tS); + if (throwing) + { ZenithErr("AHCI: Port %d hung.\n", port_num); + throw('AHCI'); + } + return FALSE; +} + +U0 AHCIPortReset(I64 port_num) +{//Software reset of port. Port command engine must be started after this. + //If port is not responsive we do a full reset. + CAHCIPort *port = &blkdev.ahci_hba->ports[port_num]; + AHCIPortCmdStop(port_num); + port->interrupt_status = port->interrupt_status; //Acknowledge all interrupt statuses. + + if (!AHCIPortWait(port_num, tS + 1)) + {//Perform 'more intrusive' HBA<->Port comm reset (sec. 10.4.2 of spec). + port->sata_ctrl = AHCI_PxSCTLF_DET_INIT; + Sleep(2); //Spec says 1 millisecond + port->sata_ctrl = 0; + } + while (port->sata_status & 0xF != AHCI_PxSSTSF_DET_PRESENT); + port->sata_error = ~0; //Write all 1s to sata error register. +} + +CPortCmdHeader *AHCIPortActiveHeaderGet(I64 port_num, I64 cmd_slot) +{//Get current command slot header on port. + CAHCIPort *port = &blkdev.ahci_hba->ports[port_num]; + CPortCmdHeader *cmd_header = port->cmd_list_base; + return cmd_header + cmd_slot; //Move up pointer to the slot we have in the command list. +} + +U0 AHCIPortCmdWait(I64 port_num, I64 cmd_slot) +{//Wait on command completion after command issue, and double check any error. + CAHCIPort *port = &blkdev.ahci_hba->ports[port_num]; + while (TRUE) + { + if (!Bt(&port->cmd_issue, cmd_slot)) //When command has been processed + break; + if (Bt(&port->interrupt_status, AHCI_PxIf_TFE)) //Task File Error ($LK,"ATAS_ERR",A="MN:ATAS_ERR"$) + { +error: + ZenithErr("AHCI: Port %d: Command failed!\n", port_num); + throw('AHCI'); + } + } + if (Bt(&port->interrupt_status, AHCI_PxIf_TFE)) //Second safety check + goto error; +} + +I64 AHCIAtapiCapacityGet(CBlkDev *bd) +{ + CPortCmdTable *cmd_table; + CFisH2D *cmd_fis; + CAHCIPort *port = bd->ahci_port; + I64 cmd_slot = AHCIPortCmdSlotGet(bd->port_num); + CPortCmdHeader *cmd_header = AHCIPortActiveHeaderGet(bd->port_num, cmd_slot); + + if (port->signature != AHCI_PxSIG_ATAPI) + { + ZenithErr("AHCI: Drive is not an ATAPI drive!\n"); + throw('AHCI'); + } + U32 *buf = CAlloc(8, Fs->code_heap); + Bts(&cmd_header->desc, AHCI_CH_DESCf_A); + cmd_table = cmd_header->cmd_table_base; + MemSet(cmd_table, 0, sizeof(CPortCmdTable)); + //Set up single PRD + cmd_table->prdt[0].data_base = buf; + cmd_table->prdt[0].data_byte_count = DVD_BLK_SIZE - 1; //Zero-based value + cmd_header->prdt_len = 1; + + cmd_fis = &cmd_table->cmd_fis; + cmd_fis->type = FISt_H2D; + Bts(&cmd_fis->desc, AHCI_CF_DESCf_C); //Set Command bit in H2D FIS. + cmd_fis->command = ATA_PACKET; + cmd_table->acmd[0] = ATAPI_READ_CAPACITY >> 8; + + AHCIPortWait(bd->port_num, tS + 2); + Bts(&port->cmd_issue, cmd_slot); //Issue the command. + + try + AHCIPortCmdWait(bd->port_num, cmd_slot); + catch + { + Fs->catch_except = TRUE; + return 0; + } + + return EndianU32(buf[0]); +} + + +U0 AHCIPortIdentify(CBlkDev *bd) +{//Perform ATA_IDENTIFY command on ATA/ATAPI drive and store capacity and id record. + CPortCmdTable *cmd_table; + CFisH2D *cmd_fis; + CAHCIPort *port = bd->ahci_port; + I64 cmd_slot = AHCIPortCmdSlotGet(bd->port_num); + CPortCmdHeader *cmd_header = AHCIPortActiveHeaderGet(bd->port_num, cmd_slot); + + port->interrupt_status = port->interrupt_status; //TODO: Why? + + //Using the code heap for this alloc to stay under 32-bit address space. + U16 *dev_id_record = CAlloc(512, Fs->code_heap); + + cmd_table = cmd_header->cmd_table_base; + MemSet(cmd_table, 0, sizeof(CPortCmdTable)); + //Set up single PRD + cmd_table->prdt[0].data_base = dev_id_record; + cmd_table->prdt[0].data_base_upper = 0; + cmd_table->prdt[0].data_byte_count = 512 - 1; //Zero-based value + cmd_header->prdt_len = 1; //1 PRD, as described above, which contains the address to put the ID record. + + //Setup command FIS + cmd_fis = &cmd_table->cmd_fis; + cmd_fis->type = FISt_H2D; + Bts(&cmd_fis->desc, AHCI_CF_DESCf_C); //Set Command bit in H2D FIS. + + if (port->signature == AHCI_PxSIG_ATAPI) + cmd_fis->command = ATA_IDENTIFY_PACKET; + else + cmd_fis->command = ATA_IDENTIFY; + cmd_fis->device = 0; //No bits need to be set in the device register. + + //Wait on previous command to complete. + AHCIPortWait(bd->port_num, tS + 2); + + Bts(&port->cmd_issue, cmd_slot); //Issue the command. + AHCIPortCmdWait(bd->port_num, cmd_slot); + + Free(bd->dev_id_record); + bd->dev_id_record = dev_id_record; + + if (port->signature == AHCI_PxSIG_ATA) + { + bd->max_blk = AHCILBA48CapacityGet(dev_id_record); + "MAX BLOCK %d, disk size %d MiB\n", bd->max_blk, bd->max_blk * BLK_SIZE / 1024 / 1024; + } + else + { + bd->max_blk = AHCIAtapiCapacityGet(bd); + "MAX BLOCK %d, disk size %d MiB\n", bd->max_blk, bd->max_blk * DVD_BLK_SIZE / 1024 / 1024; + } +} + +U8 *AHCIBufferAlign(CBlkDev *bd, U8 *user_buf, I64 buf_size, Bool write) +{//Make sure buffer is accessible by HBA controller. +//Controller requires a U16 aligned buffer and in 32-bit address space (We are not using 64-bit capabilities). +//MAlloc provides U64-aligned addresses, and can allocate in the code heap ( <4GB ). +//In the case of an inadequate buffer address being passed in, we will use a MAlloced internal buffer. + if(user_buf + buf_size > U32_MAX || user_buf & 1) + {//if the buffer is not within 32-bit address space or not U16-aligned + "Aligning buffer under 32-bit range\n"; + Free(bd->prd_buf); + bd->prd_buf = MAlloc(buf_size, Fs->code_heap); + Bts(&bd->flags, BDf_INTERNAL_BUF); + if (write) + MemCopy(bd->prd_buf, user_buf, buf_size); + return bd->prd_buf; + } + Btr(&bd->flags, BDF_INTERNAL_BUF); + return user_buf; +} + +I64 AHCIAtaBlksRW(CBlkDev *bd, U8 *buf, I64 blk, I64 count, Bool write) +{//Read/Write ATA disk blocks. Returns number of bytes transferred between system and disk. +//Don't use this, use the AHCIAtaBlksRead and AHCIAtaBlksWrite functions. + CPortCmdTable *cmd_table; + CFisH2D *cmd_fis; + CAHCIPort *port = bd->ahci_port; + I64 i, buf_size, buf_size_tmp, byte_count, prdt_len, cmd_slot = AHCIPortCmdSlotGet(bd->port_num); + CPortCmdHeader *cmd_header = AHCIPortActiveHeaderGet(bd->port_num, cmd_slot); + U8 *internal_buf_tmp, *internal_buf; + + if (port->signature != AHCI_PxSIG_ATA) + { + ZenithErr("AHCI: Drive is not an ATA drive!\n"); + throw('AHCI'); + } + + if (count < 1) return 0; + if (count > AHCI_PRDT_MAX_BLOCKS) + { + ZenithErr("AHCI: Block count %d max allowed in one command (%d)", count, AHCI_PRDT_MAX_BLOCKS); + throw('AHCI'); + } + + //Determine buffer size and PRDT length. + buf_size = buf_size_tmp = count * BLK_SIZE; + prdt_len = (buf_size - 1) / AHCI_PRD_MAX_BYTES + 1; + + "PRDT Length:\t%d\n", prdt_len; + "Count:\t\t\t%d\n", count; + "Buffer size:\t%X\n", buf_size; + + cmd_header->prdt_len = prdt_len; //Set PRD table length in cmd header. + //Set 'write' bit depending on 'write' argument. + BEqual(&cmd_header->desc, AHCI_CH_DESCf_W, write); + + internal_buf = internal_buf_tmp = AHCIBufferAlign(bd, buf, buf_size, write); + "Buffer:\t\t\t0x%X\n", internal_buf; + + if (!internal_buf) throw('AHCI'); //Will probably never happen. + + //Obtain command table and zero it. This contains the command FIS and the PRDT. + cmd_table = cmd_header->cmd_table_base; + MemSet(cmd_table, 0, sizeof(CPortCmdTable)); + + //Create 'prdt_len' amount of PRD entries in the command table + for (i = 0; i < prdt_len; i++) + {//Use max PRD size until the remaining buffer is smaller than max size. + if (buf_size_tmp > AHCI_PRD_MAX_BYTES) + byte_count = AHCI_PRD_MAX_BYTES; + else + byte_count = buf_size_tmp; + + "prdt[%d].data_base_addr = 0x%X\n" , i, internal_buf_tmp; + "prdt[%d].data_byte_count = 0x%X\n\n", i, byte_count; + + cmd_table->prdt[i].data_base = internal_buf_tmp; + cmd_table->prdt[i].data_byte_count = byte_count - 1; //Zero-based value + buf_size_tmp -= byte_count; + internal_buf_tmp += byte_count; + } + //Setup the command FIS. + cmd_fis = &cmd_table->cmd_fis; + cmd_fis->type = FISt_H2D; + Bts(&cmd_fis->desc, AHCI_CF_DESCf_C); //Set Command bit in H2D FIS + + if (write) //Assumed support for LBA48. + cmd_fis->command = ATA_WRITE_DMA_EXT; + else + cmd_fis->command = ATA_READ_DMA_EXT; + + //Fill in the rest of the command FIS. + cmd_fis->lba0 = blk.u8[0]; + cmd_fis->lba1 = blk.u8[1]; + cmd_fis->lba2 = blk.u8[2]; + cmd_fis->device = 1 << 6; //Required as per ATA8-ACS section 7.25.3 + cmd_fis->lba3 = blk.u8[3]; + cmd_fis->lba4 = blk.u8[4]; + cmd_fis->lba5 = blk.u8[5]; + cmd_fis->count = count; + + //Wait on previous command to complete. + AHCIPortWait(bd->port_num, tS + 2); + //Issue the command. + Bts(&port->cmd_issue, cmd_slot); + //Wait on command to finish. + AHCIPortCmdWait(bd->port_num, cmd_slot); + + if (!write) //If internal_buf was created it back to argument buf. + if (bd->flags & BDF_INTERNAL_BUF) + { + "Writing back internal buffer\n"; + MemCopy(buf, internal_buf, buf_size); + } + return cmd_header->prd_byte_count; +} + +I64 AHCIAtaBlksRead(CBlkDev *bd, U8 *buf, I64 blk, I64 count) +{//Read 'blk' amount of blocks from AHCI disk device. Returns num of bytes transferred between disk and memory. + I64 byte_count = 0; + if (!count) + return 0; + if (count <= AHCI_PRDT_MAX_BLOCKS) + { + "$$GREEN$$READ less than MAX_BLOCKS$$FG$$\n"; + return AHCIAtaBlksRW(bd, buf, blk, count, FALSE); + } + else + { + "$$GREEN$$READ greater than MAX_BLOCKS\n"; + "read count: %d\n$$FG$$", count; + while (count > AHCI_PRDT_MAX_BLOCKS) + { + byte_count += AHCIAtaBlksRW(bd, buf, blk, AHCI_PRDT_MAX_BLOCKS, FALSE); + count -= AHCI_PRDT_MAX_BLOCKS; + blk += AHCI_PRDT_MAX_BLOCKS; + buf += AHCI_PRDT_MAX_BLOCKS * BLK_SIZE; + "$$GREEN$$read count: %d\n$$FG$$", count; + }$ER$ + byte_count += AHCIAtaBlksRW(bd, buf, blk, count, FALSE); + } + return byte_count; +} + +I64 AHCIAtaBlksWrite(CBlkDev *bd, U8 *buf, I64 blk, I64 count) +{//Write 'blk' amount of blocks to AHCI disk device. Returns num of bytes transferred between memory and disk. + I64 byte_count = 0; + if (!count) + return 0; + if (count <= AHCI_PRDT_MAX_BLOCKS) + { + "$$GREEN$$WRITE less than MAX_BLOCKS$$FG$$\n"; + return AHCIAtaBlksRW(bd, buf, blk, count, TRUE); + } + else + { + "$$GREEN$$WRITE greater than MAX_BLOCKS\n"; + "write count: %d$$FG$$\n", count; + while (count > AHCI_PRDT_MAX_BLOCKS) + { + byte_count += AHCIAtaBlksRW(bd, buf, blk, AHCI_PRDT_MAX_BLOCKS, TRUE); + count -= AHCI_PRDT_MAX_BLOCKS; + blk += AHCI_PRDT_MAX_BLOCKS; + buf += AHCI_PRDT_MAX_BLOCKS * BLK_SIZE; + "$$GREEN$$write count: %d\n$$FG$$\n", count; + } + byte_count += AHCIAtaBlksRW(bd, buf, blk, count, TRUE); + } + return byte_count; +} + +I64 AHCIAtapiBlksRead(CBlkDev *bd, U8 *buf, I64 blk, I64 count) +{//Read 'blk' amount of blocks from from AHCI ATAPI device. Returns num of bytes transferred. + CPortCmdTable *cmd_table; + CFisH2D *cmd_fis; + CAHCIPort *port = bd->ahci_port; + I64 i, byte_count, buf_size, buf_size_tmp, prdt_len, cmd_slot = AHCIPortCmdSlotGet(bd->port_num); + CPortCmdHeader *cmd_header = AHCIPortActiveHeaderGet(bd->port_num, cmd_slot); + U8 *internal_buf, *internal_buf_tmp; + + if (port->signature != AHCI_PxSIG_ATAPI) + { + ZenithErr("AHCI: Drive is not an ATAPI drive!\n"); + throw('AHCI'); + } + if (count < 1) + return 0; + + buf_size = buf_size_tmp = count * DVD_BLK_SIZE; + prdt_len = (buf_size - 1) / AHCI_PRD_MAX_BYTES + 1; + + "PRDT Length:\t%d\n", prdt_len; + "Count:\t\t\t%d\n", count; + "Buffer size:\t%X\n", buf_size; + + cmd_header->prdt_len = prdt_len; + + internal_buf = internal_buf_tmp = AHCIBufferAlign(bd, buf, buf_size, FALSE); + "Buffer:\t\t\t0x%X\n", internal_buf; + + if (!internal_buf) throw('AHCI'); + + Bts(&cmd_header->desc, AHCI_CH_DESCf_A); //Set ATAPI flag in command header + cmd_table = cmd_header->cmd_table_base; + MemSet(cmd_table, 0, sizeof(CPortCmdTable)); + + for (i = 0; i < prdt_len; i++) + { + if (buf_size_tmp > AHCI_PRD_MAX_BYTES) //$BK,1$SHOULD PROBABLY BE ATAPI MAX BYTES$BK,0$ + byte_count = AHCI_PRD_MAX_BYTES; + else + byte_count = buf_size_tmp; + + "prdt[%d].data_base_addr = 0x%X\n" , i, internal_buf_tmp; + "prdt[%d].data_byte_count = 0x%X\n\n", i, byte_count; + cmd_table->prdt[i].data_base = internal_buf_tmp; + cmd_table->prdt[i].data_byte_count = byte_count - 1; //Zero-based value + buf_size_tmp -= byte_count; + internal_buf_tmp += byte_count; + } + cmd_fis = &cmd_table->cmd_fis; + MemSet(cmd_fis, 0, sizeof(CFisH2D)); + + cmd_fis->type = FISt_H2D; + Bts(&cmd_fis->desc, AHCI_CF_DESCf_C); //Set Command bit in H2D FIS + + cmd_fis->feature_low = 1; //Necessary? + cmd_fis->command = ATA_PACKET; + + CAtapiReadCmd read_cmd; + MemSet(&read_cmd, 0, sizeof(CAtapiReadCmd)); + read_cmd.command = ATAPI_READ >> 8; //$BK,1$FIX$BK,0$ + read_cmd.lba = EndianU32(blk); + read_cmd.count = EndianU32(count); + MemCopy(&cmd_table->acmd, &read_cmd, 16); + + cmd_fis->count = count; //Necessary? + + AHCIPortWait(bd->port_num, tS + 2); + + Bts(&port->cmd_issue, cmd_slot); +// Sleep(1000); + AHCIPortCmdWait(bd->port_num, cmd_slot); + + if (bd->flags & BDF_INTERNAL_BUF) + { + "Writing back internal buffer\n"; + MemCopy(buf, internal_buf, buf_size); + } + return cmd_header->prd_byte_count; +} + +U0 AHCIPortInit(CBlkDev *bd, CAHCIPort *port, I64 port_num) +{//Initialize base addresses for command list and FIS receive area and start command execution on port. + CPortCmdHeader *cmd_header; + I64 i; + + bd->ahci_port = port; + bd->port_num = port_num; + + AHCIPortReset(port_num); + AHCIPortCmdStart(port_num); + + //Spin up, power on device. If the capability isn't suppport the bits will be read-only and this won't do anything. + port->command |= AHCI_PxCMDF_POD | AHCI_PxCMDF_SUD; + Sleep(100); //Why? + AHCIPortCmdStop(port_num); + + //'1K-byte' align as per SATA spec. + port->cmd_list_base = CAllocAligned(sizeof(CPortCmdHeader) * blkdev.cmd_slot_count, 1024, Fs->code_heap); + port->cmd_list_base_upper = 0; + + //Alloc where received FISes will be copied to. '256-byte' align as per spec. + port->fis_base = CAllocAligned(sizeof(CFisReceived), 256, Fs->code_heap); + port->fis_base_upper = 0; + + for (i = 0; i < blkdev.cmd_slot_count; i++) + { + cmd_header = &port->cmd_list_base(CPortCmdHeader *)[i]; + //Write Command FIS Length (CFL, a fixed size) in bits 4:0 of the desc. Takes size in U32s. + cmd_header->desc = sizeof(CFisH2D) / sizeof(U32); + + //'128-byte' align as per SATA spec, minus 1 since length is 1-based. + cmd_header->cmd_table_base = CAllocAligned(sizeof(CPortCmdTable) + sizeof(CPrdtEntry) * (AHCI_PRDT_MAX_LEN - 1), 128, Fs->code_heap); + cmd_header->cmd_table_base_upper = 0; + } + AHCIPortCmdStart(port_num); + AHCIPortIdentify(bd); +} + +U0 AHCIHbaReset() +{ + Bts(&blkdev.ahci_hba->ghc, AHCI_GHCf_HBA_RESET); + while (Bt(&blkdev.ahci_hba->ghc, AHCI_GHCf_HBA_RESET)); + Bts(&blkdev.ahci_hba->ghc, AHCI_GHCf_AHCI_ENABLE); +} + +U0 AHCIInit() +{ + CAHCIHba *hba; + CAHCIPort *port; + I64 i, bdf = PCIClassFind(PCIC_STORAGE << 16 | PCISC_AHCI << 8 + 1, 0); //0x010601, last byte prog_if, AHCI version 1.0 + + if (bdf == -1) + { + "No AHCI controller found.\n"; + return; + } + + "AHCI: controller found\n"; + hba = dev.uncached_alias + PCIReadU32(bdf.u8[2], bdf.u8[1], bdf.u8[0], PCIR_BASE5) & ~0x1F; //Last 4 bits not part of address. + blkdev.ahci_hba = hba; + + AHCIHbaReset; + "AHCI: HBA reset\n"; + + //Transferring ownership from BIOS if supported. + if (Bt(&hba->caps_ext, AHCI_CAPSEXTf_BOH)) + { + Bt(&hba->bohc, AHCI_BOHCf_OOS); + while (Bt(&hba->bohc, AHCI_BOHCf_BOS)); + Sleep(25); + if (Bt(&hba->bohc, AHCI_BOHCf_BB)) //if Bios Busy is still set after 25 mS, wait 2 seconds. + Sleep(2000); + } + + blkdev.cmd_slot_count = (hba->caps & 0x1F00) >> 8; + "AHCI: cmd slot count: %d\n", blkdev.cmd_slot_count; + + for (i = 0; i < AHCI_MAX_PORTS; i++) + { + if (Bt(&hba->ports_implemented, i)) + {//$BK,1$Make ports idle?$BK,0$ + port = &hba->ports[i]; + if (port->signature == AHCI_PxSIG_ATA || port->signature == AHCI_PxSIG_ATAPI) + { + "AHCI: port on %d\n", i; + if (port->signature == AHCI_PxSIG_ATAPI) + Bts(&port->command, AHCI_PxCMDf_ATAPI); + if (!AHCIPortIsIdle(i)) + { + "AHCI: Port not idle\n"; + AHCIPortCmdStop(i); + } + } + } + } +} + +/* +AHCIInit; + +#define BLKS 65537 + +U0 rw() +{ + U8 *buf = MAlloc(BLKS * BLK_SIZE); + U8 *buf2 = MAlloc(BLKS * DVD_BLK_SIZE); + U8 *buf3 = CAlloc(BLKS * DVD_BLK_SIZE); + + MemSet(buf, 0xFF, BLKS * BLK_SIZE); + + CBlkDev *bd = CAlloc(sizeof(CBlkDev)); + CBlkDev *bd2 = CAlloc(sizeof(CBlkDev)); +// AHCIPortInit(bd, &blkdev.ahci_hba->ports[0], 0); + AHCIPortInit(bd2, &blkdev.ahci_hba->ports[1], 1); + +// "$$PURPLE$$Byte count: %X$$FG$$\n", AHCIAtaBlksWrite(bd, buf, 0, BLKS); //write +// "$$PURPLE$$Byte count: %X$$FG$$\n", AHCIAtaBlksRead(bd, buf2, 0, BLKS);//read + +// "$$PURPLE$$Byte count: %X$$FG$$\n", AHCIAtapiBlksRead(bd2, buf3, 0, BLKS);//read + +// D(buf2 + (BLKS - 5) * BLK_SIZE, 5 * BLK_SIZE); + + "Capacity: %d\n", AHCIAtapiCapacityGet(bd2); +// D(buf3 + DVD_BLK_SIZE * (BLKS - 5), 5 * DVD_BLK_SIZE); + Free(buf); + Free(buf2); + Free(buf3); + Free(bd); + Free(bd2); +} + +rw; +*/ \ No newline at end of file diff --git a/src/Kernel/BlkDev/DiskATAId.CC b/src/Kernel/BlkDev/DiskATAId.CC index 5a7f664..c2beda6 100755 --- a/src/Kernel/BlkDev/DiskATAId.CC +++ b/src/Kernel/BlkDev/DiskATAId.CC @@ -38,56 +38,6 @@ Bool BootDVDProbeAll(CBlkDev *bd) { I64 d1, d2, i, j, k; - - /* AHCI Prototyping */ - CAHCIHba *hba; - CAHCIPort *port; - #exe {Option(OPTf_WARN_DUP_TYPES, OFF);}; - I64 bdf = PCIClassFind(PCIC_STORAGE << 16 | PCISC_AHCI << 8 + 1, 0); - #exe {Option(OPTf_WARN_DUP_TYPES, ON);}; - - if (bdf != -1) - { - "\nAHCI is not yet supported.\n\n"; - hba = dev.uncached_alias + PCIReadU32(bdf.u8[2], bdf.u8[1], bdf.u8[0], PCIR_BASE5) & ~0x1F; - Bts(&hba->ghc, AHCI_GHCf_HBA_RESET); - while (Bt(&hba->ghc, AHCI_GHCf_HBA_RESET)); - Bts(&hba->ghc, AHCI_GHCf_AHCI_ENABLE); - if (Bt(&hba->caps_ext, AHCI_CAPSEXTf_BOH)) - { - "Transferring AHCI ownership from BIOS.\n\n"; - Bt(&hba->bohc, AHCI_BOHCf_OOS); - while (Bt(&hba->bohc, AHCI_BOHCf_BOS)); - Sleep(25); - if (Bt(&hba->bohc, AHCI_BOHCf_BB)) //if Bios Busy is still set after 25 mS, wait 2 seconds. - Sleep(2000); - } - blkdev.ahci64 = Bt(&hba->caps, AHCI_CAPSf_S64A); - blkdev.cmd_slot_count = (hba->caps & 0x1F00) >> 8; - blkdev.ahci_hba = hba; - "ahci64: %Z\n", blkdev.ahci64, "ST_FALSE_TRUE"; - "ahci cmd slots: %d\n\n", blkdev.cmd_slot_count; - - for (i = 0; i < AHCI_MAX_PORTS; i++) - { - if (Bt(&hba->ports_implemented, i)) - { - "AHCI Port %d implemented.\n", i; - port = &hba->ports[i]; - "Port Signature: 0x%08X\n", port->signature; - if (port->signature == AHCI_PxSIG_ATAPI) - "ATAPI drive detected on AHCI Port %d.\n", i; - else if (port->signature == AHCI_PxSIG_ATA) - "ATA drive detected on AHCI Port %d.\n", i; - - "\n"; - } - } - "Reboot with IDE Compatibility mode set in the BIOS.\n"; - SysHlt; - } - /********************/ - bd->base1 = 0; for (k = 0; k < 256; k++) { diff --git a/src/Kernel/BlkDev/DiskAddDev.CC b/src/Kernel/BlkDev/DiskAddDev.CC index 6afafe8..442152b 100755 --- a/src/Kernel/BlkDev/DiskAddDev.CC +++ b/src/Kernel/BlkDev/DiskAddDev.CC @@ -266,6 +266,8 @@ U0 BlkDevsInitAll() for (i = 0; i < DRIVES_NUM; i++) blkdev.let_to_drive[i] = &blkdev.drvs[i]; + AHCIInit; + #exe { if (kernel_config->opts[CONFIG_MOUNT_IDE_AUTO]) StreamPrint("MountIDEAuto;"); diff --git a/src/Kernel/BlkDev/MakeBlkDev.CC b/src/Kernel/BlkDev/MakeBlkDev.CC index 9018126..343432a 100755 --- a/src/Kernel/BlkDev/MakeBlkDev.CC +++ b/src/Kernel/BlkDev/MakeBlkDev.CC @@ -1,6 +1,7 @@ #exe {Cd(__DIR__);}; #include "DiskStrA" #include "DiskCache" +#include "DiskAHCI" #include "DiskATA" #include "DiskATAId" #include "DiskBlkDev" diff --git a/src/Kernel/KernelA.HH b/src/Kernel/KernelA.HH index cd67057..793da9e 100755 --- a/src/Kernel/KernelA.HH +++ b/src/Kernel/KernelA.HH @@ -3398,8 +3398,8 @@ public class CBlkDevGlobals ins_base0, ins_base1; //Install cd/dvd controller. Bool dvd_boot_is_good, - ins_unit, ahci64, + ins_unit, pad[2]; }; diff --git a/src/Kernel/KernelC.HH b/src/Kernel/KernelC.HH index 41e7592..eca10da 100755 --- a/src/Kernel/KernelC.HH +++ b/src/Kernel/KernelC.HH @@ -359,6 +359,13 @@ extern I64 BlkDevAdd( CBlkDev *bd, I64 prt_num=I64_MIN, Bool whole_drive extern U0 DiskCacheInit(I64 size_in_U8s); public extern U0 DiskCacheInvalidate(CDrive *drive); public extern I64 MountIDEAuto(); +extern U0 AHCIHbaReset(); +extern U0 AHCIPortReset(I64 port_num); +extern U0 AHCIPortInit(CBlkDev *bd, CAHCIPort *port, I64 port_num); +extern I64 AHCIAtaBlksRW( CBlkDev *bd, U8 *buf, I64 blk, I64 count, Bool write); +extern I64 AHCIAtaBlksRead( CBlkDev *bd, U8 *buf, I64 blk, I64 count); +extern I64 AHCIAtaBlksWrite( CBlkDev *bd, U8 *buf, I64 blk, I64 count); +extern I64 AHCIAtapiBlksRead(CBlkDev *bd, U8 *buf, I64 blk, I64 count); public extern CBlkDevGlobals blkdev; #help_index "Graphics/Color"