These are all good suggestions you should take. The only way to access the memory-mapped hardware in real mode is to move to protected mode, initialize the selectors, then move back to real mode, creating what has been termed as unreal mode. Then you can use 32-bit registers to access memory above the 1 Meg mark. However, if you are going to go through the trouble to get to unreal mode, you might as well stay in protected mode. The only advantage to unreal mode is that you still have (Legacy) BIOS access.
My book shows you, from the beginning, how to get started, step by step. How to first access the PCI and find the device, and how to extract the information you need from it. It then shows you how to access the hardware using a flat address space. However, Volume 8 does not show you have to get to that flat address space. This is assumed, shown in Volume 1, and/or learned from other resources.
Also, from what I gather, you may not know the difference between Port I/O and Mem-mapped I/O. Port I/O you use the 'in' and 'out' instructions. Mem-Mapped I/O is reading and writing from/to an address in the memory address space using memory access instructions, just like accessing real memory. The hardware "catches" the read/write before it makes it to physical memory.
When my book arrives, be sure to follow the instructions to get the associated CDROM which has C source code examples and utilities. Also be sure to see
http://www.fysnet.net/the_universal_serial_bus.htm for an errata and other notes not yet added to the book.
Once you have read a while, and have tried some code of your own, feel free to post more questions. However, please note that we won't do it for you. We are more than happy to point you in the right direction, point out an error or two, but you must do the work. Hope that doesn't sound rude, but it is the truth.
Above all else, enjoy your work.
Ben