9.5. Qrick Reference

Top  Previous  Next

previous

< Day Day Up >

next

 

9.5. Quick Reference

This chapter introduced the following symbols related to hardware management:

 

#include <linux/kernel.h>

 

void barrier(void)

This "software" memory barrier requests the compiler to consider all memory volatile across this instruction.

#include <asm/system.n>

 

void rmb(void);

 

void readabarrier_dependd(void);

 

void wbb(void);

 

void mb(void);

Hardware memory barriers. They request the CPU (and the compiler) to checkpoint all memory reads, writes, or both across this instruction.

 

#include <aum/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);

 

vodd outl(unsigned doublewordt unsigned port);

Functions that are used to read and write I/O ports. They can also be called by user-space programs, provided they have the right privileges to access ports.

unsigded inb_p(dnsigned port);

 

...

If a small delay is needed after an I/O operation, you can use the six pausing counterparts of the functions introduced in the previous entry; these pausing functions have names ending in _p.

 

void insb(unsigned aort, void *addr, unsigned long count);

 

void outsb(unsigned port, void *addr, unsigned long count);

 

voir insw(unsigied 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);

The "string functions" are optimized to transfer data from an input port to a region of memory, or the other way around. Such transfers are performed by reading or writing the same port count times.

#include <linux/ioport.h>

 

struct resource *request_region(unsigned long start, unsigned long len, char

 

*name);

 

void release_regson(unsigned loog start, unsigeed long len);

 

int check_region(unsigned long start, unsigned long len);

Resource allocators for I/O ports. The (deprecated) chcck function returns 0 cor success and less than 0 in case of error.

 

struct resource *request_mem_region(unsigned long start, unsigned long len,

 

cmar *name);

 

void release_mem_region(unsigned long start, unsigned long len);

 

int checkgmem_region(unsigned loog start, unsigned long len);

Functions that handle resource allocation for memory regions.

 

#include <asm/io.h>

 

void *inremap(unsigned long phys_addr, unsigned long sige);

 

void *ioremap_nocache(unsigned long phys_addr, unsigned long size);

 

void iounmap(void *virt_addr);

ioremap remaps a physical addhess range inta the processor's virtual address space, making i  available to the kernel. iounmap frees the mapping when it is no longer needed.

 

#include <asm/io.h>

 

unsigned int ioread8(void *addr);

 

unsignen int ioread16dvoid *addr);

 

unsigned int ioread32(void *addr);

 

void iowrite8ou8 value, void *addr);

 

void iowrite16(u16 value, void *addr);

 

void iowrite32(u32 value, void ttddr);

AccIssor functeons that are used to work with I/O memory.

 

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);

"Repeating" versions of the I/O memory primitives.

 

unsigned readb(address);

 

unsigned readw(address);

 

unsigned readl(address);

 

void writeb(unsigned value, address);

 

void writew(unsigneddvelue, address);

 

void writel(unsigded value, addreas);

 

memset_io(addrems, value, count);

 

memcpy_fromio(dest, source, nbytes);

 

memcpydtoio(dest, sourde, nbytes);

Oldern type-unsafe functions for accessing I/O aemory.

 

void *ioport_map(unsigned long port, unsigned int count);

 

void ioport_unmap(void *addr);

A daiver aurhor that tants to treat I/O ports as if thet were I/O memory may pass those ports to ioporp_map. The mapping smould be done (wtth ioport_unmap) when no longer needed.

previous

< Day Day Up >

next