欢 迎 光 临
's BLog
这就是我
最新公告
站点日历
最新日志
最新回复
最新留言
 日志搜索

友情链接
其他信息
·IXP2400 Dispatch Loop 介绍     -|ixp2xxx 发表于 2006/1/4 12:01:00

IXP2400 Dispatch Loop 介绍

作者:梁剑

Emailixp2xxx@yahoo.com

2005-12-29

【摘要】

              本文主要介绍在Intel IXP2400 下的Dispatch Loop 函数和变量。目的尽量利用已经存在的函数来设计Microblock,使代码更加健壮、易懂、维护。

 

【关键字】

              Dispatch LoopBuffer handleMeta data

 

【正文】

Mes中的Microblocks使用Dispatch Loop实现数据流之间的交换。同时Dispatch Loop也可以Cache 寄存器和Local Memory中的变量,这些变量可以通过一些列的宏(macros)来访问。Dispatch Loop提供source sink blocks来接收和发送包给Xscale core 或不同的Microblocks组。

Dispatch Loop通过使用寄存器或Local Memory维护一些全局变量,以下是可以Cache的变量。

变量

长度

描述

Block_id

8bits

Mcroblocks必须设置这个变量来和XScale core通讯以便表示一个exception。充当通信ID的作用。

Exception_code

8bits

当一个buffer发送给XScale core的时候Microblock需要设置这个变量。

Dl_next_block

8bits

当前的block处理完成之后设置这个变量表示谁将成为下一个逻辑处理块。

Dl_buf_handle

32bits

这个buffer handle包括了起始包等各种信息

Dl_eop_buf_handle

32bits

这个buffer handle 包括了结束包等信息

Buffer_next

32bits

下一个buffer handle

Buffer_size

16bits

当前起始包的buffer 长度

Packet_size

16bits

包的总长度

Buffer_offset

16bits

Buffer中数据偏移量

Input_port

16bits

包接收的逻辑端口(0-255)

Next_hop_id

32bits

下一跳IP ID

以上变量中一般情况下dl_buf_handledl_eop_buf_handledl_next_block作为全局变量。

IXA SDK 提供一些列buffer分配、释放、修改IP头部信息的宏。例如:Meta dataExtended meta datasignallingExcepiton HandlingIP Header CachingAPI。下面我们介绍Meta dataExcepiton HandlingIP Header CachingAPI

1.  Dl_buf_init[]

初始化buffer

2.  Dl_buf_alloc[]

分配一个packet buffer。如果失败buffer_handle0

#macro dl_buf_alloc[buf_handle, free_list, req_sig, sig_action]

Buffer_handle必须是一个传输寄存器。

3.  Dl_buffer_free[]

释放用dl_buffer_alloc分配的buffer

4.  Dl_buf_get_desc[]

输入buffer handle将返回meta_dataSRAM中的地址(也叫做buffer descriptor),其实buffer handle的低24bits就是meta dataSRAM地址。

#macro dl_buf_get_desc[sram_offset, buf_handle]

Sram_offsetbuffermeta dataSRAM byte地址。

5.  Dl_buf_get_data[]

从给出的buffer handle得到包数据部分在SDRAM中的地址。Buffer handle24bitsmeta dataSRAM offset,通过在offset可以计算出DRAM offset

meta=buf_handle & 0xffffff;

index=(meta - sram_base) / sizeof (meta_data)

data =sdram_base + index * size_of_packet_buffer_in_dram

 

#macro dl_buf_get_data[sdram_offset, buf_handle]

Sdram_offsetpacket bufferSDRAM offset地址

6.  Dl_meta_init_cache[]

用指定的值初始化dl_meta寄存器。

7.  Dl_meta_load_cache[]

SRAM装载(cache)meta data到寄存器中。

8.  Dl_meta_flush_cache[]

GPR中的meta data 写回SRAM中。

9.  Dl_buf_drop[]

Drop一个buffer(single)

10.  Dl_meta_get_input_port[]

Packet was received port

11.  Dl_meta_set_input_port[]

设置接收的input port

#macro dl_meta_set_input_port[input_port]

Input_port 16bits

12.  Dl_meta_get_packet_size[]

13.  Dl_meta_set_packet_size[]

14.  Dl_meta_get_nexthop_id[]

15.  Dl_meta_set_nexthop

[阅读全文 | 回复(0) | 引用通告 | 编辑 | 收藏该日志]

发表评论:

    昵称:
    密码:
    主页:
    标题: