#include #include #include "disk.h" #include "helpers.h" static struct dskinfo_t hda_info; /* * Récupère les informations physiques d'un disque * Utilise un "cache" après son premier appel */ struct dskinfo_t dskinfo() { /* Première fois qu'on l'utilise, lire depuis le disque */ if ( hda_info.nb_sec == 0 ) { OUT8(HDA_CMDREG, CMD_DSKINFO); IN16(hda_info.nb_cyl, HDA_DATAREGS); IN16(hda_info.nb_sec, HDA_DATAREGS+2); IN16(hda_info.taille_sec, HDA_DATAREGS+4); } return hda_info; } /* * Se déplacer à une piste donnée */ void disk_seek(uint16_t cylinder, uint16_t sector) { /* Ecrire dans les ports de données */ OUT16(HDA_DATAREGS, cylinder); OUT16(HDA_DATAREGS+2, sector); /* Go */ OUT8(HDA_CMDREG, CMD_SEEK); WAIT_HDD(); }