On Sat, 26 Jul 2003, Najati Imam wrote:
How does one determine the number of rings available to the system, or how many have been allocated; also, is there a way to determine which are in use? I would suspect, considering this is mostly just the Simple Count App that only 0-3 should be in use.
Najati
Najati, This part is probably not documented, so the best way is to go look at the source code. The RM creates 32 rings (compile-time constant), out of which 4 are used for output rings (one for each port on the bridalveil), and for slowport configuration, 2 are used to communicate between the ingress ME and Core, and 1 is used to communicate between the egress ME and the Core. Ring numbers starting from 0 are used for the ports, while ME<->Core rings are allocated in the reverse direction from 31 downwards. Hence 0,1,2,3 would be the port rings and 29,30,31 would be the Me<->core rings. The rest are unused, however they would be allocated if there were more ports in the system or more MicroAces which would need some Me<->core rings. If you create your own Microaces which need a ring to communicate between the core part and the microblock, then you can modify RM to allocate some rings from the 32 rings above for your microace. For example, if you run your own microAce apart from ingress and egress on a different microengine, you could allocate ring numbers 27 and 28 for core<->me communication. (Note how core<->me rings are allocated from 31 down, while ports rings are allocated from 0 upwards) If you want to create ME<->ME rings, you could create these rings in the core component of your MicroAce,(independent of the RM rings) and then patch the ring's meta information base and data base in the microcode which enqueues/dequeues packets from the ring. As reference code for how to create your own rings, you could see how the RM does it in ring.c file. -- abhijeet