понедельник, 11 апреля 2011 г.

9.5. Краткая справка


Краткая справка
Эта глава представляет следующие символы, связанные с управлением оборудованием:

#include
void barrier(void)
Это "программный" барьер памяти просит через эту инструкцию компилятор считать всю память нестабильной.

#include
void rmb(void);
void read_barrier_depends(void);
void wmb(void);
void mb(void);
Аппаратные барьеры памяти. Они просят через эту инструкцию процессор (и компилятор) выгрузить все чтения, записи памяти, или и то и другое.

#include
unsigned inb(unsigned port);
void outb(unsigned char byte, unsigned port);
unsigned inw(unsigned port);
void outw(unsigned short word, unsigned port);
unsigned inl(unsigned port);
void outl(unsigned doubleword, unsigned port);
Функции, которые используются для чтения и записи портов ввода/вывода. Они также могут быть вызваны программами пространства пользователя при условии, что они имеют правильные привилегии для доступа к портам.
unsigned inb_p(unsigned port);
...
Если после операции ввода/вывода необходима небольшая задержка, вы можете использовать шесть аналогичных предыдущему набору функций с паузой; эти функции с паузой имеют имена, оканчивающиеся на _p.
void insb(unsigned port, void *addr, unsigned long count);
void outsb(unsigned port, void *addr, unsigned long count);
void insw(unsigned port, void *addr, unsigned long count);
void outsw(unsigned port, void *addr, unsigned long count);
void insl(unsigned port, void *addr, unsigned long count);
void outsl(unsigned port, void *addr, unsigned long count);
"Строковые функции" оптимизированы для передачи данных из входного порта в область памяти, или наоборот. Такие передачи осуществляются чтением или записью в тот же порт count раз.

#include
struct resource *request_region(unsigned long start, unsigned long len, char *name);
void release_region(unsigned long start, unsigned long len);
int check_region(unsigned long start, unsigned long len);
Распределители ресурсов для портов ввода/вывода. (Не рекомендуемая) функция check возвращает 0 при успехе и меньше 0 в случае ошибки.
struct resource *request_mem_region(unsigned long start, unsigned long len, char *name);
void release_mem_region(unsigned long start, unsigned long len);
int check_mem_region(unsigned long start, unsigned long len);
Функции, которые занимаются распределением ресурсов для областей памяти.

#include
void *ioremap(unsigned long phys_addr, unsigned long size);
void *ioremap_nocache(unsigned long phys_addr, unsigned long size);
void iounmap(void *virt_addr);
ioremap переназначает физический диапазон адресов в виртуальное адресное пространство процессора, делая его доступным для ядра. iounmap освобождает назначения, когда они больше не требуются.

#include
unsigned int ioread8(void *addr);
unsigned int ioread16(void *addr);
unsigned int ioread32(void *addr);
void iowrite8(u8 value, void *addr);
void iowrite16(u16 value, void *addr);
void iowrite32(u32 value, void *addr);
Функции доступа, которые используются для работы с памятью ввода/вывода.
void ioread8_rep(void *addr, void *buf, unsigned long count);
void ioread16_rep(void *addr, void *buf, unsigned long count);
void ioread32_rep(void *addr, void *buf, unsigned long count);
void iowrite8_rep(void *addr, const void *buf, unsigned long count);
void iowrite16_rep(void *addr, const void *buf, unsigned long count);
void iowrite32_rep(void *addr, const void *buf, unsigned long count);
"Повторяющие" версии примитивов ввода/вывода для памяти.
unsigned readb(address);
unsigned readw(address);
unsigned readl(address);
void writeb(unsigned value, address);
void writew(unsigned value, address);
void writel(unsigned value, address);
memset_io(address, value, count);
memcpy_fromio(dest, source, nbytes);
memcpy_toio(dest, source, nbytes);
Старые, небезопасные для типа данных функции для доступа к памяти ввода/вывода.
void *ioport_map(unsigned long port, unsigned int count);
void ioport_unmap(void *addr);
Автор драйвера, который хочет рассматривать порты ввода/вывода, как будто они память ввода/вывода, может передать эти порты в ioport_map. Отображение, когда больше не требуется, должно завершаться (с помощью ioport_unmap).


Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.