#include "global.h"
#include "prompts.h"
#include "io.h"
#include "param.h"
#include "startup.h"
#ifdef sparc
#include <sys/hdio.h>
#endif
uint64_t
get_mlba(void)
{
u_ioparam_t ioparam;
ioparam.io_bounds.lower = (1024 * 16) + 68;
ioparam.io_bounds.upper = UINT_MAX64;
return (input(FIO_INT64, "Enter maximum number of LBAs",
':', &ioparam, NULL, DATA_INPUT));
}
int
get_ncyl(void)
{
u_ioparam_t ioparam;
ioparam.io_bounds.lower = 1;
ioparam.io_bounds.upper = MAX_CYLS;
return (input(FIO_INT, "Enter number of data cylinders",
':', &ioparam, NULL, DATA_INPUT));
}
int
get_acyl(int n_cyls)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 2;
ioparam.io_bounds.upper = MAX_CYLS - n_cyls;
deflt = 2;
return (input(FIO_INT, "Enter number of alternate cylinders", ':',
&ioparam, &deflt, DATA_INPUT));
}
int
get_pcyl(int n_cyls, int a_cyls)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = n_cyls + a_cyls;
ioparam.io_bounds.upper = MAX_CYLS;
deflt = n_cyls + a_cyls;
return (input(FIO_INT, "Enter number of physical cylinders", ':',
&ioparam, &deflt, DATA_INPUT));
}
int
get_nhead(void)
{
u_ioparam_t ioparam;
ioparam.io_bounds.lower = 1;
ioparam.io_bounds.upper = MAX_HEADS;
return (input(FIO_INT, "Enter number of heads", ':',
&ioparam, NULL, DATA_INPUT));
}
int
get_phead(int n_heads, ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
if (SCSI) {
ioparam.io_bounds.lower = n_heads;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter physical number of heads",
':', &ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_PHEAD;
return (deflt);
}
}
return (0);
}
int
get_nsect(void)
{
u_ioparam_t ioparam;
ioparam.io_bounds.lower = 1;
ioparam.io_bounds.upper = MAX_SECTS;
return (input(FIO_INT,
"Enter number of data sectors/track", ':',
&ioparam, NULL, DATA_INPUT));
}
int
get_psect(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
if (SCSI) {
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter number of physical sectors/track",
':', &ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_PSECT;
return (deflt);
}
}
return (0);
}
int
get_bpt(int n_sects, ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
if (SMD) {
*options |= SUP_BPT;
ioparam.io_bounds.lower = 1;
ioparam.io_bounds.upper = INFINITY;
deflt = n_sects * cur_blksz;
return (input(FIO_INT, "Enter number of bytes/track",
':', &ioparam, &deflt, DATA_INPUT));
}
return (0);
}
int
get_rpm(void)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = MIN_RPM;
ioparam.io_bounds.upper = MAX_RPM;
deflt = AVG_RPM;
return (input(FIO_INT, "Enter rpm of drive", ':',
&ioparam, &deflt, DATA_INPUT));
}
int
get_fmt_time(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter format time", ':',
&ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_FMTTIME;
return (deflt);
}
return (0);
}
int
get_cyl_skew(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter cylinder skew", ':',
&ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_CYLSKEW;
return (deflt);
}
return (0);
}
int
get_trk_skew(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter track skew", ':',
&ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_TRKSKEW;
return (deflt);
}
return (0);
}
int
get_trks_zone(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter tracks per zone", ':',
&ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_TRKS_ZONE;
return (deflt);
}
return (0);
}
int
get_atrks(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter alternate tracks", ':',
&ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_ATRKS;
return (deflt);
}
return (0);
}
int
get_asect(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter alternate sectors", ':',
&ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_ASECT;
return (deflt);
}
return (0);
}
int
get_cache(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = 0xff;
if (input(FIO_OPINT, "Enter cache control", ':',
&ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_CACHE;
return (deflt);
}
return (0);
}
int
get_threshold(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter prefetch threshold",
':', &ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_PREFETCH;
return (deflt);
}
return (0);
}
int
get_min_prefetch(ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = 0;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter minimum prefetch",
':', &ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_CACHE_MIN;
return (deflt);
}
return (0);
}
int
get_max_prefetch(int min_prefetch, ulong_t *options)
{
u_ioparam_t ioparam;
int deflt;
ioparam.io_bounds.lower = min_prefetch;
ioparam.io_bounds.upper = INFINITY;
if (input(FIO_OPINT, "Enter maximum prefetch",
':', &ioparam, &deflt, DATA_INPUT)) {
*options |= SUP_CACHE_MAX;
return (deflt);
}
return (0);
}
int
get_bps(void)
{
u_ioparam_t ioparam;
int deflt;
if (cur_ctype->ctype_flags & CF_SMD_DEFS) {
ioparam.io_bounds.lower = MIN_BPS;
ioparam.io_bounds.upper = MAX_BPS;
deflt = AVG_BPS;
return (input(FIO_INT, "Enter bytes per sector",
':', &ioparam, &deflt, DATA_INPUT));
}
return (0);
}
char *
get_asciilabel(void)
{
return ((char *)(uintptr_t)input(FIO_OSTR,
"Enter disk type name (remember quotes)", ':',
NULL, NULL, DATA_INPUT));
}