1/* $NetBSD: bus_defs.h,v 1.6 2021/01/21 09:50:37 kre Exp $ */ 2 3/*- 4 * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 9 * NASA Ames Research Center. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33/* 34 * Copyright (c) 1996 Charles M. Hannum. All rights reserved. 35 * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. 36 * 37 * Redistribution and use in source and binary forms, with or without 38 * modification, are permitted provided that the following conditions 39 * are met: 40 * 1. Redistributions of source code must retain the above copyright 41 * notice, this list of conditions and the following disclaimer. 42 * 2. Redistributions in binary form must reproduce the above copyright 43 * notice, this list of conditions and the following disclaimer in the 44 * documentation and/or other materials provided with the distribution. 45 * 3. All advertising materials mentioning features or use of this software 46 * must display the following acknowledgement: 47 * This product includes software developed by Christopher G. Demetriou 48 * for the NetBSD Project. 49 * 4. The name of the author may not be used to endorse or promote products 50 * derived from this software without specific prior written permission 51 * 52 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 53 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 54 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 55 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 56 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 57 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 58 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 59 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 60 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 61 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 62 */ 63 64#ifndef _X86_BUS_H_ 65#define _X86_BUS_H_ 66 67#ifdef _KERNEL_OPT 68#include "opt_kasan.h" 69#include "opt_kmsan.h" 70#endif 71 72#include <x86/busdefs.h> 73 74#ifdef BUS_SPACE_DEBUG 75#define BUS_SPACE_ALIGNED_ADDRESS(p, t) \ 76 ((((u_long)(p)) & (sizeof(t)-1)) == 0) 77#define BUS_SPACE_ALIGNED_POINTER(p, t) BUS_SPACE_ALIGNED_ADDRESS(p, t) 78#else 79#define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 80#endif /* BUS_SPACE_DEBUG */ 81 82/* 83 * Bus address and size types 84 */ 85typedef paddr_t bus_addr_t; 86typedef size_t bus_size_t; 87 88#define PRIxBUSADDR PRIxPADDR 89#define PRIxBUSSIZE "zx" 90#define PRIuBUSSIZE "zu" 91 92struct bus_space_tag; 93typedef struct bus_space_tag *bus_space_tag_t; 94 95struct bus_space_tag { 96 int bst_type; 97 bus_space_tag_t bst_super; 98 /* bst_present: bitmap indicating overrides present (1) in *this* tag, 99 * bst_exists: bitmap indicating overrides present (1) in *this* tag 100 * or in an ancestor's tag (follow bst_super to ancestors) 101 */ 102 uint64_t bst_present; 103 uint64_t bst_exists; 104 const struct bus_space_overrides *bst_ov; 105 void *bst_ctx; 106}; 107 108typedef vaddr_t bus_space_handle_t; 109 110#define PRIxBSH PRIxVADDR 111 112typedef struct x86_bus_dma_tag *bus_dma_tag_t; 113typedef struct x86_bus_dmamap *bus_dmamap_t; 114 115#define BUS_DMA_TAG_VALID(__t) ((__t) != NULL) 116 117/* 118 * bus_dma_segment_t 119 * 120 * Describes a single contiguous DMA transaction. Values 121 * are suitable for programming into DMA registers. 122 */ 123typedef struct x86_bus_dma_segment { 124 bus_addr_t ds_addr; /* DMA address */ 125 bus_size_t ds_len; /* length of transfer */ 126} bus_dma_segment_t; 127 128/* 129 * bus_dmamap_t 130 * 131 * Describes a DMA mapping. XXX exposing structure to LKM. 132 */ 133struct x86_bus_dmamap { 134 /* 135 * PRIVATE MEMBERS: not for use by machine-independent code. 136 */ 137 bus_size_t _dm_size; /* largest DMA transfer mappable */ 138 int _dm_segcnt; /* number of segs this map can map */ 139 bus_size_t _dm_maxmaxsegsz; /* fixed largest possible segment */ 140 bus_size_t _dm_boundary; /* don't cross this */ 141 bus_addr_t _dm_bounce_thresh; /* bounce threshold; see tag */ 142 int _dm_flags; /* misc. flags */ 143 144 void *_dm_cookie; /* cookie for bus-specific functions */ 145 146 /* 147 * PUBLIC MEMBERS: these are used by machine-independent code. 148 */ 149#if defined(KASAN) || defined(KMSAN) 150 void *dm_buf; 151 bus_size_t dm_buflen; 152 int dm_buftype; 153#endif 154 bus_size_t dm_maxsegsz; /* largest possible segment */ 155 bus_size_t dm_mapsize; /* size of the mapping */ 156 int dm_nsegs; /* # valid segments in mapping */ 157 bus_dma_segment_t dm_segs[1]; /* segments; variable length */ 158}; 159 160#endif /* _X86_BUS_H_ */ 161