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 <machine/bus.h> 36 37#ifdef FDT 38#include <dev/fdt/fdt_common.h> 39#include <dev/ofw/ofw_bus.h> 40#include <dev/ofw/ofw_bus_subr.h> 41#endif 42 43#include <dev/xdma/xdma.h> 44 45INTERFACE xdma; 46 47# 48# Request a transfer. 49# 50METHOD int channel_request { 51 device_t dev; 52 struct xdma_channel *xchan; 53 struct xdma_request *req; 54}; 55 56# 57# Prepare xDMA channel for a scatter-gather transfer. 58# 59METHOD int channel_prep_sg { 60 device_t dev; 61 struct xdma_channel *xchan; 62}; 63 64# 65# Query DMA engine driver for the amount of free entries 66# (descriptors) are available. 67# 68METHOD int channel_capacity { 69 device_t dev; 70 struct xdma_channel *xchan; 71 uint32_t *capacity; 72}; 73 74# 75# Submit sglist list to DMA engine driver. 76# 77METHOD int channel_submit_sg { 78 device_t dev; 79 struct xdma_channel *xchan; 80 struct xdma_sglist *sg; 81 uint32_t sg_n; 82}; 83 84# 85# Notify driver we have machine-dependend data. 86# 87METHOD int ofw_md_data { 88 device_t dev; 89 pcell_t *cells; 90 int ncells; 91 void **data; 92}; 93 94# 95# Allocate both virtual and harware channels. 96# 97METHOD int channel_alloc { 98 device_t dev; 99 struct xdma_channel *xchan; 100}; 101 102# 103# Free the real hardware channel. 104# 105METHOD int channel_free { 106 device_t dev; 107 struct xdma_channel *xchan; 108}; 109 110# 111# Begin, pause or terminate the channel operation. 112# 113METHOD int channel_control { 114 device_t dev; 115 struct xdma_channel *xchan; 116 int cmd; 117}; 118 119# IOMMU interface 120 121# 122# pmap is initialized 123# 124METHOD int iommu_init { 125 device_t dev; 126 struct xdma_iommu *xio; 127}; 128 129# 130# pmap is released 131# 132METHOD int iommu_release { 133 device_t dev; 134 struct xdma_iommu *xio; 135}; 136 137# 138# Mapping entered 139# 140METHOD int iommu_enter { 141 device_t dev; 142 struct xdma_iommu *xio; 143 vm_offset_t va; 144 vm_offset_t pa; 145}; 146 147# 148# Mapping removed 149# 150METHOD int iommu_remove { 151 device_t dev; 152 struct xdma_iommu *xio; 153 vm_offset_t va; 154}; 155