You don't have to be a Linux driver developer to understand this, just take a look at the code of
Linux driver developer not , but understand the BMD design yes :-)
If you look closely xPCIe_Read uses the gWriteBuffer : why ?
Because this write buffer is a write buffer from the FPGA board point of vue. When the DMA is launch (by the xbmd_main.cpp code) using IOCTL the device will automatically fill the gWriteBuffer (a DMA write is perform : FPGA->Main PC memory) then the xPCIe_Read get the result of the DMA transfer by reading the gWriteBuffer.
xPCIe_Write work in the other way (write to the gReadBuffer ; then DMA iniated by FPGA from PC RAM to FPGA )
XPCIe_ReadMem and XPCIe_WriteMem aren't use. It is just for testing classical MemRead/memWrite functions of the PCIe bus (without DMA : transfer initiated by the PC