增加ebmmu的新的测试用例
This commit is contained in:
@@ -88,7 +88,7 @@ def compare_files(source_file, target_file):
|
|||||||
#print(f"Line {i+1}, Position {j+1}: Values match ({src_val} == {tgt_val}).")
|
#print(f"Line {i+1}, Position {j+1}: Values match ({src_val} == {tgt_val}).")
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
#print(f"\tLine {i+1}, Position {j+1}: Values differ ({src_val} != {tgt_val}).")
|
print(f"\tLine {i+1}, Position {j+1}: Values differ ({src_val} != {tgt_val}).")
|
||||||
line_match = False
|
line_match = False
|
||||||
all_match = False
|
all_match = False
|
||||||
|
|
||||||
|
|||||||
@@ -49,22 +49,24 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
add_tc_2_runlist(ebmmu.tc1())
|
#add_tc_2_runlist(ebmmu.tc1())
|
||||||
add_tc_2_runlist(ebmmu.tc2())
|
#add_tc_2_runlist(ebmmu.tc2())
|
||||||
add_tc_2_runlist(ebmmu.tc3())
|
#add_tc_2_runlist(ebmmu.tc3())
|
||||||
add_tc_2_runlist(ebmmu.tc4())
|
#add_tc_2_runlist(ebmmu.tc4())
|
||||||
add_tc_2_runlist(ebmmu.tc5())
|
#add_tc_2_runlist(ebmmu.tc5())
|
||||||
add_tc_2_runlist(ebmmu.tc6())
|
#add_tc_2_runlist(ebmmu.tc6())
|
||||||
add_tc_2_runlist(ebmmu.tc7())
|
#add_tc_2_runlist(ebmmu.tc7())
|
||||||
add_tc_2_runlist(ebmmu.tc8())
|
#add_tc_2_runlist(ebmmu.tc8())
|
||||||
add_tc_2_runlist(ebmmu.tc9())
|
#add_tc_2_runlist(ebmmu.tc9())
|
||||||
add_tc_2_runlist(ebmmu.tc10())
|
#add_tc_2_runlist(ebmmu.tc10())
|
||||||
add_tc_2_runlist(ebmmu.tc11())
|
#add_tc_2_runlist(ebmmu.tc11())
|
||||||
add_tc_2_runlist(ebmmu.tc12())
|
#add_tc_2_runlist(ebmmu.tc12())
|
||||||
add_tc_2_runlist(ebmmu.tc13())
|
#add_tc_2_runlist(ebmmu.tc13())
|
||||||
add_tc_2_runlist(ebmmu.tc14())
|
#add_tc_2_runlist(ebmmu.tc14())
|
||||||
add_tc_2_runlist(ebmmu.tc15())
|
#add_tc_2_runlist(ebmmu.tc15())
|
||||||
add_tc_2_runlist(ebmmu.tc16())
|
#add_tc_2_runlist(ebmmu.tc16())
|
||||||
|
#add_tc_2_runlist(ebmmu.tc17())
|
||||||
|
add_tc_2_runlist(ebmmu.tc18())
|
||||||
|
|
||||||
|
|
||||||
add_tc_2_runlist(watchdog.tc1())
|
add_tc_2_runlist(watchdog.tc1())
|
||||||
|
|||||||
@@ -3094,3 +3094,774 @@ def tc16():
|
|||||||
|
|
||||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||||
return gen_file_def
|
return gen_file_def
|
||||||
|
|
||||||
|
def tc17():
|
||||||
|
genPkt = GenPkt()
|
||||||
|
|
||||||
|
gen_file_def = "ebmmu_tc17"
|
||||||
|
sm_idx = 0
|
||||||
|
tc_des = "测试17个ebmmu全配置下运行,每4个ebmmu对应一个SM,映射4个字节。分别映射SM1/3/5/7, \\n" \
|
||||||
|
+ "每个映射了16个字节。中间无字节空洞。使用1个子包,将数据读上来。每个ebmmu必须对齐、足长的写入,\\n" \
|
||||||
|
+ "对应的sm才能正常工作。QSPI/SPI侧能正常的读到相关的数据。"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
#>>>>>>设置EB-MMU,测试用例15,读,检查权限
|
||||||
|
genPkt.clean()
|
||||||
|
genPkt.setPktType(0)
|
||||||
|
|
||||||
|
addr = 0x10000000
|
||||||
|
addr_off = 0x0
|
||||||
|
sm_size = 16
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [0,] * 256
|
||||||
|
|
||||||
|
taddr = addr + addr_off
|
||||||
|
ebmmu_offset = 0
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x1000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x3000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x4000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x1, 0, 0x0200, 0x1, 160, data)
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [0,] * 256
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
ebmmu_offset = 0
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x1000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x3000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x4000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x2, 0, 0x0200, 0x1, 160, data)
|
||||||
|
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [0,] * 256
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
ebmmu_offset = 0
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x1000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x3000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x4000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x3, 0, 0x0200, 0x1, 160, data)
|
||||||
|
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [0,] * 256
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
ebmmu_offset = 0
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x1000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x3000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x4000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x4, 0, 0x0200, 0x1, 160, data)
|
||||||
|
|
||||||
|
data = [0,] * 2
|
||||||
|
data[0] = (sm_size >> 0) & 0xff
|
||||||
|
data[1] = (sm_size >> 8) & 0xff
|
||||||
|
genPkt.addSubPkt(0x0, 0, 0x306, 0xe, 2, data)
|
||||||
|
|
||||||
|
data = [0,] * 2
|
||||||
|
data[0] = (sm_size >> 0) & 0xff
|
||||||
|
data[1] = (sm_size >> 8) & 0xff
|
||||||
|
genPkt.addSubPkt(0x0, 0, 0x30e, 0xe, 2, data)
|
||||||
|
|
||||||
|
data = [0,] * 2
|
||||||
|
data[0] = (sm_size >> 0) & 0xff
|
||||||
|
data[1] = (sm_size >> 8) & 0xff
|
||||||
|
genPkt.addSubPkt(0x0, 0, 0x316, 0xe, 2, data)
|
||||||
|
|
||||||
|
|
||||||
|
data = [0,] * 2
|
||||||
|
data[0] = (sm_size >> 0) & 0xff
|
||||||
|
data[1] = (sm_size >> 8) & 0xff
|
||||||
|
genPkt.addSubPkt(0x0, 0, 0x31e, 0xe, 2, data)
|
||||||
|
|
||||||
|
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des))
|
||||||
|
|
||||||
|
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx)
|
||||||
|
+genWriteTransPktCode(gen_file_def, sm_idx)
|
||||||
|
+genTrgTransPktCode(gen_file_def, sm_idx)
|
||||||
|
+genReadAckPktCode(gen_file_def, sm_idx)
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
|
||||||
|
+genMessageCode("--清除中断")
|
||||||
|
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(1, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(2, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(3, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
)
|
||||||
|
|
||||||
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||||
|
|
||||||
|
#>>>>>>用EB-MMU方式读取EB-MMU设置, 15
|
||||||
|
genPkt.clean()
|
||||||
|
genPkt.setPktType(0)
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [(i & 0xff) for i in range(sm_size * 16)]
|
||||||
|
|
||||||
|
gen_file_def_ap = gen_file_def + "_rw"
|
||||||
|
sm_idx = 0
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x1000, 2, 0, 0x0, sm_size * 16, data)
|
||||||
|
|
||||||
|
genPkt.addBeforeExc(genSlvSMWriteData(1, 1, sm_size, list(range(0, sm_size)))
|
||||||
|
+genSlvSMWriteData(1, 3, sm_size, list(range(0, sm_size * 2, 2)))
|
||||||
|
+genSlvSMWriteData(1, 5, sm_size, list(range(0, sm_size * 3, 3)))
|
||||||
|
+genSlvSMWriteData(1, 7, sm_size, list(range(0, sm_size * 4, 4)))
|
||||||
|
+genSlvSMWriteData(2, 1, sm_size, list(range(0, sm_size * 5, 5)))
|
||||||
|
+genSlvSMWriteData(2, 3, sm_size, list(range(0, sm_size * 6, 6)))
|
||||||
|
+genSlvSMWriteData(2, 5, sm_size, list(range(0, sm_size * 7, 7)))
|
||||||
|
+genSlvSMWriteData(2, 7, sm_size, list(range(0, sm_size * 8, 8)))
|
||||||
|
+genSlvSMWriteData(3, 1, sm_size, list(range(0, sm_size * 9, 9)))
|
||||||
|
+genSlvSMWriteData(3, 3, sm_size, list(range(0, sm_size * 8, 8)))
|
||||||
|
+genSlvSMWriteData(3, 5, sm_size, list(range(0, sm_size * 7, 7)))
|
||||||
|
+genSlvSMWriteData(3, 7, sm_size, list(range(0, sm_size * 6, 6)))
|
||||||
|
+genSlvSMWriteData(4, 1, sm_size, list(range(0, sm_size * 5, 5)))
|
||||||
|
+genSlvSMWriteData(4, 3, sm_size, list(range(0, sm_size * 4, 4)))
|
||||||
|
+genSlvSMWriteData(4, 5, sm_size, list(range(0, sm_size * 3, 3)))
|
||||||
|
+genSlvSMWriteData(4, 7, sm_size, list(range(0, sm_size * 2, 2)))
|
||||||
|
)
|
||||||
|
|
||||||
|
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||||
|
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||||
|
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||||
|
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||||
|
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
|
||||||
|
+genMessageCode("--清除中断")
|
||||||
|
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(1, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(2, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(3, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
|
||||||
|
+genTcEndFrameCode(gen_file_def)
|
||||||
|
)
|
||||||
|
|
||||||
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||||
|
return gen_file_def
|
||||||
|
|
||||||
|
|
||||||
|
def tc18():
|
||||||
|
genPkt = GenPkt()
|
||||||
|
|
||||||
|
gen_file_def = "ebmmu_tc18"
|
||||||
|
sm_idx = 0
|
||||||
|
tc_des = "测试17个ebmmu全配置下运行,每4个ebmmu对应一个SM,映射4个字节。分别映射SM1/3/4/6, \\n" \
|
||||||
|
+ "每个映射了16个字节。中间无字节空洞。使用1个子包,将数据读写上来。每个ebmmu必须对齐、足长的写入,\\n" \
|
||||||
|
+ "对应的sm才能正常工作。这里注意,子包是读写的,但是ebmmu是有权限的,通过权限合理的分配,实现一个子包既读又写。"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
#>>>>>>设置EB-MMU,测试用例15,读,检查权限
|
||||||
|
genPkt.clean()
|
||||||
|
genPkt.setPktType(0)
|
||||||
|
|
||||||
|
addr = 0x10000000
|
||||||
|
addr_off = 0x0
|
||||||
|
sm_size = 16
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [0,] * 256
|
||||||
|
|
||||||
|
taddr = addr + addr_off
|
||||||
|
ebmmu_offset = 0
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x1000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2800 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x2,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x3800 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x2,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x1, 0, 0x0200, 0x1, 160, data)
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [0,] * 256
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
ebmmu_offset = 0
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x1000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2800 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x2,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x3800 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x2,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x2, 0, 0x0200, 0x1, 160, data)
|
||||||
|
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [0,] * 256
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
ebmmu_offset = 0
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x1000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2800 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x2,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x3800 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x2,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x3, 0, 0x0200, 0x1, 160, data)
|
||||||
|
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [0,] * 256
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
ebmmu_offset = 0
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x1000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2000 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x1,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x2800 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x2,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
addr_off = addr_off + sm_size
|
||||||
|
taddr = addr + addr_off
|
||||||
|
for i in range(4):
|
||||||
|
setting_ebmmu_regs(data,
|
||||||
|
ebmmu_offset,
|
||||||
|
taddr + i * int(sm_size / 4),
|
||||||
|
0x3800 + i * int(sm_size / 4),
|
||||||
|
sm_size / 4,
|
||||||
|
0x2,
|
||||||
|
0x1
|
||||||
|
)
|
||||||
|
#print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4)))
|
||||||
|
ebmmu_offset = ebmmu_offset + 1
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x4, 0, 0x0200, 0x1, 160, data)
|
||||||
|
|
||||||
|
data = [0,] * 2
|
||||||
|
data[0] = (sm_size >> 0) & 0xff
|
||||||
|
data[1] = (sm_size >> 8) & 0xff
|
||||||
|
genPkt.addSubPkt(0x0, 0, 0x306, 0xe, 2, data)
|
||||||
|
|
||||||
|
data = [0,] * 2
|
||||||
|
data[0] = (sm_size >> 0) & 0xff
|
||||||
|
data[1] = (sm_size >> 8) & 0xff
|
||||||
|
genPkt.addSubPkt(0x0, 0, 0x30e, 0xe, 2, data)
|
||||||
|
|
||||||
|
data = [0,] * 2
|
||||||
|
data[0] = (sm_size >> 0) & 0xff
|
||||||
|
data[1] = (sm_size >> 8) & 0xff
|
||||||
|
genPkt.addSubPkt(0x0, 0, 0x312, 0xe, 2, data)
|
||||||
|
|
||||||
|
|
||||||
|
data = [0,] * 2
|
||||||
|
data[0] = (sm_size >> 0) & 0xff
|
||||||
|
data[1] = (sm_size >> 8) & 0xff
|
||||||
|
genPkt.addSubPkt(0x0, 0, 0x31a, 0xe, 2, data)
|
||||||
|
|
||||||
|
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des))
|
||||||
|
|
||||||
|
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx)
|
||||||
|
+genWriteTransPktCode(gen_file_def, sm_idx)
|
||||||
|
+genTrgTransPktCode(gen_file_def, sm_idx)
|
||||||
|
+genReadAckPktCode(gen_file_def, sm_idx)
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
|
||||||
|
+genMessageCode("--清除中断")
|
||||||
|
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(1, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(2, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(3, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
)
|
||||||
|
|
||||||
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||||
|
|
||||||
|
#>>>>>>用EB-MMU方式读取EB-MMU设置, 15
|
||||||
|
genPkt.clean()
|
||||||
|
genPkt.setPktType(0)
|
||||||
|
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
data = [(i & 0xff) for i in range(sm_size * 16)]
|
||||||
|
|
||||||
|
gen_file_def_ap = gen_file_def + "_rw"
|
||||||
|
sm_idx = 0
|
||||||
|
|
||||||
|
genPkt.addSubPkt(0x1000, 2, 0, 0x2, sm_size * 16, data)
|
||||||
|
|
||||||
|
genPkt.addBeforeExc(genSlvSMWriteData(1, 1, sm_size, list(range(0, sm_size)))
|
||||||
|
+genSlvSMWriteData(1, 3, sm_size, list(range(0, sm_size * 2, 2)))
|
||||||
|
#+genSlvSMWriteData(1, 5, sm_size, list(range(0, sm_size * 3, 3)))
|
||||||
|
#+genSlvSMWriteData(1, 7, sm_size, list(range(0, sm_size * 4, 4)))
|
||||||
|
+genSlvSMWriteData(2, 1, sm_size, list(range(0, sm_size * 5, 5)))
|
||||||
|
+genSlvSMWriteData(2, 3, sm_size, list(range(0, sm_size * 6, 6)))
|
||||||
|
#+genSlvSMWriteData(2, 5, sm_size, list(range(0, sm_size * 7, 7)))
|
||||||
|
#+genSlvSMWriteData(2, 7, sm_size, list(range(0, sm_size * 8, 8)))
|
||||||
|
+genSlvSMWriteData(3, 1, sm_size, list(range(0, sm_size * 9, 9)))
|
||||||
|
+genSlvSMWriteData(3, 3, sm_size, list(range(0, sm_size * 8, 8)))
|
||||||
|
#+genSlvSMWriteData(3, 5, sm_size, list(range(0, sm_size * 7, 7)))
|
||||||
|
#+genSlvSMWriteData(3, 7, sm_size, list(range(0, sm_size * 6, 6)))
|
||||||
|
+genSlvSMWriteData(4, 1, sm_size, list(range(0, sm_size * 5, 5)))
|
||||||
|
+genSlvSMWriteData(4, 3, sm_size, list(range(0, sm_size * 4, 4)))
|
||||||
|
#+genSlvSMWriteData(4, 5, sm_size, list(range(0, sm_size * 3, 3)))
|
||||||
|
#+genSlvSMWriteData(4, 7, sm_size, list(range(0, sm_size * 2, 2)))
|
||||||
|
)
|
||||||
|
|
||||||
|
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||||
|
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||||
|
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||||
|
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||||
|
|
||||||
|
+genSlvSMReadData(1, 4, sm_size)
|
||||||
|
+genSlvSMReadData(1, 6, sm_size)
|
||||||
|
+genSlvSMReadData(2, 4, sm_size)
|
||||||
|
+genSlvSMReadData(2, 6, sm_size)
|
||||||
|
+genSlvSMReadData(3, 4, sm_size)
|
||||||
|
+genSlvSMReadData(3, 6, sm_size)
|
||||||
|
+genSlvSMReadData(4, 4, sm_size)
|
||||||
|
+genSlvSMReadData(4, 6, sm_size)
|
||||||
|
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
|
||||||
|
+genMessageCode("--清除中断")
|
||||||
|
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(1, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(2, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(3, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
|
||||||
|
+genTcEndFrameCode(gen_file_def)
|
||||||
|
)
|
||||||
|
|
||||||
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||||
|
return gen_file_def
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user