Commit | Line | Data |
---|---|---|
03f392a4 CT |
1 | /* |
2 | * Copyright (c) 1992 The Regents of the University of California. | |
3 | * All rights reserved. | |
4 | * | |
5 | * This software was developed by the Computer Systems Engineering group | |
6 | * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and | |
7 | * contributed to Berkeley. | |
8 | * | |
b480239a KB |
9 | * All advertising materials mentioning features or use of this software |
10 | * must display the following acknowledgement: | |
11 | * This product includes software developed by the University of | |
1869bdc0 | 12 | * California, Lawrence Berkeley Laboratory. |
b480239a | 13 | * |
03f392a4 CT |
14 | * %sccs.include.redist.c% |
15 | * | |
1869bdc0 | 16 | * @(#)dmareg.h 7.3 (Berkeley) %G% |
03f392a4 | 17 | * |
1869bdc0 | 18 | * from: $Header: dmareg.h,v 1.5 92/11/26 02:28:08 torek Exp $ (LBL) |
03f392a4 CT |
19 | */ |
20 | ||
21 | /* | |
22 | * Sun-4c Sbus slot 0 DMA registers. | |
23 | */ | |
24 | struct dmareg { | |
25 | u_long dma_csr; /* control/status register */ | |
26 | u_long dma_addr; /* address (virtual: is fed to MMU) */ | |
27 | u_long dma_bc; /* byte count (not used) */ | |
28 | u_long dma_diag; /* diagnostic register (not used) */ | |
29 | }; | |
30 | ||
31 | /* | |
32 | * Bits in dma_csr. | |
33 | * | |
34 | * Notes in [brackets]: | |
35 | * 1: not self-clearing, must be reset after being set. | |
36 | * 2: `drain' is like Unibus `bdp purge', i.e., it tells | |
37 | * the chip to finish up, because there is no more data | |
38 | * going into the buffer register. Needed only in rev | |
39 | * 1 dma chips. Self-clearing (hence write-only). | |
40 | * 3: only in rev 1 dma chips. | |
41 | * 4: only in rev 2 dma chips. | |
42 | * 5: also enables scsi interrupts. | |
43 | */ | |
44 | #define DMA_REV(csr) (((csr) >> 28) & 0xf) /* device id field */ | |
45 | #define DMAREV_1 0x8 /* device id = rev 1 DMA */ | |
46 | #define DMAREV_2 0x9 /* device id = rev 2 DMA */ | |
47 | ||
48 | #define DMA_1ZERO 0x0fff0000 /* unused; reads as zero [3] */ | |
49 | #define DMA_NAL 0x08000000 /* next address loaded [4] (ro) */ | |
50 | #define DMA_AL 0x04000000 /* address loaded [4] (ro) */ | |
51 | #define DMA_ON 0x02000000 /* working [4] (ro) */ | |
52 | #define DMA_NAE 0x01000000 /* next-address enable [4] (rw) */ | |
53 | #define DMA_DTCI 0x00800000 /* disable DMA_TC intr [4] (rw) */ | |
54 | #define DMA_TURBO 0x00400000 /* faster 53C90A mode [4] (rw) */ | |
55 | #define DMA_LERR 0x00200000 /* LANCE error [4] (ro) */ | |
56 | #define DMA_ALE 0x00100000 /* LANCE addr latch ena [4] (rw) */ | |
57 | #define DMA_2ZERO 0x000f0000 /* unused; reads as zero [4] */ | |
58 | #define DMA_ILACC 0x00008000 /* set for new AMD ethernet chip */ | |
59 | #define DMA_TC 0x00004000 /* terminal count: dma_bc ran out */ | |
60 | #define DMA_BCE 0x00002000 /* byte count enable (leave 0) */ | |
61 | #define DMA_BO 0x00001800 /* byte offset (ro) */ | |
62 | #define DMA_RP 0x00000400 /* request pending (ro) */ | |
63 | #define DMA_ENA 0x00000200 /* enable the dma chip */ | |
64 | #define DMA_READ 0x00000100 /* set for dev=>mem, i.e., read() */ | |
65 | #define DMA_RESET 0x00000080 /* reset dma chip [1] */ | |
66 | #define DMA_DRAIN 0x00000040 /* drain buffered data [2,3] (wo) */ | |
67 | #define DMA_ERR 0x00000040 /* slave error [4] (ro) */ | |
68 | #define DMA_FLUSH 0x00000020 /* clear PC, EP, and TC [4] (wo) */ | |
69 | #define DMA_IE 0x00000010 /* interrupt enable [4,5] */ | |
70 | #define DMA_PC 0x0000000c /* bytes in pack reg (ro) */ | |
71 | #define DMA_EP 0x00000002 /* error pending (ro) */ | |
72 | #define DMA_IP 0x00000001 /* interrupt pending (ro) */ | |
73 | ||
74 | #define DMA_BITS \ | |
75 | "\20\34NAL\33AL\32ON\31NAE\30DTCI\27TURBO\26LERR\25ALE\ | |
76 | \20ILACC\17TC\16BCE\13RP\12ENA\11READ\10RESET\7DRAIN/ERR\6FLUSH\5IE\2EP\1IP" | |
77 | ||
78 | /* DMA_BYTE turns the DMA_BO field into a byte index */ | |
79 | #define DMA_BYTE(csr) (((csr) >> 11) & 3) | |
80 | ||
81 | /* DMA_NPACK turns the DMA_PC field into a byte count */ | |
82 | #define DMA_NPACK(csr) (((csr) >> 2) & 3) | |
83 | ||
84 | /* DMA_INTR is true if the DMA chip says an ESP or DMA interrupt is pending */ | |
85 | #define DMA_INTR(csr) ((csr) & (DMA_IP | DMA_EP)) |