os-k/kaleid/drivers/ata.c

67 lines
2.8 KiB
C

//----------------------------------------------------------------------------//
// OS on Kaleid //
// //
// Desc: Basic Read Only ATA Long mode Driver //
// //
// //
// Copyright © 2018-2021 The OS/K Team //
// //
// This file is part of OS/K. //
// //
// OS/K is free software: you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation, either version 3 of the License, or //
// any later version. //
// //
// OS/K is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY//without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with OS/K. If not, see <https://www.gnu.org/licenses/>. //
//----------------------------------------------------------------------------//
#include <drivers/ata.h>
#include <io/vga.h>
#include <io/pci.h>
void IoDumpFirstSector(void)
{
char sector[513] = {0};
KernLog("Sector addr : %p\n", &sector[0]);
IoReadATA(sector, 1, 1);
for (int i = 0; i < 513; i++) {
if (isascii(sector[i]))
KernLog("%c", sector[i]);
else
KernLog(" ");
}
KernLog("\n\n");
}
void IoDetectATA(void)
{
PciDev_t *ataDevice = IoPciGetDeviceByClass(MASS_STORAGE_CLASS,
SERIAL_ATA_SUBCLASS);
if(!ataDevice) {
return;
}
DebugLog("AHCI controller found at PCI config addr = %p\n",
ataDevice->configAddr);
struct HostToDeviceFIS fis;
memset(&fis, 0, sizeof(struct HostToDeviceFIS));
fis.type = REG_H2D;
fis.command = IDENTIFY;
fis.device = 0; // Master
fis.c = 1; // This is a command
}