Lines Matching defs:pmp
86 struct msdosfsmount *pmp = NULL;
121 pmp = ecalloc(1, sizeof *pmp);
128 pmp->pm_BytesPerSec = getushort(b50->bpbBytesPerSec);
129 pmp->pm_ResSectors = getushort(b50->bpbResSectors);
130 pmp->pm_FATs = b50->bpbFATs;
131 pmp->pm_RootDirEnts = getushort(b50->bpbRootDirEnts);
132 pmp->pm_Sectors = getushort(b50->bpbSectors);
133 pmp->pm_FATsecs = getushort(b50->bpbFATsecs);
134 pmp->pm_SecPerTrack = getushort(b50->bpbSecPerTrack);
135 pmp->pm_Heads = getushort(b50->bpbHeads);
136 pmp->pm_Media = b50->bpbMedia;
140 __func__, pmp->pm_BytesPerSec, pmp->pm_ResSectors, pmp->pm_FATs,
141 pmp->pm_RootDirEnts, pmp->pm_Sectors, pmp->pm_FATsecs,
142 pmp->pm_SecPerTrack, pmp->pm_Heads, pmp->pm_Media));
145 if (!pmp->pm_BytesPerSec || !SecPerClust
146 || pmp->pm_SecPerTrack > 63) {
149 pmp->pm_BytesPerSec, SecPerClust,
150 pmp->pm_SecPerTrack));
156 pmp->pm_flags = flags & MSDOSFSMNT_MNTOPT;
157 if (pmp->pm_flags & MSDOSFSMNT_GEMDOSFS)
158 pmp->pm_flags |= MSDOSFSMNT_NOWIN95;
159 if (pmp->pm_flags & MSDOSFSMNT_NOWIN95)
160 pmp->pm_flags |= MSDOSFSMNT_SHORTNAME;
162 if (pmp->pm_Sectors == 0) {
163 pmp->pm_HiddenSects = getulong(b50->bpbHiddenSecs);
164 pmp->pm_HugeSectors = getulong(b50->bpbHugeSectors);
166 pmp->pm_HiddenSects = getushort(b33->bpbHiddenSecs);
167 pmp->pm_HugeSectors = pmp->pm_Sectors;
170 if (pmp->pm_RootDirEnts == 0) {
177 if (pmp->pm_Sectors || pmp->pm_FATsecs || vers) {
179 pmp->pm_Sectors, pmp->pm_FATsecs, vers));
183 pmp->pm_fatmask = FAT32_MASK;
184 pmp->pm_fatmult = 4;
185 pmp->pm_fatdiv = 1;
186 pmp->pm_FATsecs = getulong(b710->bpbBigFATsecs);
190 pmp->pm_flags |= MSDOSFS_FATMIRROR;
192 pmp->pm_curfat = getushort(b710->bpbExtFlags) & FATNUM;
194 pmp->pm_flags |= MSDOSFS_FATMIRROR;
197 if (FAT32(pmp)) {
214 || (pmp->pm_BytesPerSec < bsize)
215 || (pmp->pm_BytesPerSec & (pmp->pm_BytesPerSec - 1))
216 || (pmp->pm_HugeSectors == 0)
217 || (pmp->pm_HugeSectors * (pmp->pm_BytesPerSec / bsize)
229 tmp = pmp->pm_BytesPerSec / bsize;
230 pmp->pm_BytesPerSec = bsize;
231 pmp->pm_HugeSectors *= tmp;
232 pmp->pm_HiddenSects *= tmp;
233 pmp->pm_ResSectors *= tmp;
234 pmp->pm_Sectors *= tmp;
235 pmp->pm_FATsecs *= tmp;
240 if (pmp->pm_FATsecs == 0) {
246 pmp->pm_fatblk = pmp->pm_ResSectors;
247 if (FAT32(pmp)) {
248 pmp->pm_rootdirblk = getulong(b710->bpbRootClust);
249 pmp->pm_firstcluster = pmp->pm_fatblk
250 + (pmp->pm_FATs * pmp->pm_FATsecs);
251 pmp->pm_fsinfo = getushort(b710->bpbFSInfo);
253 pmp->pm_rootdirblk = pmp->pm_fatblk +
254 (pmp->pm_FATs * pmp->pm_FATsecs);
255 pmp->pm_rootdirsize = (pmp->pm_RootDirEnts * sizeof(struct direntry)
256 + pmp->pm_BytesPerSec - 1)
257 / pmp->pm_BytesPerSec;/* in sectors */
258 pmp->pm_firstcluster = pmp->pm_rootdirblk + pmp->pm_rootdirsize;
261 pmp->pm_nmbrofclusters = (pmp->pm_HugeSectors - pmp->pm_firstcluster) /
263 pmp->pm_maxcluster = pmp->pm_nmbrofclusters + 1;
264 pmp->pm_fatsize = pmp->pm_FATsecs * pmp->pm_BytesPerSec;
267 if (pmp->pm_nmbrofclusters <= (0xff0 - 2)) {
268 pmp->pm_fatmask = FAT12_MASK;
269 pmp->pm_fatmult = 3;
270 pmp->pm_fatdiv = 2;
272 pmp->pm_fatmask = FAT16_MASK;
273 pmp->pm_fatmult = 2;
274 pmp->pm_fatdiv = 1;
276 } else if (pmp->pm_fatmask == 0) {
277 if (pmp->pm_maxcluster
284 pmp->pm_fatmask = FAT12_MASK;
285 pmp->pm_fatmult = 3;
286 pmp->pm_fatdiv = 2;
288 pmp->pm_fatmask = FAT16_MASK;
289 pmp->pm_fatmult = 2;
290 pmp->pm_fatdiv = 1;
293 if (FAT12(pmp))
294 pmp->pm_fatblocksize = 3 * pmp->pm_BytesPerSec;
296 pmp->pm_fatblocksize = MAXBSIZE;
298 pmp->pm_fatblocksec = pmp->pm_fatblocksize / pmp->pm_BytesPerSec;
299 pmp->pm_bnshift = ffs(pmp->pm_BytesPerSec) - 1;
305 pmp->pm_bpcluster = SecPerClust * pmp->pm_BytesPerSec;
306 pmp->pm_crbomask = pmp->pm_bpcluster - 1;
307 pmp->pm_cnshift = ffs(pmp->pm_bpcluster) - 1;
312 __func__, pmp->pm_fatmask, pmp->pm_fatmult, pmp->pm_fatdiv,
313 pmp->pm_fatblocksize, pmp->pm_fatblocksec, pmp->pm_bnshift,
314 pmp->pm_bpcluster, pmp->pm_crbomask, pmp->pm_cnshift));
319 if (pmp->pm_bpcluster ^ (1 << pmp->pm_cnshift)) {
321 pmp->pm_bpcluster, pmp->pm_cnshift));
335 if (pmp->pm_fsinfo) {
344 (unsigned long)de_bn2kb(pmp, pmp->pm_fsinfo)));
345 if ((error = bread(devvp, de_bn2kb(pmp, pmp->pm_fsinfo),
346 pmp->pm_BytesPerSec, 0, &bp)) != 0)
353 pmp->pm_nxtfree = getulong(fp->fsinxtfree);
355 pmp->pm_fsinfo = 0;
364 if (pmp->pm_fsinfo) {
365 if ((pmp->pm_nxtfree == 0xffffffffUL) ||
366 (pmp->pm_nxtfree > pmp->pm_maxcluster))
367 pmp->pm_fsinfo = 0;
374 pmp->pm_inusemap = ecalloc(sizeof(*pmp->pm_inusemap),
375 ((pmp->pm_maxcluster + N_INUSEBITS) / N_INUSEBITS));
379 pmp->pm_dev = 0;
380 pmp->pm_devvp = devvp;
385 if ((error = msdosfs_fillinusemap(pmp)) != 0) {
394 pmp->pm_flags |= MSDOSFSMNT_RONLY;
396 pmp->pm_fmod = 1;
406 return pmp;
411 if (pmp) {
412 if (pmp->pm_inusemap)
413 free(pmp->pm_inusemap);
414 free(pmp);
421 msdosfs_root(struct msdosfsmount *pmp, struct vnode *vp) {
425 *vp = *pmp->pm_devvp;
426 if ((error = msdosfs_deget(pmp, MSDOSFSROOT, MSDOSFSROOT_OFS,