/usr/src/linux-headers-5.15.0-190/arch/mips/include/asm
NameSizeModeActions
dec/-0755rm
fw/-0755rm
ip32/-0755rm
mach-ar7/-0755rm
mach-ath25/-0755rm
mach-ath79/-0755rm
mach-au1x00/-0755rm
mach-bcm47xx/-0755rm
mach-bcm63xx/-0755rm
mach-bmips/-0755rm
mach-cavium-octeon/-0755rm
mach-cobalt/-0755rm
mach-db1x00/-0755rm
mach-dec/-0755rm
mach-generic/-0755rm
mach-ingenic/-0755rm
mach-ip22/-0755rm
mach-ip27/-0755rm
mach-ip28/-0755rm
mach-ip30/-0755rm
mach-ip32/-0755rm
mach-jazz/-0755rm
mach-lantiq/-0755rm
mach-loongson2ef/-0755rm
mach-loongson32/-0755rm
mach-loongson64/-0755rm
mach-malta/-0755rm
mach-n64/-0755rm
mach-netlogic/-0755rm
mach-pic32/-0755rm
mach-ralink/-0755rm
mach-rc32434/-0755rm
mach-rm/-0755rm
mach-sibyte/-0755rm
mach-tx39xx/-0755rm
mach-tx49xx/-0755rm
mach-vr41xx/-0755rm
mips-boards/-0755rm
netlogic/-0755rm
octeon/-0755rm
pci/-0755rm
sgi/-0755rm
sibyte/-0755rm
sn/-0755rm
txx9/-0755rm
vdso/-0755rm
vr41xx/-0755rm
xtalk/-0755rm
abi.h8530644editdlrm
addrspace.h40390644editdlrm
amon.h4090644editdlrm
arch_hweight.h7920644editdlrm
asm-eva.h73430644editdlrm
asm-offsets.h350644editdlrm
asm-prototypes.h2280644editdlrm
asm.h66880644editdlrm
asmmacro-32.h25290644editdlrm
asmmacro-64.h12540644editdlrm
asmmacro.h146390644editdlrm
atomic.h82990644editdlrm
barrier.h35070644editdlrm
bcache.h20860644editdlrm
bitops.h109140644editdlrm
bitrev.h6080644editdlrm
bmips-spaces.h2680644editdlrm
bmips.h30970644editdlrm
bootinfo.h49280644editdlrm
branch.h25030644editdlrm
break.h7870644editdlrm
bug.h7590644editdlrm
bugs.h6400644editdlrm
cache.h5270644editdlrm
cacheflush.h48630644editdlrm
cacheops.h38010644editdlrm
cdmm.h37610644editdlrm
cevt-r4k.h8230644editdlrm
checksum.h57430644editdlrm
clocksource.h2730644editdlrm
cmp.h4920644editdlrm
cmpxchg.h88800644editdlrm
compat-signal.h6400644editdlrm
compat.h38660644editdlrm
compiler.h26690644editdlrm
cop2.h18120644editdlrm
cpu-features.h227230644editdlrm
cpu-info.h62760644editdlrm
cpu-type.h42560644editdlrm
cpu.h169550644editdlrm
cpufeature.h5100644editdlrm
debug.h4470644editdlrm
delay.h8410644editdlrm
div64.h22230644editdlrm
dma-direct.h2550644editdlrm
dma-mapping.h3650644editdlrm
dma.h101610644editdlrm
dmi.h5470644editdlrm
ds1287.h3330644editdlrm
dsemul.h35950644editdlrm
dsp.h17470644editdlrm
edac.h8390644editdlrm
elf.h155590644editdlrm
elfcore-compat.h8410644editdlrm
errno.h4290644editdlrm
eva.h7960644editdlrm
exec.h5790644editdlrm
extable.h2410644editdlrm
fb.h3720644editdlrm
fixmap.h22190644editdlrm
floppy.h16090644editdlrm
fpregdef.h27260644editdlrm
fpu.h73320644editdlrm
fpu_emulator.h48440644editdlrm
ftrace.h26590644editdlrm
futex.h52410644editdlrm
ginvt.h10560644editdlrm
gio_device.h14110644editdlrm
gt64120.h192180644editdlrm
hardirq.h5440644editdlrm
hazards.h86730644editdlrm
highmem.h17410644editdlrm
hpet.h19740644editdlrm
hugetlb.h21650644editdlrm
hw_irq.h4750644editdlrm
i8259.h24400644editdlrm
ide.h3300644editdlrm
idle.h7270644editdlrm
inst.h23980644editdlrm
io.h173340644editdlrm
irq.h24080644editdlrm
irqflags.h42060644editdlrm
irq_cpu.h4270644editdlrm
irq_gt641xx.h20740644editdlrm
irq_regs.h5400644editdlrm
isa-rev.h5560644editdlrm
isadep.h6030644editdlrm
jazz.h81920644editdlrm
jazzdma.h28260644editdlrm
jump_label.h15710644editdlrm
Kbuild4140644editdlrm
kdebug.h3030644editdlrm
kexec.h14900644editdlrm
kgdb.h12220644editdlrm
kprobes.h17270644editdlrm
kvm_host.h304880644editdlrm
kvm_types.h1840644editdlrm
linkage.h3060644editdlrm
llsc.h9230644editdlrm
local.h54730644editdlrm
maar.h42700644editdlrm
machine.h27950644editdlrm
mc146818-time.h37790644editdlrm
mc146818rtc.h4500644editdlrm
mips-cm.h168570644editdlrm
mips-cpc.h57660644editdlrm
mips-cps.h64940644editdlrm
mips-gic.h123870644editdlrm
mips-r2-to-r6-emul.h20950644editdlrm
mipsmtregs.h111710644editdlrm
mipsprom.h21460644editdlrm
mipsregs.h969260644editdlrm
mips_mt.h7070644editdlrm
mmiowb.h1970644editdlrm
mmu.h5550644editdlrm
mmu_context.h62050644editdlrm
mmzone.h4270644editdlrm
module.h23880644editdlrm
msa.h75250644editdlrm
msc01_ic.h67090644editdlrm
paccess.h31400644editdlrm
page.h76100644editdlrm
pci.h39020644editdlrm
perf_event.h3360644editdlrm
pgalloc.h25710644editdlrm
pgtable-32.h81490644editdlrm
pgtable-64.h97090644editdlrm
pgtable-bits.h78520644editdlrm
pgtable.h185290644editdlrm
pm-cps.h15150644editdlrm
pm.h38710644editdlrm
prefetch.h21480644editdlrm
processor.h113210644editdlrm
prom.h6960644editdlrm
ptrace.h55820644editdlrm
r4k-timer.h6040644editdlrm
r4kcache.h113730644editdlrm
reboot.h4400644editdlrm
reg.h260644editdlrm
regdef.h26930644editdlrm
rtlx.h21480644editdlrm
seccomp.h8100644editdlrm
setup.h9410644editdlrm
sgialib.h17430644editdlrm
sgiarcs.h140220644editdlrm
shmparam.h3520644editdlrm
sigcontext.h10600644editdlrm
signal.h10420644editdlrm
sim.h20700644editdlrm
smp-cps.h9980644editdlrm
smp-ops.h24760644editdlrm
smp.h36960644editdlrm
sni.h74950644editdlrm
socket.h13770644editdlrm
sparsemem.h4860644editdlrm
spinlock.h8220644editdlrm
spinlock_types.h1880644editdlrm
spram.h2610644editdlrm
stackframe.h111570644editdlrm
stackprotector.h11770644editdlrm
stacktrace.h21990644editdlrm
string.h6920644editdlrm
switch_to.h44550644editdlrm
sync.h78230644editdlrm
syscall.h37030644editdlrm
termios.h29330644editdlrm
thread_info.h66400644editdlrm
time.h16170644editdlrm
timex.h29370644editdlrm
tlb.h6130644editdlrm
tlbdebug.h4030644editdlrm
tlbex.h9770644editdlrm
tlbflush.h16830644editdlrm
tlbmisc.h3200644editdlrm
topology.h6190644editdlrm
traps.h12290644editdlrm
txx9irq.h7430644editdlrm
txx9pio.h5920644editdlrm
txx9tmr.h16250644editdlrm
types.h4590644editdlrm
uaccess.h164500644editdlrm
uasm.h95780644editdlrm
unaligned-emul.h268560644editdlrm
unistd.h18600644editdlrm
unroll.h28600644editdlrm
uprobes.h11410644editdlrm
vdso.h14690644editdlrm
vermagic.h23720644editdlrm
vga.h12910644editdlrm
vmalloc.h900644editdlrm
vpe.h28430644editdlrm
war.h22820644editdlrm
watch.h8270644editdlrm
wbflush.h6940644editdlrm
yamon-dt.h17170644editdlrm
Edit: /usr/src/linux-headers-5.15.0-190/arch/mips/include/asm/dma.h (10161B)
/* SPDX-License-Identifier: GPL-2.0 */ /* * linux/include/asm/dma.h: Defines for using and allocating dma channels. * Written by Hennus Bergman, 1992. * High DMA channel support & info by Hannu Savolainen * and John Boyd, Nov. 1992. * * NOTE: all this is true *only* for ISA/EISA expansions on Mips boards * and can only be used for expansion cards. Onboard DMA controllers, such * as the R4030 on Jazz boards behave totally different! */ #ifndef _ASM_DMA_H #define _ASM_DMA_H #include /* need byte IO */ #include /* And spinlocks */ #include #ifdef HAVE_REALLY_SLOW_DMA_CONTROLLER #define dma_outb outb_p #else #define dma_outb outb #endif #define dma_inb inb /* * NOTES about DMA transfers: * * controller 1: channels 0-3, byte operations, ports 00-1F * controller 2: channels 4-7, word operations, ports C0-DF * * - ALL registers are 8 bits only, regardless of transfer size * - channel 4 is not used - cascades 1 into 2. * - channels 0-3 are byte - addresses/counts are for physical bytes * - channels 5-7 are word - addresses/counts are for physical words * - transfers must not cross physical 64K (0-3) or 128K (5-7) boundaries * - transfer count loaded to registers is 1 less than actual count * - controller 2 offsets are all even (2x offsets for controller 1) * - page registers for 5-7 don't use data bit 0, represent 128K pages * - page registers for 0-3 use bit 0, represent 64K pages * * DMA transfers are limited to the lower 16MB of _physical_ memory. * Note that addresses loaded into registers must be _physical_ addresses, * not logical addresses (which may differ if paging is active). * * Address mapping for channels 0-3: * * A23 ... A16 A15 ... A8 A7 ... A0 (Physical addresses) * | ... | | ... | | ... | * | ... | | ... | | ... | * | ... | | ... | | ... | * P7 ... P0 A7 ... A0 A7 ... A0 * | Page | Addr MSB | Addr LSB | (DMA registers) * * Address mapping for channels 5-7: * * A23 ... A17 A16 A15 ... A9 A8 A7 ... A1 A0 (Physical addresses) * | ... | \ \ ... \ \ \ ... \ \ * | ... | \ \ ... \ \ \ ... \ (not used) * | ... | \ \ ... \ \ \ ... \ * P7 ... P1 (0) A7 A6 ... A0 A7 A6 ... A0 * | Page | Addr MSB | Addr LSB | (DMA registers) * * Again, channels 5-7 transfer _physical_ words (16 bits), so addresses * and counts _must_ be word-aligned (the lowest address bit is _ignored_ at * the hardware level, so odd-byte transfers aren't possible). * * Transfer count (_not # bytes_) is limited to 64K, represented as actual * count - 1 : 64K => 0xFFFF, 1 => 0x0000. Thus, count is always 1 or more, * and up to 128K bytes may be transferred on channels 5-7 in one operation. * */ #ifndef CONFIG_GENERIC_ISA_DMA_SUPPORT_BROKEN #define MAX_DMA_CHANNELS 8 #endif /* * The maximum address in KSEG0 that we can perform a DMA transfer to on this * platform. This describes only the PC style part of the DMA logic like on * Deskstations or Acer PICA but not the much more versatile DMA logic used * for the local devices on Acer PICA or Magnums. */ #if defined(CONFIG_SGI_IP22) || defined(CONFIG_SGI_IP28) /* don't care; ISA bus master won't work, ISA slave DMA supports 32bit addr */ #define MAX_DMA_ADDRESS PAGE_OFFSET #else #define MAX_DMA_ADDRESS (PAGE_OFFSET + 0x01000000) #endif #define MAX_DMA_PFN PFN_DOWN(virt_to_phys((void *)MAX_DMA_ADDRESS)) #ifndef MAX_DMA32_PFN #define MAX_DMA32_PFN (1UL << (32 - PAGE_SHIFT)) #endif /* 8237 DMA controllers */ #define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */ #define IO_DMA2_BASE 0xC0 /* 16 bit master DMA, ch 4(=slave input)..7 */ /* DMA controller registers */ #define DMA1_CMD_REG 0x08 /* command register (w) */ #define DMA1_STAT_REG 0x08 /* status register (r) */ #define DMA1_REQ_REG 0x09 /* request register (w) */ #define DMA1_MASK_REG 0x0A /* single-channel mask (w) */ #define DMA1_MODE_REG 0x0B /* mode register (w) */ #define DMA1_CLEAR_FF_REG 0x0C /* clear pointer flip-flop (w) */ #define DMA1_TEMP_REG 0x0D /* Temporary Register (r) */ #define DMA1_RESET_REG 0x0D /* Master Clear (w) */ #define DMA1_CLR_MASK_REG 0x0E /* Clear Mask */ #define DMA1_MASK_ALL_REG 0x0F /* all-channels mask (w) */ #define DMA2_CMD_REG 0xD0 /* command register (w) */ #define DMA2_STAT_REG 0xD0 /* status register (r) */ #define DMA2_REQ_REG 0xD2 /* request register (w) */ #define DMA2_MASK_REG 0xD4 /* single-channel mask (w) */ #define DMA2_MODE_REG 0xD6 /* mode register (w) */ #define DMA2_CLEAR_FF_REG 0xD8 /* clear pointer flip-flop (w) */ #define DMA2_TEMP_REG 0xDA /* Temporary Register (r) */ #define DMA2_RESET_REG 0xDA /* Master Clear (w) */ #define DMA2_CLR_MASK_REG 0xDC /* Clear Mask */ #define DMA2_MASK_ALL_REG 0xDE /* all-channels mask (w) */ #define DMA_ADDR_0 0x00 /* DMA address registers */ #define DMA_ADDR_1 0x02 #define DMA_ADDR_2 0x04 #define DMA_ADDR_3 0x06 #define DMA_ADDR_4 0xC0 #define DMA_ADDR_5 0xC4 #define DMA_ADDR_6 0xC8 #define DMA_ADDR_7 0xCC #define DMA_CNT_0 0x01 /* DMA count registers */ #define DMA_CNT_1 0x03 #define DMA_CNT_2 0x05 #define DMA_CNT_3 0x07 #define DMA_CNT_4 0xC2 #define DMA_CNT_5 0xC6 #define DMA_CNT_6 0xCA #define DMA_CNT_7 0xCE #define DMA_PAGE_0 0x87 /* DMA page registers */ #define DMA_PAGE_1 0x83 #define DMA_PAGE_2 0x81 #define DMA_PAGE_3 0x82 #define DMA_PAGE_5 0x8B #define DMA_PAGE_6 0x89 #define DMA_PAGE_7 0x8A #define DMA_MODE_READ 0x44 /* I/O to memory, no autoinit, increment, single mode */ #define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */ #define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */ #define DMA_AUTOINIT 0x10 extern spinlock_t dma_spin_lock; static __inline__ unsigned long claim_dma_lock(void) { unsigned long flags; spin_lock_irqsave(&dma_spin_lock, flags); return flags; } static __inline__ void release_dma_lock(unsigned long flags) { spin_unlock_irqrestore(&dma_spin_lock, flags); } /* enable/disable a specific DMA channel */ static __inline__ void enable_dma(unsigned int dmanr) { if (dmanr<=3) dma_outb(dmanr, DMA1_MASK_REG); else dma_outb(dmanr & 3, DMA2_MASK_REG); } static __inline__ void disable_dma(unsigned int dmanr) { if (dmanr<=3) dma_outb(dmanr | 4, DMA1_MASK_REG); else dma_outb((dmanr & 3) | 4, DMA2_MASK_REG); } /* Clear the 'DMA Pointer Flip Flop'. * Write 0 for LSB/MSB, 1 for MSB/LSB access. * Use this once to initialize the FF to a known state. * After that, keep track of it. :-) * --- In order to do that, the DMA routines below should --- * --- only be used while holding the DMA lock ! --- */ static __inline__ void clear_dma_ff(unsigned int dmanr) { if (dmanr<=3) dma_outb(0, DMA1_CLEAR_FF_REG); else dma_outb(0, DMA2_CLEAR_FF_REG); } /* set mode (above) for a specific DMA channel */ static __inline__ void set_dma_mode(unsigned int dmanr, char mode) { if (dmanr<=3) dma_outb(mode | dmanr, DMA1_MODE_REG); else dma_outb(mode | (dmanr&3), DMA2_MODE_REG); } /* Set only the page register bits of the transfer address. * This is used for successive transfers when we know the contents of * the lower 16 bits of the DMA current address register, but a 64k boundary * may have been crossed. */ static __inline__ void set_dma_page(unsigned int dmanr, char pagenr) { switch(dmanr) { case 0: dma_outb(pagenr, DMA_PAGE_0); break; case 1: dma_outb(pagenr, DMA_PAGE_1); break; case 2: dma_outb(pagenr, DMA_PAGE_2); break; case 3: dma_outb(pagenr, DMA_PAGE_3); break; case 5: dma_outb(pagenr & 0xfe, DMA_PAGE_5); break; case 6: dma_outb(pagenr & 0xfe, DMA_PAGE_6); break; case 7: dma_outb(pagenr & 0xfe, DMA_PAGE_7); break; } } /* Set transfer address & page bits for specific DMA channel. * Assumes dma flipflop is clear. */ static __inline__ void set_dma_addr(unsigned int dmanr, unsigned int a) { set_dma_page(dmanr, a>>16); if (dmanr <= 3) { dma_outb( a & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE ); dma_outb( (a>>8) & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE ); } else { dma_outb( (a>>1) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE ); dma_outb( (a>>9) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE ); } } /* Set transfer size (max 64k for DMA0..3, 128k for DMA5..7) for * a specific DMA channel. * You must ensure the parameters are valid. * NOTE: from a manual: "the number of transfers is one more * than the initial word count"! This is taken into account. * Assumes dma flip-flop is clear. * NOTE 2: "count" represents _bytes_ and must be even for channels 5-7. */ static __inline__ void set_dma_count(unsigned int dmanr, unsigned int count) { count--; if (dmanr <= 3) { dma_outb( count & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE ); dma_outb( (count>>8) & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE ); } else { dma_outb( (count>>1) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE ); dma_outb( (count>>9) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE ); } } /* Get DMA residue count. After a DMA transfer, this * should return zero. Reading this while a DMA transfer is * still in progress will return unpredictable results. * If called before the channel has been used, it may return 1. * Otherwise, it returns the number of _bytes_ left to transfer. * * Assumes DMA flip-flop is clear. */ static __inline__ int get_dma_residue(unsigned int dmanr) { unsigned int io_port = (dmanr<=3)? ((dmanr&3)<<1) + 1 + IO_DMA1_BASE : ((dmanr&3)<<2) + 2 + IO_DMA2_BASE; /* using short to get 16-bit wrap around */ unsigned short count; count = 1 + dma_inb(io_port); count += dma_inb(io_port) << 8; return (dmanr<=3)? count : (count<<1); } /* These are in kernel/dma.c: */ extern int request_dma(unsigned int dmanr, const char * device_id); /* reserve a DMA channel */ extern void free_dma(unsigned int dmanr); /* release it again */ /* From PCI */ #ifdef CONFIG_PCI extern int isa_dma_bridge_buggy; #else #define isa_dma_bridge_buggy (0) #endif #endif /* _ASM_DMA_H */