diff options
Diffstat (limited to 'drivers/net/ethernet/cavium/liquidio/octeon_network.h')
| -rw-r--r-- | drivers/net/ethernet/cavium/liquidio/octeon_network.h | 43 | 
1 files changed, 27 insertions, 16 deletions
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_network.h b/drivers/net/ethernet/cavium/liquidio/octeon_network.h index 6bb89419006e..eef2a1e8a7e3 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_network.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_network.h @@ -62,6 +62,9 @@ struct lio {  	/** Array of gather component linked lists */  	struct list_head *glist; +	void **glists_virt_base; +	dma_addr_t *glists_dma_base; +	u32 glist_entry_size;  	/** Pointer to the NIC properties for the Octeon device this network  	 *  interface is associated with. @@ -344,6 +347,29 @@ static inline void tx_buffer_free(void *buffer)  #define lio_dma_free(oct, size, virt_addr, dma_addr) \  	dma_free_coherent(&(oct)->pci_dev->dev, size, virt_addr, dma_addr) +static inline void * +lio_alloc_info_buffer(struct octeon_device *oct, +		      struct octeon_droq *droq) +{ +	void *virt_ptr; + +	virt_ptr = lio_dma_alloc(oct, (droq->max_count * OCT_DROQ_INFO_SIZE), +				 &droq->info_list_dma); +	if (virt_ptr) { +		droq->info_alloc_size = droq->max_count * OCT_DROQ_INFO_SIZE; +		droq->info_base_addr = virt_ptr; +	} + +	return virt_ptr; +} + +static inline void lio_free_info_buffer(struct octeon_device *oct, +					struct octeon_droq *droq) +{ +	lio_dma_free(oct, droq->info_alloc_size, droq->info_base_addr, +		     droq->info_list_dma); +} +  static inline  void *get_rbd(struct sk_buff *skb)  { @@ -359,22 +385,7 @@ void *get_rbd(struct sk_buff *skb)  static inline u64  lio_map_ring_info(struct octeon_droq *droq, u32 i)  { -	dma_addr_t dma_addr; -	struct octeon_device *oct = droq->oct_dev; - -	dma_addr = dma_map_single(&oct->pci_dev->dev, &droq->info_list[i], -				  OCT_DROQ_INFO_SIZE, DMA_FROM_DEVICE); - -	WARN_ON(dma_mapping_error(&oct->pci_dev->dev, dma_addr)); - -	return (u64)dma_addr; -} - -static inline void -lio_unmap_ring_info(struct pci_dev *pci_dev, -		    u64 info_ptr, u32 size) -{ -	dma_unmap_single(&pci_dev->dev, info_ptr, size, DMA_FROM_DEVICE); +	return droq->info_list_dma + (i * sizeof(struct octeon_droq_info));  }  static inline u64  | 
