Краткая справка |
Предыдущая Содержание Следующая |
Эта глава представляет следующие символы, связанные с управлением оборудованием:
#include <linux/kernel.h> void barrier(void) Этот "программный" барьер памяти просит через эту инструкцию компилятор считать всю память нестабильной.
#include <asm/system.h> void rmb(void); void read_barrier_depends(void); void wmb(void); void mb(void); Аппаратные барьеры памяти. Они просят через эту инструкцию процессор (и компилятор) выгрузить все чтения, записи памяти, или и то и другое.
#include <asm/io.h> 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 <linux/ioport.h> 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 <asm/io.h> 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 <asm/io.h> 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).
|
Предыдущая Содержание Следующая |