Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ rawscsi(4) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

open(2)

ioctl(2)

close(2)

RAWSCSI(4)  —  NEWS-OS Programmer’s Manual

名称

rawscsi − 汎用 SCSI インターフェース

形式

device rawscsi0 at iop0 priority 0
 
device rawscsi0 at hb0 priority 0
 
controller rawscsic0 at ap0 priority 0
device rawscsi0 at rawscsic0 drive 0 flags 0

解説

汎用 SCSI インターフェース rawscsi は、 SCSI (Small Computer System Interface) デバイスを コマンドレベルで操作するためのデバイスドライバです。 スペシャルファイル /dev/scsi[0-1][0-6] は、それぞれ SCSI デバイスのバス番号 0 〜1、ID 番号 0 〜 6 に 対応しています。

rawscsi は、 標準で全ての SCSI ID をサポートしています。 ターゲットの SCSI デバイスが SCSI コマンドの "Inquiry" に正しく応答すれば、 その SCSI ID に rawscsi が割り当てられます。
ただし、sd デバイスや st デバイスとして認識された SCSI ID には rawscsi は割り当てられません。

以下のものは /sys/newsiodev/scu.h に定義されています。

/∗
 ∗ screg.h
 ∗/
#defineSCSIIOCCMD   _IOWR(S, 0, struct sc_ureq)
#defineSCSIIOCGTIMEO_IOR(S, 1, int)
#defineSCSIIOCSTIMEO_IOW(S, 2, int)
#defineSCSIIOCMAXTR_IOR(S, 3, int)
 /∗
 ∗scsi user request parameter block
 ∗/
struct sc_ureq {
u_intscu_istatus;
u_intscu_tstatus;
u_intscu_identify;
u_intscu_message;
u_intscu_bytesec;
u_charscu_cdb[12];
u_charscu_param[20];
u_char∗scu_addr;
u_intscu_count;
};

ユーザプロセスから SCSI デバイスを制御するには、 sc_ureq 構造体にコマンド情報を書き込み、 ioctl() で rawscsi デバイスドライバに処理を要求します。 処理が終わると、sc_ureq 構造体に結果が戻ってきます。 その実行結果にしたがって、新たにコマンド情報を作成します。

intfd;
inttimeo;
intbytes;
struct sc_ureq∗scu;
 ioctl(fd, SCSIIOCCMD, scu);     ---- SCSI デバイスを操作する。
ioctl(fd, SCSIIOCGTIMEO, &timeo);  ---- コマンドのタイムアウト時間(秒)を得る。
ioctl(fd, SCSIIOCSTIMEO, &timeo);  ---- コマンドのタイムアウト時間(秒)を設定。
ioctl(fd, SCSIIOCMAXTR, &bytes);   ---- 1回のデータ転送の最大バイト数を得る。

sc_ureq 構造体には次のコマンド情報を書き込みます。

scu_istatus

0 に初期化します。 実行終了時には、イニシエータ (NEWS) のステータスが返ってきます。

scu_tstatus

0 に初期化します。 実行終了時には、ターゲット (SCSI デバイス) のステータスが返ってきます。

scu_identify

ターゲット SCSI デバイスへ送る 1 バイトのメッセージをセットします。 通常、IDENTIFY メッセージをセットします。

scu_message

通常、0 に初期化します。 拡張メッセージの同期転送要求メッセージを送りたい場合だけ、 scu_message に 1 (Extended Message) をセットして 拡張メッセージを送るモードにし、 scu_param に同期転送要求メッセージをセットします。 scu_message には最後に受け取った SCSI デバイスからのメッセージが入ります。

scu_bytesec

1 セクタのバイト数をセットします。 セクタ長が可変の場合、scu_count と同じ値をセットします。

scu_cdb[ ]

CDB (コマンド・ディスクリプタ・ブロック) をセットします。 CDB の内容については、各 SCSI デバイスの CDB 説明書を参照してください。

scu_param[ ]

20 バイト以下のパラメータ入出力領域として、 inquiry、 request sense、 mode select などのコマンドで使用します。 この領域を使わずに、 scu_addr で他の領域を指定してデータの入出力を行うこともできます。

∗scu_addr

データの転送開始アドレスをセットします。 scu_addr が 0 の時、データの転送開始アドレスは、 scu_param になります。 scu_addr にデータの転送開始アドレスをセットしたときは、 必ず scu_bytesec に正数をセットしてください。

scu_count

データの転送バイト数をセットします。 scu_cdb でセットしたデータ転送バイト数と異なる値をセットした場合、 正常なデータを得ることができませんので、 必ず scu_cdb と同じデータ転送バイト数にしてください。

 

ビット割当

scu_istatus          ---- イニシエータのステータス
   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+
|E P|W R|I P|W B|L B|T O|P E|H E|
+---+---+---+---+---+---+---+---+

EP (End of Process)

コマンドが正常終了した場合、 このビットがセットされます。 しかし、このビット以外のビットがセットされて終了した場合は、 ターゲットデバイスとの間で何らかの異常があったことを示します。

WR (Wait Reselection)

このビットがセットされている場合、 イニシエータがターゲットからの reselection を待っていることを表します。

IP (In Progress)

このビットがセットされている場合、 イニシエータとターゲットが論理的に接続しており、 コマンドの処理中であることを表します。

WB (Wait Bus free)

このビットがセットされている場合、 イニシエータが SCSI バスの使用権を得られるまで 待っている状態を表します。

LB (Loss of Busy)

このビットがセットされている場合、 ターゲットがディスコネクト・メッセージを送ってこないで、 バス・フリーの状態になったことを表します。

TO (Time Out)

このビットがセットされている場合、 セレクションフェーズで、 ターゲットからの応答がなく、 タイムアウトしたことを表します。

PE (Parity Error)

このビットがセットされている場合、 SCSI バス上で、 パリティーエラーが発生したことを示します。 ただし、LB ビットが同時にセットされている場合は、 このビットは意味を持ちません。

HE (Hardware Error)

このビットがセットされている場合、 SCSI バスがリセットされたことを表します。

 
 

scu_tstatus          ---- ターゲットからのステータス情報
   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+
| X | X | X |   |   |   |   | X |
+---+---+---+---+---+---+---+---+
              |   |   |   |
              +---+---+---+
              |
              |
              +-----------> +------+---------------------------------+
                            | 0000 | Good                            |
                            | 0001 | Check Condition                 |
                            | 0010 | Condition Met/Good              |
                            | 0011 | (reserved)                      |
                            | 0100 | Busy                            |
                            | 0101 | (reserved)                      |
                            | 0110 | (reserved)                      |
                            | 0111 | (reserved)                      |
                            | 1000 | Intermidiate/Good               |
                            | 1001 | (reserved)                      |
                            | 1010 | Intermidiate/Condition Met/Good |
                            | 1011 | (reserved)                      |
                            | 1100 | Reservation Conflict            |
                            | 1101 | (reserved)                      |
                            | 1110 | (reserved)                      |
                            | 1111 | (reserved)                      |
                            +------+---------------------------------+
 

 scu_identify          ---- アイデンティファイ・メッセージ
   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+
| 1 |   | 0 | 0 | 0 |   |   |   |
+---+---+---+---+---+---+---+---+
      |               |   |   |
      |               +---+---+
      |                   |
      |                   +---------->  LUN  (Logical Unit Number)
      |
      +------------------------------>  DISCONNECT Enable/Disable
 

関連ファイル

/dev/scsi?? 

関連事項

open(2), ioctl(2), close(2)

制限事項

NEWS ワークステーションは標準装備として SCSI (Small Computer System Interface) を採用しています。 ハードウェアプロトコルは ANSI X3T9.2 1987 に準拠していますが、 ソフトウェアプロトコルには一部制限事項があります。 以下にその内容を示します。
 

1.Disconnect / Reconnect 機能をサポートしています。

2.同期転送を実行できる機種、実行できない機種があります。

3.NEWS ワークステーションが取り扱うことの出来るメッセージは以下のとおりです。 ただし、 拡張メッセージは、同期転送要求メッセージ以外サポートしていません。 これ以外のメッセージを受け取った場合、 NEWS は ATTENTION CONDITION を生成し、Message Reject Message を発行します。

  メッセージ名    メッセージコード    転送方向
----------------------------------------------------------
  Command Complete             0                  IN
----------------------------------------------------------
  Extended Message             1                IN, OUT
----------------------------------------------------------
  Save Data Pointer            2                  IN
----------------------------------------------------------
  Restore Data Pointer         3                 IN
----------------------------------------------------------
  Disconnect                   4                  IN
----------------------------------------------------------
  Message Reject               7                IN, OUT
----------------------------------------------------------
  Identify                 0x80-0xc7            IN, OUT
----------------------------------------------------------

(注)NEWS ワークステーションは Message Reject メッセージを受け取ると、 交信が終了したものと判断して、 BSY 信号がネゲートされるのを待つ状態に入ります。

4.コマンドコードに規定はありません。 システムコールを発生させた時点での コマンドコードが、 そのまま SCSI バス上に出力されます。

5.1つのターゲットに対して、 前に発行したコマンドが終了する前に次のコマンドを発行することはできません。 (ターゲットがコマンドキューイングを サポートできる場合でも NEWS 側ではサポートしていません)

6.コマンドのリンク機能はサポートしていません。 リンクビットを 1 にしてコマンドブロックを発行した場合の動作は、 保証されません。 リンクビットは常に 0 にしてください。

7.NEWS ワークステーションはイニシエータとしてのみ機能します。 ターゲットとしての機能は持っていません。

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026