pciconfig_read, pciconfig_write, pciconfig_iobase - pci
デバイス情報を扱う
#include <pci.h>
int pciconfig_read(unsigned long bus, unsigned long dfn,
unsigned long off, unsigned long len, void *buf);
int pciconfig_write(unsigned long bus, unsigned long dfn,
unsigned long off, unsigned long len, void *buf);
int pciconfig_iobase(long which, unsigned long bus,
unsigned long devfn);
PCI
デバイスとのやり取り
(interaction) は カーネル PCI
レイヤですでに処理されているので、
通常はこららの関数をユーザー空間からアクセスする必要はない。
-
pciconfig_read()
- デバイス dev
のオフセット off
の値を buf
に読み込む。
-
pciconfig_write()
- デバイス dev
のオフセット off に
buf
の値を書き込む。
-
pciconfig_iobase()
- bus/devfn
ペアをこの関数に渡し、
メモリーオフセット
(prep
のようなものでは、この値は
0xc0000000 である) と PIO
サイクルの IO
ベースの物理アドレスを取得する。
また、もしあるならば
ISA hole
の物理アドレスを取得する。
-
pciconfig_read()
- 成功した場合は 0
が返される。エラーの場合は
-1 が返され、 errno
が適切に設定される。
-
pciconfig_write()
- 成功した場合は 0
が返される。エラーの場合は
-1 が返され、 errno
が適切に設定される。
-
pciconfig_iobase()
-
which
の値に基づいて、物理メモリー内の様々な
I/O
領域の位置情報が返される。
which の値は、 IOBASE_BRIDGE_NUMBER,
IOBASE_MEMORY, IOBASE_IO, IOBASE_ISA_IO,
IOBASE_ISA_MEM である。
- EINVAL
-
len
の値が無効である。
このエラーは pciconfig_iobase()
には適用されない。
- EIO
- I/O エラー。
- ENODEV
-
pciconfig_iobase()
の場合、でホース (hose)
の値が NULL である。
他の呼び出しの場合、スロット
(slot)
が見つからない。
- ENOSYS
- このシステムはこれらの呼び出しを実装していない。
( CONFIG_PCI
が定義されていない)。
- EOPNOTSUPP
- この返り値は
pciconfig_iobase()
でのみ有効である。
このエラーは which
の値が無効であるときに返される。
- EPERM
- ユーザーが
CAP_SYS_ADMIN
権限を持っていない。
このエラーは pciconfig_iobase()
には適用されない。
これらの呼び出しは Linux
特有のものであり、 Linux
2.0.26/2.1.11
から使用可能である。
capabilities(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。