Amiga.org
Amiga computer related discussion => Amiga Hardware Issues and discussion => Topic started by: doctorj on May 02, 2009, 06:07:52 AM
-
Okay, I admit I went a bit overboard.
In the process of trying to determine why my IOBlix ethernet was crawling at 50K/13K per second transfer rates and locking up OS 4.0 on my A4000/CyberstormPPC, I have completely disassembled the ioblixether.device v37.17 using IDA Pro.
I am still going through and naming the data and flags in the 3314 bytes of private data, adding bit names, logical function names, etc., but have done enough that it is becoming trivial. I am a Software Engineer for Delphi, and I have actually enjoyed doing this in the evenings; but it would have sure been a lot easier if the original source were available!
I used 37.17 since it is the latest that actually works. Now I can actually determine what changes were made for 37.20, and why it is broken - and fix it.
I am just wondering, how many people are there using the Zorro-II IOBlix ethernet and need a new device driver???
After spending a week doing this, I found the primary problem is duplex mismatch. Duh. The 91C96 doesn't support Nway (autonegotiation). Lesson #1 is plugging a 10BaseT device without autonegotiation fixed at full-duplex into a switch with autonegotiation will 100% of the time result in a duplex mismatch. The switch will detect the speed, but cannot detect the duplex and defaults to HALF duplex. Performance drops by 90% or more.
Connecting to a NIC forced to full duplex, my transfer rates are 994KB/sec in both directions measured using tcpspeed under OS3.9. Excellent! This leaves a negligible margin for improvement.
Now the million $$$ questions is, what switch has fixed 10MB full duplex on one port and autonegotiation on another so I can hook this up to my gigabit router; effectively adding autonegotiation to the IOBlix and making it useable in full duplex? I don't want half duplex.
Back to the device driver. The real reason I disassmbled it is to get it working on OS4.0. I suspect that it may be the JIT compiler choking on the use of the skipw trick
skipw MACRO
IFNE NARG
FAIL !!! NO ARGUMENTS ALLOWED !!!
ENDC
dc.w $0c40 ;CMPI.W #????,d0
ENDM
This is used in a couple places in the device driver. I can't find enough information about the OS4.0 JIT to know if this is an issue or not. If it is, an easy fix.
:rtfm:
-
Known:
* Chipset:
SMSC 91C96.pdf (http://www.smsc.com/main/datasheets/91c96.pdf)
* Grainy
image (http://www.amiga-hardware.com/showhardware.cgi?HARDID=921).
* BNC, RJ45
* SANA-II
* OS 4.0
* ioblixether.device v37.17
Could you scan a huge image of the component side of the PCB?
A Managed switch may allow you to set duplex per port.
Maybe there's some open source Ethernet network driver that you can use as a starting point?
(http://www.amiga-hardware.com/display_photos/ioblixether.jpg)
-
Now the million $$$ questions is, what switch has fixed 10MB full duplex on one port and autonegotiation on another so I can hook this up to my gigabit router; effectively adding autonegotiation to the IOBlix and making it useable in full duplex? I don't want half duplex.
Well... any cisco would enable you to configure the ports as you seem fit...
Or you can try looking for manageable switches...
-
I use an IOblix ethernet (sometimes). It was totally useless until I learned that I had to downgrade the driver. I remember reading on Usenet that the interrupt handling was broken on the IOblix, and one of the E3B boys wrote on another forum that even the hardware is not correctly designed.
Edit: I suppose you noticed that the 37.20 driver does work, but only with ridiculously small packets?
-
Much larger images are already available at the following link and are representative of the boards I have:
http://amiga.resource.cx/photos/ioblix (http://amiga.resource.cx/photos/ioblix)
There is not a lot of room for error in the design. The 68K interface works fine, and the registers and data spaces are I/O mapped. I suppose the data line MSB/LSB could have been reversed making it big-endian byte ordering, but that's not a big deal. There is only a single interrupt line, and that seems to be handled okay by the existing ioblix resource.
The 37.17 device driver is actually the best example I have found for a driver for the 91c96 (and the ONLY SANA-II driver). No sense in starting over writing a completely new driver, just update this one as needed now that I have the source.
The 37.20 changes are isolated and I can determine the intention of the fixes and make the "desired" corrections. I do embedded software for a living, this device is VERY simple, relatively speaking.
I've been using Amiga's since 1986. I picked up the IOBlix a few years ago when I bought out another guys Amiga equipment. I never have used Ethernet on the Amiga until recently, and now I'm motivated. I went ahead and set the IOBlix to half duplex for the moment, and it is working at 935KB/sec, which is fine. I'll keep my eye out for an inexpensive switch that can get it running full duplex connected to my router.
Updated SANA-II documentation would be useful. The device driver is clearly written to the R2 documents available on Aminet. I would like to see the SANA-II R3 specification(R4, R5?). A R3 native PPC driver for OS4 is a possibility. Finding documentation is painful.
-
@doctorj
Check your PM....
-
doctorj wrote:
Much larger images are already available at the following link and are representative of the boards I have:
http://amiga.resource.cx/photos/ioblix (http://amiga.resource.cx/photos/ioblix)
In addition, my board is TP-only and hence lacks the big transformer in the middle.
There is not a lot of room for error in the design. The 68K interface works fine, and the registers and data spaces are I/O mapped. I suppose the data line MSB/LSB could have been reversed making it big-endian byte ordering, but that's not a big deal. There is only a single interrupt line, and that seems to be handled okay by the existing ioblix resource.
According to Michael Boehmer, the IOblix only pulses the INT line, instead of making static interrupts, which may cause troubles. I'm no hardware designer, nor a programmer, so I don't know exactly what the problem might be.
I remember a Usenet thread mentioning something about the ioblixether driver not always releasing interrupts, or something like that. You can google it.
-
doctorj, Mind sharing the source? ;)
-
I fully intend to share the source, but first I really need to contact the original developer and get permission.
It is my understanding that he either no longer has access to the source, or the original sources are forever lost.
-
Entire books have been published dissecting disassembled copies of other people's code. You might get away with fair use. ;-)
-
any news?
-
Could anyone who has 37.17 ioblixether.device please share it? its nowhere to be found anymore, all links are dead :confused:
thanks!