PCI in RONIXOS not working

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
SpaceboyRoss01
Posts: 6
Joined: Thu Feb 16, 2017 12:43 am
Libera.chat IRC: esi

PCI in RONIXOS not working

Post by SpaceboyRoss01 »

Hey, I'm developing this OS called RONIXOS or RONIX for short. The system is a multitasking, multiarchitecture system that allows PCI . Recently in version 0.0.11 Pre-Alpha it includes BGA (Simple Implementation), VGA (Text), PCI, CMOS (RTC), Serial (COM1-4) and Multitasking. However, I've run into a problem where all of my PCI Devices that I'm trying to read would return me 0x10 then the next one would equal to 0, this would repeat throughout the reading of the device. My code is located on GitHub at https://github.com/SpaceboyRoss01/ronix-core, look inside of src/Kernel/sys/hardware/x86 and look at the PCI C++ file. If anyone knows how to fix this glitch, please tell me. I thought of the name by combining my last name, Ross, with nix. I started RONIX in the beginning of 2016.


This is how I feel from the glitch: :evil: :evil: :evil:

Edit: I've updated the driver, someone please test it and reply back if it works.
New Edit: 0.0.12 Pre-Alpha Released
Last edited by SpaceboyRoss01 on Fri Feb 17, 2017 3:41 pm, edited 4 times in total.
ronsor
Member
Member
Posts: 27
Joined: Wed Jan 25, 2017 5:31 pm
Libera.chat IRC: Ronsor

Re: PCI in RONIXOS not working

Post by ronsor »

What isn't working?
Last edited by ronsor on Wed Aug 26, 2020 10:30 am, edited 1 time in total.
User avatar
sleephacker
Member
Member
Posts: 97
Joined: Thu Aug 06, 2015 6:41 am
Location: Netherlands

Re: PCI in RONIXOS not working

Post by sleephacker »

Code: Select all

uint8_t PCI::read_byte(uint8_t bus,uint8_t slot,uint8_t func,uint8_t offset) {
	write_addr(bus,slot,func,offset);
	using namespace io;
	return (uint8_t)((Ports::read_long(0xCFC) >> ((offset & 3) * 8)) & 0xFF);
	using namespace hardware;
}

void PCI::write_addr(uint8_t bus,uint8_t slot,uint8_t fn,uint8_t offset) {
	using namespace io;
	uint32_t addr = (uint32_t)((uint32_t)0x80000000 | (uint32_t)bus << 16 | (uint32_t)slot << 11 | (uint32_t)fn << 8 | (uint32_t)offset);
	Ports::write_long(0xCF8,addr);
	using namespace hardware;
}

...

void Ports::write_long(uint16_t port,uint16_t value) {
	asm volatile ("outw %w0,%w1" :: "a"(value),"d"(port));
}

uint16_t Ports::read_long(uint16_t port) {
	uint16_t value;
	asm volatile ("inw %w1,%w0" : "=a"(value) : "d"(port));
	return value;
}
You are confusing 32 bit longs / dwords with 16 bit words all over the place.
Your Ports::write_long() function is called with a 32 bit value, but only takes 16 bit values.
Similarly, your Ports::read_long() function is used to read 32 bit values, but only returns 16 bit values.
One of the many problems that are caused by this that PCI::write_addr() isn't actually able to send the enable bit to the address port, which means that PCI::read_whatever() doesn't actually read anything at all, not even the wrong address.
hannah
Member
Member
Posts: 34
Joined: Wed Oct 12, 2016 11:32 am
Location: At my PC

Re: PCI in RONIXOS not working

Post by hannah »

ronsor wrote:Hey, I already used the name Ronix

http://github.com/ronsoros/ronix4

and I'm going to release a 5.x version too.
Somehow, I doubt you've trademarked the name Ronix.
kzinti
Member
Member
Posts: 898
Joined: Mon Feb 02, 2015 7:11 pm

Re: PCI in RONIXOS not working

Post by kzinti »

LOL, he just updated his README...
User avatar
matt11235
Member
Member
Posts: 286
Joined: Tue Aug 02, 2016 1:52 pm
Location: East Riding of Yorkshire, UK

Re: PCI in RONIXOS not working

Post by matt11235 »

kzinti wrote:LOL, he just updated his README...
I'm not sure where Ronsor is from, but in the UK Ronix is already trademarked and it covers class 9 (software). https://www.ipo.gov.uk/tmcase/Results/2/WO0000001273133
Anyway, this is a bit off topic.
com.sun.java.swing.plaf.nimbus.InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState
Compiler Development Forum
Post Reply