EN JA
SMB(4)
SMB(4) FreeBSD Kernel Interfaces Manual SMB(4)

名称

smbSMB 一般的な I/O デバイスドライバ

書式

device smb

解説

smb キャラクタデバイスドライバは、任意の smbus(4) インスタンスに一般的なの I/O を提供します。 SMB デバイスを制御するためには、下に記述された ioctl で /dev/smb? を使用します。これらの ioctl コマンドのうちのどれでもその引数として struct smbcmd へのポインタを取ります。

#include <sys/types.h> 
 
struct smbcmd { 
 char cmd; 
 int count; 
 u_char slave; 
 union { 
  char byte; 
  short word; 
 
  char *byte_ptr; 
  short *word_ptr; 
 
  struct { 
   short sdata; 
   short *rdata; 
  } process; 
 } data; 
};

slave フィールドは、常に使用され、通信するための SMBus スレーブデバイスのアドレスを提供します。スレーブアドレスは、7 つの最上位ビット (すなわち、“左そろえ”) で指定されます。スレーブアドレスの最下位ビットは、0 でなければなりません。

ioctl 説明

SMB_QUICK_WRITE QuickWrite コマンドは、どんなデータも転送せずに、バスに書き込む目的でデバイスアドレスを単に発行します。
SMB_QUICK_READ QuickRead コマンドは、どんなデータも転送せずに、バスに読み込む目的でデバイスアドレスを単に発行します。
SMB_SENDB SendByte コマンドは、デバイスへ cmd フィールドで提供されるバイトを送信します。
SMB_RECVB ReceiveByte コマンドは、 cmd フィールドで返されるデバイスから 1 バイトを読み込みます。
SMB_WRITEB WriteByte コマンドは、最初に cmd フィールドからデバイスへバイトを送信し、続いて data.byte で与えられたバイトを送信します。
SMB_WRITEW WriteWord コマンドは、最初に cmd フィールドからデバイスへバイトを送信し、続いて data.word で与えられたワードを送信します。 SMBus バイト順序は、定義によりリトルエンディアンであることに注意してください。
SMB_READB ReadByte コマンドは、最初に cmd フィールドからデバイスへバイトを送信し、次に、デバイスから 1 バイトデータを読み込みます。返されたデータは、 data.byte_ptr によって指される位置に格納されます。
SMB_READW ReadWord コマンドは、最初に cmd フィールドからデバイスへバイトを送信し、次に、デバイスから 1 ワードデータを読み込みます。返されたデータは、 data.word_ptr によって指される位置に格納されます。
SMB_PCALL ProcedureCall コマンドは、最初に cmd フィールドからデバイスへバイトを送信し、続いて data.process.sdata で提供されるワードを送信します。その後、デバイスからデータの 1 つのワードを読み込み、 data.process.rdata によって指される位置にそれを返します。
SMB_BWRITE BlockWrite コマンドは、最初に cmd フィールドからデバイスへバイトを送信し、続いて data.byte_ptr によって指されるバッファから得られる count バイトのデータを送信します。 SMBus 仕様は、単一のブロックの読み込み書き込みコマンドで高々 32 バイトのデータを転送することができる、と指図しています。この値として定数 SMB_MAXBLOCKSIZE が利用可能です。
SMB_BREAD BlockRead コマンドは、最初に cmd フィールドからデバイスへバイトを送信し、次にデバイスから count バイトのデータを読み込みます。これらのデータは、 data.byte_ptr によって指されるバッファに返されます。

read(2)write(2) システムコールは、このドライバでは実装されていません。

エラー

ioctl(2) コマンドは、次のドライバに特有のエラーを引き起こすかもしれません。
[ ENXIO]
デバイスは、選択に応答しませんでした。
[ EBUSY]
デバイスは、まだ使用中です。
[ ENODEV]
(起こるとは思われなかった) デバイスによってサポートされない操作です。
[ EINVAL]
一般的な引数エラーです。
[ EWOULDBLOCK]
SMBus トランザクション (処理) は、タイムアウトしました。

関連項目

ioctl(2), smbus(4)

歴史

smb マニュアルページは、 FreeBSD 3.0 ではじめて登場しました。

作者

このマニュアルページは、 Nicolas Souchu によって書かれました。
February 6, 2009 FreeBSD