1 - Add a 'direction' field to the scsi command structure that can be
    filled with the following values:
      DIR_INPUT, DIR_OUTPUT, DIR_NONE and DIR_UNKNOWN=0
      Set this field to DIR_UNKNOWN=0 by default.
 
>From Digital Unix  /usr/include/io/cam.h:
/* Defines for the CAM flags field in the CCB header. */

#define CAM_DIR_RESV       0x00000000   /* Data direction (00: reserved) */
#define CAM_DIR_IN         0x00000040   /* Data direction (01: DATA IN) */
#define CAM_DIR_OUT        0x00000080   /* Data direction (10: DATA OUT) */
#define CAM_DIR_NONE       0x000000C0   /* Data direction (11: no data) */
While UDI scsi spec has:
#define UDI_SCSI_DATA_IN   (1U<<0)
#define UDI_SCSI_DATA_OUT (1U<<1)

Basically, it can't be UNKNOWN because the Peripheral Driver must specify the
buffer address and total transfer size. Any  inconsistencies should return error
or let the host adaptor card simply return data overrun or data underrun.
 

I found CAM_DIR_NONE is potential hazard because
if some one specify CAM_DIR_NONE, another person
may mistakenly check for:
        If (flags & CAM_DIR_OUT) ...../* condition true and do something wrong */
 

I believe Linux should go for a standard (either UDI or CAM) and leave the
current interface alone (assuming things are still working).
The biggest problem is which standard is better and the effort and time to
accomplish it.

-- 
=============================
Tony Chung
 


Reply via email to