I've given up on these patches, instead I 'pulled' the central repository off github and a am applying the patches to my own copy, but only after testing each one, then merging in my own patches.
There is another 'stupid' bug in w5100.cpp:
initSS();
writeMR(1<<RST);
writeTMSR(0x55);
writeRMSR(0x55);
for (int i=0; i<MAX_SOCK_NUM; i++) {
SBASE[i] = TXBUF_BASE + SSIZE * i;
RBASE[i] = RXBUF_BASE + RSIZE * i;
}
If people READ the chips data sheet they would see that it takes 10ms for the chip to 'software' reset (W5100 V1.2.4 P.64), as such the code should be:
initSS();
// Issue a software reset to the W5100 chip.
writeMR(1<<RST);
//wait 100ms for the chip to physically reset(it takes 10ms but manufacturer request 100ms).
delay(100);
// Continue with the setup of the internal registers.
writeTMSR(0x55);
writeRMSR(0x55);
fortunately the W5100 chip has some default values, so as the reset is stamping on them, they are being reinitialized to the default,
There may be a chance this bug is stamping on the setting up of the sockets.....
I'm still trying to get an answer back off the manufacturer as to *if the RST bit is 'testable' because if it was, then I would drop in a subroutine, both BEFORE & after the reset, (which would negate the need for the stupid delay(300)
With a TESTABLE state that could be returned up the stack. Currently when initializing a library on the arduino they mostly return 'void'.