Linux Device Drivers by Alessandro Rubini Here are the changes from the 6/98 reprint: {25} description of variable list term, "Exec domains": in the last line of the paragraph change "the module defines the execution" to "the iBCS2 module defines the execution" {65} line 1: changed from count = quantum - q_pos; /* read only up to /* to count = quantum - q_pos; /* read only up to */ {66} line 24: changed count = quantum -q_pos; /* write only up to /* to count = quantum -q_pos; /* write only up to */ (70) paragraph 4, line 5: changed "MINIMUM_ CONSOLE_LOGLEVEL" to "MINIMUM_CONSOLE_LOGLEVEL" (removed space.) {83} last paragraph: replaced the sentence beginning "Another advantage of oops is ..." with Like the original ksyms, the program is able to decode oops messages generated on Intel platforms only. Porting to other platforms shouldn't be difficult. ("ksysm" is in italics.) {108} paragraph 3, line 3: changed "(the next queue in the list)" to "(the next item in the list)" {131} last paragraph, line 2: changed "since the computer was turned on" to "since the operating system was booted" {180} description of fourth item in the list: changed "the self object" to "the this object" ("this" is in constant-width font) {230} paragraph 5, line 1: changed "master.ver" to "export.ver" ("export.ver" is italics) {246} paragraph 1, line 4: changed "end_request(1)" to "end_request(0)" (in constant-width font) {276} paragraph 3, line 2: changed "the X server transfers a lot of data to and from video memory." to "the X server transfers a lot of data from video memory." {291-292}: Removed all the paragraphs from "Actually, there is another way to allocate" to the end of the section. In their place, added the following paragraph: My own implementation of allocating DMA buffers is available as an allocator.c module (with an accompanying header). You can find a version in the sample files within src/misc-modules; and the latest version is always available from my own ftp site, ftp://ftp.systemy.it/pub/develop. You could also look for the bigphysarea kernel patch, which is meant to accomplish the same goal as my allocator. ("allocator.c," "src/misc-modules," "ftp://ftp.systemy.it/pub/ develop" and "big physarea" are all in italics.) {292} (This change is optional; it was meant to make the page look better after we removed three paragraphs from the preceding section.) Added the following paragraph and code sample after the paragraphh ending, "...when address information is received from hardware connected to the bus." If you look at code that relies on the allocator engine described earlier, you'll find a sample use of these functions. The code relies also on vremap because of the context: ("allocator" and "vremap" are in italics.) /* the allocator returns a physical address */ dev->dmabuffer = allocator_allocate_dma(kilobytes, GFP_KERNEL); /* map it in the virtual address space */ dev->dmavbuffer = vremap(dev->dmabuffer, kilobytes*1024); /* ... */ /* pass the address to the device */ writel(virt_to_bus(dev->dmavbuffer, dev->registers + DEV_DMA_ADDRESS); (315) paragraph before "The device methods" section, line 5: changed "IFF_PROMISCUOUS" to "IFF_PROMISC" {397} paragraph 4, line 5: changed "16-byte little-endian" to "16-bit little-endian" {399} description of ".fixup" list item: changed "The second pointer of the table" to "The second pointer of each pair in the table" (408) changed index entry "firmware, PIC-aware" to "firmware, PCI-aware" (409) changed index entry "infline functions" to "inline functions" {413) added index entry "MOD_DEC_USE_COUNT macro, 27" (same page reference as the following two entries.) changed index entry "MOD_IN_USE module" to "MOD_IN_USE macro" changed index entry "MOD_INC_USE_COUNT module" to "MOD_INC_USE_COUNT macro"