Changeset 375ab5e in mainline for uspace/srv/fs/fat/fat_fat.h


Ignore:
Timestamp:
2011-08-24T20:10:43Z (13 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
eb660787
Parents:
7fadb65 (diff), 842a2d2 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge from lp:~romanenko-oleg/helenos/fat.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/fat/fat_fat.h

    r7fadb65 r375ab5e  
    11/*
    22 * Copyright (c) 2008 Jakub Jermar
     3 * Copyright (c) 2011 Oleg Romanenko
    34 * All rights reserved.
    45 *
     
    2930/** @addtogroup fs
    3031 * @{
    31  */ 
     32 */
    3233
    3334#ifndef FAT_FAT_FAT_H_
     
    4041#define FAT1            0
    4142
    42 #define FAT_CLST_RES0   0x0000
    43 #define FAT_CLST_RES1   0x0001
    44 #define FAT_CLST_FIRST  0x0002
    45 #define FAT_CLST_BAD    0xfff7
    46 #define FAT_CLST_LAST1  0xfff8
    47 #define FAT_CLST_LAST8  0xffff
     43#define FAT_CLST_RES0     0
     44#define FAT_CLST_RES1     1
     45#define FAT_CLST_FIRST    2
     46
     47#define FAT32_CLST_BAD    0x0ffffff7
     48#define FAT32_CLST_LAST1  0x0ffffff8
     49#define FAT32_CLST_LAST8  0x0fffffff
     50
     51#define FAT12_MASK        0x0fff
     52#define FAT16_MASK        0xffff
     53#define FAT32_MASK        0x0fffffff
     54
     55#define FAT12_CLST_MAX    4085
     56#define FAT16_CLST_MAX    65525
     57
     58/* Size in bytes for cluster value of FAT */
     59#define FAT12_CLST_SIZE   2
     60#define FAT16_CLST_SIZE   2
     61#define FAT32_CLST_SIZE   4
    4862
    4963/* internally used to mark root directory's parent */
     
    5266#define FAT_CLST_ROOT           FAT_CLST_RES1
    5367
     68/*
     69 * Convenience macros for computing some frequently used values from the
     70 * primitive boot sector members.
     71 */
     72#define RDS(bs)   ((sizeof(fat_dentry_t) * RDE((bs))) / BPS((bs))) + \
     73                   (((sizeof(fat_dentry_t) * RDE((bs))) % BPS((bs))) != 0)
     74#define SSA(bs)   (RSCNT((bs)) + FATCNT((bs)) * SF((bs)) + RDS(bs))
     75#define DS(bs)    (TS(bs) - SSA(bs))
     76#define CC(bs)    (DS(bs) / SPC(bs))
     77
     78#define FAT_IS_FAT12(bs)        (CC(bs) < FAT12_CLST_MAX)
     79#define FAT_IS_FAT16(bs) \
     80    ((CC(bs) >= FAT12_CLST_MAX) && (CC(bs) < FAT16_CLST_MAX))
     81#define FAT_IS_FAT32(bs)        (CC(bs) >= FAT16_CLST_MAX)
     82
     83#define FAT_CLST_SIZE(bs) \
     84    (FAT_IS_FAT32(bs) ? FAT32_CLST_SIZE : FAT16_CLST_SIZE)
     85
     86#define FAT_MASK(bs) \
     87    (FAT_IS_FAT12(bs) ? FAT12_MASK : \
     88    (FAT_IS_FAT32(bs) ? FAT32_MASK : FAT16_MASK))
     89
     90#define FAT_CLST_LAST1(bs)      (FAT32_CLST_LAST1 & FAT_MASK((bs)))
     91#define FAT_CLST_LAST8(bs)      (FAT32_CLST_LAST8 & FAT_MASK((bs)))
     92#define FAT_CLST_BAD(bs)        (FAT32_CLST_BAD & FAT_MASK((bs)))
     93
     94#define FAT_ROOT_CLST(bs) \
     95    (FAT_IS_FAT32(bs) ? uint32_t_le2host(bs->fat32.root_cluster) : \
     96    FAT_CLST_ROOT)
     97
    5498/* forward declarations */
    5599struct block;
     
    57101struct fat_bs;
    58102
    59 typedef uint16_t fat_cluster_t;
     103typedef uint32_t fat_cluster_t;
    60104
    61 #define fat_clusters_get(numc, bs, dh, fc) \
    62     fat_cluster_walk((bs), (dh), (fc), NULL, (numc), (uint16_t) -1)
     105#define fat_clusters_get(numc, bs, sid, fc) \
     106    fat_cluster_walk((bs), (sid), (fc), NULL, (numc), (uint32_t) -1)
    63107extern int fat_cluster_walk(struct fat_bs *, service_id_t, fat_cluster_t,
    64     fat_cluster_t *, uint16_t *, uint16_t);
     108    fat_cluster_t *, uint32_t *, uint32_t);
    65109
    66110extern int fat_block_get(block_t **, struct fat_bs *, struct fat_node *,
     
    78122extern int fat_alloc_shadow_clusters(struct fat_bs *, service_id_t,
    79123    fat_cluster_t *, unsigned);
     124extern int fat_get_cluster_fat12(struct fat_bs *, service_id_t, unsigned,
     125    fat_cluster_t, fat_cluster_t *);
     126extern int fat_get_cluster_fat16(struct fat_bs *, service_id_t, unsigned,
     127    fat_cluster_t, fat_cluster_t *);
     128extern int fat_get_cluster_fat32(struct fat_bs *, service_id_t, unsigned,
     129    fat_cluster_t, fat_cluster_t *);
    80130extern int fat_get_cluster(struct fat_bs *, service_id_t, unsigned,
    81131    fat_cluster_t, fat_cluster_t *);
     132extern int fat_set_cluster_fat12(struct fat_bs *, service_id_t, unsigned,
     133    fat_cluster_t, fat_cluster_t);
     134extern int fat_set_cluster_fat16(struct fat_bs *, service_id_t, unsigned,
     135    fat_cluster_t, fat_cluster_t);
     136extern int fat_set_cluster_fat32(struct fat_bs *, service_id_t, unsigned,
     137    fat_cluster_t, fat_cluster_t);
    82138extern int fat_set_cluster(struct fat_bs *, service_id_t, unsigned,
    83139    fat_cluster_t, fat_cluster_t);
Note: See TracChangeset for help on using the changeset viewer.