Inter-ME uCode communication
I've finally gotten to the point in my code where I need to expand to multiple microengines. I think I've figured out what changes are needed in ixconfig, but other things are now vexing me. In the count example, the dispatch loop either forwards a packet with DL_SASink[] or DL_MESink[]. From the documentation, it sounds like DL_MESink[] passes the current packet reference to the next control block (next microengine). Just like DL_SASink[] has a inverse (DL_SASource[]), I would expect the the ME version to have one, something like DL_MESource[], yet no such macro exists. So what do must of you do? Have you just written a DL_MESource, or do you use one of the many other ways to syncronize between engines (SRAM CAM locks, or some other test-set mechanism)? I'm wondering which is the best way to go from here. Thanks, Cy
You do not have to use the DL_MESink[] macro to pass the packets to other MEs. Note, that the macro hardcodes the ring to which it is enqueuing, based on the output port. So if you want to store packets in some intermediate queue (before sending them to the output queue), you might have to write your own macro which generates ring handles according to your application. Typically, on the dequeueing side, you might have your own algorithm for scheduling, for example, you could use Roundrobin or Priority Queing. Thus it maybe makes more sense to do the dequeue operation inside the RR block or PQ block instead of in the dispatch loop. So the short answer is, yes, in general, you would have to write your own macros to enqueue/dequeue depending on your application. On 21 Jul 2003, Cyrus Hall wrote:
I've finally gotten to the point in my code where I need to expand to multiple microengines. I think I've figured out what changes are needed in ixconfig, but other things are now vexing me.
In the count example, the dispatch loop either forwards a packet with DL_SASink[] or DL_MESink[]. From the documentation, it sounds like DL_MESink[] passes the current packet reference to the next control block (next microengine). Just like DL_SASink[] has a inverse (DL_SASource[]), I would expect the the ME version to have one, something like DL_MESource[], yet no such macro exists.
So what do must of you do? Have you just written a DL_MESource, or do you use one of the many other ways to syncronize between engines (SRAM CAM locks, or some other test-set mechanism)? I'm wondering which is the best way to go from here.
Thanks, Cy
Hello, I was trying to debug a simple example (from chapter 5 of IXP1200 programming book) in an evaluation board. DevWorkBench can load the code into MEs but I could not receive any packets from any MAC ports. It seems that the hardware interface is down because all the LEDs are off. I also tried with another board and checked all the jumpers to make sure that OctalMAC and GigaMAC are enabled. Could anybody please help me? Regards, Charlie PS: I'm running Linux 2.3.99 from Netwinder on IXP12EB.
participants (3)
-
Abhijeet Joglekar
-
Charlie
-
Cyrus Hall