~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/m68k/include/asm/dvma.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/m68k/include/asm/dvma.h (Architecture m68k) and /arch/sparc64/include/asm-sparc64/dvma.h (Architecture sparc64)


  1 /* SPDX-License-Identifier: GPL-2.0 */              1 
  2 /*                                                
  3  * include/asm-m68k/dma.h                         
  4  *                                                
  5  * Copyright 1995 (C) David S. Miller (davem@c    
  6  *                                                
  7  * Hacked to fit Sun3x needs by Thomas Bogendo    
  8  */                                               
  9                                                   
 10 #ifndef __M68K_DVMA_H                             
 11 #define __M68K_DVMA_H                             
 12                                                   
 13                                                   
 14 #define DVMA_PAGE_SHIFT 13                        
 15 #define DVMA_PAGE_SIZE  (1UL << DVMA_PAGE_SHIF    
 16 #define DVMA_PAGE_MASK  (~(DVMA_PAGE_SIZE-1))     
 17 #define DVMA_PAGE_ALIGN(addr)   ALIGN(addr, DV    
 18                                                   
 19 extern void dvma_init(void);                      
 20 extern int dvma_map_iommu(unsigned long kaddr,    
 21                           int len);               
 22                                                   
 23 #define dvma_malloc(x) dvma_malloc_align(x, 0)    
 24 #define dvma_map(x, y) dvma_map_align(x, y, 0)    
 25 #define dvma_map_vme(x, y) (dvma_map(x, y) & 0    
 26 #define dvma_map_align_vme(x, y, z) (dvma_map_    
 27 extern unsigned long dvma_map_align(unsigned l    
 28                             int align);           
 29 extern void *dvma_malloc_align(unsigned long l    
 30                                                   
 31 extern void dvma_unmap(void *baddr);              
 32 extern void dvma_free(void *vaddr);               
 33                                                   
 34                                                   
 35 #ifdef CONFIG_SUN3                                
 36 /* sun3 dvma page support */                      
 37                                                   
 38 /* memory and pmegs potentially reserved for d    
 39 #define DVMA_PMEG_START 10                        
 40 #define DVMA_PMEG_END 16                          
 41 #define DVMA_START 0xf00000                       
 42 #define DVMA_END 0xfe0000                         
 43 #define DVMA_SIZE (DVMA_END-DVMA_START)           
 44 #define IOMMU_TOTAL_ENTRIES 128                   
 45 #define IOMMU_ENTRIES 120                         
 46                                                   
 47 /* empirical kludge -- dvma regions only seem     
 48    byte boundaries */                             
 49 #define DVMA_REGION_SIZE 0x10000                  
 50 #define DVMA_ALIGN(addr) (((addr)+DVMA_REGION_    
 51                          ~(DVMA_REGION_SIZE-1)    
 52                                                   
 53 /* virt <-> phys conversions */                   
 54 #define dvma_vtop(x) ((unsigned long)(x) & 0xf    
 55 #define dvma_ptov(x) ((unsigned long)(x) | 0xf    
 56 #define dvma_vtovme(x) ((unsigned long)(x) & 0    
 57 #define dvma_vmetov(x) ((unsigned long)(x) | 0    
 58 #define dvma_vtob(x) dvma_vtop(x)                 
 59 #define dvma_btov(x) dvma_ptov(x)                 
 60                                                   
 61 void sun3_dvma_init(void);                        
 62                                                   
 63 static inline int dvma_map_cpu(unsigned long k    
 64                                int len)           
 65 {                                                 
 66         return 0;                                 
 67 }                                                 
 68                                                   
 69 static inline void dvma_unmap_iommu(unsigned l    
 70                                                   
 71 #else /* Sun3x */                                 
 72                                                   
 73 /* sun3x dvma page support */                     
 74                                                   
 75 #define DVMA_START 0x0                            
 76 #define DVMA_END 0xf00000                         
 77 #define DVMA_SIZE (DVMA_END-DVMA_START)           
 78 #define IOMMU_TOTAL_ENTRIES        2048           
 79 /* the prom takes the top meg */                  
 80 #define IOMMU_ENTRIES              (IOMMU_TOTA    
 81                                                   
 82 #define dvma_vtob(x) ((unsigned long)(x) & 0x0    
 83 #define dvma_btov(x) ((unsigned long)(x) | 0xf    
 84                                                   
 85 static inline void sun3_dvma_init(void) { }       
 86                                                   
 87 int dvma_map_cpu(unsigned long kaddr, unsigned    
 88                                                   
 89 void dvma_unmap_iommu(unsigned long baddr, int    
 90                                                   
 91 /* everything below this line is specific to d    
 92    ESP scsi on sun3x */                           
 93                                                   
 94 /* Structure to describe the current status of    
 95 struct sparc_dma_registers {                      
 96   __volatile__ unsigned long cond_reg;  /* DMA    
 97   __volatile__ unsigned long st_addr;   /* Sta    
 98   __volatile__ unsigned long  cnt;      /* How    
 99   __volatile__ unsigned long dma_test;  /* DMA    
100 };                                                
101                                                   
102 /* DVMA chip revisions */                         
103 enum dvma_rev {                                   
104         dvmarev0,                                 
105         dvmaesc1,                                 
106         dvmarev1,                                 
107         dvmarev2,                                 
108         dvmarev3,                                 
109         dvmarevplus,                              
110         dvmahme                                   
111 };                                                
112                                                   
113 #define DMA_HASCOUNT(rev)  ((rev)==dvmaesc1)      
114                                                   
115 /* Linux DMA information structure, filled dur    
116 struct Linux_SBus_DMA {                           
117         struct Linux_SBus_DMA *next;              
118         struct linux_sbus_device *SBus_dev;       
119         struct sparc_dma_registers *regs;         
120                                                   
121         /* Status, misc info */                   
122         int node;                /* Prom node     
123         int running;             /* Are we doi    
124         int allocated;           /* Are we "ow    
125                                                   
126         /* Transfer information. */               
127         unsigned long addr;      /* Start addr    
128         int nbytes;              /* Size of cu    
129         int realbytes;           /* For splitt    
130                                                   
131         /* DMA revision */                        
132         enum dvma_rev revision;                   
133 };                                                
134                                                   
135 extern struct Linux_SBus_DMA *dma_chain;          
136                                                   
137 /* Broken hardware... */                          
138 #define DMA_ISBROKEN(dma)    ((dma)->revision     
139 #define DMA_ISESC1(dma)      ((dma)->revision     
140                                                   
141 /* Fields in the cond_reg register */             
142 /* First, the version identification bits */      
143 #define DMA_DEVICE_ID    0xf0000000        /*     
144 #define DMA_VERS0        0x00000000        /*     
145 #define DMA_ESCV1        0x40000000        /*     
146 #define DMA_VERS1        0x80000000        /*     
147 #define DMA_VERS2        0xa0000000        /*     
148 #define DMA_VERHME       0xb0000000        /*     
149 #define DMA_VERSPLUS     0x90000000        /*     
150                                                   
151 #define DMA_HNDL_INTR    0x00000001        /*     
152 #define DMA_HNDL_ERROR   0x00000002        /*     
153 #define DMA_FIFO_ISDRAIN 0x0000000c        /*     
154 #define DMA_INT_ENAB     0x00000010        /*     
155 #define DMA_FIFO_INV     0x00000020        /*     
156 #define DMA_ACC_SZ_ERR   0x00000040        /*     
157 #define DMA_FIFO_STDRAIN 0x00000040        /*     
158 #define DMA_RST_SCSI     0x00000080        /*     
159 #define DMA_RST_ENET     DMA_RST_SCSI      /*     
160 #define DMA_ST_WRITE     0x00000100        /*     
161 #define DMA_ENABLE       0x00000200        /*     
162 #define DMA_PEND_READ    0x00000400        /*     
163 #define DMA_ESC_BURST    0x00000800        /*     
164 #define DMA_READ_AHEAD   0x00001800        /*     
165 #define DMA_DSBL_RD_DRN  0x00001000        /*     
166 #define DMA_BCNT_ENAB    0x00002000        /*     
167 #define DMA_TERM_CNTR    0x00004000        /*     
168 #define DMA_CSR_DISAB    0x00010000        /*     
169 #define DMA_SCSI_DISAB   0x00020000        /*     
170 #define DMA_DSBL_WR_INV  0x00020000        /*     
171 #define DMA_ADD_ENABLE   0x00040000        /*     
172 #define DMA_E_BURST8     0x00040000        /*     
173 #define DMA_BRST_SZ      0x000c0000        /*     
174 #define DMA_BRST64       0x00080000        /*     
175 #define DMA_BRST32       0x00040000        /*     
176 #define DMA_BRST16       0x00000000        /*     
177 #define DMA_BRST0        0x00080000        /*     
178 #define DMA_ADDR_DISAB   0x00100000        /*     
179 #define DMA_2CLKS        0x00200000        /*     
180 #define DMA_3CLKS        0x00400000        /*     
181 #define DMA_EN_ENETAUI   DMA_3CLKS         /*     
182 #define DMA_CNTR_DISAB   0x00800000        /*     
183 #define DMA_AUTO_NADDR   0x01000000        /*     
184 #define DMA_SCSI_ON      0x02000000        /*     
185 #define DMA_PARITY_OFF   0x02000000        /*     
186 #define DMA_LOADED_ADDR  0x04000000        /*     
187 #define DMA_LOADED_NADDR 0x08000000        /*     
188                                                   
189 /* Values describing the burst-size property f    
190 #define DMA_BURST1       0x01                     
191 #define DMA_BURST2       0x02                     
192 #define DMA_BURST4       0x04                     
193 #define DMA_BURST8       0x08                     
194 #define DMA_BURST16      0x10                     
195 #define DMA_BURST32      0x20                     
196 #define DMA_BURST64      0x40                     
197 #define DMA_BURSTBITS    0x7f                     
198                                                   
199 /* Determine highest possible final transfer a    
200 #define DMA_MAXEND(addr) (0x01000000UL-(((unsi    
201                                                   
202 /* Yes, I hack a lot of elisp in my spare time    
203 #define DMA_ERROR_P(regs)  ((((regs)->cond_reg    
204 #define DMA_IRQ_P(regs)    ((((regs)->cond_reg    
205 #define DMA_WRITE_P(regs)  ((((regs)->cond_reg    
206 #define DMA_OFF(regs)      ((((regs)->cond_reg    
207 #define DMA_INTSOFF(regs)  ((((regs)->cond_reg    
208 #define DMA_INTSON(regs)   ((((regs)->cond_reg    
209 #define DMA_PUNTFIFO(regs) ((((regs)->cond_reg    
210 #define DMA_SETSTART(regs, addr)  ((((regs)->s    
211 #define DMA_BEGINDMA_W(regs) \                    
212         ((((regs)->cond_reg |= (DMA_ST_WRITE|D    
213 #define DMA_BEGINDMA_R(regs) \                    
214         ((((regs)->cond_reg |= ((DMA_ENABLE|DM    
215                                                   
216 /* For certain DMA chips, we need to disable i    
217  * and turn them back on when we are done.  So    
218  * handler you *must* call DMA_IRQ_ENTRY upon     
219  * when leaving the handler.  You have been wa    
220  */                                               
221 #define DMA_IRQ_ENTRY(dma, dregs) do { \          
222         if(DMA_ISBROKEN(dma)) DMA_INTSOFF(dreg    
223    } while (0)                                    
224                                                   
225 #define DMA_IRQ_EXIT(dma, dregs) do { \           
226         if(DMA_ISBROKEN(dma)) DMA_INTSON(dregs    
227    } while(0)                                     
228                                                   
229 /* Reset the friggin' thing... */                 
230 #define DMA_RESET(dma) do { \                     
231         struct sparc_dma_registers *regs = dma    
232         /* Let the current FIFO drain itself *    
233         sparc_dma_pause(regs, (DMA_FIFO_ISDRAI    
234         /* Reset the logic */                     
235         regs->cond_reg |= (DMA_RST_SCSI);         
236         __delay(400);                             
237         regs->cond_reg &= ~(DMA_RST_SCSI);        
238         sparc_dma_enable_interrupts(regs);        
239         /* Enable FAST transfers if available     
240         if(dma->revision>dvmarev1) regs->cond_    
241         dma->running = 0;                         
242 } while(0)                                        
243                                                   
244                                                   
245 #endif /* !CONFIG_SUN3 */                         
246                                                   
247 #endif /* !(__M68K_DVMA_H) */                     
248                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php