October 2017
Intermediate to advanced
586 pages
14h 8m
English
On a system in which PIO is used, there are two different address spaces, one for memory, which we have already discussed, and the other one for I/O ports, called the port address space, limited to 65,536 ports only. This is an old way, and very uncommon nowadays.
The kernel exports a few functions (symbols) to handle the I/O port. Prior to accessing any port regions, we must first inform the kernel that we are using a range of ports using the request_region() function, which will return NULL on error. Once done with the region, you must call release_region(). These are both declared in linux/ioport.h. Their prototypes are:
struct resource *request_region(unsigned long start, unsigned long len, char *name); void release_region(unsigned ...