1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Omnitek Scatter-Gather DMA Controller 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright 2012-2015 Cisco Systems, Inc. and/or its affiliates. 6*4882a593Smuzhiyun * All rights reserved. 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef COBALT_OMNITEK_H 10*4882a593Smuzhiyun #define COBALT_OMNITEK_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/scatterlist.h> 13*4882a593Smuzhiyun #include "cobalt-driver.h" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun struct sg_dma_descriptor { 16*4882a593Smuzhiyun u32 pci_l; 17*4882a593Smuzhiyun u32 pci_h; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun u32 local; 20*4882a593Smuzhiyun u32 reserved0; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun u32 next_l; 23*4882a593Smuzhiyun u32 next_h; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun u32 bytes; 26*4882a593Smuzhiyun u32 reserved1; 27*4882a593Smuzhiyun }; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun int omni_sg_dma_init(struct cobalt *cobalt); 30*4882a593Smuzhiyun void omni_sg_dma_abort_channel(struct cobalt_stream *s); 31*4882a593Smuzhiyun void omni_sg_dma_start(struct cobalt_stream *s, struct sg_dma_desc_info *desc); 32*4882a593Smuzhiyun bool is_dma_done(struct cobalt_stream *s); 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun int descriptor_list_create(struct cobalt *cobalt, 35*4882a593Smuzhiyun struct scatterlist *scatter_list, bool to_pci, unsigned sglen, 36*4882a593Smuzhiyun unsigned size, unsigned width, unsigned stride, 37*4882a593Smuzhiyun struct sg_dma_desc_info *desc); 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun void descriptor_list_chain(struct sg_dma_desc_info *this, 40*4882a593Smuzhiyun struct sg_dma_desc_info *next); 41*4882a593Smuzhiyun void descriptor_list_loopback(struct sg_dma_desc_info *desc); 42*4882a593Smuzhiyun void descriptor_list_end_of_chain(struct sg_dma_desc_info *desc); 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun void *descriptor_list_allocate(struct sg_dma_desc_info *desc, size_t bytes); 45*4882a593Smuzhiyun void descriptor_list_free(struct sg_dma_desc_info *desc); 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun void descriptor_list_interrupt_enable(struct sg_dma_desc_info *desc); 48*4882a593Smuzhiyun void descriptor_list_interrupt_disable(struct sg_dma_desc_info *desc); 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #endif 51