1 1.12 jdolecek /* $NetBSD: dma.h,v 1.12 2017/10/07 16:05:31 jdolecek Exp $ */ 2 1.1 leo 3 1.1 leo /* 4 1.1 leo * Copyright (c) 1995 Leo Weppelman. 5 1.1 leo * All rights reserved. 6 1.1 leo * 7 1.1 leo * Redistribution and use in source and binary forms, with or without 8 1.1 leo * modification, are permitted provided that the following conditions 9 1.1 leo * are met: 10 1.1 leo * 1. Redistributions of source code must retain the above copyright 11 1.1 leo * notice, this list of conditions and the following disclaimer. 12 1.1 leo * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 leo * notice, this list of conditions and the following disclaimer in the 14 1.1 leo * documentation and/or other materials provided with the distribution. 15 1.1 leo * 16 1.1 leo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 1.1 leo * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 1.1 leo * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 1.1 leo * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 1.1 leo * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 1.1 leo * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 1.1 leo * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 1.1 leo * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 1.1 leo * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 1.1 leo * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 1.1 leo */ 27 1.1 leo 28 1.1 leo #ifndef _MACHINE_DMA_H 29 1.1 leo #define _MACHINE_DMA_H 30 1.1 leo 31 1.1 leo /* 32 1.1 leo * Atari TT hardware: 33 1.1 leo * FDC/ACSI DMA circuitry 34 1.1 leo */ 35 1.1 leo 36 1.1 leo #define DMA ((struct dma *)AD_DMA) 37 1.1 leo 38 1.1 leo struct dma { 39 1.3 leo volatile short dma_gap[2]; /* reserved */ 40 1.3 leo volatile u_short dma_data; /* controller data path */ 41 1.3 leo volatile u_short dma_mode; /* mode register */ 42 1.3 leo volatile u_char dma_addr[6]; /* base address H/M/L */ 43 1.7 leo volatile u_short dma_drvmode; /* floppy density settings */ 44 1.1 leo }; 45 1.1 leo 46 1.1 leo #define dma_nsec dma_data /* sector count */ 47 1.1 leo #define dma_stat dma_mode /* status register */ 48 1.1 leo 49 1.1 leo /* 50 1.1 leo * Mode register bits 51 1.1 leo */ 52 1.3 leo /* 0x0001 *//* not used */ 53 1.3 leo #define DMA_A0 0x0002 /* signal A0 to fdc/hdc */ 54 1.3 leo #define DMA_A1 0x0004 /* signal A1 to fdc/hdc */ 55 1.3 leo #define DMA_HDC 0x0008 /* must be on if accessing hdc */ 56 1.3 leo #define DMA_SCREG 0x0010 /* access sector count register */ 57 1.3 leo /* 0x0020 *//* reserved */ 58 1.3 leo #define DMA_NODMA 0x0040 /* no DMA (yet) */ 59 1.3 leo #define DMA_FDC 0x0080 /* must be on if accessing fdc */ 60 1.3 leo #define DMA_WRBIT 0x0100 /* write to fdc/hdc via dma_data*/ 61 1.3 leo #define DMA_SCSI 0x0088 /* select 5380 chip */ 62 1.1 leo 63 1.1 leo /* 64 1.1 leo * Status register bits 65 1.1 leo */ 66 1.1 leo #define DMAOK 0x0001 /* something wrong */ 67 1.1 leo #define SCNOT0 0x0002 /* sector count not 0 */ 68 1.1 leo #define DATREQ 0x0004 /* FDC data request signal */ 69 1.1 leo 70 1.1 leo /* 71 1.1 leo * Indices into dma_addr. 72 1.1 leo * Access low byte of 16 bits. 73 1.1 leo * Fill low/mid/high in this order. 74 1.1 leo */ 75 1.1 leo #define AD_HIGH 1 76 1.1 leo #define AD_MID 3 77 1.1 leo #define AD_LOW 5 78 1.1 leo 79 1.1 leo /* 80 1.1 leo * Defines for 'dmadrv_mode'. 81 1.1 leo */ 82 1.1 leo #define FDC_HDSET 1 /* Set FDC for High density */ 83 1.1 leo #define FDC_HDSIG 2 /* Signal HD present to drive */ 84 1.3 leo 85 1.4 leo /* 86 1.4 leo * Lock status bits: 87 1.4 leo */ 88 1.4 leo #define DMA_LOCK_REQ 1 /* DMA lock requested */ 89 1.4 leo #define DMA_LOCK_GRANT 2 /* DMA lock granted */ 90 1.4 leo 91 1.3 leo #ifdef _KERNEL 92 1.8 leo typedef void (*dma_farg)(void*); 93 1.8 leo 94 1.12 jdolecek int st_dmagrab(dma_farg, dma_farg, void *, int *, int, kmutex_t *); 95 1.10 tsutsui void st_dmafree(void *, int *); 96 1.10 tsutsui int st_dmawanted(void); 97 1.10 tsutsui void st_dmaaddr_set(void *); 98 1.10 tsutsui u_long st_dmaaddr_get(void); 99 1.10 tsutsui void st_dmacomm(int, int); 100 1.3 leo #endif /* _KERNEL */ 101 1.3 leo 102 1.1 leo #endif /* _MACHINE_DMA_H */ 103