mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 07:32:44 +00:00 
			
		
		
		
	AK: Rename the common integer typedefs to make it obvious what they are.
These types can be picked up by including <AK/Types.h>: * u8, u16, u32, u64 (unsigned) * i8, i16, i32, i64 (signed)
This commit is contained in:
		
							parent
							
								
									c4c4bbc5ba
								
							
						
					
					
						commit
						27f699ef0c
					
				
					 208 changed files with 1603 additions and 1621 deletions
				
			
		
							
								
								
									
										18
									
								
								AK/Bitmap.h
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								AK/Bitmap.h
									
										
									
									
									
								
							|  | @ -10,7 +10,7 @@ namespace AK { | ||||||
| class Bitmap { | class Bitmap { | ||||||
| public: | public: | ||||||
|     // NOTE: A wrapping Bitmap won't try to free the wrapped data.
 |     // NOTE: A wrapping Bitmap won't try to free the wrapped data.
 | ||||||
|     static Bitmap wrap(byte* data, int size) |     static Bitmap wrap(u8* data, int size) | ||||||
|     { |     { | ||||||
|         return Bitmap(data, size); |         return Bitmap(data, size); | ||||||
|     } |     } | ||||||
|  | @ -42,13 +42,13 @@ public: | ||||||
|     { |     { | ||||||
|         ASSERT(index < m_size); |         ASSERT(index < m_size); | ||||||
|         if (value) |         if (value) | ||||||
|             m_data[index / 8] |= static_cast<byte>((1u << (index % 8))); |             m_data[index / 8] |= static_cast<u8>((1u << (index % 8))); | ||||||
|         else |         else | ||||||
|             m_data[index / 8] &= static_cast<byte>(~(1u << (index % 8))); |             m_data[index / 8] &= static_cast<u8>(~(1u << (index % 8))); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     byte* data() { return m_data; } |     u8* data() { return m_data; } | ||||||
|     const byte* data() const { return m_data; } |     const u8* data() const { return m_data; } | ||||||
| 
 | 
 | ||||||
|     void grow(int size, bool default_value) |     void grow(int size, bool default_value) | ||||||
|     { |     { | ||||||
|  | @ -59,7 +59,7 @@ public: | ||||||
|         auto previous_data = m_data; |         auto previous_data = m_data; | ||||||
| 
 | 
 | ||||||
|         m_size = size; |         m_size = size; | ||||||
|         m_data = reinterpret_cast<byte*>(kmalloc(size_in_bytes())); |         m_data = reinterpret_cast<u8*>(kmalloc(size_in_bytes())); | ||||||
| 
 | 
 | ||||||
|         fill(default_value); |         fill(default_value); | ||||||
| 
 | 
 | ||||||
|  | @ -123,11 +123,11 @@ private: | ||||||
|         , m_owned(true) |         , m_owned(true) | ||||||
|     { |     { | ||||||
|         ASSERT(m_size != 0); |         ASSERT(m_size != 0); | ||||||
|         m_data = reinterpret_cast<byte*>(kmalloc(size_in_bytes())); |         m_data = reinterpret_cast<u8*>(kmalloc(size_in_bytes())); | ||||||
|         fill(default_value); |         fill(default_value); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     Bitmap(byte* data, int size) |     Bitmap(u8* data, int size) | ||||||
|         : m_data(data) |         : m_data(data) | ||||||
|         , m_size(size) |         , m_size(size) | ||||||
|         , m_owned(false) |         , m_owned(false) | ||||||
|  | @ -136,7 +136,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     int size_in_bytes() const { return ceil_div(m_size, 8); } |     int size_in_bytes() const { return ceil_div(m_size, 8); } | ||||||
| 
 | 
 | ||||||
|     byte* m_data { nullptr }; |     u8* m_data { nullptr }; | ||||||
|     int m_size { 0 }; |     int m_size { 0 }; | ||||||
|     bool m_owned { false }; |     bool m_owned { false }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -12,28 +12,28 @@ public: | ||||||
|     { |     { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void operator<<(byte value) |     void operator<<(u8 value) | ||||||
|     { |     { | ||||||
|         m_buffer[m_offset++] = value & 0xffu; |         m_buffer[m_offset++] = value & 0xffu; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void operator<<(char value) |     void operator<<(char value) | ||||||
|     { |     { | ||||||
|         m_buffer[m_offset++] = (byte)value; |         m_buffer[m_offset++] = (u8)value; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void operator<<(word value) |     void operator<<(u16 value) | ||||||
|     { |     { | ||||||
|         m_buffer[m_offset++] = value & 0xffu; |         m_buffer[m_offset++] = value & 0xffu; | ||||||
|         m_buffer[m_offset++] = (byte)(value >> 8) & 0xffu; |         m_buffer[m_offset++] = (u8)(value >> 8) & 0xffu; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void operator<<(dword value) |     void operator<<(u32 value) | ||||||
|     { |     { | ||||||
|         m_buffer[m_offset++] = value & 0xffu; |         m_buffer[m_offset++] = value & 0xffu; | ||||||
|         m_buffer[m_offset++] = (byte)(value >> 8) & 0xffu; |         m_buffer[m_offset++] = (u8)(value >> 8) & 0xffu; | ||||||
|         m_buffer[m_offset++] = (byte)(value >> 16) & 0xffu; |         m_buffer[m_offset++] = (u8)(value >> 16) & 0xffu; | ||||||
|         m_buffer[m_offset++] = (byte)(value >> 24) & 0xffu; |         m_buffer[m_offset++] = (u8)(value >> 24) & 0xffu; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void operator<<(const StringView& value) |     void operator<<(const StringView& value) | ||||||
|  | @ -53,7 +53,7 @@ public: | ||||||
|         return m_offset == m_buffer.size(); |         return m_offset == m_buffer.size(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void fill_to_end(byte ch) |     void fill_to_end(u8 ch) | ||||||
|     { |     { | ||||||
|         while (!at_end()) |         while (!at_end()) | ||||||
|             m_buffer[m_offset++] = ch; |             m_buffer[m_offset++] = ch; | ||||||
|  |  | ||||||
|  | @ -28,12 +28,12 @@ public: | ||||||
|         m_data = nullptr; |         m_data = nullptr; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     byte& operator[](int i) |     u8& operator[](int i) | ||||||
|     { |     { | ||||||
|         ASSERT(i < m_size); |         ASSERT(i < m_size); | ||||||
|         return m_data[i]; |         return m_data[i]; | ||||||
|     } |     } | ||||||
|     const byte& operator[](int i) const |     const u8& operator[](int i) const | ||||||
|     { |     { | ||||||
|         ASSERT(i < m_size); |         ASSERT(i < m_size); | ||||||
|         return m_data[i]; |         return m_data[i]; | ||||||
|  | @ -41,11 +41,11 @@ public: | ||||||
|     bool is_empty() const { return !m_size; } |     bool is_empty() const { return !m_size; } | ||||||
|     int size() const { return m_size; } |     int size() const { return m_size; } | ||||||
| 
 | 
 | ||||||
|     byte* pointer() { return m_data; } |     u8* pointer() { return m_data; } | ||||||
|     const byte* pointer() const { return m_data; } |     const u8* pointer() const { return m_data; } | ||||||
| 
 | 
 | ||||||
|     byte* offset_pointer(int offset) { return m_data + offset; } |     u8* offset_pointer(int offset) { return m_data + offset; } | ||||||
|     const byte* offset_pointer(int offset) const { return m_data + offset; } |     const u8* offset_pointer(int offset) const { return m_data + offset; } | ||||||
| 
 | 
 | ||||||
|     void* end_pointer() { return m_data + m_size; } |     void* end_pointer() { return m_data + m_size; } | ||||||
|     const void* end_pointer() const { return m_data + m_size; } |     const void* end_pointer() const { return m_data + m_size; } | ||||||
|  | @ -71,7 +71,7 @@ private: | ||||||
|     ByteBufferImpl(void*, int, ConstructionMode);       // For ConstructionMode=Wrap/Adopt
 |     ByteBufferImpl(void*, int, ConstructionMode);       // For ConstructionMode=Wrap/Adopt
 | ||||||
|     ByteBufferImpl() {} |     ByteBufferImpl() {} | ||||||
| 
 | 
 | ||||||
|     byte* m_data { nullptr }; |     u8* m_data { nullptr }; | ||||||
|     int m_size { 0 }; |     int m_size { 0 }; | ||||||
|     bool m_owned { false }; |     bool m_owned { false }; | ||||||
| }; | }; | ||||||
|  | @ -114,12 +114,12 @@ public: | ||||||
|     bool operator!() const { return is_null(); } |     bool operator!() const { return is_null(); } | ||||||
|     bool is_null() const { return m_impl == nullptr; } |     bool is_null() const { return m_impl == nullptr; } | ||||||
| 
 | 
 | ||||||
|     byte& operator[](int i) |     u8& operator[](int i) | ||||||
|     { |     { | ||||||
|         ASSERT(m_impl); |         ASSERT(m_impl); | ||||||
|         return (*m_impl)[i]; |         return (*m_impl)[i]; | ||||||
|     } |     } | ||||||
|     byte operator[](int i) const |     u8 operator[](int i) const | ||||||
|     { |     { | ||||||
|         ASSERT(m_impl); |         ASSERT(m_impl); | ||||||
|         return (*m_impl)[i]; |         return (*m_impl)[i]; | ||||||
|  | @ -127,14 +127,14 @@ public: | ||||||
|     bool is_empty() const { return !m_impl || m_impl->is_empty(); } |     bool is_empty() const { return !m_impl || m_impl->is_empty(); } | ||||||
|     int size() const { return m_impl ? m_impl->size() : 0; } |     int size() const { return m_impl ? m_impl->size() : 0; } | ||||||
| 
 | 
 | ||||||
|     byte* data() { return pointer(); } |     u8* data() { return pointer(); } | ||||||
|     const byte* data() const { return pointer(); } |     const u8* data() const { return pointer(); } | ||||||
| 
 | 
 | ||||||
|     byte* pointer() { return m_impl ? m_impl->pointer() : nullptr; } |     u8* pointer() { return m_impl ? m_impl->pointer() : nullptr; } | ||||||
|     const byte* pointer() const { return m_impl ? m_impl->pointer() : nullptr; } |     const u8* pointer() const { return m_impl ? m_impl->pointer() : nullptr; } | ||||||
| 
 | 
 | ||||||
|     byte* offset_pointer(int offset) { return m_impl ? m_impl->offset_pointer(offset) : nullptr; } |     u8* offset_pointer(int offset) { return m_impl ? m_impl->offset_pointer(offset) : nullptr; } | ||||||
|     const byte* offset_pointer(int offset) const { return m_impl ? m_impl->offset_pointer(offset) : nullptr; } |     const u8* offset_pointer(int offset) const { return m_impl ? m_impl->offset_pointer(offset) : nullptr; } | ||||||
| 
 | 
 | ||||||
|     void* end_pointer() { return m_impl ? m_impl->end_pointer() : nullptr; } |     void* end_pointer() { return m_impl ? m_impl->end_pointer() : nullptr; } | ||||||
|     const void* end_pointer() const { return m_impl ? m_impl->end_pointer() : nullptr; } |     const void* end_pointer() const { return m_impl ? m_impl->end_pointer() : nullptr; } | ||||||
|  | @ -191,7 +191,7 @@ private: | ||||||
| inline ByteBufferImpl::ByteBufferImpl(int size) | inline ByteBufferImpl::ByteBufferImpl(int size) | ||||||
|     : m_size(size) |     : m_size(size) | ||||||
| { | { | ||||||
|     m_data = static_cast<byte*>(kmalloc(size)); |     m_data = static_cast<u8*>(kmalloc(size)); | ||||||
|     m_owned = true; |     m_owned = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -199,13 +199,13 @@ inline ByteBufferImpl::ByteBufferImpl(const void* data, int size, ConstructionMo | ||||||
|     : m_size(size) |     : m_size(size) | ||||||
| { | { | ||||||
|     ASSERT(mode == Copy); |     ASSERT(mode == Copy); | ||||||
|     m_data = static_cast<byte*>(kmalloc(size)); |     m_data = static_cast<u8*>(kmalloc(size)); | ||||||
|     memcpy(m_data, data, size); |     memcpy(m_data, data, size); | ||||||
|     m_owned = true; |     m_owned = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline ByteBufferImpl::ByteBufferImpl(void* data, int size, ConstructionMode mode) | inline ByteBufferImpl::ByteBufferImpl(void* data, int size, ConstructionMode mode) | ||||||
|     : m_data(static_cast<byte*>(data)) |     : m_data(static_cast<u8*>(data)) | ||||||
|     , m_size(size) |     , m_size(size) | ||||||
| { | { | ||||||
|     if (mode == Adopt) { |     if (mode == Adopt) { | ||||||
|  | @ -219,9 +219,9 @@ inline void ByteBufferImpl::grow(int size) | ||||||
| { | { | ||||||
|     ASSERT(size > m_size); |     ASSERT(size > m_size); | ||||||
|     ASSERT(m_owned); |     ASSERT(m_owned); | ||||||
|     byte* new_data = static_cast<byte*>(kmalloc(size)); |     u8* new_data = static_cast<u8*>(kmalloc(size)); | ||||||
|     memcpy(new_data, m_data, m_size); |     memcpy(new_data, m_data, m_size); | ||||||
|     byte* old_data = m_data; |     u8* old_data = m_data; | ||||||
|     m_data = new_data; |     m_data = new_data; | ||||||
|     m_size = size; |     m_size = size; | ||||||
|     kfree(old_data); |     kfree(old_data); | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| #include "ELFImage.h" | #include "ELFImage.h" | ||||||
| #include <AK/kstdio.h> | #include <AK/kstdio.h> | ||||||
| 
 | 
 | ||||||
| ELFImage::ELFImage(const byte* buffer) | ELFImage::ELFImage(const u8* buffer) | ||||||
|     : m_buffer(buffer) |     : m_buffer(buffer) | ||||||
| { | { | ||||||
|     m_valid = parse(); |     m_valid = parse(); | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ | ||||||
| 
 | 
 | ||||||
| class ELFImage { | class ELFImage { | ||||||
| public: | public: | ||||||
|     explicit ELFImage(const byte*); |     explicit ELFImage(const u8*); | ||||||
|     ~ELFImage(); |     ~ELFImage(); | ||||||
|     void dump(); |     void dump(); | ||||||
|     bool is_valid() const { return m_valid; } |     bool is_valid() const { return m_valid; } | ||||||
|  | @ -54,13 +54,13 @@ public: | ||||||
|         ~ProgramHeader() {} |         ~ProgramHeader() {} | ||||||
| 
 | 
 | ||||||
|         unsigned index() const { return m_program_header_index; } |         unsigned index() const { return m_program_header_index; } | ||||||
|         dword type() const { return m_program_header.p_type; } |         u32 type() const { return m_program_header.p_type; } | ||||||
|         dword flags() const { return m_program_header.p_flags; } |         u32 flags() const { return m_program_header.p_flags; } | ||||||
|         dword offset() const { return m_program_header.p_offset; } |         u32 offset() const { return m_program_header.p_offset; } | ||||||
|         VirtualAddress vaddr() const { return VirtualAddress(m_program_header.p_vaddr); } |         VirtualAddress vaddr() const { return VirtualAddress(m_program_header.p_vaddr); } | ||||||
|         dword size_in_memory() const { return m_program_header.p_memsz; } |         u32 size_in_memory() const { return m_program_header.p_memsz; } | ||||||
|         dword size_in_image() const { return m_program_header.p_filesz; } |         u32 size_in_image() const { return m_program_header.p_filesz; } | ||||||
|         dword alignment() const { return m_program_header.p_align; } |         u32 alignment() const { return m_program_header.p_align; } | ||||||
|         bool is_readable() const { return flags() & PF_R; } |         bool is_readable() const { return flags() & PF_R; } | ||||||
|         bool is_writable() const { return flags() & PF_W; } |         bool is_writable() const { return flags() & PF_W; } | ||||||
|         bool is_executable() const { return flags() & PF_X; } |         bool is_executable() const { return flags() & PF_X; } | ||||||
|  | @ -88,10 +88,10 @@ public: | ||||||
|         unsigned size() const { return m_section_header.sh_size; } |         unsigned size() const { return m_section_header.sh_size; } | ||||||
|         unsigned entry_size() const { return m_section_header.sh_entsize; } |         unsigned entry_size() const { return m_section_header.sh_entsize; } | ||||||
|         unsigned entry_count() const { return !entry_size() ? 0 : size() / entry_size(); } |         unsigned entry_count() const { return !entry_size() ? 0 : size() / entry_size(); } | ||||||
|         dword address() const { return m_section_header.sh_addr; } |         u32 address() const { return m_section_header.sh_addr; } | ||||||
|         const char* raw_data() const { return m_image.raw_data(m_section_header.sh_offset); } |         const char* raw_data() const { return m_image.raw_data(m_section_header.sh_offset); } | ||||||
|         bool is_undefined() const { return m_section_index == SHN_UNDEF; } |         bool is_undefined() const { return m_section_index == SHN_UNDEF; } | ||||||
|         dword flags() const { return m_section_header.sh_flags; } |         u32 flags() const { return m_section_header.sh_flags; } | ||||||
|         bool is_writable() const { return flags() & SHF_WRITE; } |         bool is_writable() const { return flags() & SHF_WRITE; } | ||||||
|         bool is_executable() const { return flags() & PF_X; } |         bool is_executable() const { return flags() & PF_X; } | ||||||
| 
 | 
 | ||||||
|  | @ -134,7 +134,7 @@ private: | ||||||
|     const char* section_header_table_string(unsigned offset) const; |     const char* section_header_table_string(unsigned offset) const; | ||||||
|     const char* section_index_to_string(unsigned index); |     const char* section_index_to_string(unsigned index); | ||||||
| 
 | 
 | ||||||
|     const byte* m_buffer { nullptr }; |     const u8* m_buffer { nullptr }; | ||||||
|     bool m_valid { false }; |     bool m_valid { false }; | ||||||
|     unsigned m_symbol_table_section_index { 0 }; |     unsigned m_symbol_table_section_index { 0 }; | ||||||
|     unsigned m_string_table_section_index { 0 }; |     unsigned m_string_table_section_index { 0 }; | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
| 
 | 
 | ||||||
| //#define ELFLOADER_DEBUG
 | //#define ELFLOADER_DEBUG
 | ||||||
| 
 | 
 | ||||||
| ELFLoader::ELFLoader(const byte* buffer) | ELFLoader::ELFLoader(const u8* buffer) | ||||||
|     : m_image(buffer) |     : m_image(buffer) | ||||||
| { | { | ||||||
| } | } | ||||||
|  | @ -81,7 +81,7 @@ char* ELFLoader::symbol_ptr(const char* name) | ||||||
|     return found_ptr; |     return found_ptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| String ELFLoader::symbolicate(dword address) const | String ELFLoader::symbolicate(u32 address) const | ||||||
| { | { | ||||||
|     SortedSymbol* sorted_symbols = nullptr; |     SortedSymbol* sorted_symbols = nullptr; | ||||||
| #ifdef KERNEL | #ifdef KERNEL | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ class Region; | ||||||
| 
 | 
 | ||||||
| class ELFLoader { | class ELFLoader { | ||||||
| public: | public: | ||||||
|     explicit ELFLoader(const byte*); |     explicit ELFLoader(const u8*); | ||||||
|     ~ELFLoader(); |     ~ELFLoader(); | ||||||
| 
 | 
 | ||||||
|     bool load(); |     bool load(); | ||||||
|  | @ -26,7 +26,7 @@ public: | ||||||
| 
 | 
 | ||||||
|     bool has_symbols() const { return m_image.symbol_count(); } |     bool has_symbols() const { return m_image.symbol_count(); } | ||||||
| 
 | 
 | ||||||
|     String symbolicate(dword address) const; |     String symbolicate(u32 address) const; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     bool layout(); |     bool layout(); | ||||||
|  | @ -49,7 +49,7 @@ private: | ||||||
|     ELFImage m_image; |     ELFImage m_image; | ||||||
| 
 | 
 | ||||||
|     struct SortedSymbol { |     struct SortedSymbol { | ||||||
|         dword address; |         u32 address; | ||||||
|         const char* name; |         const char* name; | ||||||
|     }; |     }; | ||||||
| #ifdef KERNEL | #ifdef KERNEL | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| #include "Types.h" | #include "Types.h" | ||||||
| 
 | 
 | ||||||
| inline unsigned int_hash(dword key) | inline unsigned int_hash(u32 key) | ||||||
| { | { | ||||||
|     key += ~(key << 15); |     key += ~(key << 15); | ||||||
|     key ^= (key >> 10); |     key ^= (key >> 10); | ||||||
|  | @ -13,7 +13,7 @@ inline unsigned int_hash(dword key) | ||||||
|     return key; |     return key; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline unsigned pair_int_hash(dword key1, dword key2) | inline unsigned pair_int_hash(u32 key1, u32 key2) | ||||||
| { | { | ||||||
|     return int_hash((int_hash(key1) * 209) ^ (int_hash(key2 * 413))); |     return int_hash((int_hash(key1) * 209) ^ (int_hash(key2 * 413))); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -9,26 +9,26 @@ class [[gnu::packed]] IPv4Address | ||||||
| { | { | ||||||
| public: | public: | ||||||
|     IPv4Address() {} |     IPv4Address() {} | ||||||
|     IPv4Address(const byte data[4]) |     IPv4Address(const u8 data[4]) | ||||||
|     { |     { | ||||||
|         m_data[0] = data[0]; |         m_data[0] = data[0]; | ||||||
|         m_data[1] = data[1]; |         m_data[1] = data[1]; | ||||||
|         m_data[2] = data[2]; |         m_data[2] = data[2]; | ||||||
|         m_data[3] = data[3]; |         m_data[3] = data[3]; | ||||||
|     } |     } | ||||||
|     IPv4Address(byte a, byte b, byte c, byte d) |     IPv4Address(u8 a, u8 b, u8 c, u8 d) | ||||||
|     { |     { | ||||||
|         m_data[0] = a; |         m_data[0] = a; | ||||||
|         m_data[1] = b; |         m_data[1] = b; | ||||||
|         m_data[2] = c; |         m_data[2] = c; | ||||||
|         m_data[3] = d; |         m_data[3] = d; | ||||||
|     } |     } | ||||||
|     IPv4Address(NetworkOrdered<dword> address) |     IPv4Address(NetworkOrdered<u32> address) | ||||||
|         : m_data_as_dword(address) |         : m_data_as_u32(address) | ||||||
|     { |     { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     byte operator[](int i) const |     u8 operator[](int i) const | ||||||
|     { |     { | ||||||
|         ASSERT(i >= 0 && i < 4); |         ASSERT(i >= 0 && i < 4); | ||||||
|         return m_data[i]; |         return m_data[i]; | ||||||
|  | @ -39,13 +39,13 @@ public: | ||||||
|         return String::format("%u.%u.%u.%u", m_data[0], m_data[1], m_data[2], m_data[3]); |         return String::format("%u.%u.%u.%u", m_data[0], m_data[1], m_data[2], m_data[3]); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool operator==(const IPv4Address& other) const { return m_data_as_dword == other.m_data_as_dword; } |     bool operator==(const IPv4Address& other) const { return m_data_as_u32 == other.m_data_as_u32; } | ||||||
|     bool operator!=(const IPv4Address& other) const { return m_data_as_dword != other.m_data_as_dword; } |     bool operator!=(const IPv4Address& other) const { return m_data_as_u32 != other.m_data_as_u32; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     union { |     union { | ||||||
|         byte m_data[4]; |         u8 m_data[4]; | ||||||
|         dword m_data_as_dword { 0 }; |         u32 m_data_as_u32 { 0 }; | ||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -117,18 +117,18 @@ public: | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     dword to_dword(dword default_value = 0) const |     u32 to_u32(u32 default_value = 0) const | ||||||
|     { |     { | ||||||
|         if (!is_number()) |         if (!is_number()) | ||||||
|             return default_value; |             return default_value; | ||||||
| #ifdef KERNEL | #ifdef KERNEL | ||||||
|         return (dword)m_value.as_int; |         return (u32)m_value.as_int; | ||||||
| #else | #else | ||||||
|         if (type() == Type::Int) |         if (type() == Type::Int) | ||||||
|             return (dword)m_value.as_int; |             return (u32)m_value.as_int; | ||||||
|         if (type() == Type::UnsignedInt) |         if (type() == Type::UnsignedInt) | ||||||
|             return m_value.as_uint; |             return m_value.as_uint; | ||||||
|         return (dword)m_value.as_double; |         return (u32)m_value.as_double; | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -12,10 +12,10 @@ extern "C" size_t strlen(const char*); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| template<typename PutChFunc, typename T> | template<typename PutChFunc, typename T> | ||||||
| [[gnu::always_inline]] inline int print_hex(PutChFunc putch, char*& bufptr, T number, byte fields) | [[gnu::always_inline]] inline int print_hex(PutChFunc putch, char*& bufptr, T number, u8 fields) | ||||||
| { | { | ||||||
|     int ret = 0; |     int ret = 0; | ||||||
|     byte shr_count = fields * 4; |     u8 shr_count = fields * 4; | ||||||
|     while (shr_count) { |     while (shr_count) { | ||||||
|         shr_count -= 4; |         shr_count -= 4; | ||||||
|         putch(bufptr, printf_hex_digits[(number >> shr_count) & 0x0F]); |         putch(bufptr, printf_hex_digits[(number >> shr_count) & 0x0F]); | ||||||
|  | @ -25,9 +25,9 @@ template<typename PutChFunc, typename T> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template<typename PutChFunc> | template<typename PutChFunc> | ||||||
| [[gnu::always_inline]] inline int print_number(PutChFunc putch, char*& bufptr, dword number, bool leftPad, bool zeroPad, dword fieldWidth) | [[gnu::always_inline]] inline int print_number(PutChFunc putch, char*& bufptr, u32 number, bool leftPad, bool zeroPad, u32 fieldWidth) | ||||||
| { | { | ||||||
|     dword divisor = 1000000000; |     u32 divisor = 1000000000; | ||||||
|     char ch; |     char ch; | ||||||
|     char padding = 1; |     char padding = 1; | ||||||
|     char buf[16]; |     char buf[16]; | ||||||
|  | @ -66,9 +66,9 @@ template<typename PutChFunc> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template<typename PutChFunc> | template<typename PutChFunc> | ||||||
| [[gnu::always_inline]] inline int print_qword(PutChFunc putch, char*& bufptr, qword number, bool leftPad, bool zeroPad, dword fieldWidth) | [[gnu::always_inline]] inline int print_u64(PutChFunc putch, char*& bufptr, u64 number, bool leftPad, bool zeroPad, u32 fieldWidth) | ||||||
| { | { | ||||||
|     qword divisor = 10000000000000000000LLU; |     u64 divisor = 10000000000000000000LLU; | ||||||
|     char ch; |     char ch; | ||||||
|     char padding = 1; |     char padding = 1; | ||||||
|     char buf[16]; |     char buf[16]; | ||||||
|  | @ -107,19 +107,19 @@ template<typename PutChFunc> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template<typename PutChFunc> | template<typename PutChFunc> | ||||||
| [[gnu::always_inline]] inline int print_signed_qword(PutChFunc putch, char*& bufptr, signed_qword number, bool leftPad, bool zeroPad, dword fieldWidth) | [[gnu::always_inline]] inline int print_i64(PutChFunc putch, char*& bufptr, i64 number, bool leftPad, bool zeroPad, u32 fieldWidth) | ||||||
| { | { | ||||||
|     if (number < 0) { |     if (number < 0) { | ||||||
|         putch(bufptr, '-'); |         putch(bufptr, '-'); | ||||||
|         return print_qword(putch, bufptr, 0 - number, leftPad, zeroPad, fieldWidth) + 1; |         return print_u64(putch, bufptr, 0 - number, leftPad, zeroPad, fieldWidth) + 1; | ||||||
|     } |     } | ||||||
|     return print_qword(putch, bufptr, number, leftPad, zeroPad, fieldWidth); |     return print_u64(putch, bufptr, number, leftPad, zeroPad, fieldWidth); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template<typename PutChFunc> | template<typename PutChFunc> | ||||||
| [[gnu::always_inline]] inline int print_octal_number(PutChFunc putch, char*& bufptr, dword number, bool leftPad, bool zeroPad, dword fieldWidth) | [[gnu::always_inline]] inline int print_octal_number(PutChFunc putch, char*& bufptr, u32 number, bool leftPad, bool zeroPad, u32 fieldWidth) | ||||||
| { | { | ||||||
|     dword divisor = 134217728; |     u32 divisor = 134217728; | ||||||
|     char ch; |     char ch; | ||||||
|     char padding = 1; |     char padding = 1; | ||||||
|     char buf[32]; |     char buf[32]; | ||||||
|  | @ -158,7 +158,7 @@ template<typename PutChFunc> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template<typename PutChFunc> | template<typename PutChFunc> | ||||||
| [[gnu::always_inline]] inline int print_string(PutChFunc putch, char*& bufptr, const char* str, bool leftPad, dword fieldWidth) | [[gnu::always_inline]] inline int print_string(PutChFunc putch, char*& bufptr, const char* str, bool leftPad, u32 fieldWidth) | ||||||
| { | { | ||||||
|     size_t len = strlen(str); |     size_t len = strlen(str); | ||||||
|     if (!fieldWidth || fieldWidth < len) |     if (!fieldWidth || fieldWidth < len) | ||||||
|  | @ -178,7 +178,7 @@ template<typename PutChFunc> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template<typename PutChFunc> | template<typename PutChFunc> | ||||||
| [[gnu::always_inline]] inline int print_signed_number(PutChFunc putch, char*& bufptr, int number, bool leftPad, bool zeroPad, dword fieldWidth) | [[gnu::always_inline]] inline int print_signed_number(PutChFunc putch, char*& bufptr, int number, bool leftPad, bool zeroPad, u32 fieldWidth) | ||||||
| { | { | ||||||
|     if (number < 0) { |     if (number < 0) { | ||||||
|         putch(bufptr, '-'); |         putch(bufptr, '-'); | ||||||
|  | @ -248,22 +248,22 @@ template<typename PutChFunc> | ||||||
|                 break; |                 break; | ||||||
| 
 | 
 | ||||||
|             case 'u': |             case 'u': | ||||||
|                 ret += print_number(putch, bufptr, va_arg(ap, dword), left_pad, zeroPad, fieldWidth); |                 ret += print_number(putch, bufptr, va_arg(ap, u32), left_pad, zeroPad, fieldWidth); | ||||||
|                 break; |                 break; | ||||||
| 
 | 
 | ||||||
|             case 'Q': |             case 'Q': | ||||||
|                 ret += print_qword(putch, bufptr, va_arg(ap, qword), left_pad, zeroPad, fieldWidth); |                 ret += print_u64(putch, bufptr, va_arg(ap, u64), left_pad, zeroPad, fieldWidth); | ||||||
|                 break; |                 break; | ||||||
| 
 | 
 | ||||||
|             case 'q': |             case 'q': | ||||||
|                 ret += print_hex(putch, bufptr, va_arg(ap, qword), 16); |                 ret += print_hex(putch, bufptr, va_arg(ap, u64), 16); | ||||||
|                 break; |                 break; | ||||||
| 
 | 
 | ||||||
| #ifndef KERNEL | #ifndef KERNEL | ||||||
|             case 'g': |             case 'g': | ||||||
|             case 'f': |             case 'f': | ||||||
|                 // FIXME: Print as float!
 |                 // FIXME: Print as float!
 | ||||||
|                 ret += print_signed_qword(putch, bufptr, (qword)va_arg(ap, double), left_pad, zeroPad, fieldWidth); |                 ret += print_i64(putch, bufptr, (u64)va_arg(ap, double), left_pad, zeroPad, fieldWidth); | ||||||
|                 break; |                 break; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -272,7 +272,7 @@ template<typename PutChFunc> | ||||||
|                     putch(bufptr, '0'); |                     putch(bufptr, '0'); | ||||||
|                     ++ret; |                     ++ret; | ||||||
|                 } |                 } | ||||||
|                 ret += print_octal_number(putch, bufptr, va_arg(ap, dword), left_pad, zeroPad, fieldWidth); |                 ret += print_octal_number(putch, bufptr, va_arg(ap, u32), left_pad, zeroPad, fieldWidth); | ||||||
|                 break; |                 break; | ||||||
| 
 | 
 | ||||||
|             case 'x': |             case 'x': | ||||||
|  | @ -281,7 +281,7 @@ template<typename PutChFunc> | ||||||
|                     putch(bufptr, 'x'); |                     putch(bufptr, 'x'); | ||||||
|                     ret += 2; |                     ret += 2; | ||||||
|                 } |                 } | ||||||
|                 ret += print_hex(putch, bufptr, va_arg(ap, dword), 8); |                 ret += print_hex(putch, bufptr, va_arg(ap, u32), 8); | ||||||
|                 break; |                 break; | ||||||
| 
 | 
 | ||||||
|             case 'w': |             case 'w': | ||||||
|  | @ -306,7 +306,7 @@ template<typename PutChFunc> | ||||||
|                 putch(bufptr, '0'); |                 putch(bufptr, '0'); | ||||||
|                 putch(bufptr, 'x'); |                 putch(bufptr, 'x'); | ||||||
|                 ret += 2; |                 ret += 2; | ||||||
|                 ret += print_hex(putch, bufptr, va_arg(ap, dword), 8); |                 ret += print_hex(putch, bufptr, va_arg(ap, u32), 8); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|  |  | ||||||
|  | @ -10,11 +10,11 @@ void* mmx_memcpy(void* dest, const void* src, size_t len) | ||||||
| { | { | ||||||
|     ASSERT(len >= 1024); |     ASSERT(len >= 1024); | ||||||
| 
 | 
 | ||||||
|     auto* dest_ptr = (byte*)dest; |     auto* dest_ptr = (u8*)dest; | ||||||
|     auto* src_ptr = (const byte*)src; |     auto* src_ptr = (const u8*)src; | ||||||
| 
 | 
 | ||||||
|     if ((dword)dest_ptr & 7) { |     if ((u32)dest_ptr & 7) { | ||||||
|         dword prologue = 8 - ((dword)dest_ptr & 7); |         u32 prologue = 8 - ((u32)dest_ptr & 7); | ||||||
|         len -= prologue; |         len -= prologue; | ||||||
|         asm volatile( |         asm volatile( | ||||||
|             "rep movsb\n" |             "rep movsb\n" | ||||||
|  | @ -22,7 +22,7 @@ void* mmx_memcpy(void* dest, const void* src, size_t len) | ||||||
|             : "0"(src_ptr), "1"(dest_ptr), "2"(prologue) |             : "0"(src_ptr), "1"(dest_ptr), "2"(prologue) | ||||||
|             : "memory"); |             : "memory"); | ||||||
|     } |     } | ||||||
|     for (dword i = len / 64; i; --i) { |     for (u32 i = len / 64; i; --i) { | ||||||
|         asm volatile( |         asm volatile( | ||||||
|             "movq (%0), %%mm0\n" |             "movq (%0), %%mm0\n" | ||||||
|             "movq 8(%0), %%mm1\n" |             "movq 8(%0), %%mm1\n" | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ | ||||||
| extern "C" void* mmx_memcpy(void* to, const void* from, size_t); | extern "C" void* mmx_memcpy(void* to, const void* from, size_t); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| [[gnu::always_inline]] inline void fast_dword_copy(dword* dest, const dword* src, size_t count) | [[gnu::always_inline]] inline void fast_u32_copy(u32* dest, const u32* src, size_t count) | ||||||
| { | { | ||||||
| #ifndef KERNEL | #ifndef KERNEL | ||||||
|     if (count >= 256) { |     if (count >= 256) { | ||||||
|  | @ -30,7 +30,7 @@ extern "C" void* mmx_memcpy(void* to, const void* from, size_t); | ||||||
|         : "memory"); |         : "memory"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| [[gnu::always_inline]] inline void fast_dword_fill(dword* dest, dword value, size_t count) | [[gnu::always_inline]] inline void fast_u32_fill(u32* dest, u32 value, size_t count) | ||||||
| { | { | ||||||
|     asm volatile( |     asm volatile( | ||||||
|         "rep stosl\n" |         "rep stosl\n" | ||||||
|  | @ -39,7 +39,7 @@ extern "C" void* mmx_memcpy(void* to, const void* from, size_t); | ||||||
|         : "memory"); |         : "memory"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline constexpr dword round_up_to_power_of_two(dword value, dword power_of_two) | inline constexpr u32 round_up_to_power_of_two(u32 value, u32 power_of_two) | ||||||
| { | { | ||||||
|     return ((value - 1) & ~(power_of_two - 1)) + power_of_two; |     return ((value - 1) & ~(power_of_two - 1)) + power_of_two; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -124,7 +124,7 @@ ByteBuffer String::to_byte_buffer() const | ||||||
| { | { | ||||||
|     if (!m_impl) |     if (!m_impl) | ||||||
|         return nullptr; |         return nullptr; | ||||||
|     return ByteBuffer::copy(reinterpret_cast<const byte*>(characters()), length()); |     return ByteBuffer::copy(reinterpret_cast<const u8*>(characters()), length()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int String::to_int(bool& ok) const | int String::to_int(bool& ok) const | ||||||
|  |  | ||||||
|  | @ -66,11 +66,11 @@ private: | ||||||
|     char m_inline_buffer[0]; |     char m_inline_buffer[0]; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| inline constexpr dword string_hash(const char* characters, int length) | inline constexpr u32 string_hash(const char* characters, int length) | ||||||
| { | { | ||||||
|     dword hash = 0; |     u32 hash = 0; | ||||||
|     for (int i = 0; i < length; ++i) { |     for (int i = 0; i < length; ++i) { | ||||||
|         hash += (dword)characters[i]; |         hash += (u32)characters[i]; | ||||||
|         hash += (hash << 10); |         hash += (hash << 10); | ||||||
|         hash ^= (hash >> 6); |         hash ^= (hash >> 6); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -27,9 +27,9 @@ struct Traits<unsigned> : public GenericTraits<unsigned> { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template<> | template<> | ||||||
| struct Traits<word> : public GenericTraits<word> { | struct Traits<u16> : public GenericTraits<u16> { | ||||||
|     static unsigned hash(word u) { return int_hash(u); } |     static unsigned hash(u16 u) { return int_hash(u); } | ||||||
|     static void dump(word u) { kprintf("%u", u); } |     static void dump(u16 u) { kprintf("%u", u); } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template<typename T> | template<typename T> | ||||||
|  |  | ||||||
							
								
								
									
										44
									
								
								AK/Types.h
									
										
									
									
									
								
							
							
						
						
									
										44
									
								
								AK/Types.h
									
										
									
									
									
								
							|  | @ -21,33 +21,23 @@ static_assert(sizeof(i16) == 2); | ||||||
| static_assert(sizeof(i32) == 4); | static_assert(sizeof(i32) == 4); | ||||||
| static_assert(sizeof(i64) == 8); | static_assert(sizeof(i64) == 8); | ||||||
| 
 | 
 | ||||||
| typedef unsigned char byte; |  | ||||||
| typedef unsigned short word; |  | ||||||
| typedef unsigned int dword; |  | ||||||
| typedef unsigned long long int qword; |  | ||||||
| 
 |  | ||||||
| typedef signed char signed_byte; |  | ||||||
| typedef signed short signed_word; |  | ||||||
| typedef signed int signed_dword; |  | ||||||
| typedef signed long long int signed_qword; |  | ||||||
| 
 |  | ||||||
| typedef __SIZE_TYPE__ size_t; | typedef __SIZE_TYPE__ size_t; | ||||||
| typedef signed_dword ssize_t; | typedef i32 ssize_t; | ||||||
| 
 | 
 | ||||||
| static_assert(sizeof(size_t) == sizeof(dword)); | static_assert(sizeof(size_t) == sizeof(u32)); | ||||||
| static_assert(sizeof(ssize_t) == sizeof(signed_dword)); | static_assert(sizeof(ssize_t) == sizeof(i32)); | ||||||
| 
 | 
 | ||||||
| typedef __PTRDIFF_TYPE__ ptrdiff_t; | typedef __PTRDIFF_TYPE__ ptrdiff_t; | ||||||
| 
 | 
 | ||||||
| typedef byte uint8_t; | typedef u8 uint8_t; | ||||||
| typedef word uint16_t; | typedef u16 uint16_t; | ||||||
| typedef dword uint32_t; | typedef u32 uint32_t; | ||||||
| typedef qword uint64_t; | typedef u64 uint64_t; | ||||||
| 
 | 
 | ||||||
| typedef signed_byte int8_t; | typedef i8 int8_t; | ||||||
| typedef signed_word int16_t; | typedef i16 int16_t; | ||||||
| typedef signed_dword int32_t; | typedef i32 int32_t; | ||||||
| typedef signed_qword int64_t; | typedef i64 int64_t; | ||||||
| 
 | 
 | ||||||
| #else | #else | ||||||
| #    include <stdint.h> | #    include <stdint.h> | ||||||
|  | @ -62,16 +52,6 @@ typedef int8_t i8; | ||||||
| typedef int16_t i16; | typedef int16_t i16; | ||||||
| typedef int32_t i32; | typedef int32_t i32; | ||||||
| typedef int64_t i64; | typedef int64_t i64; | ||||||
| 
 |  | ||||||
| typedef uint8_t byte; |  | ||||||
| typedef uint16_t word; |  | ||||||
| typedef uint32_t dword; |  | ||||||
| typedef uint64_t qword; |  | ||||||
| 
 |  | ||||||
| typedef int8_t signed_byte; |  | ||||||
| typedef int16_t signed_word; |  | ||||||
| typedef int32_t signed_dword; |  | ||||||
| typedef int64_t signed_qword; |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| constexpr unsigned KB = 1024; | constexpr unsigned KB = 1024; | ||||||
|  | @ -82,7 +62,7 @@ namespace std { | ||||||
| typedef decltype(nullptr) nullptr_t; | typedef decltype(nullptr) nullptr_t; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static constexpr dword explode_byte(byte b) | static constexpr u32 explode_byte(u8 b) | ||||||
| { | { | ||||||
|     return b << 24 | b << 16 | b << 8 | b; |     return b << 24 | b << 16 | b << 8 | b; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -427,7 +427,7 @@ private: | ||||||
|     int m_size { 0 }; |     int m_size { 0 }; | ||||||
|     int m_capacity { 0 }; |     int m_capacity { 0 }; | ||||||
| 
 | 
 | ||||||
|     alignas(T) byte m_inline_buffer_storage[sizeof(T) * inline_capacity]; |     alignas(T) u8 m_inline_buffer_storage[sizeof(T) * inline_capacity]; | ||||||
|     T* m_outline_buffer { nullptr }; |     T* m_outline_buffer { nullptr }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -91,12 +91,12 @@ FontEditorWidget::FontEditorWidget(const String& path, RefPtr<Font>&& edited_fon | ||||||
|         demo_label_2->update(); |         demo_label_2->update(); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     m_glyph_editor_widget->on_glyph_altered = [this, update_demo](byte glyph) { |     m_glyph_editor_widget->on_glyph_altered = [this, update_demo](u8 glyph) { | ||||||
|         m_glyph_map_widget->update_glyph(glyph); |         m_glyph_map_widget->update_glyph(glyph); | ||||||
|         update_demo(); |         update_demo(); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     m_glyph_map_widget->on_glyph_selected = [this, info_label, width_spinbox](byte glyph) { |     m_glyph_map_widget->on_glyph_selected = [this, info_label, width_spinbox](u8 glyph) { | ||||||
|         m_glyph_editor_widget->set_glyph(glyph); |         m_glyph_editor_widget->set_glyph(glyph); | ||||||
|         width_spinbox->set_value(m_edited_font->glyph_width(m_glyph_map_widget->selected_glyph())); |         width_spinbox->set_value(m_edited_font->glyph_width(m_glyph_map_widget->selected_glyph())); | ||||||
|         info_label->set_text(String::format("0x%b (%c)", glyph, glyph)); |         info_label->set_text(String::format("0x%b (%c)", glyph, glyph)); | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ GlyphEditorWidget::~GlyphEditorWidget() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GlyphEditorWidget::set_glyph(byte glyph) | void GlyphEditorWidget::set_glyph(u8 glyph) | ||||||
| { | { | ||||||
|     if (m_glyph == glyph) |     if (m_glyph == glyph) | ||||||
|         return; |         return; | ||||||
|  |  | ||||||
|  | @ -6,8 +6,8 @@ public: | ||||||
|     GlyphEditorWidget(Font&, GWidget* parent); |     GlyphEditorWidget(Font&, GWidget* parent); | ||||||
|     virtual ~GlyphEditorWidget() override; |     virtual ~GlyphEditorWidget() override; | ||||||
| 
 | 
 | ||||||
|     byte glyph() const { return m_glyph; } |     u8 glyph() const { return m_glyph; } | ||||||
|     void set_glyph(byte); |     void set_glyph(u8); | ||||||
| 
 | 
 | ||||||
|     int preferred_width() const; |     int preferred_width() const; | ||||||
|     int preferred_height() const; |     int preferred_height() const; | ||||||
|  | @ -15,7 +15,7 @@ public: | ||||||
|     Font& font() { return *m_font; } |     Font& font() { return *m_font; } | ||||||
|     const Font& font() const { return *m_font; } |     const Font& font() const { return *m_font; } | ||||||
| 
 | 
 | ||||||
|     Function<void(byte)> on_glyph_altered; |     Function<void(u8)> on_glyph_altered; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     virtual void paint_event(GPaintEvent&) override; |     virtual void paint_event(GPaintEvent&) override; | ||||||
|  | @ -25,6 +25,6 @@ private: | ||||||
|     void draw_at_mouse(const GMouseEvent&); |     void draw_at_mouse(const GMouseEvent&); | ||||||
| 
 | 
 | ||||||
|     RefPtr<Font> m_font; |     RefPtr<Font> m_font; | ||||||
|     byte m_glyph { 0 }; |     u8 m_glyph { 0 }; | ||||||
|     int m_scale { 10 }; |     int m_scale { 10 }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ int GlyphMapWidget::preferred_height() const | ||||||
|     return rows() * (font().glyph_height() + m_vertical_spacing) + 2 + frame_thickness() * 2; |     return rows() * (font().glyph_height() + m_vertical_spacing) + 2 + frame_thickness() * 2; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GlyphMapWidget::set_selected_glyph(byte glyph) | void GlyphMapWidget::set_selected_glyph(u8 glyph) | ||||||
| { | { | ||||||
|     if (m_selected_glyph == glyph) |     if (m_selected_glyph == glyph) | ||||||
|         return; |         return; | ||||||
|  | @ -35,7 +35,7 @@ void GlyphMapWidget::set_selected_glyph(byte glyph) | ||||||
|     update(); |     update(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Rect GlyphMapWidget::get_outer_rect(byte glyph) const | Rect GlyphMapWidget::get_outer_rect(u8 glyph) const | ||||||
| { | { | ||||||
|     int row = glyph / columns(); |     int row = glyph / columns(); | ||||||
|     int column = glyph % columns(); |     int column = glyph % columns(); | ||||||
|  | @ -48,7 +48,7 @@ Rect GlyphMapWidget::get_outer_rect(byte glyph) const | ||||||
|         .translated(frame_thickness(), frame_thickness()); |         .translated(frame_thickness(), frame_thickness()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GlyphMapWidget::update_glyph(byte glyph) | void GlyphMapWidget::update_glyph(u8 glyph) | ||||||
| { | { | ||||||
|     update(get_outer_rect(glyph)); |     update(get_outer_rect(glyph)); | ||||||
| } | } | ||||||
|  | @ -63,7 +63,7 @@ void GlyphMapWidget::paint_event(GPaintEvent& event) | ||||||
|     painter.set_font(font()); |     painter.set_font(font()); | ||||||
|     painter.fill_rect(frame_inner_rect(), Color::White); |     painter.fill_rect(frame_inner_rect(), Color::White); | ||||||
| 
 | 
 | ||||||
|     byte glyph = 0; |     u8 glyph = 0; | ||||||
| 
 | 
 | ||||||
|     for (int row = 0; row < rows(); ++row) { |     for (int row = 0; row < rows(); ++row) { | ||||||
|         for (int column = 0; column < columns(); ++column, ++glyph) { |         for (int column = 0; column < columns(); ++column, ++glyph) { | ||||||
|  |  | ||||||
|  | @ -8,8 +8,8 @@ public: | ||||||
|     GlyphMapWidget(Font&, GWidget* parent); |     GlyphMapWidget(Font&, GWidget* parent); | ||||||
|     virtual ~GlyphMapWidget() override; |     virtual ~GlyphMapWidget() override; | ||||||
| 
 | 
 | ||||||
|     byte selected_glyph() const { return m_selected_glyph; } |     u8 selected_glyph() const { return m_selected_glyph; } | ||||||
|     void set_selected_glyph(byte); |     void set_selected_glyph(u8); | ||||||
| 
 | 
 | ||||||
|     int rows() const { return m_rows; } |     int rows() const { return m_rows; } | ||||||
|     int columns() const { return 256 / m_rows; } |     int columns() const { return 256 / m_rows; } | ||||||
|  | @ -20,19 +20,19 @@ public: | ||||||
|     Font& font() { return *m_font; } |     Font& font() { return *m_font; } | ||||||
|     const Font& font() const { return *m_font; } |     const Font& font() const { return *m_font; } | ||||||
| 
 | 
 | ||||||
|     void update_glyph(byte); |     void update_glyph(u8); | ||||||
| 
 | 
 | ||||||
|     Function<void(byte)> on_glyph_selected; |     Function<void(u8)> on_glyph_selected; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     virtual void paint_event(GPaintEvent&) override; |     virtual void paint_event(GPaintEvent&) override; | ||||||
|     virtual void mousedown_event(GMouseEvent&) override; |     virtual void mousedown_event(GMouseEvent&) override; | ||||||
| 
 | 
 | ||||||
|     Rect get_outer_rect(byte glyph) const; |     Rect get_outer_rect(u8 glyph) const; | ||||||
| 
 | 
 | ||||||
|     RefPtr<Font> m_font; |     RefPtr<Font> m_font; | ||||||
|     int m_rows { 8 }; |     int m_rows { 8 }; | ||||||
|     int m_horizontal_spacing { 2 }; |     int m_horizontal_spacing { 2 }; | ||||||
|     int m_vertical_spacing { 2 }; |     int m_vertical_spacing { 2 }; | ||||||
|     byte m_selected_glyph { 0 }; |     u8 m_selected_glyph { 0 }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -64,16 +64,16 @@ void MemoryStatsWidget::refresh() | ||||||
|     auto file_contents = m_proc_memstat.read_all(); |     auto file_contents = m_proc_memstat.read_all(); | ||||||
|     auto json = JsonValue::from_string(file_contents).as_object(); |     auto json = JsonValue::from_string(file_contents).as_object(); | ||||||
| 
 | 
 | ||||||
|     unsigned kmalloc_eternal_allocated = json.get("kmalloc_eternal_allocated").to_dword(); |     unsigned kmalloc_eternal_allocated = json.get("kmalloc_eternal_allocated").to_u32(); | ||||||
|     (void)kmalloc_eternal_allocated; |     (void)kmalloc_eternal_allocated; | ||||||
|     unsigned kmalloc_allocated = json.get("kmalloc_allocated").to_dword(); |     unsigned kmalloc_allocated = json.get("kmalloc_allocated").to_u32(); | ||||||
|     unsigned kmalloc_available = json.get("kmalloc_available").to_dword(); |     unsigned kmalloc_available = json.get("kmalloc_available").to_u32(); | ||||||
|     unsigned user_physical_allocated = json.get("user_physical_allocated").to_dword(); |     unsigned user_physical_allocated = json.get("user_physical_allocated").to_u32(); | ||||||
|     unsigned user_physical_available = json.get("user_physical_available").to_dword(); |     unsigned user_physical_available = json.get("user_physical_available").to_u32(); | ||||||
|     unsigned super_physical_alloc = json.get("super_physical_allocated").to_dword(); |     unsigned super_physical_alloc = json.get("super_physical_allocated").to_u32(); | ||||||
|     unsigned super_physical_free = json.get("super_physical_available").to_dword(); |     unsigned super_physical_free = json.get("super_physical_available").to_u32(); | ||||||
|     unsigned kmalloc_call_count = json.get("kmalloc_call_count").to_dword(); |     unsigned kmalloc_call_count = json.get("kmalloc_call_count").to_u32(); | ||||||
|     unsigned kfree_call_count = json.get("kfree_call_count").to_dword(); |     unsigned kfree_call_count = json.get("kfree_call_count").to_u32(); | ||||||
| 
 | 
 | ||||||
|     size_t kmalloc_sum_available = kmalloc_allocated + kmalloc_available; |     size_t kmalloc_sum_available = kmalloc_allocated + kmalloc_available; | ||||||
|     size_t user_pages_available = user_physical_allocated + user_physical_available; |     size_t user_pages_available = user_physical_allocated + user_physical_available; | ||||||
|  |  | ||||||
|  | @ -198,12 +198,12 @@ void ProcessModel::update() | ||||||
|     auto json = JsonValue::from_string({ file_contents.data(), file_contents.size() }); |     auto json = JsonValue::from_string({ file_contents.data(), file_contents.size() }); | ||||||
|     json.as_array().for_each([&](auto& value) { |     json.as_array().for_each([&](auto& value) { | ||||||
|         const JsonObject& process_object = value.as_object(); |         const JsonObject& process_object = value.as_object(); | ||||||
|         pid_t pid = process_object.get("pid").to_dword(); |         pid_t pid = process_object.get("pid").to_u32(); | ||||||
|         unsigned nsched = process_object.get("times_scheduled").to_dword(); |         unsigned nsched = process_object.get("times_scheduled").to_u32(); | ||||||
|         ProcessState state; |         ProcessState state; | ||||||
|         state.pid = pid; |         state.pid = pid; | ||||||
|         state.nsched = nsched; |         state.nsched = nsched; | ||||||
|         unsigned uid = process_object.get("uid").to_dword(); |         unsigned uid = process_object.get("uid").to_u32(); | ||||||
|         { |         { | ||||||
|             auto it = m_usernames.find((uid_t)uid); |             auto it = m_usernames.find((uid_t)uid); | ||||||
|             if (it != m_usernames.end()) |             if (it != m_usernames.end()) | ||||||
|  | @ -212,11 +212,11 @@ void ProcessModel::update() | ||||||
|                 state.user = String::number(uid); |                 state.user = String::number(uid); | ||||||
|         } |         } | ||||||
|         state.priority = process_object.get("priority").to_string(); |         state.priority = process_object.get("priority").to_string(); | ||||||
|         state.syscalls = process_object.get("syscall_count").to_dword(); |         state.syscalls = process_object.get("syscall_count").to_u32(); | ||||||
|         state.state = process_object.get("state").to_string(); |         state.state = process_object.get("state").to_string(); | ||||||
|         state.name = process_object.get("name").to_string(); |         state.name = process_object.get("name").to_string(); | ||||||
|         state.virtual_size = process_object.get("amount_virtual").to_dword(); |         state.virtual_size = process_object.get("amount_virtual").to_u32(); | ||||||
|         state.physical_size = process_object.get("amount_resident").to_dword(); |         state.physical_size = process_object.get("amount_resident").to_u32(); | ||||||
|         sum_nsched += nsched; |         sum_nsched += nsched; | ||||||
|         { |         { | ||||||
|             auto it = m_processes.find(pid); |             auto it = m_processes.find(pid); | ||||||
|  | @ -240,7 +240,7 @@ void ProcessModel::update() | ||||||
|             continue; |             continue; | ||||||
|         } |         } | ||||||
|         auto& process = *it.value; |         auto& process = *it.value; | ||||||
|         dword nsched_diff = process.current_state.nsched - process.previous_state.nsched; |         u32 nsched_diff = process.current_state.nsched - process.previous_state.nsched; | ||||||
|         process.current_state.cpu_percent = ((float)nsched_diff * 100) / (float)(sum_nsched - last_sum_nsched); |         process.current_state.cpu_percent = ((float)nsched_diff * 100) / (float)(sum_nsched - last_sum_nsched); | ||||||
|         if (it.key != 0) { |         if (it.key != 0) { | ||||||
|             total_cpu_percent += process.current_state.cpu_percent; |             total_cpu_percent += process.current_state.cpu_percent; | ||||||
|  |  | ||||||
|  | @ -17,8 +17,8 @@ | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| //#define TERMINAL_DEBUG
 | //#define TERMINAL_DEBUG
 | ||||||
| byte Terminal::Attribute::default_foreground_color = 7; | u8 Terminal::Attribute::default_foreground_color = 7; | ||||||
| byte Terminal::Attribute::default_background_color = 0; | u8 Terminal::Attribute::default_background_color = 0; | ||||||
| 
 | 
 | ||||||
| Terminal::Terminal(int ptm_fd, RefPtr<CConfigFile> config) | Terminal::Terminal(int ptm_fd, RefPtr<CConfigFile> config) | ||||||
|     : m_ptm_fd(ptm_fd) |     : m_ptm_fd(ptm_fd) | ||||||
|  | @ -45,7 +45,7 @@ Terminal::Terminal(int ptm_fd, RefPtr<CConfigFile> config) | ||||||
|         set_font(Font::load_from_file(font_entry)); |         set_font(Font::load_from_file(font_entry)); | ||||||
| 
 | 
 | ||||||
|     m_notifier.on_ready_to_read = [this] { |     m_notifier.on_ready_to_read = [this] { | ||||||
|         byte buffer[BUFSIZ]; |         u8 buffer[BUFSIZ]; | ||||||
|         ssize_t nread = read(m_ptm_fd, buffer, sizeof(buffer)); |         ssize_t nread = read(m_ptm_fd, buffer, sizeof(buffer)); | ||||||
|         if (nread < 0) { |         if (nread < 0) { | ||||||
|             dbgprintf("Terminal read error: %s\n", strerror(errno)); |             dbgprintf("Terminal read error: %s\n", strerror(errno)); | ||||||
|  | @ -69,7 +69,7 @@ Terminal::Terminal(int ptm_fd, RefPtr<CConfigFile> config) | ||||||
|         m_config->read_num_entry("Window", "Height", 25)); |         m_config->read_num_entry("Window", "Height", 25)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Terminal::Line::Line(word length) | Terminal::Line::Line(u16 length) | ||||||
| { | { | ||||||
|     set_length(length); |     set_length(length); | ||||||
| } | } | ||||||
|  | @ -80,11 +80,11 @@ Terminal::Line::~Line() | ||||||
|     delete[] attributes; |     delete[] attributes; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Terminal::Line::set_length(word new_length) | void Terminal::Line::set_length(u16 new_length) | ||||||
| { | { | ||||||
|     if (m_length == new_length) |     if (m_length == new_length) | ||||||
|         return; |         return; | ||||||
|     auto* new_characters = new byte[new_length]; |     auto* new_characters = new u8[new_length]; | ||||||
|     auto* new_attributes = new Attribute[new_length]; |     auto* new_attributes = new Attribute[new_length]; | ||||||
|     memset(new_characters, ' ', new_length); |     memset(new_characters, ' ', new_length); | ||||||
|     delete[] characters; |     delete[] characters; | ||||||
|  | @ -98,7 +98,7 @@ void Terminal::Line::clear(Attribute attribute) | ||||||
| { | { | ||||||
|     if (dirty) { |     if (dirty) { | ||||||
|         memset(characters, ' ', m_length); |         memset(characters, ' ', m_length); | ||||||
|         for (word i = 0; i < m_length; ++i) |         for (u16 i = 0; i < m_length; ++i) | ||||||
|             attributes[i] = attribute; |             attributes[i] = attribute; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  | @ -125,17 +125,17 @@ void Terminal::clear() | ||||||
|     set_cursor(0, 0); |     set_cursor(0, 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline bool is_valid_parameter_character(byte ch) | inline bool is_valid_parameter_character(u8 ch) | ||||||
| { | { | ||||||
|     return ch >= 0x30 && ch <= 0x3f; |     return ch >= 0x30 && ch <= 0x3f; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline bool is_valid_intermediate_character(byte ch) | inline bool is_valid_intermediate_character(u8 ch) | ||||||
| { | { | ||||||
|     return ch >= 0x20 && ch <= 0x2f; |     return ch >= 0x20 && ch <= 0x2f; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline bool is_valid_final_character(byte ch) | inline bool is_valid_final_character(u8 ch) | ||||||
| { | { | ||||||
|     return ch >= 0x40 && ch <= 0x7e; |     return ch >= 0x40 && ch <= 0x7e; | ||||||
| } | } | ||||||
|  | @ -481,7 +481,7 @@ void Terminal::escape$S(const ParamVector& params) | ||||||
|     if (params.size() >= 1) |     if (params.size() >= 1) | ||||||
|         count = params[0]; |         count = params[0]; | ||||||
| 
 | 
 | ||||||
|     for (word i = 0; i < count; i++) |     for (u16 i = 0; i < count; i++) | ||||||
|         scroll_up(); |         scroll_up(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -491,7 +491,7 @@ void Terminal::escape$T(const ParamVector& params) | ||||||
|     if (params.size() >= 1) |     if (params.size() >= 1) | ||||||
|         count = params[0]; |         count = params[0]; | ||||||
| 
 | 
 | ||||||
|     for (word i = 0; i < count; i++) |     for (u16 i = 0; i < count; i++) | ||||||
|         scroll_down(); |         scroll_down(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -577,7 +577,7 @@ void Terminal::execute_xterm_command() | ||||||
|     m_xterm_param2.clear_with_capacity(); |     m_xterm_param2.clear_with_capacity(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Terminal::execute_escape_sequence(byte final) | void Terminal::execute_escape_sequence(u8 final) | ||||||
| { | { | ||||||
|     bool question_param = false; |     bool question_param = false; | ||||||
|     m_final = final; |     m_final = final; | ||||||
|  | @ -701,7 +701,7 @@ void Terminal::execute_escape_sequence(byte final) | ||||||
| 
 | 
 | ||||||
| void Terminal::newline() | void Terminal::newline() | ||||||
| { | { | ||||||
|     word new_row = m_cursor_row; |     u16 new_row = m_cursor_row; | ||||||
|     if (m_cursor_row == m_scroll_region_bottom) { |     if (m_cursor_row == m_scroll_region_bottom) { | ||||||
|         scroll_up(); |         scroll_up(); | ||||||
|     } else { |     } else { | ||||||
|  | @ -744,7 +744,7 @@ void Terminal::set_cursor(unsigned a_row, unsigned a_column) | ||||||
|     invalidate_cursor(); |     invalidate_cursor(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Terminal::put_character_at(unsigned row, unsigned column, byte ch) | void Terminal::put_character_at(unsigned row, unsigned column, u8 ch) | ||||||
| { | { | ||||||
|     ASSERT(row < rows()); |     ASSERT(row < rows()); | ||||||
|     ASSERT(column < columns()); |     ASSERT(column < columns()); | ||||||
|  | @ -757,7 +757,7 @@ void Terminal::put_character_at(unsigned row, unsigned column, byte ch) | ||||||
|     m_last_char = ch; |     m_last_char = ch; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Terminal::on_char(byte ch) | void Terminal::on_char(u8 ch) | ||||||
| { | { | ||||||
| #ifdef TERMINAL_DEBUG | #ifdef TERMINAL_DEBUG | ||||||
|     dbgprintf("Terminal::on_char: %b (%c), fg=%u, bg=%u\n", ch, ch, m_current_attribute.foreground_color, m_current_attribute.background_color); |     dbgprintf("Terminal::on_char: %b (%c), fg=%u, bg=%u\n", ch, ch, m_current_attribute.foreground_color, m_current_attribute.background_color); | ||||||
|  | @ -913,7 +913,7 @@ void Terminal::unimplemented_xterm_escape() | ||||||
|     inject_string(message); |     inject_string(message); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Terminal::set_size(word columns, word rows) | void Terminal::set_size(u16 columns, u16 rows) | ||||||
| { | { | ||||||
|     if (columns == m_columns && rows == m_rows) |     if (columns == m_columns && rows == m_rows) | ||||||
|         return; |         return; | ||||||
|  | @ -965,14 +965,14 @@ void Terminal::set_size(word columns, word rows) | ||||||
|     ASSERT(rc == 0); |     ASSERT(rc == 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Rect Terminal::glyph_rect(word row, word column) | Rect Terminal::glyph_rect(u16 row, u16 column) | ||||||
| { | { | ||||||
|     int y = row * m_line_height; |     int y = row * m_line_height; | ||||||
|     int x = column * font().glyph_width('x'); |     int x = column * font().glyph_width('x'); | ||||||
|     return { x + frame_thickness() + m_inset, y + frame_thickness() + m_inset, font().glyph_width('x'), font().glyph_height() }; |     return { x + frame_thickness() + m_inset, y + frame_thickness() + m_inset, font().glyph_width('x'), font().glyph_height() }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Rect Terminal::row_rect(word row) | Rect Terminal::row_rect(u16 row) | ||||||
| { | { | ||||||
|     int y = row * m_line_height; |     int y = row * m_line_height; | ||||||
|     Rect rect = { frame_thickness() + m_inset, y + frame_thickness() + m_inset, font().glyph_width('x') * m_columns, font().glyph_height() }; |     Rect rect = { frame_thickness() + m_inset, y + frame_thickness() + m_inset, font().glyph_width('x') * m_columns, font().glyph_height() }; | ||||||
|  | @ -1083,14 +1083,14 @@ void Terminal::paint_event(GPaintEvent& event) | ||||||
|         painter.fill_rect(frame_inner_rect(), Color(Color::Black).with_alpha(m_opacity)); |         painter.fill_rect(frame_inner_rect(), Color(Color::Black).with_alpha(m_opacity)); | ||||||
|     invalidate_cursor(); |     invalidate_cursor(); | ||||||
| 
 | 
 | ||||||
|     for (word row = 0; row < m_rows; ++row) { |     for (u16 row = 0; row < m_rows; ++row) { | ||||||
|         auto& line = this->line(row); |         auto& line = this->line(row); | ||||||
|         bool has_only_one_background_color = line.has_only_one_background_color(); |         bool has_only_one_background_color = line.has_only_one_background_color(); | ||||||
|         if (m_visual_beep_timer.is_active()) |         if (m_visual_beep_timer.is_active()) | ||||||
|             painter.fill_rect(row_rect(row), Color::Red); |             painter.fill_rect(row_rect(row), Color::Red); | ||||||
|         else if (has_only_one_background_color) |         else if (has_only_one_background_color) | ||||||
|             painter.fill_rect(row_rect(row), lookup_color(line.attributes[0].background_color).with_alpha(m_opacity)); |             painter.fill_rect(row_rect(row), lookup_color(line.attributes[0].background_color).with_alpha(m_opacity)); | ||||||
|         for (word column = 0; column < m_columns; ++column) { |         for (u16 column = 0; column < m_columns; ++column) { | ||||||
|             char ch = line.characters[column]; |             char ch = line.characters[column]; | ||||||
|             bool should_reverse_fill_for_cursor_or_selection = (m_cursor_blink_state && m_in_active_window && row == m_cursor_row && column == m_cursor_column) |             bool should_reverse_fill_for_cursor_or_selection = (m_cursor_blink_state && m_in_active_window && row == m_cursor_row && column == m_cursor_column) | ||||||
|                 || selection_contains({ row, column }); |                 || selection_contains({ row, column }); | ||||||
|  | @ -1167,7 +1167,7 @@ void Terminal::update_cursor() | ||||||
|     flush_dirty_lines(); |     flush_dirty_lines(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Terminal::set_opacity(byte new_opacity) | void Terminal::set_opacity(u8 new_opacity) | ||||||
| { | { | ||||||
|     if (m_opacity == new_opacity) |     if (m_opacity == new_opacity) | ||||||
|         return; |         return; | ||||||
|  |  | ||||||
|  | @ -61,14 +61,14 @@ public: | ||||||
|     virtual ~Terminal() override; |     virtual ~Terminal() override; | ||||||
| 
 | 
 | ||||||
|     void create_window(); |     void create_window(); | ||||||
|     void on_char(byte); |     void on_char(u8); | ||||||
| 
 | 
 | ||||||
|     void flush_dirty_lines(); |     void flush_dirty_lines(); | ||||||
|     void force_repaint(); |     void force_repaint(); | ||||||
| 
 | 
 | ||||||
|     void apply_size_increments_to_window(GWindow&); |     void apply_size_increments_to_window(GWindow&); | ||||||
| 
 | 
 | ||||||
|     void set_opacity(byte); |     void set_opacity(u8); | ||||||
|     float opacity() { return m_opacity; }; |     float opacity() { return m_opacity; }; | ||||||
|     bool should_beep() { return m_should_beep; } |     bool should_beep() { return m_should_beep; } | ||||||
|     void set_should_beep(bool sb) { m_should_beep = sb; }; |     void set_should_beep(bool sb) { m_should_beep = sb; }; | ||||||
|  | @ -98,7 +98,7 @@ private: | ||||||
|     void scroll_down(); |     void scroll_down(); | ||||||
|     void newline(); |     void newline(); | ||||||
|     void set_cursor(unsigned row, unsigned column); |     void set_cursor(unsigned row, unsigned column); | ||||||
|     void put_character_at(unsigned row, unsigned column, byte ch); |     void put_character_at(unsigned row, unsigned column, u8 ch); | ||||||
|     void invalidate_cursor(); |     void invalidate_cursor(); | ||||||
|     void set_window_title(const String&); |     void set_window_title(const String&); | ||||||
| 
 | 
 | ||||||
|  | @ -131,18 +131,18 @@ private: | ||||||
| 
 | 
 | ||||||
|     void clear(); |     void clear(); | ||||||
| 
 | 
 | ||||||
|     void set_size(word columns, word rows); |     void set_size(u16 columns, u16 rows); | ||||||
|     word columns() const { return m_columns; } |     u16 columns() const { return m_columns; } | ||||||
|     word rows() const { return m_rows; } |     u16 rows() const { return m_rows; } | ||||||
|     Rect glyph_rect(word row, word column); |     Rect glyph_rect(u16 row, u16 column); | ||||||
|     Rect row_rect(word row); |     Rect row_rect(u16 row); | ||||||
|     void update_cursor(); |     void update_cursor(); | ||||||
| 
 | 
 | ||||||
|     struct Attribute { |     struct Attribute { | ||||||
|         Attribute() { reset(); } |         Attribute() { reset(); } | ||||||
| 
 | 
 | ||||||
|         static byte default_foreground_color; |         static u8 default_foreground_color; | ||||||
|         static byte default_background_color; |         static u8 default_background_color; | ||||||
| 
 | 
 | ||||||
|         void reset() |         void reset() | ||||||
|         { |         { | ||||||
|  | @ -150,8 +150,8 @@ private: | ||||||
|             background_color = default_background_color; |             background_color = default_background_color; | ||||||
|             flags = Flags::NoAttributes; |             flags = Flags::NoAttributes; | ||||||
|         } |         } | ||||||
|         byte foreground_color; |         u8 foreground_color; | ||||||
|         byte background_color; |         u8 background_color; | ||||||
| 
 | 
 | ||||||
|         enum Flags { |         enum Flags { | ||||||
|             NoAttributes = 0x00, |             NoAttributes = 0x00, | ||||||
|  | @ -180,15 +180,15 @@ private: | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     struct Line { |     struct Line { | ||||||
|         explicit Line(word columns); |         explicit Line(u16 columns); | ||||||
|         ~Line(); |         ~Line(); | ||||||
|         void clear(Attribute); |         void clear(Attribute); | ||||||
|         bool has_only_one_background_color() const; |         bool has_only_one_background_color() const; | ||||||
|         void set_length(word); |         void set_length(u16); | ||||||
|         byte* characters { nullptr }; |         u8* characters { nullptr }; | ||||||
|         Attribute* attributes { nullptr }; |         Attribute* attributes { nullptr }; | ||||||
|         bool dirty { false }; |         bool dirty { false }; | ||||||
|         word m_length { 0 }; |         u16 m_length { 0 }; | ||||||
|     }; |     }; | ||||||
|     Line& line(size_t index) |     Line& line(size_t index) | ||||||
|     { |     { | ||||||
|  | @ -209,20 +209,20 @@ private: | ||||||
|     int m_scroll_region_top { 0 }; |     int m_scroll_region_top { 0 }; | ||||||
|     int m_scroll_region_bottom { 0 }; |     int m_scroll_region_bottom { 0 }; | ||||||
| 
 | 
 | ||||||
|     word m_columns { 0 }; |     u16 m_columns { 0 }; | ||||||
|     word m_rows { 0 }; |     u16 m_rows { 0 }; | ||||||
| 
 | 
 | ||||||
|     byte m_cursor_row { 0 }; |     u8 m_cursor_row { 0 }; | ||||||
|     byte m_cursor_column { 0 }; |     u8 m_cursor_column { 0 }; | ||||||
|     byte m_saved_cursor_row { 0 }; |     u8 m_saved_cursor_row { 0 }; | ||||||
|     byte m_saved_cursor_column { 0 }; |     u8 m_saved_cursor_column { 0 }; | ||||||
|     bool m_stomp { false }; |     bool m_stomp { false }; | ||||||
| 
 | 
 | ||||||
|     bool m_should_beep { false }; |     bool m_should_beep { false }; | ||||||
| 
 | 
 | ||||||
|     Attribute m_current_attribute; |     Attribute m_current_attribute; | ||||||
| 
 | 
 | ||||||
|     void execute_escape_sequence(byte final); |     void execute_escape_sequence(u8 final); | ||||||
|     void execute_xterm_command(); |     void execute_xterm_command(); | ||||||
| 
 | 
 | ||||||
|     enum EscapeState { |     enum EscapeState { | ||||||
|  | @ -237,12 +237,12 @@ private: | ||||||
|         ExpectXtermFinal, |         ExpectXtermFinal, | ||||||
|     }; |     }; | ||||||
|     EscapeState m_escape_state { Normal }; |     EscapeState m_escape_state { Normal }; | ||||||
|     Vector<byte> m_parameters; |     Vector<u8> m_parameters; | ||||||
|     Vector<byte> m_intermediates; |     Vector<u8> m_intermediates; | ||||||
|     Vector<byte> m_xterm_param1; |     Vector<u8> m_xterm_param1; | ||||||
|     Vector<byte> m_xterm_param2; |     Vector<u8> m_xterm_param2; | ||||||
|     Vector<bool> m_horizontal_tabs; |     Vector<bool> m_horizontal_tabs; | ||||||
|     byte m_final { 0 }; |     u8 m_final { 0 }; | ||||||
|     bool m_belling { false }; |     bool m_belling { false }; | ||||||
| 
 | 
 | ||||||
|     int m_pixel_width { 0 }; |     int m_pixel_width { 0 }; | ||||||
|  | @ -261,7 +261,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     CNotifier m_notifier; |     CNotifier m_notifier; | ||||||
| 
 | 
 | ||||||
|     byte m_opacity { 255 }; |     u8 m_opacity { 255 }; | ||||||
|     bool m_needs_background_fill { true }; |     bool m_needs_background_fill { true }; | ||||||
|     bool m_cursor_blink_state { true }; |     bool m_cursor_blink_state { true }; | ||||||
| 
 | 
 | ||||||
|  | @ -271,5 +271,5 @@ private: | ||||||
|     CTimer m_visual_beep_timer; |     CTimer m_visual_beep_timer; | ||||||
|     RefPtr<CConfigFile> m_config; |     RefPtr<CConfigFile> m_config; | ||||||
| 
 | 
 | ||||||
|     byte m_last_char { 0 }; |     u8 m_last_char { 0 }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -146,7 +146,7 @@ void Fire::timer_event(CTimerEvent&) | ||||||
|             int rnd = my_rand() % 3; |             int rnd = my_rand() % 3; | ||||||
| 
 | 
 | ||||||
|             /* Calculate new pixel value, don't go below 0 */ |             /* Calculate new pixel value, don't go below 0 */ | ||||||
|             byte nv = bitmap->bits(py)[px]; |             u8 nv = bitmap->bits(py)[px]; | ||||||
|             if (nv > 0) |             if (nv > 0) | ||||||
|                 nv -= (rnd & 1); |                 nv -= (rnd & 1); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
| 
 | 
 | ||||||
| struct [[gnu::packed]] DescriptorTablePointer | struct [[gnu::packed]] DescriptorTablePointer | ||||||
| { | { | ||||||
|     word limit; |     u16 limit; | ||||||
|     void* address; |     void* address; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -24,18 +24,18 @@ static Descriptor s_gdt[256]; | ||||||
| 
 | 
 | ||||||
| static IRQHandler* s_irq_handler[16]; | static IRQHandler* s_irq_handler[16]; | ||||||
| 
 | 
 | ||||||
| static Vector<word>* s_gdt_freelist; | static Vector<u16>* s_gdt_freelist; | ||||||
| 
 | 
 | ||||||
| static word s_gdt_length; | static u16 s_gdt_length; | ||||||
| 
 | 
 | ||||||
| word gdt_alloc_entry() | u16 gdt_alloc_entry() | ||||||
| { | { | ||||||
|     ASSERT(s_gdt_freelist); |     ASSERT(s_gdt_freelist); | ||||||
|     ASSERT(!s_gdt_freelist->is_empty()); |     ASSERT(!s_gdt_freelist->is_empty()); | ||||||
|     return s_gdt_freelist->take_last(); |     return s_gdt_freelist->take_last(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void gdt_free_entry(word entry) | void gdt_free_entry(u16 entry) | ||||||
| { | { | ||||||
|     s_gdt_freelist->append(entry); |     s_gdt_freelist->append(entry); | ||||||
| } | } | ||||||
|  | @ -123,8 +123,8 @@ asm( | ||||||
| template<typename DumpType> | template<typename DumpType> | ||||||
| static void dump(const DumpType& regs) | static void dump(const DumpType& regs) | ||||||
| { | { | ||||||
|     word ss; |     u16 ss; | ||||||
|     dword esp; |     u32 esp; | ||||||
|     if (!current || current->process().is_ring0()) { |     if (!current || current->process().is_ring0()) { | ||||||
|         ss = regs.ds; |         ss = regs.ds; | ||||||
|         esp = regs.esp; |         esp = regs.esp; | ||||||
|  | @ -144,7 +144,7 @@ static void dump(const DumpType& regs) | ||||||
|     kprintf("ebp=%x esp=%x esi=%x edi=%x\n", regs.ebp, esp, regs.esi, regs.edi); |     kprintf("ebp=%x esp=%x esi=%x edi=%x\n", regs.ebp, esp, regs.esi, regs.edi); | ||||||
| 
 | 
 | ||||||
|     if (current && current->process().validate_read((void*)regs.eip, 8)) { |     if (current && current->process().validate_read((void*)regs.eip, 8)) { | ||||||
|         byte* codeptr = (byte*)regs.eip; |         u8* codeptr = (u8*)regs.eip; | ||||||
|         kprintf("code: %b %b %b %b %b %b %b %b\n", |         kprintf("code: %b %b %b %b %b %b %b %b\n", | ||||||
|             codeptr[0], |             codeptr[0], | ||||||
|             codeptr[1], |             codeptr[1], | ||||||
|  | @ -236,11 +236,11 @@ void exception_14_handler(RegisterDumpWithExceptionCode& regs) | ||||||
| { | { | ||||||
|     ASSERT(current); |     ASSERT(current); | ||||||
| 
 | 
 | ||||||
|     dword fault_address; |     u32 fault_address; | ||||||
|     asm("movl %%cr2, %%eax" |     asm("movl %%cr2, %%eax" | ||||||
|         : "=a"(fault_address)); |         : "=a"(fault_address)); | ||||||
| 
 | 
 | ||||||
|     dword fault_page_directory; |     u32 fault_page_directory; | ||||||
|     asm("movl %%cr3, %%eax" |     asm("movl %%cr3, %%eax" | ||||||
|         : "=a"(fault_page_directory)); |         : "=a"(fault_page_directory)); | ||||||
| 
 | 
 | ||||||
|  | @ -269,8 +269,8 @@ void exception_14_handler(RegisterDumpWithExceptionCode& regs) | ||||||
|             regs.exception_code & 2 ? "write to" : "read from", |             regs.exception_code & 2 ? "write to" : "read from", | ||||||
|             fault_address); |             fault_address); | ||||||
| 
 | 
 | ||||||
|         dword malloc_scrub_pattern = explode_byte(MALLOC_SCRUB_BYTE); |         u32 malloc_scrub_pattern = explode_byte(MALLOC_SCRUB_BYTE); | ||||||
|         dword free_scrub_pattern = explode_byte(FREE_SCRUB_BYTE); |         u32 free_scrub_pattern = explode_byte(FREE_SCRUB_BYTE); | ||||||
|         if ((fault_address & 0xffff0000) == (malloc_scrub_pattern & 0xffff0000)) { |         if ((fault_address & 0xffff0000) == (malloc_scrub_pattern & 0xffff0000)) { | ||||||
|             kprintf("\033[33;1mNote: Address %p looks like it may be uninitialized malloc() memory\033[0m\n", fault_address); |             kprintf("\033[33;1mNote: Address %p looks like it may be uninitialized malloc() memory\033[0m\n", fault_address); | ||||||
|         } else if ((fault_address & 0xffff0000) == (free_scrub_pattern & 0xffff0000)) { |         } else if ((fault_address & 0xffff0000) == (free_scrub_pattern & 0xffff0000)) { | ||||||
|  | @ -293,7 +293,7 @@ void exception_14_handler(RegisterDumpWithExceptionCode& regs) | ||||||
|     static void _exception##i()                                       \ |     static void _exception##i()                                       \ | ||||||
|     {                                                                 \ |     {                                                                 \ | ||||||
|         kprintf(msg "\n");                                            \ |         kprintf(msg "\n");                                            \ | ||||||
|         dword cr0, cr2, cr3, cr4;                                     \ |         u32 cr0, cr2, cr3, cr4;                                     \ | ||||||
|         asm("movl %%cr0, %%eax"                                       \ |         asm("movl %%cr0, %%eax"                                       \ | ||||||
|             : "=a"(cr0));                                             \ |             : "=a"(cr0));                                             \ | ||||||
|         asm("movl %%cr2, %%eax"                                       \ |         asm("movl %%cr2, %%eax"                                       \ | ||||||
|  | @ -319,9 +319,9 @@ EH(12, "Stack exception") | ||||||
| EH(15, "Unknown error") | EH(15, "Unknown error") | ||||||
| EH(16, "Coprocessor error") | EH(16, "Coprocessor error") | ||||||
| 
 | 
 | ||||||
| static void write_raw_gdt_entry(word selector, dword low, dword high) | static void write_raw_gdt_entry(u16 selector, u32 low, u32 high) | ||||||
| { | { | ||||||
|     word i = (selector & 0xfffc) >> 3; |     u16 i = (selector & 0xfffc) >> 3; | ||||||
|     s_gdt[i].low = low; |     s_gdt[i].low = low; | ||||||
|     s_gdt[i].high = high; |     s_gdt[i].high = high; | ||||||
| 
 | 
 | ||||||
|  | @ -329,14 +329,14 @@ static void write_raw_gdt_entry(word selector, dword low, dword high) | ||||||
|         s_gdtr.limit = (s_gdt_length + 1) * 8 - 1; |         s_gdtr.limit = (s_gdt_length + 1) * 8 - 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void write_gdt_entry(word selector, Descriptor& descriptor) | void write_gdt_entry(u16 selector, Descriptor& descriptor) | ||||||
| { | { | ||||||
|     write_raw_gdt_entry(selector, descriptor.low, descriptor.high); |     write_raw_gdt_entry(selector, descriptor.low, descriptor.high); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Descriptor& get_gdt_entry(word selector) | Descriptor& get_gdt_entry(u16 selector) | ||||||
| { | { | ||||||
|     word i = (selector & 0xfffc) >> 3; |     u16 i = (selector & 0xfffc) >> 3; | ||||||
|     return *(Descriptor*)(&s_gdt[i]); |     return *(Descriptor*)(&s_gdt[i]); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -352,7 +352,7 @@ void gdt_init() | ||||||
| { | { | ||||||
|     s_gdt_length = 5; |     s_gdt_length = 5; | ||||||
| 
 | 
 | ||||||
|     s_gdt_freelist = new Vector<word>(); |     s_gdt_freelist = new Vector<u16>(); | ||||||
|     s_gdt_freelist->ensure_capacity(256); |     s_gdt_freelist->ensure_capacity(256); | ||||||
|     for (size_t i = s_gdt_length; i < 256; ++i) |     for (size_t i = s_gdt_length; i < 256; ++i) | ||||||
|         s_gdt_freelist->append(i * 8); |         s_gdt_freelist->append(i * 8); | ||||||
|  | @ -389,30 +389,30 @@ static void unimp_trap() | ||||||
|     hang(); |     hang(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void register_irq_handler(byte irq, IRQHandler& handler) | void register_irq_handler(u8 irq, IRQHandler& handler) | ||||||
| { | { | ||||||
|     ASSERT(!s_irq_handler[irq]); |     ASSERT(!s_irq_handler[irq]); | ||||||
|     s_irq_handler[irq] = &handler; |     s_irq_handler[irq] = &handler; | ||||||
|     register_interrupt_handler(IRQ_VECTOR_BASE + irq, asm_irq_entry); |     register_interrupt_handler(IRQ_VECTOR_BASE + irq, asm_irq_entry); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void unregister_irq_handler(byte irq, IRQHandler& handler) | void unregister_irq_handler(u8 irq, IRQHandler& handler) | ||||||
| { | { | ||||||
|     ASSERT(s_irq_handler[irq] == &handler); |     ASSERT(s_irq_handler[irq] == &handler); | ||||||
|     s_irq_handler[irq] = nullptr; |     s_irq_handler[irq] = nullptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void register_interrupt_handler(byte index, void (*f)()) | void register_interrupt_handler(u8 index, void (*f)()) | ||||||
| { | { | ||||||
|     s_idt[index].low = 0x00080000 | LSW((f)); |     s_idt[index].low = 0x00080000 | LSW((f)); | ||||||
|     s_idt[index].high = ((dword)(f)&0xffff0000) | 0x8e00; |     s_idt[index].high = ((u32)(f)&0xffff0000) | 0x8e00; | ||||||
|     flush_idt(); |     flush_idt(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void register_user_callable_interrupt_handler(byte index, void (*f)()) | void register_user_callable_interrupt_handler(u8 index, void (*f)()) | ||||||
| { | { | ||||||
|     s_idt[index].low = 0x00080000 | LSW((f)); |     s_idt[index].low = 0x00080000 | LSW((f)); | ||||||
|     s_idt[index].high = ((dword)(f)&0xffff0000) | 0xef00; |     s_idt[index].high = ((u32)(f)&0xffff0000) | 0xef00; | ||||||
|     flush_idt(); |     flush_idt(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -437,7 +437,7 @@ void idt_init() | ||||||
|     s_idtr.address = s_idt; |     s_idtr.address = s_idt; | ||||||
|     s_idtr.limit = 0x100 * 8 - 1; |     s_idtr.limit = 0x100 * 8 - 1; | ||||||
| 
 | 
 | ||||||
|     for (byte i = 0xff; i > 0x10; --i) |     for (u8 i = 0xff; i > 0x10; --i) | ||||||
|         register_interrupt_handler(i, unimp_trap); |         register_interrupt_handler(i, unimp_trap); | ||||||
| 
 | 
 | ||||||
|     register_interrupt_handler(0x00, exception_0_entry); |     register_interrupt_handler(0x00, exception_0_entry); | ||||||
|  | @ -460,28 +460,28 @@ void idt_init() | ||||||
| 
 | 
 | ||||||
|     register_interrupt_handler(0x57, irq7_handler); |     register_interrupt_handler(0x57, irq7_handler); | ||||||
| 
 | 
 | ||||||
|     for (byte i = 0; i < 16; ++i) { |     for (u8 i = 0; i < 16; ++i) { | ||||||
|         s_irq_handler[i] = nullptr; |         s_irq_handler[i] = nullptr; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     flush_idt(); |     flush_idt(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void load_task_register(word selector) | void load_task_register(u16 selector) | ||||||
| { | { | ||||||
|     asm("ltr %0" ::"r"(selector)); |     asm("ltr %0" ::"r"(selector)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void handle_irq() | void handle_irq() | ||||||
| { | { | ||||||
|     word isr = PIC::get_isr(); |     u16 isr = PIC::get_isr(); | ||||||
|     if (!isr) { |     if (!isr) { | ||||||
|         kprintf("Spurious IRQ\n"); |         kprintf("Spurious IRQ\n"); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     byte irq = 0; |     u8 irq = 0; | ||||||
|     for (byte i = 0; i < 16; ++i) { |     for (u8 i = 0; i < 16; ++i) { | ||||||
|         if (i == 2) |         if (i == 2) | ||||||
|             continue; |             continue; | ||||||
|         if (isr & (1 << i)) { |         if (isr & (1 << i)) { | ||||||
|  |  | ||||||
|  | @ -13,45 +13,45 @@ class PageTableEntry; | ||||||
| 
 | 
 | ||||||
| struct [[gnu::packed]] TSS32 | struct [[gnu::packed]] TSS32 | ||||||
| { | { | ||||||
|     word backlink, __blh; |     u16 backlink, __blh; | ||||||
|     dword esp0; |     u32 esp0; | ||||||
|     word ss0, __ss0h; |     u16 ss0, __ss0h; | ||||||
|     dword esp1; |     u32 esp1; | ||||||
|     word ss1, __ss1h; |     u16 ss1, __ss1h; | ||||||
|     dword esp2; |     u32 esp2; | ||||||
|     word ss2, __ss2h; |     u16 ss2, __ss2h; | ||||||
|     dword cr3, eip, eflags; |     u32 cr3, eip, eflags; | ||||||
|     dword eax, ecx, edx, ebx, esp, ebp, esi, edi; |     u32 eax, ecx, edx, ebx, esp, ebp, esi, edi; | ||||||
|     word es, __esh; |     u16 es, __esh; | ||||||
|     word cs, __csh; |     u16 cs, __csh; | ||||||
|     word ss, __ssh; |     u16 ss, __ssh; | ||||||
|     word ds, __dsh; |     u16 ds, __dsh; | ||||||
|     word fs, __fsh; |     u16 fs, __fsh; | ||||||
|     word gs, __gsh; |     u16 gs, __gsh; | ||||||
|     word ldt, __ldth; |     u16 ldt, __ldth; | ||||||
|     word trace, iomapbase; |     u16 trace, iomapbase; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| union [[gnu::packed]] Descriptor | union [[gnu::packed]] Descriptor | ||||||
| { | { | ||||||
|     struct { |     struct { | ||||||
|         word limit_lo; |         u16 limit_lo; | ||||||
|         word base_lo; |         u16 base_lo; | ||||||
|         byte base_hi; |         u8 base_hi; | ||||||
|         byte type : 4; |         u8 type : 4; | ||||||
|         byte descriptor_type : 1; |         u8 descriptor_type : 1; | ||||||
|         byte dpl : 2; |         u8 dpl : 2; | ||||||
|         byte segment_present : 1; |         u8 segment_present : 1; | ||||||
|         byte limit_hi : 4; |         u8 limit_hi : 4; | ||||||
|         byte : 1; |         u8 : 1; | ||||||
|         byte zero : 1; |         u8 zero : 1; | ||||||
|         byte operation_size : 1; |         u8 operation_size : 1; | ||||||
|         byte granularity : 1; |         u8 granularity : 1; | ||||||
|         byte base_hi2; |         u8 base_hi2; | ||||||
|     }; |     }; | ||||||
|     struct { |     struct { | ||||||
|         dword low; |         u32 low; | ||||||
|         dword high; |         u32 high; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     enum Type { |     enum Type { | ||||||
|  | @ -72,15 +72,15 @@ union [[gnu::packed]] Descriptor | ||||||
| 
 | 
 | ||||||
|     void set_base(void* b) |     void set_base(void* b) | ||||||
|     { |     { | ||||||
|         base_lo = (dword)(b)&0xffff; |         base_lo = (u32)(b)&0xffff; | ||||||
|         base_hi = ((dword)(b) >> 16) & 0xff; |         base_hi = ((u32)(b) >> 16) & 0xff; | ||||||
|         base_hi2 = ((dword)(b) >> 24) & 0xff; |         base_hi2 = ((u32)(b) >> 24) & 0xff; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void set_limit(dword l) |     void set_limit(u32 l) | ||||||
|     { |     { | ||||||
|         limit_lo = (dword)l & 0xffff; |         limit_lo = (u32)l & 0xffff; | ||||||
|         limit_hi = ((dword)l >> 16) & 0xff; |         limit_hi = ((u32)l >> 16) & 0xff; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -89,13 +89,13 @@ class PageDirectoryEntry { | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|     PageTableEntry* page_table_base() { return reinterpret_cast<PageTableEntry*>(m_raw & 0xfffff000u); } |     PageTableEntry* page_table_base() { return reinterpret_cast<PageTableEntry*>(m_raw & 0xfffff000u); } | ||||||
|     void set_page_table_base(dword value) |     void set_page_table_base(u32 value) | ||||||
|     { |     { | ||||||
|         m_raw &= 0xfff; |         m_raw &= 0xfff; | ||||||
|         m_raw |= value & 0xfffff000; |         m_raw |= value & 0xfffff000; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     dword raw() const { return m_raw; } |     u32 raw() const { return m_raw; } | ||||||
|     void copy_from(Badge<MemoryManager>, const PageDirectoryEntry& other) { m_raw = other.m_raw; } |     void copy_from(Badge<MemoryManager>, const PageDirectoryEntry& other) { m_raw = other.m_raw; } | ||||||
| 
 | 
 | ||||||
|     enum Flags { |     enum Flags { | ||||||
|  | @ -121,7 +121,7 @@ public: | ||||||
|     bool is_cache_disabled() const { return raw() & CacheDisabled; } |     bool is_cache_disabled() const { return raw() & CacheDisabled; } | ||||||
|     void set_cache_disabled(bool b) { set_bit(CacheDisabled, b); } |     void set_cache_disabled(bool b) { set_bit(CacheDisabled, b); } | ||||||
| 
 | 
 | ||||||
|     void set_bit(byte bit, bool value) |     void set_bit(u8 bit, bool value) | ||||||
|     { |     { | ||||||
|         if (value) |         if (value) | ||||||
|             m_raw |= bit; |             m_raw |= bit; | ||||||
|  | @ -130,7 +130,7 @@ public: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     dword m_raw; |     u32 m_raw; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class PageTableEntry { | class PageTableEntry { | ||||||
|  | @ -138,13 +138,13 @@ class PageTableEntry { | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|     void* physical_page_base() { return reinterpret_cast<void*>(m_raw & 0xfffff000u); } |     void* physical_page_base() { return reinterpret_cast<void*>(m_raw & 0xfffff000u); } | ||||||
|     void set_physical_page_base(dword value) |     void set_physical_page_base(u32 value) | ||||||
|     { |     { | ||||||
|         m_raw &= 0xfff; |         m_raw &= 0xfff; | ||||||
|         m_raw |= value & 0xfffff000; |         m_raw |= value & 0xfffff000; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     dword raw() const { return m_raw; } |     u32 raw() const { return m_raw; } | ||||||
| 
 | 
 | ||||||
|     enum Flags { |     enum Flags { | ||||||
|         Present = 1 << 0, |         Present = 1 << 0, | ||||||
|  | @ -169,7 +169,7 @@ public: | ||||||
|     bool is_cache_disabled() const { return raw() & CacheDisabled; } |     bool is_cache_disabled() const { return raw() & CacheDisabled; } | ||||||
|     void set_cache_disabled(bool b) { set_bit(CacheDisabled, b); } |     void set_cache_disabled(bool b) { set_bit(CacheDisabled, b); } | ||||||
| 
 | 
 | ||||||
|     void set_bit(byte bit, bool value) |     void set_bit(u8 bit, bool value) | ||||||
|     { |     { | ||||||
|         if (value) |         if (value) | ||||||
|             m_raw |= bit; |             m_raw |= bit; | ||||||
|  | @ -178,7 +178,7 @@ public: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     dword m_raw; |     u32 m_raw; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static_assert(sizeof(PageDirectoryEntry) == 4); | static_assert(sizeof(PageDirectoryEntry) == 4); | ||||||
|  | @ -189,17 +189,17 @@ class IRQHandler; | ||||||
| void gdt_init(); | void gdt_init(); | ||||||
| void idt_init(); | void idt_init(); | ||||||
| void sse_init(); | void sse_init(); | ||||||
| void register_interrupt_handler(byte number, void (*f)()); | void register_interrupt_handler(u8 number, void (*f)()); | ||||||
| void register_user_callable_interrupt_handler(byte number, void (*f)()); | void register_user_callable_interrupt_handler(u8 number, void (*f)()); | ||||||
| void register_irq_handler(byte number, IRQHandler&); | void register_irq_handler(u8 number, IRQHandler&); | ||||||
| void unregister_irq_handler(byte number, IRQHandler&); | void unregister_irq_handler(u8 number, IRQHandler&); | ||||||
| void flush_idt(); | void flush_idt(); | ||||||
| void flush_gdt(); | void flush_gdt(); | ||||||
| void load_task_register(word selector); | void load_task_register(u16 selector); | ||||||
| word gdt_alloc_entry(); | u16 gdt_alloc_entry(); | ||||||
| void gdt_free_entry(word); | void gdt_free_entry(u16); | ||||||
| Descriptor& get_gdt_entry(word selector); | Descriptor& get_gdt_entry(u16 selector); | ||||||
| void write_gdt_entry(word selector, Descriptor&); | void write_gdt_entry(u16 selector, Descriptor&); | ||||||
| 
 | 
 | ||||||
| [[noreturn]] static inline void hang() | [[noreturn]] static inline void hang() | ||||||
| { | { | ||||||
|  | @ -208,8 +208,8 @@ void write_gdt_entry(word selector, Descriptor&); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #define LSW(x) ((dword)(x)&0xFFFF) | #define LSW(x) ((u32)(x)&0xFFFF) | ||||||
| #define MSW(x) (((dword)(x) >> 16) & 0xFFFF) | #define MSW(x) (((u32)(x) >> 16) & 0xFFFF) | ||||||
| #define LSB(x) ((x)&0xFF) | #define LSB(x) ((x)&0xFF) | ||||||
| #define MSB(x) (((x) >> 8) & 0xFF) | #define MSB(x) (((x) >> 8) & 0xFF) | ||||||
| 
 | 
 | ||||||
|  | @ -220,17 +220,17 @@ void write_gdt_entry(word selector, Descriptor&); | ||||||
| #define memory_barrier() asm volatile("" :: \ | #define memory_barrier() asm volatile("" :: \ | ||||||
|                                           : "memory") |                                           : "memory") | ||||||
| 
 | 
 | ||||||
| inline dword cpu_cr3() | inline u32 cpu_cr3() | ||||||
| { | { | ||||||
|     dword cr3; |     u32 cr3; | ||||||
|     asm volatile("movl %%cr3, %%eax" |     asm volatile("movl %%cr3, %%eax" | ||||||
|                  : "=a"(cr3)); |                  : "=a"(cr3)); | ||||||
|     return cr3; |     return cr3; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline dword cpu_flags() | inline u32 cpu_flags() | ||||||
| { | { | ||||||
|     dword flags; |     u32 flags; | ||||||
|     asm volatile( |     asm volatile( | ||||||
|         "pushf\n" |         "pushf\n" | ||||||
|         "pop %0\n" |         "pop %0\n" | ||||||
|  | @ -259,7 +259,7 @@ public: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     dword m_flags; |     u32 m_flags; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class InterruptDisabler { | class InterruptDisabler { | ||||||
|  | @ -277,7 +277,7 @@ public: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     dword m_flags; |     u32 m_flags; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* Map IRQ0-15 @ ISR 0x50-0x5F */ | /* Map IRQ0-15 @ ISR 0x50-0x5F */ | ||||||
|  | @ -297,14 +297,14 @@ struct PageFaultFlags { | ||||||
| 
 | 
 | ||||||
| class PageFault { | class PageFault { | ||||||
| public: | public: | ||||||
|     PageFault(word code, VirtualAddress vaddr) |     PageFault(u16 code, VirtualAddress vaddr) | ||||||
|         : m_code(code) |         : m_code(code) | ||||||
|         , m_vaddr(vaddr) |         , m_vaddr(vaddr) | ||||||
|     { |     { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     VirtualAddress vaddr() const { return m_vaddr; } |     VirtualAddress vaddr() const { return m_vaddr; } | ||||||
|     word code() const { return m_code; } |     u16 code() const { return m_code; } | ||||||
| 
 | 
 | ||||||
|     bool is_not_present() const { return (m_code & 1) == PageFaultFlags::NotPresent; } |     bool is_not_present() const { return (m_code & 1) == PageFaultFlags::NotPresent; } | ||||||
|     bool is_protection_violation() const { return (m_code & 1) == PageFaultFlags::ProtectionViolation; } |     bool is_protection_violation() const { return (m_code & 1) == PageFaultFlags::ProtectionViolation; } | ||||||
|  | @ -315,86 +315,86 @@ public: | ||||||
|     bool is_instruction_fetch() const { return (m_code & 8) == PageFaultFlags::InstructionFetch; } |     bool is_instruction_fetch() const { return (m_code & 8) == PageFaultFlags::InstructionFetch; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     word m_code; |     u16 m_code; | ||||||
|     VirtualAddress m_vaddr; |     VirtualAddress m_vaddr; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct [[gnu::packed]] RegisterDump | struct [[gnu::packed]] RegisterDump | ||||||
| { | { | ||||||
|     word ss; |     u16 ss; | ||||||
|     word gs; |     u16 gs; | ||||||
|     word fs; |     u16 fs; | ||||||
|     word es; |     u16 es; | ||||||
|     word ds; |     u16 ds; | ||||||
|     dword edi; |     u32 edi; | ||||||
|     dword esi; |     u32 esi; | ||||||
|     dword ebp; |     u32 ebp; | ||||||
|     dword esp; |     u32 esp; | ||||||
|     dword ebx; |     u32 ebx; | ||||||
|     dword edx; |     u32 edx; | ||||||
|     dword ecx; |     u32 ecx; | ||||||
|     dword eax; |     u32 eax; | ||||||
|     dword eip; |     u32 eip; | ||||||
|     word cs; |     u16 cs; | ||||||
|     word __csPadding; |     u16 __csPadding; | ||||||
|     dword eflags; |     u32 eflags; | ||||||
|     dword esp_if_crossRing; |     u32 esp_if_crossRing; | ||||||
|     word ss_if_crossRing; |     u16 ss_if_crossRing; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct [[gnu::packed]] RegisterDumpWithExceptionCode | struct [[gnu::packed]] RegisterDumpWithExceptionCode | ||||||
| { | { | ||||||
|     word ss; |     u16 ss; | ||||||
|     word gs; |     u16 gs; | ||||||
|     word fs; |     u16 fs; | ||||||
|     word es; |     u16 es; | ||||||
|     word ds; |     u16 ds; | ||||||
|     dword edi; |     u32 edi; | ||||||
|     dword esi; |     u32 esi; | ||||||
|     dword ebp; |     u32 ebp; | ||||||
|     dword esp; |     u32 esp; | ||||||
|     dword ebx; |     u32 ebx; | ||||||
|     dword edx; |     u32 edx; | ||||||
|     dword ecx; |     u32 ecx; | ||||||
|     dword eax; |     u32 eax; | ||||||
|     word exception_code; |     u16 exception_code; | ||||||
|     word __exception_code_padding; |     u16 __exception_code_padding; | ||||||
|     dword eip; |     u32 eip; | ||||||
|     word cs; |     u16 cs; | ||||||
|     word __csPadding; |     u16 __csPadding; | ||||||
|     dword eflags; |     u32 eflags; | ||||||
|     dword esp_if_crossRing; |     u32 esp_if_crossRing; | ||||||
|     word ss_if_crossRing; |     u16 ss_if_crossRing; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct [[gnu::aligned(16)]] FPUState | struct [[gnu::aligned(16)]] FPUState | ||||||
| { | { | ||||||
|     byte buffer[512]; |     u8 buffer[512]; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| inline constexpr dword page_base_of(dword address) | inline constexpr u32 page_base_of(u32 address) | ||||||
| { | { | ||||||
|     return address & 0xfffff000; |     return address & 0xfffff000; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| class CPUID { | class CPUID { | ||||||
| public: | public: | ||||||
|     CPUID(dword function) { asm volatile("cpuid" |     CPUID(u32 function) { asm volatile("cpuid" | ||||||
|                                          : "=a"(m_eax), "=b"(m_ebx), "=c"(m_ecx), "=d"(m_edx) |                                          : "=a"(m_eax), "=b"(m_ebx), "=c"(m_ecx), "=d"(m_edx) | ||||||
|                                          : "a"(function), "c"(0)); } |                                          : "a"(function), "c"(0)); } | ||||||
|     dword eax() const { return m_eax; } |     u32 eax() const { return m_eax; } | ||||||
|     dword ebx() const { return m_ebx; } |     u32 ebx() const { return m_ebx; } | ||||||
|     dword ecx() const { return m_ecx; } |     u32 ecx() const { return m_ecx; } | ||||||
|     dword edx() const { return m_edx; } |     u32 edx() const { return m_edx; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     dword m_eax { 0xffffffff }; |     u32 m_eax { 0xffffffff }; | ||||||
|     dword m_ebx { 0xffffffff }; |     u32 m_ebx { 0xffffffff }; | ||||||
|     dword m_ecx { 0xffffffff }; |     u32 m_ecx { 0xffffffff }; | ||||||
|     dword m_edx { 0xffffffff }; |     u32 m_edx { 0xffffffff }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| inline void read_tsc(dword& lsw, dword& msw) | inline void read_tsc(u32& lsw, u32& msw) | ||||||
| { | { | ||||||
|     asm volatile("rdtsc" |     asm volatile("rdtsc" | ||||||
|                  : "=d"(msw), "=a"(lsw)); |                  : "=d"(msw), "=a"(lsw)); | ||||||
|  |  | ||||||
|  | @ -3,13 +3,13 @@ | ||||||
| 
 | 
 | ||||||
| namespace CMOS { | namespace CMOS { | ||||||
| 
 | 
 | ||||||
| byte read(byte index) | u8 read(u8 index) | ||||||
| { | { | ||||||
|     IO::out8(0x70, index); |     IO::out8(0x70, index); | ||||||
|     return IO::in8(0x71); |     return IO::in8(0x71); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void write(byte index, byte data) | void write(u8 index, u8 data) | ||||||
| { | { | ||||||
|     IO::out8(0x70, index); |     IO::out8(0x70, index); | ||||||
|     IO::out8(0x71, data); |     IO::out8(0x71, data); | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
| 
 | 
 | ||||||
| namespace CMOS { | namespace CMOS { | ||||||
| 
 | 
 | ||||||
| byte read(byte index); | u8 read(u8 index); | ||||||
| void write(byte index, byte data); | void write(u8 index, u8 data); | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -28,14 +28,14 @@ bool Console::can_read(FileDescription&) const | ||||||
|     return false; |     return false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t Console::read(FileDescription&, byte*, ssize_t) | ssize_t Console::read(FileDescription&, u8*, ssize_t) | ||||||
| { | { | ||||||
|     // FIXME: Implement reading from the console.
 |     // FIXME: Implement reading from the console.
 | ||||||
|     //        Maybe we could use a ring buffer for this device?
 |     //        Maybe we could use a ring buffer for this device?
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t Console::write(FileDescription&, const byte* data, ssize_t size) | ssize_t Console::write(FileDescription&, const u8* data, ssize_t size) | ||||||
| { | { | ||||||
|     if (!size) |     if (!size) | ||||||
|         return 0; |         return 0; | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ | ||||||
| class ConsoleImplementation { | class ConsoleImplementation { | ||||||
| public: | public: | ||||||
|     virtual ~ConsoleImplementation(); |     virtual ~ConsoleImplementation(); | ||||||
|     virtual void on_sysconsole_receive(byte) = 0; |     virtual void on_sysconsole_receive(u8) = 0; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class Console final : public CharacterDevice { | class Console final : public CharacterDevice { | ||||||
|  | @ -21,8 +21,8 @@ public: | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual const char* class_name() const override { return "Console"; } |     virtual const char* class_name() const override { return "Console"; } | ||||||
| 
 | 
 | ||||||
|     void set_implementation(ConsoleImplementation* implementation) { m_implementation = implementation; } |     void set_implementation(ConsoleImplementation* implementation) { m_implementation = implementation; } | ||||||
|  |  | ||||||
|  | @ -43,7 +43,7 @@ BXVGADevice::BXVGADevice() | ||||||
|     m_framebuffer_address = PhysicalAddress(find_framebuffer_address()); |     m_framebuffer_address = PhysicalAddress(find_framebuffer_address()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void BXVGADevice::set_register(word index, word data) | void BXVGADevice::set_register(u16 index, u16 data) | ||||||
| { | { | ||||||
|     IO::out16(VBE_DISPI_IOPORT_INDEX, index); |     IO::out16(VBE_DISPI_IOPORT_INDEX, index); | ||||||
|     IO::out16(VBE_DISPI_IOPORT_DATA, data); |     IO::out16(VBE_DISPI_IOPORT_DATA, data); | ||||||
|  | @ -54,10 +54,10 @@ void BXVGADevice::set_resolution(int width, int height) | ||||||
|     m_framebuffer_size = { width, height }; |     m_framebuffer_size = { width, height }; | ||||||
| 
 | 
 | ||||||
|     set_register(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_DISABLED); |     set_register(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_DISABLED); | ||||||
|     set_register(VBE_DISPI_INDEX_XRES, (word)width); |     set_register(VBE_DISPI_INDEX_XRES, (u16)width); | ||||||
|     set_register(VBE_DISPI_INDEX_YRES, (word)height); |     set_register(VBE_DISPI_INDEX_YRES, (u16)height); | ||||||
|     set_register(VBE_DISPI_INDEX_VIRT_WIDTH, (word)width); |     set_register(VBE_DISPI_INDEX_VIRT_WIDTH, (u16)width); | ||||||
|     set_register(VBE_DISPI_INDEX_VIRT_HEIGHT, (word)height * 2); |     set_register(VBE_DISPI_INDEX_VIRT_HEIGHT, (u16)height * 2); | ||||||
|     set_register(VBE_DISPI_INDEX_BPP, 32); |     set_register(VBE_DISPI_INDEX_BPP, 32); | ||||||
|     set_register(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED); |     set_register(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED); | ||||||
|     set_register(VBE_DISPI_INDEX_BANK, 0); |     set_register(VBE_DISPI_INDEX_BANK, 0); | ||||||
|  | @ -66,15 +66,15 @@ void BXVGADevice::set_resolution(int width, int height) | ||||||
| void BXVGADevice::set_y_offset(int offset) | void BXVGADevice::set_y_offset(int offset) | ||||||
| { | { | ||||||
|     ASSERT(offset <= m_framebuffer_size.height()); |     ASSERT(offset <= m_framebuffer_size.height()); | ||||||
|     set_register(VBE_DISPI_INDEX_Y_OFFSET, (word)offset); |     set_register(VBE_DISPI_INDEX_Y_OFFSET, (u16)offset); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| dword BXVGADevice::find_framebuffer_address() | u32 BXVGADevice::find_framebuffer_address() | ||||||
| { | { | ||||||
|     // NOTE: The QEMU card has the same PCI ID as the Bochs one.
 |     // NOTE: The QEMU card has the same PCI ID as the Bochs one.
 | ||||||
|     static const PCI::ID bochs_vga_id = { 0x1234, 0x1111 }; |     static const PCI::ID bochs_vga_id = { 0x1234, 0x1111 }; | ||||||
|     static const PCI::ID virtualbox_vga_id = { 0x80ee, 0xbeef }; |     static const PCI::ID virtualbox_vga_id = { 0x80ee, 0xbeef }; | ||||||
|     dword framebuffer_address = 0; |     u32 framebuffer_address = 0; | ||||||
|     PCI::enumerate_all([&framebuffer_address](const PCI::Address& address, PCI::ID id) { |     PCI::enumerate_all([&framebuffer_address](const PCI::Address& address, PCI::ID id) { | ||||||
|         if (id == bochs_vga_id || id == virtualbox_vga_id) { |         if (id == bochs_vga_id || id == virtualbox_vga_id) { | ||||||
|             framebuffer_address = PCI::get_BAR0(address) & 0xfffffff0; |             framebuffer_address = PCI::get_BAR0(address) & 0xfffffff0; | ||||||
|  | @ -133,12 +133,12 @@ bool BXVGADevice::can_write(FileDescription&) const | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t BXVGADevice::read(FileDescription&, byte*, ssize_t) | ssize_t BXVGADevice::read(FileDescription&, u8*, ssize_t) | ||||||
| { | { | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t BXVGADevice::write(FileDescription&, const byte*, ssize_t) | ssize_t BXVGADevice::write(FileDescription&, const u8*, ssize_t) | ||||||
| { | { | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -20,18 +20,18 @@ public: | ||||||
|     virtual int ioctl(FileDescription&, unsigned request, unsigned arg) override; |     virtual int ioctl(FileDescription&, unsigned request, unsigned arg) override; | ||||||
|     virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t, int prot) override; |     virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t, int prot) override; | ||||||
| 
 | 
 | ||||||
|     size_t framebuffer_size_in_bytes() const { return m_framebuffer_size.area() * sizeof(dword) * 2; } |     size_t framebuffer_size_in_bytes() const { return m_framebuffer_size.area() * sizeof(u32) * 2; } | ||||||
|     Size framebuffer_size() const { return m_framebuffer_size; } |     Size framebuffer_size() const { return m_framebuffer_size; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     virtual const char* class_name() const override { return "BXVGA"; } |     virtual const char* class_name() const override { return "BXVGA"; } | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual bool can_write(FileDescription&) const override; |     virtual bool can_write(FileDescription&) const override; | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
| 
 | 
 | ||||||
|     void set_register(word index, word value); |     void set_register(u16 index, u16 value); | ||||||
|     dword find_framebuffer_address(); |     u32 find_framebuffer_address(); | ||||||
| 
 | 
 | ||||||
|     PhysicalAddress m_framebuffer_address; |     PhysicalAddress m_framebuffer_address; | ||||||
|     Size m_framebuffer_size; |     Size m_framebuffer_size; | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ DebugLogDevice::~DebugLogDevice() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t DebugLogDevice::write(FileDescription&, const byte* data, ssize_t data_size) | ssize_t DebugLogDevice::write(FileDescription&, const u8* data, ssize_t data_size) | ||||||
| { | { | ||||||
|     for (int i = 0; i < data_size; ++i) |     for (int i = 0; i < data_size; ++i) | ||||||
|         IO::out8(0xe9, data[i]); |         IO::out8(0xe9, data[i]); | ||||||
|  |  | ||||||
|  | @ -9,8 +9,8 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override { return 0; } |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override { return 0; } | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
|     virtual bool can_read(FileDescription&) const override { return true; } |     virtual bool can_read(FileDescription&) const override { return true; } | ||||||
|     virtual const char* class_name() const override { return "DebugLogDevice"; } |     virtual const char* class_name() const override { return "DebugLogDevice"; } | ||||||
|  |  | ||||||
|  | @ -8,21 +8,21 @@ DiskDevice::~DiskDevice() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool DiskDevice::read(DiskOffset offset, unsigned length, byte* out) const | bool DiskDevice::read(DiskOffset offset, unsigned length, u8* out) const | ||||||
| { | { | ||||||
|     ASSERT((offset % block_size()) == 0); |     ASSERT((offset % block_size()) == 0); | ||||||
|     ASSERT((length % block_size()) == 0); |     ASSERT((length % block_size()) == 0); | ||||||
|     dword first_block = offset / block_size(); |     u32 first_block = offset / block_size(); | ||||||
|     dword end_block = (offset + length) / block_size(); |     u32 end_block = (offset + length) / block_size(); | ||||||
|     return const_cast<DiskDevice*>(this)->read_blocks(first_block, end_block - first_block, out); |     return const_cast<DiskDevice*>(this)->read_blocks(first_block, end_block - first_block, out); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool DiskDevice::write(DiskOffset offset, unsigned length, const byte* in) | bool DiskDevice::write(DiskOffset offset, unsigned length, const u8* in) | ||||||
| { | { | ||||||
|     ASSERT((offset % block_size()) == 0); |     ASSERT((offset % block_size()) == 0); | ||||||
|     ASSERT((length % block_size()) == 0); |     ASSERT((length % block_size()) == 0); | ||||||
|     dword first_block = offset / block_size(); |     u32 first_block = offset / block_size(); | ||||||
|     dword end_block = (offset + length) / block_size(); |     u32 end_block = (offset + length) / block_size(); | ||||||
|     ASSERT(first_block <= 0xffffffff); |     ASSERT(first_block <= 0xffffffff); | ||||||
|     ASSERT(end_block <= 0xffffffff); |     ASSERT(end_block <= 0xffffffff); | ||||||
|     return write_blocks(first_block, end_block - first_block, in); |     return write_blocks(first_block, end_block - first_block, in); | ||||||
|  |  | ||||||
|  | @ -4,21 +4,21 @@ | ||||||
| #include <AK/Types.h> | #include <AK/Types.h> | ||||||
| 
 | 
 | ||||||
| // FIXME: Support 64-bit DiskOffset
 | // FIXME: Support 64-bit DiskOffset
 | ||||||
| typedef dword DiskOffset; | typedef u32 DiskOffset; | ||||||
| 
 | 
 | ||||||
| class DiskDevice : public RefCounted<DiskDevice> { | class DiskDevice : public RefCounted<DiskDevice> { | ||||||
| public: | public: | ||||||
|     virtual ~DiskDevice(); |     virtual ~DiskDevice(); | ||||||
| 
 | 
 | ||||||
|     virtual unsigned block_size() const = 0; |     virtual unsigned block_size() const = 0; | ||||||
|     virtual bool read_block(unsigned index, byte*) const = 0; |     virtual bool read_block(unsigned index, u8*) const = 0; | ||||||
|     virtual bool write_block(unsigned index, const byte*) = 0; |     virtual bool write_block(unsigned index, const u8*) = 0; | ||||||
|     virtual const char* class_name() const = 0; |     virtual const char* class_name() const = 0; | ||||||
|     bool read(DiskOffset, unsigned length, byte*) const; |     bool read(DiskOffset, unsigned length, u8*) const; | ||||||
|     bool write(DiskOffset, unsigned length, const byte*); |     bool write(DiskOffset, unsigned length, const u8*); | ||||||
| 
 | 
 | ||||||
|     virtual bool read_blocks(unsigned index, word count, byte*) = 0; |     virtual bool read_blocks(unsigned index, u16 count, u8*) = 0; | ||||||
|     virtual bool write_blocks(unsigned index, word count, const byte*) = 0; |     virtual bool write_blocks(unsigned index, u16 count, const u8*) = 0; | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|     DiskDevice(); |     DiskDevice(); | ||||||
|  |  | ||||||
|  | @ -22,7 +22,7 @@ unsigned DiskPartition::block_size() const | ||||||
|     return m_device->block_size(); |     return m_device->block_size(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool DiskPartition::read_block(unsigned index, byte* out) const | bool DiskPartition::read_block(unsigned index, u8* out) const | ||||||
| { | { | ||||||
| #ifdef OFFD_DEBUG | #ifdef OFFD_DEBUG | ||||||
|     kprintf("DiskPartition::read_block %u (really: %u)\n", index, m_block_offset + index); |     kprintf("DiskPartition::read_block %u (really: %u)\n", index, m_block_offset + index); | ||||||
|  | @ -31,7 +31,7 @@ bool DiskPartition::read_block(unsigned index, byte* out) const | ||||||
|     return m_device->read_block(m_block_offset + index, out); |     return m_device->read_block(m_block_offset + index, out); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool DiskPartition::write_block(unsigned index, const byte* data) | bool DiskPartition::write_block(unsigned index, const u8* data) | ||||||
| { | { | ||||||
| #ifdef OFFD_DEBUG | #ifdef OFFD_DEBUG | ||||||
|     kprintf("DiskPartition::write_block %u (really: %u)\n", index, m_block_offset + index); |     kprintf("DiskPartition::write_block %u (really: %u)\n", index, m_block_offset + index); | ||||||
|  | @ -40,7 +40,7 @@ bool DiskPartition::write_block(unsigned index, const byte* data) | ||||||
|     return m_device->write_block(m_block_offset + index, data); |     return m_device->write_block(m_block_offset + index, data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool DiskPartition::read_blocks(unsigned index, word count, byte* out) | bool DiskPartition::read_blocks(unsigned index, u16 count, u8* out) | ||||||
| { | { | ||||||
| #ifdef OFFD_DEBUG | #ifdef OFFD_DEBUG | ||||||
|     kprintf("DiskPartition::read_blocks %u (really: %u) count=%u\n", index, m_block_offset + index, count); |     kprintf("DiskPartition::read_blocks %u (really: %u) count=%u\n", index, m_block_offset + index, count); | ||||||
|  | @ -49,7 +49,7 @@ bool DiskPartition::read_blocks(unsigned index, word count, byte* out) | ||||||
|     return m_device->read_blocks(m_block_offset + index, count, out); |     return m_device->read_blocks(m_block_offset + index, count, out); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool DiskPartition::write_blocks(unsigned index, word count, const byte* data) | bool DiskPartition::write_blocks(unsigned index, u16 count, const u8* data) | ||||||
| { | { | ||||||
| #ifdef OFFD_DEBUG | #ifdef OFFD_DEBUG | ||||||
|     kprintf("DiskPartition::write_blocks %u (really: %u) count=%u\n", index, m_block_offset + index, count); |     kprintf("DiskPartition::write_blocks %u (really: %u) count=%u\n", index, m_block_offset + index, count); | ||||||
|  |  | ||||||
|  | @ -9,10 +9,10 @@ public: | ||||||
|     virtual ~DiskPartition(); |     virtual ~DiskPartition(); | ||||||
| 
 | 
 | ||||||
|     virtual unsigned block_size() const override; |     virtual unsigned block_size() const override; | ||||||
|     virtual bool read_block(unsigned index, byte* out) const override; |     virtual bool read_block(unsigned index, u8* out) const override; | ||||||
|     virtual bool write_block(unsigned index, const byte*) override; |     virtual bool write_block(unsigned index, const u8*) override; | ||||||
|     virtual bool read_blocks(unsigned index, word count, byte*) override; |     virtual bool read_blocks(unsigned index, u16 count, u8*) override; | ||||||
|     virtual bool write_blocks(unsigned index, word count, const byte*) override; |     virtual bool write_blocks(unsigned index, u16 count, const u8*) override; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     virtual const char* class_name() const override; |     virtual const char* class_name() const override; | ||||||
|  |  | ||||||
|  | @ -32,19 +32,19 @@ unsigned FileBackedDiskDevice::block_size() const | ||||||
|     return m_block_size; |     return m_block_size; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool FileBackedDiskDevice::read_block(unsigned index, byte* out) const | bool FileBackedDiskDevice::read_block(unsigned index, u8* out) const | ||||||
| { | { | ||||||
|     DiskOffset offset = index * m_block_size; |     DiskOffset offset = index * m_block_size; | ||||||
|     return read_internal(offset, block_size(), out); |     return read_internal(offset, block_size(), out); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool FileBackedDiskDevice::write_block(unsigned index, const byte* data) | bool FileBackedDiskDevice::write_block(unsigned index, const u8* data) | ||||||
| { | { | ||||||
|     DiskOffset offset = index * m_block_size; |     DiskOffset offset = index * m_block_size; | ||||||
|     return write_internal(offset, block_size(), data); |     return write_internal(offset, block_size(), data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool FileBackedDiskDevice::read_internal(DiskOffset offset, unsigned length, byte* out) const | bool FileBackedDiskDevice::read_internal(DiskOffset offset, unsigned length, u8* out) const | ||||||
| { | { | ||||||
| #ifndef IGNORE_FILE_LENGTH | #ifndef IGNORE_FILE_LENGTH | ||||||
|     if (offset + length >= m_file_length) |     if (offset + length >= m_file_length) | ||||||
|  | @ -54,12 +54,12 @@ bool FileBackedDiskDevice::read_internal(DiskOffset offset, unsigned length, byt | ||||||
|     printf("[FileBackedDiskDevice] Read device @ offset %llx, length %u\n", offset, length); |     printf("[FileBackedDiskDevice] Read device @ offset %llx, length %u\n", offset, length); | ||||||
| #endif | #endif | ||||||
|     fseeko(m_file, offset, SEEK_SET); |     fseeko(m_file, offset, SEEK_SET); | ||||||
|     unsigned nread = fread(out, sizeof(byte), length, m_file); |     unsigned nread = fread(out, sizeof(u8), length, m_file); | ||||||
|     ASSERT(nread == length); |     ASSERT(nread == length); | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool FileBackedDiskDevice::write_internal(DiskOffset offset, unsigned length, const byte* data) | bool FileBackedDiskDevice::write_internal(DiskOffset offset, unsigned length, const u8* data) | ||||||
| { | { | ||||||
| #ifndef IGNORE_FILE_LENGTH | #ifndef IGNORE_FILE_LENGTH | ||||||
|     if (offset + length >= m_file_length) |     if (offset + length >= m_file_length) | ||||||
|  | @ -70,7 +70,7 @@ bool FileBackedDiskDevice::write_internal(DiskOffset offset, unsigned length, co | ||||||
| #endif | #endif | ||||||
|     fseeko(m_file, offset, SEEK_SET); |     fseeko(m_file, offset, SEEK_SET); | ||||||
|     // size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
 |     // size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
 | ||||||
|     unsigned nwritten = fwrite(data, sizeof(byte), length, m_file); |     unsigned nwritten = fwrite(data, sizeof(u8), length, m_file); | ||||||
|     ASSERT(nwritten == length); |     ASSERT(nwritten == length); | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -14,14 +14,14 @@ public: | ||||||
|     bool is_valid() const { return m_file; } |     bool is_valid() const { return m_file; } | ||||||
| 
 | 
 | ||||||
|     virtual unsigned block_size() const override; |     virtual unsigned block_size() const override; | ||||||
|     virtual bool read_block(unsigned index, byte* out) const override; |     virtual bool read_block(unsigned index, u8* out) const override; | ||||||
|     virtual bool write_block(unsigned index, const byte*) override; |     virtual bool write_block(unsigned index, const u8*) override; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     virtual const char* class_name() const override; |     virtual const char* class_name() const override; | ||||||
| 
 | 
 | ||||||
|     bool read_internal(DiskOffset, unsigned length, byte* out) const; |     bool read_internal(DiskOffset, unsigned length, u8* out) const; | ||||||
|     bool write_internal(DiskOffset, unsigned length, const byte* data); |     bool write_internal(DiskOffset, unsigned length, const u8* data); | ||||||
| 
 | 
 | ||||||
|     FileBackedDiskDevice(String&& imagePath, unsigned block_size); |     FileBackedDiskDevice(String&& imagePath, unsigned block_size); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -17,14 +17,14 @@ bool FullDevice::can_read(FileDescription&) const | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t FullDevice::read(FileDescription&, byte* buffer, ssize_t size) | ssize_t FullDevice::read(FileDescription&, u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     ssize_t count = min(PAGE_SIZE, size); |     ssize_t count = min(PAGE_SIZE, size); | ||||||
|     memset(buffer, 0, (size_t)count); |     memset(buffer, 0, (size_t)count); | ||||||
|     return count; |     return count; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t FullDevice::write(FileDescription&, const byte*, ssize_t size) | ssize_t FullDevice::write(FileDescription&, const u8*, ssize_t size) | ||||||
| { | { | ||||||
|     if (size == 0) |     if (size == 0) | ||||||
|         return 0; |         return 0; | ||||||
|  |  | ||||||
|  | @ -10,8 +10,8 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
|     virtual const char* class_name() const override { return "FullDevice"; } |     virtual const char* class_name() const override { return "FullDevice"; } | ||||||
|  |  | ||||||
|  | @ -106,19 +106,19 @@ unsigned IDEDiskDevice::block_size() const | ||||||
|     return 512; |     return 512; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IDEDiskDevice::read_blocks(unsigned index, word count, byte* out) | bool IDEDiskDevice::read_blocks(unsigned index, u16 count, u8* out) | ||||||
| { | { | ||||||
|     if (m_bus_master_base && m_dma_enabled.resource()) |     if (m_bus_master_base && m_dma_enabled.resource()) | ||||||
|         return read_sectors_with_dma(index, count, out); |         return read_sectors_with_dma(index, count, out); | ||||||
|     return read_sectors(index, count, out); |     return read_sectors(index, count, out); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IDEDiskDevice::read_block(unsigned index, byte* out) const | bool IDEDiskDevice::read_block(unsigned index, u8* out) const | ||||||
| { | { | ||||||
|     return const_cast<IDEDiskDevice*>(this)->read_blocks(index, 1, out); |     return const_cast<IDEDiskDevice*>(this)->read_blocks(index, 1, out); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IDEDiskDevice::write_blocks(unsigned index, word count, const byte* data) | bool IDEDiskDevice::write_blocks(unsigned index, u16 count, const u8* data) | ||||||
| { | { | ||||||
|     if (m_bus_master_base && m_dma_enabled.resource()) |     if (m_bus_master_base && m_dma_enabled.resource()) | ||||||
|         return write_sectors_with_dma(index, count, data); |         return write_sectors_with_dma(index, count, data); | ||||||
|  | @ -129,12 +129,12 @@ bool IDEDiskDevice::write_blocks(unsigned index, word count, const byte* data) | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IDEDiskDevice::write_block(unsigned index, const byte* data) | bool IDEDiskDevice::write_block(unsigned index, const u8* data) | ||||||
| { | { | ||||||
|     return write_blocks(index, 1, data); |     return write_blocks(index, 1, data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void print_ide_status(byte status) | static void print_ide_status(u8 status) | ||||||
| { | { | ||||||
|     kprintf("DRQ=%u BSY=%u DRDY=%u DSC=%u DF=%u CORR=%u IDX=%u ERR=%u\n", |     kprintf("DRQ=%u BSY=%u DRDY=%u DSC=%u DF=%u CORR=%u IDX=%u ERR=%u\n", | ||||||
|         (status & ATA_SR_DRQ) != 0, |         (status & ATA_SR_DRQ) != 0, | ||||||
|  | @ -166,7 +166,7 @@ bool IDEDiskDevice::wait_for_irq() | ||||||
| 
 | 
 | ||||||
| void IDEDiskDevice::handle_irq() | void IDEDiskDevice::handle_irq() | ||||||
| { | { | ||||||
|     byte status = IO::in8(m_io_base + ATA_REG_STATUS); |     u8 status = IO::in8(m_io_base + ATA_REG_STATUS); | ||||||
|     if (status & ATA_SR_ERR) { |     if (status & ATA_SR_ERR) { | ||||||
|         print_ide_status(status); |         print_ide_status(status); | ||||||
|         m_device_error = IO::in8(m_io_base + ATA_REG_ERROR); |         m_device_error = IO::in8(m_io_base + ATA_REG_ERROR); | ||||||
|  | @ -192,7 +192,7 @@ void IDEDiskDevice::initialize() | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
| #ifdef DISK_DEBUG | #ifdef DISK_DEBUG | ||||||
|     byte status = IO::in8(m_io_base + ATA_REG_STATUS); |     u8 status = IO::in8(m_io_base + ATA_REG_STATUS); | ||||||
|     kprintf("initial status: "); |     kprintf("initial status: "); | ||||||
|     print_ide_status(status); |     print_ide_status(status); | ||||||
| #endif | #endif | ||||||
|  | @ -213,19 +213,19 @@ void IDEDiskDevice::initialize() | ||||||
| 
 | 
 | ||||||
|     ByteBuffer wbuf = ByteBuffer::create_uninitialized(512); |     ByteBuffer wbuf = ByteBuffer::create_uninitialized(512); | ||||||
|     ByteBuffer bbuf = ByteBuffer::create_uninitialized(512); |     ByteBuffer bbuf = ByteBuffer::create_uninitialized(512); | ||||||
|     byte* b = bbuf.pointer(); |     u8* b = bbuf.pointer(); | ||||||
|     word* w = (word*)wbuf.pointer(); |     u16* w = (u16*)wbuf.pointer(); | ||||||
|     const word* wbufbase = (word*)wbuf.pointer(); |     const u16* wbufbase = (u16*)wbuf.pointer(); | ||||||
| 
 | 
 | ||||||
|     for (dword i = 0; i < 256; ++i) { |     for (u32 i = 0; i < 256; ++i) { | ||||||
|         word data = IO::in16(m_io_base + ATA_REG_DATA); |         u16 data = IO::in16(m_io_base + ATA_REG_DATA); | ||||||
|         *(w++) = data; |         *(w++) = data; | ||||||
|         *(b++) = MSB(data); |         *(b++) = MSB(data); | ||||||
|         *(b++) = LSB(data); |         *(b++) = LSB(data); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // "Unpad" the device name string.
 |     // "Unpad" the device name string.
 | ||||||
|     for (dword i = 93; i > 54 && bbuf[i] == ' '; --i) |     for (u32 i = 93; i > 54 && bbuf[i] == ' '; --i) | ||||||
|         bbuf[i] = 0; |         bbuf[i] = 0; | ||||||
| 
 | 
 | ||||||
|     m_cylinders = wbufbase[1]; |     m_cylinders = wbufbase[1]; | ||||||
|  | @ -249,13 +249,13 @@ void IDEDiskDevice::initialize() | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void wait_400ns(word io_base) | static void wait_400ns(u16 io_base) | ||||||
| { | { | ||||||
|     for (int i = 0; i < 4; ++i) |     for (int i = 0; i < 4; ++i) | ||||||
|         IO::in8(io_base + ATA_REG_ALTSTATUS); |         IO::in8(io_base + ATA_REG_ALTSTATUS); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IDEDiskDevice::read_sectors_with_dma(dword lba, word count, byte* outbuf) | bool IDEDiskDevice::read_sectors_with_dma(u32 lba, u16 count, u8* outbuf) | ||||||
| { | { | ||||||
|     LOCKER(m_lock); |     LOCKER(m_lock); | ||||||
| #ifdef DISK_DEBUG | #ifdef DISK_DEBUG | ||||||
|  | @ -275,7 +275,7 @@ bool IDEDiskDevice::read_sectors_with_dma(dword lba, word count, byte* outbuf) | ||||||
|     IO::out8(m_bus_master_base, 0); |     IO::out8(m_bus_master_base, 0); | ||||||
| 
 | 
 | ||||||
|     // Write the PRDT location
 |     // Write the PRDT location
 | ||||||
|     IO::out32(m_bus_master_base + 4, (dword)&m_prdt); |     IO::out32(m_bus_master_base + 4, (u32)&m_prdt); | ||||||
| 
 | 
 | ||||||
|     // Turn on "Interrupt" and "Error" flag. The error flag should be cleared by hardware.
 |     // Turn on "Interrupt" and "Error" flag. The error flag should be cleared by hardware.
 | ||||||
|     IO::out8(m_bus_master_base + 2, IO::in8(m_bus_master_base + 2) | 0x6); |     IO::out8(m_bus_master_base + 2, IO::in8(m_bus_master_base + 2) | 0x6); | ||||||
|  | @ -332,7 +332,7 @@ bool IDEDiskDevice::read_sectors_with_dma(dword lba, word count, byte* outbuf) | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IDEDiskDevice::read_sectors(dword start_sector, word count, byte* outbuf) | bool IDEDiskDevice::read_sectors(u32 start_sector, u16 count, u8* outbuf) | ||||||
| { | { | ||||||
|     ASSERT(count <= 256); |     ASSERT(count <= 256); | ||||||
|     LOCKER(m_lock); |     LOCKER(m_lock); | ||||||
|  | @ -369,7 +369,7 @@ bool IDEDiskDevice::read_sectors(dword start_sector, word count, byte* outbuf) | ||||||
|     if (m_device_error) |     if (m_device_error) | ||||||
|         return false; |         return false; | ||||||
| 
 | 
 | ||||||
|     byte status = IO::in8(m_io_base + ATA_REG_STATUS); |     u8 status = IO::in8(m_io_base + ATA_REG_STATUS); | ||||||
|     ASSERT(status & ATA_SR_DRQ); |     ASSERT(status & ATA_SR_DRQ); | ||||||
| #ifdef DISK_DEBUG | #ifdef DISK_DEBUG | ||||||
|     kprintf("Retrieving %u bytes (status=%b), outbuf=%p...\n", count * 512, status, outbuf); |     kprintf("Retrieving %u bytes (status=%b), outbuf=%p...\n", count * 512, status, outbuf); | ||||||
|  | @ -379,7 +379,7 @@ bool IDEDiskDevice::read_sectors(dword start_sector, word count, byte* outbuf) | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IDEDiskDevice::write_sectors_with_dma(dword lba, word count, const byte* inbuf) | bool IDEDiskDevice::write_sectors_with_dma(u32 lba, u16 count, const u8* inbuf) | ||||||
| { | { | ||||||
|     LOCKER(m_lock); |     LOCKER(m_lock); | ||||||
| #ifdef DISK_DEBUG | #ifdef DISK_DEBUG | ||||||
|  | @ -401,7 +401,7 @@ bool IDEDiskDevice::write_sectors_with_dma(dword lba, word count, const byte* in | ||||||
|     IO::out8(m_bus_master_base, 0); |     IO::out8(m_bus_master_base, 0); | ||||||
| 
 | 
 | ||||||
|     // Write the PRDT location
 |     // Write the PRDT location
 | ||||||
|     IO::out32(m_bus_master_base + 4, (dword)&m_prdt); |     IO::out32(m_bus_master_base + 4, (u32)&m_prdt); | ||||||
| 
 | 
 | ||||||
|     // Turn on "Interrupt" and "Error" flag. The error flag should be cleared by hardware.
 |     // Turn on "Interrupt" and "Error" flag. The error flag should be cleared by hardware.
 | ||||||
|     IO::out8(m_bus_master_base + 2, IO::in8(m_bus_master_base + 2) | 0x6); |     IO::out8(m_bus_master_base + 2, IO::in8(m_bus_master_base + 2) | 0x6); | ||||||
|  | @ -453,7 +453,7 @@ bool IDEDiskDevice::write_sectors_with_dma(dword lba, word count, const byte* in | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IDEDiskDevice::write_sectors(dword start_sector, word count, const byte* data) | bool IDEDiskDevice::write_sectors(u32 start_sector, u16 count, const u8* data) | ||||||
| { | { | ||||||
|     ASSERT(count <= 256); |     ASSERT(count <= 256); | ||||||
|     LOCKER(m_lock); |     LOCKER(m_lock); | ||||||
|  | @ -484,7 +484,7 @@ bool IDEDiskDevice::write_sectors(dword start_sector, word count, const byte* da | ||||||
|     while (!(IO::in8(m_io_base + ATA_REG_STATUS) & ATA_SR_DRQ)) |     while (!(IO::in8(m_io_base + ATA_REG_STATUS) & ATA_SR_DRQ)) | ||||||
|         ; |         ; | ||||||
| 
 | 
 | ||||||
|     byte status = IO::in8(m_io_base + ATA_REG_STATUS); |     u8 status = IO::in8(m_io_base + ATA_REG_STATUS); | ||||||
|     ASSERT(status & ATA_SR_DRQ); |     ASSERT(status & ATA_SR_DRQ); | ||||||
|     IO::repeated_out16(m_io_base + ATA_REG_DATA, data, count * 256); |     IO::repeated_out16(m_io_base + ATA_REG_DATA, data, count * 256); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,8 +10,8 @@ | ||||||
| 
 | 
 | ||||||
| struct PhysicalRegionDescriptor { | struct PhysicalRegionDescriptor { | ||||||
|     PhysicalAddress offset; |     PhysicalAddress offset; | ||||||
|     word size { 0 }; |     u16 size { 0 }; | ||||||
|     word end_of_table { 0 }; |     u16 end_of_table { 0 }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class IDEDiskDevice final : public IRQHandler | class IDEDiskDevice final : public IRQHandler | ||||||
|  | @ -23,10 +23,10 @@ public: | ||||||
| 
 | 
 | ||||||
|     // ^DiskDevice
 |     // ^DiskDevice
 | ||||||
|     virtual unsigned block_size() const override; |     virtual unsigned block_size() const override; | ||||||
|     virtual bool read_block(unsigned index, byte*) const override; |     virtual bool read_block(unsigned index, u8*) const override; | ||||||
|     virtual bool write_block(unsigned index, const byte*) override; |     virtual bool write_block(unsigned index, const u8*) override; | ||||||
|     virtual bool read_blocks(unsigned index, word count, byte*) override; |     virtual bool read_blocks(unsigned index, u16 count, u8*) override; | ||||||
|     virtual bool write_blocks(unsigned index, word count, const byte*) override; |     virtual bool write_blocks(unsigned index, u16 count, const u8*) override; | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|     IDEDiskDevice(); |     IDEDiskDevice(); | ||||||
|  | @ -40,22 +40,22 @@ private: | ||||||
| 
 | 
 | ||||||
|     void initialize(); |     void initialize(); | ||||||
|     bool wait_for_irq(); |     bool wait_for_irq(); | ||||||
|     bool read_sectors_with_dma(dword lba, word count, byte*); |     bool read_sectors_with_dma(u32 lba, u16 count, u8*); | ||||||
|     bool write_sectors_with_dma(dword lba, word count, const byte*); |     bool write_sectors_with_dma(u32 lba, u16 count, const u8*); | ||||||
|     bool read_sectors(dword lba, word count, byte* buffer); |     bool read_sectors(u32 lba, u16 count, u8* buffer); | ||||||
|     bool write_sectors(dword lba, word count, const byte* data); |     bool write_sectors(u32 lba, u16 count, const u8* data); | ||||||
| 
 | 
 | ||||||
|     Lock m_lock { "IDEDiskDevice" }; |     Lock m_lock { "IDEDiskDevice" }; | ||||||
|     word m_cylinders { 0 }; |     u16 m_cylinders { 0 }; | ||||||
|     word m_heads { 0 }; |     u16 m_heads { 0 }; | ||||||
|     word m_sectors_per_track { 0 }; |     u16 m_sectors_per_track { 0 }; | ||||||
|     word m_io_base { 0 }; |     u16 m_io_base { 0 }; | ||||||
|     volatile bool m_interrupted { false }; |     volatile bool m_interrupted { false }; | ||||||
|     volatile byte m_device_error { 0 }; |     volatile u8 m_device_error { 0 }; | ||||||
| 
 | 
 | ||||||
|     PCI::Address m_pci_address; |     PCI::Address m_pci_address; | ||||||
|     PhysicalRegionDescriptor m_prdt; |     PhysicalRegionDescriptor m_prdt; | ||||||
|     RefPtr<PhysicalPage> m_dma_buffer_page; |     RefPtr<PhysicalPage> m_dma_buffer_page; | ||||||
|     word m_bus_master_base { 0 }; |     u16 m_bus_master_base { 0 }; | ||||||
|     Lockable<bool> m_dma_enabled; |     Lockable<bool> m_dma_enabled; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -223,7 +223,7 @@ static KeyCode shifted_key_map[0x100] = { | ||||||
|     Key_Logo, |     Key_Logo, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void KeyboardDevice::key_state_changed(byte raw, bool pressed) | void KeyboardDevice::key_state_changed(u8 raw, bool pressed) | ||||||
| { | { | ||||||
|     Event event; |     Event event; | ||||||
|     event.key = (m_modifiers & Mod_Shift) ? shifted_key_map[raw] : unshifted_key_map[raw]; |     event.key = (m_modifiers & Mod_Shift) ? shifted_key_map[raw] : unshifted_key_map[raw]; | ||||||
|  | @ -239,11 +239,11 @@ void KeyboardDevice::key_state_changed(byte raw, bool pressed) | ||||||
| void KeyboardDevice::handle_irq() | void KeyboardDevice::handle_irq() | ||||||
| { | { | ||||||
|     for (;;) { |     for (;;) { | ||||||
|         byte status = IO::in8(I8042_STATUS); |         u8 status = IO::in8(I8042_STATUS); | ||||||
|         if (!(((status & I8042_WHICH_BUFFER) == I8042_KEYBOARD_BUFFER) && (status & I8042_BUFFER_FULL))) |         if (!(((status & I8042_WHICH_BUFFER) == I8042_KEYBOARD_BUFFER) && (status & I8042_BUFFER_FULL))) | ||||||
|             return; |             return; | ||||||
|         byte raw = IO::in8(I8042_BUFFER); |         u8 raw = IO::in8(I8042_BUFFER); | ||||||
|         byte ch = raw & 0x7f; |         u8 ch = raw & 0x7f; | ||||||
|         bool pressed = !(raw & 0x80); |         bool pressed = !(raw & 0x80); | ||||||
| 
 | 
 | ||||||
| #ifdef KEYBOARD_DEBUG | #ifdef KEYBOARD_DEBUG | ||||||
|  | @ -316,7 +316,7 @@ bool KeyboardDevice::can_read(FileDescription&) const | ||||||
|     return !m_queue.is_empty(); |     return !m_queue.is_empty(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t KeyboardDevice::read(FileDescription&, byte* buffer, ssize_t size) | ssize_t KeyboardDevice::read(FileDescription&, u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     ssize_t nread = 0; |     ssize_t nread = 0; | ||||||
|     while (nread < size) { |     while (nread < size) { | ||||||
|  | @ -332,7 +332,7 @@ ssize_t KeyboardDevice::read(FileDescription&, byte* buffer, ssize_t size) | ||||||
|     return nread; |     return nread; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t KeyboardDevice::write(FileDescription&, const byte*, ssize_t) | ssize_t KeyboardDevice::write(FileDescription&, const u8*, ssize_t) | ||||||
| { | { | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -23,9 +23,9 @@ public: | ||||||
|     void set_client(KeyboardClient* client) { m_client = client; } |     void set_client(KeyboardClient* client) { m_client = client; } | ||||||
| 
 | 
 | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual ssize_t read(FileDescription&, byte* buffer, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8* buffer, ssize_t) override; | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte* buffer, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8* buffer, ssize_t) override; | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|  | @ -35,8 +35,8 @@ private: | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual const char* class_name() const override { return "KeyboardDevice"; } |     virtual const char* class_name() const override { return "KeyboardDevice"; } | ||||||
| 
 | 
 | ||||||
|     void key_state_changed(byte raw, bool pressed); |     void key_state_changed(u8 raw, bool pressed); | ||||||
|     void update_modifier(byte modifier, bool state) |     void update_modifier(u8 modifier, bool state) | ||||||
|     { |     { | ||||||
|         if (state) |         if (state) | ||||||
|             m_modifiers |= modifier; |             m_modifiers |= modifier; | ||||||
|  | @ -46,7 +46,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     KeyboardClient* m_client { nullptr }; |     KeyboardClient* m_client { nullptr }; | ||||||
|     CircularQueue<Event, 16> m_queue; |     CircularQueue<Event, 16> m_queue; | ||||||
|     byte m_modifiers { 0 }; |     u8 m_modifiers { 0 }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class KeyboardClient { | class KeyboardClient { | ||||||
|  |  | ||||||
|  | @ -8,23 +8,23 @@ | ||||||
| #define MBR_SIGNATURE 0xaa55 | #define MBR_SIGNATURE 0xaa55 | ||||||
| 
 | 
 | ||||||
| struct MBRPartitionEntry { | struct MBRPartitionEntry { | ||||||
|     byte status; |     u8 status; | ||||||
|     byte chs1[3]; |     u8 chs1[3]; | ||||||
|     byte type; |     u8 type; | ||||||
|     byte chs2[3]; |     u8 chs2[3]; | ||||||
|     dword offset; |     u32 offset; | ||||||
|     dword length; |     u32 length; | ||||||
| } __attribute__((packed)); | } __attribute__((packed)); | ||||||
| 
 | 
 | ||||||
| struct MBRPartitionHeader { | struct MBRPartitionHeader { | ||||||
|     byte code1[218]; |     u8 code1[218]; | ||||||
|     word ts_zero; |     u16 ts_zero; | ||||||
|     byte ts_drive, ts_seconds, ts_minutes, ts_hours; |     u8 ts_drive, ts_seconds, ts_minutes, ts_hours; | ||||||
|     byte code2[216]; |     u8 code2[216]; | ||||||
|     dword disk_signature; |     u32 disk_signature; | ||||||
|     word disk_signature_zero; |     u16 disk_signature_zero; | ||||||
|     MBRPartitionEntry entry[4]; |     MBRPartitionEntry entry[4]; | ||||||
|     word mbr_signature; |     u16 mbr_signature; | ||||||
| } __attribute__((packed)); | } __attribute__((packed)); | ||||||
| 
 | 
 | ||||||
| class MBRPartitionTable { | class MBRPartitionTable { | ||||||
|  | @ -43,5 +43,5 @@ private: | ||||||
|     ByteBuffer read_header() const; |     ByteBuffer read_header() const; | ||||||
|     const MBRPartitionHeader& header() const; |     const MBRPartitionHeader& header() const; | ||||||
| 
 | 
 | ||||||
|     byte m_cached_header[512]; |     u8 m_cached_header[512]; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -25,12 +25,12 @@ bool NullDevice::can_read(FileDescription&) const | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t NullDevice::read(FileDescription&, byte*, ssize_t) | ssize_t NullDevice::read(FileDescription&, u8*, ssize_t) | ||||||
| { | { | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t NullDevice::write(FileDescription&, const byte*, ssize_t buffer_size) | ssize_t NullDevice::write(FileDescription&, const u8*, ssize_t buffer_size) | ||||||
| { | { | ||||||
|     return min(PAGE_SIZE, buffer_size); |     return min(PAGE_SIZE, buffer_size); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -12,8 +12,8 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual const char* class_name() const override { return "NullDevice"; } |     virtual const char* class_name() const override { return "NullDevice"; } | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
| void PCSpeaker::tone_on(int frequency) | void PCSpeaker::tone_on(int frequency) | ||||||
| { | { | ||||||
|     IO::out8(PIT_CTL, TIMER2_SELECT | WRITE_WORD | MODE_SQUARE_WAVE); |     IO::out8(PIT_CTL, TIMER2_SELECT | WRITE_WORD | MODE_SQUARE_WAVE); | ||||||
|     word timer_reload = BASE_FREQUENCY / frequency; |     u16 timer_reload = BASE_FREQUENCY / frequency; | ||||||
| 
 | 
 | ||||||
|     IO::out8(TIMER2_CTL, LSB(timer_reload)); |     IO::out8(TIMER2_CTL, LSB(timer_reload)); | ||||||
|     IO::out8(TIMER2_CTL, MSB(timer_reload)); |     IO::out8(TIMER2_CTL, MSB(timer_reload)); | ||||||
|  |  | ||||||
|  | @ -39,11 +39,11 @@ PS2MouseDevice& PS2MouseDevice::the() | ||||||
| void PS2MouseDevice::handle_irq() | void PS2MouseDevice::handle_irq() | ||||||
| { | { | ||||||
|     for (;;) { |     for (;;) { | ||||||
|         byte status = IO::in8(I8042_STATUS); |         u8 status = IO::in8(I8042_STATUS); | ||||||
|         if (!(((status & I8042_WHICH_BUFFER) == I8042_MOUSE_BUFFER) && (status & I8042_BUFFER_FULL))) |         if (!(((status & I8042_WHICH_BUFFER) == I8042_MOUSE_BUFFER) && (status & I8042_BUFFER_FULL))) | ||||||
|             return; |             return; | ||||||
| 
 | 
 | ||||||
|         byte data = IO::in8(I8042_BUFFER); |         u8 data = IO::in8(I8042_BUFFER); | ||||||
|         m_data[m_data_state] = data; |         m_data[m_data_state] = data; | ||||||
| 
 | 
 | ||||||
|         auto commit_packet = [&] { |         auto commit_packet = [&] { | ||||||
|  | @ -113,13 +113,13 @@ void PS2MouseDevice::parse_data_packet() | ||||||
|     m_queue.enqueue(packet); |     m_queue.enqueue(packet); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void PS2MouseDevice::wait_then_write(byte port, byte data) | void PS2MouseDevice::wait_then_write(u8 port, u8 data) | ||||||
| { | { | ||||||
|     prepare_for_output(); |     prepare_for_output(); | ||||||
|     IO::out8(port, data); |     IO::out8(port, data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| byte PS2MouseDevice::wait_then_read(byte port) | u8 PS2MouseDevice::wait_then_read(u8 port) | ||||||
| { | { | ||||||
|     prepare_for_input(); |     prepare_for_input(); | ||||||
|     return IO::in8(port); |     return IO::in8(port); | ||||||
|  | @ -135,7 +135,7 @@ void PS2MouseDevice::initialize() | ||||||
| 
 | 
 | ||||||
|     // Enable the PS/2 mouse IRQ (12).
 |     // Enable the PS/2 mouse IRQ (12).
 | ||||||
|     // NOTE: The keyboard uses IRQ 1 (and is enabled by bit 0 in this register).
 |     // NOTE: The keyboard uses IRQ 1 (and is enabled by bit 0 in this register).
 | ||||||
|     byte status = wait_then_read(0x60) | 2; |     u8 status = wait_then_read(0x60) | 2; | ||||||
|     wait_then_write(0x64, 0x60); |     wait_then_write(0x64, 0x60); | ||||||
|     wait_then_write(0x60, status); |     wait_then_write(0x60, status); | ||||||
| 
 | 
 | ||||||
|  | @ -149,7 +149,7 @@ void PS2MouseDevice::initialize() | ||||||
| 
 | 
 | ||||||
|     mouse_write(PS2MOUSE_GET_DEVICE_ID); |     mouse_write(PS2MOUSE_GET_DEVICE_ID); | ||||||
|     expect_ack(); |     expect_ack(); | ||||||
|     byte device_id = mouse_read(); |     u8 device_id = mouse_read(); | ||||||
| 
 | 
 | ||||||
|     if (device_id != PS2MOUSE_INTELLIMOUSE_ID) { |     if (device_id != PS2MOUSE_INTELLIMOUSE_ID) { | ||||||
|         // Send magical wheel initiation sequence.
 |         // Send magical wheel initiation sequence.
 | ||||||
|  | @ -183,7 +183,7 @@ void PS2MouseDevice::initialize() | ||||||
| 
 | 
 | ||||||
| void PS2MouseDevice::expect_ack() | void PS2MouseDevice::expect_ack() | ||||||
| { | { | ||||||
|     byte data = mouse_read(); |     u8 data = mouse_read(); | ||||||
|     ASSERT(data == I8042_ACK); |     ASSERT(data == I8042_ACK); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -203,7 +203,7 @@ void PS2MouseDevice::prepare_for_output() | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void PS2MouseDevice::mouse_write(byte data) | void PS2MouseDevice::mouse_write(u8 data) | ||||||
| { | { | ||||||
|     prepare_for_output(); |     prepare_for_output(); | ||||||
|     IO::out8(0x64, 0xd4); |     IO::out8(0x64, 0xd4); | ||||||
|  | @ -211,7 +211,7 @@ void PS2MouseDevice::mouse_write(byte data) | ||||||
|     IO::out8(0x60, data); |     IO::out8(0x60, data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| byte PS2MouseDevice::mouse_read() | u8 PS2MouseDevice::mouse_read() | ||||||
| { | { | ||||||
|     prepare_for_input(); |     prepare_for_input(); | ||||||
|     return IO::in8(0x60); |     return IO::in8(0x60); | ||||||
|  | @ -222,7 +222,7 @@ bool PS2MouseDevice::can_read(FileDescription&) const | ||||||
|     return !m_queue.is_empty(); |     return !m_queue.is_empty(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t PS2MouseDevice::read(FileDescription&, byte* buffer, ssize_t size) | ssize_t PS2MouseDevice::read(FileDescription&, u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     ssize_t nread = 0; |     ssize_t nread = 0; | ||||||
|     while (nread < size) { |     while (nread < size) { | ||||||
|  | @ -238,7 +238,7 @@ ssize_t PS2MouseDevice::read(FileDescription&, byte* buffer, ssize_t size) | ||||||
|     return nread; |     return nread; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t PS2MouseDevice::write(FileDescription&, const byte*, ssize_t) | ssize_t PS2MouseDevice::write(FileDescription&, const u8*, ssize_t) | ||||||
| { | { | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -15,8 +15,8 @@ public: | ||||||
| 
 | 
 | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|  | @ -29,15 +29,15 @@ private: | ||||||
|     void initialize(); |     void initialize(); | ||||||
|     void prepare_for_input(); |     void prepare_for_input(); | ||||||
|     void prepare_for_output(); |     void prepare_for_output(); | ||||||
|     void mouse_write(byte); |     void mouse_write(u8); | ||||||
|     byte mouse_read(); |     u8 mouse_read(); | ||||||
|     void wait_then_write(byte port, byte data); |     void wait_then_write(u8 port, u8 data); | ||||||
|     byte wait_then_read(byte port); |     u8 wait_then_read(u8 port); | ||||||
|     void parse_data_packet(); |     void parse_data_packet(); | ||||||
|     void expect_ack(); |     void expect_ack(); | ||||||
| 
 | 
 | ||||||
|     CircularQueue<MousePacket, 100> m_queue; |     CircularQueue<MousePacket, 100> m_queue; | ||||||
|     byte m_data_state { 0 }; |     u8 m_data_state { 0 }; | ||||||
|     byte m_data[4]; |     u8 m_data[4]; | ||||||
|     bool m_has_wheel { false }; |     bool m_has_wheel { false }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -10,10 +10,10 @@ RandomDevice::~RandomDevice() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static dword next = 1; | static u32 next = 1; | ||||||
| 
 | 
 | ||||||
| #define MY_RAND_MAX 4294967295U | #define MY_RAND_MAX 4294967295U | ||||||
| dword RandomDevice::random_value() | u32 RandomDevice::random_value() | ||||||
| { | { | ||||||
|     next = next * 1103515245 + 12345; |     next = next * 1103515245 + 12345; | ||||||
|     return next; |     return next; | ||||||
|  | @ -31,18 +31,18 @@ bool RandomDevice::can_read(FileDescription&) const | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t RandomDevice::read(FileDescription&, byte* buffer, ssize_t size) | ssize_t RandomDevice::read(FileDescription&, u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     const int range = 'z' - 'a'; |     const int range = 'z' - 'a'; | ||||||
|     ssize_t nread = min(size, PAGE_SIZE); |     ssize_t nread = min(size, PAGE_SIZE); | ||||||
|     for (ssize_t i = 0; i < nread; ++i) { |     for (ssize_t i = 0; i < nread; ++i) { | ||||||
|         dword r = random_value() % range; |         u32 r = random_value() % range; | ||||||
|         buffer[i] = (byte)('a' + r); |         buffer[i] = (u8)('a' + r); | ||||||
|     } |     } | ||||||
|     return nread; |     return nread; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t RandomDevice::write(FileDescription&, const byte*, ssize_t size) | ssize_t RandomDevice::write(FileDescription&, const u8*, ssize_t size) | ||||||
| { | { | ||||||
|     // FIXME: Use input for entropy? I guess that could be a neat feature?
 |     // FIXME: Use input for entropy? I guess that could be a neat feature?
 | ||||||
|     return min(PAGE_SIZE, size); |     return min(PAGE_SIZE, size); | ||||||
|  |  | ||||||
|  | @ -8,12 +8,12 @@ public: | ||||||
|     RandomDevice(); |     RandomDevice(); | ||||||
|     virtual ~RandomDevice() override; |     virtual ~RandomDevice() override; | ||||||
| 
 | 
 | ||||||
|     static dword random_value(); |     static u32 random_value(); | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
|     virtual const char* class_name() const override { return "RandomDevice"; } |     virtual const char* class_name() const override { return "RandomDevice"; } | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ bool SerialDevice::can_read(FileDescription&) const | ||||||
|     return (get_line_status() & DataReady) != 0; |     return (get_line_status() & DataReady) != 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t SerialDevice::read(FileDescription&, byte* buffer, ssize_t size) | ssize_t SerialDevice::read(FileDescription&, u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     if (!size) |     if (!size) | ||||||
|         return 0; |         return 0; | ||||||
|  | @ -35,7 +35,7 @@ bool SerialDevice::can_write(FileDescription&) const | ||||||
|     return (get_line_status() & EmptyTransmitterHoldingRegister) != 0; |     return (get_line_status() & EmptyTransmitterHoldingRegister) != 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t SerialDevice::write(FileDescription&, const byte* buffer, ssize_t size) | ssize_t SerialDevice::write(FileDescription&, const u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     if (!size) |     if (!size) | ||||||
|         return 0; |         return 0; | ||||||
|  |  | ||||||
|  | @ -13,9 +13,9 @@ public: | ||||||
| 
 | 
 | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual bool can_write(FileDescription&) const override; |     virtual bool can_write(FileDescription&) const override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
| 
 | 
 | ||||||
|     enum InterruptEnable { |     enum InterruptEnable { | ||||||
|         LowPowerMode = 0x01 << 5, |         LowPowerMode = 0x01 << 5, | ||||||
|  |  | ||||||
|  | @ -16,14 +16,14 @@ bool ZeroDevice::can_read(FileDescription&) const | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t ZeroDevice::read(FileDescription&, byte* buffer, ssize_t size) | ssize_t ZeroDevice::read(FileDescription&, u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     ssize_t count = min(PAGE_SIZE, size); |     ssize_t count = min(PAGE_SIZE, size); | ||||||
|     memset(buffer, 0, (size_t)count); |     memset(buffer, 0, (size_t)count); | ||||||
|     return count; |     return count; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t ZeroDevice::write(FileDescription&, const byte*, ssize_t size) | ssize_t ZeroDevice::write(FileDescription&, const u8*, ssize_t size) | ||||||
| { | { | ||||||
|     return min(PAGE_SIZE, size); |     return min(PAGE_SIZE, size); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -10,8 +10,8 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^CharacterDevice
 |     // ^CharacterDevice
 | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
|     virtual const char* class_name() const override { return "ZeroDevice"; } |     virtual const char* class_name() const override { return "ZeroDevice"; } | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ void DoubleBuffer::flip() | ||||||
|     compute_emptiness(); |     compute_emptiness(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t DoubleBuffer::write(const byte* data, ssize_t size) | ssize_t DoubleBuffer::write(const u8* data, ssize_t size) | ||||||
| { | { | ||||||
|     if (!size) |     if (!size) | ||||||
|         return 0; |         return 0; | ||||||
|  | @ -27,7 +27,7 @@ ssize_t DoubleBuffer::write(const byte* data, ssize_t size) | ||||||
|     return size; |     return size; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t DoubleBuffer::read(byte* data, ssize_t size) | ssize_t DoubleBuffer::read(u8* data, ssize_t size) | ||||||
| { | { | ||||||
|     if (!size) |     if (!size) | ||||||
|         return 0; |         return 0; | ||||||
|  |  | ||||||
|  | @ -12,8 +12,8 @@ public: | ||||||
|     { |     { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ssize_t write(const byte*, ssize_t); |     ssize_t write(const u8*, ssize_t); | ||||||
|     ssize_t read(byte*, ssize_t); |     ssize_t read(u8*, ssize_t); | ||||||
| 
 | 
 | ||||||
|     bool is_empty() const { return m_empty; } |     bool is_empty() const { return m_empty; } | ||||||
| 
 | 
 | ||||||
|  | @ -24,10 +24,10 @@ private: | ||||||
|     void flip(); |     void flip(); | ||||||
|     void compute_emptiness(); |     void compute_emptiness(); | ||||||
| 
 | 
 | ||||||
|     Vector<byte>* m_write_buffer { nullptr }; |     Vector<u8>* m_write_buffer { nullptr }; | ||||||
|     Vector<byte>* m_read_buffer { nullptr }; |     Vector<u8>* m_read_buffer { nullptr }; | ||||||
|     Vector<byte> m_buffer1; |     Vector<u8> m_buffer1; | ||||||
|     Vector<byte> m_buffer2; |     Vector<u8> m_buffer2; | ||||||
|     ssize_t m_read_buffer_index { 0 }; |     ssize_t m_read_buffer_index { 0 }; | ||||||
|     bool m_empty { true }; |     bool m_empty { true }; | ||||||
|     Lock m_lock { "DoubleBuffer" }; |     Lock m_lock { "DoubleBuffer" }; | ||||||
|  |  | ||||||
|  | @ -49,8 +49,8 @@ public: | ||||||
|     virtual bool can_read(FileDescription&) const = 0; |     virtual bool can_read(FileDescription&) const = 0; | ||||||
|     virtual bool can_write(FileDescription&) const = 0; |     virtual bool can_write(FileDescription&) const = 0; | ||||||
| 
 | 
 | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) = 0; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) = 0; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) = 0; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) = 0; | ||||||
|     virtual int ioctl(FileDescription&, unsigned request, unsigned arg); |     virtual int ioctl(FileDescription&, unsigned request, unsigned arg); | ||||||
|     virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t size, int prot); |     virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t size, int prot); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -126,7 +126,7 @@ ByteBuffer DiskBackedFS::read_blocks(unsigned index, unsigned count) const | ||||||
|     if (count == 1) |     if (count == 1) | ||||||
|         return read_block(index); |         return read_block(index); | ||||||
|     auto blocks = ByteBuffer::create_uninitialized(count * block_size()); |     auto blocks = ByteBuffer::create_uninitialized(count * block_size()); | ||||||
|     byte* out = blocks.pointer(); |     u8* out = blocks.pointer(); | ||||||
| 
 | 
 | ||||||
|     for (unsigned i = 0; i < count; ++i) { |     for (unsigned i = 0; i < count; ++i) { | ||||||
|         auto block = read_block(index + i); |         auto block = read_block(index + i); | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ | ||||||
| 
 | 
 | ||||||
| static const ssize_t max_inline_symlink_length = 60; | static const ssize_t max_inline_symlink_length = 60; | ||||||
| 
 | 
 | ||||||
| static byte to_ext2_file_type(mode_t mode) | static u8 to_ext2_file_type(mode_t mode) | ||||||
| { | { | ||||||
|     if (is_regular_file(mode)) |     if (is_regular_file(mode)) | ||||||
|         return EXT2_FT_REG_FILE; |         return EXT2_FT_REG_FILE; | ||||||
|  | @ -59,7 +59,7 @@ ByteBuffer Ext2FS::read_super_block() const | ||||||
| bool Ext2FS::write_super_block(const ext2_super_block& sb) | bool Ext2FS::write_super_block(const ext2_super_block& sb) | ||||||
| { | { | ||||||
|     LOCKER(m_lock); |     LOCKER(m_lock); | ||||||
|     const byte* raw = (const byte*)&sb; |     const u8* raw = (const u8*)&sb; | ||||||
|     bool success; |     bool success; | ||||||
|     success = device().write_block(2, raw); |     success = device().write_block(2, raw); | ||||||
|     ASSERT(success); |     ASSERT(success); | ||||||
|  | @ -479,7 +479,7 @@ RefPtr<Inode> Ext2FS::get_inode(InodeIdentifier inode) const | ||||||
|     return new_inode; |     return new_inode; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t Ext2FSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescription*) const | ssize_t Ext2FSInode::read_bytes(off_t offset, ssize_t count, u8* buffer, FileDescription*) const | ||||||
| { | { | ||||||
|     Locker inode_locker(m_lock); |     Locker inode_locker(m_lock); | ||||||
|     ASSERT(offset >= 0); |     ASSERT(offset >= 0); | ||||||
|  | @ -490,7 +490,7 @@ ssize_t Ext2FSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileD | ||||||
|     // This avoids wasting an entire block on short links. (Most links are short.)
 |     // This avoids wasting an entire block on short links. (Most links are short.)
 | ||||||
|     if (is_symlink() && size() < max_inline_symlink_length) { |     if (is_symlink() && size() < max_inline_symlink_length) { | ||||||
|         ssize_t nread = min((off_t)size() - offset, static_cast<off_t>(count)); |         ssize_t nread = min((off_t)size() - offset, static_cast<off_t>(count)); | ||||||
|         memcpy(buffer, ((const byte*)m_raw_inode.i_block) + offset, (size_t)nread); |         memcpy(buffer, ((const u8*)m_raw_inode.i_block) + offset, (size_t)nread); | ||||||
|         return nread; |         return nread; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -518,7 +518,7 @@ ssize_t Ext2FSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileD | ||||||
| 
 | 
 | ||||||
|     ssize_t nread = 0; |     ssize_t nread = 0; | ||||||
|     int remaining_count = min((off_t)count, (off_t)size() - offset); |     int remaining_count = min((off_t)count, (off_t)size() - offset); | ||||||
|     byte* out = buffer; |     u8* out = buffer; | ||||||
| 
 | 
 | ||||||
| #ifdef EXT2_DEBUG | #ifdef EXT2_DEBUG | ||||||
|     kprintf("Ext2FS: Reading up to %u bytes %d bytes into inode %u:%u to %p\n", count, offset, identifier().fsid(), identifier().index(), buffer); |     kprintf("Ext2FS: Reading up to %u bytes %d bytes into inode %u:%u to %p\n", count, offset, identifier().fsid(), identifier().index(), buffer); | ||||||
|  | @ -543,10 +543,10 @@ ssize_t Ext2FSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileD | ||||||
|     return nread; |     return nread; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool Ext2FSInode::resize(qword new_size) | bool Ext2FSInode::resize(u64 new_size) | ||||||
| { | { | ||||||
|     qword block_size = fs().block_size(); |     u64 block_size = fs().block_size(); | ||||||
|     qword old_size = size(); |     u64 old_size = size(); | ||||||
|     int blocks_needed_before = ceil_div(old_size, block_size); |     int blocks_needed_before = ceil_div(old_size, block_size); | ||||||
|     int blocks_needed_after = ceil_div(new_size, block_size); |     int blocks_needed_after = ceil_div(new_size, block_size); | ||||||
| 
 | 
 | ||||||
|  | @ -585,7 +585,7 @@ bool Ext2FSInode::resize(qword new_size) | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t Ext2FSInode::write_bytes(off_t offset, ssize_t count, const byte* data, FileDescription*) | ssize_t Ext2FSInode::write_bytes(off_t offset, ssize_t count, const u8* data, FileDescription*) | ||||||
| { | { | ||||||
|     ASSERT(offset >= 0); |     ASSERT(offset >= 0); | ||||||
|     ASSERT(count >= 0); |     ASSERT(count >= 0); | ||||||
|  | @ -598,7 +598,7 @@ ssize_t Ext2FSInode::write_bytes(off_t offset, ssize_t count, const byte* data, | ||||||
| #ifdef EXT2_DEBUG | #ifdef EXT2_DEBUG | ||||||
|             dbgprintf("Ext2FSInode: write_bytes poking into i_block array for inline symlink '%s' (%u bytes)\n", String((const char*)data, count).characters(), count); |             dbgprintf("Ext2FSInode: write_bytes poking into i_block array for inline symlink '%s' (%u bytes)\n", String((const char*)data, count).characters(), count); | ||||||
| #endif | #endif | ||||||
|             memcpy(((byte*)m_raw_inode.i_block) + offset, data, (size_t)count); |             memcpy(((u8*)m_raw_inode.i_block) + offset, data, (size_t)count); | ||||||
|             if ((offset + count) > (off_t)m_raw_inode.i_size) |             if ((offset + count) > (off_t)m_raw_inode.i_size) | ||||||
|                 m_raw_inode.i_size = offset + count; |                 m_raw_inode.i_size = offset + count; | ||||||
|             set_metadata_dirty(true); |             set_metadata_dirty(true); | ||||||
|  | @ -607,8 +607,8 @@ ssize_t Ext2FSInode::write_bytes(off_t offset, ssize_t count, const byte* data, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const ssize_t block_size = fs().block_size(); |     const ssize_t block_size = fs().block_size(); | ||||||
|     qword old_size = size(); |     u64 old_size = size(); | ||||||
|     qword new_size = max(static_cast<qword>(offset) + count, (qword)size()); |     u64 new_size = max(static_cast<u64>(offset) + count, (u64)size()); | ||||||
| 
 | 
 | ||||||
|     if (!resize(new_size)) |     if (!resize(new_size)) | ||||||
|         return -EIO; |         return -EIO; | ||||||
|  | @ -624,7 +624,7 @@ ssize_t Ext2FSInode::write_bytes(off_t offset, ssize_t count, const byte* data, | ||||||
| 
 | 
 | ||||||
|     ssize_t nwritten = 0; |     ssize_t nwritten = 0; | ||||||
|     int remaining_count = min((off_t)count, (off_t)new_size - offset); |     int remaining_count = min((off_t)count, (off_t)new_size - offset); | ||||||
|     const byte* in = data; |     const u8* in = data; | ||||||
| 
 | 
 | ||||||
| #ifdef EXT2_DEBUG | #ifdef EXT2_DEBUG | ||||||
|     dbgprintf("Ext2FSInode::write_bytes: Writing %u bytes %d bytes into inode %u:%u from %p\n", count, offset, fsid(), index(), data); |     dbgprintf("Ext2FSInode::write_bytes: Writing %u bytes %d bytes into inode %u:%u from %p\n", count, offset, fsid(), index(), data); | ||||||
|  | @ -733,20 +733,20 @@ bool Ext2FSInode::write_directory(const Vector<FS::DirectoryEntry>& entries) | ||||||
|             record_length += occupied_size - directory_size; |             record_length += occupied_size - directory_size; | ||||||
| 
 | 
 | ||||||
|         dbgprintf("* inode: %u", entry.inode.index()); |         dbgprintf("* inode: %u", entry.inode.index()); | ||||||
|         dbgprintf(", name_len: %u", word(entry.name_length)); |         dbgprintf(", name_len: %u", u16(entry.name_length)); | ||||||
|         dbgprintf(", rec_len: %u", word(record_length)); |         dbgprintf(", rec_len: %u", u16(record_length)); | ||||||
|         dbgprintf(", file_type: %u", byte(entry.file_type)); |         dbgprintf(", file_type: %u", u8(entry.file_type)); | ||||||
|         dbgprintf(", name: %s\n", entry.name); |         dbgprintf(", name: %s\n", entry.name); | ||||||
| 
 | 
 | ||||||
|         stream << dword(entry.inode.index()); |         stream << u32(entry.inode.index()); | ||||||
|         stream << word(record_length); |         stream << u16(record_length); | ||||||
|         stream << byte(entry.name_length); |         stream << u8(entry.name_length); | ||||||
|         stream << byte(entry.file_type); |         stream << u8(entry.file_type); | ||||||
|         stream << entry.name; |         stream << entry.name; | ||||||
| 
 | 
 | ||||||
|         int padding = record_length - entry.name_length - 8; |         int padding = record_length - entry.name_length - 8; | ||||||
|         for (int j = 0; j < padding; ++j) |         for (int j = 0; j < padding; ++j) | ||||||
|             stream << byte(0); |             stream << u8(0); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     stream.fill_to_end(0); |     stream.fill_to_end(0); | ||||||
|  |  | ||||||
|  | @ -25,12 +25,12 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^Inode
 |     // ^Inode
 | ||||||
|     virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescription*) const override; |     virtual ssize_t read_bytes(off_t, ssize_t, u8* buffer, FileDescription*) const override; | ||||||
|     virtual InodeMetadata metadata() const override; |     virtual InodeMetadata metadata() const override; | ||||||
|     virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) const override; |     virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) const override; | ||||||
|     virtual InodeIdentifier lookup(StringView name) override; |     virtual InodeIdentifier lookup(StringView name) override; | ||||||
|     virtual void flush_metadata() override; |     virtual void flush_metadata() override; | ||||||
|     virtual ssize_t write_bytes(off_t, ssize_t, const byte* data, FileDescription*) override; |     virtual ssize_t write_bytes(off_t, ssize_t, const u8* data, FileDescription*) override; | ||||||
|     virtual KResult add_child(InodeIdentifier child_id, const StringView& name, mode_t) override; |     virtual KResult add_child(InodeIdentifier child_id, const StringView& name, mode_t) override; | ||||||
|     virtual KResult remove_child(const StringView& name) override; |     virtual KResult remove_child(const StringView& name) override; | ||||||
|     virtual int set_atime(time_t) override; |     virtual int set_atime(time_t) override; | ||||||
|  | @ -45,7 +45,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     bool write_directory(const Vector<FS::DirectoryEntry>&); |     bool write_directory(const Vector<FS::DirectoryEntry>&); | ||||||
|     void populate_lookup_cache() const; |     void populate_lookup_cache() const; | ||||||
|     bool resize(qword); |     bool resize(u64); | ||||||
| 
 | 
 | ||||||
|     Ext2FS& fs(); |     Ext2FS& fs(); | ||||||
|     const Ext2FS& fs() const; |     const Ext2FS& fs() const; | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ Lockable<HashTable<FIFO*>>& all_fifos() | ||||||
|     return *s_table; |     return *s_table; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| RefPtr<FIFO> FIFO::from_fifo_id(dword id) | RefPtr<FIFO> FIFO::from_fifo_id(u32 id) | ||||||
| { | { | ||||||
|     auto* ptr = reinterpret_cast<FIFO*>(id); |     auto* ptr = reinterpret_cast<FIFO*>(id); | ||||||
|     LOCKER(all_fifos().lock()); |     LOCKER(all_fifos().lock()); | ||||||
|  | @ -93,7 +93,7 @@ bool FIFO::can_write(FileDescription&) const | ||||||
|     return m_buffer.bytes_in_write_buffer() < 4096 || !m_readers; |     return m_buffer.bytes_in_write_buffer() < 4096 || !m_readers; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t FIFO::read(FileDescription&, byte* buffer, ssize_t size) | ssize_t FIFO::read(FileDescription&, u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     if (!m_writers && m_buffer.is_empty()) |     if (!m_writers && m_buffer.is_empty()) | ||||||
|         return 0; |         return 0; | ||||||
|  | @ -107,7 +107,7 @@ ssize_t FIFO::read(FileDescription&, byte* buffer, ssize_t size) | ||||||
|     return nread; |     return nread; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t FIFO::write(FileDescription&, const byte* buffer, ssize_t size) | ssize_t FIFO::write(FileDescription&, const u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     if (!m_readers) { |     if (!m_readers) { | ||||||
|         current->process().send_signal(SIGPIPE, ¤t->process()); |         current->process().send_signal(SIGPIPE, ¤t->process()); | ||||||
|  |  | ||||||
|  | @ -8,13 +8,13 @@ class FileDescription; | ||||||
| 
 | 
 | ||||||
| class FIFO final : public File { | class FIFO final : public File { | ||||||
| public: | public: | ||||||
|     enum class Direction : byte { |     enum class Direction : u8 { | ||||||
|         Neither, |         Neither, | ||||||
|         Reader, |         Reader, | ||||||
|         Writer |         Writer | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     static RefPtr<FIFO> from_fifo_id(dword); |     static RefPtr<FIFO> from_fifo_id(u32); | ||||||
| 
 | 
 | ||||||
|     static NonnullRefPtr<FIFO> create(uid_t); |     static NonnullRefPtr<FIFO> create(uid_t); | ||||||
|     virtual ~FIFO() override; |     virtual ~FIFO() override; | ||||||
|  | @ -28,8 +28,8 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^File
 |     // ^File
 | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual bool can_read(FileDescription&) const override; |     virtual bool can_read(FileDescription&) const override; | ||||||
|     virtual bool can_write(FileDescription&) const override; |     virtual bool can_write(FileDescription&) const override; | ||||||
|     virtual String absolute_path(const FileDescription&) const override; |     virtual String absolute_path(const FileDescription&) const override; | ||||||
|  |  | ||||||
|  | @ -127,7 +127,7 @@ off_t FileDescription::seek(off_t offset, int whence) | ||||||
|     return m_current_offset; |     return m_current_offset; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t FileDescription::read(byte* buffer, ssize_t count) | ssize_t FileDescription::read(u8* buffer, ssize_t count) | ||||||
| { | { | ||||||
|     int nread = m_file->read(*this, buffer, count); |     int nread = m_file->read(*this, buffer, count); | ||||||
|     if (m_file->is_seekable()) |     if (m_file->is_seekable()) | ||||||
|  | @ -135,7 +135,7 @@ ssize_t FileDescription::read(byte* buffer, ssize_t count) | ||||||
|     return nread; |     return nread; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t FileDescription::write(const byte* data, ssize_t size) | ssize_t FileDescription::write(const u8* data, ssize_t size) | ||||||
| { | { | ||||||
|     int nwritten = m_file->write(*this, data, size); |     int nwritten = m_file->write(*this, data, size); | ||||||
|     if (m_file->is_seekable()) |     if (m_file->is_seekable()) | ||||||
|  | @ -167,7 +167,7 @@ bool FileDescription::is_directory() const | ||||||
|     return metadata().is_directory(); |     return metadata().is_directory(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t FileDescription::get_dir_entries(byte* buffer, ssize_t size) | ssize_t FileDescription::get_dir_entries(u8* buffer, ssize_t size) | ||||||
| { | { | ||||||
|     auto metadata = this->metadata(); |     auto metadata = this->metadata(); | ||||||
|     if (!metadata.is_valid()) |     if (!metadata.is_valid()) | ||||||
|  | @ -180,9 +180,9 @@ ssize_t FileDescription::get_dir_entries(byte* buffer, ssize_t size) | ||||||
|     auto temp_buffer = ByteBuffer::create_uninitialized(size_to_allocate); |     auto temp_buffer = ByteBuffer::create_uninitialized(size_to_allocate); | ||||||
|     BufferStream stream(temp_buffer); |     BufferStream stream(temp_buffer); | ||||||
|     VFS::the().traverse_directory_inode(*m_inode, [&stream](auto& entry) { |     VFS::the().traverse_directory_inode(*m_inode, [&stream](auto& entry) { | ||||||
|         stream << (dword)entry.inode.index(); |         stream << (u32)entry.inode.index(); | ||||||
|         stream << (byte)entry.file_type; |         stream << (u8)entry.file_type; | ||||||
|         stream << (dword)entry.name_length; |         stream << (u32)entry.name_length; | ||||||
|         stream << entry.name; |         stream << entry.name; | ||||||
|         return true; |         return true; | ||||||
|     }); |     }); | ||||||
|  | @ -318,7 +318,7 @@ const Socket* FileDescription::socket() const | ||||||
|     return static_cast<const Socket*>(m_file.ptr()); |     return static_cast<const Socket*>(m_file.ptr()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FileDescription::set_file_flags(dword flags) | void FileDescription::set_file_flags(u32 flags) | ||||||
| { | { | ||||||
|     m_is_blocking = !(flags & O_NONBLOCK); |     m_is_blocking = !(flags & O_NONBLOCK); | ||||||
|     m_should_append = flags & O_APPEND; |     m_should_append = flags & O_APPEND; | ||||||
|  |  | ||||||
|  | @ -30,8 +30,8 @@ public: | ||||||
|     int close(); |     int close(); | ||||||
| 
 | 
 | ||||||
|     off_t seek(off_t, int whence); |     off_t seek(off_t, int whence); | ||||||
|     ssize_t read(byte*, ssize_t); |     ssize_t read(u8*, ssize_t); | ||||||
|     ssize_t write(const byte* data, ssize_t); |     ssize_t write(const u8* data, ssize_t); | ||||||
|     KResult fstat(stat&); |     KResult fstat(stat&); | ||||||
| 
 | 
 | ||||||
|     KResult fchmod(mode_t); |     KResult fchmod(mode_t); | ||||||
|  | @ -39,7 +39,7 @@ public: | ||||||
|     bool can_read(); |     bool can_read(); | ||||||
|     bool can_write(); |     bool can_write(); | ||||||
| 
 | 
 | ||||||
|     ssize_t get_dir_entries(byte* buffer, ssize_t); |     ssize_t get_dir_entries(u8* buffer, ssize_t); | ||||||
| 
 | 
 | ||||||
|     ByteBuffer read_entire_file(); |     ByteBuffer read_entire_file(); | ||||||
| 
 | 
 | ||||||
|  | @ -74,8 +74,8 @@ public: | ||||||
|     bool should_append() const { return m_should_append; } |     bool should_append() const { return m_should_append; } | ||||||
|     void set_should_append(bool s) { m_should_append = s; } |     void set_should_append(bool s) { m_should_append = s; } | ||||||
| 
 | 
 | ||||||
|     dword file_flags() const { return m_file_flags; } |     u32 file_flags() const { return m_file_flags; } | ||||||
|     void set_file_flags(dword); |     void set_file_flags(u32); | ||||||
| 
 | 
 | ||||||
|     bool is_socket() const; |     bool is_socket() const; | ||||||
|     Socket* socket(); |     Socket* socket(); | ||||||
|  | @ -116,7 +116,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     ByteBuffer m_generator_cache; |     ByteBuffer m_generator_cache; | ||||||
| 
 | 
 | ||||||
|     dword m_file_flags { 0 }; |     u32 m_file_flags { 0 }; | ||||||
| 
 | 
 | ||||||
|     bool m_is_blocking { true }; |     bool m_is_blocking { true }; | ||||||
|     bool m_should_append { false }; |     bool m_should_append { false }; | ||||||
|  |  | ||||||
|  | @ -7,13 +7,13 @@ | ||||||
| #include <Kernel/VM/MemoryManager.h> | #include <Kernel/VM/MemoryManager.h> | ||||||
| #include <LibC/errno_numbers.h> | #include <LibC/errno_numbers.h> | ||||||
| 
 | 
 | ||||||
| static dword s_lastFileSystemID; | static u32 s_lastFileSystemID; | ||||||
| static HashMap<dword, FS*>* s_fs_map; | static HashMap<u32, FS*>* s_fs_map; | ||||||
| 
 | 
 | ||||||
| static HashMap<dword, FS*>& all_fses() | static HashMap<u32, FS*>& all_fses() | ||||||
| { | { | ||||||
|     if (!s_fs_map) |     if (!s_fs_map) | ||||||
|         s_fs_map = new HashMap<dword, FS*>(); |         s_fs_map = new HashMap<u32, FS*>(); | ||||||
|     return *s_fs_map; |     return *s_fs_map; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -28,7 +28,7 @@ FS::~FS() | ||||||
|     all_fses().remove(m_fsid); |     all_fses().remove(m_fsid); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| FS* FS::from_fsid(dword id) | FS* FS::from_fsid(u32 id) | ||||||
| { | { | ||||||
|     auto it = all_fses().find(id); |     auto it = all_fses().find(id); | ||||||
|     if (it != all_fses().end()) |     if (it != all_fses().end()) | ||||||
|  | @ -36,7 +36,7 @@ FS* FS::from_fsid(dword id) | ||||||
|     return nullptr; |     return nullptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| FS::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, byte ft) | FS::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, u8 ft) | ||||||
|     : name_length(strlen(n)) |     : name_length(strlen(n)) | ||||||
|     , inode(i) |     , inode(i) | ||||||
|     , file_type(ft) |     , file_type(ft) | ||||||
|  | @ -45,7 +45,7 @@ FS::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, byte ft) | ||||||
|     name[name_length] = '\0'; |     name[name_length] = '\0'; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| FS::DirectoryEntry::DirectoryEntry(const char* n, int nl, InodeIdentifier i, byte ft) | FS::DirectoryEntry::DirectoryEntry(const char* n, int nl, InodeIdentifier i, u8 ft) | ||||||
|     : name_length(nl) |     : name_length(nl) | ||||||
|     , inode(i) |     , inode(i) | ||||||
|     , file_type(ft) |     , file_type(ft) | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| #include <Kernel/KResult.h> | #include <Kernel/KResult.h> | ||||||
| #include <Kernel/Lock.h> | #include <Kernel/Lock.h> | ||||||
| 
 | 
 | ||||||
| static const dword mepoch = 476763780; | static const u32 mepoch = 476763780; | ||||||
| 
 | 
 | ||||||
| class Inode; | class Inode; | ||||||
| class FileDescription; | class FileDescription; | ||||||
|  | @ -30,7 +30,7 @@ public: | ||||||
|     virtual ~FS(); |     virtual ~FS(); | ||||||
| 
 | 
 | ||||||
|     unsigned fsid() const { return m_fsid; } |     unsigned fsid() const { return m_fsid; } | ||||||
|     static FS* from_fsid(dword); |     static FS* from_fsid(u32); | ||||||
|     static void sync(); |     static void sync(); | ||||||
|     static void lock_all(); |     static void lock_all(); | ||||||
| 
 | 
 | ||||||
|  | @ -46,12 +46,12 @@ public: | ||||||
|     virtual unsigned free_inode_count() const { return 0; } |     virtual unsigned free_inode_count() const { return 0; } | ||||||
| 
 | 
 | ||||||
|     struct DirectoryEntry { |     struct DirectoryEntry { | ||||||
|         DirectoryEntry(const char* name, InodeIdentifier, byte file_type); |         DirectoryEntry(const char* name, InodeIdentifier, u8 file_type); | ||||||
|         DirectoryEntry(const char* name, int name_length, InodeIdentifier, byte file_type); |         DirectoryEntry(const char* name, int name_length, InodeIdentifier, u8 file_type); | ||||||
|         char name[256]; |         char name[256]; | ||||||
|         int name_length { 0 }; |         int name_length { 0 }; | ||||||
|         InodeIdentifier inode; |         InodeIdentifier inode; | ||||||
|         byte file_type { 0 }; |         u8 file_type { 0 }; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     virtual RefPtr<Inode> create_inode(InodeIdentifier parentInode, const String& name, mode_t, off_t size, dev_t, int& error) = 0; |     virtual RefPtr<Inode> create_inode(InodeIdentifier parentInode, const String& name, mode_t, off_t size, dev_t, int& error) = 0; | ||||||
|  |  | ||||||
|  | @ -35,7 +35,7 @@ ByteBuffer Inode::read_entire(FileDescription* descriptor) const | ||||||
|     StringBuilder builder(initial_size); |     StringBuilder builder(initial_size); | ||||||
| 
 | 
 | ||||||
|     ssize_t nread; |     ssize_t nread; | ||||||
|     byte buffer[4096]; |     u8 buffer[4096]; | ||||||
|     off_t offset = 0; |     off_t offset = 0; | ||||||
|     for (;;) { |     for (;;) { | ||||||
|         nread = read_bytes(offset, sizeof(buffer), buffer, descriptor); |         nread = read_bytes(offset, sizeof(buffer), buffer, descriptor); | ||||||
|  | @ -76,7 +76,7 @@ void Inode::will_be_destroyed() | ||||||
|         flush_metadata(); |         flush_metadata(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Inode::inode_contents_changed(off_t offset, ssize_t size, const byte* data) | void Inode::inode_contents_changed(off_t offset, ssize_t size, const u8* data) | ||||||
| { | { | ||||||
|     if (m_vmo) |     if (m_vmo) | ||||||
|         m_vmo->inode_contents_changed({}, offset, size, data); |         m_vmo->inode_contents_changed({}, offset, size, data); | ||||||
|  |  | ||||||
|  | @ -39,10 +39,10 @@ public: | ||||||
| 
 | 
 | ||||||
|     ByteBuffer read_entire(FileDescription* = nullptr) const; |     ByteBuffer read_entire(FileDescription* = nullptr) const; | ||||||
| 
 | 
 | ||||||
|     virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescription*) const = 0; |     virtual ssize_t read_bytes(off_t, ssize_t, u8* buffer, FileDescription*) const = 0; | ||||||
|     virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) const = 0; |     virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) const = 0; | ||||||
|     virtual InodeIdentifier lookup(StringView name) = 0; |     virtual InodeIdentifier lookup(StringView name) = 0; | ||||||
|     virtual ssize_t write_bytes(off_t, ssize_t, const byte* data, FileDescription*) = 0; |     virtual ssize_t write_bytes(off_t, ssize_t, const u8* data, FileDescription*) = 0; | ||||||
|     virtual KResult add_child(InodeIdentifier child_id, const StringView& name, mode_t) = 0; |     virtual KResult add_child(InodeIdentifier child_id, const StringView& name, mode_t) = 0; | ||||||
|     virtual KResult remove_child(const StringView& name) = 0; |     virtual KResult remove_child(const StringView& name) = 0; | ||||||
|     virtual size_t directory_entry_count() const = 0; |     virtual size_t directory_entry_count() const = 0; | ||||||
|  | @ -76,7 +76,7 @@ public: | ||||||
| protected: | protected: | ||||||
|     Inode(FS& fs, unsigned index); |     Inode(FS& fs, unsigned index); | ||||||
|     void set_metadata_dirty(bool b) { m_metadata_dirty = b; } |     void set_metadata_dirty(bool b) { m_metadata_dirty = b; } | ||||||
|     void inode_contents_changed(off_t, ssize_t, const byte*); |     void inode_contents_changed(off_t, ssize_t, const u8*); | ||||||
|     void inode_size_changed(size_t old_size, size_t new_size); |     void inode_size_changed(size_t old_size, size_t new_size); | ||||||
| 
 | 
 | ||||||
|     mutable Lock m_lock { "Inode" }; |     mutable Lock m_lock { "Inode" }; | ||||||
|  |  | ||||||
|  | @ -13,12 +13,12 @@ InodeFile::~InodeFile() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t InodeFile::read(FileDescription& description, byte* buffer, ssize_t count) | ssize_t InodeFile::read(FileDescription& description, u8* buffer, ssize_t count) | ||||||
| { | { | ||||||
|     return m_inode->read_bytes(description.offset(), count, buffer, &description); |     return m_inode->read_bytes(description.offset(), count, buffer, &description); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t InodeFile::write(FileDescription& description, const byte* data, ssize_t count) | ssize_t InodeFile::write(FileDescription& description, const u8* data, ssize_t count) | ||||||
| { | { | ||||||
|     return m_inode->write_bytes(description.offset(), count, data, &description); |     return m_inode->write_bytes(description.offset(), count, data, &description); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -19,8 +19,8 @@ public: | ||||||
|     virtual bool can_read(FileDescription&) const override { return true; } |     virtual bool can_read(FileDescription&) const override { return true; } | ||||||
|     virtual bool can_write(FileDescription&) const override { return true; } |     virtual bool can_write(FileDescription&) const override { return true; } | ||||||
| 
 | 
 | ||||||
|     virtual ssize_t read(FileDescription&, byte*, ssize_t) override; |     virtual ssize_t read(FileDescription&, u8*, ssize_t) override; | ||||||
|     virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; |     virtual ssize_t write(FileDescription&, const u8*, ssize_t) override; | ||||||
|     virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t size, int prot) override; |     virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t size, int prot) override; | ||||||
| 
 | 
 | ||||||
|     virtual String absolute_path(const FileDescription&) const override; |     virtual String absolute_path(const FileDescription&) const override; | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ struct InodeMetadata; | ||||||
| class InodeIdentifier { | class InodeIdentifier { | ||||||
| public: | public: | ||||||
|     InodeIdentifier() {} |     InodeIdentifier() {} | ||||||
|     InodeIdentifier(dword fsid, dword inode) |     InodeIdentifier(u32 fsid, u32 inode) | ||||||
|         : m_fsid(fsid) |         : m_fsid(fsid) | ||||||
|         , m_index(inode) |         , m_index(inode) | ||||||
|     { |     { | ||||||
|  | @ -18,8 +18,8 @@ public: | ||||||
| 
 | 
 | ||||||
|     bool is_valid() const { return m_fsid != 0 && m_index != 0; } |     bool is_valid() const { return m_fsid != 0 && m_index != 0; } | ||||||
| 
 | 
 | ||||||
|     dword fsid() const { return m_fsid; } |     u32 fsid() const { return m_fsid; } | ||||||
|     dword index() const { return m_index; } |     u32 index() const { return m_index; } | ||||||
| 
 | 
 | ||||||
|     FS* fs(); |     FS* fs(); | ||||||
|     const FS* fs() const; |     const FS* fs() const; | ||||||
|  | @ -39,6 +39,6 @@ public: | ||||||
|     String to_string() const { return String::format("%u:%u", m_fsid, m_index); } |     String to_string() const { return String::format("%u:%u", m_fsid, m_index); } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     dword m_fsid { 0 }; |     u32 m_fsid { 0 }; | ||||||
|     dword m_index { 0 }; |     u32 m_index { 0 }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ | ||||||
| 
 | 
 | ||||||
| class Process; | class Process; | ||||||
| 
 | 
 | ||||||
| inline constexpr dword encoded_device(unsigned major, unsigned minor) | inline constexpr u32 encoded_device(unsigned major, unsigned minor) | ||||||
| { | { | ||||||
|     return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); |     return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -125,7 +125,7 @@ static inline InodeIdentifier to_parent_id(const InodeIdentifier& identifier) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #if 0 | #if 0 | ||||||
| static inline byte to_unused_metadata(const InodeIdentifier& identifier) | static inline u8 to_unused_metadata(const InodeIdentifier& identifier) | ||||||
| { | { | ||||||
|     return (identifier.index() >> 8) & 0xf; |     return (identifier.index() >> 8) & 0xf; | ||||||
| } | } | ||||||
|  | @ -254,7 +254,7 @@ ByteBuffer procfs$pci(InodeIdentifier) | ||||||
| ByteBuffer procfs$uptime(InodeIdentifier) | ByteBuffer procfs$uptime(InodeIdentifier) | ||||||
| { | { | ||||||
|     StringBuilder builder; |     StringBuilder builder; | ||||||
|     builder.appendf("%u\n", (dword)(g_uptime / 1000)); |     builder.appendf("%u\n", (u32)(g_uptime / 1000)); | ||||||
|     return builder.to_byte_buffer(); |     return builder.to_byte_buffer(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -317,7 +317,7 @@ ByteBuffer procfs$pid_stack(InodeIdentifier identifier) | ||||||
|     auto& process = handle->process(); |     auto& process = handle->process(); | ||||||
|     ProcessPagingScope paging_scope(process); |     ProcessPagingScope paging_scope(process); | ||||||
|     struct RecognizedSymbol { |     struct RecognizedSymbol { | ||||||
|         dword address; |         u32 address; | ||||||
|         const KSym* ksym; |         const KSym* ksym; | ||||||
|     }; |     }; | ||||||
|     StringBuilder builder; |     StringBuilder builder; | ||||||
|  | @ -325,8 +325,8 @@ ByteBuffer procfs$pid_stack(InodeIdentifier identifier) | ||||||
|         builder.appendf("Thread %d:\n", thread.tid()); |         builder.appendf("Thread %d:\n", thread.tid()); | ||||||
|         Vector<RecognizedSymbol, 64> recognized_symbols; |         Vector<RecognizedSymbol, 64> recognized_symbols; | ||||||
|         recognized_symbols.append({ thread.tss().eip, ksymbolicate(thread.tss().eip) }); |         recognized_symbols.append({ thread.tss().eip, ksymbolicate(thread.tss().eip) }); | ||||||
|         for (dword* stack_ptr = (dword*)thread.frame_ptr(); process.validate_read_from_kernel(VirtualAddress((dword)stack_ptr)); stack_ptr = (dword*)*stack_ptr) { |         for (u32* stack_ptr = (u32*)thread.frame_ptr(); process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr)); stack_ptr = (u32*)*stack_ptr) { | ||||||
|             dword retaddr = stack_ptr[1]; |             u32 retaddr = stack_ptr[1]; | ||||||
|             recognized_symbols.append({ retaddr, ksymbolicate(retaddr) }); |             recognized_symbols.append({ retaddr, ksymbolicate(retaddr) }); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -397,7 +397,7 @@ ByteBuffer procfs$self(InodeIdentifier) | ||||||
| { | { | ||||||
|     char buffer[16]; |     char buffer[16]; | ||||||
|     ksprintf(buffer, "%u", current->pid()); |     ksprintf(buffer, "%u", current->pid()); | ||||||
|     return ByteBuffer::copy((const byte*)buffer, strlen(buffer)); |     return ByteBuffer::copy((const u8*)buffer, strlen(buffer)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ByteBuffer procfs$mm(InodeIdentifier) | ByteBuffer procfs$mm(InodeIdentifier) | ||||||
|  | @ -471,28 +471,28 @@ ByteBuffer procfs$cpuinfo(InodeIdentifier) | ||||||
|     { |     { | ||||||
|         CPUID cpuid(0); |         CPUID cpuid(0); | ||||||
|         builder.appendf("cpuid:     "); |         builder.appendf("cpuid:     "); | ||||||
|         auto emit_dword = [&](dword value) { |         auto emit_u32 = [&](u32 value) { | ||||||
|             builder.appendf("%c%c%c%c", |             builder.appendf("%c%c%c%c", | ||||||
|                 value & 0xff, |                 value & 0xff, | ||||||
|                 (value >> 8) & 0xff, |                 (value >> 8) & 0xff, | ||||||
|                 (value >> 16) & 0xff, |                 (value >> 16) & 0xff, | ||||||
|                 (value >> 24) & 0xff); |                 (value >> 24) & 0xff); | ||||||
|         }; |         }; | ||||||
|         emit_dword(cpuid.ebx()); |         emit_u32(cpuid.ebx()); | ||||||
|         emit_dword(cpuid.edx()); |         emit_u32(cpuid.edx()); | ||||||
|         emit_dword(cpuid.ecx()); |         emit_u32(cpuid.ecx()); | ||||||
|         builder.appendf("\n"); |         builder.appendf("\n"); | ||||||
|     } |     } | ||||||
|     { |     { | ||||||
|         CPUID cpuid(1); |         CPUID cpuid(1); | ||||||
|         dword stepping = cpuid.eax() & 0xf; |         u32 stepping = cpuid.eax() & 0xf; | ||||||
|         dword model = (cpuid.eax() >> 4) & 0xf; |         u32 model = (cpuid.eax() >> 4) & 0xf; | ||||||
|         dword family = (cpuid.eax() >> 8) & 0xf; |         u32 family = (cpuid.eax() >> 8) & 0xf; | ||||||
|         dword type = (cpuid.eax() >> 12) & 0x3; |         u32 type = (cpuid.eax() >> 12) & 0x3; | ||||||
|         dword extended_model = (cpuid.eax() >> 16) & 0xf; |         u32 extended_model = (cpuid.eax() >> 16) & 0xf; | ||||||
|         dword extended_family = (cpuid.eax() >> 20) & 0xff; |         u32 extended_family = (cpuid.eax() >> 20) & 0xff; | ||||||
|         dword display_model; |         u32 display_model; | ||||||
|         dword display_family; |         u32 display_family; | ||||||
|         if (family == 15) { |         if (family == 15) { | ||||||
|             display_family = family + extended_family; |             display_family = family + extended_family; | ||||||
|             display_model = model + (extended_model << 4); |             display_model = model + (extended_model << 4); | ||||||
|  | @ -512,8 +512,8 @@ ByteBuffer procfs$cpuinfo(InodeIdentifier) | ||||||
|         // FIXME: Check first that this is supported by calling CPUID with eax=0x80000000
 |         // FIXME: Check first that this is supported by calling CPUID with eax=0x80000000
 | ||||||
|         //        and verifying that the returned eax>=0x80000004.
 |         //        and verifying that the returned eax>=0x80000004.
 | ||||||
|         char buffer[48]; |         char buffer[48]; | ||||||
|         dword* bufptr = reinterpret_cast<dword*>(buffer); |         u32* bufptr = reinterpret_cast<u32*>(buffer); | ||||||
|         auto copy_brand_string_part_to_buffer = [&](dword i) { |         auto copy_brand_string_part_to_buffer = [&](u32 i) { | ||||||
|             CPUID cpuid(0x80000002 + i); |             CPUID cpuid(0x80000002 + i); | ||||||
|             *bufptr++ = cpuid.eax(); |             *bufptr++ = cpuid.eax(); | ||||||
|             *bufptr++ = cpuid.ebx(); |             *bufptr++ = cpuid.ebx(); | ||||||
|  | @ -858,7 +858,7 @@ InodeMetadata ProcFSInode::metadata() const | ||||||
|     return metadata; |     return metadata; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t ProcFSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescription* description) const | ssize_t ProcFSInode::read_bytes(off_t offset, ssize_t count, u8* buffer, FileDescription* description) const | ||||||
| { | { | ||||||
| #ifdef PROCFS_DEBUG | #ifdef PROCFS_DEBUG | ||||||
|     dbgprintf("ProcFS: read_bytes %u\n", index()); |     dbgprintf("ProcFS: read_bytes %u\n", index()); | ||||||
|  | @ -1061,7 +1061,7 @@ void ProcFSInode::flush_metadata() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t ProcFSInode::write_bytes(off_t offset, ssize_t size, const byte* buffer, FileDescription*) | ssize_t ProcFSInode::write_bytes(off_t offset, ssize_t size, const u8* buffer, FileDescription*) | ||||||
| { | { | ||||||
|     auto* directory_entry = fs().get_directory_entry(identifier()); |     auto* directory_entry = fs().get_directory_entry(identifier()); | ||||||
|     if (!directory_entry || !directory_entry->write_callback) |     if (!directory_entry || !directory_entry->write_callback) | ||||||
|  |  | ||||||
|  | @ -80,12 +80,12 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^Inode
 |     // ^Inode
 | ||||||
|     virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescription*) const override; |     virtual ssize_t read_bytes(off_t, ssize_t, u8* buffer, FileDescription*) const override; | ||||||
|     virtual InodeMetadata metadata() const override; |     virtual InodeMetadata metadata() const override; | ||||||
|     virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) const override; |     virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) const override; | ||||||
|     virtual InodeIdentifier lookup(StringView name) override; |     virtual InodeIdentifier lookup(StringView name) override; | ||||||
|     virtual void flush_metadata() override; |     virtual void flush_metadata() override; | ||||||
|     virtual ssize_t write_bytes(off_t, ssize_t, const byte* buffer, FileDescription*) override; |     virtual ssize_t write_bytes(off_t, ssize_t, const u8* buffer, FileDescription*) override; | ||||||
|     virtual KResult add_child(InodeIdentifier child_id, const StringView& name, mode_t) override; |     virtual KResult add_child(InodeIdentifier child_id, const StringView& name, mode_t) override; | ||||||
|     virtual KResult remove_child(const StringView& name) override; |     virtual KResult remove_child(const StringView& name) override; | ||||||
|     virtual size_t directory_entry_count() const override; |     virtual size_t directory_entry_count() const override; | ||||||
|  |  | ||||||
|  | @ -185,7 +185,7 @@ InodeMetadata SynthFSInode::metadata() const | ||||||
|     return m_metadata; |     return m_metadata; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t SynthFSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescription* description) const | ssize_t SynthFSInode::read_bytes(off_t offset, ssize_t count, u8* buffer, FileDescription* description) const | ||||||
| { | { | ||||||
|     LOCKER(m_lock); |     LOCKER(m_lock); | ||||||
| #ifdef SYNTHFS_DEBUG | #ifdef SYNTHFS_DEBUG | ||||||
|  | @ -227,7 +227,7 @@ bool SynthFSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry& | ||||||
|     callback({ "..", 2, m_parent, 2 }); |     callback({ "..", 2, m_parent, 2 }); | ||||||
| 
 | 
 | ||||||
|     for (auto& child : m_children) |     for (auto& child : m_children) | ||||||
|         callback({ child->m_name.characters(), child->m_name.length(), child->m_metadata.inode, child->m_metadata.is_directory() ? (byte)2 : (byte)1 }); |         callback({ child->m_name.characters(), child->m_name.length(), child->m_metadata.inode, child->m_metadata.is_directory() ? (u8)2 : (u8)1 }); | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -250,7 +250,7 @@ void SynthFSInode::flush_metadata() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ssize_t SynthFSInode::write_bytes(off_t offset, ssize_t size, const byte* buffer, FileDescription*) | ssize_t SynthFSInode::write_bytes(off_t offset, ssize_t size, const u8* buffer, FileDescription*) | ||||||
| { | { | ||||||
|     LOCKER(m_lock); |     LOCKER(m_lock); | ||||||
|     if (!m_write_callback) |     if (!m_write_callback) | ||||||
|  |  | ||||||
|  | @ -57,12 +57,12 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     // ^Inode
 |     // ^Inode
 | ||||||
|     virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescription*) const override; |     virtual ssize_t read_bytes(off_t, ssize_t, u8* buffer, FileDescription*) const override; | ||||||
|     virtual InodeMetadata metadata() const override; |     virtual InodeMetadata metadata() const override; | ||||||
|     virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) const override; |     virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) const override; | ||||||
|     virtual InodeIdentifier lookup(StringView name) override; |     virtual InodeIdentifier lookup(StringView name) override; | ||||||
|     virtual void flush_metadata() override; |     virtual void flush_metadata() override; | ||||||
|     virtual ssize_t write_bytes(off_t, ssize_t, const byte* buffer, FileDescription*) override; |     virtual ssize_t write_bytes(off_t, ssize_t, const u8* buffer, FileDescription*) override; | ||||||
|     virtual KResult add_child(InodeIdentifier child_id, const StringView& name, mode_t) override; |     virtual KResult add_child(InodeIdentifier child_id, const StringView& name, mode_t) override; | ||||||
|     virtual KResult remove_child(const StringView& name) override; |     virtual KResult remove_child(const StringView& name) override; | ||||||
|     virtual size_t directory_entry_count() const override; |     virtual size_t directory_entry_count() const override; | ||||||
|  |  | ||||||
|  | @ -516,7 +516,7 @@ KResult VFS::symlink(StringView target, StringView linkpath, Custody& base) | ||||||
|     auto new_file = parent_inode.fs().create_inode(parent_inode.identifier(), p.basename(), 0120644, 0, 0, error); |     auto new_file = parent_inode.fs().create_inode(parent_inode.identifier(), p.basename(), 0120644, 0, 0, error); | ||||||
|     if (!new_file) |     if (!new_file) | ||||||
|         return KResult(error); |         return KResult(error); | ||||||
|     ssize_t nwritten = new_file->write_bytes(0, target.length(), (const byte*)target.characters(), nullptr); |     ssize_t nwritten = new_file->write_bytes(0, target.length(), (const u8*)target.characters(), nullptr); | ||||||
|     if (nwritten < 0) |     if (nwritten < 0) | ||||||
|         return KResult(nwritten); |         return KResult(nwritten); | ||||||
|     return KSuccess; |     return KSuccess; | ||||||
|  |  | ||||||
|  | @ -107,7 +107,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     RefPtr<Inode> m_root_inode; |     RefPtr<Inode> m_root_inode; | ||||||
|     Vector<OwnPtr<Mount>> m_mounts; |     Vector<OwnPtr<Mount>> m_mounts; | ||||||
|     HashMap<dword, Device*> m_devices; |     HashMap<u32, Device*> m_devices; | ||||||
| 
 | 
 | ||||||
|     RefPtr<Custody> m_root_custody; |     RefPtr<Custody> m_root_custody; | ||||||
| }; | }; | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								Kernel/IO.h
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								Kernel/IO.h
									
										
									
									
									
								
							|  | @ -4,34 +4,34 @@ | ||||||
| 
 | 
 | ||||||
| namespace IO { | namespace IO { | ||||||
| 
 | 
 | ||||||
| inline byte in8(word port) | inline u8 in8(u16 port) | ||||||
| { | { | ||||||
|     byte value; |     u8 value; | ||||||
|     asm volatile("inb %1, %0" |     asm volatile("inb %1, %0" | ||||||
|                  : "=a"(value) |                  : "=a"(value) | ||||||
|                  : "Nd"(port)); |                  : "Nd"(port)); | ||||||
|     return value; |     return value; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline word in16(word port) | inline u16 in16(u16 port) | ||||||
| { | { | ||||||
|     word value; |     u16 value; | ||||||
|     asm volatile("inw %1, %0" |     asm volatile("inw %1, %0" | ||||||
|                  : "=a"(value) |                  : "=a"(value) | ||||||
|                  : "Nd"(port)); |                  : "Nd"(port)); | ||||||
|     return value; |     return value; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline dword in32(word port) | inline u32 in32(u16 port) | ||||||
| { | { | ||||||
|     dword value; |     u32 value; | ||||||
|     asm volatile("inl %1, %0" |     asm volatile("inl %1, %0" | ||||||
|                  : "=a"(value) |                  : "=a"(value) | ||||||
|                  : "Nd"(port)); |                  : "Nd"(port)); | ||||||
|     return value; |     return value; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void repeated_in16(word port, byte* buffer, int buffer_size) | inline void repeated_in16(u16 port, u8* buffer, int buffer_size) | ||||||
| { | { | ||||||
|     asm volatile("rep insw" |     asm volatile("rep insw" | ||||||
|                  : "+D"(buffer), "+c"(buffer_size) |                  : "+D"(buffer), "+c"(buffer_size) | ||||||
|  | @ -39,22 +39,22 @@ inline void repeated_in16(word port, byte* buffer, int buffer_size) | ||||||
|                  : "memory"); |                  : "memory"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void out8(word port, byte value) | inline void out8(u16 port, u8 value) | ||||||
| { | { | ||||||
|     asm volatile("outb %0, %1" ::"a"(value), "Nd"(port)); |     asm volatile("outb %0, %1" ::"a"(value), "Nd"(port)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void out16(word port, word value) | inline void out16(u16 port, u16 value) | ||||||
| { | { | ||||||
|     asm volatile("outw %0, %1" ::"a"(value), "Nd"(port)); |     asm volatile("outw %0, %1" ::"a"(value), "Nd"(port)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void out32(word port, dword value) | inline void out32(u16 port, u32 value) | ||||||
| { | { | ||||||
|     asm volatile("outl %0, %1" ::"a"(value), "Nd"(port)); |     asm volatile("outl %0, %1" ::"a"(value), "Nd"(port)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void repeated_out16(word port, const byte* data, int data_size) | inline void repeated_out16(u16 port, const u8* data, int data_size) | ||||||
| { | { | ||||||
|     asm volatile("rep outsw" |     asm volatile("rep outsw" | ||||||
|                  : "+S"(data), "+c"(data_size) |                  : "+S"(data), "+c"(data_size) | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| #include "PIC.h" | #include "PIC.h" | ||||||
| #include <Kernel/Arch/i386/CPU.h> | #include <Kernel/Arch/i386/CPU.h> | ||||||
| 
 | 
 | ||||||
| IRQHandler::IRQHandler(byte irq) | IRQHandler::IRQHandler(u8 irq) | ||||||
|     : m_irq_number(irq) |     : m_irq_number(irq) | ||||||
| { | { | ||||||
|     register_irq_handler(m_irq_number, *this); |     register_irq_handler(m_irq_number, *this); | ||||||
|  |  | ||||||
|  | @ -7,14 +7,14 @@ public: | ||||||
|     virtual ~IRQHandler(); |     virtual ~IRQHandler(); | ||||||
|     virtual void handle_irq() = 0; |     virtual void handle_irq() = 0; | ||||||
| 
 | 
 | ||||||
|     byte irq_number() const { return m_irq_number; } |     u8 irq_number() const { return m_irq_number; } | ||||||
| 
 | 
 | ||||||
|     void enable_irq(); |     void enable_irq(); | ||||||
|     void disable_irq(); |     void disable_irq(); | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|     explicit IRQHandler(byte irq); |     explicit IRQHandler(u8 irq); | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     byte m_irq_number { 0 }; |     u8 m_irq_number { 0 }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -6,12 +6,12 @@ | ||||||
| #include <Kernel/FileSystem/FileDescription.h> | #include <Kernel/FileSystem/FileDescription.h> | ||||||
| 
 | 
 | ||||||
| static KSym* s_ksyms; | static KSym* s_ksyms; | ||||||
| dword ksym_lowest_address; | u32 ksym_lowest_address; | ||||||
| dword ksym_highest_address; | u32 ksym_highest_address; | ||||||
| dword ksym_count; | u32 ksym_count; | ||||||
| bool ksyms_ready; | bool ksyms_ready; | ||||||
| 
 | 
 | ||||||
| static byte parse_hex_digit(char nibble) | static u8 parse_hex_digit(char nibble) | ||||||
| { | { | ||||||
|     if (nibble >= '0' && nibble <= '9') |     if (nibble >= '0' && nibble <= '9') | ||||||
|         return nibble - '0'; |         return nibble - '0'; | ||||||
|  | @ -19,7 +19,7 @@ static byte parse_hex_digit(char nibble) | ||||||
|     return 10 + (nibble - 'a'); |     return 10 + (nibble - 'a'); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const KSym* ksymbolicate(dword address) | const KSym* ksymbolicate(u32 address) | ||||||
| { | { | ||||||
|     if (address < ksym_lowest_address || address > ksym_highest_address) |     if (address < ksym_lowest_address || address > ksym_highest_address) | ||||||
|         return nullptr; |         return nullptr; | ||||||
|  | @ -36,7 +36,7 @@ static void load_ksyms_from_data(const ByteBuffer& buffer) | ||||||
|     ksym_highest_address = 0; |     ksym_highest_address = 0; | ||||||
|     auto* bufptr = (const char*)buffer.pointer(); |     auto* bufptr = (const char*)buffer.pointer(); | ||||||
|     auto* start_of_name = bufptr; |     auto* start_of_name = bufptr; | ||||||
|     dword address = 0; |     u32 address = 0; | ||||||
| 
 | 
 | ||||||
|     for (unsigned i = 0; i < 8; ++i) |     for (unsigned i = 0; i < 8; ++i) | ||||||
|         ksym_count = (ksym_count << 4) | parse_hex_digit(*(bufptr++)); |         ksym_count = (ksym_count << 4) | parse_hex_digit(*(bufptr++)); | ||||||
|  | @ -76,7 +76,7 @@ static void load_ksyms_from_data(const ByteBuffer& buffer) | ||||||
|     ksyms_ready = true; |     ksyms_ready = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| [[gnu::noinline]] void dump_backtrace_impl(dword ebp, bool use_ksyms) | [[gnu::noinline]] void dump_backtrace_impl(u32 ebp, bool use_ksyms) | ||||||
| { | { | ||||||
|     if (!current) { |     if (!current) { | ||||||
|         //hang();
 |         //hang();
 | ||||||
|  | @ -87,21 +87,21 @@ static void load_ksyms_from_data(const ByteBuffer& buffer) | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     struct RecognizedSymbol { |     struct RecognizedSymbol { | ||||||
|         dword address; |         u32 address; | ||||||
|         const KSym* ksym; |         const KSym* ksym; | ||||||
|     }; |     }; | ||||||
|     int max_recognized_symbol_count = 256; |     int max_recognized_symbol_count = 256; | ||||||
|     RecognizedSymbol recognized_symbols[max_recognized_symbol_count]; |     RecognizedSymbol recognized_symbols[max_recognized_symbol_count]; | ||||||
|     int recognized_symbol_count = 0; |     int recognized_symbol_count = 0; | ||||||
|     if (use_ksyms) { |     if (use_ksyms) { | ||||||
|         for (dword* stack_ptr = (dword*)ebp; current->process().validate_read_from_kernel(VirtualAddress((dword)stack_ptr)); stack_ptr = (dword*)*stack_ptr) { |         for (u32* stack_ptr = (u32*)ebp; current->process().validate_read_from_kernel(VirtualAddress((u32)stack_ptr)); stack_ptr = (u32*)*stack_ptr) { | ||||||
|             dword retaddr = stack_ptr[1]; |             u32 retaddr = stack_ptr[1]; | ||||||
|             recognized_symbols[recognized_symbol_count++] = { retaddr, ksymbolicate(retaddr) }; |             recognized_symbols[recognized_symbol_count++] = { retaddr, ksymbolicate(retaddr) }; | ||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         for (dword* stack_ptr = (dword*)ebp; current->process().validate_read_from_kernel(VirtualAddress((dword)stack_ptr)); stack_ptr = (dword*)*stack_ptr) { |         for (u32* stack_ptr = (u32*)ebp; current->process().validate_read_from_kernel(VirtualAddress((u32)stack_ptr)); stack_ptr = (u32*)*stack_ptr) { | ||||||
|             dword retaddr = stack_ptr[1]; |             u32 retaddr = stack_ptr[1]; | ||||||
|             dbgprintf("%x (next: %x)\n", retaddr, stack_ptr ? (dword*)*stack_ptr : 0); |             dbgprintf("%x (next: %x)\n", retaddr, stack_ptr ? (u32*)*stack_ptr : 0); | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  | @ -139,7 +139,7 @@ void dump_backtrace() | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     TemporaryChange change(in_dump_backtrace, true); |     TemporaryChange change(in_dump_backtrace, true); | ||||||
|     dword ebp; |     u32 ebp; | ||||||
|     asm volatile("movl %%ebp, %%eax" |     asm volatile("movl %%ebp, %%eax" | ||||||
|                  : "=a"(ebp)); |                  : "=a"(ebp)); | ||||||
|     dump_backtrace_impl(ebp, ksyms_ready); |     dump_backtrace_impl(ebp, ksyms_ready); | ||||||
|  |  | ||||||
|  | @ -4,16 +4,16 @@ | ||||||
| #include <AK/Vector.h> | #include <AK/Vector.h> | ||||||
| 
 | 
 | ||||||
| struct KSym { | struct KSym { | ||||||
|     dword address; |     u32 address; | ||||||
|     const char* name; |     const char* name; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const KSym* ksymbolicate(dword address); | const KSym* ksymbolicate(u32 address); | ||||||
| void load_ksyms(); | void load_ksyms(); | ||||||
| void init_ksyms(); | void init_ksyms(); | ||||||
| 
 | 
 | ||||||
| extern bool ksyms_ready; | extern bool ksyms_ready; | ||||||
| extern dword ksym_lowest_address; | extern u32 ksym_lowest_address; | ||||||
| extern dword ksym_highest_address; | extern u32 ksym_highest_address; | ||||||
| 
 | 
 | ||||||
| void dump_backtrace(); | void dump_backtrace(); | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <AK/Types.h> | #include <AK/Types.h> | ||||||
| 
 | 
 | ||||||
| enum KeyCode : byte { | enum KeyCode : u8 { | ||||||
|     Key_Invalid = 0, |     Key_Invalid = 0, | ||||||
|     Key_Escape, |     Key_Escape, | ||||||
|     Key_Tab, |     Key_Tab, | ||||||
|  | @ -126,8 +126,8 @@ enum KeyModifier { | ||||||
| 
 | 
 | ||||||
| struct KeyEvent { | struct KeyEvent { | ||||||
|     KeyCode key { Key_Invalid }; |     KeyCode key { Key_Invalid }; | ||||||
|     byte character { 0 }; |     u8 character { 0 }; | ||||||
|     byte flags { 0 }; |     u8 flags { 0 }; | ||||||
|     bool alt() const { return flags & Mod_Alt; } |     bool alt() const { return flags & Mod_Alt; } | ||||||
|     bool ctrl() const { return flags & Mod_Ctrl; } |     bool ctrl() const { return flags & Mod_Ctrl; } | ||||||
|     bool shift() const { return flags & Mod_Shift; } |     bool shift() const { return flags & Mod_Shift; } | ||||||
|  |  | ||||||
|  | @ -9,9 +9,9 @@ | ||||||
| class Thread; | class Thread; | ||||||
| extern Thread* current; | extern Thread* current; | ||||||
| 
 | 
 | ||||||
| static inline dword CAS(volatile dword* mem, dword newval, dword oldval) | static inline u32 CAS(volatile u32* mem, u32 newval, u32 oldval) | ||||||
| { | { | ||||||
|     dword ret; |     u32 ret; | ||||||
|     asm volatile( |     asm volatile( | ||||||
|         "cmpxchgl %2, %1" |         "cmpxchgl %2, %1" | ||||||
|         : "=a"(ret), "+m"(*mem) |         : "=a"(ret), "+m"(*mem) | ||||||
|  | @ -35,8 +35,8 @@ public: | ||||||
|     const char* name() const { return m_name; } |     const char* name() const { return m_name; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     volatile dword m_lock { 0 }; |     volatile u32 m_lock { 0 }; | ||||||
|     dword m_level { 0 }; |     u32 m_level { 0 }; | ||||||
|     Thread* m_holder { nullptr }; |     Thread* m_holder { nullptr }; | ||||||
|     const char* m_name { nullptr }; |     const char* m_name { nullptr }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -4,5 +4,5 @@ struct MousePacket { | ||||||
|     int dx { 0 }; |     int dx { 0 }; | ||||||
|     int dy { 0 }; |     int dy { 0 }; | ||||||
|     int dz { 0 }; |     int dz { 0 }; | ||||||
|     byte buttons { 0 }; |     unsigned char buttons { 0 }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -3,18 +3,18 @@ | ||||||
| #include <AK/Types.h> | #include <AK/Types.h> | ||||||
| 
 | 
 | ||||||
| struct multiboot_aout_symbol_table { | struct multiboot_aout_symbol_table { | ||||||
|     dword tabsize; |     u32 tabsize; | ||||||
|     dword strsize; |     u32 strsize; | ||||||
|     dword addr; |     u32 addr; | ||||||
|     dword reserved; |     u32 reserved; | ||||||
| }; | }; | ||||||
| typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; | typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; | ||||||
| 
 | 
 | ||||||
| struct multiboot_elf_section_header_table { | struct multiboot_elf_section_header_table { | ||||||
|     dword num; |     u32 num; | ||||||
|     dword size; |     u32 size; | ||||||
|     dword addr; |     u32 addr; | ||||||
|     dword shndx; |     u32 shndx; | ||||||
| }; | }; | ||||||
| typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; | typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; | ||||||
| 
 | 
 | ||||||
|  | @ -25,30 +25,30 @@ typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_t | ||||||
| #define MULTIBOOT_MEMORY_BADRAM 5 | #define MULTIBOOT_MEMORY_BADRAM 5 | ||||||
| 
 | 
 | ||||||
| struct multiboot_mmap_entry { | struct multiboot_mmap_entry { | ||||||
|     dword size; |     u32 size; | ||||||
|     qword addr; |     u64 addr; | ||||||
|     qword len; |     u64 len; | ||||||
|     dword type; |     u32 type; | ||||||
| } __attribute__((packed)); | } __attribute__((packed)); | ||||||
| typedef struct multiboot_mmap_entry multiboot_memory_map_t; | typedef struct multiboot_mmap_entry multiboot_memory_map_t; | ||||||
| 
 | 
 | ||||||
| struct multiboot_info { | struct multiboot_info { | ||||||
|     // Multiboot info version number.
 |     // Multiboot info version number.
 | ||||||
|     dword flags; |     u32 flags; | ||||||
| 
 | 
 | ||||||
|     // Available memory from BIOS.
 |     // Available memory from BIOS.
 | ||||||
|     dword mem_lower; |     u32 mem_lower; | ||||||
|     dword mem_upper; |     u32 mem_upper; | ||||||
| 
 | 
 | ||||||
|     // "root" partition.
 |     // "root" partition.
 | ||||||
|     dword boot_device; |     u32 boot_device; | ||||||
| 
 | 
 | ||||||
|     // Kernel command line.
 |     // Kernel command line.
 | ||||||
|     dword cmdline; |     u32 cmdline; | ||||||
| 
 | 
 | ||||||
|     // Boot-Module list.
 |     // Boot-Module list.
 | ||||||
|     dword mods_count; |     u32 mods_count; | ||||||
|     dword mods_addr; |     u32 mods_addr; | ||||||
| 
 | 
 | ||||||
|     union { |     union { | ||||||
|         multiboot_aout_symbol_table_t aout_sym; |         multiboot_aout_symbol_table_t aout_sym; | ||||||
|  | @ -56,53 +56,53 @@ struct multiboot_info { | ||||||
|     } u; |     } u; | ||||||
| 
 | 
 | ||||||
|     // Memory Mapping buffer.
 |     // Memory Mapping buffer.
 | ||||||
|     dword mmap_length; |     u32 mmap_length; | ||||||
|     dword mmap_addr; |     u32 mmap_addr; | ||||||
| 
 | 
 | ||||||
|     // Drive Info buffer.
 |     // Drive Info buffer.
 | ||||||
|     dword drives_length; |     u32 drives_length; | ||||||
|     dword drives_addr; |     u32 drives_addr; | ||||||
| 
 | 
 | ||||||
|     // ROM configuration table.
 |     // ROM configuration table.
 | ||||||
|     dword config_table; |     u32 config_table; | ||||||
| 
 | 
 | ||||||
|     // Boot Loader Name.
 |     // Boot Loader Name.
 | ||||||
|     dword boot_loader_name; |     u32 boot_loader_name; | ||||||
| 
 | 
 | ||||||
|     // APM table.
 |     // APM table.
 | ||||||
|     dword apm_table; |     u32 apm_table; | ||||||
| 
 | 
 | ||||||
|     // Video.
 |     // Video.
 | ||||||
|     dword vbe_control_info; |     u32 vbe_control_info; | ||||||
|     dword vbe_mode_info; |     u32 vbe_mode_info; | ||||||
|     word vbe_mode; |     u16 vbe_mode; | ||||||
|     word vbe_interface_seg; |     u16 vbe_interface_seg; | ||||||
|     word vbe_interface_off; |     u16 vbe_interface_off; | ||||||
|     word vbe_interface_len; |     u16 vbe_interface_len; | ||||||
| 
 | 
 | ||||||
|     qword framebuffer_addr; |     u64 framebuffer_addr; | ||||||
|     dword framebuffer_pitch; |     u32 framebuffer_pitch; | ||||||
|     dword framebuffer_width; |     u32 framebuffer_width; | ||||||
|     dword framebuffer_height; |     u32 framebuffer_height; | ||||||
|     byte framebuffer_bpp; |     u8 framebuffer_bpp; | ||||||
| #define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 | #define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 | ||||||
| #define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 | #define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 | ||||||
| #define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 | #define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 | ||||||
|     byte framebuffer_type; |     u8 framebuffer_type; | ||||||
|     union { |     union { | ||||||
|         struct |         struct | ||||||
|         { |         { | ||||||
|             dword framebuffer_palette_addr; |             u32 framebuffer_palette_addr; | ||||||
|             word framebuffer_palette_num_colors; |             u16 framebuffer_palette_num_colors; | ||||||
|         }; |         }; | ||||||
|         struct |         struct | ||||||
|         { |         { | ||||||
|             byte framebuffer_red_field_position; |             u8 framebuffer_red_field_position; | ||||||
|             byte framebuffer_red_mask_size; |             u8 framebuffer_red_mask_size; | ||||||
|             byte framebuffer_green_field_position; |             u8 framebuffer_green_field_position; | ||||||
|             byte framebuffer_green_mask_size; |             u8 framebuffer_green_mask_size; | ||||||
|             byte framebuffer_blue_field_position; |             u8 framebuffer_blue_field_position; | ||||||
|             byte framebuffer_blue_mask_size; |             u8 framebuffer_blue_mask_size; | ||||||
|         }; |         }; | ||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -6,14 +6,14 @@ | ||||||
| #include <Kernel/Net/MACAddress.h> | #include <Kernel/Net/MACAddress.h> | ||||||
| 
 | 
 | ||||||
| struct ARPOperation { | struct ARPOperation { | ||||||
|     enum : word { |     enum : u16 { | ||||||
|         Request = 1, |         Request = 1, | ||||||
|         Response = 2, |         Response = 2, | ||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct ARPHardwareType { | struct ARPHardwareType { | ||||||
|     enum : word { |     enum : u16 { | ||||||
|         Ethernet = 1, |         Ethernet = 1, | ||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
|  | @ -21,20 +21,20 @@ struct ARPHardwareType { | ||||||
| class [[gnu::packed]] ARPPacket | class [[gnu::packed]] ARPPacket | ||||||
| { | { | ||||||
| public: | public: | ||||||
|     word hardware_type() const { return m_hardware_type; } |     u16 hardware_type() const { return m_hardware_type; } | ||||||
|     void set_hardware_type(word w) { m_hardware_type = w; } |     void set_hardware_type(u16 w) { m_hardware_type = w; } | ||||||
| 
 | 
 | ||||||
|     word protocol_type() const { return m_protocol_type; } |     u16 protocol_type() const { return m_protocol_type; } | ||||||
|     void set_protocol_type(word w) { m_protocol_type = w; } |     void set_protocol_type(u16 w) { m_protocol_type = w; } | ||||||
| 
 | 
 | ||||||
|     byte hardware_address_length() const { return m_hardware_address_length; } |     u8 hardware_address_length() const { return m_hardware_address_length; } | ||||||
|     void set_hardware_address_length(byte b) { m_hardware_address_length = b; } |     void set_hardware_address_length(u8 b) { m_hardware_address_length = b; } | ||||||
| 
 | 
 | ||||||
|     byte protocol_address_length() const { return m_protocol_address_length; } |     u8 protocol_address_length() const { return m_protocol_address_length; } | ||||||
|     void set_protocol_address_length(byte b) { m_protocol_address_length = b; } |     void set_protocol_address_length(u8 b) { m_protocol_address_length = b; } | ||||||
| 
 | 
 | ||||||
|     word operation() const { return m_operation; } |     u16 operation() const { return m_operation; } | ||||||
|     void set_operation(word w) { m_operation = w; } |     void set_operation(u16 w) { m_operation = w; } | ||||||
| 
 | 
 | ||||||
|     const MACAddress& sender_hardware_address() const { return m_sender_hardware_address; } |     const MACAddress& sender_hardware_address() const { return m_sender_hardware_address; } | ||||||
|     void set_sender_hardware_address(const MACAddress& address) { m_sender_hardware_address = address; } |     void set_sender_hardware_address(const MACAddress& address) { m_sender_hardware_address = address; } | ||||||
|  | @ -49,11 +49,11 @@ public: | ||||||
|     void set_target_protocol_address(const IPv4Address& address) { m_target_protocol_address = address; } |     void set_target_protocol_address(const IPv4Address& address) { m_target_protocol_address = address; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     NetworkOrdered<word> m_hardware_type { ARPHardwareType::Ethernet }; |     NetworkOrdered<u16> m_hardware_type { ARPHardwareType::Ethernet }; | ||||||
|     NetworkOrdered<word> m_protocol_type { EtherType::IPv4 }; |     NetworkOrdered<u16> m_protocol_type { EtherType::IPv4 }; | ||||||
|     byte m_hardware_address_length { sizeof(MACAddress) }; |     u8 m_hardware_address_length { sizeof(MACAddress) }; | ||||||
|     byte m_protocol_address_length { sizeof(IPv4Address) }; |     u8 m_protocol_address_length { sizeof(IPv4Address) }; | ||||||
|     NetworkOrdered<word> m_operation; |     NetworkOrdered<u16> m_operation; | ||||||
|     MACAddress m_sender_hardware_address; |     MACAddress m_sender_hardware_address; | ||||||
|     IPv4Address m_sender_protocol_address; |     IPv4Address m_sender_protocol_address; | ||||||
|     MACAddress m_target_hardware_address; |     MACAddress m_target_hardware_address; | ||||||
|  |  | ||||||
|  | @ -92,7 +92,7 @@ OwnPtr<E1000NetworkAdapter> E1000NetworkAdapter::autodetect() | ||||||
|     }); |     }); | ||||||
|     if (found_address.is_null()) |     if (found_address.is_null()) | ||||||
|         return nullptr; |         return nullptr; | ||||||
|     byte irq = PCI::get_interrupt_line(found_address); |     u8 irq = PCI::get_interrupt_line(found_address); | ||||||
|     return make<E1000NetworkAdapter>(found_address, irq); |     return make<E1000NetworkAdapter>(found_address, irq); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -102,7 +102,7 @@ E1000NetworkAdapter* E1000NetworkAdapter::the() | ||||||
|     return s_the; |     return s_the; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| E1000NetworkAdapter::E1000NetworkAdapter(PCI::Address pci_address, byte irq) | E1000NetworkAdapter::E1000NetworkAdapter(PCI::Address pci_address, u8 irq) | ||||||
|     : IRQHandler(irq) |     : IRQHandler(irq) | ||||||
|     , m_pci_address(pci_address) |     , m_pci_address(pci_address) | ||||||
| { | { | ||||||
|  | @ -132,7 +132,7 @@ E1000NetworkAdapter::E1000NetworkAdapter(PCI::Address pci_address, byte irq) | ||||||
|     const auto& mac = mac_address(); |     const auto& mac = mac_address(); | ||||||
|     kprintf("E1000: MAC address: %b:%b:%b:%b:%b:%b\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); |     kprintf("E1000: MAC address: %b:%b:%b:%b:%b:%b\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); | ||||||
| 
 | 
 | ||||||
|     dword flags = in32(REG_CTRL); |     u32 flags = in32(REG_CTRL); | ||||||
|     out32(REG_CTRL, flags | ECTRL_SLU); |     out32(REG_CTRL, flags | ECTRL_SLU); | ||||||
| 
 | 
 | ||||||
|     initialize_rx_descriptors(); |     initialize_rx_descriptors(); | ||||||
|  | @ -153,9 +153,9 @@ void E1000NetworkAdapter::handle_irq() | ||||||
| { | { | ||||||
|     out32(REG_IMASK, 0x1); |     out32(REG_IMASK, 0x1); | ||||||
| 
 | 
 | ||||||
|     dword status = in32(0xc0); |     u32 status = in32(0xc0); | ||||||
|     if (status & 4) { |     if (status & 4) { | ||||||
|         dword flags = in32(REG_CTRL); |         u32 flags = in32(REG_CTRL); | ||||||
|         out32(REG_CTRL, flags | ECTRL_SLU); |         out32(REG_CTRL, flags | ECTRL_SLU); | ||||||
|     } |     } | ||||||
|     if (status & 0x10) { |     if (status & 0x10) { | ||||||
|  | @ -170,7 +170,7 @@ void E1000NetworkAdapter::detect_eeprom() | ||||||
| { | { | ||||||
|     out32(REG_EEPROM, 0x1); |     out32(REG_EEPROM, 0x1); | ||||||
|     for (volatile int i = 0; i < 999; ++i) { |     for (volatile int i = 0; i < 999; ++i) { | ||||||
|         dword data = in32(REG_EEPROM); |         u32 data = in32(REG_EEPROM); | ||||||
|         if (data & 0x10) { |         if (data & 0x10) { | ||||||
|             m_has_eeprom = true; |             m_has_eeprom = true; | ||||||
|             return; |             return; | ||||||
|  | @ -179,16 +179,16 @@ void E1000NetworkAdapter::detect_eeprom() | ||||||
|     m_has_eeprom = false; |     m_has_eeprom = false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| dword E1000NetworkAdapter::read_eeprom(byte address) | u32 E1000NetworkAdapter::read_eeprom(u8 address) | ||||||
| { | { | ||||||
|     word data = 0; |     u16 data = 0; | ||||||
|     dword tmp = 0; |     u32 tmp = 0; | ||||||
|     if (m_has_eeprom) { |     if (m_has_eeprom) { | ||||||
|         out32(REG_EEPROM, ((dword)address << 8) | 1); |         out32(REG_EEPROM, ((u32)address << 8) | 1); | ||||||
|         while (!((tmp = in32(REG_EEPROM)) & (1 << 4))) |         while (!((tmp = in32(REG_EEPROM)) & (1 << 4))) | ||||||
|             ; |             ; | ||||||
|     } else { |     } else { | ||||||
|         out32(REG_EEPROM, ((dword)address << 2) | 1); |         out32(REG_EEPROM, ((u32)address << 2) | 1); | ||||||
|         while (!((tmp = in32(REG_EEPROM)) & (1 << 1))) |         while (!((tmp = in32(REG_EEPROM)) & (1 << 1))) | ||||||
|             ; |             ; | ||||||
|     } |     } | ||||||
|  | @ -199,8 +199,8 @@ dword E1000NetworkAdapter::read_eeprom(byte address) | ||||||
| void E1000NetworkAdapter::read_mac_address() | void E1000NetworkAdapter::read_mac_address() | ||||||
| { | { | ||||||
|     if (m_has_eeprom) { |     if (m_has_eeprom) { | ||||||
|         byte mac[6]; |         u8 mac[6]; | ||||||
|         dword tmp = read_eeprom(0); |         u32 tmp = read_eeprom(0); | ||||||
|         mac[0] = tmp & 0xff; |         mac[0] = tmp & 0xff; | ||||||
|         mac[1] = tmp >> 8; |         mac[1] = tmp >> 8; | ||||||
|         tmp = read_eeprom(1); |         tmp = read_eeprom(1); | ||||||
|  | @ -217,14 +217,14 @@ void E1000NetworkAdapter::read_mac_address() | ||||||
| 
 | 
 | ||||||
| void E1000NetworkAdapter::initialize_rx_descriptors() | void E1000NetworkAdapter::initialize_rx_descriptors() | ||||||
| { | { | ||||||
|     auto ptr = (dword)kmalloc_eternal(sizeof(e1000_rx_desc) * number_of_rx_descriptors + 16); |     auto ptr = (u32)kmalloc_eternal(sizeof(e1000_rx_desc) * number_of_rx_descriptors + 16); | ||||||
|     // Make sure it's 16-byte aligned.
 |     // Make sure it's 16-byte aligned.
 | ||||||
|     if (ptr % 16) |     if (ptr % 16) | ||||||
|         ptr = (ptr + 16) - (ptr % 16); |         ptr = (ptr + 16) - (ptr % 16); | ||||||
|     m_rx_descriptors = (e1000_rx_desc*)ptr; |     m_rx_descriptors = (e1000_rx_desc*)ptr; | ||||||
|     for (int i = 0; i < number_of_rx_descriptors; ++i) { |     for (int i = 0; i < number_of_rx_descriptors; ++i) { | ||||||
|         auto& descriptor = m_rx_descriptors[i]; |         auto& descriptor = m_rx_descriptors[i]; | ||||||
|         descriptor.addr = (qword)kmalloc_eternal(8192 + 16); |         descriptor.addr = (u64)kmalloc_eternal(8192 + 16); | ||||||
|         descriptor.status = 0; |         descriptor.status = 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -239,14 +239,14 @@ void E1000NetworkAdapter::initialize_rx_descriptors() | ||||||
| 
 | 
 | ||||||
| void E1000NetworkAdapter::initialize_tx_descriptors() | void E1000NetworkAdapter::initialize_tx_descriptors() | ||||||
| { | { | ||||||
|     auto ptr = (dword)kmalloc_eternal(sizeof(e1000_tx_desc) * number_of_tx_descriptors + 16); |     auto ptr = (u32)kmalloc_eternal(sizeof(e1000_tx_desc) * number_of_tx_descriptors + 16); | ||||||
|     // Make sure it's 16-byte aligned.
 |     // Make sure it's 16-byte aligned.
 | ||||||
|     if (ptr % 16) |     if (ptr % 16) | ||||||
|         ptr = (ptr + 16) - (ptr % 16); |         ptr = (ptr + 16) - (ptr % 16); | ||||||
|     m_tx_descriptors = (e1000_tx_desc*)ptr; |     m_tx_descriptors = (e1000_tx_desc*)ptr; | ||||||
|     for (int i = 0; i < number_of_tx_descriptors; ++i) { |     for (int i = 0; i < number_of_tx_descriptors; ++i) { | ||||||
|         auto& descriptor = m_tx_descriptors[i]; |         auto& descriptor = m_tx_descriptors[i]; | ||||||
|         descriptor.addr = (qword)kmalloc_eternal(8192 + 16); |         descriptor.addr = (u64)kmalloc_eternal(8192 + 16); | ||||||
|         descriptor.cmd = 0; |         descriptor.cmd = 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -260,60 +260,60 @@ void E1000NetworkAdapter::initialize_tx_descriptors() | ||||||
|     out32(REG_TIPG, 0x0060200A); |     out32(REG_TIPG, 0x0060200A); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void E1000NetworkAdapter::out8(word address, byte data) | void E1000NetworkAdapter::out8(u16 address, u8 data) | ||||||
| { | { | ||||||
|     if (m_use_mmio) { |     if (m_use_mmio) { | ||||||
|         auto* ptr = (volatile byte*)(m_mmio_base.get() + address); |         auto* ptr = (volatile u8*)(m_mmio_base.get() + address); | ||||||
|         *ptr = data; |         *ptr = data; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     IO::out8(m_io_base + address, data); |     IO::out8(m_io_base + address, data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void E1000NetworkAdapter::out16(word address, word data) | void E1000NetworkAdapter::out16(u16 address, u16 data) | ||||||
| { | { | ||||||
|     if (m_use_mmio) { |     if (m_use_mmio) { | ||||||
|         auto* ptr = (volatile word*)(m_mmio_base.get() + address); |         auto* ptr = (volatile u16*)(m_mmio_base.get() + address); | ||||||
|         *ptr = data; |         *ptr = data; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     IO::out16(m_io_base + address, data); |     IO::out16(m_io_base + address, data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void E1000NetworkAdapter::out32(word address, dword data) | void E1000NetworkAdapter::out32(u16 address, u32 data) | ||||||
| { | { | ||||||
|     if (m_use_mmio) { |     if (m_use_mmio) { | ||||||
|         auto* ptr = (volatile dword*)(m_mmio_base.get() + address); |         auto* ptr = (volatile u32*)(m_mmio_base.get() + address); | ||||||
|         *ptr = data; |         *ptr = data; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     IO::out32(m_io_base + address, data); |     IO::out32(m_io_base + address, data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| byte E1000NetworkAdapter::in8(word address) | u8 E1000NetworkAdapter::in8(u16 address) | ||||||
| { | { | ||||||
|     if (m_use_mmio) |     if (m_use_mmio) | ||||||
|         return *(volatile byte*)(m_mmio_base.get() + address); |         return *(volatile u8*)(m_mmio_base.get() + address); | ||||||
|     return IO::in8(m_io_base + address); |     return IO::in8(m_io_base + address); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| word E1000NetworkAdapter::in16(word address) | u16 E1000NetworkAdapter::in16(u16 address) | ||||||
| { | { | ||||||
|     if (m_use_mmio) |     if (m_use_mmio) | ||||||
|         return *(volatile word*)(m_mmio_base.get() + address); |         return *(volatile u16*)(m_mmio_base.get() + address); | ||||||
|     return IO::in16(m_io_base + address); |     return IO::in16(m_io_base + address); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| dword E1000NetworkAdapter::in32(word address) | u32 E1000NetworkAdapter::in32(u16 address) | ||||||
| { | { | ||||||
|     if (m_use_mmio) |     if (m_use_mmio) | ||||||
|         return *(volatile dword*)(m_mmio_base.get() + address); |         return *(volatile u32*)(m_mmio_base.get() + address); | ||||||
|     return IO::in32(m_io_base + address); |     return IO::in32(m_io_base + address); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void E1000NetworkAdapter::send_raw(const byte* data, int length) | void E1000NetworkAdapter::send_raw(const u8* data, int length) | ||||||
| { | { | ||||||
|     dword tx_current = in32(REG_TXDESCTAIL); |     u32 tx_current = in32(REG_TXDESCTAIL); | ||||||
| #ifdef E1000_DEBUG | #ifdef E1000_DEBUG | ||||||
|     kprintf("E1000: Sending packet (%d bytes)\n", length); |     kprintf("E1000: Sending packet (%d bytes)\n", length); | ||||||
| #endif | #endif | ||||||
|  | @ -337,7 +337,7 @@ void E1000NetworkAdapter::send_raw(const byte* data, int length) | ||||||
| 
 | 
 | ||||||
| void E1000NetworkAdapter::receive() | void E1000NetworkAdapter::receive() | ||||||
| { | { | ||||||
|     dword rx_current; |     u32 rx_current; | ||||||
|     for (;;) { |     for (;;) { | ||||||
|         rx_current = in32(REG_RXDESCTAIL); |         rx_current = in32(REG_RXDESCTAIL); | ||||||
|         if (rx_current == in32(REG_RXDESCHEAD)) |         if (rx_current == in32(REG_RXDESCHEAD)) | ||||||
|  | @ -345,8 +345,8 @@ void E1000NetworkAdapter::receive() | ||||||
|         rx_current = (rx_current + 1) % number_of_rx_descriptors; |         rx_current = (rx_current + 1) % number_of_rx_descriptors; | ||||||
|         if (!(m_rx_descriptors[rx_current].status & 1)) |         if (!(m_rx_descriptors[rx_current].status & 1)) | ||||||
|             break; |             break; | ||||||
|         auto* buffer = (byte*)m_rx_descriptors[rx_current].addr; |         auto* buffer = (u8*)m_rx_descriptors[rx_current].addr; | ||||||
|         word length = m_rx_descriptors[rx_current].length; |         u16 length = m_rx_descriptors[rx_current].length; | ||||||
| #ifdef E1000_DEBUG | #ifdef E1000_DEBUG | ||||||
|         kprintf("E1000: Received 1 packet @ %p (%u) bytes!\n", buffer, length); |         kprintf("E1000: Received 1 packet @ %p (%u) bytes!\n", buffer, length); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -13,10 +13,10 @@ public: | ||||||
| 
 | 
 | ||||||
|     static OwnPtr<E1000NetworkAdapter> autodetect(); |     static OwnPtr<E1000NetworkAdapter> autodetect(); | ||||||
| 
 | 
 | ||||||
|     E1000NetworkAdapter(PCI::Address, byte irq); |     E1000NetworkAdapter(PCI::Address, u8 irq); | ||||||
|     virtual ~E1000NetworkAdapter() override; |     virtual ~E1000NetworkAdapter() override; | ||||||
| 
 | 
 | ||||||
|     virtual void send_raw(const byte*, int) override; |     virtual void send_raw(const u8*, int) override; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     virtual void handle_irq() override; |     virtual void handle_irq() override; | ||||||
|  | @ -44,28 +44,28 @@ private: | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     void detect_eeprom(); |     void detect_eeprom(); | ||||||
|     dword read_eeprom(byte address); |     u32 read_eeprom(u8 address); | ||||||
|     void read_mac_address(); |     void read_mac_address(); | ||||||
| 
 | 
 | ||||||
|     void write_command(word address, dword); |     void write_command(u16 address, u32); | ||||||
|     dword read_command(word address); |     u32 read_command(u16 address); | ||||||
| 
 | 
 | ||||||
|     void initialize_rx_descriptors(); |     void initialize_rx_descriptors(); | ||||||
|     void initialize_tx_descriptors(); |     void initialize_tx_descriptors(); | ||||||
| 
 | 
 | ||||||
|     void out8(word address, byte); |     void out8(u16 address, u8); | ||||||
|     void out16(word address, word); |     void out16(u16 address, u16); | ||||||
|     void out32(word address, dword); |     void out32(u16 address, u32); | ||||||
|     byte in8(word address); |     u8 in8(u16 address); | ||||||
|     word in16(word address); |     u16 in16(u16 address); | ||||||
|     dword in32(word address); |     u32 in32(u16 address); | ||||||
| 
 | 
 | ||||||
|     void receive(); |     void receive(); | ||||||
| 
 | 
 | ||||||
|     PCI::Address m_pci_address; |     PCI::Address m_pci_address; | ||||||
|     word m_io_base { 0 }; |     u16 m_io_base { 0 }; | ||||||
|     PhysicalAddress m_mmio_base; |     PhysicalAddress m_mmio_base; | ||||||
|     byte m_interrupt_line { 0 }; |     u8 m_interrupt_line { 0 }; | ||||||
|     bool m_has_eeprom { false }; |     bool m_has_eeprom { false }; | ||||||
|     bool m_use_mmio { false }; |     bool m_use_mmio { false }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| #include <AK/Types.h> | #include <AK/Types.h> | ||||||
| 
 | 
 | ||||||
| struct EtherType { | struct EtherType { | ||||||
|     enum : word { |     enum : u16 { | ||||||
|         ARP = 0x0806, |         ARP = 0x0806, | ||||||
|         IPv4 = 0x0800, |         IPv4 = 0x0800, | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  | @ -15,8 +15,8 @@ public: | ||||||
|     MACAddress source() const { return m_source; } |     MACAddress source() const { return m_source; } | ||||||
|     void set_source(const MACAddress& address) { m_source = address; } |     void set_source(const MACAddress& address) { m_source = address; } | ||||||
| 
 | 
 | ||||||
|     word ether_type() const { return m_ether_type; } |     u16 ether_type() const { return m_ether_type; } | ||||||
|     void set_ether_type(word ether_type) { m_ether_type = ether_type; } |     void set_ether_type(u16 ether_type) { m_ether_type = ether_type; } | ||||||
| 
 | 
 | ||||||
|     const void* payload() const { return &m_payload[0]; } |     const void* payload() const { return &m_payload[0]; } | ||||||
|     void* payload() { return &m_payload[0]; } |     void* payload() { return &m_payload[0]; } | ||||||
|  | @ -24,8 +24,8 @@ public: | ||||||
| private: | private: | ||||||
|     MACAddress m_destination; |     MACAddress m_destination; | ||||||
|     MACAddress m_source; |     MACAddress m_source; | ||||||
|     NetworkOrdered<word> m_ether_type; |     NetworkOrdered<u16> m_ether_type; | ||||||
|     dword m_payload[0]; |     u32 m_payload[0]; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static_assert(sizeof(EthernetFrameHeader) == 14); | static_assert(sizeof(EthernetFrameHeader) == 14); | ||||||
|  |  | ||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling