Kernel: Implement basic MMIO functions
This is equivalent to IO.h except for memory mapped io instead of IO ports
This commit is contained in:
		
							parent
							
								
									9363c1cdaf
								
							
						
					
					
						commit
						3a59a64355
					
				| 
						 | 
					@ -0,0 +1,49 @@
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#include <stddef.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MMIO
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static inline void write8(uintptr_t addr, uint8_t val)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							*(volatile uint8_t*)addr = val;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static inline void write16(uintptr_t addr, uint16_t val)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							*(volatile uint16_t*)addr = val;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static inline void write32(uintptr_t addr, uint32_t val)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							*(volatile uint32_t*)addr = val;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static inline void write64(uintptr_t addr, uint64_t val)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							*(volatile uint64_t*)addr = val;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static inline uint8_t read8(uintptr_t addr)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return *(volatile uint8_t*)addr;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static inline uint16_t read16(uintptr_t addr)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return *(volatile uint16_t*)addr;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static inline uint32_t read32(uintptr_t addr)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return *(volatile uint32_t*)addr;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static inline uint64_t read64(uintptr_t addr)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return *(volatile uint64_t*)addr;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue