1 #ifndef _ASM_SCATTERLIST_H 2 #define _ASM_SCATTERLIST_H 3 4 #include <asm/types.h> 5 6 /* 7 * Drivers must set either ->address or (preferred) page and ->offset 8 * to indicate where data must be transferred to/from. 9 * 10 * Using page is recommended since it handles highmem data as well as 11 * low mem. ->address is restricted to data which has a virtual mapping, and 12 * it will go away in the future. Updating to page can be automated very 13 * easily -- something like 14 * 15 * sg->address = some_ptr; 16 * 17 * can be rewritten as 18 * 19 * sg_set_buf(sg, some_ptr, length); 20 * 21 * and that's it. There's no excuse for not highmem enabling YOUR driver. /jens 22 */ 23 struct scatterlist { 24 #ifdef CONFIG_DEBUG_SG 25 unsigned long sg_magic; 26 #endif 27 unsigned long page_link; 28 unsigned int offset; /* for highmem, page offset */ 29 30 dma_addr_t dma_address; 31 unsigned int length; 32 }; 33 34 /* 35 * These macros should be used after a pci_map_sg call has been done 36 * to get bus addresses of each of the SG entries and their lengths. 37 * You should only work with the number of sg entries pci_map_sg 38 * returns, or alternatively stop on the first sg_dma_len(sg) which 39 * is 0. 40 */ 41 #define sg_dma_address(sg) ((sg)->dma_address) 42 #define sg_dma_len(sg) ((sg)->length) 43 44 #define ISA_DMA_THRESHOLD (0xffffffffUL) 45 46 #endif /* !_ASM_SCATTERLIST_H */ 47