176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ----------------------------------------------------------------------- *
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Copyright 2004-2008 H. Peter Anvin - All Rights Reserved
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   This program is free software; you can redistribute it and/or modify
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   it under the terms of the GNU General Public License as published by
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Boston MA 02111-1307, USA; either version 2 of the License, or
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   (at your option) any later version; incorporated herein by reference.
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ----------------------------------------------------------------------- */
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * libfatint.h
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Internals for the libfat filesystem
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef LIBFATINT_H
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define LIBFATINT_H
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "libfat.h"
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "fat.h"
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct libfat_sector {
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    libfat_sector_t n;		/* Sector number */
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct libfat_sector *next;	/* Next in list */
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char data[LIBFAT_SECTOR_SIZE];
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman};
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanenum fat_type {
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    FAT12,
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    FAT16,
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    FAT28
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman};
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct libfat_filesystem {
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int (*read) (intptr_t, void *, size_t, libfat_sector_t);
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    intptr_t readptr;
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    enum fat_type fat_type;
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    unsigned int clustsize;
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int clustshift;
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int32_t endcluster;		/* Highest legal cluster number + 1 */
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int32_t rootcluster;	/* Root directory cluster */
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    libfat_sector_t fat;	/* Start of FAT */
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    libfat_sector_t rootdir;	/* Start of root directory */
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    libfat_sector_t data;	/* Start of data area */
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    libfat_sector_t end;	/* End of filesystem */
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct libfat_sector *sectors;
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman};
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* LIBFATINT_H */
56