17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
67c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
77c478bd9Sstevel@tonic-gate  * with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
217c478bd9Sstevel@tonic-gate  */
227c478bd9Sstevel@tonic-gate /*
23*db92b35aSGary Mills  * Copyright (c) 2011 Gary Mills
24*db92b35aSGary Mills  *
257c478bd9Sstevel@tonic-gate  * Copyright (c) 1999 by Sun Microsystems, Inc.
267c478bd9Sstevel@tonic-gate  * All rights reserved.
277c478bd9Sstevel@tonic-gate  */
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate #ifndef _PCFS_COMMON_H
307c478bd9Sstevel@tonic-gate #define	_PCFS_COMMON_H
317c478bd9Sstevel@tonic-gate 
327c478bd9Sstevel@tonic-gate /*
337c478bd9Sstevel@tonic-gate  * Common routines for the pcfs user-level utilities
347c478bd9Sstevel@tonic-gate  */
357c478bd9Sstevel@tonic-gate 
367c478bd9Sstevel@tonic-gate #ifdef __cplusplus
377c478bd9Sstevel@tonic-gate extern "C" {
387c478bd9Sstevel@tonic-gate #endif
397c478bd9Sstevel@tonic-gate 
407c478bd9Sstevel@tonic-gate #include <sys/isa_defs.h>
417c478bd9Sstevel@tonic-gate #include <sys/types.h>
427c478bd9Sstevel@tonic-gate #include <sys/stat.h>
43*db92b35aSGary Mills #include <sys/sysmacros.h>
447c478bd9Sstevel@tonic-gate #include "pcfs_bpb.h"
457c478bd9Sstevel@tonic-gate 
46*db92b35aSGary Mills #define	IN_RANGE(n, x, y) (((n) >= (x)) && ((n) <= (y)))
47*db92b35aSGary Mills 
487c478bd9Sstevel@tonic-gate /*
497c478bd9Sstevel@tonic-gate  *  A macro implementing a ceiling function for integer divides.
507c478bd9Sstevel@tonic-gate  */
517c478bd9Sstevel@tonic-gate #define	idivceil(dvend, dvsor) \
527c478bd9Sstevel@tonic-gate 	((dvend)/(dvsor) + (((dvend)%(dvsor) == 0) ? 0 : 1))
537c478bd9Sstevel@tonic-gate 
547c478bd9Sstevel@tonic-gate /*
557c478bd9Sstevel@tonic-gate  * These defines should move into a kernel header file eventually
567c478bd9Sstevel@tonic-gate  * and pcfs_mount may want to refuse to mount FAT32's that aren't "clean"
577c478bd9Sstevel@tonic-gate  *
587c478bd9Sstevel@tonic-gate  *	If Windows shuts down properly it sets the fourth bit of the 8th
597c478bd9Sstevel@tonic-gate  *	and final reserved byte at the start of the FAT.
607c478bd9Sstevel@tonic-gate  */
617c478bd9Sstevel@tonic-gate #define	WIN_SHUTDOWN_STATUS_BYTE	7
627c478bd9Sstevel@tonic-gate #define	WIN_SHUTDOWN_BIT_MASK		0x8
637c478bd9Sstevel@tonic-gate 
647c478bd9Sstevel@tonic-gate /*
657c478bd9Sstevel@tonic-gate  *  Define some special logical drives we use.
667c478bd9Sstevel@tonic-gate  */
677c478bd9Sstevel@tonic-gate #define	BOOT_PARTITION_DRIVE	99
687c478bd9Sstevel@tonic-gate #define	PRIMARY_DOS_DRIVE	1
697c478bd9Sstevel@tonic-gate 
707c478bd9Sstevel@tonic-gate /*
717c478bd9Sstevel@tonic-gate  * Function prototypes
727c478bd9Sstevel@tonic-gate  */
737c478bd9Sstevel@tonic-gate extern off64_t findPartitionOffset(int fd, char *ldrive);
747c478bd9Sstevel@tonic-gate extern char *stat_actual_disk(char *diskname, struct stat *info, char **suffix);
757c478bd9Sstevel@tonic-gate extern void header_for_dump(void);
767c478bd9Sstevel@tonic-gate extern void store_16_bits(uchar_t **bp, uint32_t v);
777c478bd9Sstevel@tonic-gate extern void store_32_bits(uchar_t **bp, uint32_t v);
787c478bd9Sstevel@tonic-gate extern void read_16_bits(uchar_t *bp, uint32_t *value);
797c478bd9Sstevel@tonic-gate extern void read_32_bits(uchar_t *bp, uint32_t *value);
807c478bd9Sstevel@tonic-gate extern void missing_arg(char *option);
817c478bd9Sstevel@tonic-gate extern void dump_bytes(uchar_t *b, int n);
827c478bd9Sstevel@tonic-gate extern void bad_arg(char *option);
837c478bd9Sstevel@tonic-gate extern void usage(void);
847c478bd9Sstevel@tonic-gate extern int  yes(void);
857c478bd9Sstevel@tonic-gate 
867c478bd9Sstevel@tonic-gate /*
877c478bd9Sstevel@tonic-gate  *	The assumption here is that _BIG_ENDIAN implies sparc, and
887c478bd9Sstevel@tonic-gate  *	so in addition to swapping bytes we also have to construct
897c478bd9Sstevel@tonic-gate  *	packed structures by hand to avoid bus errors due to improperly
907c478bd9Sstevel@tonic-gate  *	aligned pointers.
917c478bd9Sstevel@tonic-gate  */
927c478bd9Sstevel@tonic-gate #ifdef _BIG_ENDIAN
937c478bd9Sstevel@tonic-gate extern void swap_pack_grab32bpb(bpb_t *wbpb, struct _boot_sector *bsp);
947c478bd9Sstevel@tonic-gate extern void swap_pack_grabbpb(bpb_t *wbpb, struct _boot_sector *bsp);
957c478bd9Sstevel@tonic-gate #endif	/* _BIG_ENDIAN */
967c478bd9Sstevel@tonic-gate 
977c478bd9Sstevel@tonic-gate #ifdef __cplusplus
987c478bd9Sstevel@tonic-gate }
997c478bd9Sstevel@tonic-gate #endif
1007c478bd9Sstevel@tonic-gate 
1017c478bd9Sstevel@tonic-gate #endif /* _PCFS_COMMON_H */
102