mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-16 10:20:30 +00:00
f9c10dfd1a
Made an All_FreeBSD() function. Added a cmd-line interface (lowest rank) to the tst01 program. The tst01 program is harmless (worst it can do is coredump), but it is instructive to run, you can see what the slice-code things of your disk...
136 lines
3.5 KiB
C
136 lines
3.5 KiB
C
/*
|
|
* ----------------------------------------------------------------------------
|
|
* "THE BEER-WARE LICENSE" (Revision 42):
|
|
* <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
|
|
* can do whatever you want with this stuff. If we meet some day, and you think
|
|
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
|
* ----------------------------------------------------------------------------
|
|
*
|
|
* $Id: libdisk.h,v 1.2 1995/04/29 01:55:23 phk Exp $
|
|
*
|
|
*/
|
|
|
|
typedef enum {whole, foo, fat, freebsd, extended, part, unused, reserved} chunk_e;
|
|
|
|
#define CHAR_N static char *chunk_n[] = { \
|
|
"whole","foo","fat","freebsd","extended","part","unused","reserved",0};
|
|
|
|
struct disk {
|
|
char *name;
|
|
u_long flags;
|
|
# define DISK_ON_TRACK 1
|
|
# define DISK_REAL_GEOM 2
|
|
u_long real_cyl;
|
|
u_long real_hd;
|
|
u_long real_sect;
|
|
u_long bios_cyl;
|
|
u_long bios_hd;
|
|
u_long bios_sect;
|
|
struct chunk *chunks;
|
|
};
|
|
|
|
struct chunk {
|
|
struct chunk *next;
|
|
struct chunk *part;
|
|
u_long offset;
|
|
u_long size;
|
|
u_long end;
|
|
char *name;
|
|
chunk_e type;
|
|
int subtype;
|
|
# define SUBTYPE_BSD_FS 1
|
|
# define SUBTYPE_BSD_SWAP 2
|
|
# define SUBTYPE_BSD_UNUSED 3
|
|
u_long flags;
|
|
# define CHUNK_PAST_1024 1
|
|
/* this chunk cannot be booted from */
|
|
# define CHUNK_BSD_COMPAT 2
|
|
/* this chunk is in the BSD-compatibility, and has a
|
|
* short name too, ie wd0s4f -> wd0f
|
|
*/
|
|
# define CHUNK_BAD144 4
|
|
/* this chunk has bad144 mapping */
|
|
# define CHUNK_ALIGN 8
|
|
};
|
|
|
|
struct disk *
|
|
Open_Disk(char *devname);
|
|
/* Will open the named disk, and return populated tree.
|
|
*/
|
|
|
|
struct disk *
|
|
Clone_Disk(struct disk *disk);
|
|
/* Clone a copy of a tree. Useful for "Undo" functionality
|
|
*/
|
|
|
|
void
|
|
Free_Disk(struct disk *disk);
|
|
/* Free a tree made with Open_Disk() or Clone_Disk()
|
|
*/
|
|
|
|
void
|
|
Debug_Disk(struct disk *disk);
|
|
/* Print the content of the tree to stdout
|
|
*/
|
|
|
|
struct disk *
|
|
Set_Phys_Geom(struct disk *disk, u_long cyl, u_long heads, u_long sects);
|
|
/* Use a different physical geometry. Makes sense for ST506 disks only.
|
|
* The tree returned is read from the disk, using this geometry.
|
|
*/
|
|
|
|
void
|
|
Set_Bios_Geom(struct disk *disk, u_long cyl, u_long heads, u_long sects);
|
|
/* Set the geometry the bios uses.
|
|
*/
|
|
|
|
int
|
|
Delete_Chunk(struct disk *disk, struct chunk *);
|
|
/* Free a chunk of disk_space
|
|
*/
|
|
|
|
void
|
|
Collapse_Disk(struct disk *disk);
|
|
/* Experimental, do not use.
|
|
*/
|
|
int
|
|
Collapse_Chunk(struct disk *disk, struct chunk *chunk);
|
|
/* Experimental, do not use.
|
|
*/
|
|
|
|
int
|
|
Create_Chunk(struct disk *disk, u_long offset, u_long size, chunk_e type, int subtype, u_long flags);
|
|
/* Create a chunk with the specified paramters
|
|
*/
|
|
|
|
void
|
|
All_FreeBSD(struct disk *d);
|
|
/* Make one FreeBSD chunk covering the entire disk
|
|
*/
|
|
|
|
char *
|
|
CheckRules(struct disk *);
|
|
/* Return char* to warnings about broken design rules in this disklayout
|
|
*/
|
|
|
|
/*
|
|
* Implementation details >>> DO NOT USE <<<
|
|
*/
|
|
|
|
struct disk *Int_Open_Disk(char *devname, u_long maxsize);
|
|
|
|
void Debug_Chunk(struct chunk *);
|
|
void Free_Chunk(struct chunk *);
|
|
struct chunk * Clone_Chunk(struct chunk *);
|
|
int Add_Chunk(struct disk *, u_long , u_long , char *, chunk_e, int , u_long);
|
|
void Bios_Limit_Chunk(struct chunk *, u_long);
|
|
void * read_block(int, daddr_t );
|
|
struct disklabel * read_disklabel(int, daddr_t);
|
|
u_short dkcksum(struct disklabel *);
|
|
int Aligned(struct disk *d, u_long offset);
|
|
u_long Next_Aligned(struct disk *d, u_long offset);
|
|
u_long Prev_Aligned(struct disk *d, u_long offset);
|
|
struct chunk * Find_Mother_Chunk(struct chunk *, u_long , u_long , chunk_e);
|
|
|
|
#define dprintf printf
|