From mboxrd@z Thu Jan 1 00:00:00 1970 From: Douglas Gilbert Subject: Re: Status_byte() in drivers/scsi/scsi.h Date: Thu, 19 Jun 2003 19:10:20 +1000 Sender: linux-scsi-owner@vger.kernel.org Message-ID: <3EF17DFC.8030700@torque.net> References: <3EF178AC.CEC2C720@in.ibm.com> Reply-To: dougg@torque.net Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from bunyip.cc.uq.edu.au ([130.102.2.1]:21521 "EHLO bunyip.cc.uq.edu.au") by vger.kernel.org with ESMTP id S265737AbTFSI4m (ORCPT ); Thu, 19 Jun 2003 04:56:42 -0400 In-Reply-To: <3EF178AC.CEC2C720@in.ibm.com> List-Id: linux-scsi@vger.kernel.org To: Sachin Sant Cc: linux-scsi@vger.kernel.org Sachin Sant wrote: > There seems to be some problem with the status_byte( ) in scsi.h > > A SAM status code SAM_STAT_TASK_ABORTED is ignored by status_byte() - it > returns a status GOOD. If SAM status code SAM_STAT_TASK_ABORTED is set > status_byte() must return 0x20. > > In kernel file include/scsi/scsi.h new SCSI Architecture Model (SAM) > Status Codes were presented as following: > #define SAM_STAT_GOOD 0x00 > #define SAM_STAT_CHECK_CONDITION 0x02 > #define SAM_STAT_CONDITION_MET 0x04 > #define SAM_STAT_BUSY 0x08 > #define SAM_STAT_INTERMEDIATE 0x10 > #define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14 > #define SAM_STAT_RESERVATION_CONFLICT 0x18 > #define SAM_STAT_COMMAND_TERMINATED 0x22 /* obsolete in SAM-3 */ > #define SAM_STAT_TASK_SET_FULL 0x28 > #define SAM_STAT_ACA_ACTIVE 0x30 > #define SAM_STAT_TASK_ABORTED 0x40 > > This means that an implementation of a status_byte() function in > drivers/scsi/scsi.h has to be changed from: > > #define status_byte(result) (((result) >> 1) & 0x1f) > to: > #define status_byte(result) (((result) >> 1) & 0x3f) > > Otherwise it would ignore a status code SAM_STAT_TASK_ABORTED and return > GOOD. Sachin, The status_byte() macro is for SCSI-2 and earlier and matches a Linux-specific set of defines that are shifted from the "standard" values (e.g. CHECK_CONDITION). In those days bit 6 was not in use. We are still arguing about the exact form of the macro to use that matches the SAM_STAT_ defines show above. In the meantime you could use: #define sam_status_value(scmd_result) ((scmd_result) & 0x7e) and compare the result with the SAM_STAT_ defines above. Doug Gilbert