- Member AtaDisk::doRead (uint64_t location)
What's the best way to handle this?
What's the best way to handle this?
logical sector size here
getPageSize() here
- Member AtaDisk::doWrite (uint64_t location)
- might still want to allow writes - assuming CDROM here...
- Member AtaDisk::initialise (size_t nUnit=~0)
Testing needs to be done on more than just CD/DVD and block devices...
should check that this doesn't break on ATAPI
- Member AtaDisk::writePageBuffer (uint64_t location, uintptr_t page)
- What's the best way to handle this?
- Member BusMasterIde::add (uintptr_t buffer, size_t nBytes)
- Can't write if a read is in progress, and vice versa
- Member BusMasterIdeCommandRegister::__attribute__ ((packed)) bits
- I blanked when writing this, so I can't remember if this defines "bits" as a packed structure or if the attribute is ignored...
- Member Cache::insert (uintptr_t key, bool *alreadyExisted=nullptr)
- remove this, it makes the bloom filter pointless
- Member ConsoleFile::inputLineDiscipline (ConsoleIoState &state, char *buf, size_t len, bool canBlock, size_t flags=~0U, const char *controlChars=nullptr)
- remove me, this is because of the port
- Class ConstantString< N >
- make String hashes more expressive so we can do a compile-time hash of these ConstantString objects and avoid the runtime computation.
- Member Cord::operator[] (size_t index) const
- should this be more crashy?
- Member Debugger::start (InterruptState &state, LargeStaticString &description)
- OZMFGBARBIE, this needs major cleanup. Look at the state of it!! :O
- Member Device::foreach (Callback callback, Device *root=0)
add filters to avoid the need to filter in callbacks
add a way to end iteration early
- Module dhcp4
- :
- Support for interfaces other than Ethernet (SLIP, PPP, ...)
- Class Directory
- Need to add a way to count # of times a particular lookup has happened so we can potentially offer a way to cull directory entries that are otherwise just consuming space.
- Member Display::setScreenMode (size_t nWidth, size_t nHeight, size_t nBpp)
- "Closest match": allow a threshold for a match in case the specific mode specified cannot be set.
- Member DwarfState::getRegister (unsigned int nRegister, const DwarfState &initialState) const
- This needs to be better - we need to check if the CFA is borked so we don't try to do a stupid read - This requires VirtualAddressSpace, I think.
- Member DynamicLinker::initPlt (Elf *pElf, uintptr_t value)
Change this to use the size of the elf!
Change this to use the size of the elf!
- Member Elf::allocate (uint8_t *pBuffer, size_t length, uintptr_t &loadBase, SymbolTable *pSymtab=0, bool bAllocate=true, size_t *pSize=0)
- Don't rely on this. Look at nchain in the hash table.
- Member Elf::extractEntryPoint (uint8_t *pBuffer, size_t length, uintptr_t &entry)
- check magic
- Member Elf::extractInformation (uint8_t *pBuffer, size_t length, size_t &phdrCount, size_t &phdrEntrySize, uintptr_t &phdrAddress)
- check magic
- Member Elf::loadModule (uint8_t *pBuffer, size_t length, uintptr_t &loadBase, size_t &loadSize, SymbolTable *pSymbolTableCopy=0)
we should handle hidden symbols better so they are only needed for relocation and not tracked forever
Figure out how to map to the pages loaded by GRUB instead of copying into newly-allocated pages here.
- Member Elf::populateSymbolTable (SymbolTable *pSymtab, uintptr_t loadBase)
- Don't rely on this. Look at nchain in the hash table.
- Member Ext2Directory::addEntry (const String &filename, File *pFile, size_t type)
- Ensure 4-byte alignment.
- Member Ext2Directory::removeEntryLocked (const String &filename, Ext2Node *pFile)
- Okay, this is not quite enough. The previous entry needs to be updated to skip past this now-empty entry. If this was the first entry, a blank record must be created to point to either the next entry or the end of the block.
- Member Ext2Filesystem::createNode (File *parent, const String &filename, uint32_t mask, const String &value, size_t type, uint32_t inodeOverride=0)
Endianness!
save group descriptor block number elsewhere
- Member Ext2Filesystem::findFreeBlocksInGroup (uint32_t group, size_t maxCount, Vector< uint32_t > &blocks)
Endianness - to ensure correct operation, must ptr be little endian?
save group descriptor block number elsewhere
- Member Ext2Filesystem::initialise (Disk *pDisk)
Check for journal required features.
Check all read-only features.
Set g_pSparseBlock as read-only.
- Member Ext2Filesystem::releaseBlockLocked (uint32_t block, uint32_t inode=0)
- save group descriptor block number elsewhere
- Member Ext2Filesystem::removeNode (File *parent, const String &filename, File *file)
- save group descriptor block number elsewhere
- Member Ext2Filesystem::retireInodeLocked (uint32_t inode, Ext2Node *lastNode)
- save group descriptor block number elsewhere
- Member Ext2Node::fileAttributeChanged (size_t size, size_t atime, size_t mtime, size_t ctime)
- 4GB files.
- Member FatDirectory::FatDirectory (String name, uintptr_t cluster, class FatFilesystem *pFs, File *pParent, FatFileInfo &info, uint32_t dirClus=0, uint32_t dirOffset=0)
- Permissions
- Member FatFilesystem::convertFilenameTo (String filename) const
- This should increment if a file is found with the same name!
- Member File::read (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) final
- consider caching this still
- Member File::writeCallback (CacheConstants::CallbackCause cause, uintptr_t loc, uintptr_t page, void *meta)
- handle block size < 4K??
- Member File::writeUnlocked (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock)
- consider caching this still
- Member FileDescriptor::fdflags
- swap this to private and fix everything that breaks
- Member FileDescriptor::FileDescriptor (File *newFile, uint64_t newOffset=0, size_t newFd=0xFFFFFFFF, int fdFlags=0, int flFlags=0)
- need a copy constructor for networkImpl
- Class FileDisk
- Expose functionality here as a Service - specifically creating/removing disks.
- Member FileDisk::cacheIsCritical ()
- Could it be possible to allow writes to go through to the file we've mounted? Then this could return true if the backing device is read-only, false otherwise.
- Member FileDisk::write (uint64_t location)
- implement this
- Member Filesystem::findNode (File *pNode, StringView path, File *stableStart, File *trueRoot, File **retainedResult)
- do we need to do permissions checks at each intermediate step?
- Member Framebuffer::redraw (size_t x=~0UL, size_t y=~0UL, size_t w=~0UL, size_t h=~0UL, bool bChild=false)
- nChildren parameter - this is not necessary if no children!
- Member Framebuffer::swBlit (Graphics::Buffer *pBuffer, size_t srcx, size_t srcy, size_t destx, size_t desty, size_t width, size_t height)
- This code is broken for the case where srcx/srcy are not zero. :(
- Member Framebuffer::swCopy (size_t srcx, size_t srcy, size_t destx, size_t desty, size_t w, size_t h)
- consider source bytes per line?
- Member Framebuffer::swCreateBuffer (const void *srcData, Graphics::PixelFormat srcFormat, size_t width, size_t height, uint32_t *pPalette)
- 8-bit
- Member Framebuffer::swRect (size_t x, size_t y, size_t width, size_t height, uint32_t colour, Graphics::PixelFormat format)
Handle 24-bit properly
Handle 24-bit properly
- Member Framebuffer::swSetPixel (size_t x, size_t y, uint32_t colour, Graphics::PixelFormat format=Graphics::Bits32_Argb)
- 8-bit
- Member FramebufferFile::m_pGraphicsParameters
- pinBlock/unpinBlock should pin/unpin physical pages!
- Member FramebufferFile::readBlock (uint64_t location)
- If this is NOT virtual, we need to do something about that.
- Member g_FreePages
- expose this via PhysicalMemoryManager interface
- Class HashTable< K, V, SiblingK, InitialBuckets, QuadraticProbe, GrowthFactor >
- check InitialBuckets for is a power of two
- Member HidUtils::sendInputToManager (HidDeviceType deviceType, uint16_t nUsagePage, uint16_t nUsage, int64_t nRelativeValue)
- Matt, fix the damn input manager!!!
- Member HostedInterruptManager::interrupt (InterruptState &interruptState)
- Provide a better entry point for system shutdown.
- Member HostedPhysicalMemoryManager::m_MemoryRegions
- rename this member (conflicts with PhysicalMemoryManager::m_MemoryRegions)
- Member HostedSchedulerState::getInstructionPointer () const
- implement this somehow?
- Member IntervalTimer::signal ()
- sanity check that this is absolutely a PosixSubsystem
- Member Iso9660Filesystem::initialise (Disk *pDisk)
- Obtain disk information (perhaps a new call in Disk?)
- Member KernelElf::loadModule (struct ModuleInfo *info, bool silent=false)
- rewrite to the new module dependency logic
- Member LocksCommand::lockReleased (const Spinlock *pLock, size_t nCpu=~0U)
- not SMP-safe...
- Member LWIP_NETIF_TX_SINGLE_PBUF
- : TCP and IP-frag do not work with this, yet:
- Member LwipSocketSyscalls::accept (struct sockaddr_storage *address, socklen_t *addrlen, int flags, DescriptorLease *accepted=nullptr)
- handle other families
- Member LwipSocketSyscalls::connect (const struct sockaddr_storage *address, socklen_t addrlen)
- for accept() we need to do this too
- Member LwipSocketSyscalls::create ()
- need an error here...
- Member LwipSocketSyscalls::getpeername (struct sockaddr_storage *address, socklen_t *address_len)
- handle other families
- Member LwipSocketSyscalls::getsockname (struct sockaddr_storage *address, socklen_t *address_len)
- handle other families
- Member LwipSocketSyscalls::netconnCallback (struct netconn *conn, enum netconn_evt evt, uint16_t len)
- need a way to do this with lwip when threads are off
- Member LwipSocketSyscalls::poll (bool &read, bool &write, bool &error, Semaphore *waiter)
- this is buggy as it'll return for the wrong events!
- Member MappingCommand::execute (const HugeStaticString &input, HugeStaticString &output, InterruptState &state, DebuggerIO *screen)
- define operator != on StaticString
- File MemoryMappedFile.h
- Handle writing of files, not just reading.
- Member MemoryMappedFile::compact () override
- Improve this.
- Member Ne2k::Ne2k (Network *pDev)
- Proper multicast subscription via the Network card abstraction
- Member NetworkFilter::filter (size_t level, uintptr_t packet, size_t sz)
- Callbacks should be able to return a code which requests a specific response, such as ICMP Unreachable or something, rather than just dropping the packet.
- Class ObjectPool< T, poolSize >
- add a MemoryPressureHandler here.
- Member Ohci::detachED (ED *pED)
- Isochronous and Periodic.
- Member Ohci::irq (irq_id_t number) override
- Handle.
- Member Ohci::portReset (uint8_t nPort, bool bErrorResponse=false)
- Error handling? Device fails to reset? Not present after reset?
- Member Ohci::ptv_ed (physical_uintptr_t phys)
- defines for the list sizes so changing one doesn't involve rewriting heaps of code
- Member PageFaultHandler::interrupt (size_t interruptNumber, InterruptState &state)
- probably can just skip checking for traps across the entire kernel address space?
- Member PciAtaController::PciAtaController (Controller *pDev, int nController=0)
Bus master registerss may be memory mapped...
ICH will have "native mode" to worry about
Detect PCI IRQ, don't use ISA IRQs in native mode (etc...)
for ICH and the like, there's more Ultra DMA configuration.
- Member PciDevicesFile::resync ()
add driver name here if known?
need to add some flags here
- Member PosixSubsystem::checkAddress (uintptr_t addr, size_t extent, size_t flags)
- This has a security flaw in that between the check and the use of the actual pointer, the pointer can become invalid due to other threads being active in the process. It may be worth having a Process-wide UnlikelyLock which has the mmap family of functions, sbrk, etc... as writers, and all other syscalls as readers. This would ensure a multithreaded application is not able to crash the kernel.
- Member PosixSubsystem::insertThread (size_t n, PosixThread *thread)
- It might be safe to delete the pointer... We'll see.
- Member PosixSubsystem::removeThread (size_t n)
- It might be safe to delete the pointer... We'll see.
- Member PosixSubsystem::~PosixSubsystem ()
- Call the destructor (need a way to call into userspace and return back here)
- Member ProcessorBase::getDebugStatus ()
- is the debug status somehow abtractable?
- Member ProcFs::addProcess (PosixProcess *proc)
add some info to the directory...
is this correct? or should it be effective user/group?
- Member ProcFs::initialise (Disk *pDisk)
add driver name here if known?
need to add some flags here
also probably need /etc/mtab...
need to know parent (if any) so we can add dotdot too
ConstantFile is taking const char *s of all this and holding them which is extremely unsafe. That must be fixed because right now the ConstantFile could point into freed heap memory.
- Member PtmxFile::open ()
- so, when this master is closed, we'll leak these resources...
- Member RadixTree< T >::operator= (const RadixTree &x)
- check for incompatible case-sensitivity?
- Member RawFsDir::removeRecursive ()
Leaky.
do this
- Member ScsiDisk::doRead (uint64_t location)
- Cache this somewhere.
- Member ScsiDisk::initialise (class ScsiController *pController, size_t nUnit)
- Use this data to change how read() and write() work
- Member ScsiDisk::readSense (Sense *s)
- get the amount of data received from the SCSI device
- Member ScsiDisk::unitReady ()
- this can fail with UNIT_ATTN or NOT_READY if the device is removable.
- Member Serial::setBase (uintptr_t nBaseAddr)=0
- make this generic for Mmaped and port IO.
- Member SerialIO::putChar (char c, DebuggerIO::Colour foreColour, DebuggerIO::Colour backColour)
- This code below is costly and slow, but without it we can't line-wrap. Sort this out.
- Class Service
- Integrate with the Event system somehow
- Class ServiceManager
- Integrate with the Event system somehow
- Member SharedPointer< T >::release () noexcept
- allow specifying a custom function to handle deletion
- Member SignalEvent::serialize (uint8_t *pBuffer)
- There may be a need for serialization in the future...
- Member SlamCache::isPointerValid (uintptr_t object) const
- need to figure out how to do this
- Member StaticString< N >::right (int n) const
- this is technically off-by-one, but I don't feel comfortable changing the behavior -Matt
- Class String
- provide documentation
- Member String::find (const char c) const
- this problem only exists because we use return -1 as a status indicator. That could be changed, and we could avoid a signed/unsigned conversion here!
- Member sys_thread_new (const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
- stacksize might be important
- Member TextIO::writeStr (const char *s, size_t len)
Should we handle this?
hook in to Keyboard::setLedState!
Sanity check.
Error out if is Utf8
implement me!
implement me!
- Member Thread::setTlsBase (uintptr_t base)
- clean up old base
- Class ThreadToCoreAllocationAlgorithm
- Document.
- Class Tree< K, E >::IteratorNode
- This will actually mean for each Tree you can only use one iterator at a time, which may not be effective depending on how this is used.
- Member UnixSocketSyscalls::bind (const struct sockaddr_storage *address, socklen_t addrlen)
- re-bind an unnamed address if we are bound already
- Member UnixSocketSyscalls::listen (int backlog)
- bind to an unnamed socket if we aren't already bound
- Member UsbDevice::getDescriptor (uint8_t nDescriptorType, uint8_t nDescriptorIndex, uint16_t nBytes, uint8_t requestType=0)
- Proper language ID handling!
- Member UsbDevice::getDescriptorLength (uint8_t nDescriptorType, uint8_t nDescriptorIndex, uint8_t requestType=0)
- Proper language ID handling
- Member UsbDevice::getString (uint8_t nString)
- UTF-8 support of some kind
- Member UsbDevice::initialise (uint8_t nAddress)
- support more configurations (how?)
- Member VFS::m_Instance
- Figure out a way to clean up files after deletion. Directory::remove() is not the right place to do this. There needs to be a way to add a File to some sort of queue that cleans it up once it hits refcount zero or something like that.
- Member VirtualTerminalManager::getTerminalMode (size_t n) const
- validate n
- Member VirtualTerminalManager::setTerminalMode (size_t n, struct vt_mode mode)
- validate n
- Member X64GdtManager::initialiseProcessor () INITIALISATION_ONLY
- and some smp/acpi function
- Member X64GdtManager::initialiseTss (X64TaskStateSegment *pTss) INITIALISATION_ONLY
- this should change
- Member X64SyscallManager::syscall (SyscallState &syscallState) USED
- this is an extraordinary hack, this should be done in a way more abstract way than this!!
- Member X64VirtualAddressSpace::clone (bool copyOnWrite=true)
Deal with 2MB pages here.
figure out how to handle page tracking here
- Member X64VirtualAddressSpace::revertToKernelAddressSpace ()
When swap system comes along, we want to remove this page from swap!
Deal with 2MB pages here.
- Member X64VirtualAddressSpace::~X64VirtualAddressSpace ()
- validate that we're cleaning up enough stuff here for example are we missing stuff like PDPTs etc?
- Member X86CommonPhysicalMemoryManager::initialise (const BootstrapStruct_t &Info) INITIALISATION_ONLY
- do this in initialise64 too, copying any existing entries.
- Member X86CommonPhysicalMemoryManager::m_MemoryRegions
- rename this member (conflicts with PhysicalMemoryManager::m_MemoryRegions)
- Member X86CommonPhysicalMemoryManager::PageStack::free (uint64_t physicalAddress, size_t length, bool newMemory=false)
- make sure callers split any regions that cross over before calling
- Member X86IsaDma::initTransfer (uint8_t channel, uint8_t mode, size_t length, uintptr_t addr)
- Extra flags to control modes and things
- Member X86Keyboard::initialise ()
- do we need to switch into a specific scancode set?