OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [fs/] [partitions/] [ldm.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/**
2
 * ldm - Part of the Linux-NTFS project.
3
 *
4
 * Copyright (C) 2001,2002 Richard Russon <ldm@flatcap.org>
5
 * Copyright (C) 2001      Anton Altaparmakov <aia21@cantab.net>
6
 * Copyright (C) 2001,2002 Jakob Kemi <jakob.kemi@telia.com>
7
 *
8
 * Documentation is available at http://linux-ntfs.sf.net/ldm
9
 *
10
 * This program is free software; you can redistribute it and/or modify it
11
 * under the terms of the GNU General Public License as published by the Free
12
 * Software Foundation; either version 2 of the License, or (at your option)
13
 * any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program (in the main directory of the Linux-NTFS source
22
 * in the file COPYING); if not, write to the Free Software Foundation,
23
 * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24
 */
25
 
26
#ifndef _FS_PT_LDM_H_
27
#define _FS_PT_LDM_H_
28
 
29
#include <linux/types.h>
30
#include <linux/list.h>
31
#include <linux/genhd.h>
32
#include <linux/fs.h>
33
#include <asm/unaligned.h>
34
#include <asm/byteorder.h>
35
 
36
struct parsed_partitions;
37
 
38
/* Magic numbers in CPU format. */
39
#define MAGIC_VMDB      0x564D4442              /* VMDB */
40
#define MAGIC_VBLK      0x56424C4B              /* VBLK */
41
#define MAGIC_PRIVHEAD  0x5052495648454144      /* PRIVHEAD */
42
#define MAGIC_TOCBLOCK  0x544F43424C4F434B      /* TOCBLOCK */
43
 
44
/* The defined vblk types. */
45
#define VBLK_VOL5               0x51            /* Volume,     version 5 */
46
#define VBLK_CMP3               0x32            /* Component,  version 3 */
47
#define VBLK_PRT3               0x33            /* Partition,  version 3 */
48
#define VBLK_DSK3               0x34            /* Disk,       version 3 */
49
#define VBLK_DSK4               0x44            /* Disk,       version 4 */
50
#define VBLK_DGR3               0x35            /* Disk Group, version 3 */
51
#define VBLK_DGR4               0x45            /* Disk Group, version 4 */
52
 
53
/* vblk flags indicating extra information will be present */
54
#define VBLK_FLAG_COMP_STRIPE   0x10
55
#define VBLK_FLAG_PART_INDEX    0x08
56
#define VBLK_FLAG_DGR3_IDS      0x08
57
#define VBLK_FLAG_DGR4_IDS      0x08
58
#define VBLK_FLAG_VOLU_ID1      0x08
59
#define VBLK_FLAG_VOLU_ID2      0x20
60
#define VBLK_FLAG_VOLU_SIZE     0x80
61
#define VBLK_FLAG_VOLU_DRIVE    0x02
62
 
63
/* size of a vblk's static parts */
64
#define VBLK_SIZE_HEAD          16
65
#define VBLK_SIZE_CMP3          22              /* Name and version */
66
#define VBLK_SIZE_DGR3          12
67
#define VBLK_SIZE_DGR4          44
68
#define VBLK_SIZE_DSK3          12
69
#define VBLK_SIZE_DSK4          45
70
#define VBLK_SIZE_PRT3          28
71
#define VBLK_SIZE_VOL5          59
72
 
73
/* component types */
74
#define COMP_STRIPE             0x01            /* Stripe-set */
75
#define COMP_BASIC              0x02            /* Basic disk */
76
#define COMP_RAID               0x03            /* Raid-set */
77
 
78
/* Other constants. */
79
#define LDM_DB_SIZE             2048            /* Size in sectors (= 1MiB). */
80
 
81
#define OFF_PRIV1               6               /* Offset of the first privhead
82
                                                   relative to the start of the
83
                                                   device in sectors */
84
 
85
/* Offsets to structures within the LDM Database in sectors. */
86
#define OFF_PRIV2               1856            /* Backup private headers. */
87
#define OFF_PRIV3               2047
88
 
89
#define OFF_TOCB1               1               /* Tables of contents. */
90
#define OFF_TOCB2               2
91
#define OFF_TOCB3               2045
92
#define OFF_TOCB4               2046
93
 
94
#define OFF_VMDB                17              /* List of partitions. */
95
 
96
#define WIN2K_DYNAMIC_PARTITION 0x42            /* Formerly SFS (Landis). */
97
 
98
#define TOC_BITMAP1             "config"        /* Names of the two defined */
99
#define TOC_BITMAP2             "log"           /* bitmaps in the TOCBLOCK. */
100
 
101
/* Most numbers we deal with are big-endian and won't be aligned. */
102
#define BE16(x)                 ((u16)be16_to_cpu(get_unaligned((u16*)(x))))
103
#define BE32(x)                 ((u32)be32_to_cpu(get_unaligned((u32*)(x))))
104
#define BE64(x)                 ((u64)be64_to_cpu(get_unaligned((u64*)(x))))
105
 
106
/* Borrowed from msdos.c */
107
#define SYS_IND(p)              (get_unaligned(&(p)->sys_ind))
108
 
109
struct frag {                           /* VBLK Fragment handling */
110
        struct list_head list;
111
        u32             group;
112
        u8              num;            /* Total number of records */
113
        u8              rec;            /* This is record number n */
114
        u8              map;            /* Which portions are in use */
115
        u8              data[0];
116
};
117
 
118
/* In memory LDM database structures. */
119
 
120
#define GUID_SIZE               16
121
 
122
struct privhead {                       /* Offsets and sizes are in sectors. */
123
        u16     ver_major;
124
        u16     ver_minor;
125
        u64     logical_disk_start;
126
        u64     logical_disk_size;
127
        u64     config_start;
128
        u64     config_size;
129
        u8      disk_id[GUID_SIZE];
130
};
131
 
132
struct tocblock {                       /* We have exactly two bitmaps. */
133
        u8      bitmap1_name[16];
134
        u64     bitmap1_start;
135
        u64     bitmap1_size;
136
        u8      bitmap2_name[16];
137
        u64     bitmap2_start;
138
        u64     bitmap2_size;
139
};
140
 
141
struct vmdb {                           /* VMDB: The database header */
142
        u16     ver_major;
143
        u16     ver_minor;
144
        u32     vblk_size;
145
        u32     vblk_offset;
146
        u32     last_vblk_seq;
147
};
148
 
149
struct vblk_comp {                      /* VBLK Component */
150
        u8      state[16];
151
        u64     parent_id;
152
        u8      type;
153
        u8      children;
154
        u16     chunksize;
155
};
156
 
157
struct vblk_dgrp {                      /* VBLK Disk Group */
158
        u8      disk_id[64];
159
};
160
 
161
struct vblk_disk {                      /* VBLK Disk */
162
        u8      disk_id[GUID_SIZE];
163
        u8      alt_name[128];
164
};
165
 
166
struct vblk_part {                      /* VBLK Partition */
167
        u64     start;
168
        u64     size;                   /* start, size and vol_off in sectors */
169
        u64     volume_offset;
170
        u64     parent_id;
171
        u64     disk_id;
172
        u8      partnum;
173
};
174
 
175
struct vblk_volu {                      /* VBLK Volume */
176
        u8      volume_type[16];
177
        u8      volume_state[16];
178
        u8      guid[16];
179
        u8      drive_hint[4];
180
        u64     size;
181
        u8      partition_type;
182
};
183
 
184
struct vblk_head {                      /* VBLK standard header */
185
        u32 group;
186
        u16 rec;
187
        u16 nrec;
188
};
189
 
190
struct vblk {                           /* Generalised VBLK */
191
        u8      name[64];
192
        u64     obj_id;
193
        u32     sequence;
194
        u8      flags;
195
        u8      type;
196
        union {
197
                struct vblk_comp comp;
198
                struct vblk_dgrp dgrp;
199
                struct vblk_disk disk;
200
                struct vblk_part part;
201
                struct vblk_volu volu;
202
        } vblk;
203
        struct list_head list;
204
};
205
 
206
struct ldmdb {                          /* Cache of the database */
207
        struct privhead ph;
208
        struct tocblock toc;
209
        struct vmdb     vm;
210
        struct list_head v_dgrp;
211
        struct list_head v_disk;
212
        struct list_head v_volu;
213
        struct list_head v_comp;
214
        struct list_head v_part;
215
};
216
 
217
int ldm_partition (struct gendisk *hd, struct block_device *bdev,
218
        unsigned long first_sector, int first_minor);
219
 
220
#endif /* _FS_PT_LDM_H_ */
221
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.