os-k/kaleid/drivers/ata.c

67 lines
2.8 KiB
C
Raw Normal View History

2019-05-23 23:21:58 +02:00
//----------------------------------------------------------------------------//
// GNU GPL OS/K //
// //
// Desc: Basic Read Only ATA Long mode Driver //
// //
// //
// Copyright © 2018-2020 The OS/K Team //
2019-05-23 23:21:58 +02:00
// //
// 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/>. //
//----------------------------------------------------------------------------//
2020-02-19 22:19:58 +01:00
#include <drivers/ata.h>
2019-05-23 23:21:58 +02:00
#include <io/vga.h>
2020-02-13 15:51:28 +01:00
#include <io/pci.h>
2019-05-23 23:21:58 +02:00
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");
}
2020-02-13 15:51:28 +01:00
void IoDetectATA(void)
{
2020-02-17 19:10:59 +01:00
PciDev_t *ataDevice = IoPciGetDeviceByClass(MASS_STORAGE_CLASS,
SERIAL_ATA_SUBCLASS);
2020-02-13 15:51:28 +01:00
2020-02-17 19:10:59 +01:00
if(!ataDevice) {
return;
}
2020-02-19 22:42:49 +01:00
DebugLog("AHCI controller found at PCI config addr = %p\n",
2020-02-17 19:10:59 +01:00
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
2020-02-19 19:28:30 +01:00
}