#include #include #include "disk.h" #include "helpers.h" #include "sector.h" /* * Lit un secteur et stocke la valeur dans buffer */ void read_sector(uint16_t cylinder, uint16_t sector, uintptr_t *buffer) { struct dskinfo_t info = dskinfo(); disk_seek(cylinder, sector); /* Ecrire 1 secteur */ OUT16(HDA_DATAREGS, 1); /* Go */ OUT8(HDA_CMDREG, CMD_READ); /* WAIT */ WAIT_HDD(); memcpy(buffer, MASTERBUFFER, info.taille_sec); } /* * Ecrit le contenu de buffer dans un secteur */ void write_sector(uint16_t cylinder, uint16_t sector, uintptr_t *buffer) { struct dskinfo_t info = dskinfo(); disk_seek(cylinder, sector); /* Ecrire 1 secteur */ OUT16(HDA_DATAREGS, 1); memcpy(MASTERBUFFER, buffer, info.taille_sec); /* Go */ OUT8(HDA_CMDREG, CMD_WRITE); /* WAIT ?*/ WAIT_HDD(); } /* * Format un secteur avec la valeur value */ void format_sector(uint16_t cylinder, uint16_t sector, uint16_t nb_sector, int32_t value) { int i; /* Se déplacer au bon cylindre */ disk_seek(cylinder, sector); /* Nombre de secteurs à formatter */ OUT16(HDA_DATAREGS, nb_sector); /* Valeur à écrire */ OUT32(HDA_DATAREGS+2, value); /* Go ! */ OUT8(HDA_CMDREG, CMD_FORMAT); /* Attente de la fin de l'exécution */ for(i=0;i