/** * @brief get the dma map of the nbuf * * @param osdev * @param bmap * @param skb * @param dir * * @return a_status_t */ a_status_t __adf_nbuf_map( adf_os_device_t osdev, struct sk_buff *skb, adf_os_dma_dir_t dir) { #ifdef ADF_OS_DEBUG struct skb_shared_info *sh = skb_shinfo(skb); #endif adf_os_assert( (dir == ADF_OS_DMA_TO_DEVICE) || (dir == ADF_OS_DMA_FROM_DEVICE)); /* * Assume there's only a single fragment. * To support multiple fragments, it would be necessary to change * adf_nbuf_t to be a separate object that stores meta-info * (including the bus address for each fragment) and a pointer * to the underlying sk_buff. */ adf_os_assert(sh->nr_frags == 0); return __adf_nbuf_map_single(osdev, skb, dir); return A_STATUS_OK; }
/** * @brief get the dma map of the nbuf * * @param osdev * @param bmap * @param skb * @param dir * * @return a_status_t */ a_status_t __adf_nbuf_map( adf_os_device_t osdev, struct sk_buff *skb, adf_os_dma_dir_t dir) { #ifdef ADF_OS_DEBUG struct skb_shared_info *sh = skb_shinfo(skb); #endif adf_os_assert( (dir == ADF_OS_DMA_TO_DEVICE) || (dir == ADF_OS_DMA_FROM_DEVICE)); /* * Assume there's only a single fragment. * To support multiple fragments, it would be necessary to change * adf_nbuf_t to be a separate object that stores meta-info * (including the bus address for each fragment) and a pointer * to the underlying sk_buff. */ adf_os_assert(sh->nr_frags == 0); return __adf_nbuf_map_single(osdev, skb, dir); #if 0 { int i; adf_os_assert(sh->nr_frags <= __ADF_OS_MAX_SCATTER); for (i = 1; i <= sh->nr_frags; i++) { skb_frag_t *f = &sh->frags[i-1] NBUF_MAPPED_FRAG_PADDR_LO(buf, i) = dma_map_page( osdev->dev, f->page, f->page_offset, f->size, dir); } adf_os_assert(sh->frag_list == NULL); } #endif return A_STATUS_OK; }