#include "defines.h"
#include "ascsi.h"
#include <scsi.h>

int S_CMD( unlong id, int cdblen, unchar *cdb, int dlen, unchar *data )
// 任意のSCSIコマンド発行（リトライ付き）
//	id	SCSI-ID : 下位16bit=ID / 上位16bit=LUN
//	cdblen	CDB の長さ
//	cdb	CDB のアドレス
//	dlen	データ読み込みの場合、 バイト数
//		データ書き込みの場合、-バイト数
//		０ならデータ読み込み無し
//	data	データアドレス
// SCSI-BIOSがサポートしないベンダーユニークコマンドなどはこれで発行する
// CheckCondition時は自動的にRequestSenseする。
// リトライ出来る時はリトライする
{
int ret;
int retry = 0;
	do {
		// コマンド発行
		ret=S_CMD0( id, cdblen, cdb, dlen, data );
		if (!ret) break; // 正常終了
		// エラー時のリトライ
		ret=S_Retry(id,ret,&retry);
	} while (ret==0); // リトライ用
	return(ret);
}
