pm5337_eos_demo.tcl
来自「用于EOS芯片的驱动程序, 供参考 参考」· TCL 代码 · 共 1,727 行 · 第 1/4 页
TCL
1,727 行
set sts1_ind 0
### ii. Poll MEM_BUSY Bit ###
Poll_BUSY_Bit $devID 0xE410 15
### iii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = STS3_index*3 + STS1_index, where STS3_index ranges
# from 0 to 3, and STS1_index ranges from 0 to 2.
set mem_addr [expr ($sts3_ind * 3) + $sts1_ind]
admwr $devID 0xE411 $mem_addr
### iv. Setting Link Configuration Table Memory Value ###
# mode[1:0] = 0x2 = VCAT non-LCAS mode
# EXP_SQ_EN = 0x1
# Inhibit = 0x0
# EXP_SQ_[6:0] = 0x0
# Group Tag[4:0] = Ethernet Channel = 0x0
set prov_mode 0x3
set exp_sq_en 0x1
set inhibit 0x0
set exp_sq 0x0
set group_tag 0
set mem_data0 [expr [expr $exp_sq << 8]|$group_tag]
set mem_data1 [expr [expr $prov_mode << 2]|[expr $exp_sq_en << 1]|$inhibit]
admwr $devID 0xE412 $mem_data0 ;# bit 15 to 0
admwr $devID 0xE413 $mem_data1 ;# bit 31 to 16
admwr $devID 0xE414 0x0000 ;# bit 47 to 32
admwr $devID 0xE415 0x0000 ;# bit 63 to 48
admwr $devID 0xE416 0x0000 ;# bit 79 to 64
admwr $devID 0xE417 0x0000 ;# bit 95 to 80
admwr $devID 0xE418 0x0000 ;# bit 111 to 96
admwr $devID 0xE419 0x0000 ;# bit 127 to 112
### iv. Trigger Indirect Write Access ###
# MEM_BUSY =1
# MEM_RWB = 0
# MEM_SEL = 0x0
admwr $devID 0xE410 0x8000
#############################
### Configuring Channel 1 ###
#############################
set sts3_ind 1
set sts1_ind 0
### ii. Poll MEM_BUSY Bit ###
Poll_BUSY_Bit $devID 0xE410 15
### iii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = STS3_index*3 + STS1_index, where STS3_index ranges
# from 0 to 3, and STS1_index ranges from 0 to 2.
set mem_addr [expr ($sts3_ind * 3) + $sts1_ind]
admwr $devID 0xE411 $mem_addr
### iv. Setting Link Configuration Table Memory Value ###
# mode[1:0] = 0x2 = VCAT non-LCAS mode
# EXP_SQ_EN = 0x1
# Inhibit = 0x0
# EXP_SQ_[6:0] = 0x0
# Group Tag[4:0] = Ethernet Channel = 0x0
set prov_mode 0x3
set exp_sq_en 0x1
set inhibit 0x0
set exp_sq 0x0
set group_tag 1
set mem_data0 [expr [expr $exp_sq << 8]|$group_tag]
set mem_data1 [expr [expr $prov_mode << 2]|[expr $exp_sq_en << 1]|$inhibit]
admwr $devID 0xE412 $mem_data0 ;# bit 15 to 0
admwr $devID 0xE413 $mem_data1 ;# bit 31 to 16
admwr $devID 0xE414 0x0000 ;# bit 47 to 32
admwr $devID 0xE415 0x0000 ;# bit 63 to 48
admwr $devID 0xE416 0x0000 ;# bit 79 to 64
admwr $devID 0xE417 0x0000 ;# bit 95 to 80
admwr $devID 0xE418 0x0000 ;# bit 111 to 96
admwr $devID 0xE419 0x0000 ;# bit 127 to 112
### iv. Trigger Indirect Write Access ###
# MEM_BUSY =1
# MEM_RWB = 0
# MEM_SEL = 0x0
admwr $devID 0xE410 0x8000
#############################
### Configuring Channel 2 ###
#############################
set sts3_ind 2
set sts1_ind 0
### ii. Poll MEM_BUSY Bit ###
Poll_BUSY_Bit $devID 0xE410 15
### iii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = STS3_index*3 + STS1_index, where STS3_index ranges
# from 0 to 3, and STS1_index ranges from 0 to 2.
set mem_addr [expr ($sts3_ind * 3) + $sts1_ind]
admwr $devID 0xE411 $mem_addr
### iv. Setting Link Configuration Table Memory Value ###
# mode[1:0] = 0x2 = VCAT non-LCAS mode
# EXP_SQ_EN = 0x1
# Inhibit = 0x0
# EXP_SQ_[6:0] = 0x0
# Group Tag[4:0] = Ethernet Channel = 0x0
set prov_mode 0x3
set exp_sq_en 0x1
set inhibit 0x0
set exp_sq 0x0
set group_tag 2
set mem_data0 [expr [expr $exp_sq << 8]|$group_tag]
set mem_data1 [expr [expr $prov_mode << 2]|[expr $exp_sq_en << 1]|$inhibit]
admwr $devID 0xE412 $mem_data0 ;# bit 15 to 0
admwr $devID 0xE413 $mem_data1 ;# bit 31 to 16
admwr $devID 0xE414 0x0000 ;# bit 47 to 32
admwr $devID 0xE415 0x0000 ;# bit 63 to 48
admwr $devID 0xE416 0x0000 ;# bit 79 to 64
admwr $devID 0xE417 0x0000 ;# bit 95 to 80
admwr $devID 0xE418 0x0000 ;# bit 111 to 96
admwr $devID 0xE419 0x0000 ;# bit 127 to 112
### iv. Trigger Indirect Write Access ###
# MEM_BUSY =1
# MEM_RWB = 0
# MEM_SEL = 0x0
admwr $devID 0xE410 0x8000
#############################
### Configuring Channel 3 ###
#############################
set sts3_ind 3
set sts1_ind 0
### ii. Poll MEM_BUSY Bit ###
Poll_BUSY_Bit $devID 0xE410 15
### iii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = STS3_index*3 + STS1_index, where STS3_index ranges
# from 0 to 3, and STS1_index ranges from 0 to 2.
set mem_addr [expr ($sts3_ind * 3) + $sts1_ind]
admwr $devID 0xE411 $mem_addr
### iv. Setting Link Configuration Table Memory Value ###
# mode[1:0] = 0x2 = VCAT non-LCAS mode
# EXP_SQ_EN = 0x1
# Inhibit = 0x0
# EXP_SQ_[6:0] = 0x0
# Group Tag[4:0] = Ethernet Channel = 0x0
set prov_mode 0x3
set exp_sq_en 0x1
set inhibit 0x0
set exp_sq 0x0
set group_tag 3
set mem_data0 [expr [expr $exp_sq << 8]|$group_tag]
set mem_data1 [expr [expr $prov_mode << 2]|[expr $exp_sq_en << 1]|$inhibit]
admwr $devID 0xE412 $mem_data0 ;# bit 15 to 0
admwr $devID 0xE413 $mem_data1 ;# bit 31 to 16
admwr $devID 0xE414 0x0000 ;# bit 47 to 32
admwr $devID 0xE415 0x0000 ;# bit 63 to 48
admwr $devID 0xE416 0x0000 ;# bit 79 to 64
admwr $devID 0xE417 0x0000 ;# bit 95 to 80
admwr $devID 0xE418 0x0000 ;# bit 111 to 96
admwr $devID 0xE419 0x0000 ;# bit 127 to 112
### iv. Trigger Indirect Write Access ###
# MEM_BUSY =1
# MEM_RWB = 0
# MEM_SEL = 0x0
admwr $devID 0xE410 0x8000
### Enable RVCP and TVCP ###
# Enabling RVCP block
# set SDH_SEL = 0 and RVCP_ENABLE = 1
admwr $devID 0xE400 0x8000
# Enabling TVCP block
# Mode 0, 1 and 3 carry SONET traffic; therefore,
# set SONET_SDH_SEL = 0, TVCP_ENABLE = 1, PTR == 522, SS = 10
admwr $devID 0xE500 0x920A
}
#------------------------------------------------------------------------------
# SCRIPT NAME: EOS_VCG_64VT15_Demo
#
# DESCRIPTION: This procedure configures the EOS Subsystem to map 1 FE/GE port to
# 64 VT1.5.
#
# PARAMETERS: devID - This parameter is used to specify the device
# under configuration
#
# NOTES:
#
# 1 FE/GE --> 64 VT1.5
#
# timeslot : 1 2 3 4 5 6 7 8 9 10 11 12
# sts3_ind : 0 1 2 3 0 1 2 3 0 1 2 3
# sts1_ind : 0 0 0 0 1 1 1 1 2 2 2 2
# channel : 0 0 0 X X X X X X X X X
#------------------------------------------------------------------------------
proc EOS_VCG_64VT15_Demo {devID} {
source /usr/lib/cgi-bin/apps/tclscripts/PM5337_util.tcl
#######################################################################
### Initializing TVCP - Far End Sink (MST) Buffer and Group ###
### Context Memory ###
#######################################################################
##### 1. Initializing MST Buffer #####
# Note: All MST must be initialized to FAIL when provisioning the
# first member for a group or if all the members in the group
# are in IDLE.
for {set grouptag 0} {$grouptag <= 7} {incr grouptag} {
for {set wordoffset 0} {$wordoffset <= 7} {incr wordoffset} {
### i. Poll MEM_BUSY Bit in 0xE508 ###
Poll_BUSY_Bit $devID 0xE508 15
### ii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = Group-Tag *8 + Word Offset
set mem_addr [expr $grouptag*8 + $wordoffset]
admwr $devID 0xE509 $mem_addr
### iii. Setting FE SK MST Value ###
admwr $devID 0xE50A 0x00FF ;# bit 15 to 0
admwr $devID 0xE50B 0x0000 ;# bit 31 to 16
admwr $devID 0xE50C 0x0000 ;# bit 47 to 32
admwr $devID 0xE50D 0x0000 ;# bit 63 to 48
### iv. Trigger Indirect Write Access ###
# MEM_BUSY = 1
# MEM_RWB = 0
# MEM_SEL = 0x1
admwr $devID 0xE508 0x8001
}
}
##### 2. Initializing Group Context Memory #####
# Note: GID_SEED allows software to program an initial seed
# for the GID generation of each group, which should
# be done prior to provisioning the first member for the
# group. A unique and non-zero seed for each group should
# be set. In the following example, the group seed is set
# to be equal to the grouptag (i.e. channel #)
set wordoffset 0x2
for {set grouptag 0} {$grouptag <= 7} {incr grouptag} {
### i. Poll MEM_BUSY Bit in 0xE508 ###
Poll_BUSY_Bit $devID 0xE508 15
### ii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = Group-Tag *3 + Word Offset
set mem_addr [expr $grouptag*3 + $wordoffset]
admwr $devID 0xE509 $mem_addr
### iii. Randomly asign GID seed = grouptag ###
admwr $devID 0xE50A $grouptag ;# bit 15 to 0
admwr $devID 0xE50B 0x0000 ;# bit 31 to 16
admwr $devID 0xE50C 0x0000 ;# bit 47 to 32
admwr $devID 0xE50D 0x0000 ;# bit 63 to 48
### iv. Trigger Indirect Write Access ###
# MEM_BUSY = 1
# MEM_RWB = 0
# MEM_SEL = 0x2
admwr $devID 0xE508 0x8002
}
##### 3. Initializating TVCP for 64th VT member #####
# High Order
for {set sts3_ind 0} {$sts3_ind <= 15} {incr sts3_ind} {
for {set sts1_ind 0} {$sts1_ind <= 2} {incr sts1_ind} {
### ii. Poll MEM_BUSY Bit in 0xE508 ###
Poll_BUSY_Bit $devID 0xE508 15
### iii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = STS3_index*3 + STS1_index, where STS3_index ranges
# from 0 to 3, and STS1_index ranges from 0 to 2.
set mem_addr [expr ($sts3_ind * 3) + $sts1_ind]
admwr $devID 0xE509 $mem_addr
### iv. Setting Link Configuration Table Memory Value ###
# VC_SQ[5:0] = 0x00
set group_tag 25
set group_tag [dec2hex $group_tag]
set inhibit 0x0
set prov_mode 0x0
set mem_data0 [expr [expr $group_tag << 4]|[expr $inhibit << 3]|$prov_mode]
admwr $devID 0xE50A $mem_data0 ;# bit 15 to 0
admwr $devID 0xE50B 0x0000 ;# bit 31 to 16
admwr $devID 0xE50C 0x0000 ;# bit 47 to 32
admwr $devID 0xE50D 0x0000 ;# bit 63 to 48
### v. Trigger Indirect Write Access ###
# MEM_BUSY = 1
# MEM_RWB = 0
# MEM_SEL = 0x0
admwr $devID 0xE508 0x8000
}
}
# Low-Order
for {set sts3_ind 0} {$sts3_ind <= 3} {incr sts3_ind} {
for {set sts1_ind 0} {$sts1_ind <= 2} {incr sts1_ind} {
for {set vtg_ind 0} {$vtg_ind <= 6} {incr vtg_ind} {
for {set vt_ind 0} {$vt_ind <= 3} {incr vt_ind} {
### ii. Poll MEM_BUSY Bit in 0xE508 ###
Poll_BUSY_Bit $devID 0xE508 15
### iii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = sts3_ind*84 + sts1_index*28 + vtg_ind*4 + vt_ind + 64
# where sts3_ind ranges from 0 to 3, sts1_ind ranges from 0 to 2,
# vtg_ind ranges from 0 to 6, and vt_ind ranges from 0 to 3
set mem_addr [expr ($sts3_ind*84)+($sts1_ind*28)+($vtg_ind*4)+($vt_ind+64)]
admwr $devID 0xE509 $mem_addr
### iv. Setting Link Configuration Table Memory Value ###
# Group Tag[4:0] = Ethernet Channel = 0x0 to 0x7
# Inhibit = 0x0
# Prov/Mode[1:0] = VCG non-LCAS mode = 0x2
set group_tag 25
set group_tag [dec2hex $group_tag]
set inhibit 0x0
set prov_mode 0x0
set mem_data0 [expr [expr $group_tag << 4]|[expr $inhibit << 3]|$prov_mode]
admwr $devID 0xE50A $mem_data0 ;# bit 15 to 0
admwr $devID 0xE50B 0x0000 ;# bit 31 to 16
admwr $devID 0xE50C 0x0000 ;# bit 47 to 32
admwr $devID 0xE50D 0x0000 ;# bit 63 to 48
### v. Trigger Indirect Write Access ###
# MEM_BUSY = 1
# MEM_RWB = 0
# MEM_SEL = 0x0
admwr $devID 0xE508 0x8000
}
}
}
}
#######################################################################
##### Initializing RVCP - Near End Source (MST) Buffer and Group #####
##### Configuration Table Memory Structure #####
#######################################################################
##### 1. Initializing MST Buffer #####
# Note: All MST must be initialized to FAIL when provisioning the
# first member for a group or if all the members in the group
# are in IDLE.
for {set grouptag 0} {$grouptag <= 7} {incr grouptag} {
### i. Poll MEM_BUSY Bit in 0xE508 ###
Poll_BUSY_Bit $devID 0xE410 15
### ii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = Group-Tag
admwr $devID 0xE411 $grouptag
### iii. Setting NE SK MST Value ###
admwr $devID 0xE412 0x00FF ;# bit 15 to 0
admwr $devID 0xE413 0x0000 ;# bit 31 to 16
admwr $devID 0xE414 0x0000 ;# bit 47 to 32
admwr $devID 0xE415 0x0000 ;# bit 63 to 48
admwr $devID 0xE416 0x0000 ;# bit 79 to 64
admwr $devID 0xE417 0x0000 ;# bit 95 to 80
admwr $devID 0xE418 0x0000 ;# bit 111 to 96
admwr $devID 0xE419 0x0000 ;# bit 127 to 112
### iv. Trigger Indirect Write Access ###
# MEM_BUSY =1
# MEM_RWB = 0
# MEM_SEL = 0xB
admwr $devID 0xE410 0x800B
}
##### 2. Configuring Group Configuration Table Memory Structure #####
### iii) Write Settings to registers ###
for {set grouptag 0} {$grouptag <= 7} {incr grouptag} {
### i. Poll MEM_BUSY Bit in 0xE508 ###
Poll_BUSY_Bit $devID 0xE410 15
### ii. Calculate and Set MEM_ADDR ###
# MEM_ADDR = Group-Tag
admwr $devID 0xE411 $grouptag
### iii. Setting FE SK MST Value ###
set mem_data0 0xFFFF
set mem_data1 0x3
admwr $devID 0xE412 $mem_data0 ;# bit 15 to 0
admwr $devID 0xE413 $mem_data1 ;# bit 31 to 16
admwr $devID 0xE414 0x0000 ;# bit 47 to 32
admwr $devID 0xE415 0x0000 ;# bit 63 to 48
admwr $devID 0xE416 0x0000 ;# bit 79 to 64
admwr $devID 0xE417 0x0000 ;# bit 95 to 80
admwr $devID 0xE418 0x0000 ;# bit 111 to 96
admwr $devID 0xE419 0x0000 ;# bit 127 to 112
### iv. Trigger Indirect Write Access ###
# MEM_BUSY =1
# MEM_RWB = 0
# MEM_SEL = 0x1
admwr $devID 0xE410 0x8001
}
#######################################################################
### Provisioning VCG Member for Mode 1 (VT1.5 VCG non LCAS mode) ###
#######################################################################
set sts3_ind 0
set sts1_ind 0
set vc_sq 0
for {set vtg_ind 0} {$vtg_ind <= 6} {incr vtg_ind} {
for {set vt_ind 0} {$vt_ind <= 3} {incr vt_ind} {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?