Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!usc!sdd.hp.com!decwrl!sun-barr!newstop!sun!wonky.Eng.Sun.COM!mjacob From: mjacob@wonky.Eng.Sun.COM (Matt Jacob) Newsgroups: comp.periphs.scsi Subject: Re: What's a poor target to do? Keywords: message out, parity error Message-ID: <138463@sun.Eng.Sun.COM> Date: 6 Jul 90 09:55:30 GMT References: <363@zds-ux.UUCP> Sender: news@sun.Eng.Sun.COM Organization: Sun Microsystems, Mt. View, Ca. Lines: 37 In article <363@zds-ux.UUCP> bjstaff@zds-ux.UUCP (Brad Staff) writes: >Imagine for a moment, if you will, the following: >1. The target signals a 'data in' phase. >2. The initiator detects a parity error in the data, and asserts ATN. >3. The target notices that ATN is asserted, and signals a 'message out' phase. >4. The initiator sends an 'initiator detected error' message. >5. The target detects a parity error in the message. > >What's the poor target to do? I can't find anything in the SCSI-1 spec that >addresses this situation. Perhaps the SCSI-2 spec does address this situation? Well, I don't have my scsi-2 spec in front of me, but here is a segment from a host adapter driver that gives a clue: /* * If we finish sending a message out, and we are * still in message out phase, then the target has * detected one or more parity errors in the message * we just sent and it is asking us to resend the * previous message. */ if ((esp->e_intr & ESP_INT_BUS) && phase == ESP_PHASE_MSG_OUT) { /* * As per SCSI-2 specification, if the message to * be re-sent is greater than one byte, then we * have to set ATN*. */ if (esp->e_omsglen > 1) { ep->esp_cmd = CMD_SET_ATN; } esplog(esp, LOG_ERR, "SCSI bus MESSAGE OUT phase parity error"); sp->cmd_pkt.pkt_statistics |= STAT_PERR; New_state(esp, ACTS_MSG_OUT); return (ACTION_PHASEMANAGE); }