DMA-capable devices require more registers than were used in the previous examples.
The following fields are used in the device register structure to support DMA-capable device with no scatter-gather support:
uint32_t dma_addr; /* starting address for DMA */ uint32_t dma_size; /* amount of data to transfer */
The following fields are used in the device register structure to support DMA-capable devices with scatter-gather support:
struct sglentry {
uint32_t dma_addr;
uint32_t dma_size;
} sglist[SGLLEN];
caddr_t iopb_addr; /* When written, informs the device of the next */
/* command's parameter block address. */
/* When read after an interrupt, contains */
/* the address of the completed command. */