diff --git a/core/main.c b/core/main.c index d04addd..c3a188f 100644 --- a/core/main.c +++ b/core/main.c @@ -46,7 +46,7 @@ void idleThread(void *arg) #define FILE_MAX_SIZE 64 // In nb of sectors void loadUserSpace() { - struct ata_partition *part = ATAGetPartition(1); + struct ata_partition *part = ATAGetPartitionByType(PART_TYPE_LINUX); if (part == NULL) { printf("No user partition found\n"); diff --git a/drivers/ata.c b/drivers/ata.c index fbd6aea..82922fa 100644 --- a/drivers/ata.c +++ b/drivers/ata.c @@ -521,6 +521,19 @@ struct ata_partition *ATAGetPartition(int id) return NULL; } +struct ata_partition *ATAGetPartitionByType(uint type) +{ + struct ata_partition *part; + int count; + list_foreach(partitions, part, count) + { + if (part->type == type) + return part; + } + + return NULL; +} + struct ata_partition *ATAPartitionCreate(uint type, uint size, uint32_t lba, struct ata_device *dev) { diff --git a/drivers/ata.h b/drivers/ata.h index b6180e3..304cb5b 100644 --- a/drivers/ata.h +++ b/drivers/ata.h @@ -104,5 +104,6 @@ int ATAReadPartitionSector(struct ata_partition *part, int offset, uint nbSector int ATAReadSector(struct ata_device *dev, int lba, uint nbSector, void *buf); int ATAWriteSector(struct ata_device *dev, int lba, uint nbSector, void *buf); struct ata_device *ATAGetDevice(int ctlId, int devId); +struct ata_partition *ATAGetPartitionByType(uint type); int ATAReadPartition(struct ata_device *dev); struct ata_partition *ATAGetPartition(int id);