Home | History | Annotate | Line # | Download | only in ahdilabel
privahdi.h revision 1.1
      1 /*	$NetBSD: privahdi.h,v 1.1 2000/08/07 09:23:41 leo Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 1999 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Julian Coleman, Waldi Ravens and Leo Weppelman.
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  * 3. All advertising materials mentioning features or use of this software
     19  *    must display the following acknowledgement:
     20  *        This product includes software developed by the NetBSD
     21  *        Foundation, Inc. and its contributors.
     22  * 4. Neither the name of The NetBSD Foundation nor the names of its
     23  *    contributors may be used to endorse or promote products derived
     24  *    from this software without specific prior written permission.
     25  *
     26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     36  * POSSIBILITY OF SUCH DAMAGE.
     37  */
     38 
     39 #include <sys/param.h>
     40 #include <sys/disklabel.h>
     41 #include <machine/ahdilabel.h>
     42 
     43 /* Flags for ahdi_readlabel() */
     44 #define	FORCE_AHDI	0x01	/* Read AHDI label when NetBSD label exists */
     45 #define	AHDI_IGN_EXISTS	0x02	/* Ignore partition exists flag (ICD tools) */
     46 #define	AHDI_IGN_EXT	0x04	/* Ignore last extended parition (HDDriver) */
     47 #define	AHDI_IGN_CKSUM	0x08	/* Ignore checksum mismatch on root sector */
     48 #define	AHDI_IGN_SPU	0x10	/* Ignore total sectors mismatch */
     49 
     50 /* Flags for ahdi_writelabel() */
     51 #define AHDI_KEEP_BOOT	0x01	/* Keep boot sector */
     52 #define AHDI_KEEP_BSL	0x02	/* Keep bad sector list */
     53 #define AHDI_KEEP_NBDA	0x04	/* Keep NetBSD label */
     54 
     55 struct ptable_part {
     56 	u_int8_t	flag;	/* partition flag */
     57 	u_int8_t	id[3];	/* id: GEM, BGM, NBD, ... */
     58 	u_int32_t	root;	/* root sector */
     59 	u_int32_t	start;	/* start sector */
     60 	u_int32_t	size;	/* size in sectors */
     61 	int		letter;	/* partition letter */
     62 };
     63 
     64 struct ahdi_ptable {
     65 	u_int32_t		nsectors;	/* number of sectors/track */
     66 	u_int32_t		ntracks;	/* number of tracks/cylinder */
     67 	u_int32_t		ncylinders;	/* number of cylinders */
     68 	u_int32_t		secpercyl;	/* number of sectors/cylinder */
     69 	u_int32_t		secperunit;	/* number of total sectors */
     70 	int			nparts;		/* number of partitions */
     71 	struct ptable_part	parts[MAXPARTITIONS];
     72 };
     73 
     74 int	 ahdi_buildlabel __P((struct ahdi_ptable *));
     75 int	 ahdi_checklabel __P((struct ahdi_ptable *));
     76 int	 ahdi_readlabel __P((struct ahdi_ptable *, char *, int));
     77 int	 ahdi_writedisktab __P((struct ahdi_ptable *, char *, char *, char *));
     78 int	 ahdi_writelabel __P((struct ahdi_ptable *, char *, int));
     79 
     80 extern int	ahdi_errp1, ahdi_errp2;
     81 
     82 /* Internal functions */
     83 u_int16_t		 ahdi_cksum __P((void *));
     84 void			 assign_letters __P((struct ahdi_ptable *));
     85 int			 check_magic __P((int, u_int, int));
     86 int			 dkcksum __P((struct disklabel *));
     87 void			*disk_read __P((int, u_int, u_int));
     88 int			 disk_write __P((int, u_int, u_int, void *));
     89 int			 invalidate_netbsd_label __P((int, u_int32_t));
     90 int			 openraw __P((const char *, int));
     91 struct disklabel	*read_dl __P((int));
     92 int			 read_rsec __P((int, struct ahdi_ptable *, u_int,
     93 			     u_int, int));
     94 int			 write_bsl __P((int));
     95