* Copyright (c) 1988 University of Utah.
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
* This code is derived from software contributed to Berkeley by
* Van Jacobson of Lawrence Berkeley Laboratory and the Systems
* Programming Group of the University of Utah Computer Science Department.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* from: Utah $Hdr: sd.c 1.9 92/12/21$
* @(#)sd.c 8.1 (Berkeley) 6/10/93
#include <sys/disklabel.h>
#include <stand.att/saio.h>
#include <hp300/stand/samachdep.h>
#include <hp300/dev/scsireg.h>
struct disklabel sdlabel
;
u_long offset
[MAXPARTITIONS
];
struct sdminilabel sc_pinfo
;
register struct sd_softc
*ss
= &sd_softc
[ctlr
][unit
];
stat
= scsi_test_unit_rdy(ctlr
, unit
);
/* drive may be doing RTZ - wait a bit */
if (stat
== STS_CHECKCOND
) {
stat
= scsi_test_unit_rdy(ctlr
, unit
);
printf("sd(%d,%d,0,0): init failed (stat=%x)\n",
* try to get the drive block size.
stat
= scsi_read_capacity(ctlr
, unit
,
(u_char
*)capbuf
, sizeof(capbuf
));
if (capbuf
[1] > DEV_BSIZE
)
for (; capbuf
[1] > DEV_BSIZE
; capbuf
[1] >>= 1)
struct sdminilabel defaultpinfo
= {
{ 1024, 17408, 0, 17408, 115712, 218112, 82944, 115712 }
struct sd_softc
*ss
= &sd_softc
[io
->i_adapt
][io
->i_ctlr
];
register struct sdminilabel
*pi
= &ss
->sc_pinfo
;
register struct disklabel
*lp
= &sdlabel
;
char *msg
, *readdisklabel();
bzero((caddr_t
)lp
, sizeof *lp
);
lp
->d_secsize
= (DEV_BSIZE
<< ss
->sc_blkshift
);
msg
= readdisklabel(io
, sdstrategy
, lp
);
printf("sd(%d,%d,%d,%d): WARNING: %s, ",
io
->i_adapt
, io
->i_ctlr
, io
->i_unit
, io
->i_part
, msg
);
printf("using old default partitioning\n");
printf("defining `c' partition as entire disk\n");
pi
->offset
[0] = pi
->offset
[1] = -1;
pi
->npart
= lp
->d_npartitions
;
for (i
= 0; i
< pi
->npart
; i
++)
pi
->offset
[i
] = lp
->d_partitions
[i
].p_size
== 0 ?
-1 : lp
->d_partitions
[i
].p_offset
;
register struct sd_softc
*ss
;
if (ctlr
>= NSCSI
|| scsialive(ctlr
) == 0)
ss
= &sd_softc
[ctlr
][unit
];
if (sdinit(ctlr
, unit
) == 0)
if (part
>= ss
->sc_pinfo
.npart
|| ss
->sc_pinfo
.offset
[part
] == -1)
io
->i_boff
= ss
->sc_pinfo
.offset
[part
];
register int ctlr
= io
->i_adapt
;
register int unit
= io
->i_ctlr
;
register struct sd_softc
*ss
= &sd_softc
[ctlr
][unit
];
daddr_t blk
= io
->i_bn
>> ss
->sc_blkshift
;
u_int nblk
= io
->i_cc
>> ss
->sc_blkshift
;
stat
= scsi_tt_read(ctlr
, unit
, io
->i_ma
, io
->i_cc
, blk
, nblk
);
stat
= scsi_tt_write(ctlr
, unit
, io
->i_ma
, io
->i_cc
, blk
, nblk
);
printf("sd(%d,%d,%d,%d): block=%x, error=0x%x\n",
ctlr
, unit
, io
->i_unit
, io
->i_part
, blk
, stat
);
if (++ss
->sc_retry
> SDRETRY
)