ИМЯ
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, в
основном,
уже
выполнено
в ядре на
уровне PCI, и
поэтому
данные
вызовы,
обычно,
ненужны
при вызове
из
пользовательского
пространства.
- pciconfig_read()
- Выполняет
чтение в
буфер buf из
устройства
dev со
смещением
off.
- pciconfig_write()
- Выполняет
запись
буфера buf в
устройство
dev со
смещением
off.
- pciconfig_iobase()
- Принимает
пару
шина/функция_устройства
и
возвращает
физический
адрес или
смещения в
памяти (для
таких
вещей как prep,
это 0xc0000000), базы
ввода-вывода
для циклов
PIO, или
промежутки
(holes) ISA, если они
есть.
ВОЗВРАЩАЕМОЕ
ЗНАЧЕНИЕ
- pciconfig_read()
- При
успешном
выполнении
возвращается
ноль. В
случае
ошибки
возвращается
-1, а errno
устанавливается
в
соответствующее
значение.
- pciconfig_write()
- При
успешном
выполнении
возвращается
ноль. В
случае
ошибки
возвращается
-1, а errno
устанавливается
в
соответствующее
значение.
- pciconfig_iobase()
- Возвращает
информацию
о
расположении
различных
областей
ввода-вывода
в
физической
памяти
согласно
значению
which.
Значениями
which могут
быть: IOBASE_BRIDGE_NUMBER,
IOBASE_MEMORY, IOBASE_IO, IOBASE_ISA_IO,
IOBASE_ISA_MEM.
ОШИБКИ
- EINVAL
- Неправильное
значение
len. Не
применимо
к pciconfig_iobase().
- EIO
- Ошибка
ввода-вывода.
- ENODEV
- Для pciconfig_iobase()
значение
«рукава (hose)»
равно NULL. Для
других
вызовов не
удаётся
найти
слот.
- ENOSYS
- Данные
вызовы в
системе не
реализованы
(не
определён
макрос CONFIG_PCI).
- EOPNOTSUPP
- Данное
значение
верно
только для
pciconfig_iobase().
Возвращается,
если
указано
неверное
значение
which.
- EPERM
- Пользователь
не имеет
мандата
CAP_SYS_ADMIN. Не
применимо
к pciconfig_iobase().
СООТВЕТСТВИЕ
СТАНДАРТАМ
Данные
вызовы
есть
только в Linux,
они
доступны
начиная с
версии 2.0.26/2.1.11.