1 /* 2 * Omnitek Scatter-Gather DMA Controller 3 * 4 * Copyright 2012-2015 Cisco Systems, Inc. and/or its affiliates. 5 * All rights reserved. 6 * 7 * This program is free software; you may redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; version 2 of the License. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 12 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 13 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 15 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 16 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 17 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 18 * SOFTWARE. 19 */ 20 21 #ifndef COBALT_OMNITEK_H 22 #define COBALT_OMNITEK_H 23 24 #include <linux/scatterlist.h> 25 #include "cobalt-driver.h" 26 27 struct sg_dma_descriptor { 28 u32 pci_l; 29 u32 pci_h; 30 31 u32 local; 32 u32 reserved0; 33 34 u32 next_l; 35 u32 next_h; 36 37 u32 bytes; 38 u32 reserved1; 39 }; 40 41 int omni_sg_dma_init(struct cobalt *cobalt); 42 void omni_sg_dma_abort_channel(struct cobalt_stream *s); 43 void omni_sg_dma_start(struct cobalt_stream *s, struct sg_dma_desc_info *desc); 44 bool is_dma_done(struct cobalt_stream *s); 45 46 int descriptor_list_create(struct cobalt *cobalt, 47 struct scatterlist *scatter_list, bool to_pci, unsigned sglen, 48 unsigned size, unsigned width, unsigned stride, 49 struct sg_dma_desc_info *desc); 50 51 void descriptor_list_chain(struct sg_dma_desc_info *this, 52 struct sg_dma_desc_info *next); 53 void descriptor_list_loopback(struct sg_dma_desc_info *desc); 54 void descriptor_list_end_of_chain(struct sg_dma_desc_info *desc); 55 56 void *descriptor_list_allocate(struct sg_dma_desc_info *desc, size_t bytes); 57 void descriptor_list_free(struct sg_dma_desc_info *desc); 58 59 void descriptor_list_interrupt_enable(struct sg_dma_desc_info *desc); 60 void descriptor_list_interrupt_disable(struct sg_dma_desc_info *desc); 61 62 #endif 63