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 + -
显示快捷键?