[ixp1200] WWBump Code in 'Network System Design'
Shyamal Pandya
shyamalpandya at hotmail.com
Sat Oct 4 19:03:27 EDT 2003
Hi Lim,
I don't have this book but let me give it a shot.
>1. alu[dpoff, dpoff, +, 16] ; Add Ether+TCP offsets
>2. Buf_GetData[base, dl_buffer_handle] ; Get buffer base address
>3. DL_GetBufferOffset[boff] ; Get data offset in buf.
>4. alu[boff, boff, +, dpoff] ; Compute byte address
>5. alu_shf[boff, --, B, boff, >>3] ; Convert to Q-Word addr.
>6. sdram[read, $$hdr0, base, boff, 1], ctx_swap ; Read 8 bytes
>
>Assume the packet reach at the IX_Bus interface. [This is a big
>assumption... and is it correct? If not, when dispatch loop runs the WWBump
>macro, the entire packet is currently in SDRAM? ]
>From the above code it is pretty clear that the packet is already in the
SDRAM. There should be code somewhere that handles packet reception and
transfer from port --> rfifo --> SDRAM. Since it is pretty generic it should
be provided at one place and then not repeated. The dispatch loop must call
the Ingress macro which performs the packet reception before it will call
the WWBump macro.
>
>Line 2 get the SDRAM base address for the xfer reg to copy packet data
>into.
>
>Line 3 get the packet offset currently located in buffer (rfifo? SDRAM?),
>and i wonder how, by this command, the rfifo (SDRAM?) will know which is
>the correct current packet offset to return, amongst so many packets
>resided in rfifo (SDRAM?).
>
The dl_buffer_handle is the buffer handle for one particular packet, and it
is set some where before the above code, probably by Ingress. You will have
to look at the dispatch loop and follow the macros to understand. The SDRAM
doesn't return anything, the offset is calculated by your code that puts the
data in the SDRAM in the first place. Look at the code for dispatch loop
macros for a better idea.
>Assume IP header = 20 bytes, dpoff = 36 bytes.
>Line 4 & 5 calculate dpoff and convert to quadword. In this context, SDRAM
>should read from 32 - 39 bytes. But, how does the SDRAM knows to read from
>32 bytes, instead of 36 bytes?? Is there an internal mechanism to convert??
>
Line 5 converts the boff to a quadword, by dividing it by 8 (>>3). So a
value of 36 will turn into 4 after line 5. The 4th quadword starts with byte
32. Again, it is your code that is doing the conversion, and no internal
mechanism.
>Line 6, this line, make me confuse, i assume, this line actually read
>packet data from SDRAM into transfer register, where the packet data
>offset, is at base+boff. So, the previous assumption --> data is in rfifo
>is wrong. Then, which part of the code in WWBump, where microengine
>instructs IX-Bus to transfer packet into SDRAM??
>
If WWBump doesn't have the code, I guess there is some code (probably
EthernetIngress) that does the stuff. Look at the dispatch loop to see what
is called before WWBump.
That's what I can assume, someone who has the book will be able to shed more
light on the code.
--
Shyamal Pandya
Addr:
920 S Terrace Rd #102
Tempe AZ 85281
Phone:
1-480-966-1982
_________________________________________________________________
Share your photos without swamping your Inbox. Get Hotmail Extra Storage
today! http://join.msn.com/?PAGE=features/es
More information about the ixp1200
mailing list