The code that enables Full Duplex Ethernet is in the file:
/usr/src/ddk-6.1.0/network/src/hardware/devn/ppc800/ppc800.c
It contains the code:
if( nic->flags & NIC_FLAG_FDX ) {
scc_reg->scc_psmr |= PPC800_PSMR_FDE;
}
This doesn’t obey Motorola’s specification for Full Duplex
Ethernet on the MPC860. In their manual (available online)
it says:
28.16 Full-Duplex Ethernet Support
To run full-duplex Ethernet, select loopback and full-duplex
Ethernet modes in the SCCÕs protocol-speciÞc mode register,
(PSMR[LPB, FDE] = 1). The loopback mode tells the
Ethernet controller to accept received frames without
signaling a collision. Setting PSMR[FDE] tells the
controller that it can send while receiving without
waiting for a clear line (carrier sense).
So it has to be:
if( nic->flags & NIC_FLAG_FDX ) {
scc_reg->scc_psmr |= PPC800_PSMR_FDE |
PPC800_PSMR_LBK;
}
I have a test that hammers packets at the TCP echo port
(full size packets with a preload) and measures the
theroughput.
As written the TCP/IP throughput is an utterly dismal
132 kbytes/sec over full-duplex ethernet. With this change
the speed increases to a slightly better 640 kbytes/second.
This is still way short of the theoretical 2 Mbytes/second,
and half the speed of another OS we run on the same
hardware which manages 1340 kbytes/second. It is an
MPC860P and is running at 48MHz.
And nowhere near the full-speed that Sun 3’s managed over
10 years ago running on 20MHz 68020s.
So is there anything else that needs to be changed to get
the TCP/IP/Ethernet performance up?
Tom Evans
InitialSurnameAt
tennyson.com.au
Thanks for the tip – btw, the #define in your fix should be PPC800_PSMR_LPB
not PPC800_PSMR_LBK.
“Tom Evans” <tom@nospam.invalid> wrote in message
news:3BFA02AD.488D@nospam.invalid…
The code that enables Full Duplex Ethernet is in the file:
/usr/src/ddk-6.1.0/network/src/hardware/devn/ppc800/ppc800.c
It contains the code:
if( nic->flags & NIC_FLAG_FDX ) {
scc_reg->scc_psmr |= PPC800_PSMR_FDE;
}
This doesn’t obey Motorola’s specification for Full Duplex
Ethernet on the MPC860. In their manual (available online)
it says:
28.16 Full-Duplex Ethernet Support
To run full-duplex Ethernet, select loopback and full-duplex
Ethernet modes in the SCCÕs protocol-speciÞc mode register,
(PSMR[LPB, FDE] = 1). The loopback mode tells the
Ethernet controller to accept received frames without
signaling a collision. Setting PSMR[FDE] tells the
controller that it can send while receiving without
waiting for a clear line (carrier sense).
So it has to be:
if( nic->flags & NIC_FLAG_FDX ) {
scc_reg->scc_psmr |= PPC800_PSMR_FDE |
PPC800_PSMR_LBK;
}
I have a test that hammers packets at the TCP echo port
(full size packets with a preload) and measures the
theroughput.
As written the TCP/IP throughput is an utterly dismal
132 kbytes/sec over full-duplex ethernet. With this change
the speed increases to a slightly better 640 kbytes/second.
This is still way short of the theoretical 2 Mbytes/second,
and half the speed of another OS we run on the same
hardware which manages 1340 kbytes/second. It is an
MPC860P and is running at 48MHz.
And nowhere near the full-speed that Sun 3’s managed over
10 years ago running on 20MHz 68020s.
So is there anything else that needs to be changed to get
the TCP/IP/Ethernet performance up?
Tom Evans
InitialSurnameAt
tennyson.com.au
Logged and should be fixed for 6.1.1. Thanks.
chris
Tom Evans <tom@nospam.invalid> wrote:
The code that enables Full Duplex Ethernet is in the file:
/usr/src/ddk-6.1.0/network/src/hardware/devn/ppc800/ppc800.c
It contains the code:
if( nic->flags & NIC_FLAG_FDX ) {
scc_reg->scc_psmr |= PPC800_PSMR_FDE;
}
This doesn’t obey Motorola’s specification for Full Duplex
Ethernet on the MPC860. In their manual (available online)
it says:
28.16 Full-Duplex Ethernet Support
To run full-duplex Ethernet, select loopback and full-duplex
Ethernet modes in the SCC?s protocol-speci?c mode register,
(PSMR[LPB, FDE] = 1). The loopback mode tells the
Ethernet controller to accept received frames without
signaling a collision. Setting PSMR[FDE] tells the
controller that it can send while receiving without
waiting for a clear line (carrier sense).
So it has to be:
if( nic->flags & NIC_FLAG_FDX ) {
scc_reg->scc_psmr |= PPC800_PSMR_FDE |
PPC800_PSMR_LBK;
}
I have a test that hammers packets at the TCP echo port
(full size packets with a preload) and measures the
theroughput.
As written the TCP/IP throughput is an utterly dismal
132 kbytes/sec over full-duplex ethernet. With this change
the speed increases to a slightly better 640 kbytes/second.
This is still way short of the theoretical 2 Mbytes/second,
and half the speed of another OS we run on the same
hardware which manages 1340 kbytes/second. It is an
MPC860P and is running at 48MHz.
And nowhere near the full-speed that Sun 3’s managed over
10 years ago running on 20MHz 68020s.
So is there anything else that needs to be changed to get
the TCP/IP/Ethernet performance up?
Tom Evans
InitialSurnameAt
tennyson.com.au
–
cdm@qnx.com > “The faster I go, the behinder I get.”
Chris McKillop – Lewis Carroll –
Software Engineer, QSSL
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Chris McKillop wrote:
Logged and should be fixed for 6.1.1. Thanks.
Thanks.
You have no idea how good it is to get a quick response
like that after trying to deal with companies like
Mxxxxxxx and Rxxxxxx for years.
Tom Evans
InitialSurnameAt
tennyson.com.au