-Wunused cleanup.

Correct a problem where an external bus reset on the 'background' channel of
a Twin Channel EISA controller could put the driver into an infinite loop.

Noticed by: Twin Channel bug, Joerg Wunsch <joerg@FreeBSD.org>
Submitted by: -Wunused, Poul-Henning Kamp <phk@freebsd.org>
This commit is contained in:
Justin T. Gibbs 1998-10-15 23:49:27 +00:00
parent b9450b7b2f
commit 1964f204c9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=40421

View File

@ -36,7 +36,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: aic7xxx.c,v 1.7 1998/10/09 17:41:39 gibbs Exp $
* $Id: aic7xxx.c,v 1.8 1998/10/15 18:21:47 gibbs Exp $
*/
/*
* A few notes on features of the driver.
@ -1727,10 +1727,32 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat)
u_int scb_index;
u_int status;
struct scb *scb;
char cur_channel;
char intr_channel;
if ((ahc->features & AHC_TWIN) != 0
&& ((ahc_inb(ahc, SBLKCTL) & SELBUSB) != 0))
cur_channel = 'B';
else
cur_channel = 'A';
intr_channel = cur_channel;
status = ahc_inb(ahc, SSTAT1);
if (status == 0) {
if ((ahc->features & AHC_TWIN) != 0) {
/* Try the other channel */
ahc_outb(ahc, SBLKCTL, ahc_inb(ahc, SBLKCTL) ^ SELBUSB);
status = ahc_inb(ahc, SSTAT1);
ahc_outb(ahc, SBLKCTL, ahc_inb(ahc, SBLKCTL) ^ SELBUSB);
intr_channel = (cur_channel == 'A') ? 'B' : 'A';
}
if (status == 0) {
printf("%s: Spurious SCSI interrupt\n", ahc_name(ahc));
return;
}
}
scb_index = ahc_inb(ahc, SCB_TAG);
status = ahc_inb(ahc, SSTAT1);
if (scb_index < ahc->scb_data->numscbs) {
scb = ahc->scb_data->scbarray[scb_index];
if ((scb->flags & SCB_ACTIVE) == 0)
@ -1739,14 +1761,9 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat)
scb = NULL;
if ((status & SCSIRSTI) != 0) {
char channel;
channel = 'A';
if ((ahc->features & AHC_TWIN) != 0
&& ((ahc_inb(ahc, SBLKCTL) & SELBUSB) != 0))
channel = 'B';
printf("%s: Someone reset channel %c\n",
ahc_name(ahc), channel);
ahc_reset_channel(ahc, channel, /* Initiate Reset */FALSE);
ahc_name(ahc), intr_channel);
ahc_reset_channel(ahc, intr_channel, /* Initiate Reset */FALSE);
} else if ((status & BUSFREE) != 0 && (status & SELTO) == 0) {
/*
* First look at what phase we were last in.
@ -2135,7 +2152,6 @@ ahc_parse_msg(struct ahc_softc *ahc, struct scb *scb,
}
case MSG_EXT_WDTR:
{
struct ccb_trans_settings neg;
u_int bus_width;
if (ahc->msg_buf[1] != MSG_EXT_WDTR_LEN) {
@ -2257,8 +2273,6 @@ ahc_handle_devreset(struct ahc_softc *ahc, int target, char channel,
struct ahc_devinfo devinfo;
struct cam_path *path;
path_id_t path_id;
u_int16_t targ_mask;
int scratch_offset = target;
int found;
int error;
@ -3830,7 +3844,6 @@ ahc_check_patch(struct ahc_softc *ahc, struct patch **start_patch,
{
struct patch *cur_patch;
struct patch *last_patch;
int patch_index;
int num_patches;
num_patches = sizeof(patches)/sizeof(struct patch);
@ -3840,7 +3853,6 @@ ahc_check_patch(struct ahc_softc *ahc, struct patch **start_patch,
while (cur_patch < last_patch && start_instr == cur_patch->begin) {
if (cur_patch->patch_func(ahc) == 0) {
int skip;
/* Start rejecting code */
*skip_addr = start_instr + cur_patch->skip_instr;
@ -3868,7 +3880,6 @@ ahc_download_instr(struct ahc_softc *ahc, int instrptr, u_int8_t *dconsts)
union ins_formats instr;
struct ins_format1 *fmt1_ins;
struct ins_format3 *fmt3_ins;
int fmt3;
u_int opcode;
/* Structure copy */
@ -4799,9 +4810,6 @@ ahc_dump_targcmd(struct target_cmd *cmd)
{
u_int8_t *byte;
u_int8_t *last_byte;
int initiator;
int target;
int lun;
int i;
byte = &cmd->icl;