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

// #define _CACHE_があるときはS_CacheRead()を呼び出すようになる(s_secreadc.h用)。
// その時はグローバル変数でキャッシュ構造体_S_scbが必要。

inline	int secread(unlong sec,long blocks,unlong scsiid,int blksz,unchar *buff)
{
	return(
	#ifdef _CACHE_
	_S_scb.id==scsiid? S_CacheRead(&_S_scb,sec,blocks,buff):
	#endif
	S_READEXT(sec,blocks,scsiid,blksz,buff)
	);
}

int S_SecRead(unlong sec,long blocks,unlong scsiid,int blksz,unchar *buff)
// 連続セクターの読み出し（汎用）
// 起動処理があること以外はS_READEXTと同じ
// return : =0:ok , !=0:error	・・・S_TESTUNIT/S_READEXTと同じ
// blocks : 読み込みブロック数 1〜65535
{
int ret;
int retry = 0;
	do {
		// 読み込み
		ret=secread(sec,blocks,scsiid,blksz,buff);
		if (!ret) break; // 正常終了
		// エラー時のリトライ
		ret=S_Retry(scsiid,ret,&retry);
	} while (ret==0); // リトライ用
	return(ret);
}
