仕様に従ってdio_read関数を作成する。
宣言されたbdataはバイトデータを格納する変数である。
宣言されたpdio_resはリソース情報構造体(DIO_RESOURCE)を指す
ポインタ型の変数である。
dio_open内で登録したリソース情報構造体のアドレスを確認する。
リソース情報構造体のアドレスが正常に登録されていなければ、すなわち
NULLならばエラー(-ENODEV)を返して終了する。
正常に登録されていたらDIO_RESOURCEのポインタ型にキャストして
pdio_resに格納する。
カウント(count)は、読み出しを行うデータのバイトサイズである。
負の場合はエラー(-EINVAL)を返して終了する。1バイト以上を要求された
場合は仕様と異なるので1バイトに切りつめる処理を行う。
pdio_resポインタが指すI/Oポートのデータをinb関数で読み出す。
pdio_res->io_address[0]はI/Oポートアドレスである。
最後に、ユーザ空間のバッファを示すbuffにカーネル空間で取得した汎
用入力データをコピーする。
カーネル空間内のデータをユーザ空間へコピーするばあいには、
copy_to_user関数を使用する。
コピー完了後、転送を行なったデータサイズを戻り値としてdio_read関
数を終了する。今回の実験ではcountの値は1である。
以上の処理を全て使えば、1バイト入力のdio_read関数は完成する。