| 9.5. Quick ReferenceThis 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. |