1#- 2# Copyright (c) 2016-2019 Ruslan Bukin <br@bsdpad.com> 3# All rights reserved. 4# 5# This software was developed by SRI International and the University of 6# Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237 7# ("CTSRD"), as part of the DARPA CRASH research programme. 8# 9# Redistribution and use in source and binary forms, with or without 10# modification, are permitted provided that the following conditions 11# are met: 12# 1. Redistributions of source code must retain the above copyright 13# notice, this list of conditions and the following disclaimer. 14# 2. Redistributions in binary form must reproduce the above copyright 15# notice, this list of conditions and the following disclaimer in the 16# documentation and/or other materials provided with the distribution. 17# 18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28# SUCH DAMAGE. 29# 30# $FreeBSD$ 31# 32 33#include "opt_platform.h" 34 35#include <sys/malloc.h> 36 37#include <machine/bus.h> 38 39#ifdef FDT 40#include <dev/fdt/fdt_common.h> 41#include <dev/ofw/ofw_bus.h> 42#include <dev/ofw/ofw_bus_subr.h> 43#endif 44 45#include <dev/xdma/xdma.h> 46 47INTERFACE xdma; 48 49# 50# Request a transfer. 51# 52METHOD int channel_request { 53 device_t dev; 54 struct xdma_channel *xchan; 55 struct xdma_request *req; 56}; 57 58# 59# Prepare xDMA channel for a scatter-gather transfer. 60# 61METHOD int channel_prep_sg { 62 device_t dev; 63 struct xdma_channel *xchan; 64}; 65 66# 67# Query DMA engine driver for the amount of free entries 68# (descriptors) are available. 69# 70METHOD int channel_capacity { 71 device_t dev; 72 struct xdma_channel *xchan; 73 uint32_t *capacity; 74}; 75 76# 77# Submit sglist list to DMA engine driver. 78# 79METHOD int channel_submit_sg { 80 device_t dev; 81 struct xdma_channel *xchan; 82 struct xdma_sglist *sg; 83 uint32_t sg_n; 84}; 85 86#ifdef FDT 87# 88# Notify driver we have machine-dependend data. 89# 90METHOD int ofw_md_data { 91 device_t dev; 92 pcell_t *cells; 93 int ncells; 94 void **data; 95}; 96#endif 97 98# 99# Allocate both virtual and harware channels. 100# 101METHOD int channel_alloc { 102 device_t dev; 103 struct xdma_channel *xchan; 104}; 105 106# 107# Free the real hardware channel. 108# 109METHOD int channel_free { 110 device_t dev; 111 struct xdma_channel *xchan; 112}; 113 114# 115# Begin, pause or terminate the channel operation. 116# 117METHOD int channel_control { 118 device_t dev; 119 struct xdma_channel *xchan; 120 int cmd; 121}; 122 123# IOMMU interface 124 125# 126# pmap is initialized 127# 128METHOD int iommu_init { 129 device_t dev; 130 struct xdma_iommu *xio; 131}; 132 133# 134# pmap is released 135# 136METHOD int iommu_release { 137 device_t dev; 138 struct xdma_iommu *xio; 139}; 140 141# 142# Mapping entered 143# 144METHOD int iommu_enter { 145 device_t dev; 146 struct xdma_iommu *xio; 147 vm_offset_t va; 148 vm_offset_t pa; 149}; 150 151# 152# Mapping removed 153# 154METHOD int iommu_remove { 155 device_t dev; 156 struct xdma_iommu *xio; 157 vm_offset_t va; 158}; 159