1*bf158e33Sskrll /* $NetBSD: bus_defs.h,v 1.2 2019/09/23 16:17:55 skrll Exp $ */ 286b5be6eSdyoung 386b5be6eSdyoung /*- 486b5be6eSdyoung * Copyright (c) 1997, 1998, 2000, 2001 The NetBSD Foundation, Inc. 586b5be6eSdyoung * All rights reserved. 686b5be6eSdyoung * 786b5be6eSdyoung * This code is derived from software contributed to The NetBSD Foundation 886b5be6eSdyoung * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 986b5be6eSdyoung * NASA Ames Research Center. 1086b5be6eSdyoung * 1186b5be6eSdyoung * Redistribution and use in source and binary forms, with or without 1286b5be6eSdyoung * modification, are permitted provided that the following conditions 1386b5be6eSdyoung * are met: 1486b5be6eSdyoung * 1. Redistributions of source code must retain the above copyright 1586b5be6eSdyoung * notice, this list of conditions and the following disclaimer. 1686b5be6eSdyoung * 2. Redistributions in binary form must reproduce the above copyright 1786b5be6eSdyoung * notice, this list of conditions and the following disclaimer in the 1886b5be6eSdyoung * documentation and/or other materials provided with the distribution. 1986b5be6eSdyoung * 2086b5be6eSdyoung * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 2186b5be6eSdyoung * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2286b5be6eSdyoung * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2386b5be6eSdyoung * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2486b5be6eSdyoung * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2586b5be6eSdyoung * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2686b5be6eSdyoung * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2786b5be6eSdyoung * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2886b5be6eSdyoung * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2986b5be6eSdyoung * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3086b5be6eSdyoung * POSSIBILITY OF SUCH DAMAGE. 3186b5be6eSdyoung */ 3286b5be6eSdyoung 3386b5be6eSdyoung /* 3486b5be6eSdyoung * Copyright (c) 1996 Carnegie-Mellon University. 3586b5be6eSdyoung * All rights reserved. 3686b5be6eSdyoung * 3786b5be6eSdyoung * Author: Chris G. Demetriou 3886b5be6eSdyoung * 3986b5be6eSdyoung * Permission to use, copy, modify and distribute this software and 4086b5be6eSdyoung * its documentation is hereby granted, provided that both the copyright 4186b5be6eSdyoung * notice and this permission notice appear in all copies of the 4286b5be6eSdyoung * software, derivative works or modified versions, and any portions 4386b5be6eSdyoung * thereof, and that both notices appear in supporting documentation. 4486b5be6eSdyoung * 4586b5be6eSdyoung * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 4686b5be6eSdyoung * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 4786b5be6eSdyoung * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 4886b5be6eSdyoung * 4986b5be6eSdyoung * Carnegie Mellon requests users of this software to return to 5086b5be6eSdyoung * 5186b5be6eSdyoung * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 5286b5be6eSdyoung * School of Computer Science 5386b5be6eSdyoung * Carnegie Mellon University 5486b5be6eSdyoung * Pittsburgh PA 15213-3890 5586b5be6eSdyoung * 5686b5be6eSdyoung * any improvements or extensions that they make and grant Carnegie the 5786b5be6eSdyoung * rights to redistribute these changes. 5886b5be6eSdyoung */ 5986b5be6eSdyoung 6086b5be6eSdyoung #ifndef _DREAMCAST_BUS_DEFS_H_ 6186b5be6eSdyoung #define _DREAMCAST_BUS_DEFS_H_ 6286b5be6eSdyoung 6386b5be6eSdyoung #ifdef _KERNEL 6486b5be6eSdyoung /* 6586b5be6eSdyoung * Turn on BUS_SPACE_DEBUG if the global DEBUG option is enabled. 6686b5be6eSdyoung */ 6786b5be6eSdyoung #if defined(DEBUG) && !defined(BUS_SPACE_DEBUG) 6886b5be6eSdyoung #define BUS_SPACE_DEBUG 6986b5be6eSdyoung #endif 7086b5be6eSdyoung 7186b5be6eSdyoung #ifdef BUS_SPACE_DEBUG 7286b5be6eSdyoung #include <sys/systm.h> /* for printf() prototype */ 7386b5be6eSdyoung /* 7486b5be6eSdyoung * Macros for checking the aligned-ness of pointers passed to bus 7586b5be6eSdyoung * space ops. Strict alignment is required by the Alpha architecture, 7686b5be6eSdyoung * and a trap will occur if unaligned access is performed. These 7786b5be6eSdyoung * may aid in the debugging of a broken device driver by displaying 7886b5be6eSdyoung * useful information about the problem. 7986b5be6eSdyoung */ 8086b5be6eSdyoung #define __BUS_SPACE_ALIGNED_ADDRESS(p, t) \ 8186b5be6eSdyoung ((((u_long)(p)) & (sizeof(t)-1)) == 0) 8286b5be6eSdyoung 8386b5be6eSdyoung #define __BUS_SPACE_ADDRESS_SANITY(p, t, d) \ 8486b5be6eSdyoung ({ \ 8586b5be6eSdyoung if (__BUS_SPACE_ALIGNED_ADDRESS((p), t) == 0) { \ 8686b5be6eSdyoung printf("%s 0x%lx not aligned to %lu bytes %s:%d\n", \ 8786b5be6eSdyoung d, (u_long)(p), (u_long)sizeof(t), __FILE__, __LINE__); \ 8886b5be6eSdyoung } \ 8986b5be6eSdyoung (void) 0; \ 9086b5be6eSdyoung }) 9186b5be6eSdyoung 9286b5be6eSdyoung #define BUS_SPACE_ALIGNED_POINTER(p, t) __BUS_SPACE_ALIGNED_ADDRESS(p, t) 9386b5be6eSdyoung #else 9486b5be6eSdyoung #define __BUS_SPACE_ADDRESS_SANITY(p, t, d) (void) 0 9586b5be6eSdyoung #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) 9686b5be6eSdyoung #endif /* BUS_SPACE_DEBUG */ 9786b5be6eSdyoung #endif /* _KERNEL */ 9886b5be6eSdyoung 9986b5be6eSdyoung /* 10086b5be6eSdyoung * Addresses (in bus space). 10186b5be6eSdyoung */ 10286b5be6eSdyoung typedef u_long bus_addr_t; 10386b5be6eSdyoung typedef u_long bus_size_t; 10486b5be6eSdyoung 105*bf158e33Sskrll #define PRIxBUSADDR "lx" 106*bf158e33Sskrll #define PRIxBUSSIZE "lx" 107*bf158e33Sskrll #define PRIuBUSSIZE "lu" 10886b5be6eSdyoung /* 10986b5be6eSdyoung * Access methods for bus space. 11086b5be6eSdyoung */ 11186b5be6eSdyoung typedef struct dreamcast_bus_space *bus_space_tag_t; 11286b5be6eSdyoung typedef u_long bus_space_handle_t; 11386b5be6eSdyoung 114*bf158e33Sskrll #define PRIxBSH "lx" 115*bf158e33Sskrll 11686b5be6eSdyoung struct dreamcast_bus_space { 11786b5be6eSdyoung /* cookie */ 11886b5be6eSdyoung void *dbs_cookie; 11986b5be6eSdyoung 12086b5be6eSdyoung /* mapping/unmapping */ 12186b5be6eSdyoung int (*dbs_map)(void *, bus_addr_t, bus_size_t, 12286b5be6eSdyoung int, bus_space_handle_t *); 12386b5be6eSdyoung void (*dbs_unmap)(void *, bus_space_handle_t, 12486b5be6eSdyoung bus_size_t); 12586b5be6eSdyoung int (*dbs_subregion)(void *, bus_space_handle_t, 12686b5be6eSdyoung bus_size_t, bus_size_t, bus_space_handle_t *); 12786b5be6eSdyoung paddr_t (*dbs_mmap)(void *, bus_addr_t, off_t, int, int); 12886b5be6eSdyoung 12986b5be6eSdyoung /* allocation/deallocation */ 13086b5be6eSdyoung int (*dbs_alloc)(void *, bus_addr_t, bus_addr_t, 13186b5be6eSdyoung bus_size_t, bus_size_t, bus_size_t, int, 13286b5be6eSdyoung bus_addr_t *, bus_space_handle_t *); 13386b5be6eSdyoung void (*dbs_free)(void *, bus_space_handle_t, 13486b5be6eSdyoung bus_size_t); 13586b5be6eSdyoung 13686b5be6eSdyoung /* get kernel virtual address */ 13786b5be6eSdyoung void * (*dbs_vaddr)(void *, bus_space_handle_t); 13886b5be6eSdyoung 13986b5be6eSdyoung /* read (single) */ 14086b5be6eSdyoung uint8_t (*dbs_r_1)(void *, bus_space_handle_t, 14186b5be6eSdyoung bus_size_t); 14286b5be6eSdyoung uint16_t (*dbs_r_2)(void *, bus_space_handle_t, 14386b5be6eSdyoung bus_size_t); 14486b5be6eSdyoung uint32_t (*dbs_r_4)(void *, bus_space_handle_t, 14586b5be6eSdyoung bus_size_t); 14686b5be6eSdyoung uint64_t (*dbs_r_8)(void *, bus_space_handle_t, 14786b5be6eSdyoung bus_size_t); 14886b5be6eSdyoung 14986b5be6eSdyoung /* read multiple */ 15086b5be6eSdyoung void (*dbs_rm_1)(void *, bus_space_handle_t, 15186b5be6eSdyoung bus_size_t, uint8_t *, bus_size_t); 15286b5be6eSdyoung void (*dbs_rm_2)(void *, bus_space_handle_t, 15386b5be6eSdyoung bus_size_t, uint16_t *, bus_size_t); 15486b5be6eSdyoung void (*dbs_rm_4)(void *, bus_space_handle_t, 15586b5be6eSdyoung bus_size_t, uint32_t *, bus_size_t); 15686b5be6eSdyoung void (*dbs_rm_8)(void *, bus_space_handle_t, 15786b5be6eSdyoung bus_size_t, uint64_t *, bus_size_t); 15886b5be6eSdyoung 15986b5be6eSdyoung /* read region */ 16086b5be6eSdyoung void (*dbs_rr_1)(void *, bus_space_handle_t, 16186b5be6eSdyoung bus_size_t, uint8_t *, bus_size_t); 16286b5be6eSdyoung void (*dbs_rr_2)(void *, bus_space_handle_t, 16386b5be6eSdyoung bus_size_t, uint16_t *, bus_size_t); 16486b5be6eSdyoung void (*dbs_rr_4)(void *, bus_space_handle_t, 16586b5be6eSdyoung bus_size_t, uint32_t *, bus_size_t); 16686b5be6eSdyoung void (*dbs_rr_8)(void *, bus_space_handle_t, 16786b5be6eSdyoung bus_size_t, uint64_t *, bus_size_t); 16886b5be6eSdyoung 16986b5be6eSdyoung /* write (single) */ 17086b5be6eSdyoung void (*dbs_w_1)(void *, bus_space_handle_t, 17186b5be6eSdyoung bus_size_t, uint8_t); 17286b5be6eSdyoung void (*dbs_w_2)(void *, bus_space_handle_t, 17386b5be6eSdyoung bus_size_t, uint16_t); 17486b5be6eSdyoung void (*dbs_w_4)(void *, bus_space_handle_t, 17586b5be6eSdyoung bus_size_t, uint32_t); 17686b5be6eSdyoung void (*dbs_w_8)(void *, bus_space_handle_t, 17786b5be6eSdyoung bus_size_t, uint64_t); 17886b5be6eSdyoung 17986b5be6eSdyoung /* write multiple */ 18086b5be6eSdyoung void (*dbs_wm_1)(void *, bus_space_handle_t, 18186b5be6eSdyoung bus_size_t, const uint8_t *, bus_size_t); 18286b5be6eSdyoung void (*dbs_wm_2)(void *, bus_space_handle_t, 18386b5be6eSdyoung bus_size_t, const uint16_t *, bus_size_t); 18486b5be6eSdyoung void (*dbs_wm_4)(void *, bus_space_handle_t, 18586b5be6eSdyoung bus_size_t, const uint32_t *, bus_size_t); 18686b5be6eSdyoung void (*dbs_wm_8)(void *, bus_space_handle_t, 18786b5be6eSdyoung bus_size_t, const uint64_t *, bus_size_t); 18886b5be6eSdyoung 18986b5be6eSdyoung /* write region */ 19086b5be6eSdyoung void (*dbs_wr_1)(void *, bus_space_handle_t, 19186b5be6eSdyoung bus_size_t, const uint8_t *, bus_size_t); 19286b5be6eSdyoung void (*dbs_wr_2)(void *, bus_space_handle_t, 19386b5be6eSdyoung bus_size_t, const uint16_t *, bus_size_t); 19486b5be6eSdyoung void (*dbs_wr_4)(void *, bus_space_handle_t, 19586b5be6eSdyoung bus_size_t, const uint32_t *, bus_size_t); 19686b5be6eSdyoung void (*dbs_wr_8)(void *, bus_space_handle_t, 19786b5be6eSdyoung bus_size_t, const uint64_t *, bus_size_t); 19886b5be6eSdyoung 19986b5be6eSdyoung /* set multiple */ 20086b5be6eSdyoung void (*dbs_sm_1)(void *, bus_space_handle_t, 20186b5be6eSdyoung bus_size_t, uint8_t, bus_size_t); 20286b5be6eSdyoung void (*dbs_sm_2)(void *, bus_space_handle_t, 20386b5be6eSdyoung bus_size_t, uint16_t, bus_size_t); 20486b5be6eSdyoung void (*dbs_sm_4)(void *, bus_space_handle_t, 20586b5be6eSdyoung bus_size_t, uint32_t, bus_size_t); 20686b5be6eSdyoung void (*dbs_sm_8)(void *, bus_space_handle_t, 20786b5be6eSdyoung bus_size_t, uint64_t, bus_size_t); 20886b5be6eSdyoung 20986b5be6eSdyoung /* set region */ 21086b5be6eSdyoung void (*dbs_sr_1)(void *, bus_space_handle_t, 21186b5be6eSdyoung bus_size_t, uint8_t, bus_size_t); 21286b5be6eSdyoung void (*dbs_sr_2)(void *, bus_space_handle_t, 21386b5be6eSdyoung bus_size_t, uint16_t, bus_size_t); 21486b5be6eSdyoung void (*dbs_sr_4)(void *, bus_space_handle_t, 21586b5be6eSdyoung bus_size_t, uint32_t, bus_size_t); 21686b5be6eSdyoung void (*dbs_sr_8)(void *, bus_space_handle_t, 21786b5be6eSdyoung bus_size_t, uint64_t, bus_size_t); 21886b5be6eSdyoung 21986b5be6eSdyoung /* copy */ 22086b5be6eSdyoung void (*dbs_c_1)(void *, bus_space_handle_t, bus_size_t, 22186b5be6eSdyoung bus_space_handle_t, bus_size_t, bus_size_t); 22286b5be6eSdyoung void (*dbs_c_2)(void *, bus_space_handle_t, bus_size_t, 22386b5be6eSdyoung bus_space_handle_t, bus_size_t, bus_size_t); 22486b5be6eSdyoung void (*dbs_c_4)(void *, bus_space_handle_t, bus_size_t, 22586b5be6eSdyoung bus_space_handle_t, bus_size_t, bus_size_t); 22686b5be6eSdyoung void (*dbs_c_8)(void *, bus_space_handle_t, bus_size_t, 22786b5be6eSdyoung bus_space_handle_t, bus_size_t, bus_size_t); 22886b5be6eSdyoung }; 22986b5be6eSdyoung 23086b5be6eSdyoung #define BUS_SPACE_MAP_CACHEABLE 0x01 23186b5be6eSdyoung #define BUS_SPACE_MAP_LINEAR 0x02 23286b5be6eSdyoung #define BUS_SPACE_MAP_PREFETCHABLE 0x04 23386b5be6eSdyoung 23486b5be6eSdyoung #ifdef _KERNEL 23586b5be6eSdyoung 23686b5be6eSdyoung #define BUS_SPACE_BARRIER_READ 0x01 23786b5be6eSdyoung #define BUS_SPACE_BARRIER_WRITE 0x02 23886b5be6eSdyoung 23986b5be6eSdyoung #endif /* _KERNEL */ 24086b5be6eSdyoung 24186b5be6eSdyoung /* 24286b5be6eSdyoung * Flags used in various bus DMA methods. 24386b5be6eSdyoung */ 24486b5be6eSdyoung #define BUS_DMA_WAITOK 0x000 /* safe to sleep (pseudo-flag) */ 24586b5be6eSdyoung #define BUS_DMA_NOWAIT 0x001 /* not safe to sleep */ 24686b5be6eSdyoung #define BUS_DMA_ALLOCNOW 0x002 /* perform resource allocation now */ 24786b5be6eSdyoung #define BUS_DMA_COHERENT 0x004 /* map memory to not require sync */ 24886b5be6eSdyoung #define BUS_DMA_STREAMING 0x008 /* hint: sequential, unidirectional */ 24986b5be6eSdyoung #define BUS_DMA_BUS1 0x010 /* placeholders for bus functions... */ 25086b5be6eSdyoung #define BUS_DMA_BUS2 0x020 25186b5be6eSdyoung #define BUS_DMA_BUS3 0x040 25286b5be6eSdyoung #define BUS_DMA_BUS4 0x080 25386b5be6eSdyoung #define BUS_DMA_READ 0x100 /* mapping is device -> memory only */ 25486b5be6eSdyoung #define BUS_DMA_WRITE 0x200 /* mapping is memory -> device only */ 25586b5be6eSdyoung #define BUS_DMA_NOCACHE 0x400 /* hint: map non-cached memory */ 25686b5be6eSdyoung 25786b5be6eSdyoung /* Forwards needed by prototypes below. */ 25886b5be6eSdyoung struct mbuf; 25986b5be6eSdyoung struct uio; 26086b5be6eSdyoung 26186b5be6eSdyoung /* 26286b5be6eSdyoung * Operations performed by bus_dmamap_sync(). 26386b5be6eSdyoung */ 26486b5be6eSdyoung #define BUS_DMASYNC_PREREAD 0x01 26586b5be6eSdyoung #define BUS_DMASYNC_POSTREAD 0x02 26686b5be6eSdyoung #define BUS_DMASYNC_PREWRITE 0x04 26786b5be6eSdyoung #define BUS_DMASYNC_POSTWRITE 0x08 26886b5be6eSdyoung 26986b5be6eSdyoung typedef struct dreamcast_bus_dma_tag *bus_dma_tag_t; 27086b5be6eSdyoung typedef struct dreamcast_bus_dmamap *bus_dmamap_t; 27186b5be6eSdyoung 27286b5be6eSdyoung #define BUS_DMA_TAG_VALID(t) ((t) != (bus_dma_tag_t)0) 27386b5be6eSdyoung 27486b5be6eSdyoung /* 27586b5be6eSdyoung * bus_dma_segment_t 27686b5be6eSdyoung * 27786b5be6eSdyoung * Describes a single contiguous DMA transaction. Values 27886b5be6eSdyoung * are suitable for programming into DMA registers. 27986b5be6eSdyoung */ 28086b5be6eSdyoung struct dreamcast_bus_dma_segment { 28186b5be6eSdyoung bus_addr_t ds_addr; /* DMA address */ 28286b5be6eSdyoung bus_size_t ds_len; /* length of transfer */ 28386b5be6eSdyoung }; 28486b5be6eSdyoung typedef struct dreamcast_bus_dma_segment bus_dma_segment_t; 28586b5be6eSdyoung 28686b5be6eSdyoung /* 28786b5be6eSdyoung * bus_dma_tag_t 28886b5be6eSdyoung * 28986b5be6eSdyoung * A machine-dependent opaque type describing the implementation of 29086b5be6eSdyoung * DMA for a given bus. 29186b5be6eSdyoung */ 29286b5be6eSdyoung 29386b5be6eSdyoung struct dreamcast_bus_dma_tag { 29486b5be6eSdyoung void *_cookie; /* cookie used in the guts */ 29586b5be6eSdyoung 29686b5be6eSdyoung /* 29786b5be6eSdyoung * DMA mapping methods. 29886b5be6eSdyoung */ 29986b5be6eSdyoung int (*_dmamap_create)(bus_dma_tag_t, bus_size_t, int, 30086b5be6eSdyoung bus_size_t, bus_size_t, int, bus_dmamap_t *); 30186b5be6eSdyoung void (*_dmamap_destroy)(bus_dma_tag_t, bus_dmamap_t); 30286b5be6eSdyoung int (*_dmamap_load)(bus_dma_tag_t, bus_dmamap_t, void *, 30386b5be6eSdyoung bus_size_t, struct proc *, int); 30486b5be6eSdyoung int (*_dmamap_load_mbuf)(bus_dma_tag_t, bus_dmamap_t, 30586b5be6eSdyoung struct mbuf *, int); 30686b5be6eSdyoung int (*_dmamap_load_uio)(bus_dma_tag_t, bus_dmamap_t, 30786b5be6eSdyoung struct uio *, int); 30886b5be6eSdyoung int (*_dmamap_load_raw)(bus_dma_tag_t, bus_dmamap_t, 30986b5be6eSdyoung bus_dma_segment_t *, int, bus_size_t, int); 31086b5be6eSdyoung void (*_dmamap_unload)(bus_dma_tag_t, bus_dmamap_t); 31186b5be6eSdyoung void (*_dmamap_sync)(bus_dma_tag_t, bus_dmamap_t, 31286b5be6eSdyoung bus_addr_t, bus_size_t, int); 31386b5be6eSdyoung 31486b5be6eSdyoung /* 31586b5be6eSdyoung * DMA memory utility functions. 31686b5be6eSdyoung */ 31786b5be6eSdyoung int (*_dmamem_alloc)(bus_dma_tag_t, bus_size_t, bus_size_t, 31886b5be6eSdyoung bus_size_t, bus_dma_segment_t *, int, int *, int); 31986b5be6eSdyoung void (*_dmamem_free)(bus_dma_tag_t, 32086b5be6eSdyoung bus_dma_segment_t *, int); 32186b5be6eSdyoung int (*_dmamem_map)(bus_dma_tag_t, bus_dma_segment_t *, 32286b5be6eSdyoung int, size_t, void **, int); 32386b5be6eSdyoung void (*_dmamem_unmap)(bus_dma_tag_t, void *, size_t); 32486b5be6eSdyoung paddr_t (*_dmamem_mmap)(bus_dma_tag_t, bus_dma_segment_t *, 32586b5be6eSdyoung int, off_t, int, int); 32686b5be6eSdyoung }; 32786b5be6eSdyoung 32886b5be6eSdyoung /* 32986b5be6eSdyoung * bus_dmamap_t 33086b5be6eSdyoung * 33186b5be6eSdyoung * Describes a DMA mapping. 33286b5be6eSdyoung */ 33386b5be6eSdyoung struct dreamcast_bus_dmamap { 33486b5be6eSdyoung /* 33586b5be6eSdyoung * PRIVATE MEMBERS: not for use my machine-independent code. 33686b5be6eSdyoung */ 33786b5be6eSdyoung bus_size_t _dm_size; /* largest DMA transfer mappable */ 33886b5be6eSdyoung int _dm_segcnt; /* number of segs this map can map */ 33986b5be6eSdyoung bus_size_t _dm_maxmaxsegsz; /* fixed largest possible segment */ 34086b5be6eSdyoung bus_size_t _dm_boundary; /* don't cross this */ 34186b5be6eSdyoung int _dm_flags; /* misc. flags */ 34286b5be6eSdyoung 34386b5be6eSdyoung void *_dm_cookie; /* cookie for bus-specific functions */ 34486b5be6eSdyoung 34586b5be6eSdyoung /* 34686b5be6eSdyoung * PUBLIC MEMBERS: these are used by machine-independent code. 34786b5be6eSdyoung */ 34886b5be6eSdyoung int dm_nsegs; /* # valid segments in mapping */ 34986b5be6eSdyoung bus_dma_segment_t dm_segs[1]; /* segments; variable length */ 35086b5be6eSdyoung bus_size_t dm_mapsize; /* size of the mapping */ 35186b5be6eSdyoung bus_size_t dm_maxsegsz; /* largest possible segment */ 35286b5be6eSdyoung }; 35386b5be6eSdyoung 35486b5be6eSdyoung #endif /* _DREAMCAST_BUS_DEFS_H_ */ 355