2 * ----------------------------------------------------------------------------
3 * "THE BEER-WARE LICENSE" (Revision 42):
4 * <phk@FreeBSD.org> wrote this file. As long as you retain this notice you
5 * can do whatever you want with this stuff. If we meet some day, and you think
6 * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
7 * ----------------------------------------------------------------------------
10 #include <sys/cdefs.h>
11 __FBSDID("$FreeBSD$");
18 #include <sys/types.h>
22 Set_Bios_Geom(struct disk
*disk
, u_long cyl
, u_long hd
, u_long sect
)
27 disk
->bios_sect
= sect
;
31 Sanitize_Bios_Geom(struct disk
*disk
)
38 if (disk
->bios_cyl
>= 65536)
40 if (disk
->bios_cyl
> 1024)
44 if (disk
->bios_hd
>= 256)
46 if (disk
->bios_hd
> 16)
50 if (disk
->bios_sect
>= 256)
52 if (disk
->bios_sect
> 63)
55 if (disk
->bios_cyl
* disk
->bios_hd
* disk
->bios_sect
!=
61 /* First try something that IDE can handle */
64 disk
->bios_cyl
= disk
->chunks
->size
/
65 (disk
->bios_sect
* disk
->bios_hd
);
68 if (disk
->bios_cyl
< 65536)
70 if (disk
->bios_cyl
< 1024)
74 /* Hmm, try harder... */
75 /* Assume standard SCSI parameter */
77 disk
->bios_sect
= 128;
82 disk
->bios_cyl
= disk
->chunks
->size
/
83 (disk
->bios_sect
* disk
->bios_hd
);
86 if (disk
->bios_cyl
< 65536)
89 /* Assume UIDE-133/98-A Challenger BIOS 0.9821C parameter */
90 disk
->bios_sect
= 255;
92 disk
->bios_cyl
= disk
->chunks
->size
/
93 (disk
->bios_sect
* disk
->bios_hd
);
95 if (disk
->bios_cyl
< 65536)
100 disk
->bios_cyl
= disk
->chunks
->size
/
101 (disk
->bios_sect
* disk
->bios_hd
);
106 All_FreeBSD(struct disk
*d
, int force_all
)
118 for (c
= d
->chunks
->part
; c
; c
= c
->next
)
119 if (c
->type
!= unused
) {
125 Sanitize_Bios_Geom(d
);
126 Create_Chunk(d
, c
->offset
, c
->size
, freebsd
, type
,
127 CHUNK_FORCE_ALL
, "FreeBSD");
129 Create_Chunk(d
, c
->offset
, c
->size
, freebsd
, type
, 0,