Intel IXP1200 manual Msgqreceive, Ramoption

Page 44

IXP1200 Network Processor Family ATM OC-3/12/Ethernet IP Router Example Design

msgq_send(io_message, MSGQ_HANDLE, RAM_OPTION)

Parameter

Description

 

 

io_message

The message to be sent. Valid messages must have bit 31 clear, and must not

be 0. 0 is returned on success, the message is untouched on failure.

 

 

 

MSGQ_HANDLE

Parameters described in “MSGQ_HANDLE Parameters”.

 

 

RAM_OPTION

ctx_swap, sig_done, no_option -- depending on the behavior desired for the

write at the end of msgq_send().

 

 

 

4.6.5msgq_receive()

Receives a message from the queue.

msgq_receive(io_xfer, MSGQ_HANDLE)

Parameter

Description

 

 

io_xfer

A read/write SRAM transfer register for use by msgq_receive(). The write

transfer is terminated and the read transfer returns the message.

 

 

 

MSGQ_HANDLE

Parameters described in “MSGQ_HANDLE Parameters”.

 

 

4.6.6Example

In the following example, a single microengine uses four threads to receive from INPUT_MSGQ, perform some processing, then send to OUTPUT_MSGQ in the order received. The example shows how critical sections are used to control multiple threads accessing the same queue, and how sequence numbers can be used to maintain queue order.

#define INPUT_MSGQ @msgq_in_index, @msgq_in_base, MSGQ_IN_BASE_ADDR, MSGQ_SYNC, scratch, LWCOUNT16

#define OUTPUT_MSGQ @msgq_out_index, @msgq_out_base, MSGQ_OUT_BASE_ADDR, MSGQ_SYNC, scratch, LWCOUNT16

#define MY_SEQUENCE_HANDLE my_seq_number, @enter, @one, @exit, @one, 32

msgq_init_queue(INPUT_MSGQ) ; must complete before any threads access queue msgq_init_queue(OUTPUT_MSGQ) ; must complete before any threads access queue

...

msgq_init_regs(INPUT_MSGQ) msgq_init_regs(OUTPUT_MSGQ) sequence_init(MY_SEQUENCE) critsect_init(@mutex)

...

critsect_enter(@mutex) ; allow only 1 thread to access queue at a time sequence_enter(MY_SEQUENCE) ; remember the order messages were received msgq_receive($xfer, INPUT_MSGQ) ; receive a message

critsect_exit(@mutex) ; allow next thread to receive

44

Application Note

Modified on: 3/20/02,

Image 44
Contents IXP1200 Network Processor Family Application Note Contents Virtual Circuit Lookup Table Cache Limitations Figures Scope of Example Design IntroductionPurpose of ATM Example Design Configuration Description BackgroundSupported / Not Implemented Functions Ethernet, IP and AAL5 Protocol ProcessingFrame and PDU Length vs. IP Packet Length SARExpected Ethernet Transmit Bandwidth Frame and PDU Length vs. IP Packet LengthExecution Environment SoftwareDeveloper’s Workbench ATM Data Stream Dialog Box Hardware System OverviewSystem Programming Model StrongARM Core Software System Programming ModelSoftware Partitioning ATM TXLookup Tables VC Lookup Data FlowATM to Ethernet Data Flow IP Lookup Table ATM to Ethernet Processing StepsStrongARM Core Initialization Ethernet to ATM Data FlowMicroengine Functional Blocks Microengine InitializationATM Receive Microengine StructureHigh Level Algorithm OC-12 Port OC-3 PortsATM Transmit Microengine ATM Transmit High Level AlgorithmIP-Router Microengine Ethernet Receive MicroengineEthernet Receive High Level Algorithm Ethernet Transmit MicroengineEthernet Receive Structure CRC-32 Hardware Checking on Receive CRC-32 Calculations using IXP1240/1250 HardwareEthernet Transmit Structure Bytes Big Endian Diagram First Cell of a PDU in Rfifo and in DramCRC-32 Hardware Generation on Transmit Transmit AlignmentCRC-32 Checker and Generator Microengines Soft-CRC Functional Differences between Checker and GeneratorSoftware Subsystems & Data Structures Virtual Circuit Lookup Table atmvctable.ucCRC-32 Checker and Generator High Level Algorithm CRC-32 ComputationVctablehashed Structure Vctablelinear Structure Primary VC TableVC Table Management API atmutils.c VC Table EntryCell data11 Entry Description Entry DescriptionBuffer Offset Buffer Index VC Cache Function 1.1 OC-12 Configuration 1.2 OC-3 ConfigurationVirtual Circuit Lookup Table Cache VC Cache StructureIP Lookup Table VC Cache APIIP Table Function IP Table StructureIP Table Management API RoutetableinitMtuchange AtmrouteaddEnetrouteadd RtentinfoRoutedelete RthelpSram Buffer Descriptors and Dram Data Buffers 2 3 4 5 6 7 8ATM Header Entry Description Sram Buffer Descriptor FormatNext BD Last Quad Queue Index Dram Data Buffer Format 2 3 4 5 6 7 8 Bytes2 3 4 Enet SrcAdrSequence Numbers sequence.uc System Limit on Packet BuffersSequencehandle Usage API Call DescriptionMessage Queues msgq.uc Usage ModelExample Step Sequence Operation Bakery Line AnalogyMsgqhandle Parameters MsgqinitqueueMsgqinitregs MsgqsendMsgqreceive Ramoption1.1 Features Feature DescriptionBuffer Descriptor Queues bdq.uc BDQ Management MacrosCounters CountGlobal Parameters Use of the Counter SubsystemCounter Base Address Counter IndexGlobal Counter Enable and Flags Counter Flags#define Statement Description Counter Group DescriptionPortcounterinc Counters.uc CounterresetCounterinc Portcounterinc Algorithm IntotaldiscardsCounters.c Countersinit CountersprintGlobal $transfer Register Name Manager xfer.uc AtmtxcrcbadbdMutex Vectors MutexvectorinitMutexvectorenter MutexvectorexitProjectconfig.h Project Configuration / Modifying the Example DesignInter-Thread Signalling Switching Between Hardware Configurations Testing EnvironmentsSystemconfig.h Extending the Example Design Simulation Support Scripts, etcLimitations Document Conventions Acronyms & DefinitionsByte 10 11 12 13 14 15 16 ... BytesRelated Documents Title Description