Merge remote-tracking branch 'github/master' into 201904
This commit is contained in:
commit
3ca6711c0a
@ -0,0 +1,55 @@
|
|||||||
|
# name lanes alias index
|
||||||
|
Ethernet0 1 twentyfiveGigE1 1
|
||||||
|
Ethernet1 2 twentyfiveGigE2 2
|
||||||
|
Ethernet2 3 twentyfiveGigE3 3
|
||||||
|
Ethernet3 4 twentyfiveGigE4 4
|
||||||
|
Ethernet4 5 twentyfiveGigE5 5
|
||||||
|
Ethernet5 6 twentyfiveGigE6 6
|
||||||
|
Ethernet6 7 twentyfiveGigE7 7
|
||||||
|
Ethernet7 8 twentyfiveGigE8 8
|
||||||
|
Ethernet8 9 twentyfiveGigE9 9
|
||||||
|
Ethernet9 10 twentyfiveGigE10 10
|
||||||
|
Ethernet10 11 twentyfiveGigE11 11
|
||||||
|
Ethernet11 12 twentyfiveGigE12 12
|
||||||
|
Ethernet12 13 twentyfiveGigE13 13
|
||||||
|
Ethernet13 14 twentyfiveGigE14 14
|
||||||
|
Ethernet14 15 twentyfiveGigE15 15
|
||||||
|
Ethernet15 16 twentyfiveGigE16 16
|
||||||
|
Ethernet16 17 twentyfiveGigE17 17
|
||||||
|
Ethernet17 18 twentyfiveGigE18 18
|
||||||
|
Ethernet18 19 twentyfiveGigE19 19
|
||||||
|
Ethernet19 20 twentyfiveGigE20 20
|
||||||
|
Ethernet20 21 twentyfiveGigE21 21
|
||||||
|
Ethernet21 22 twentyfiveGigE22 22
|
||||||
|
Ethernet22 23 twentyfiveGigE23 23
|
||||||
|
Ethernet23 24 twentyfiveGigE24 24
|
||||||
|
Ethernet24 53 twentyfiveGigE25 25
|
||||||
|
Ethernet25 54 twentyfiveGigE26 26
|
||||||
|
Ethernet26 55 twentyfiveGigE27 27
|
||||||
|
Ethernet27 56 twentyfiveGigE28 28
|
||||||
|
Ethernet28 57 twentyfiveGigE29 29
|
||||||
|
Ethernet29 58 twentyfiveGigE30 30
|
||||||
|
Ethernet30 59 twentyfiveGigE31 31
|
||||||
|
Ethernet31 60 twentyfiveGigE32 32
|
||||||
|
Ethernet32 61 twentyfiveGigE33 33
|
||||||
|
Ethernet33 62 twentyfiveGigE34 34
|
||||||
|
Ethernet34 63 twentyfiveGigE35 35
|
||||||
|
Ethernet35 64 twentyfiveGigE36 36
|
||||||
|
Ethernet36 65 twentyfiveGigE37 37
|
||||||
|
Ethernet37 66 twentyfiveGigE38 38
|
||||||
|
Ethernet38 67 twentyfiveGigE39 39
|
||||||
|
Ethernet39 68 twentyfiveGigE40 40
|
||||||
|
Ethernet40 69 twentyfiveGigE41 41
|
||||||
|
Ethernet41 70 twentyfiveGigE42 42
|
||||||
|
Ethernet42 71 twentyfiveGigE43 43
|
||||||
|
Ethernet43 72 twentyfiveGigE44 44
|
||||||
|
Ethernet44 73 twentyfiveGigE45 45
|
||||||
|
Ethernet45 74 twentyfiveGigE46 46
|
||||||
|
Ethernet46 75 twentyfiveGigE47 47
|
||||||
|
Ethernet47 76 twentyfiveGigE48 48
|
||||||
|
Ethernet48 29,30,31,32 hundredGigE49 49
|
||||||
|
Ethernet52 33,34,35,36 hundredGigE50 53
|
||||||
|
Ethernet56 37,38,39,40 hundredGigE51 57
|
||||||
|
Ethernet60 41,42,43,44 hundredGigE52 61
|
||||||
|
Ethernet64 45,46,47,48 hundredGigE53 65
|
||||||
|
Ethernet68 49,50,51,52 hundredGigE54 69
|
@ -0,0 +1 @@
|
|||||||
|
SAI_INIT_CONFIG_FILE=/etc/bcm/td3-as5835-48x10G+6x100G.config.bcm
|
@ -0,0 +1,467 @@
|
|||||||
|
#polarity/lanemap is using TH2 style.
|
||||||
|
core_clock_frequency=1525
|
||||||
|
dpp_clock_ratio=2:3
|
||||||
|
|
||||||
|
ptp_ts_pll_fref=50000000
|
||||||
|
ptp_bs_fref_0=50000000
|
||||||
|
ptp_bs_fref_1=50000000
|
||||||
|
|
||||||
|
oversubscribe_mode=1
|
||||||
|
|
||||||
|
pbmp_xport_xe=0x1FFFFFFFFFFFFFFFE
|
||||||
|
|
||||||
|
parity_enable=0
|
||||||
|
mem_cache_enable=0
|
||||||
|
|
||||||
|
l2_mem_entries=32768
|
||||||
|
#l3_mem_entries=49152
|
||||||
|
#fpem_mem_entries=16384
|
||||||
|
l2xmsg_mode=1
|
||||||
|
|
||||||
|
#FC0
|
||||||
|
dport_map_port_1=1
|
||||||
|
dport_map_port_2=2
|
||||||
|
dport_map_port_3=3
|
||||||
|
dport_map_port_4=4
|
||||||
|
portmap_1=1:10
|
||||||
|
portmap_2=2:10
|
||||||
|
portmap_3=3:10
|
||||||
|
portmap_4=4:10
|
||||||
|
phy_chain_rx_lane_map_physical{1.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{2.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{3.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{4.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{1.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{2.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{3.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{4.0}=0x0123
|
||||||
|
phy_chain_rx_polarity_flip_physical{1.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{2.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{3.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{4.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{1.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{2.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{3.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{4.0}=0x1
|
||||||
|
|
||||||
|
#FC1
|
||||||
|
dport_map_port_5=5
|
||||||
|
dport_map_port_6=6
|
||||||
|
dport_map_port_7=7
|
||||||
|
dport_map_port_8=8
|
||||||
|
portmap_5=5:10
|
||||||
|
portmap_6=6:10
|
||||||
|
portmap_7=7:10
|
||||||
|
portmap_8=8:10
|
||||||
|
phy_chain_rx_lane_map_physical{5.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{6.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{7.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{8.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{5.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{6.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{7.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{8.0}=0x0123
|
||||||
|
phy_chain_rx_polarity_flip_physical{5.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{6.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{7.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{8.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{5.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{6.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{7.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{8.0}=0x1
|
||||||
|
|
||||||
|
#FC2
|
||||||
|
dport_map_port_9=9
|
||||||
|
dport_map_port_10=10
|
||||||
|
dport_map_port_11=11
|
||||||
|
dport_map_port_12=12
|
||||||
|
portmap_9=9:10
|
||||||
|
portmap_10=10:10
|
||||||
|
portmap_11=11:10
|
||||||
|
portmap_12=12:10
|
||||||
|
phy_chain_rx_lane_map_physical{9.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{10.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{11.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{12.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{9.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{10.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{11.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{12.0}=0x0123
|
||||||
|
phy_chain_rx_polarity_flip_physical{9.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{10.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{11.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{12.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{9.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{10.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{11.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{12.0}=0x1
|
||||||
|
|
||||||
|
#FC3
|
||||||
|
dport_map_port_13=13
|
||||||
|
dport_map_port_14=14
|
||||||
|
dport_map_port_15=15
|
||||||
|
dport_map_port_16=16
|
||||||
|
portmap_13=13:10
|
||||||
|
portmap_14=14:10
|
||||||
|
portmap_15=15:10
|
||||||
|
portmap_16=16:10
|
||||||
|
phy_chain_rx_lane_map_physical{13.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{14.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{15.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{16.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{13.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{14.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{15.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{16.0}=0x0123
|
||||||
|
phy_chain_rx_polarity_flip_physical{13.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{14.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{15.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{16.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{13.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{14.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{15.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{16.0}=0x1
|
||||||
|
|
||||||
|
#FC4
|
||||||
|
dport_map_port_17=17
|
||||||
|
dport_map_port_18=18
|
||||||
|
dport_map_port_19=19
|
||||||
|
dport_map_port_20=20
|
||||||
|
portmap_17=17:10
|
||||||
|
portmap_18=18:10
|
||||||
|
portmap_19=19:10
|
||||||
|
portmap_20=20:10
|
||||||
|
phy_chain_rx_lane_map_physical{17.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{18.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{19.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{20.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{17.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{18.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{19.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{20.0}=0x0123
|
||||||
|
phy_chain_rx_polarity_flip_physical{17.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{18.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{19.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{20.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{17.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{18.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{19.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{20.0}=0x1
|
||||||
|
|
||||||
|
#FC5
|
||||||
|
dport_map_port_21=21
|
||||||
|
dport_map_port_22=22
|
||||||
|
dport_map_port_23=23
|
||||||
|
dport_map_port_24=24
|
||||||
|
portmap_21=21:10
|
||||||
|
portmap_22=22:10
|
||||||
|
portmap_23=23:10
|
||||||
|
portmap_24=24:10
|
||||||
|
phy_chain_rx_lane_map_physical{21.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{22.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{23.0}=0x0123
|
||||||
|
phy_chain_rx_lane_map_physical{24.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{21.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{22.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{23.0}=0x0123
|
||||||
|
phy_chain_tx_lane_map_physical{24.0}=0x0123
|
||||||
|
phy_chain_rx_polarity_flip_physical{21.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{22.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{23.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{24.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{21.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{22.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{23.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{24.0}=0x1
|
||||||
|
|
||||||
|
#FC6
|
||||||
|
|
||||||
|
#FC7
|
||||||
|
dport_map_port_25=50
|
||||||
|
portmap_25=29:100:4
|
||||||
|
phy_chain_rx_lane_map_physical{29.0}=0x1302
|
||||||
|
phy_chain_rx_lane_map_physical{30.0}=0x1302
|
||||||
|
phy_chain_rx_lane_map_physical{31.0}=0x1302
|
||||||
|
phy_chain_rx_lane_map_physical{32.0}=0x1302
|
||||||
|
phy_chain_tx_lane_map_physical{29.0}=0x2031
|
||||||
|
phy_chain_tx_lane_map_physical{30.0}=0x2031
|
||||||
|
phy_chain_tx_lane_map_physical{31.0}=0x2031
|
||||||
|
phy_chain_tx_lane_map_physical{32.0}=0x2031
|
||||||
|
phy_chain_rx_polarity_flip_physical{29.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{30.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{31.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{32.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{29.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{30.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{31.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{32.0}=0x1
|
||||||
|
|
||||||
|
#FC8
|
||||||
|
dport_map_port_26=51
|
||||||
|
portmap_26=33:100:4
|
||||||
|
phy_chain_rx_lane_map_physical{33.0}=0x1203
|
||||||
|
phy_chain_rx_lane_map_physical{34.0}=0x1203
|
||||||
|
phy_chain_rx_lane_map_physical{35.0}=0x1203
|
||||||
|
phy_chain_rx_lane_map_physical{36.0}=0x1203
|
||||||
|
phy_chain_tx_lane_map_physical{33.0}=0x3120
|
||||||
|
phy_chain_tx_lane_map_physical{34.0}=0x3120
|
||||||
|
phy_chain_tx_lane_map_physical{35.0}=0x3120
|
||||||
|
phy_chain_tx_lane_map_physical{36.0}=0x3120
|
||||||
|
phy_chain_rx_polarity_flip_physical{33.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{34.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{35.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{36.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{33.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{34.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{35.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{36.0}=0x0
|
||||||
|
|
||||||
|
#FC9
|
||||||
|
dport_map_port_27=49
|
||||||
|
dport_map_port_28=52
|
||||||
|
dport_map_port_29=53
|
||||||
|
dport_map_port_30=54
|
||||||
|
portmap_27=37:100:4
|
||||||
|
phy_chain_rx_lane_map_physical{37.0}=0x2130
|
||||||
|
phy_chain_rx_lane_map_physical{38.0}=0x2130
|
||||||
|
phy_chain_rx_lane_map_physical{39.0}=0x2130
|
||||||
|
phy_chain_rx_lane_map_physical{40.0}=0x2130
|
||||||
|
phy_chain_tx_lane_map_physical{37.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{38.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{39.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{40.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{37.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{38.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{39.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{40.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{37.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{38.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{39.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{40.0}=0x0
|
||||||
|
|
||||||
|
#FC10
|
||||||
|
dport_map_port_33=57
|
||||||
|
portmap_33=41:100:4
|
||||||
|
phy_chain_rx_lane_map_physical{41.0}=0x1320
|
||||||
|
phy_chain_rx_lane_map_physical{42.0}=0x1320
|
||||||
|
phy_chain_rx_lane_map_physical{43.0}=0x1320
|
||||||
|
phy_chain_rx_lane_map_physical{44.0}=0x1320
|
||||||
|
phy_chain_tx_lane_map_physical{41.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{42.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{43.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{44.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{41.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{42.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{43.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{44.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{41.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{42.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{43.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{44.0}=0x0
|
||||||
|
|
||||||
|
#FC11
|
||||||
|
dport_map_port_34=56
|
||||||
|
portmap_34=45:100:4
|
||||||
|
phy_chain_rx_lane_map_physical{45.0}=0x3201
|
||||||
|
phy_chain_rx_lane_map_physical{46.0}=0x3201
|
||||||
|
phy_chain_rx_lane_map_physical{47.0}=0x3201
|
||||||
|
phy_chain_rx_lane_map_physical{48.0}=0x3201
|
||||||
|
phy_chain_tx_lane_map_physical{45.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{46.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{47.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{48.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{45.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{46.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{47.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{48.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{45.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{46.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{47.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{48.0}=0x0
|
||||||
|
|
||||||
|
#FC12
|
||||||
|
dport_map_port_35=55
|
||||||
|
dport_map_port_36=58
|
||||||
|
dport_map_port_37=59
|
||||||
|
dport_map_port_38=60
|
||||||
|
portmap_35=49:100:4
|
||||||
|
phy_chain_rx_lane_map_physical{49.0}=0x0312
|
||||||
|
phy_chain_rx_lane_map_physical{50.0}=0x0312
|
||||||
|
phy_chain_rx_lane_map_physical{51.0}=0x0312
|
||||||
|
phy_chain_rx_lane_map_physical{52.0}=0x0312
|
||||||
|
phy_chain_tx_lane_map_physical{49.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{50.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{51.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{52.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{49.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{50.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{51.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{52.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{49.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{50.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{51.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{52.0}=0x0
|
||||||
|
|
||||||
|
#FC13
|
||||||
|
dport_map_port_39=25
|
||||||
|
dport_map_port_40=26
|
||||||
|
dport_map_port_41=27
|
||||||
|
dport_map_port_42=28
|
||||||
|
portmap_39=53:10
|
||||||
|
portmap_40=54:10
|
||||||
|
portmap_41=55:10
|
||||||
|
portmap_42=56:10
|
||||||
|
phy_chain_rx_lane_map_physical{53.0}=0x3120
|
||||||
|
phy_chain_rx_lane_map_physical{54.0}=0x3120
|
||||||
|
phy_chain_rx_lane_map_physical{55.0}=0x3120
|
||||||
|
phy_chain_rx_lane_map_physical{56.0}=0x3120
|
||||||
|
phy_chain_tx_lane_map_physical{53.0}=0x3102
|
||||||
|
phy_chain_tx_lane_map_physical{54.0}=0x3102
|
||||||
|
phy_chain_tx_lane_map_physical{55.0}=0x3102
|
||||||
|
phy_chain_tx_lane_map_physical{56.0}=0x3102
|
||||||
|
phy_chain_rx_polarity_flip_physical{53.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{54.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{55.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{56.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{53.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{54.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{55.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{56.0}=0x1
|
||||||
|
|
||||||
|
#FC14
|
||||||
|
dport_map_port_43=29
|
||||||
|
dport_map_port_44=30
|
||||||
|
dport_map_port_45=31
|
||||||
|
dport_map_port_46=32
|
||||||
|
portmap_43=57:10
|
||||||
|
portmap_44=58:10
|
||||||
|
portmap_45=59:10
|
||||||
|
portmap_46=60:10
|
||||||
|
phy_chain_rx_lane_map_physical{57.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{58.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{59.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{60.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{57.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{58.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{59.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{60.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{57.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{58.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{59.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{60.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{57.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{58.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{59.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{60.0}=0x1
|
||||||
|
|
||||||
|
#FC15
|
||||||
|
dport_map_port_47=33
|
||||||
|
dport_map_port_48=34
|
||||||
|
dport_map_port_49=35
|
||||||
|
dport_map_port_50=36
|
||||||
|
portmap_47=61:10
|
||||||
|
portmap_48=62:10
|
||||||
|
portmap_49=63:10
|
||||||
|
portmap_50=64:10
|
||||||
|
phy_chain_rx_lane_map_physical{61.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{62.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{63.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{64.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{61.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{62.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{63.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{64.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{61.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{62.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{63.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{64.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{61.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{62.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{63.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{64.0}=0x1
|
||||||
|
|
||||||
|
#FC16
|
||||||
|
dport_map_port_51=37
|
||||||
|
dport_map_port_52=38
|
||||||
|
dport_map_port_53=39
|
||||||
|
dport_map_port_54=40
|
||||||
|
portmap_51=65:10
|
||||||
|
portmap_52=66:10
|
||||||
|
portmap_53=67:10
|
||||||
|
portmap_54=68:10
|
||||||
|
phy_chain_rx_lane_map_physical{65.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{66.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{67.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{68.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{65.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{66.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{67.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{68.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{65.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{66.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{67.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{68.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{65.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{66.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{67.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{68.0}=0x1
|
||||||
|
|
||||||
|
#FC17
|
||||||
|
dport_map_port_55=41
|
||||||
|
dport_map_port_56=42
|
||||||
|
dport_map_port_57=43
|
||||||
|
dport_map_port_58=44
|
||||||
|
portmap_55=69:10
|
||||||
|
portmap_56=70:10
|
||||||
|
portmap_57=71:10
|
||||||
|
portmap_58=72:10
|
||||||
|
phy_chain_rx_lane_map_physical{69.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{70.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{71.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{72.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{69.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{70.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{71.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{72.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{69.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{70.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{71.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{72.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{69.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{70.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{71.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{72.0}=0x1
|
||||||
|
|
||||||
|
#FC18
|
||||||
|
dport_map_port_59=45
|
||||||
|
dport_map_port_60=46
|
||||||
|
dport_map_port_61=47
|
||||||
|
dport_map_port_62=48
|
||||||
|
portmap_59=73:10
|
||||||
|
portmap_60=74:10
|
||||||
|
portmap_61=75:10
|
||||||
|
portmap_62=76:10
|
||||||
|
phy_chain_rx_lane_map_physical{73.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{74.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{75.0}=0x3210
|
||||||
|
phy_chain_rx_lane_map_physical{76.0}=0x3210
|
||||||
|
phy_chain_tx_lane_map_physical{73.0}=0x0231
|
||||||
|
phy_chain_tx_lane_map_physical{74.0}=0x0231
|
||||||
|
phy_chain_tx_lane_map_physical{75.0}=0x0231
|
||||||
|
phy_chain_tx_lane_map_physical{76.0}=0x0231
|
||||||
|
phy_chain_rx_polarity_flip_physical{73.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{74.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{75.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{76.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{73.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{74.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{75.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{76.0}=0x0
|
||||||
|
|
||||||
|
#FC19
|
||||||
|
|
||||||
|
dport_map_port_64=64
|
||||||
|
portmap_64=81:10:m
|
||||||
|
phy_chain_rx_polarity_flip_physical{81.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{81.0}=0x1
|
||||||
|
|
1
device/accton/x86_64-accton_as5835_54x-r0/default_sku
Normal file
1
device/accton/x86_64-accton_as5835_54x-r0/default_sku
Normal file
@ -0,0 +1 @@
|
|||||||
|
Accton-AS5835-54X t1
|
3
device/accton/x86_64-accton_as5835_54x-r0/installer.conf
Normal file
3
device/accton/x86_64-accton_as5835_54x-r0/installer.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
CONSOLE_PORT=0x3f8
|
||||||
|
CONSOLE_DEV=0
|
||||||
|
CONSOLE_SPEED=115200
|
24
device/accton/x86_64-accton_as5835_54x-r0/plugins/eeprom.py
Normal file
24
device/accton/x86_64-accton_as5835_54x-r0/plugins/eeprom.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
try:
|
||||||
|
import exceptions
|
||||||
|
import binascii
|
||||||
|
import time
|
||||||
|
import optparse
|
||||||
|
import warnings
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from sonic_eeprom import eeprom_base
|
||||||
|
from sonic_eeprom import eeprom_tlvinfo
|
||||||
|
import subprocess
|
||||||
|
except ImportError, e:
|
||||||
|
raise ImportError (str(e) + "- required module not found")
|
||||||
|
|
||||||
|
class board(eeprom_tlvinfo.TlvInfoDecoder):
|
||||||
|
_TLV_INFO_MAX_LEN = 256
|
||||||
|
def __init__(self, name, path, cpld_root, ro):
|
||||||
|
self.eeprom_path = "/sys/bus/i2c/devices/1-0057/eeprom"
|
||||||
|
#Two i2c buses might get flipped order, check them both.
|
||||||
|
if not os.path.exists(self.eeprom_path):
|
||||||
|
self.eeprom_path = "/sys/bus/i2c/devices/0-0057/eeprom"
|
||||||
|
super(board, self).__init__(self.eeprom_path, 0, '', True)
|
61
device/accton/x86_64-accton_as5835_54x-r0/plugins/psuutil.py
Normal file
61
device/accton/x86_64-accton_as5835_54x-r0/plugins/psuutil.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# Accton
|
||||||
|
#
|
||||||
|
# Module contains an implementation of SONiC PSU Base API and
|
||||||
|
# provides the PSUs status which are available in the platform
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
try:
|
||||||
|
from sonic_psu.psu_base import PsuBase
|
||||||
|
except ImportError as e:
|
||||||
|
raise ImportError (str(e) + "- required module not found")
|
||||||
|
|
||||||
|
class PsuUtil(PsuBase):
|
||||||
|
"""Platform-specific PSUutil class"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
PsuBase.__init__(self)
|
||||||
|
|
||||||
|
self.psu_path = "/sys/bus/i2c/devices/"
|
||||||
|
self.psu_presence = "/psu_present"
|
||||||
|
self.psu_oper_status = "/psu_power_good"
|
||||||
|
self.psu_mapping = {
|
||||||
|
1: "11-0050",
|
||||||
|
2: "12-0053",
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_num_psus(self):
|
||||||
|
return len(self.psu_mapping)
|
||||||
|
|
||||||
|
def get_psu_status(self, index):
|
||||||
|
if index is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
status = 0
|
||||||
|
node = self.psu_path + self.psu_mapping[index]+self.psu_oper_status
|
||||||
|
try:
|
||||||
|
with open(node, 'r') as power_status:
|
||||||
|
status = int(power_status.read())
|
||||||
|
except IOError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return status == 1
|
||||||
|
|
||||||
|
def get_psu_presence(self, index):
|
||||||
|
if index is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
status = 0
|
||||||
|
node = self.psu_path + self.psu_mapping[index] + self.psu_presence
|
||||||
|
try:
|
||||||
|
with open(node, 'r') as presence_status:
|
||||||
|
status = int(presence_status.read())
|
||||||
|
except IOError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return status == 1
|
297
device/accton/x86_64-accton_as5835_54x-r0/plugins/sfputil.py
Normal file
297
device/accton/x86_64-accton_as5835_54x-r0/plugins/sfputil.py
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
# sfputil.py
|
||||||
|
#
|
||||||
|
# Platform-specific SFP transceiver interface for SONiC
|
||||||
|
#
|
||||||
|
|
||||||
|
try:
|
||||||
|
import time
|
||||||
|
import string
|
||||||
|
from ctypes import create_string_buffer
|
||||||
|
from sonic_sfp.sfputilbase import SfpUtilBase
|
||||||
|
except ImportError as e:
|
||||||
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
|
|
||||||
|
class SfpUtil(SfpUtilBase):
|
||||||
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
|
PORT_START = 1
|
||||||
|
PORT_END = 72
|
||||||
|
PORTS_IN_BLOCK = 72
|
||||||
|
QSFP_PORT_START = 49
|
||||||
|
QSFP_PORT_END = 72
|
||||||
|
|
||||||
|
BASE_VAL_PATH = "/sys/class/i2c-adapter/i2c-{0}/{1}-0050/"
|
||||||
|
|
||||||
|
_port_to_is_present = {}
|
||||||
|
_port_to_lp_mode = {}
|
||||||
|
|
||||||
|
_port_to_eeprom_mapping = {}
|
||||||
|
_cpld_mapping = {
|
||||||
|
0: "3-0060",
|
||||||
|
1: "3-0061",
|
||||||
|
2: "3-0062",
|
||||||
|
}
|
||||||
|
_port_to_i2c_mapping = {
|
||||||
|
1: 42,
|
||||||
|
2: 43,
|
||||||
|
3: 44,
|
||||||
|
4: 45,
|
||||||
|
5: 46,
|
||||||
|
6: 47,
|
||||||
|
7: 48,
|
||||||
|
8: 49,
|
||||||
|
9: 50,
|
||||||
|
10: 51,
|
||||||
|
11: 52,
|
||||||
|
12: 53,
|
||||||
|
13: 54,
|
||||||
|
14: 55,
|
||||||
|
15: 56,
|
||||||
|
16: 57,
|
||||||
|
17: 58,
|
||||||
|
18: 59,
|
||||||
|
19: 60,
|
||||||
|
20: 61,
|
||||||
|
21: 62,
|
||||||
|
22: 63,
|
||||||
|
23: 64,
|
||||||
|
24: 65,
|
||||||
|
25: 66,
|
||||||
|
26: 67,
|
||||||
|
27: 68,
|
||||||
|
28: 69,
|
||||||
|
29: 70,
|
||||||
|
30: 71,
|
||||||
|
31: 72,
|
||||||
|
32: 73,
|
||||||
|
33: 74,
|
||||||
|
34: 75,
|
||||||
|
35: 76,
|
||||||
|
36: 77,
|
||||||
|
37: 78,
|
||||||
|
38: 79,
|
||||||
|
39: 80,
|
||||||
|
40: 81,
|
||||||
|
41: 82,
|
||||||
|
42: 83,
|
||||||
|
43: 84,
|
||||||
|
44: 85,
|
||||||
|
45: 86,
|
||||||
|
46: 87,
|
||||||
|
47: 88,
|
||||||
|
48: 89,
|
||||||
|
49: 28, #QSFP49
|
||||||
|
50: 28,
|
||||||
|
51: 28,
|
||||||
|
52: 28,
|
||||||
|
53: 29, #QSFP50
|
||||||
|
54: 29,
|
||||||
|
55: 29,
|
||||||
|
56: 29,
|
||||||
|
57: 26, #QSFP51
|
||||||
|
58: 26,
|
||||||
|
59: 26,
|
||||||
|
60: 26,
|
||||||
|
61: 30, #QSFP52
|
||||||
|
62: 30,
|
||||||
|
63: 30,
|
||||||
|
64: 30,
|
||||||
|
65: 31, #QSFP53
|
||||||
|
66: 31,
|
||||||
|
67: 31,
|
||||||
|
68: 31,
|
||||||
|
69: 27, #QSFP54
|
||||||
|
70: 27,
|
||||||
|
71: 27,
|
||||||
|
72: 27,
|
||||||
|
}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def port_start(self):
|
||||||
|
return self.PORT_START
|
||||||
|
|
||||||
|
@property
|
||||||
|
def port_end(self):
|
||||||
|
return self.PORT_END
|
||||||
|
|
||||||
|
@property
|
||||||
|
def qsfp_port_start(self):
|
||||||
|
return self.QSFP_PORT_START
|
||||||
|
|
||||||
|
@property
|
||||||
|
def qsfp_port_end(self):
|
||||||
|
return self.QSFP_PORT_END
|
||||||
|
|
||||||
|
@property
|
||||||
|
def qsfp_ports(self):
|
||||||
|
return range(self.QSFP_PORT_START, self.PORTS_IN_BLOCK + 1)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def port_to_eeprom_mapping(self):
|
||||||
|
return self._port_to_eeprom_mapping
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
eeprom_path = '/sys/bus/i2c/devices/{0}-0050/eeprom'
|
||||||
|
for x in range(self.port_start, self.port_end+1):
|
||||||
|
self.port_to_eeprom_mapping[x] = eeprom_path.format(
|
||||||
|
self._port_to_i2c_mapping[x])
|
||||||
|
|
||||||
|
SfpUtilBase.__init__(self)
|
||||||
|
|
||||||
|
|
||||||
|
# For port 49~54 are QSFP, here presumed they're all split to 4 lanes.
|
||||||
|
def get_cage_num(self, port_num):
|
||||||
|
cage_num = port_num
|
||||||
|
if (port_num >= self.QSFP_PORT_START):
|
||||||
|
cage_num = (port_num - self.QSFP_PORT_START)/4
|
||||||
|
cage_num = cage_num + self.QSFP_PORT_START
|
||||||
|
|
||||||
|
return cage_num
|
||||||
|
|
||||||
|
# For cage 1~38 are at cpld2, others are at cpld3.
|
||||||
|
def get_cpld_num(self, port_num):
|
||||||
|
return 1 if (port_num < 39) else 2
|
||||||
|
|
||||||
|
def get_presence(self, port_num):
|
||||||
|
# Check for invalid port_num
|
||||||
|
if port_num < self.port_start or port_num > self.port_end:
|
||||||
|
return False
|
||||||
|
|
||||||
|
cage_num = self.get_cage_num(port_num)
|
||||||
|
cpld_i = self.get_cpld_num(port_num)
|
||||||
|
|
||||||
|
cpld_ps = self._cpld_mapping[cpld_i]
|
||||||
|
path = "/sys/bus/i2c/devices/{0}/module_present_{1}"
|
||||||
|
port_ps = path.format(cpld_ps, cage_num)
|
||||||
|
|
||||||
|
try:
|
||||||
|
val_file = open(port_ps)
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
content = val_file.readline().rstrip()
|
||||||
|
val_file.close()
|
||||||
|
|
||||||
|
# content is a string, either "0" or "1"
|
||||||
|
if content == "1":
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_low_power_mode_cpld(self, port_num):
|
||||||
|
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
|
||||||
|
return False
|
||||||
|
|
||||||
|
cage_num = self.get_cage_num(port_num)
|
||||||
|
cpld_i = self.get_cpld_num(port_num)
|
||||||
|
|
||||||
|
cpld_ps = self._cpld_mapping[cpld_i]
|
||||||
|
path = "/sys/bus/i2c/devices/{0}/module_lpmode_{1}"
|
||||||
|
lp_mode_path = path.format(cpld_ps, cage_num)
|
||||||
|
|
||||||
|
try:
|
||||||
|
val_file = open(lp_mode_path)
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
content = val_file.readline().rstrip()
|
||||||
|
val_file.close()
|
||||||
|
|
||||||
|
# content is a string, either "0" or "1"
|
||||||
|
if content == "1":
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_low_power_mode(self, port_num):
|
||||||
|
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not self.get_presence(port_num):
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
eeprom = None
|
||||||
|
|
||||||
|
eeprom = open(self.port_to_eeprom_mapping[port_num], "rb")
|
||||||
|
eeprom.seek(93)
|
||||||
|
lpmode = ord(eeprom.read(1))
|
||||||
|
|
||||||
|
if not (lpmode & 0x1): # 'Power override' bit is 0
|
||||||
|
return self.get_low_power_mode_cpld(port_num)
|
||||||
|
else:
|
||||||
|
if ((lpmode & 0x2) == 0x2):
|
||||||
|
return True # Low Power Mode if "Power set" bit is 1
|
||||||
|
else:
|
||||||
|
return False # High Power Mode if "Power set" bit is 0
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
finally:
|
||||||
|
if eeprom is not None:
|
||||||
|
eeprom.close()
|
||||||
|
time.sleep(0.01)
|
||||||
|
|
||||||
|
def set_low_power_mode(self, port_num, lpmode):
|
||||||
|
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
eeprom = None
|
||||||
|
|
||||||
|
if not self.get_presence(port_num):
|
||||||
|
return False # Port is not present, unable to set the eeprom
|
||||||
|
|
||||||
|
# Fill in write buffer
|
||||||
|
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
|
||||||
|
buffer = create_string_buffer(1)
|
||||||
|
buffer[0] = chr(regval)
|
||||||
|
|
||||||
|
# Write to eeprom
|
||||||
|
eeprom = open(self.port_to_eeprom_mapping[port_num], "r+b")
|
||||||
|
eeprom.seek(93)
|
||||||
|
eeprom.write(buffer[0])
|
||||||
|
return True
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
finally:
|
||||||
|
if eeprom is not None:
|
||||||
|
eeprom.close()
|
||||||
|
time.sleep(0.01)
|
||||||
|
|
||||||
|
def reset(self, port_num):
|
||||||
|
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
|
||||||
|
return False
|
||||||
|
|
||||||
|
cage_num = self.get_cage_num(port_num)
|
||||||
|
cpld_i = self.get_cpld_num(port_num)
|
||||||
|
cpld_ps = self._cpld_mapping[cpld_i]
|
||||||
|
path = "/sys/bus/i2c/devices/{0}/module_reset_{1}"
|
||||||
|
port_ps = path.format(cpld_ps, cage_num)
|
||||||
|
try:
|
||||||
|
reg_file = open(port_ps, 'w')
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
#toggle reset
|
||||||
|
reg_file.seek(0)
|
||||||
|
reg_file.write('0')
|
||||||
|
time.sleep(1)
|
||||||
|
reg_file.seek(0)
|
||||||
|
reg_file.write('1')
|
||||||
|
reg_file.close()
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def get_transceiver_change_event(self):
|
||||||
|
"""
|
||||||
|
TODO: This function need to be implemented
|
||||||
|
when decide to support monitoring SFP(Xcvrd)
|
||||||
|
on this platform.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError
|
1
device/arista/x86_64-arista_7050_qx32/plugins
Symbolic link
1
device/arista/x86_64-arista_7050_qx32/plugins
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-arista_common/plugins/
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
Arista 7050QX-32 eeprom plugin
|
|
||||||
Uses the arista driver library to obtain the TlvInfoDecoder
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_eeprom as arista_eeprom
|
|
||||||
except ImportError, e:
|
|
||||||
raise ImportError (str(e) + "- required module not found")
|
|
||||||
|
|
||||||
board = arista_eeprom.getTlvInfoDecoder()
|
|
@ -1,6 +0,0 @@
|
|||||||
try:
|
|
||||||
import arista.utils.sonic_leds as arista_leds
|
|
||||||
except ImportError, e:
|
|
||||||
raise ImportError (str(e) + "- required module not found")
|
|
||||||
|
|
||||||
LedControl = arista_leds.getLedControl()
|
|
@ -1,12 +0,0 @@
|
|||||||
# psuutil.py
|
|
||||||
#
|
|
||||||
# Platform-specific PSU interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_psu as arista_psuutil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
PsuUtil = arista_psuutil.getPsuUtil()
|
|
@ -1,12 +0,0 @@
|
|||||||
# sfputil.py
|
|
||||||
#
|
|
||||||
# Platform-specific SFP transceiver interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_sfputil as arista_sfputil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
SfpUtil = arista_sfputil.getSfpUtil()
|
|
1
device/arista/x86_64-arista_7050_qx32s/plugins
Symbolic link
1
device/arista/x86_64-arista_7050_qx32s/plugins
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-arista_common/plugins/
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
Arista 7050QX-32S eeprom plugin
|
|
||||||
Uses the arista driver library to obtain the TlvInfoDecoder
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_eeprom as arista_eeprom
|
|
||||||
except ImportError, e:
|
|
||||||
raise ImportError (str(e) + "- required module not found")
|
|
||||||
|
|
||||||
board = arista_eeprom.getTlvInfoDecoder()
|
|
@ -1,6 +0,0 @@
|
|||||||
try:
|
|
||||||
import arista.utils.sonic_leds as arista_leds
|
|
||||||
except ImportError, e:
|
|
||||||
raise ImportError (str(e) + "- required module not found")
|
|
||||||
|
|
||||||
LedControl = arista_leds.getLedControl()
|
|
@ -1,12 +0,0 @@
|
|||||||
# psuutil.py
|
|
||||||
#
|
|
||||||
# Platform-specific PSU interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_psu as arista_psuutil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
PsuUtil = arista_psuutil.getPsuUtil()
|
|
@ -1,12 +0,0 @@
|
|||||||
# sfputil.py
|
|
||||||
#
|
|
||||||
# Platform-specific SFP transceiver interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_sfputil as arista_sfputil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
SfpUtil = arista_sfputil.getSfpUtil()
|
|
1
device/arista/x86_64-arista_7060_cx32s/plugins
Symbolic link
1
device/arista/x86_64-arista_7060_cx32s/plugins
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-arista_common/plugins/
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
Arista 7060CX-32S eeprom plugin
|
|
||||||
Uses the arista driver library to obtain the TlvInfoDecoder
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_eeprom as arista_eeprom
|
|
||||||
except ImportError, e:
|
|
||||||
raise ImportError (str(e) + "- required module not found")
|
|
||||||
|
|
||||||
board = arista_eeprom.getTlvInfoDecoder()
|
|
@ -1,6 +0,0 @@
|
|||||||
try:
|
|
||||||
import arista.utils.sonic_leds as arista_leds
|
|
||||||
except ImportError, e:
|
|
||||||
raise ImportError (str(e) + "- required module not found")
|
|
||||||
|
|
||||||
LedControl = arista_leds.getLedControl()
|
|
@ -1,12 +0,0 @@
|
|||||||
# psuutil.py
|
|
||||||
#
|
|
||||||
# Platform-specific PSU interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_psu as arista_psuutil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
PsuUtil = arista_psuutil.getPsuUtil()
|
|
@ -1,12 +0,0 @@
|
|||||||
# sfputil.py
|
|
||||||
#
|
|
||||||
# Platform-specific SFP transceiver interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_sfputil as arista_sfputil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
SfpUtil = arista_sfputil.getSfpUtil()
|
|
@ -0,0 +1,67 @@
|
|||||||
|
# name lanes alias index speed
|
||||||
|
Ethernet0 1,2,3,4 Ethernet1/1 1 100000
|
||||||
|
Ethernet4 5,6,7,8 Ethernet1/5 1 100000
|
||||||
|
Ethernet8 9,10,11,12 Ethernet2/1 2 100000
|
||||||
|
Ethernet12 13,14,15,16 Ethernet2/5 2 100000
|
||||||
|
Ethernet16 17,18,19,20 Ethernet3/1 3 100000
|
||||||
|
Ethernet20 21,22,23,24 Ethernet3/5 3 100000
|
||||||
|
Ethernet24 25,26,27,28 Ethernet4/1 4 100000
|
||||||
|
Ethernet28 29,30,31,32 Ethernet4/5 4 100000
|
||||||
|
Ethernet32 33,34,35,36 Ethernet5/1 5 100000
|
||||||
|
Ethernet36 37,38,39,40 Ethernet5/5 5 100000
|
||||||
|
Ethernet40 41,42,43,44 Ethernet6/1 6 100000
|
||||||
|
Ethernet44 45,46,47,48 Ethernet6/5 6 100000
|
||||||
|
Ethernet48 49,50,51,52 Ethernet7/1 7 100000
|
||||||
|
Ethernet52 53,54,55,56 Ethernet7/5 7 100000
|
||||||
|
Ethernet56 57,58,59,60 Ethernet8/1 8 100000
|
||||||
|
Ethernet60 61,62,63,64 Ethernet8/5 8 100000
|
||||||
|
Ethernet64 65,66,67,68 Ethernet9/1 9 100000
|
||||||
|
Ethernet68 69,70,71,72 Ethernet9/5 9 100000
|
||||||
|
Ethernet72 73,74,75,76 Ethernet10/1 10 100000
|
||||||
|
Ethernet76 77,78,79,80 Ethernet10/5 10 100000
|
||||||
|
Ethernet80 81,82,83,84 Ethernet11/1 11 100000
|
||||||
|
Ethernet84 85,86,87,88 Ethernet11/5 11 100000
|
||||||
|
Ethernet88 89,90,91,92 Ethernet12/1 12 100000
|
||||||
|
Ethernet92 93,94,95,96 Ethernet12/5 12 100000
|
||||||
|
Ethernet96 97,98,99,100 Ethernet13/1 13 100000
|
||||||
|
Ethernet100 101,102,103,104 Ethernet13/5 13 100000
|
||||||
|
Ethernet104 105,106,107,108 Ethernet14/1 14 100000
|
||||||
|
Ethernet108 109,110,111,112 Ethernet14/5 14 100000
|
||||||
|
Ethernet112 113,114,115,116 Ethernet15/1 15 100000
|
||||||
|
Ethernet116 117,118,119,120 Ethernet15/5 15 100000
|
||||||
|
Ethernet120 121,122,123,124 Ethernet16/1 16 100000
|
||||||
|
Ethernet124 125,126,127,128 Ethernet16/5 16 100000
|
||||||
|
Ethernet128 129,130,131,132 Ethernet17/1 17 100000
|
||||||
|
Ethernet132 133,134,135,136 Ethernet17/5 17 100000
|
||||||
|
Ethernet136 137,138,139,140 Ethernet18/1 18 100000
|
||||||
|
Ethernet140 141,142,143,144 Ethernet18/5 18 100000
|
||||||
|
Ethernet144 145,146,147,148 Ethernet19/1 19 100000
|
||||||
|
Ethernet148 149,150,151,152 Ethernet19/5 19 100000
|
||||||
|
Ethernet152 153,154,155,156 Ethernet20/1 20 100000
|
||||||
|
Ethernet156 157,158,159,160 Ethernet20/5 20 100000
|
||||||
|
Ethernet160 161,162,163,164 Ethernet21/1 21 100000
|
||||||
|
Ethernet164 165,166,167,168 Ethernet21/5 21 100000
|
||||||
|
Ethernet168 169,170,171,172 Ethernet22/1 22 100000
|
||||||
|
Ethernet172 173,174,175,176 Ethernet22/5 22 100000
|
||||||
|
Ethernet176 177,178,179,180 Ethernet23/1 23 100000
|
||||||
|
Ethernet180 181,182,183,184 Ethernet23/5 23 100000
|
||||||
|
Ethernet184 185,186,187,188 Ethernet24/1 24 100000
|
||||||
|
Ethernet188 189,190,191,192 Ethernet24/5 24 100000
|
||||||
|
Ethernet192 193,194,195,196 Ethernet25/1 25 100000
|
||||||
|
Ethernet196 197,198,199,200 Ethernet25/5 25 100000
|
||||||
|
Ethernet200 201,202,203,204 Ethernet26/1 26 100000
|
||||||
|
Ethernet204 205,206,207,208 Ethernet26/5 26 100000
|
||||||
|
Ethernet208 209,210,211,212 Ethernet27/1 27 100000
|
||||||
|
Ethernet212 213,214,215,216 Ethernet27/5 27 100000
|
||||||
|
Ethernet216 217,218,219,220 Ethernet28/1 28 100000
|
||||||
|
Ethernet220 221,222,223,224 Ethernet28/5 28 100000
|
||||||
|
Ethernet224 225,226,227,228 Ethernet29/1 29 100000
|
||||||
|
Ethernet228 229,230,231,232 Ethernet29/5 29 100000
|
||||||
|
Ethernet232 233,234,235,236 Ethernet30/1 30 100000
|
||||||
|
Ethernet236 237,238,239,240 Ethernet30/5 30 100000
|
||||||
|
Ethernet240 241,242,243,244 Ethernet31/1 31 100000
|
||||||
|
Ethernet244 245,246,247,248 Ethernet31/5 31 100000
|
||||||
|
Ethernet248 249,250,251,252 Ethernet32/1 32 100000
|
||||||
|
Ethernet252 253,254,255,256 Ethernet32/5 32 100000
|
||||||
|
Ethernet256 258 Ethernet33 33 10000
|
||||||
|
Ethernet260 257 Ethernet34 34 10000
|
@ -0,0 +1 @@
|
|||||||
|
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th3-a7060px4-32-64x100G.config.bcm
|
@ -0,0 +1,877 @@
|
|||||||
|
PHY_AN_ALLOW_PLL_CHANGE=1
|
||||||
|
arl_clean_timeout_usec=15000000
|
||||||
|
asf_mem_profile.0=2
|
||||||
|
bcm_num_cos.0=8
|
||||||
|
bcm_stat_flags=1
|
||||||
|
bcm_stat_jumbo.0=9236
|
||||||
|
cdma_timeout_usec.0=15000000
|
||||||
|
dma_desc_timeout_usec.0=15000000
|
||||||
|
dpr_clock_frequency.0=1000
|
||||||
|
higig2_hdr_mode.0=1
|
||||||
|
ipv6_lpm_128b_enable.0=0
|
||||||
|
l2xmsg_mode.0=1
|
||||||
|
l2_mem_entries.0=8192
|
||||||
|
l3_alpm_enable.0=2
|
||||||
|
l3_mem_entries.0=16384
|
||||||
|
max_vp_lags.0=0
|
||||||
|
miim_intr_enable.0=0
|
||||||
|
module_64ports.0=1
|
||||||
|
multicast_l2_range.0=511
|
||||||
|
num_ipv6_lpm_128b_entries.0=0
|
||||||
|
os=unix
|
||||||
|
oversubscribe_mode=1
|
||||||
|
pbmp_xport_xe.0=0xf0000f4000f0000f0000f0000f4000f0001e
|
||||||
|
phy_an_c37_38.0=2
|
||||||
|
phy_an_c37_118.0=2
|
||||||
|
phy_an_c37_1.0=1
|
||||||
|
phy_an_c37_2.0=1
|
||||||
|
phy_an_c37_3.0=1
|
||||||
|
phy_an_c37_4.0=1
|
||||||
|
phy_an_c37_5.0=1
|
||||||
|
phy_an_c37_6.0=1
|
||||||
|
phy_an_c37_7.0=1
|
||||||
|
phy_an_c37_8.0=1
|
||||||
|
phy_an_c37_20.0=1
|
||||||
|
phy_an_c37_21.0=1
|
||||||
|
phy_an_c37_22.0=1
|
||||||
|
phy_an_c37_23.0=1
|
||||||
|
phy_an_c37_24.0=1
|
||||||
|
phy_an_c37_25.0=1
|
||||||
|
phy_an_c37_26.0=1
|
||||||
|
phy_an_c37_27.0=1
|
||||||
|
phy_an_c37_38.0=0
|
||||||
|
phy_an_c37_40.0=1
|
||||||
|
phy_an_c37_41.0=1
|
||||||
|
phy_an_c37_42.0=1
|
||||||
|
phy_an_c37_43.0=1
|
||||||
|
phy_an_c37_44.0=1
|
||||||
|
phy_an_c37_45.0=1
|
||||||
|
phy_an_c37_46.0=1
|
||||||
|
phy_an_c37_47.0=1
|
||||||
|
phy_an_c37_60.0=1
|
||||||
|
phy_an_c37_61.0=1
|
||||||
|
phy_an_c37_62.0=1
|
||||||
|
phy_an_c37_63.0=1
|
||||||
|
phy_an_c37_64.0=1
|
||||||
|
phy_an_c37_65.0=1
|
||||||
|
phy_an_c37_66.0=1
|
||||||
|
phy_an_c37_67.0=1
|
||||||
|
phy_an_c37_80.0=1
|
||||||
|
phy_an_c37_81.0=1
|
||||||
|
phy_an_c37_82.0=1
|
||||||
|
phy_an_c37_83.0=1
|
||||||
|
phy_an_c37_84.0=1
|
||||||
|
phy_an_c37_85.0=1
|
||||||
|
phy_an_c37_86.0=1
|
||||||
|
phy_an_c37_87.0=1
|
||||||
|
phy_an_c37_100.0=1
|
||||||
|
phy_an_c37_101.0=1
|
||||||
|
phy_an_c37_102.0=1
|
||||||
|
phy_an_c37_103.0=1
|
||||||
|
phy_an_c37_104.0=1
|
||||||
|
phy_an_c37_105.0=1
|
||||||
|
phy_an_c37_106.0=1
|
||||||
|
phy_an_c37_107.0=1
|
||||||
|
phy_an_c37_118.0=0
|
||||||
|
phy_an_c37_120.0=1
|
||||||
|
phy_an_c37_121.0=1
|
||||||
|
phy_an_c37_122.0=1
|
||||||
|
phy_an_c37_123.0=1
|
||||||
|
phy_an_c37_124.0=1
|
||||||
|
phy_an_c37_125.0=1
|
||||||
|
phy_an_c37_126.0=1
|
||||||
|
phy_an_c37_127.0=1
|
||||||
|
phy_an_c37_140.0=1
|
||||||
|
phy_an_c37_141.0=1
|
||||||
|
phy_an_c37_142.0=1
|
||||||
|
phy_an_c37_143.0=1
|
||||||
|
phy_an_c37_144.0=1
|
||||||
|
phy_an_c37_145.0=1
|
||||||
|
phy_an_c37_146.0=1
|
||||||
|
phy_an_c37_147.0=1
|
||||||
|
phy_chain_rx_lane_map_physical{1.0}=0x72634150
|
||||||
|
phy_chain_rx_lane_map_physical{9.0}=0x63725041
|
||||||
|
phy_chain_rx_lane_map_physical{17.0}=0x23071465
|
||||||
|
phy_chain_rx_lane_map_physical{25.0}=0x03125746
|
||||||
|
phy_chain_rx_lane_map_physical{33.0}=0x12063574
|
||||||
|
phy_chain_rx_lane_map_physical{41.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{49.0}=0x12053467
|
||||||
|
phy_chain_rx_lane_map_physical{57.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{65.0}=0x12043576
|
||||||
|
phy_chain_rx_lane_map_physical{73.0}=0x03125746
|
||||||
|
phy_chain_rx_lane_map_physical{81.0}=0x12043576
|
||||||
|
phy_chain_rx_lane_map_physical{89.0}=0x03125746
|
||||||
|
phy_chain_rx_lane_map_physical{97.0}=0x40165327
|
||||||
|
phy_chain_rx_lane_map_physical{105.0}=0x56470213
|
||||||
|
phy_chain_rx_lane_map_physical{113.0}=0x21340576
|
||||||
|
phy_chain_rx_lane_map_physical{121.0}=0x47562130
|
||||||
|
phy_chain_rx_lane_map_physical{129.0}=0x56437201
|
||||||
|
phy_chain_rx_lane_map_physical{137.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{145.0}=0x12043576
|
||||||
|
phy_chain_rx_lane_map_physical{153.0}=0x54106723
|
||||||
|
phy_chain_rx_lane_map_physical{161.0}=0x63257014
|
||||||
|
phy_chain_rx_lane_map_physical{169.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{177.0}=0x12043567
|
||||||
|
phy_chain_rx_lane_map_physical{185.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{193.0}=0x12043567
|
||||||
|
phy_chain_rx_lane_map_physical{201.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{209.0}=0x12043576
|
||||||
|
phy_chain_rx_lane_map_physical{217.0}=0x03125467
|
||||||
|
phy_chain_rx_lane_map_physical{225.0}=0x12073465
|
||||||
|
phy_chain_rx_lane_map_physical{233.0}=0x30215647
|
||||||
|
phy_chain_rx_lane_map_physical{241.0}=0x23071564
|
||||||
|
phy_chain_rx_lane_map_physical{249.0}=0x72634150
|
||||||
|
phy_chain_rx_lane_map_physical{257.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{1.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{2.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{3.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{4.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{5.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{6.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{7.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{8.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{9.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{10.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{11.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{12.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{13.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{14.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{15.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{16.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{17.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{18.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{19.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{20.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{21.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{22.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{23.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{24.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{25.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{26.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{27.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{28.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{29.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{30.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{31.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{32.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{33.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{34.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{35.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{36.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{37.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{38.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{39.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{40.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{41.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{42.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{43.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{44.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{45.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{46.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{47.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{48.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{49.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{50.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{51.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{52.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{53.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{54.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{55.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{56.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{57.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{58.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{59.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{60.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{61.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{62.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{63.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{64.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{65.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{66.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{67.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{68.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{69.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{70.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{71.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{72.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{73.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{74.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{75.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{76.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{77.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{78.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{79.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{80.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{81.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{82.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{83.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{84.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{85.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{86.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{87.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{88.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{89.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{90.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{91.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{92.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{93.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{94.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{95.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{96.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{97.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{98.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{99.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{100.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{101.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{102.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{103.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{104.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{105.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{106.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{107.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{108.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{109.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{110.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{111.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{112.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{113.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{114.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{115.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{116.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{117.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{118.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{119.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{120.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{121.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{122.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{123.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{124.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{125.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{126.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{127.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{128.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{129.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{130.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{131.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{132.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{133.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{134.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{135.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{136.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{137.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{138.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{139.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{140.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{141.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{142.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{143.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{144.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{145.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{146.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{147.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{148.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{149.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{150.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{151.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{152.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{153.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{154.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{155.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{156.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{157.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{158.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{159.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{160.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{161.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{162.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{163.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{164.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{165.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{166.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{167.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{168.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{169.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{170.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{171.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{172.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{173.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{174.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{175.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{176.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{177.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{178.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{179.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{180.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{181.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{182.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{183.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{184.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{185.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{186.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{187.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{188.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{189.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{190.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{191.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{192.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{193.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{194.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{195.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{196.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{197.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{198.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{199.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{200.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{201.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{202.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{203.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{204.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{205.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{206.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{207.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{208.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{209.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{210.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{211.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{212.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{213.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{214.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{215.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{216.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{217.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{218.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{219.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{220.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{221.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{222.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{223.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{224.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{225.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{226.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{227.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{228.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{229.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{230.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{231.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{232.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{233.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{234.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{235.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{236.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{237.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{238.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{239.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{240.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{241.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{242.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{243.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{244.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{245.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{246.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{247.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{248.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{249.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{250.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{251.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{252.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{253.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{254.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{255.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{256.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{257.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{258.0}=0x0
|
||||||
|
phy_chain_tx_lane_map_physical{1.0}=0x13245076
|
||||||
|
phy_chain_tx_lane_map_physical{9.0}=0x76501423
|
||||||
|
phy_chain_tx_lane_map_physical{17.0}=0x75643120
|
||||||
|
phy_chain_tx_lane_map_physical{25.0}=0x74653201
|
||||||
|
phy_chain_tx_lane_map_physical{33.0}=0x75603124
|
||||||
|
phy_chain_tx_lane_map_physical{41.0}=0x64753120
|
||||||
|
phy_chain_tx_lane_map_physical{49.0}=0x65741032
|
||||||
|
phy_chain_tx_lane_map_physical{57.0}=0x64753210
|
||||||
|
phy_chain_tx_lane_map_physical{65.0}=0x65740132
|
||||||
|
phy_chain_tx_lane_map_physical{73.0}=0x64753210
|
||||||
|
phy_chain_tx_lane_map_physical{81.0}=0x65740132
|
||||||
|
phy_chain_tx_lane_map_physical{89.0}=0x64753210
|
||||||
|
phy_chain_tx_lane_map_physical{97.0}=0x63057124
|
||||||
|
phy_chain_tx_lane_map_physical{105.0}=0x67453021
|
||||||
|
phy_chain_tx_lane_map_physical{113.0}=0x76502413
|
||||||
|
phy_chain_tx_lane_map_physical{121.0}=0x13257064
|
||||||
|
phy_chain_tx_lane_map_physical{129.0}=0x32146057
|
||||||
|
phy_chain_tx_lane_map_physical{137.0}=0x57613420
|
||||||
|
phy_chain_tx_lane_map_physical{145.0}=0x76502413
|
||||||
|
phy_chain_tx_lane_map_physical{153.0}=0x64173520
|
||||||
|
phy_chain_tx_lane_map_physical{161.0}=0x56742031
|
||||||
|
phy_chain_tx_lane_map_physical{169.0}=0x74601523
|
||||||
|
phy_chain_tx_lane_map_physical{177.0}=0x56742031
|
||||||
|
phy_chain_tx_lane_map_physical{185.0}=0x74601523
|
||||||
|
phy_chain_tx_lane_map_physical{193.0}=0x56742031
|
||||||
|
phy_chain_tx_lane_map_physical{201.0}=0x74601523
|
||||||
|
phy_chain_tx_lane_map_physical{209.0}=0x56742031
|
||||||
|
phy_chain_tx_lane_map_physical{217.0}=0x74603512
|
||||||
|
phy_chain_tx_lane_map_physical{225.0}=0x75642031
|
||||||
|
phy_chain_tx_lane_map_physical{233.0}=0x57612430
|
||||||
|
phy_chain_tx_lane_map_physical{241.0}=0x65742031
|
||||||
|
phy_chain_tx_lane_map_physical{249.0}=0x52316470
|
||||||
|
phy_chain_tx_lane_map_physical{257.0}=0x3210
|
||||||
|
phy_chain_tx_polarity_flip_physical{1.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{2.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{3.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{4.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{5.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{6.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{7.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{8.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{9.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{10.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{11.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{12.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{13.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{14.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{15.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{16.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{17.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{18.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{19.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{20.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{21.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{22.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{23.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{24.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{25.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{26.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{27.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{28.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{29.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{30.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{31.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{32.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{33.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{34.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{35.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{36.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{37.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{38.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{39.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{40.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{41.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{42.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{43.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{44.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{45.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{46.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{47.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{48.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{49.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{50.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{51.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{52.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{53.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{54.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{55.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{56.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{57.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{58.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{59.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{60.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{61.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{62.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{63.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{64.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{65.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{66.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{67.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{68.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{69.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{70.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{71.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{72.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{73.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{74.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{75.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{76.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{77.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{78.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{79.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{80.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{81.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{82.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{83.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{84.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{85.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{86.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{87.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{88.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{89.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{90.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{91.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{92.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{93.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{94.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{95.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{96.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{97.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{98.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{99.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{100.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{101.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{102.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{103.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{104.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{105.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{106.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{107.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{108.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{109.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{110.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{111.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{112.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{113.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{114.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{115.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{116.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{117.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{118.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{119.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{120.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{121.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{122.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{123.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{124.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{125.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{126.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{127.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{128.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{129.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{130.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{131.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{132.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{133.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{134.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{135.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{136.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{137.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{138.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{139.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{140.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{141.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{142.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{143.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{144.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{145.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{146.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{147.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{148.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{149.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{150.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{151.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{152.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{153.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{154.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{155.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{156.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{157.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{158.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{159.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{160.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{161.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{162.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{163.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{164.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{165.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{166.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{167.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{168.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{169.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{170.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{171.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{172.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{173.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{174.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{175.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{176.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{177.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{178.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{179.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{180.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{181.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{182.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{183.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{184.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{185.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{186.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{187.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{188.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{189.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{190.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{191.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{192.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{193.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{194.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{195.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{196.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{197.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{198.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{199.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{200.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{201.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{202.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{203.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{204.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{205.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{206.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{207.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{208.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{209.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{210.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{211.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{212.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{213.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{214.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{215.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{216.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{217.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{218.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{219.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{220.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{221.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{222.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{223.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{224.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{225.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{226.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{227.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{228.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{229.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{230.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{231.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{232.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{233.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{234.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{235.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{236.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{237.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{238.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{239.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{240.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{241.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{242.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{243.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{244.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{245.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{246.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{247.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{248.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{249.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{250.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{251.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{252.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{253.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{254.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{255.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{256.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{257.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{258.0}=0x0
|
||||||
|
portmap_1.0=1:100:4
|
||||||
|
portmap_2.0=5:100:4
|
||||||
|
portmap_3.0=9:100:4
|
||||||
|
portmap_4.0=13:100:4
|
||||||
|
portmap_5.0=17:100:4
|
||||||
|
portmap_6.0=21:100:4
|
||||||
|
portmap_7.0=25:100:4
|
||||||
|
portmap_8.0=29:100:4
|
||||||
|
portmap_20.0=33:100:4
|
||||||
|
portmap_21.0=37:100:4
|
||||||
|
portmap_22.0=41:100:4
|
||||||
|
portmap_23.0=45:100:4
|
||||||
|
portmap_24.0=49:100:4
|
||||||
|
portmap_25.0=53:100:4
|
||||||
|
portmap_26.0=57:100:4
|
||||||
|
portmap_27.0=61:100:4
|
||||||
|
portmap_38.0=257:10
|
||||||
|
portmap_40.0=65:100:4
|
||||||
|
portmap_41.0=69:100:4
|
||||||
|
portmap_42.0=73:100:4
|
||||||
|
portmap_43.0=77:100:4
|
||||||
|
portmap_44.0=81:100:4
|
||||||
|
portmap_45.0=85:100:4
|
||||||
|
portmap_46.0=89:100:4
|
||||||
|
portmap_47.0=93:100:4
|
||||||
|
portmap_60.0=97:100:4
|
||||||
|
portmap_61.0=101:100:4
|
||||||
|
portmap_62.0=105:100:4
|
||||||
|
portmap_63.0=109:100:4
|
||||||
|
portmap_64.0=113:100:4
|
||||||
|
portmap_65.0=117:100:4
|
||||||
|
portmap_66.0=121:100:4
|
||||||
|
portmap_67.0=125:100:4
|
||||||
|
portmap_80.0=129:100:4
|
||||||
|
portmap_81.0=133:100:4
|
||||||
|
portmap_82.0=137:100:4
|
||||||
|
portmap_83.0=141:100:4
|
||||||
|
portmap_84.0=145:100:4
|
||||||
|
portmap_85.0=149:100:4
|
||||||
|
portmap_86.0=153:100:4
|
||||||
|
portmap_87.0=157:100:4
|
||||||
|
portmap_100.0=161:100:4
|
||||||
|
portmap_101.0=165:100:4
|
||||||
|
portmap_102.0=169:100:4
|
||||||
|
portmap_103.0=173:100:4
|
||||||
|
portmap_104.0=177:100:4
|
||||||
|
portmap_105.0=181:100:4
|
||||||
|
portmap_106.0=185:100:4
|
||||||
|
portmap_107.0=189:100:4
|
||||||
|
portmap_118.0=258:10
|
||||||
|
portmap_120.0=193:100:4
|
||||||
|
portmap_121.0=197:100:4
|
||||||
|
portmap_122.0=201:100:4
|
||||||
|
portmap_123.0=205:100:4
|
||||||
|
portmap_124.0=209:100:4
|
||||||
|
portmap_125.0=213:100:4
|
||||||
|
portmap_126.0=217:100:4
|
||||||
|
portmap_127.0=221:100:4
|
||||||
|
portmap_140.0=225:100:4
|
||||||
|
portmap_141.0=229:100:4
|
||||||
|
portmap_142.0=233:100:4
|
||||||
|
portmap_143.0=237:100:4
|
||||||
|
portmap_144.0=241:100:4
|
||||||
|
portmap_145.0=245:100:4
|
||||||
|
portmap_146.0=249:100:4
|
||||||
|
portmap_147.0=253:100:4
|
||||||
|
port_init_autoneg_1.0=0
|
||||||
|
port_init_autoneg_2.0=0
|
||||||
|
port_init_autoneg_3.0=0
|
||||||
|
port_init_autoneg_4.0=0
|
||||||
|
port_init_autoneg_5.0=0
|
||||||
|
port_init_autoneg_6.0=0
|
||||||
|
port_init_autoneg_7.0=0
|
||||||
|
port_init_autoneg_8.0=0
|
||||||
|
port_init_autoneg_20.0=0
|
||||||
|
port_init_autoneg_21.0=0
|
||||||
|
port_init_autoneg_22.0=0
|
||||||
|
port_init_autoneg_23.0=0
|
||||||
|
port_init_autoneg_24.0=0
|
||||||
|
port_init_autoneg_25.0=0
|
||||||
|
port_init_autoneg_26.0=0
|
||||||
|
port_init_autoneg_27.0=0
|
||||||
|
port_init_autoneg_38.0=0
|
||||||
|
port_init_autoneg_40.0=0
|
||||||
|
port_init_autoneg_41.0=0
|
||||||
|
port_init_autoneg_42.0=0
|
||||||
|
port_init_autoneg_43.0=0
|
||||||
|
port_init_autoneg_44.0=0
|
||||||
|
port_init_autoneg_45.0=0
|
||||||
|
port_init_autoneg_46.0=0
|
||||||
|
port_init_autoneg_47.0=0
|
||||||
|
port_init_autoneg_60.0=0
|
||||||
|
port_init_autoneg_61.0=0
|
||||||
|
port_init_autoneg_62.0=0
|
||||||
|
port_init_autoneg_63.0=0
|
||||||
|
port_init_autoneg_64.0=0
|
||||||
|
port_init_autoneg_65.0=0
|
||||||
|
port_init_autoneg_66.0=0
|
||||||
|
port_init_autoneg_67.0=0
|
||||||
|
port_init_autoneg_80.0=0
|
||||||
|
port_init_autoneg_81.0=0
|
||||||
|
port_init_autoneg_82.0=0
|
||||||
|
port_init_autoneg_83.0=0
|
||||||
|
port_init_autoneg_84.0=0
|
||||||
|
port_init_autoneg_85.0=0
|
||||||
|
port_init_autoneg_86.0=0
|
||||||
|
port_init_autoneg_87.0=0
|
||||||
|
port_init_autoneg_100.0=0
|
||||||
|
port_init_autoneg_101.0=0
|
||||||
|
port_init_autoneg_102.0=0
|
||||||
|
port_init_autoneg_103.0=0
|
||||||
|
port_init_autoneg_104.0=0
|
||||||
|
port_init_autoneg_105.0=0
|
||||||
|
port_init_autoneg_106.0=0
|
||||||
|
port_init_autoneg_107.0=0
|
||||||
|
port_init_autoneg_118.0=0
|
||||||
|
port_init_autoneg_120.0=0
|
||||||
|
port_init_autoneg_121.0=0
|
||||||
|
port_init_autoneg_122.0=0
|
||||||
|
port_init_autoneg_123.0=0
|
||||||
|
port_init_autoneg_124.0=0
|
||||||
|
port_init_autoneg_125.0=0
|
||||||
|
port_init_autoneg_126.0=0
|
||||||
|
port_init_autoneg_127.0=0
|
||||||
|
port_init_autoneg_140.0=0
|
||||||
|
port_init_autoneg_141.0=0
|
||||||
|
port_init_autoneg_142.0=0
|
||||||
|
port_init_autoneg_143.0=0
|
||||||
|
port_init_autoneg_144.0=0
|
||||||
|
port_init_autoneg_145.0=0
|
||||||
|
port_init_autoneg_146.0=0
|
||||||
|
port_init_autoneg_147.0=0
|
||||||
|
port_phy_addr_1.0=0xff
|
||||||
|
port_phy_addr_2.0=0xff
|
||||||
|
port_phy_addr_3.0=0xff
|
||||||
|
port_phy_addr_4.0=0xff
|
||||||
|
port_phy_addr_5.0=0xff
|
||||||
|
port_phy_addr_6.0=0xff
|
||||||
|
port_phy_addr_7.0=0xff
|
||||||
|
port_phy_addr_8.0=0xff
|
||||||
|
port_phy_addr_20.0=0xff
|
||||||
|
port_phy_addr_21.0=0xff
|
||||||
|
port_phy_addr_22.0=0xff
|
||||||
|
port_phy_addr_23.0=0xff
|
||||||
|
port_phy_addr_24.0=0xff
|
||||||
|
port_phy_addr_25.0=0xff
|
||||||
|
port_phy_addr_26.0=0xff
|
||||||
|
port_phy_addr_27.0=0xff
|
||||||
|
port_phy_addr_38.0=0xff
|
||||||
|
port_phy_addr_40.0=0xff
|
||||||
|
port_phy_addr_41.0=0xff
|
||||||
|
port_phy_addr_42.0=0xff
|
||||||
|
port_phy_addr_43.0=0xff
|
||||||
|
port_phy_addr_44.0=0xff
|
||||||
|
port_phy_addr_45.0=0xff
|
||||||
|
port_phy_addr_46.0=0xff
|
||||||
|
port_phy_addr_47.0=0xff
|
||||||
|
port_phy_addr_60.0=0xff
|
||||||
|
port_phy_addr_61.0=0xff
|
||||||
|
port_phy_addr_62.0=0xff
|
||||||
|
port_phy_addr_63.0=0xff
|
||||||
|
port_phy_addr_64.0=0xff
|
||||||
|
port_phy_addr_65.0=0xff
|
||||||
|
port_phy_addr_66.0=0xff
|
||||||
|
port_phy_addr_67.0=0xff
|
||||||
|
port_phy_addr_80.0=0xff
|
||||||
|
port_phy_addr_81.0=0xff
|
||||||
|
port_phy_addr_82.0=0xff
|
||||||
|
port_phy_addr_83.0=0xff
|
||||||
|
port_phy_addr_84.0=0xff
|
||||||
|
port_phy_addr_85.0=0xff
|
||||||
|
port_phy_addr_86.0=0xff
|
||||||
|
port_phy_addr_87.0=0xff
|
||||||
|
port_phy_addr_100.0=0xff
|
||||||
|
port_phy_addr_101.0=0xff
|
||||||
|
port_phy_addr_102.0=0xff
|
||||||
|
port_phy_addr_103.0=0xff
|
||||||
|
port_phy_addr_104.0=0xff
|
||||||
|
port_phy_addr_105.0=0xff
|
||||||
|
port_phy_addr_106.0=0xff
|
||||||
|
port_phy_addr_107.0=0xff
|
||||||
|
port_phy_addr_118.0=0xff
|
||||||
|
port_phy_addr_120.0=0xff
|
||||||
|
port_phy_addr_121.0=0xff
|
||||||
|
port_phy_addr_122.0=0xff
|
||||||
|
port_phy_addr_123.0=0xff
|
||||||
|
port_phy_addr_124.0=0xff
|
||||||
|
port_phy_addr_125.0=0xff
|
||||||
|
port_phy_addr_126.0=0xff
|
||||||
|
port_phy_addr_127.0=0xff
|
||||||
|
port_phy_addr_140.0=0xff
|
||||||
|
port_phy_addr_141.0=0xff
|
||||||
|
port_phy_addr_142.0=0xff
|
||||||
|
port_phy_addr_143.0=0xff
|
||||||
|
port_phy_addr_144.0=0xff
|
||||||
|
port_phy_addr_145.0=0xff
|
||||||
|
port_phy_addr_146.0=0xff
|
||||||
|
port_phy_addr_147.0=0xff
|
||||||
|
robust_hash_disable_egress_vlan.0=1
|
||||||
|
robust_hash_disable_mpls.0=1
|
||||||
|
robust_hash_disable_vlan.0=1
|
||||||
|
sram_scan_enable.0=0
|
||||||
|
tdma_timeout_usec.0=15000000
|
||||||
|
tslam_timeout_usec.0=15000000
|
@ -0,0 +1,749 @@
|
|||||||
|
PHY_AN_ALLOW_PLL_CHANGE=1
|
||||||
|
arl_clean_timeout_usec=15000000
|
||||||
|
asf_mem_profile.0=2
|
||||||
|
bcm_num_cos.0=8
|
||||||
|
bcm_stat_flags=1
|
||||||
|
bcm_stat_jumbo.0=9236
|
||||||
|
cdma_timeout_usec.0=15000000
|
||||||
|
dma_desc_timeout_usec.0=15000000
|
||||||
|
dpr_clock_frequency.0=1000
|
||||||
|
higig2_hdr_mode.0=1
|
||||||
|
ipv6_lpm_128b_enable.0=0
|
||||||
|
l2xmsg_mode.0=1
|
||||||
|
l2_mem_entries.0=8192
|
||||||
|
l3_alpm_enable.0=2
|
||||||
|
l3_mem_entries.0=16384
|
||||||
|
max_vp_lags.0=0
|
||||||
|
miim_intr_enable.0=0
|
||||||
|
module_64ports.0=1
|
||||||
|
multicast_l2_range.0=511
|
||||||
|
num_ipv6_lpm_128b_entries.0=0
|
||||||
|
os=unix
|
||||||
|
oversubscribe_mode=1
|
||||||
|
pbmp_xport_xe.0=0xf0000f4000f0000f0000f0000f4000f0001e
|
||||||
|
phy_an_c37_38.0=2
|
||||||
|
phy_an_c37_118.0=2
|
||||||
|
phy_an_c73_1.0=1
|
||||||
|
phy_an_c73_2.0=1
|
||||||
|
phy_an_c73_3.0=1
|
||||||
|
phy_an_c73_4.0=1
|
||||||
|
phy_an_c73_20.0=1
|
||||||
|
phy_an_c73_21.0=1
|
||||||
|
phy_an_c73_22.0=1
|
||||||
|
phy_an_c73_23.0=1
|
||||||
|
phy_an_c73_38.0=0
|
||||||
|
phy_an_c73_40.0=1
|
||||||
|
phy_an_c73_41.0=1
|
||||||
|
phy_an_c73_42.0=1
|
||||||
|
phy_an_c73_43.0=1
|
||||||
|
phy_an_c73_60.0=1
|
||||||
|
phy_an_c73_61.0=1
|
||||||
|
phy_an_c73_62.0=1
|
||||||
|
phy_an_c73_63.0=1
|
||||||
|
phy_an_c73_80.0=1
|
||||||
|
phy_an_c73_81.0=1
|
||||||
|
phy_an_c73_82.0=1
|
||||||
|
phy_an_c73_83.0=1
|
||||||
|
phy_an_c73_100.0=1
|
||||||
|
phy_an_c73_101.0=1
|
||||||
|
phy_an_c73_102.0=1
|
||||||
|
phy_an_c73_103.0=1
|
||||||
|
phy_an_c73_118.0=0
|
||||||
|
phy_an_c73_120.0=1
|
||||||
|
phy_an_c73_121.0=1
|
||||||
|
phy_an_c73_122.0=1
|
||||||
|
phy_an_c73_123.0=1
|
||||||
|
phy_an_c73_140.0=1
|
||||||
|
phy_an_c73_141.0=1
|
||||||
|
phy_an_c73_142.0=1
|
||||||
|
phy_an_c73_143.0=1
|
||||||
|
phy_chain_rx_lane_map_physical{1.0}=0x72634150
|
||||||
|
phy_chain_rx_lane_map_physical{9.0}=0x63725041
|
||||||
|
phy_chain_rx_lane_map_physical{17.0}=0x23071465
|
||||||
|
phy_chain_rx_lane_map_physical{25.0}=0x03125746
|
||||||
|
phy_chain_rx_lane_map_physical{33.0}=0x12063574
|
||||||
|
phy_chain_rx_lane_map_physical{41.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{49.0}=0x12053467
|
||||||
|
phy_chain_rx_lane_map_physical{57.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{65.0}=0x12043576
|
||||||
|
phy_chain_rx_lane_map_physical{73.0}=0x03125746
|
||||||
|
phy_chain_rx_lane_map_physical{81.0}=0x12043576
|
||||||
|
phy_chain_rx_lane_map_physical{89.0}=0x03125746
|
||||||
|
phy_chain_rx_lane_map_physical{97.0}=0x40165327
|
||||||
|
phy_chain_rx_lane_map_physical{105.0}=0x56470213
|
||||||
|
phy_chain_rx_lane_map_physical{113.0}=0x21340576
|
||||||
|
phy_chain_rx_lane_map_physical{121.0}=0x47562130
|
||||||
|
phy_chain_rx_lane_map_physical{129.0}=0x56437201
|
||||||
|
phy_chain_rx_lane_map_physical{137.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{145.0}=0x12043576
|
||||||
|
phy_chain_rx_lane_map_physical{153.0}=0x54106723
|
||||||
|
phy_chain_rx_lane_map_physical{161.0}=0x63257014
|
||||||
|
phy_chain_rx_lane_map_physical{169.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{177.0}=0x12043567
|
||||||
|
phy_chain_rx_lane_map_physical{185.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{193.0}=0x12043567
|
||||||
|
phy_chain_rx_lane_map_physical{201.0}=0x03125647
|
||||||
|
phy_chain_rx_lane_map_physical{209.0}=0x12043576
|
||||||
|
phy_chain_rx_lane_map_physical{217.0}=0x03125467
|
||||||
|
phy_chain_rx_lane_map_physical{225.0}=0x12073465
|
||||||
|
phy_chain_rx_lane_map_physical{233.0}=0x30215647
|
||||||
|
phy_chain_rx_lane_map_physical{241.0}=0x23071564
|
||||||
|
phy_chain_rx_lane_map_physical{249.0}=0x72634150
|
||||||
|
phy_chain_rx_lane_map_physical{257.0}=0x3210
|
||||||
|
phy_chain_rx_polarity_flip_physical{1.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{2.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{3.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{4.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{5.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{6.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{7.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{8.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{9.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{10.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{11.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{12.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{13.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{14.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{15.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{16.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{17.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{18.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{19.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{20.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{21.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{22.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{23.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{24.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{25.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{26.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{27.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{28.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{29.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{30.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{31.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{32.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{33.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{34.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{35.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{36.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{37.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{38.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{39.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{40.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{41.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{42.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{43.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{44.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{45.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{46.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{47.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{48.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{49.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{50.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{51.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{52.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{53.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{54.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{55.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{56.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{57.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{58.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{59.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{60.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{61.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{62.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{63.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{64.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{65.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{66.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{67.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{68.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{69.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{70.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{71.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{72.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{73.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{74.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{75.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{76.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{77.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{78.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{79.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{80.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{81.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{82.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{83.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{84.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{85.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{86.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{87.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{88.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{89.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{90.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{91.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{92.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{93.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{94.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{95.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{96.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{97.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{98.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{99.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{100.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{101.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{102.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{103.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{104.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{105.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{106.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{107.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{108.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{109.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{110.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{111.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{112.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{113.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{114.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{115.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{116.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{117.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{118.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{119.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{120.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{121.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{122.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{123.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{124.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{125.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{126.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{127.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{128.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{129.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{130.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{131.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{132.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{133.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{134.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{135.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{136.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{137.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{138.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{139.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{140.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{141.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{142.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{143.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{144.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{145.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{146.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{147.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{148.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{149.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{150.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{151.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{152.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{153.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{154.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{155.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{156.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{157.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{158.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{159.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{160.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{161.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{162.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{163.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{164.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{165.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{166.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{167.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{168.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{169.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{170.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{171.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{172.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{173.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{174.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{175.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{176.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{177.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{178.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{179.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{180.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{181.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{182.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{183.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{184.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{185.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{186.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{187.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{188.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{189.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{190.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{191.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{192.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{193.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{194.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{195.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{196.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{197.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{198.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{199.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{200.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{201.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{202.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{203.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{204.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{205.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{206.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{207.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{208.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{209.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{210.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{211.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{212.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{213.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{214.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{215.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{216.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{217.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{218.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{219.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{220.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{221.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{222.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{223.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{224.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{225.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{226.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{227.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{228.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{229.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{230.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{231.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{232.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{233.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{234.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{235.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{236.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{237.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{238.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{239.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{240.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{241.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{242.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{243.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{244.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{245.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{246.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{247.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{248.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{249.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{250.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{251.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{252.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{253.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{254.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{255.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{256.0}=0x1
|
||||||
|
phy_chain_rx_polarity_flip_physical{257.0}=0x0
|
||||||
|
phy_chain_rx_polarity_flip_physical{258.0}=0x0
|
||||||
|
phy_chain_tx_lane_map_physical{1.0}=0x13245076
|
||||||
|
phy_chain_tx_lane_map_physical{9.0}=0x76501423
|
||||||
|
phy_chain_tx_lane_map_physical{17.0}=0x75643120
|
||||||
|
phy_chain_tx_lane_map_physical{25.0}=0x74653201
|
||||||
|
phy_chain_tx_lane_map_physical{33.0}=0x75603124
|
||||||
|
phy_chain_tx_lane_map_physical{41.0}=0x64753120
|
||||||
|
phy_chain_tx_lane_map_physical{49.0}=0x65741032
|
||||||
|
phy_chain_tx_lane_map_physical{57.0}=0x64753210
|
||||||
|
phy_chain_tx_lane_map_physical{65.0}=0x65740132
|
||||||
|
phy_chain_tx_lane_map_physical{73.0}=0x64753210
|
||||||
|
phy_chain_tx_lane_map_physical{81.0}=0x65740132
|
||||||
|
phy_chain_tx_lane_map_physical{89.0}=0x64753210
|
||||||
|
phy_chain_tx_lane_map_physical{97.0}=0x63057124
|
||||||
|
phy_chain_tx_lane_map_physical{105.0}=0x67453021
|
||||||
|
phy_chain_tx_lane_map_physical{113.0}=0x76502413
|
||||||
|
phy_chain_tx_lane_map_physical{121.0}=0x13257064
|
||||||
|
phy_chain_tx_lane_map_physical{129.0}=0x32146057
|
||||||
|
phy_chain_tx_lane_map_physical{137.0}=0x57613420
|
||||||
|
phy_chain_tx_lane_map_physical{145.0}=0x76502413
|
||||||
|
phy_chain_tx_lane_map_physical{153.0}=0x64173520
|
||||||
|
phy_chain_tx_lane_map_physical{161.0}=0x56742031
|
||||||
|
phy_chain_tx_lane_map_physical{169.0}=0x74601523
|
||||||
|
phy_chain_tx_lane_map_physical{177.0}=0x56742031
|
||||||
|
phy_chain_tx_lane_map_physical{185.0}=0x74601523
|
||||||
|
phy_chain_tx_lane_map_physical{193.0}=0x56742031
|
||||||
|
phy_chain_tx_lane_map_physical{201.0}=0x74601523
|
||||||
|
phy_chain_tx_lane_map_physical{209.0}=0x56742031
|
||||||
|
phy_chain_tx_lane_map_physical{217.0}=0x74603512
|
||||||
|
phy_chain_tx_lane_map_physical{225.0}=0x75642031
|
||||||
|
phy_chain_tx_lane_map_physical{233.0}=0x57612430
|
||||||
|
phy_chain_tx_lane_map_physical{241.0}=0x65742031
|
||||||
|
phy_chain_tx_lane_map_physical{249.0}=0x52316470
|
||||||
|
phy_chain_tx_lane_map_physical{257.0}=0x3210
|
||||||
|
phy_chain_tx_polarity_flip_physical{1.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{2.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{3.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{4.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{5.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{6.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{7.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{8.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{9.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{10.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{11.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{12.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{13.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{14.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{15.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{16.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{17.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{18.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{19.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{20.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{21.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{22.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{23.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{24.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{25.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{26.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{27.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{28.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{29.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{30.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{31.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{32.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{33.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{34.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{35.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{36.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{37.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{38.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{39.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{40.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{41.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{42.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{43.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{44.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{45.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{46.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{47.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{48.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{49.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{50.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{51.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{52.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{53.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{54.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{55.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{56.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{57.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{58.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{59.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{60.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{61.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{62.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{63.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{64.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{65.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{66.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{67.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{68.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{69.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{70.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{71.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{72.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{73.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{74.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{75.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{76.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{77.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{78.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{79.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{80.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{81.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{82.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{83.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{84.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{85.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{86.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{87.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{88.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{89.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{90.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{91.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{92.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{93.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{94.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{95.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{96.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{97.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{98.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{99.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{100.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{101.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{102.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{103.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{104.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{105.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{106.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{107.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{108.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{109.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{110.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{111.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{112.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{113.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{114.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{115.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{116.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{117.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{118.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{119.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{120.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{121.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{122.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{123.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{124.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{125.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{126.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{127.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{128.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{129.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{130.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{131.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{132.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{133.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{134.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{135.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{136.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{137.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{138.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{139.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{140.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{141.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{142.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{143.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{144.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{145.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{146.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{147.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{148.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{149.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{150.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{151.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{152.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{153.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{154.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{155.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{156.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{157.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{158.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{159.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{160.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{161.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{162.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{163.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{164.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{165.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{166.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{167.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{168.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{169.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{170.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{171.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{172.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{173.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{174.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{175.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{176.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{177.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{178.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{179.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{180.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{181.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{182.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{183.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{184.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{185.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{186.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{187.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{188.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{189.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{190.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{191.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{192.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{193.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{194.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{195.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{196.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{197.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{198.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{199.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{200.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{201.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{202.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{203.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{204.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{205.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{206.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{207.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{208.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{209.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{210.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{211.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{212.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{213.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{214.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{215.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{216.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{217.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{218.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{219.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{220.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{221.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{222.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{223.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{224.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{225.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{226.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{227.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{228.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{229.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{230.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{231.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{232.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{233.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{234.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{235.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{236.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{237.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{238.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{239.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{240.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{241.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{242.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{243.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{244.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{245.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{246.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{247.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{248.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{249.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{250.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{251.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{252.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{253.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{254.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{255.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{256.0}=0x1
|
||||||
|
phy_chain_tx_polarity_flip_physical{257.0}=0x0
|
||||||
|
phy_chain_tx_polarity_flip_physical{258.0}=0x0
|
||||||
|
portmap_1.0=1:400
|
||||||
|
portmap_2.0=9:400
|
||||||
|
portmap_3.0=17:400
|
||||||
|
portmap_4.0=25:400
|
||||||
|
portmap_20.0=33:400
|
||||||
|
portmap_21.0=41:400
|
||||||
|
portmap_22.0=49:400
|
||||||
|
portmap_23.0=57:400
|
||||||
|
portmap_38.0=257:10
|
||||||
|
portmap_40.0=65:400
|
||||||
|
portmap_41.0=73:400
|
||||||
|
portmap_42.0=81:400
|
||||||
|
portmap_43.0=89:400
|
||||||
|
portmap_60.0=97:400
|
||||||
|
portmap_61.0=105:400
|
||||||
|
portmap_62.0=113:400
|
||||||
|
portmap_63.0=121:400
|
||||||
|
portmap_80.0=129:400
|
||||||
|
portmap_81.0=137:400
|
||||||
|
portmap_82.0=145:400
|
||||||
|
portmap_83.0=153:400
|
||||||
|
portmap_100.0=161:400
|
||||||
|
portmap_101.0=169:400
|
||||||
|
portmap_102.0=177:400
|
||||||
|
portmap_103.0=185:400
|
||||||
|
portmap_118.0=258:10
|
||||||
|
portmap_120.0=193:400
|
||||||
|
portmap_121.0=201:400
|
||||||
|
portmap_122.0=209:400
|
||||||
|
portmap_123.0=217:400
|
||||||
|
portmap_140.0=225:400
|
||||||
|
portmap_141.0=233:400
|
||||||
|
portmap_142.0=241:400
|
||||||
|
portmap_143.0=249:400
|
||||||
|
port_init_autoneg_1.0=0
|
||||||
|
port_init_autoneg_2.0=0
|
||||||
|
port_init_autoneg_3.0=0
|
||||||
|
port_init_autoneg_4.0=0
|
||||||
|
port_init_autoneg_20.0=0
|
||||||
|
port_init_autoneg_21.0=0
|
||||||
|
port_init_autoneg_22.0=0
|
||||||
|
port_init_autoneg_23.0=0
|
||||||
|
port_init_autoneg_38.0=0
|
||||||
|
port_init_autoneg_40.0=0
|
||||||
|
port_init_autoneg_41.0=0
|
||||||
|
port_init_autoneg_42.0=0
|
||||||
|
port_init_autoneg_43.0=0
|
||||||
|
port_init_autoneg_60.0=0
|
||||||
|
port_init_autoneg_61.0=0
|
||||||
|
port_init_autoneg_62.0=0
|
||||||
|
port_init_autoneg_63.0=0
|
||||||
|
port_init_autoneg_80.0=0
|
||||||
|
port_init_autoneg_81.0=0
|
||||||
|
port_init_autoneg_82.0=0
|
||||||
|
port_init_autoneg_83.0=0
|
||||||
|
port_init_autoneg_100.0=0
|
||||||
|
port_init_autoneg_101.0=0
|
||||||
|
port_init_autoneg_102.0=0
|
||||||
|
port_init_autoneg_103.0=0
|
||||||
|
port_init_autoneg_118.0=0
|
||||||
|
port_init_autoneg_120.0=0
|
||||||
|
port_init_autoneg_121.0=0
|
||||||
|
port_init_autoneg_122.0=0
|
||||||
|
port_init_autoneg_123.0=0
|
||||||
|
port_init_autoneg_140.0=0
|
||||||
|
port_init_autoneg_141.0=0
|
||||||
|
port_init_autoneg_142.0=0
|
||||||
|
port_init_autoneg_143.0=0
|
||||||
|
port_phy_addr_1.0=0xff
|
||||||
|
port_phy_addr_2.0=0xff
|
||||||
|
port_phy_addr_3.0=0xff
|
||||||
|
port_phy_addr_4.0=0xff
|
||||||
|
port_phy_addr_20.0=0xff
|
||||||
|
port_phy_addr_21.0=0xff
|
||||||
|
port_phy_addr_22.0=0xff
|
||||||
|
port_phy_addr_23.0=0xff
|
||||||
|
port_phy_addr_38.0=0xff
|
||||||
|
port_phy_addr_40.0=0xff
|
||||||
|
port_phy_addr_41.0=0xff
|
||||||
|
port_phy_addr_42.0=0xff
|
||||||
|
port_phy_addr_43.0=0xff
|
||||||
|
port_phy_addr_60.0=0xff
|
||||||
|
port_phy_addr_61.0=0xff
|
||||||
|
port_phy_addr_62.0=0xff
|
||||||
|
port_phy_addr_63.0=0xff
|
||||||
|
port_phy_addr_80.0=0xff
|
||||||
|
port_phy_addr_81.0=0xff
|
||||||
|
port_phy_addr_82.0=0xff
|
||||||
|
port_phy_addr_83.0=0xff
|
||||||
|
port_phy_addr_100.0=0xff
|
||||||
|
port_phy_addr_101.0=0xff
|
||||||
|
port_phy_addr_102.0=0xff
|
||||||
|
port_phy_addr_103.0=0xff
|
||||||
|
port_phy_addr_118.0=0xff
|
||||||
|
port_phy_addr_120.0=0xff
|
||||||
|
port_phy_addr_121.0=0xff
|
||||||
|
port_phy_addr_122.0=0xff
|
||||||
|
port_phy_addr_123.0=0xff
|
||||||
|
port_phy_addr_140.0=0xff
|
||||||
|
port_phy_addr_141.0=0xff
|
||||||
|
port_phy_addr_142.0=0xff
|
||||||
|
port_phy_addr_143.0=0xff
|
||||||
|
robust_hash_disable_egress_vlan.0=1
|
||||||
|
robust_hash_disable_mpls.0=1
|
||||||
|
robust_hash_disable_vlan.0=1
|
||||||
|
sram_scan_enable.0=0
|
||||||
|
tdma_timeout_usec.0=15000000
|
||||||
|
tslam_timeout_usec.0=15000000
|
1
device/arista/x86_64-arista_7060px4_32/plugins
Symbolic link
1
device/arista/x86_64-arista_7060px4_32/plugins
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-arista_common/plugins/
|
1
device/arista/x86_64-arista_7170_64c/plugins
Symbolic link
1
device/arista/x86_64-arista_7170_64c/plugins
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-arista_common/plugins/
|
@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_eeprom as arista_eeprom
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
board = arista_eeprom.getTlvInfoDecoder()
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_leds as arista_leds
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
LedControl = arista_leds.getLedControl()
|
|
@ -1,12 +0,0 @@
|
|||||||
# psuutil.py
|
|
||||||
#
|
|
||||||
# Platform-specific PSU interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_psu as arista_psuutil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
PsuUtil = arista_psuutil.getPsuUtil()
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_sfputil as arista_sfputil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
SfpUtil = arista_sfputil.getSfpUtil()
|
|
1
device/arista/x86_64-arista_7260cx3_64/plugins
Symbolic link
1
device/arista/x86_64-arista_7260cx3_64/plugins
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-arista_common/plugins/
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
Arista 7260CX3-64 eeprom plugin
|
|
||||||
Uses the arista driver library to obtain the TlvInfoDecoder
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_eeprom as arista_eeprom
|
|
||||||
except ImportError, e:
|
|
||||||
raise ImportError (str(e) + "- required module not found")
|
|
||||||
|
|
||||||
board = arista_eeprom.getTlvInfoDecoder()
|
|
@ -1,6 +0,0 @@
|
|||||||
try:
|
|
||||||
import arista.utils.sonic_leds as arista_leds
|
|
||||||
except ImportError, e:
|
|
||||||
raise ImportError (str(e) + "- required module not found")
|
|
||||||
|
|
||||||
LedControl = arista_leds.getLedControl()
|
|
@ -1,12 +0,0 @@
|
|||||||
# psuutil.py
|
|
||||||
#
|
|
||||||
# Platform-specific PSU interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_psu as arista_psuutil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
PsuUtil = arista_psuutil.getPsuUtil()
|
|
@ -1,12 +0,0 @@
|
|||||||
# sfputil.py
|
|
||||||
#
|
|
||||||
# Platform-specific SFP transceiver interface for SONiC
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_sfputil as arista_sfputil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
|
|
||||||
SfpUtil = arista_sfputil.getSfpUtil()
|
|
1
device/arista/x86_64-arista_7280cr3_32p4/plugins
Symbolic link
1
device/arista/x86_64-arista_7280cr3_32p4/plugins
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../x86_64-arista_common/plugins/
|
@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_eeprom as arista_eeprom
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
board = arista_eeprom.getTlvInfoDecoder()
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_leds as arista_leds
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
LedControl = arista_leds.getLedControl()
|
|
@ -1,8 +0,0 @@
|
|||||||
# psuutil.py
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_psu as arista_psuutil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
PsuUtil = arista_psuutil.getPsuUtil()
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
try:
|
|
||||||
import arista.utils.sonic_sfputil as arista_sfputil
|
|
||||||
except ImportError as e:
|
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
|
||||||
|
|
||||||
SfpUtil = arista_sfputil.getSfpUtil()
|
|
@ -1,5 +1,10 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
#
|
||||||
|
# Arista eeprom processing for SONiC
|
||||||
|
# Uses the arista driver library to obtain the TlvInfoDecoder
|
||||||
|
#
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import arista.utils.sonic_eeprom as arista_eeprom
|
import arista.utils.sonic_eeprom as arista_eeprom
|
||||||
except ImportError as e:
|
except ImportError as e:
|
@ -1,3 +1,9 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
#
|
||||||
|
# Arista LED controls for SONiC
|
||||||
|
#
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import arista.utils.sonic_leds as arista_leds
|
import arista.utils.sonic_leds as arista_leds
|
||||||
except ImportError as e:
|
except ImportError as e:
|
@ -1,6 +1,7 @@
|
|||||||
# psuutil.py
|
#!/usr/bin/env python
|
||||||
|
|
||||||
#
|
#
|
||||||
# Platform-specific PSU interface for SONiC
|
# Arista PSU interface for SONiC
|
||||||
#
|
#
|
||||||
|
|
||||||
try:
|
try:
|
@ -1,6 +1,7 @@
|
|||||||
# sfputil.py
|
#!/usr/bin/env python
|
||||||
|
|
||||||
#
|
#
|
||||||
# Platform-specific SFP transceiver interface for SONiC
|
# Arista SFP transceiver interface for SONiC
|
||||||
#
|
#
|
||||||
|
|
||||||
try:
|
try:
|
@ -0,0 +1,77 @@
|
|||||||
|
portmap_1=1:100
|
||||||
|
portmap_2=5:100
|
||||||
|
portmap_3=9:100
|
||||||
|
portmap_4=13:100
|
||||||
|
portmap_5=17:100
|
||||||
|
portmap_6=21:100
|
||||||
|
portmap_7=25:100
|
||||||
|
portmap_8=29:100
|
||||||
|
portmap_34=33:100
|
||||||
|
portmap_35=37:100
|
||||||
|
portmap_36=41:100
|
||||||
|
portmap_37=45:100
|
||||||
|
portmap_38=49:100
|
||||||
|
portmap_39=53:100
|
||||||
|
portmap_40=57:100
|
||||||
|
portmap_41=61:100
|
||||||
|
portmap_68=65:100
|
||||||
|
portmap_69=69:100
|
||||||
|
portmap_70=73:100
|
||||||
|
portmap_71=77:100
|
||||||
|
portmap_72=81:100
|
||||||
|
portmap_73=85:100
|
||||||
|
portmap_74=89:100
|
||||||
|
portmap_75=93:100
|
||||||
|
portmap_102=97:100
|
||||||
|
portmap_103=101:100
|
||||||
|
portmap_104=105:100
|
||||||
|
portmap_105=109:100
|
||||||
|
portmap_106=113:100
|
||||||
|
portmap_107=117:100
|
||||||
|
portmap_108=121:100
|
||||||
|
portmap_109=125:100
|
||||||
|
oversubscribe_mode=1
|
||||||
|
portmap_66=129:10
|
||||||
|
portmap_100=131:10
|
||||||
|
pbmp_xport_xe=0x3fd000000ff4000003fc000001fe
|
||||||
|
portmap_33=132:10
|
||||||
|
portmap_67=133:10
|
||||||
|
portmap_101=134:10
|
||||||
|
portmap_135=135:10
|
||||||
|
xgxs_tx_lane_map_ce18=0x1032
|
||||||
|
xgxs_rx_lane_map_ce18=0x1032
|
||||||
|
xgxs_rx_lane_map_ce19=0x2301
|
||||||
|
xgxs_rx_lane_map_ce20=0x2301
|
||||||
|
xgxs_rx_lane_map_ce21=0x2301
|
||||||
|
xgxs_rx_lane_map_ce22=0x2301
|
||||||
|
xgxs_rx_lane_map_ce23=0x2301
|
||||||
|
xgxs_rx_lane_map_ce24=0x2301
|
||||||
|
xgxs_rx_lane_map_ce25=0x2301
|
||||||
|
xgxs_rx_lane_map_ce26=0x2301
|
||||||
|
xgxs_rx_lane_map_ce27=0x2301
|
||||||
|
xgxs_rx_lane_map_ce28=0x2301
|
||||||
|
phy_xaui_rx_polarity_flip_ce4=0x2
|
||||||
|
phy_xaui_tx_polarity_flip_ce5=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce5=0x5
|
||||||
|
phy_xaui_rx_polarity_flip_ce6=0x2
|
||||||
|
phy_xaui_tx_polarity_flip_ce7=0x8
|
||||||
|
phy_xaui_tx_polarity_flip_ce8=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce8=0x8
|
||||||
|
phy_xaui_tx_polarity_flip_ce10=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce10=0x1
|
||||||
|
phy_xaui_rx_polarity_flip_ce11=0x2
|
||||||
|
phy_xaui_tx_polarity_flip_ce19=0x2
|
||||||
|
phy_xaui_rx_polarity_flip_ce19=0x3
|
||||||
|
phy_xaui_tx_polarity_flip_ce20=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce21=0x4
|
||||||
|
phy_xaui_tx_polarity_flip_ce22=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce22=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce23=0x4
|
||||||
|
phy_xaui_rx_polarity_flip_ce24=0x4
|
||||||
|
phy_xaui_tx_polarity_flip_ce25=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce25=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce26=0x4
|
||||||
|
phy_xaui_tx_polarity_flip_ce27=0x8
|
||||||
|
phy_xaui_rx_polarity_flip_ce27=0x8
|
||||||
|
l2xmsg_mode=1
|
||||||
|
fpem_mem_entries=32768
|
33
device/broadcom/x86_64-bcm_xlr-r0/BCM956960K/port_config.ini
Normal file
33
device/broadcom/x86_64-bcm_xlr-r0/BCM956960K/port_config.ini
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# name lanes alias index speed
|
||||||
|
Ethernet0 1,2,3,4 Ethernet1/0/1 0 100000
|
||||||
|
Ethernet4 5,6,7,8 Ethernet1/0/5 1 100000
|
||||||
|
Ethernet8 9,10,11,12 Ethernet1/0/9 2 100000
|
||||||
|
Ethernet12 13,14,15,16 Ethernet1/0/13 3 100000
|
||||||
|
Ethernet16 17,18,19,20 Ethernet1/0/17 4 100000
|
||||||
|
Ethernet20 21,22,23,24 Ethernet1/0/21 5 100000
|
||||||
|
Ethernet24 25,26,27,28 Ethernet1/0/25 6 100000
|
||||||
|
Ethernet28 29,30,31,32 Ethernet1/0/29 7 100000
|
||||||
|
Ethernet32 33,34,35,36 Ethernet1/0/33 8 100000
|
||||||
|
Ethernet36 37,38,39,40 Ethernet1/0/37 9 100000
|
||||||
|
Ethernet40 41,42,43,44 Ethernet1/0/41 10 100000
|
||||||
|
Ethernet44 45,46,47,48 Ethernet1/0/45 11 100000
|
||||||
|
Ethernet48 49,50,51,52 Ethernet1/0/49 12 100000
|
||||||
|
Ethernet52 53,54,55,56 Ethernet1/0/53 13 100000
|
||||||
|
Ethernet56 57,58,59,60 Ethernet1/0/57 14 100000
|
||||||
|
Ethernet60 61,62,63,64 Ethernet1/0/61 15 100000
|
||||||
|
Ethernet64 65,66,67,68 Ethernet1/0/65 16 100000
|
||||||
|
Ethernet68 69,70,71,72 Ethernet1/0/69 17 100000
|
||||||
|
Ethernet72 73,74,75,76 Ethernet1/0/73 18 100000
|
||||||
|
Ethernet76 77,78,79,80 Ethernet1/0/77 19 100000
|
||||||
|
Ethernet80 81,82,83,84 Ethernet1/0/81 20 100000
|
||||||
|
Ethernet84 85,86,87,88 Ethernet1/0/85 21 100000
|
||||||
|
Ethernet88 89,90,91,92 Ethernet1/0/89 22 100000
|
||||||
|
Ethernet92 93,94,95,96 Ethernet1/0/93 23 100000
|
||||||
|
Ethernet96 97,98,99,100 Ethernet1/0/97 24 100000
|
||||||
|
Ethernet100 101,102,103,104 Ethernet1/0/101 25 100000
|
||||||
|
Ethernet104 105,106,107,108 Ethernet1/0/105 26 100000
|
||||||
|
Ethernet108 109,110,111,112 Ethernet1/0/109 27 100000
|
||||||
|
Ethernet112 113,114,115,116 Ethernet1/0/113 28 100000
|
||||||
|
Ethernet116 117,118,119,120 Ethernet1/0/117 29 100000
|
||||||
|
Ethernet120 121,122,123,124 Ethernet1/0/121 30 100000
|
||||||
|
Ethernet124 125,126,127,128 Ethernet1/0/125 31 100000
|
1
device/broadcom/x86_64-bcm_xlr-r0/BCM956960K/sai.profile
Normal file
1
device/broadcom/x86_64-bcm_xlr-r0/BCM956960K/sai.profile
Normal file
@ -0,0 +1 @@
|
|||||||
|
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/config_th_32x100.bcm
|
1
device/broadcom/x86_64-bcm_xlr-r0/default_sku
Normal file
1
device/broadcom/x86_64-bcm_xlr-r0/default_sku
Normal file
@ -0,0 +1 @@
|
|||||||
|
bcm_xlr t1
|
9
device/broadcom/x86_64-bcm_xlr-r0/installer.conf
Normal file
9
device/broadcom/x86_64-bcm_xlr-r0/installer.conf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
if [ -d /sys/devices/pci0000:00/0000:00:13.0 ]; then
|
||||||
|
CONSOLE_PORT=0x3e8
|
||||||
|
CONSOLE_DEV=2
|
||||||
|
else
|
||||||
|
CONSOLE_PORT=0x3f8
|
||||||
|
CONSOLE_DEV=0
|
||||||
|
fi
|
||||||
|
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="libata.dma=0 libata.noacpi=1"
|
||||||
|
CONSOLE_SPEED=115200
|
29
device/broadcom/x86_64-bcm_xlr-r0/plugins/eeprom.py
Normal file
29
device/broadcom/x86_64-bcm_xlr-r0/plugins/eeprom.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# Broadcom XLR/GTS 'eeprom' support
|
||||||
|
#
|
||||||
|
# Platform and model specific eeprom subclass, inherits from the base class,
|
||||||
|
# and provides the followings:
|
||||||
|
# - the eeprom format definition
|
||||||
|
# - specific encoder/decoder if there is special need
|
||||||
|
#
|
||||||
|
# Note: the file /etc/sys_eeprom.bin is generated by the script
|
||||||
|
# brcm-xlr-gts-create-eeprom-file.py
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
try:
|
||||||
|
from sonic_eeprom import eeprom_tlvinfo
|
||||||
|
except ImportError, e:
|
||||||
|
raise ImportError (str(e) + "- required module not found")
|
||||||
|
|
||||||
|
|
||||||
|
class board(eeprom_tlvinfo.TlvInfoDecoder):
|
||||||
|
|
||||||
|
def __init__(self, name, path, cpld_root, ro):
|
||||||
|
self.eeprom_path = "/etc/sys_eeprom.bin"
|
||||||
|
super(board, self).__init__(self.eeprom_path, 0, '', False, True)
|
||||||
|
|
||||||
|
def serial_number_str(self, e):
|
||||||
|
"""Return service tag instead of serial number"""
|
||||||
|
return "No service tag"
|
41
device/broadcom/x86_64-bcm_xlr-r0/plugins/psuutil.py
Normal file
41
device/broadcom/x86_64-bcm_xlr-r0/plugins/psuutil.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
try:
|
||||||
|
from sonic_psu.psu_base import PsuBase
|
||||||
|
except ImportError as e:
|
||||||
|
raise ImportError(str(e) + "- required module not found")
|
||||||
|
|
||||||
|
|
||||||
|
class PsuUtil(PsuBase):
|
||||||
|
"""Platform-specific PSUutil class"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
PsuBase.__init__(self)
|
||||||
|
|
||||||
|
def get_num_psus(self):
|
||||||
|
"""
|
||||||
|
Retrieves the number of PSUs available on the device
|
||||||
|
|
||||||
|
:return: An integer, the number of PSUs available on the device
|
||||||
|
"""
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def get_psu_status(self, index):
|
||||||
|
"""
|
||||||
|
Retrieves the oprational status of power supply unit (PSU) defined by 1-based index <index>
|
||||||
|
|
||||||
|
:param index: An integer, 1-based index of the PSU of which to query status
|
||||||
|
:return: Boolean, True if PSU is operating properly, False if PSU is faulty
|
||||||
|
"""
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_psu_presence(self, index):
|
||||||
|
"""
|
||||||
|
Retrieves the presence status of power supply unit (PSU) defined by 1-based index <index>
|
||||||
|
|
||||||
|
:param index: An integer, 1-based index of the PSU of which to query status
|
||||||
|
:return: Boolean, True if PSU is plugged, False if not
|
||||||
|
"""
|
||||||
|
return False
|
50
device/broadcom/x86_64-bcm_xlr-r0/plugins/sfputil.py
Normal file
50
device/broadcom/x86_64-bcm_xlr-r0/plugins/sfputil.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
try:
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
from sonic_sfp.sfputilbase import SfpUtilBase
|
||||||
|
except ImportError as e:
|
||||||
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
|
|
||||||
|
class SfpUtil(SfpUtilBase):
|
||||||
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
|
PORT_START = 1
|
||||||
|
PORT_END = 52
|
||||||
|
_port_to_eeprom_mapping = {}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def port_start(self):
|
||||||
|
return self.PORT_START
|
||||||
|
|
||||||
|
@property
|
||||||
|
def port_end(self):
|
||||||
|
return self.PORT_END
|
||||||
|
|
||||||
|
@property
|
||||||
|
def qsfp_ports(self):
|
||||||
|
return []
|
||||||
|
|
||||||
|
@property
|
||||||
|
def port_to_eeprom_mapping(self):
|
||||||
|
return self._port_to_eeprom_mapping
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
SfpUtilBase.__init__(self)
|
||||||
|
|
||||||
|
def get_presence(self, port_num):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_low_power_mode(self, port_num):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def set_low_power_mode(self, port_num, lpmode):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def reset(self, port_num):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def get_transceiver_change_event(self, timeout=0):
|
||||||
|
raise NotImplementedError
|
@ -1,13 +1,56 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/python
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import struct
|
||||||
|
|
||||||
# Export GPIO10 if needed
|
NVRAM_RES = '/dev/nvram'
|
||||||
[ -d /sys/class/gpio/gpio10 ] || echo 10 > /sys/class/gpio/export
|
COLD_RESET = 0xE # Cold Reset
|
||||||
echo out > /sys/class/gpio/gpio10/direction
|
WARM_RESET = 0x6 # Warm Reset
|
||||||
|
|
||||||
#Toggle GPIO10 pin (to reset MUX)
|
def io_reg_write(resource, offset, val):
|
||||||
echo 1 > /sys/class/gpio/gpio10/value
|
fd = os.open(resource, os.O_RDWR)
|
||||||
echo 0 > /sys/class/gpio/gpio10/value
|
if(fd < 0):
|
||||||
|
print 'file open failed %s" % resource'
|
||||||
|
return
|
||||||
|
if(os.lseek(fd, offset, os.SEEK_SET) != offset):
|
||||||
|
print 'lseek failed on %s' % resource
|
||||||
|
return
|
||||||
|
ret = os.write(fd, struct.pack('B', val))
|
||||||
|
if(ret != 1):
|
||||||
|
print 'write failed %d' % ret
|
||||||
|
return
|
||||||
|
os.close(fd)
|
||||||
|
|
||||||
|
|
||||||
#Power Reset
|
def power_reset(val):
|
||||||
echo 1 > /sys/devices/platform/dell-s6000-cpld.0/power_reset
|
with open('/sys/devices/platform/dell-s6000-cpld.0/power_reset', 'w') as p:
|
||||||
|
p.write(str(int(val)) + '\n')
|
||||||
|
p.flush()
|
||||||
|
|
||||||
|
def gpio_direction(pin,direction):
|
||||||
|
kernpath = '/sys/class/gpio/gpio'+str(pin)+'/direction'
|
||||||
|
with open(('kernpath'), 'w') as p:
|
||||||
|
p.write(str(direction) + '\n')
|
||||||
|
p.flush()
|
||||||
|
|
||||||
|
def gpio_set(pin,value):
|
||||||
|
kernpath = '/sys/class/gpio/gpio'+str(pin)+'/value'
|
||||||
|
with open(('kernpath'), 'w') as p:
|
||||||
|
p.write(str(int(value)) + '\n')
|
||||||
|
p.flush()
|
||||||
|
|
||||||
|
def gpio_export(value):
|
||||||
|
with open('/sys/class/gpio/export', 'w') as p:
|
||||||
|
p.write(str(int(value)) + '\n')
|
||||||
|
p.flush()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
io_reg_write(NVRAM_RES, 0x49, COLD_RESET)
|
||||||
|
if not os.path.isdir("/sys/class/gpio/gpio10"):
|
||||||
|
gpio_export(10)
|
||||||
|
gpio_direction("10","out")
|
||||||
|
#Toggle GPIO10 pin (to reset MUX)
|
||||||
|
gpio_set("10",1)
|
||||||
|
gpio_set("10",0)
|
||||||
|
power_reset(1)
|
||||||
|
751
device/dell/x86_64-dell_z9100_c2538-r0/media_settings.json
Normal file
751
device/dell/x86_64-dell_z9100_c2538-r0/media_settings.json
Normal file
@ -0,0 +1,751 @@
|
|||||||
|
{
|
||||||
|
"GLOBAL_MEDIA_SETTINGS": {
|
||||||
|
"1-32": {
|
||||||
|
"AMPHENOL-NDARHF-M201": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x8",
|
||||||
|
"lane1":"0x8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDAAFF-M201": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808",
|
||||||
|
"lane2":"0x006808",
|
||||||
|
"lane3":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x8",
|
||||||
|
"lane1":"0x8",
|
||||||
|
"lane2":"0x8",
|
||||||
|
"lane3":"0x8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"MOLEX-1003461101": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x046804",
|
||||||
|
"lane1":"0x046804"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x8",
|
||||||
|
"lane1":"0x8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDARHF-M206": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDAAFF-M206": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808",
|
||||||
|
"lane2":"0x006808",
|
||||||
|
"lane3":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDARHJ-M206": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"MOLEX-1003463151": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDARHJ-M202": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDAAFJ-M202": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808",
|
||||||
|
"lane2":"0x006808",
|
||||||
|
"lane3":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"MOLEX-1003461201": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x046408",
|
||||||
|
"lane1":"0x046408"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDARHF-M205": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x8",
|
||||||
|
"lane1":"0x8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDAAFF-M205": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808",
|
||||||
|
"lane2":"0x006808",
|
||||||
|
"lane3":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x8",
|
||||||
|
"lane1":"0x8",
|
||||||
|
"lane2":"0x8",
|
||||||
|
"lane3":"0x8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDARHJ-M203": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xe",
|
||||||
|
"lane1":"0xe"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AMPHENOL-NDAAFJ-M203": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808",
|
||||||
|
"lane2":"0x006808",
|
||||||
|
"lane3":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xe",
|
||||||
|
"lane1":"0xe",
|
||||||
|
"lane2":"0xe",
|
||||||
|
"lane3":"0xe"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"MOLEX-1002979024": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x006808",
|
||||||
|
"lane1":"0x006808",
|
||||||
|
"lane2":"0x006808",
|
||||||
|
"lane3":"0x006808"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"QSFP28-40GBASE-CR4-1M":{
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x32320c",
|
||||||
|
"lane1":"0x32320c",
|
||||||
|
"lane2":"0x32320c",
|
||||||
|
"lane3":"0x32320c"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x9",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0x9"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"QSFP28-40GBASE-CR4-2M":{
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x252f0c",
|
||||||
|
"lane1":"0x252f0c",
|
||||||
|
"lane2":"0x252f0c",
|
||||||
|
"lane3":"0x252f0c"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xc",
|
||||||
|
"lane1":"0xc",
|
||||||
|
"lane2":"0xc",
|
||||||
|
"lane3":"0xc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"QSFP28-40GBASE-CR4-3M":{
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x252f0c",
|
||||||
|
"lane1":"0x252f0c",
|
||||||
|
"lane2":"0x252f0c",
|
||||||
|
"lane3":"0x252f0c"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xe",
|
||||||
|
"lane1":"0xe",
|
||||||
|
"lane2":"0xe",
|
||||||
|
"lane3":"0xe"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"QSFP28-40GBASE-CR4-5M":{
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x3d2f04",
|
||||||
|
"lane1":"0x3d2f04",
|
||||||
|
"lane2":"0x3d2f04",
|
||||||
|
"lane3":"0x3d2f04"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xf",
|
||||||
|
"lane1":"0xf",
|
||||||
|
"lane2":"0xf",
|
||||||
|
"lane3":"0xf"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PORT_MEDIA_SETTINGS": {
|
||||||
|
"1": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x2c4004",
|
||||||
|
"lane1":"0x2b4203",
|
||||||
|
"lane2":"0x2c4004",
|
||||||
|
"lane3":"0x2c4004"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x2b4203",
|
||||||
|
"lane1":"0x294403",
|
||||||
|
"lane2":"0x2b4203",
|
||||||
|
"lane3":"0x2b4203"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x294403",
|
||||||
|
"lane1":"0x294403",
|
||||||
|
"lane2":"0x294403",
|
||||||
|
"lane3":"0x294403"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x284503",
|
||||||
|
"lane1":"0x284503",
|
||||||
|
"lane2":"0x284503",
|
||||||
|
"lane3":"0x294403"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x284503",
|
||||||
|
"lane1":"0x284503",
|
||||||
|
"lane2":"0x264703",
|
||||||
|
"lane3":"0x284503"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x264703",
|
||||||
|
"lane1":"0x244903",
|
||||||
|
"lane2":"0x284503",
|
||||||
|
"lane3":"0x264703"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x244903",
|
||||||
|
"lane1":"0x244903",
|
||||||
|
"lane2":"0x264703",
|
||||||
|
"lane3":"0x244903"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0x9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x234b02",
|
||||||
|
"lane1":"0x244903",
|
||||||
|
"lane2":"0x244903",
|
||||||
|
"lane3":"0x234b02"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0x9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x294403",
|
||||||
|
"lane1":"0x2c4004",
|
||||||
|
"lane2":"0x2b4203",
|
||||||
|
"lane3":"0x2e3e04"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xb",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x294403",
|
||||||
|
"lane1":"0x294403",
|
||||||
|
"lane2":"0x294403",
|
||||||
|
"lane3":"0x294403"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x244903",
|
||||||
|
"lane1":"0x274603",
|
||||||
|
"lane2":"0x284503",
|
||||||
|
"lane3":"0x244903"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x284503",
|
||||||
|
"lane1":"0x274603",
|
||||||
|
"lane2":"0x264703",
|
||||||
|
"lane3":"0x264703"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x204e02",
|
||||||
|
"lane1":"0x204e02",
|
||||||
|
"lane2":"0x1f4f02",
|
||||||
|
"lane3":"0x1f4f02"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x9",
|
||||||
|
"lane2":"0x8",
|
||||||
|
"lane3":"0x8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x1e5002",
|
||||||
|
"lane1":"0x204e02",
|
||||||
|
"lane2":"0x1e5002",
|
||||||
|
"lane3":"0x204e02"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x8",
|
||||||
|
"lane1":"0x9",
|
||||||
|
"lane2":"0x8",
|
||||||
|
"lane3":"0x9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x204e02",
|
||||||
|
"lane1":"0x1e5002",
|
||||||
|
"lane2":"0x1f4f02",
|
||||||
|
"lane3":"0x1f4f02"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x8",
|
||||||
|
"lane2":"0x8",
|
||||||
|
"lane3":"0x8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x204e02",
|
||||||
|
"lane1":"0x1e5002",
|
||||||
|
"lane2":"0x204e02",
|
||||||
|
"lane3":"0x1e5002"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x8",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0x8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x204e02",
|
||||||
|
"lane1":"0x1e5002",
|
||||||
|
"lane2":"0x204e02",
|
||||||
|
"lane3":"0x1e5002"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x8",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0x8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x204e02",
|
||||||
|
"lane1":"0x1e5002",
|
||||||
|
"lane2":"0x204e02",
|
||||||
|
"lane3":"0x1e5002"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x8",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0x8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x1e5002",
|
||||||
|
"lane1":"0x204e02",
|
||||||
|
"lane2":"0x1e5002",
|
||||||
|
"lane3":"0x204e02"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x8",
|
||||||
|
"lane1":"0x9",
|
||||||
|
"lane2":"0x8",
|
||||||
|
"lane3":"0x9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x204e02",
|
||||||
|
"lane1":"0x1f4f02",
|
||||||
|
"lane2":"0x204e02",
|
||||||
|
"lane3":"0x1f4f02"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x8",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0x8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"21": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x244903",
|
||||||
|
"lane1":"0x244903",
|
||||||
|
"lane2":"0x244903",
|
||||||
|
"lane3":"0x244903"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0x9",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0x9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x264703",
|
||||||
|
"lane1":"0x244903",
|
||||||
|
"lane2":"0x244903",
|
||||||
|
"lane3":"0x244903"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0x9",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"23": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x294403",
|
||||||
|
"lane1":"0x244903",
|
||||||
|
"lane2":"0x244903",
|
||||||
|
"lane3":"0x284503"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"24": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x294403",
|
||||||
|
"lane1":"0x2b4203",
|
||||||
|
"lane2":"0x2c4004",
|
||||||
|
"lane3":"0x2d3f04"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xb",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"25": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x234b02",
|
||||||
|
"lane1":"0x234b02",
|
||||||
|
"lane2":"0x234b02",
|
||||||
|
"lane3":"0x234b02"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x9",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0x9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"26": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x234b02",
|
||||||
|
"lane1":"0x244903",
|
||||||
|
"lane2":"0x244903",
|
||||||
|
"lane3":"0x244903"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0x9",
|
||||||
|
"lane1":"0x9",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0x9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"27": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x274603",
|
||||||
|
"lane1":"0x264703",
|
||||||
|
"lane2":"0x244903",
|
||||||
|
"lane3":"0x244903"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0x9",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"28": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x264703",
|
||||||
|
"lane1":"0x244903",
|
||||||
|
"lane2":"0x284503",
|
||||||
|
"lane3":"0x274603"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"29": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x294403",
|
||||||
|
"lane1":"0x294403",
|
||||||
|
"lane2":"0x294403",
|
||||||
|
"lane3":"0x284503"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"30": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x294403",
|
||||||
|
"lane1":"0x284503",
|
||||||
|
"lane2":"0x294403",
|
||||||
|
"lane3":"0x294403"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xa",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xa",
|
||||||
|
"lane3":"0xa"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"31": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x2b4203",
|
||||||
|
"lane1":"0x294403",
|
||||||
|
"lane2":"0x2b4203",
|
||||||
|
"lane3":"0x2b4203"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xa",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"32": {
|
||||||
|
"Default": {
|
||||||
|
"preemphasis": {
|
||||||
|
"lane0":"0x2b4203",
|
||||||
|
"lane1":"0x2b4203",
|
||||||
|
"lane2":"0x2c4004",
|
||||||
|
"lane3":"0x2c4004"
|
||||||
|
},
|
||||||
|
"idriver": {
|
||||||
|
"lane0":"0xb",
|
||||||
|
"lane1":"0xb",
|
||||||
|
"lane2":"0xb",
|
||||||
|
"lane3":"0xb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,111 @@
|
|||||||
|
# LED microprocessor initialization for DellEMC-Z9264f
|
||||||
|
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=32 REMAP_PORT_2=33 REMAP_PORT_1=34 REMAP_PORT_0=35
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=36 REMAP_PORT_6=37 REMAP_PORT_5=38 REMAP_PORT_4=39
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=4 REMAP_PORT_10=5 REMAP_PORT_9=6 REMAP_PORT_8=7
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=0 REMAP_PORT_14=1 REMAP_PORT_13=2 REMAP_PORT_12=3
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=56 REMAP_PORT_18=57 REMAP_PORT_17=58 REMAP_PORT_16=59
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=60 REMAP_PORT_22=61 REMAP_PORT_21=62 REMAP_PORT_20=63
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=28 REMAP_PORT_26=29 REMAP_PORT_25=30 REMAP_PORT_24=31
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=24 REMAP_PORT_30=25 REMAP_PORT_29=26 REMAP_PORT_28=27
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=48 REMAP_PORT_34=49 REMAP_PORT_33=50 REMAP_PORT_32=51
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=52 REMAP_PORT_38=53 REMAP_PORT_37=54 REMAP_PORT_36=55
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=20 REMAP_PORT_42=21 REMAP_PORT_41=22 REMAP_PORT_40=23
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=16 REMAP_PORT_46=17 REMAP_PORT_45=18 REMAP_PORT_44=19
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=40 REMAP_PORT_50=41 REMAP_PORT_49=42 REMAP_PORT_48=43
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=44 REMAP_PORT_54=45 REMAP_PORT_53=46 REMAP_PORT_52=47
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=12 REMAP_PORT_58=13 REMAP_PORT_57=14 REMAP_PORT_56=15
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=8 REMAP_PORT_62=9 REMAP_PORT_61=10 REMAP_PORT_60=11
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=0 REMAP_PORT_2=1 REMAP_PORT_1=2 REMAP_PORT_0=3
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=4 REMAP_PORT_6=5 REMAP_PORT_5=6 REMAP_PORT_4=7
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_8_11 REMAP_PORT_9=38 REMAP_PORT_8=39 REMAP_PORT_11=36 REMAP_PORT_10=37
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=32 REMAP_PORT_14=33 REMAP_PORT_13=34 REMAP_PORT_12=35
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=8 REMAP_PORT_18=9 REMAP_PORT_17=10 REMAP_PORT_16=11
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=12 REMAP_PORT_22=13 REMAP_PORT_21=14 REMAP_PORT_20=15
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=44 REMAP_PORT_26=45 REMAP_PORT_25=46 REMAP_PORT_24=47
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=40 REMAP_PORT_30=41 REMAP_PORT_29=42 REMAP_PORT_28=43
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=16 REMAP_PORT_34=17 REMAP_PORT_33=18 REMAP_PORT_32=19
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=20 REMAP_PORT_38=21 REMAP_PORT_37=22 REMAP_PORT_36=23
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=52 REMAP_PORT_42=53 REMAP_PORT_41=54 REMAP_PORT_40=55
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=48 REMAP_PORT_46=49 REMAP_PORT_45=50 REMAP_PORT_44=51
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=24 REMAP_PORT_50=25 REMAP_PORT_49=26 REMAP_PORT_48=27
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=28 REMAP_PORT_54=29 REMAP_PORT_53=30 REMAP_PORT_52=31
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=60 REMAP_PORT_58=61 REMAP_PORT_57=62 REMAP_PORT_56=63
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=56 REMAP_PORT_62=57 REMAP_PORT_61=58 REMAP_PORT_60=59
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=60 REMAP_PORT_2=61 REMAP_PORT_1=62 REMAP_PORT_0=63
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=56 REMAP_PORT_6=57 REMAP_PORT_5=58 REMAP_PORT_4=59
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=24 REMAP_PORT_10=25 REMAP_PORT_9=26 REMAP_PORT_8=27
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=28 REMAP_PORT_14=29 REMAP_PORT_13=30 REMAP_PORT_12=31
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=52 REMAP_PORT_18=53 REMAP_PORT_17=54 REMAP_PORT_16=55
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=48 REMAP_PORT_22=49 REMAP_PORT_21=50 REMAP_PORT_20=51
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=16 REMAP_PORT_26=17 REMAP_PORT_25=18 REMAP_PORT_24=19
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=20 REMAP_PORT_30=21 REMAP_PORT_29=22 REMAP_PORT_28=23
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=44 REMAP_PORT_34=45 REMAP_PORT_33=46 REMAP_PORT_32=47
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=40 REMAP_PORT_38=41 REMAP_PORT_37=42 REMAP_PORT_36=43
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=8 REMAP_PORT_42=9 REMAP_PORT_41=10 REMAP_PORT_40=11
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=12 REMAP_PORT_46=13 REMAP_PORT_45=14 REMAP_PORT_44=15
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=36 REMAP_PORT_50=37 REMAP_PORT_49=38 REMAP_PORT_48=39
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=32 REMAP_PORT_54=33 REMAP_PORT_53=34 REMAP_PORT_52=35
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=0 REMAP_PORT_58=1 REMAP_PORT_57=2 REMAP_PORT_56=3
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=4 REMAP_PORT_62=5 REMAP_PORT_61=6 REMAP_PORT_60=7
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=28 REMAP_PORT_2=29 REMAP_PORT_1=30 REMAP_PORT_0=31
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=24 REMAP_PORT_6=25 REMAP_PORT_5=26 REMAP_PORT_4=27
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=56 REMAP_PORT_10=57 REMAP_PORT_9=58 REMAP_PORT_8=59
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=60 REMAP_PORT_14=61 REMAP_PORT_13=62 REMAP_PORT_12=63
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=4 REMAP_PORT_18=5 REMAP_PORT_17=6 REMAP_PORT_16=7
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=0 REMAP_PORT_22=1 REMAP_PORT_21=2 REMAP_PORT_20=3
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=32 REMAP_PORT_26=33 REMAP_PORT_25=34 REMAP_PORT_24=35
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=36 REMAP_PORT_30=37 REMAP_PORT_29=38 REMAP_PORT_28=39
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=12 REMAP_PORT_34=13 REMAP_PORT_33=14 REMAP_PORT_32=15
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=8 REMAP_PORT_38=9 REMAP_PORT_37=10 REMAP_PORT_36=11
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=40 REMAP_PORT_42=41 REMAP_PORT_41=42 REMAP_PORT_40=43
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=44 REMAP_PORT_46=45 REMAP_PORT_45=46 REMAP_PORT_44=47
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=20 REMAP_PORT_50=21 REMAP_PORT_49=22 REMAP_PORT_48=23
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=16 REMAP_PORT_54=17 REMAP_PORT_53=18 REMAP_PORT_52=19
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=48 REMAP_PORT_58=49 REMAP_PORT_57=50 REMAP_PORT_56=51
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=52 REMAP_PORT_62=53 REMAP_PORT_61=54 REMAP_PORT_60=55
|
||||||
|
m CMIC_LEDUP4_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=1 REMAP_PORT_1=0
|
||||||
|
|
||||||
|
led 0 stop
|
||||||
|
led 0 prog \
|
||||||
|
02 00 60 FE 2E FE 67 1C 86 FE 06 FE D2 40 71 04 \
|
||||||
|
12 FF 85 05 D2 05 71 1A 52 00 3A 80 32 08 97 71 \
|
||||||
|
23 77 4B 32 00 32 01 B7 97 75 32 12 BC FE FE 02 \
|
||||||
|
0A 50 12 BC FE FE 95 75 3C 85 77 44 16 FF DA 02 \
|
||||||
|
71 4B 77 44 22 0F 87 22 0E 87 57 22 0E 87 22 0E \
|
||||||
|
87 57 22 0E 87 22 0F 87 57 00 00 00 00 00 00 00
|
||||||
|
led 0 auto on
|
||||||
|
led 0 start
|
||||||
|
|
||||||
|
led 1 stop
|
||||||
|
led 1 prog \
|
||||||
|
02 00 60 FE 2E FE 67 1C 86 FE 06 FE D2 40 71 04 \
|
||||||
|
12 FF 85 05 D2 05 71 1A 52 00 3A 80 32 08 97 71 \
|
||||||
|
23 77 4B 32 00 32 01 B7 97 75 32 12 BC FE FE 02 \
|
||||||
|
0A 50 12 BC FE FE 95 75 3C 85 77 44 16 FF DA 02 \
|
||||||
|
71 4B 77 44 22 0F 87 22 0E 87 57 22 0E 87 22 0E \
|
||||||
|
87 57 22 0E 87 22 0F 87 57 00 00 00 00 00 00 00
|
||||||
|
led 1 auto on
|
||||||
|
led 1 start
|
||||||
|
|
||||||
|
led 2 stop
|
||||||
|
led 2 prog \
|
||||||
|
02 00 60 FE 2E FE 67 1C 86 FE 06 FE D2 40 71 04 \
|
||||||
|
12 FF 85 05 D2 05 71 1A 52 00 3A 80 32 08 97 71 \
|
||||||
|
23 77 4B 32 00 32 01 B7 97 75 32 12 BC FE FE 02 \
|
||||||
|
0A 50 12 BC FE FE 95 75 3C 85 77 44 16 FF DA 02 \
|
||||||
|
71 4B 77 44 22 0F 87 22 0E 87 57 22 0E 87 22 0E \
|
||||||
|
87 57 22 0E 87 22 0F 87 57 00 00 00 00 00 00 00
|
||||||
|
led 2 auto on
|
||||||
|
led 2 start
|
||||||
|
|
||||||
|
led 3 stop
|
||||||
|
led 3 prog \
|
||||||
|
02 00 60 FE 2E FE 67 1C 86 FE 06 FE D2 40 71 04 \
|
||||||
|
12 FF 85 05 D2 05 71 1A 52 00 3A 80 32 08 97 71 \
|
||||||
|
23 77 4B 32 00 32 01 B7 97 75 32 12 BC FE FE 02 \
|
||||||
|
0A 50 12 BC FE FE 95 75 3C 85 77 44 16 FF DA 02 \
|
||||||
|
71 4B 77 44 22 0F 87 22 0E 87 57 22 0E 87 22 0E \
|
||||||
|
87 57 22 0E 87 22 0F 87 57 00 00 00 00 00 00 00
|
||||||
|
led 3 auto on
|
||||||
|
led 3 start
|
@ -0,0 +1,115 @@
|
|||||||
|
# LED microprocessor initialization for DellEMC-Z9264f
|
||||||
|
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=32 REMAP_PORT_2=33 REMAP_PORT_1=34 REMAP_PORT_0=35
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=36 REMAP_PORT_6=37 REMAP_PORT_5=38 REMAP_PORT_4=39
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=4 REMAP_PORT_10=5 REMAP_PORT_9=6 REMAP_PORT_8=7
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=0 REMAP_PORT_14=1 REMAP_PORT_13=2 REMAP_PORT_12=3
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=56 REMAP_PORT_18=57 REMAP_PORT_17=58 REMAP_PORT_16=59
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=60 REMAP_PORT_22=61 REMAP_PORT_21=62 REMAP_PORT_20=63
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=28 REMAP_PORT_26=29 REMAP_PORT_25=30 REMAP_PORT_24=31
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=24 REMAP_PORT_30=25 REMAP_PORT_29=26 REMAP_PORT_28=27
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=48 REMAP_PORT_34=49 REMAP_PORT_33=50 REMAP_PORT_32=51
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=52 REMAP_PORT_38=53 REMAP_PORT_37=54 REMAP_PORT_36=55
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=20 REMAP_PORT_42=21 REMAP_PORT_41=22 REMAP_PORT_40=23
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=16 REMAP_PORT_46=17 REMAP_PORT_45=18 REMAP_PORT_44=19
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=40 REMAP_PORT_50=41 REMAP_PORT_49=42 REMAP_PORT_48=43
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=44 REMAP_PORT_54=45 REMAP_PORT_53=46 REMAP_PORT_52=47
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=12 REMAP_PORT_58=13 REMAP_PORT_57=14 REMAP_PORT_56=15
|
||||||
|
m CMIC_LEDUP0_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=8 REMAP_PORT_62=9 REMAP_PORT_61=10 REMAP_PORT_60=11
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=0 REMAP_PORT_2=1 REMAP_PORT_1=2 REMAP_PORT_0=3
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=4 REMAP_PORT_6=5 REMAP_PORT_5=6 REMAP_PORT_4=7
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_8_11 REMAP_PORT_9=38 REMAP_PORT_8=39 REMAP_PORT_11=36 REMAP_PORT_10=37
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=32 REMAP_PORT_14=33 REMAP_PORT_13=34 REMAP_PORT_12=35
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=8 REMAP_PORT_18=9 REMAP_PORT_17=10 REMAP_PORT_16=11
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=12 REMAP_PORT_22=13 REMAP_PORT_21=14 REMAP_PORT_20=15
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=44 REMAP_PORT_26=45 REMAP_PORT_25=46 REMAP_PORT_24=47
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=40 REMAP_PORT_30=41 REMAP_PORT_29=42 REMAP_PORT_28=43
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=16 REMAP_PORT_34=17 REMAP_PORT_33=18 REMAP_PORT_32=19
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=20 REMAP_PORT_38=21 REMAP_PORT_37=22 REMAP_PORT_36=23
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=52 REMAP_PORT_42=53 REMAP_PORT_41=54 REMAP_PORT_40=55
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=48 REMAP_PORT_46=49 REMAP_PORT_45=50 REMAP_PORT_44=51
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=24 REMAP_PORT_50=25 REMAP_PORT_49=26 REMAP_PORT_48=27
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=28 REMAP_PORT_54=29 REMAP_PORT_53=30 REMAP_PORT_52=31
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=60 REMAP_PORT_58=61 REMAP_PORT_57=62 REMAP_PORT_56=63
|
||||||
|
m CMIC_LEDUP1_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=56 REMAP_PORT_62=57 REMAP_PORT_61=58 REMAP_PORT_60=59
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=60 REMAP_PORT_2=61 REMAP_PORT_1=62 REMAP_PORT_0=63
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=56 REMAP_PORT_6=57 REMAP_PORT_5=58 REMAP_PORT_4=59
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=24 REMAP_PORT_10=25 REMAP_PORT_9=26 REMAP_PORT_8=27
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=28 REMAP_PORT_14=29 REMAP_PORT_13=30 REMAP_PORT_12=31
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=52 REMAP_PORT_18=53 REMAP_PORT_17=54 REMAP_PORT_16=55
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=48 REMAP_PORT_22=49 REMAP_PORT_21=50 REMAP_PORT_20=51
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=16 REMAP_PORT_26=17 REMAP_PORT_25=18 REMAP_PORT_24=19
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=20 REMAP_PORT_30=21 REMAP_PORT_29=22 REMAP_PORT_28=23
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=44 REMAP_PORT_34=45 REMAP_PORT_33=46 REMAP_PORT_32=47
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=40 REMAP_PORT_38=41 REMAP_PORT_37=42 REMAP_PORT_36=43
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=8 REMAP_PORT_42=9 REMAP_PORT_41=10 REMAP_PORT_40=11
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=12 REMAP_PORT_46=13 REMAP_PORT_45=14 REMAP_PORT_44=15
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=36 REMAP_PORT_50=37 REMAP_PORT_49=38 REMAP_PORT_48=39
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=32 REMAP_PORT_54=33 REMAP_PORT_53=34 REMAP_PORT_52=35
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=0 REMAP_PORT_58=1 REMAP_PORT_57=2 REMAP_PORT_56=3
|
||||||
|
m CMIC_LEDUP2_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=4 REMAP_PORT_62=5 REMAP_PORT_61=6 REMAP_PORT_60=7
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=28 REMAP_PORT_2=29 REMAP_PORT_1=30 REMAP_PORT_0=31
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=24 REMAP_PORT_6=25 REMAP_PORT_5=26 REMAP_PORT_4=27
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=56 REMAP_PORT_10=57 REMAP_PORT_9=58 REMAP_PORT_8=59
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=60 REMAP_PORT_14=61 REMAP_PORT_13=62 REMAP_PORT_12=63
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=4 REMAP_PORT_18=5 REMAP_PORT_17=6 REMAP_PORT_16=7
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=0 REMAP_PORT_22=1 REMAP_PORT_21=2 REMAP_PORT_20=3
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=32 REMAP_PORT_26=33 REMAP_PORT_25=34 REMAP_PORT_24=35
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=36 REMAP_PORT_30=37 REMAP_PORT_29=38 REMAP_PORT_28=39
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=12 REMAP_PORT_34=13 REMAP_PORT_33=14 REMAP_PORT_32=15
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=8 REMAP_PORT_38=9 REMAP_PORT_37=10 REMAP_PORT_36=11
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=40 REMAP_PORT_42=41 REMAP_PORT_41=42 REMAP_PORT_40=43
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=44 REMAP_PORT_46=45 REMAP_PORT_45=46 REMAP_PORT_44=47
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=20 REMAP_PORT_50=21 REMAP_PORT_49=22 REMAP_PORT_48=23
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=16 REMAP_PORT_54=17 REMAP_PORT_53=18 REMAP_PORT_52=19
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=48 REMAP_PORT_58=49 REMAP_PORT_57=50 REMAP_PORT_56=51
|
||||||
|
m CMIC_LEDUP3_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=52 REMAP_PORT_62=53 REMAP_PORT_61=54 REMAP_PORT_60=55
|
||||||
|
m CMIC_LEDUP4_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=1 REMAP_PORT_1=0
|
||||||
|
|
||||||
|
led 0 stop
|
||||||
|
led 0 prog \
|
||||||
|
02 00 28 60 FE 67 1B 06 FE 80 D2 40 74 02 86 FD \
|
||||||
|
3A 80 28 32 08 97 71 5A 77 4C 57 28 32 08 97 75 \
|
||||||
|
4C 28 32 00 32 01 B7 97 75 3C 16 FD DA 0A 74 36 \
|
||||||
|
12 00 61 FD CA 05 CA 05 74 3C 77 4C 12 96 F8 15 \
|
||||||
|
1A 00 75 53 77 5A 57 28 32 07 97 57 32 0E 87 32 \
|
||||||
|
0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
|
||||||
|
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
led 0 auto on
|
||||||
|
led 0 start
|
||||||
|
|
||||||
|
led 1 stop
|
||||||
|
led 1 prog \
|
||||||
|
02 00 28 60 FE 67 1B 06 FE 80 D2 40 74 02 86 FD \
|
||||||
|
3A 80 28 32 08 97 71 5A 77 4C 57 28 32 08 97 75 \
|
||||||
|
4C 28 32 00 32 01 B7 97 75 3C 16 FD DA 0A 74 36 \
|
||||||
|
12 00 61 FD CA 05 CA 05 74 3C 77 4C 12 96 F8 15 \
|
||||||
|
1A 00 75 53 77 5A 57 28 32 07 97 57 32 0E 87 32 \
|
||||||
|
0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
|
||||||
|
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
led 1 auto on
|
||||||
|
led 1 start
|
||||||
|
|
||||||
|
led 2 stop
|
||||||
|
led 2 prog \
|
||||||
|
02 00 28 60 FE 67 1B 06 FE 80 D2 40 74 02 86 FD \
|
||||||
|
3A 80 28 32 08 97 71 5A 77 4C 57 28 32 08 97 75 \
|
||||||
|
4C 28 32 00 32 01 B7 97 75 3C 16 FD DA 0A 74 36 \
|
||||||
|
12 00 61 FD CA 05 CA 05 74 3C 77 4C 12 96 F8 15 \
|
||||||
|
1A 00 75 53 77 5A 57 28 32 07 97 57 32 0E 87 32 \
|
||||||
|
0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
|
||||||
|
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
led 2 auto on
|
||||||
|
led 2 start
|
||||||
|
|
||||||
|
led 3 stop
|
||||||
|
led 3 prog \
|
||||||
|
02 00 28 60 FE 67 1B 06 FE 80 D2 40 74 02 86 FD \
|
||||||
|
3A 80 28 32 08 97 71 5A 77 4C 57 28 32 08 97 75 \
|
||||||
|
4C 28 32 00 32 01 B7 97 75 3C 16 FD DA 0A 74 36 \
|
||||||
|
12 00 61 FD CA 05 CA 05 74 3C 77 4C 12 96 F8 15 \
|
||||||
|
1A 00 75 53 77 5A 57 28 32 07 97 57 32 0E 87 32 \
|
||||||
|
0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
|
||||||
|
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
led 3 auto on
|
||||||
|
led 3 start
|
6276
device/dell/x86_64-dellemc_z9264f_c3538-r0/media_settings.json
Normal file
6276
device/dell/x86_64-dellemc_z9264f_c3538-r0/media_settings.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,7 @@
|
|||||||
try:
|
try:
|
||||||
import time
|
import time
|
||||||
import subprocess
|
import subprocess
|
||||||
from sonic_sfp.sfputilbase import SfpUtilBase
|
from sonic_sfp.sfputilbase import *
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
@ -20,6 +20,10 @@ SFP_STATUS_INSERTED = '1'
|
|||||||
|
|
||||||
GET_HWSKU_CMD = "sonic-cfggen -d -v DEVICE_METADATA.localhost.hwsku"
|
GET_HWSKU_CMD = "sonic-cfggen -d -v DEVICE_METADATA.localhost.hwsku"
|
||||||
|
|
||||||
|
# Ethernet<n> <=> sfp<n+SFP_PORT_NAME_OFFSET>
|
||||||
|
SFP_PORT_NAME_OFFSET = 1
|
||||||
|
SFP_PORT_NAME_CONVENTION = "sfp{}"
|
||||||
|
|
||||||
# magic code defnition for port number, qsfp port position of each hwsku
|
# magic code defnition for port number, qsfp port position of each hwsku
|
||||||
# port_position_tuple = (PORT_START, QSFP_PORT_START, PORT_END, PORT_IN_BLOCK, EEPROM_OFFSET)
|
# port_position_tuple = (PORT_START, QSFP_PORT_START, PORT_END, PORT_IN_BLOCK, EEPROM_OFFSET)
|
||||||
hwsku_dict = {'ACS-MSN2700': 0, "LS-SN2700":0, 'ACS-MSN2740': 0, 'ACS-MSN2100': 1, 'ACS-MSN2410': 2, 'ACS-MSN2010': 3, 'ACS-MSN3700': 0, 'ACS-MSN3700C': 0, 'Mellanox-SN2700': 0, 'Mellanox-SN2700-D48C8': 0}
|
hwsku_dict = {'ACS-MSN2700': 0, "LS-SN2700":0, 'ACS-MSN2740': 0, 'ACS-MSN2100': 1, 'ACS-MSN2410': 2, 'ACS-MSN2010': 3, 'ACS-MSN3700': 0, 'ACS-MSN3700C': 0, 'Mellanox-SN2700': 0, 'Mellanox-SN2700-D48C8': 0}
|
||||||
@ -33,15 +37,12 @@ class SfpUtil(SfpUtilBase):
|
|||||||
PORTS_IN_BLOCK = 0
|
PORTS_IN_BLOCK = 0
|
||||||
EEPROM_OFFSET = 0
|
EEPROM_OFFSET = 0
|
||||||
|
|
||||||
_port_to_eeprom_mapping = {}
|
|
||||||
|
|
||||||
db_sel = None
|
db_sel = None
|
||||||
db_sel_timeout = None
|
db_sel_timeout = None
|
||||||
db_sel_object = None
|
db_sel_object = None
|
||||||
db_sel_tbl = None
|
db_sel_tbl = None
|
||||||
state_db = None
|
state_db = None
|
||||||
sfpd_status_tbl = None
|
sfpd_status_tbl = None
|
||||||
qsfp_sysfs_path = "/var/run/hw-management/qsfp/"
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def port_start(self):
|
def port_start(self):
|
||||||
@ -57,7 +58,8 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def port_to_eeprom_mapping(self):
|
def port_to_eeprom_mapping(self):
|
||||||
return self._port_to_eeprom_mapping
|
print "dependency on sysfs has been removed"
|
||||||
|
raise Exception()
|
||||||
|
|
||||||
def get_port_position_tuple_by_sku_name(self):
|
def get_port_position_tuple_by_sku_name(self):
|
||||||
p = subprocess.Popen(GET_HWSKU_CMD, shell=True, stdout=subprocess.PIPE)
|
p = subprocess.Popen(GET_HWSKU_CMD, shell=True, stdout=subprocess.PIPE)
|
||||||
@ -73,29 +75,31 @@ class SfpUtil(SfpUtilBase):
|
|||||||
self.PORTS_IN_BLOCK = port_position_tuple[3]
|
self.PORTS_IN_BLOCK = port_position_tuple[3]
|
||||||
self.EEPROM_OFFSET = port_position_tuple[4]
|
self.EEPROM_OFFSET = port_position_tuple[4]
|
||||||
|
|
||||||
for x in range(0, self.port_end + 1):
|
|
||||||
self._port_to_eeprom_mapping[x] = self.qsfp_sysfs_path + "qsfp{}".format(x + self.EEPROM_OFFSET)
|
|
||||||
|
|
||||||
SfpUtilBase.__init__(self)
|
SfpUtilBase.__init__(self)
|
||||||
|
|
||||||
def get_presence(self, port_num):
|
def get_presence(self, port_num):
|
||||||
|
presence = False
|
||||||
|
|
||||||
# Check for invalid port_num
|
# Check for invalid port_num
|
||||||
if port_num < self.port_start or port_num > self.port_end:
|
if port_num < self.port_start or port_num > self.port_end:
|
||||||
return False
|
return presence
|
||||||
|
|
||||||
|
port_num += SFP_PORT_NAME_OFFSET
|
||||||
|
sfpname = SFP_PORT_NAME_CONVENTION.format(port_num)
|
||||||
|
|
||||||
|
ethtool_cmd = "ethtool -m {} 2>/dev/null".format(sfpname)
|
||||||
try:
|
try:
|
||||||
reg_file = open(self.qsfp_sysfs_path + "qsfp{}_status".format(port_num + 1))
|
proc = subprocess.Popen(ethtool_cmd, stdout=subprocess.PIPE, shell=True, stderr=subprocess.STDOUT)
|
||||||
except IOError as e:
|
stdout = proc.communicate()[0]
|
||||||
print "Error: unable to open file: %s" % str(e)
|
proc.wait()
|
||||||
return False
|
result = stdout.rstrip('\n')
|
||||||
|
if result != '':
|
||||||
|
presence = True
|
||||||
|
|
||||||
content = reg_file.readline().rstrip()
|
except OSError, e:
|
||||||
|
return presence
|
||||||
|
|
||||||
# content is a string with the qsfp status
|
return presence
|
||||||
if content == SFP_STATUS_INSERTED:
|
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_low_power_mode(self, port_num):
|
def get_low_power_mode(self, port_num):
|
||||||
# Check for invalid port_num
|
# Check for invalid port_num
|
||||||
@ -191,3 +195,354 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
return status, phy_port_dict
|
return status, phy_port_dict
|
||||||
|
|
||||||
|
def _read_eeprom_specific_bytes(self, sysfsfile_eeprom, offset, num_bytes):
|
||||||
|
print("_read_eeprom_specific_bytes should not be called since the sysfs it dependents on will no longer exist.")
|
||||||
|
print("_read_eeprom_specific_bytes_via_ethtool should be called instead")
|
||||||
|
raise Exception()
|
||||||
|
|
||||||
|
# Read out any bytes from any offset
|
||||||
|
def _read_eeprom_specific_bytes_via_ethtool(self, port_num, offset, num_bytes):
|
||||||
|
port_num += SFP_PORT_NAME_OFFSET
|
||||||
|
sfpname = SFP_PORT_NAME_CONVENTION.format(port_num)
|
||||||
|
|
||||||
|
eeprom_raw = []
|
||||||
|
ethtool_cmd = "ethtool -m {} hex on offset {} length {}".format(sfpname, offset, num_bytes)
|
||||||
|
try:
|
||||||
|
output = subprocess.check_output(ethtool_cmd, shell=True)
|
||||||
|
output_lines = output.splitlines()
|
||||||
|
first_line_raw = output_lines[0]
|
||||||
|
if "Offset" in first_line_raw:
|
||||||
|
for line in output_lines[2:]:
|
||||||
|
line_split = line.split()
|
||||||
|
eeprom_raw = eeprom_raw + line_split[1:]
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return eeprom_raw
|
||||||
|
|
||||||
|
# Read eeprom
|
||||||
|
def _read_eeprom_devid(self, port_num, devid, offset, num_bytes = 512):
|
||||||
|
if port_num in self.osfp_ports:
|
||||||
|
pass
|
||||||
|
elif port_num in self.qsfp_ports:
|
||||||
|
pass
|
||||||
|
elif (self.DOM_EEPROM_ADDR == devid):
|
||||||
|
offset += 256
|
||||||
|
|
||||||
|
eeprom_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, offset, num_bytes)
|
||||||
|
|
||||||
|
return eeprom_raw
|
||||||
|
|
||||||
|
# Read out SFP type, vendor name, PN, REV, SN from eeprom.
|
||||||
|
def get_transceiver_info_dict(self, port_num):
|
||||||
|
transceiver_info_dict = {}
|
||||||
|
compliance_code_dict = {}
|
||||||
|
|
||||||
|
# ToDo: OSFP tranceiver info parsing not fully supported.
|
||||||
|
# in inf8628.py lack of some memory map definition
|
||||||
|
# will be implemented when the inf8628 memory map ready
|
||||||
|
if port_num in self.osfp_ports:
|
||||||
|
offset = 0
|
||||||
|
vendor_rev_width = XCVR_HW_REV_WIDTH_OSFP
|
||||||
|
|
||||||
|
sfpi_obj = inf8628InterfaceId()
|
||||||
|
if sfpi_obj is None:
|
||||||
|
print("Error: sfp_object open failed")
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_type_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_TYPE_OFFSET), XCVR_TYPE_WIDTH)
|
||||||
|
if sfp_type_raw is not None:
|
||||||
|
sfp_type_data = sfpi_obj.parse_sfp_type(sfp_type_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_name_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH)
|
||||||
|
if sfp_vendor_name_raw is not None:
|
||||||
|
sfp_vendor_name_data = sfpi_obj.parse_vendor_name(sfp_vendor_name_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_pn_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH)
|
||||||
|
if sfp_vendor_pn_raw is not None:
|
||||||
|
sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn(sfp_vendor_pn_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_rev_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_HW_REV_OFFSET), vendor_rev_width)
|
||||||
|
if sfp_vendor_rev_raw is not None:
|
||||||
|
sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev(sfp_vendor_rev_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_sn_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH)
|
||||||
|
if sfp_vendor_sn_raw is not None:
|
||||||
|
sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn(sfp_vendor_sn_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
transceiver_info_dict['type'] = sfp_type_data['data']['type']['value']
|
||||||
|
transceiver_info_dict['manufacturename'] = sfp_vendor_name_data['data']['Vendor Name']['value']
|
||||||
|
transceiver_info_dict['modelname'] = sfp_vendor_pn_data['data']['Vendor PN']['value']
|
||||||
|
transceiver_info_dict['hardwarerev'] = sfp_vendor_rev_data['data']['Vendor Rev']['value']
|
||||||
|
transceiver_info_dict['serialnum'] = sfp_vendor_sn_data['data']['Vendor SN']['value']
|
||||||
|
# Below part is added to avoid fail the xcvrd, shall be implemented later
|
||||||
|
transceiver_info_dict['vendor_oui'] = 'N/A'
|
||||||
|
transceiver_info_dict['vendor_date'] = 'N/A'
|
||||||
|
transceiver_info_dict['Connector'] = 'N/A'
|
||||||
|
transceiver_info_dict['encoding'] = 'N/A'
|
||||||
|
transceiver_info_dict['ext_identifier'] = 'N/A'
|
||||||
|
transceiver_info_dict['ext_rateselect_compliance'] = 'N/A'
|
||||||
|
transceiver_info_dict['cable_type'] = 'N/A'
|
||||||
|
transceiver_info_dict['cable_length'] = 'N/A'
|
||||||
|
transceiver_info_dict['specification_compliance'] = 'N/A'
|
||||||
|
transceiver_info_dict['nominal_bit_rate'] = 'N/A'
|
||||||
|
|
||||||
|
else:
|
||||||
|
if port_num in self.qsfp_ports:
|
||||||
|
offset = 128
|
||||||
|
vendor_rev_width = XCVR_HW_REV_WIDTH_QSFP
|
||||||
|
cable_length_width = XCVR_CABLE_LENGTH_WIDTH_QSFP
|
||||||
|
interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_QSFP
|
||||||
|
sfp_type = 'QSFP'
|
||||||
|
|
||||||
|
sfpi_obj = sff8436InterfaceId()
|
||||||
|
if sfpi_obj is None:
|
||||||
|
print("Error: sfp_object open failed")
|
||||||
|
return None
|
||||||
|
|
||||||
|
else:
|
||||||
|
offset = 0
|
||||||
|
vendor_rev_width = XCVR_HW_REV_WIDTH_SFP
|
||||||
|
cable_length_width = XCVR_CABLE_LENGTH_WIDTH_SFP
|
||||||
|
interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_SFP
|
||||||
|
sfp_type = 'SFP'
|
||||||
|
|
||||||
|
sfpi_obj = sff8472InterfaceId()
|
||||||
|
if sfpi_obj is None:
|
||||||
|
print("Error: sfp_object open failed")
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_interface_bulk_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_INTFACE_BULK_OFFSET), interface_info_bulk_width)
|
||||||
|
if sfp_interface_bulk_raw is not None:
|
||||||
|
sfp_interface_bulk_data = sfpi_obj.parse_sfp_info_bulk(sfp_interface_bulk_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_name_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH)
|
||||||
|
if sfp_vendor_name_raw is not None:
|
||||||
|
sfp_vendor_name_data = sfpi_obj.parse_vendor_name(sfp_vendor_name_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_pn_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH)
|
||||||
|
if sfp_vendor_pn_raw is not None:
|
||||||
|
sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn(sfp_vendor_pn_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_rev_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_HW_REV_OFFSET), vendor_rev_width)
|
||||||
|
if sfp_vendor_rev_raw is not None:
|
||||||
|
sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev(sfp_vendor_rev_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_sn_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH)
|
||||||
|
if sfp_vendor_sn_raw is not None:
|
||||||
|
sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn(sfp_vendor_sn_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_oui_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_OUI_OFFSET), XCVR_VENDOR_OUI_WIDTH)
|
||||||
|
if sfp_vendor_oui_raw is not None:
|
||||||
|
sfp_vendor_oui_data = sfpi_obj.parse_vendor_oui(sfp_vendor_oui_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfp_vendor_date_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_DATE_OFFSET), XCVR_VENDOR_DATE_WIDTH)
|
||||||
|
if sfp_vendor_date_raw is not None:
|
||||||
|
sfp_vendor_date_data = sfpi_obj.parse_vendor_date(sfp_vendor_date_raw, 0)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
transceiver_info_dict['type'] = sfp_interface_bulk_data['data']['type']['value']
|
||||||
|
transceiver_info_dict['manufacturename'] = sfp_vendor_name_data['data']['Vendor Name']['value']
|
||||||
|
transceiver_info_dict['modelname'] = sfp_vendor_pn_data['data']['Vendor PN']['value']
|
||||||
|
transceiver_info_dict['hardwarerev'] = sfp_vendor_rev_data['data']['Vendor Rev']['value']
|
||||||
|
transceiver_info_dict['serialnum'] = sfp_vendor_sn_data['data']['Vendor SN']['value']
|
||||||
|
transceiver_info_dict['vendor_oui'] = sfp_vendor_oui_data['data']['Vendor OUI']['value']
|
||||||
|
transceiver_info_dict['vendor_date'] = sfp_vendor_date_data['data']['VendorDataCode(YYYY-MM-DD Lot)']['value']
|
||||||
|
transceiver_info_dict['Connector'] = sfp_interface_bulk_data['data']['Connector']['value']
|
||||||
|
transceiver_info_dict['encoding'] = sfp_interface_bulk_data['data']['EncodingCodes']['value']
|
||||||
|
transceiver_info_dict['ext_identifier'] = sfp_interface_bulk_data['data']['Extended Identifier']['value']
|
||||||
|
transceiver_info_dict['ext_rateselect_compliance'] = sfp_interface_bulk_data['data']['RateIdentifier']['value']
|
||||||
|
if sfp_type == 'QSFP':
|
||||||
|
for key in qsfp_cable_length_tup:
|
||||||
|
if key in sfp_interface_bulk_data['data']:
|
||||||
|
transceiver_info_dict['cable_type'] = key
|
||||||
|
transceiver_info_dict['cable_length'] = str(sfp_interface_bulk_data['data'][key]['value'])
|
||||||
|
|
||||||
|
for key in qsfp_compliance_code_tup:
|
||||||
|
if key in sfp_interface_bulk_data['data']['Specification compliance']['value']:
|
||||||
|
compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance']['value'][key]['value']
|
||||||
|
transceiver_info_dict['specification_compliance'] = str(compliance_code_dict)
|
||||||
|
|
||||||
|
transceiver_info_dict['nominal_bit_rate'] = str(sfp_interface_bulk_data['data']['Nominal Bit Rate(100Mbs)']['value'])
|
||||||
|
else:
|
||||||
|
for key in sfp_cable_length_tup:
|
||||||
|
if key in sfp_interface_bulk_data['data']:
|
||||||
|
transceiver_info_dict['cable_type'] = key
|
||||||
|
transceiver_info_dict['cable_length'] = str(sfp_interface_bulk_data['data'][key]['value'])
|
||||||
|
|
||||||
|
for key in sfp_compliance_code_tup:
|
||||||
|
if key in sfp_interface_bulk_data['data']['Specification compliance']['value']:
|
||||||
|
compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance']['value'][key]['value']
|
||||||
|
transceiver_info_dict['specification_compliance'] = str(compliance_code_dict)
|
||||||
|
|
||||||
|
transceiver_info_dict['nominal_bit_rate'] = str(sfp_interface_bulk_data['data']['NominalSignallingRate(UnitsOf100Mbd)']['value'])
|
||||||
|
|
||||||
|
return transceiver_info_dict
|
||||||
|
|
||||||
|
def get_transceiver_dom_info_dict(self, port_num):
|
||||||
|
transceiver_dom_info_dict = {}
|
||||||
|
|
||||||
|
# Below part is added to avoid failing xcvrd
|
||||||
|
# Currently, the way in which dom data is read has been changed from
|
||||||
|
# using sysfs to using ethtool.
|
||||||
|
# The ethtool returns None for ports without dom support, resulting in
|
||||||
|
# None being returned. However, this fails xcvrd to add the
|
||||||
|
# TRANSCEIVER_DOM_SENSOR table entry of associated port to CONFIG_DB
|
||||||
|
# and then causes SNMP fail.
|
||||||
|
# To address this issue a default dict is initialized with all data set to
|
||||||
|
# 'N/A' and is returned is the above case.
|
||||||
|
# BTW, in the original implementation which sysfs is used to read dom data,
|
||||||
|
# even though non-None data is returned for ports without dom support,
|
||||||
|
# it does not contain valid data. This can result in wrong data in
|
||||||
|
# TRANSCEIVER_DOM_SENSOR table.
|
||||||
|
transceiver_dom_info_dict['temperature'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['voltage'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['rx1power'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['rx2power'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['rx3power'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['rx4power'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['tx1bias'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['tx2bias'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['tx3bias'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['tx4bias'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['tx1power'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['tx2power'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['tx3power'] = 'N/A'
|
||||||
|
transceiver_dom_info_dict['tx4power'] = 'N/A'
|
||||||
|
|
||||||
|
if port_num in self.osfp_ports:
|
||||||
|
pass
|
||||||
|
elif port_num in self.qsfp_ports:
|
||||||
|
offset = 0
|
||||||
|
offset_xcvr = 128
|
||||||
|
|
||||||
|
sfpd_obj = sff8436Dom()
|
||||||
|
if sfpd_obj is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sfpi_obj = sff8436InterfaceId()
|
||||||
|
if sfpi_obj is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
# QSFP capability byte parse, through this byte can know whether it support tx_power or not.
|
||||||
|
# TODO: in the future when decided to migrate to support SFF-8636 instead of SFF-8436,
|
||||||
|
# need to add more code for determining the capability and version compliance
|
||||||
|
# in SFF-8636 dom capability definitions evolving with the versions.
|
||||||
|
qsfp_dom_capability_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset_xcvr + XCVR_DOM_CAPABILITY_OFFSET), XCVR_DOM_CAPABILITY_WIDTH)
|
||||||
|
if qsfp_dom_capability_raw is not None:
|
||||||
|
qspf_dom_capability_data = sfpi_obj.parse_qsfp_dom_capability(qsfp_dom_capability_raw, 0)
|
||||||
|
else:
|
||||||
|
return transceiver_dom_info_dict
|
||||||
|
|
||||||
|
dom_temperature_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_TEMPE_OFFSET), QSFP_TEMPE_WIDTH)
|
||||||
|
if dom_temperature_raw is not None:
|
||||||
|
dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0)
|
||||||
|
else:
|
||||||
|
return transceiver_dom_info_dict
|
||||||
|
|
||||||
|
dom_voltage_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_VLOT_OFFSET), QSFP_VOLT_WIDTH)
|
||||||
|
if dom_voltage_raw is not None:
|
||||||
|
dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0)
|
||||||
|
else:
|
||||||
|
return transceiver_dom_info_dict
|
||||||
|
|
||||||
|
qsfp_dom_rev_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_DOM_REV_OFFSET), QSFP_DOM_REV_WIDTH)
|
||||||
|
if qsfp_dom_rev_raw is not None:
|
||||||
|
qsfp_dom_rev_data = sfpd_obj.parse_sfp_dom_rev(qsfp_dom_rev_raw, 0)
|
||||||
|
else:
|
||||||
|
return transceiver_dom_info_dict
|
||||||
|
|
||||||
|
transceiver_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value']
|
||||||
|
transceiver_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value']
|
||||||
|
|
||||||
|
# The tx_power monitoring is only available on QSFP which compliant with SFF-8636
|
||||||
|
# and claimed that it support tx_power with one indicator bit.
|
||||||
|
dom_channel_monitor_data = {}
|
||||||
|
qsfp_dom_rev = qsfp_dom_rev_data['data']['dom_rev']['value']
|
||||||
|
qsfp_tx_power_support = qspf_dom_capability_data['data']['Tx_power_support']['value']
|
||||||
|
if (qsfp_dom_rev[0:8] != 'SFF-8636' or (qsfp_dom_rev[0:8] == 'SFF-8636' and qsfp_tx_power_support != 'on')):
|
||||||
|
dom_channel_monitor_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WIDTH)
|
||||||
|
if dom_channel_monitor_raw is not None:
|
||||||
|
dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0)
|
||||||
|
else:
|
||||||
|
return transceiver_dom_info_dict
|
||||||
|
else:
|
||||||
|
dom_channel_monitor_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH)
|
||||||
|
if dom_channel_monitor_raw is not None:
|
||||||
|
dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params_with_tx_power(dom_channel_monitor_raw, 0)
|
||||||
|
else:
|
||||||
|
return transceiver_dom_info_dict
|
||||||
|
|
||||||
|
transceiver_dom_info_dict['tx1power'] = dom_channel_monitor_data['data']['TX1Power']['value']
|
||||||
|
transceiver_dom_info_dict['tx2power'] = dom_channel_monitor_data['data']['TX2Power']['value']
|
||||||
|
transceiver_dom_info_dict['tx3power'] = dom_channel_monitor_data['data']['TX3Power']['value']
|
||||||
|
transceiver_dom_info_dict['tx4power'] = dom_channel_monitor_data['data']['TX4Power']['value']
|
||||||
|
|
||||||
|
transceiver_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value']
|
||||||
|
transceiver_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value']
|
||||||
|
transceiver_dom_info_dict['rx1power'] = dom_channel_monitor_data['data']['RX1Power']['value']
|
||||||
|
transceiver_dom_info_dict['rx2power'] = dom_channel_monitor_data['data']['RX2Power']['value']
|
||||||
|
transceiver_dom_info_dict['rx3power'] = dom_channel_monitor_data['data']['RX3Power']['value']
|
||||||
|
transceiver_dom_info_dict['rx4power'] = dom_channel_monitor_data['data']['RX4Power']['value']
|
||||||
|
transceiver_dom_info_dict['tx1bias'] = dom_channel_monitor_data['data']['TX1Bias']['value']
|
||||||
|
transceiver_dom_info_dict['tx2bias'] = dom_channel_monitor_data['data']['TX2Bias']['value']
|
||||||
|
transceiver_dom_info_dict['tx3bias'] = dom_channel_monitor_data['data']['TX3Bias']['value']
|
||||||
|
transceiver_dom_info_dict['tx4bias'] = dom_channel_monitor_data['data']['TX4Bias']['value']
|
||||||
|
|
||||||
|
else:
|
||||||
|
offset = 256
|
||||||
|
|
||||||
|
eeprom_raw = ['0'] * 256
|
||||||
|
eeprom_raw[92:92+16] = self._read_eeprom_specific_bytes_via_ethtool(port_num, 92, 16)
|
||||||
|
sfp_obj = sff8472InterfaceId()
|
||||||
|
calibration_type = sfp_obj._get_calibration_type(eeprom_raw)
|
||||||
|
|
||||||
|
eeprom_domraw = self._read_eeprom_specific_bytes_via_ethtool(port_num, offset, 256)
|
||||||
|
if eeprom_domraw is None:
|
||||||
|
return transceiver_dom_info_dict
|
||||||
|
|
||||||
|
sfpd_obj = sff8472Dom(None, calibration_type)
|
||||||
|
if sfpd_obj is None:
|
||||||
|
print "no sff8472Dom"
|
||||||
|
return None
|
||||||
|
|
||||||
|
dom_temperature_raw = eeprom_domraw[SFP_TEMPE_OFFSET:SFP_TEMPE_OFFSET+SFP_TEMPE_WIDTH]
|
||||||
|
dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0)
|
||||||
|
|
||||||
|
dom_voltage_raw = eeprom_domraw[SFP_VLOT_OFFSET:SFP_VLOT_OFFSET+SFP_VOLT_WIDTH]
|
||||||
|
dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0)
|
||||||
|
|
||||||
|
dom_channel_monitor_raw = eeprom_domraw[SFP_CHANNL_MON_OFFSET:SFP_CHANNL_MON_OFFSET+SFP_CHANNL_MON_WIDTH]
|
||||||
|
dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0)
|
||||||
|
|
||||||
|
transceiver_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value']
|
||||||
|
transceiver_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value']
|
||||||
|
transceiver_dom_info_dict['rx1power'] = dom_channel_monitor_data['data']['RXPower']['value']
|
||||||
|
transceiver_dom_info_dict['tx1bias'] = dom_channel_monitor_data['data']['TXBias']['value']
|
||||||
|
transceiver_dom_info_dict['tx1power'] = dom_channel_monitor_data['data']['TXPower']['value']
|
||||||
|
|
||||||
|
return transceiver_dom_info_dict
|
||||||
|
@ -32,28 +32,33 @@ stderr_logfile=syslog
|
|||||||
{% if num_relays.count > 0 %}
|
{% if num_relays.count > 0 %}
|
||||||
[group:isc-dhcp-relay]
|
[group:isc-dhcp-relay]
|
||||||
programs=
|
programs=
|
||||||
{%- set add_preceding_comma = { 'flag': False } -%}
|
{%- set add_preceding_comma = { 'flag': False } %}
|
||||||
{%- for vlan_name in VLAN -%}
|
{% for vlan_name in VLAN %}
|
||||||
{%- if VLAN[vlan_name]['dhcp_servers'] -%}
|
{% if VLAN[vlan_name]['dhcp_servers'] %}
|
||||||
{%- if add_preceding_comma.flag %},{% endif -%}
|
{% if add_preceding_comma.flag %},{% endif %}
|
||||||
{%- set _dummy = add_preceding_comma.update({'flag': True}) -%}
|
{% set _dummy = add_preceding_comma.update({'flag': True}) %}
|
||||||
isc-dhcp-relay-{{ vlan_name }}
|
isc-dhcp-relay-{{ vlan_name }}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
{# Create a program entry for each DHCP relay agent instance #}
|
{# Create a program entry for each DHCP relay agent instance #}
|
||||||
{% for vlan_name in VLAN -%}
|
{% for vlan_name in VLAN %}
|
||||||
{%- if VLAN[vlan_name]['dhcp_servers'] -%}
|
{% if VLAN[vlan_name]['dhcp_servers'] %}
|
||||||
[program:isc-dhcp-relay-{{ vlan_name }}]
|
[program:isc-dhcp-relay-{{ vlan_name }}]
|
||||||
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -i {{ vlan_name }}
|
{# We treat this VLAN as a downstream interface (-id), as we only want to listen for requests #}
|
||||||
{%- for (name, prefix) in INTERFACE -%}
|
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id {{ vlan_name }}
|
||||||
{%- if prefix | ipv4 %} -i {{ name }}{% endif -%}
|
{#- We treat all other interfaces as upstream interfaces (-iu), as we only want to listen for replies #}
|
||||||
{%- endfor -%}
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
||||||
{%- for (name, prefix) in PORTCHANNEL_INTERFACE -%}
|
{% if prefix | ipv4 and name != vlan_name %} -iu {{ name }}{% endif -%}
|
||||||
{%- if prefix | ipv4 %} -i {{ name }}{% endif -%}
|
{% endfor %}
|
||||||
{%- endfor -%}
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
||||||
{%- for dhcp_server in VLAN[vlan_name]['dhcp_servers'] %} {{ dhcp_server }}{% endfor %}
|
{% if prefix | ipv4 %} -iu {{ name }}{% endif -%}
|
||||||
|
{% endfor %}
|
||||||
|
{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}
|
||||||
|
{% if prefix | ipv4 %} -iu {{ name }}{% endif -%}
|
||||||
|
{% endfor %}
|
||||||
|
{% for dhcp_server in VLAN[vlan_name]['dhcp_servers'] %} {{ dhcp_server }}{% endfor %}
|
||||||
|
|
||||||
priority=3
|
priority=3
|
||||||
autostart=false
|
autostart=false
|
||||||
|
@ -29,12 +29,12 @@ function wait_until_iface_ready
|
|||||||
|
|
||||||
|
|
||||||
# Wait for all interfaces to be up and ready
|
# Wait for all interfaces to be up and ready
|
||||||
{% for (name, prefix) in INTERFACE %}
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
||||||
wait_until_iface_ready ${PORT_TABLE_PREFIX} {{ name }}
|
wait_until_iface_ready ${PORT_TABLE_PREFIX} {{ name }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for (name, prefix) in VLAN_INTERFACE %}
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
||||||
wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }}
|
wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for (name, prefix) in PORTCHANNEL_INTERFACE %}
|
{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}
|
||||||
wait_until_iface_ready ${LAG_TABLE_PREFIX} {{ name }}
|
wait_until_iface_ready ${LAG_TABLE_PREFIX} {{ name }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -29,13 +29,13 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
no bgp default ipv4-unicast
|
no bgp default ipv4-unicast
|
||||||
bgp graceful-restart restart-time 240
|
bgp graceful-restart restart-time 240
|
||||||
bgp graceful-restart
|
bgp graceful-restart
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 and name == 'Loopback0' %}
|
{% if prefix | ipv4 and name == 'Loopback0' %}
|
||||||
bgp router-id {{ prefix | ip }}
|
bgp router-id {{ prefix | ip }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{# advertise loopback #}
|
{# advertise loopback #}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 and name == 'Loopback0' %}
|
{% if prefix | ipv4 and name == 'Loopback0' %}
|
||||||
network {{ prefix | ip }}/32
|
network {{ prefix | ip }}/32
|
||||||
{% elif prefix | ipv6 and name == 'Loopback0' %}
|
{% elif prefix | ipv6 and name == 'Loopback0' %}
|
||||||
@ -47,7 +47,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
{% endblock bgp_init %}
|
{% endblock bgp_init %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% block vlan_advertisement %}
|
{% block vlan_advertisement %}
|
||||||
{% for (name, prefix) in VLAN_INTERFACE %}
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 %}
|
{% if prefix | ipv4 %}
|
||||||
network {{ prefix }}
|
network {{ prefix }}
|
||||||
{% elif prefix | ipv6 %}
|
{% elif prefix | ipv6 %}
|
||||||
@ -108,7 +108,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
{% if bgp_peer['src_address'] is defined %}
|
{% if bgp_peer['src_address'] is defined %}
|
||||||
neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }}
|
neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if name == 'Loopback1' %}
|
{% if name == 'Loopback1' %}
|
||||||
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
|
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -16,7 +16,7 @@ log facility local4
|
|||||||
!
|
!
|
||||||
{% block interfaces %}
|
{% block interfaces %}
|
||||||
! Enable link-detect (default disabled)
|
! Enable link-detect (default disabled)
|
||||||
{% for (name, prefix) in INTERFACE %}
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
||||||
interface {{ name }}
|
interface {{ name }}
|
||||||
link-detect
|
link-detect
|
||||||
!
|
!
|
||||||
@ -30,7 +30,7 @@ link-detect
|
|||||||
!
|
!
|
||||||
{% block default_route %}
|
{% block default_route %}
|
||||||
! set static default route to mgmt gateway as a backup to learned default
|
! set static default route to mgmt gateway as a backup to learned default
|
||||||
{% for (name, prefix) in MGMT_INTERFACE %}
|
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 %}
|
{% if prefix | ipv4 %}
|
||||||
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -41,7 +41,7 @@ ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
|||||||
{% set lo_ipv4_addrs = [] %}
|
{% set lo_ipv4_addrs = [] %}
|
||||||
{% set lo_ipv6_addrs = [] %}
|
{% set lo_ipv6_addrs = [] %}
|
||||||
{% if LOOPBACK_INTERFACE %}
|
{% if LOOPBACK_INTERFACE %}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if name == 'Loopback0' %}
|
{% if name == 'Loopback0' %}
|
||||||
{% if prefix | ipv6 %}
|
{% if prefix | ipv6 %}
|
||||||
{% if lo_ipv6_addrs.append(prefix) %}
|
{% if lo_ipv6_addrs.append(prefix) %}
|
||||||
@ -87,13 +87,13 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
|
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
|
||||||
bgp graceful-restart
|
bgp graceful-restart
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 and name == 'Loopback0' %}
|
{% if prefix | ipv4 and name == 'Loopback0' %}
|
||||||
bgp router-id {{ prefix | ip }}
|
bgp router-id {{ prefix | ip }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{# advertise loopback #}
|
{# advertise loopback #}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 and name == 'Loopback0' %}
|
{% if prefix | ipv4 and name == 'Loopback0' %}
|
||||||
network {{ prefix | ip }}/32
|
network {{ prefix | ip }}/32
|
||||||
{% elif prefix | ipv6 and name == 'Loopback0' %}
|
{% elif prefix | ipv6 and name == 'Loopback0' %}
|
||||||
@ -105,7 +105,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
{% endblock bgp_init %}
|
{% endblock bgp_init %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% block vlan_advertisement %}
|
{% block vlan_advertisement %}
|
||||||
{% for (name, prefix) in VLAN_INTERFACE %}
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 %}
|
{% if prefix | ipv4 %}
|
||||||
network {{ prefix }}
|
network {{ prefix }}
|
||||||
{% elif prefix | ipv6 %}
|
{% elif prefix | ipv6 %}
|
||||||
@ -173,7 +173,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
neighbor {{ bgp_peer['name'] }} passive
|
neighbor {{ bgp_peer['name'] }} passive
|
||||||
neighbor {{ bgp_peer['name'] }} remote-as {{ deployment_id_asn_map[DEVICE_METADATA['localhost']['deployment_id']] }}
|
neighbor {{ bgp_peer['name'] }} remote-as {{ deployment_id_asn_map[DEVICE_METADATA['localhost']['deployment_id']] }}
|
||||||
neighbor {{ bgp_peer['name'] }} ebgp-multihop 255
|
neighbor {{ bgp_peer['name'] }} ebgp-multihop 255
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if name == 'Loopback1' %}
|
{% if name == 'Loopback1' %}
|
||||||
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
|
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -8,9 +8,11 @@ if [ -z "$CONFIG_TYPE" ] || [ "$CONFIG_TYPE" == "separated" ]; then
|
|||||||
sonic-cfggen -d -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/frr/bgpd.conf
|
sonic-cfggen -d -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/frr/bgpd.conf
|
||||||
sonic-cfggen -d -t /usr/share/sonic/templates/zebra.conf.j2 > /etc/frr/zebra.conf
|
sonic-cfggen -d -t /usr/share/sonic/templates/zebra.conf.j2 > /etc/frr/zebra.conf
|
||||||
touch /etc/frr/vtysh.conf
|
touch /etc/frr/vtysh.conf
|
||||||
|
rm -f /etc/frr/frr.conf
|
||||||
elif [ "$CONFIG_TYPE" == "unified" ]; then
|
elif [ "$CONFIG_TYPE" == "unified" ]; then
|
||||||
sonic-cfggen -d -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/frr.conf.j2 >/etc/frr/frr.conf
|
sonic-cfggen -d -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/frr.conf.j2 >/etc/frr/frr.conf
|
||||||
echo "service integrated-vtysh-config" > /etc/frr/vtysh.conf
|
echo "service integrated-vtysh-config" > /etc/frr/vtysh.conf
|
||||||
|
rm -f /etc/frr/bgpd.conf /etc/frr/vtysh.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sonic-cfggen -d -t /usr/share/sonic/templates/isolate.j2 > /usr/sbin/bgp-isolate
|
sonic-cfggen -d -t /usr/share/sonic/templates/isolate.j2 > /usr/sbin/bgp-isolate
|
||||||
|
@ -14,7 +14,7 @@ enable password zebra
|
|||||||
!
|
!
|
||||||
{% block interfaces %}
|
{% block interfaces %}
|
||||||
! Enable link-detect (default disabled)
|
! Enable link-detect (default disabled)
|
||||||
{% for (name, prefix) in INTERFACE %}
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
||||||
interface {{ name }}
|
interface {{ name }}
|
||||||
link-detect
|
link-detect
|
||||||
!
|
!
|
||||||
@ -28,7 +28,7 @@ link-detect
|
|||||||
!
|
!
|
||||||
{% block default_route %}
|
{% block default_route %}
|
||||||
! set static default route to mgmt gateway as a backup to learned default
|
! set static default route to mgmt gateway as a backup to learned default
|
||||||
{% for (name, prefix) in MGMT_INTERFACE %}
|
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 %}
|
{% if prefix | ipv4 %}
|
||||||
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -39,7 +39,7 @@ ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
|||||||
{% set lo_ipv4_addrs = [] %}
|
{% set lo_ipv4_addrs = [] %}
|
||||||
{% set lo_ipv6_addrs = [] %}
|
{% set lo_ipv6_addrs = [] %}
|
||||||
{% if LOOPBACK_INTERFACE %}
|
{% if LOOPBACK_INTERFACE %}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if name == 'Loopback0' %}
|
{% if name == 'Loopback0' %}
|
||||||
{% if prefix | ipv6 %}
|
{% if prefix | ipv6 %}
|
||||||
{% if lo_ipv6_addrs.append(prefix) %}
|
{% if lo_ipv6_addrs.append(prefix) %}
|
||||||
|
@ -14,7 +14,7 @@ enable password zebra
|
|||||||
!
|
!
|
||||||
{% block interfaces %}
|
{% block interfaces %}
|
||||||
! Enable link-detect (default disabled)
|
! Enable link-detect (default disabled)
|
||||||
{% for (name, prefix) in INTERFACE %}
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
||||||
interface {{ name }}
|
interface {{ name }}
|
||||||
link-detect
|
link-detect
|
||||||
!
|
!
|
||||||
@ -28,7 +28,7 @@ link-detect
|
|||||||
!
|
!
|
||||||
{% block default_route %}
|
{% block default_route %}
|
||||||
! set static default route to mgmt gateway as a backup to learned default
|
! set static default route to mgmt gateway as a backup to learned default
|
||||||
{% for (name, prefix) in MGMT_INTERFACE %}
|
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 %}
|
{% if prefix | ipv4 %}
|
||||||
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -39,7 +39,7 @@ ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
|||||||
{% set lo_ipv4_addrs = [] %}
|
{% set lo_ipv4_addrs = [] %}
|
||||||
{% set lo_ipv6_addrs = [] %}
|
{% set lo_ipv6_addrs = [] %}
|
||||||
{% if LOOPBACK_INTERFACE %}
|
{% if LOOPBACK_INTERFACE %}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv6 %}
|
{% if prefix | ipv6 %}
|
||||||
{% if lo_ipv6_addrs.append(prefix) %}
|
{% if lo_ipv6_addrs.append(prefix) %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -29,13 +29,13 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
no bgp default ipv4-unicast
|
no bgp default ipv4-unicast
|
||||||
bgp graceful-restart restart-time 240
|
bgp graceful-restart restart-time 240
|
||||||
bgp graceful-restart
|
bgp graceful-restart
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 and name == 'Loopback0' %}
|
{% if prefix | ipv4 and name == 'Loopback0' %}
|
||||||
bgp router-id {{ prefix | ip }}
|
bgp router-id {{ prefix | ip }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{# advertise loopback #}
|
{# advertise loopback #}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 and name == 'Loopback0' %}
|
{% if prefix | ipv4 and name == 'Loopback0' %}
|
||||||
network {{ prefix | ip }}/32
|
network {{ prefix | ip }}/32
|
||||||
{% elif prefix | ipv6 and name == 'Loopback0' %}
|
{% elif prefix | ipv6 and name == 'Loopback0' %}
|
||||||
@ -47,7 +47,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
{% endblock bgp_init %}
|
{% endblock bgp_init %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% block vlan_advertisement %}
|
{% block vlan_advertisement %}
|
||||||
{% for (name, prefix) in VLAN_INTERFACE %}
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 %}
|
{% if prefix | ipv4 %}
|
||||||
network {{ prefix }}
|
network {{ prefix }}
|
||||||
{% elif prefix | ipv6 %}
|
{% elif prefix | ipv6 %}
|
||||||
@ -108,7 +108,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
|||||||
{% if bgp_peer['src_address'] is defined %}
|
{% if bgp_peer['src_address'] is defined %}
|
||||||
neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }}
|
neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if name == 'Loopback1' %}
|
{% if name == 'Loopback1' %}
|
||||||
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
|
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -14,7 +14,7 @@ enable password zebra
|
|||||||
!
|
!
|
||||||
{% block interfaces %}
|
{% block interfaces %}
|
||||||
! Enable link-detect (default disabled)
|
! Enable link-detect (default disabled)
|
||||||
{% for (name, prefix) in INTERFACE %}
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
||||||
interface {{ name }}
|
interface {{ name }}
|
||||||
link-detect
|
link-detect
|
||||||
!
|
!
|
||||||
@ -28,7 +28,7 @@ link-detect
|
|||||||
!
|
!
|
||||||
{% block default_route %}
|
{% block default_route %}
|
||||||
! set static default route to mgmt gateway as a backup to learned default
|
! set static default route to mgmt gateway as a backup to learned default
|
||||||
{% for (name, prefix) in MGMT_INTERFACE %}
|
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
|
||||||
{% if prefix | ipv4 %}
|
{% if prefix | ipv4 %}
|
||||||
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -39,7 +39,7 @@ ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
|
|||||||
{% set lo_ipv4_addrs = [] %}
|
{% set lo_ipv4_addrs = [] %}
|
||||||
{% set lo_ipv6_addrs = [] %}
|
{% set lo_ipv6_addrs = [] %}
|
||||||
{% if LOOPBACK_INTERFACE %}
|
{% if LOOPBACK_INTERFACE %}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{% if name == 'Loopback0' %}
|
{% if name == 'Loopback0' %}
|
||||||
{% if prefix | ipv6 %}
|
{% if prefix | ipv6 %}
|
||||||
{% if lo_ipv6_addrs.append(prefix) %}
|
{% if lo_ipv6_addrs.append(prefix) %}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{% set ipv6_addresses = [] %}
|
{% set ipv6_addresses = [] %}
|
||||||
{% set ipv4_loopback_addresses = [] %}
|
{% set ipv4_loopback_addresses = [] %}
|
||||||
{% set ipv6_loopback_addresses = [] %}
|
{% set ipv6_loopback_addresses = [] %}
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
{%- if prefix | ipv4 and name == 'Loopback0' %}
|
{%- if prefix | ipv4 and name == 'Loopback0' %}
|
||||||
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
|
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
|
||||||
{%- set ipv4_loopback_addresses = ipv4_loopback_addresses.append(prefix) %}
|
{%- set ipv4_loopback_addresses = ipv4_loopback_addresses.append(prefix) %}
|
||||||
@ -12,7 +12,7 @@
|
|||||||
{%- set ipv6_loopback_addresses = ipv6_loopback_addresses.append(prefix) %}
|
{%- set ipv6_loopback_addresses = ipv6_loopback_addresses.append(prefix) %}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for (name, prefix) in INTERFACE %}
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
||||||
{%- if prefix | ipv4 %}
|
{%- if prefix | ipv4 %}
|
||||||
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
|
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
@ -20,7 +20,7 @@
|
|||||||
{%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
|
{%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for (name, prefix) in PORTCHANNEL_INTERFACE %}
|
{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}
|
||||||
{%- if prefix | ipv4 %}
|
{%- if prefix | ipv4 %}
|
||||||
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
|
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
@ -28,7 +28,7 @@
|
|||||||
{%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
|
{%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for (name, prefix) in VLAN_INTERFACE %}
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
||||||
{%- if prefix | ipv4 %}
|
{%- if prefix | ipv4 %}
|
||||||
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
|
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM debian:jessie
|
FROM debian:stretch
|
||||||
|
|
||||||
MAINTAINER Pavel Shirshov
|
MAINTAINER Pavel Shirshov
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ RUN sed --in-place 's/httpredir.debian.org/debian-archive.trafficmanager.net/' /
|
|||||||
cmake \
|
cmake \
|
||||||
libqt5core5a \
|
libqt5core5a \
|
||||||
libqt5network5 \
|
libqt5network5 \
|
||||||
libboost-atomic1.55.0 \
|
libboost-atomic1.62.0 \
|
||||||
less \
|
less \
|
||||||
git \
|
git \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
{# If our configuration has VLAN interfaces... #}
|
{# If our configuration has VLAN interfaces... #}
|
||||||
{% if VLAN_INTERFACE %}
|
{% if VLAN_INTERFACE %}
|
||||||
{% for (name, prefix) in VLAN_INTERFACE %}
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
||||||
{# If this VLAN has an IPv6 address... #}
|
{# If this VLAN has an IPv6 address... #}
|
||||||
{% if prefix | ipv6 %}
|
{% if prefix | ipv6 %}
|
||||||
interface {{ name }}
|
interface {{ name }}
|
||||||
|
@ -27,6 +27,6 @@ function wait_until_iface_ready
|
|||||||
|
|
||||||
|
|
||||||
# Wait for all interfaces to be up and ready
|
# Wait for all interfaces to be up and ready
|
||||||
{% for (name, prefix) in VLAN_INTERFACE %}
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
||||||
wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }}
|
wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -5,6 +5,32 @@ function getMountPoint()
|
|||||||
echo $1 | python -c "import sys, json, os; mnts = [x for x in json.load(sys.stdin)[0]['Mounts'] if x['Destination'] == '/usr/share/sonic/hwsku']; print '' if len(mnts) == 0 else os.path.basename(mnts[0]['Source'])" 2>/dev/null
|
echo $1 | python -c "import sys, json, os; mnts = [x for x in json.load(sys.stdin)[0]['Mounts'] if x['Destination'] == '/usr/share/sonic/hwsku']; print '' if len(mnts) == 0 else os.path.basename(mnts[0]['Source'])" 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateHostName()
|
||||||
|
{
|
||||||
|
HOSTS=/etc/hosts
|
||||||
|
HOSTS_TMP=/etc/hosts.tmp
|
||||||
|
|
||||||
|
EXEC="docker exec -i {{docker_container_name}} bash -c"
|
||||||
|
|
||||||
|
NEW_HOSTNAME="$1"
|
||||||
|
HOSTNAME=`$EXEC "hostname"`
|
||||||
|
if ! [[ $HOSTNAME =~ ^[a-zA-Z0-9.\-]*$ ]]; then
|
||||||
|
HOSTNAME=`hostname`
|
||||||
|
fi
|
||||||
|
|
||||||
|
# copy HOSTS to HOSTS_TMP
|
||||||
|
$EXEC "cp $HOSTS $HOSTS_TMP"
|
||||||
|
# remove entry with hostname
|
||||||
|
$EXEC "sed -i \"/$HOSTNAME$/d\" $HOSTS_TMP"
|
||||||
|
# add entry with new hostname
|
||||||
|
$EXEC "echo -e \"127.0.0.1\t$NEW_HOSTNAME\" >> $HOSTS_TMP"
|
||||||
|
|
||||||
|
echo "Set hostname in {{docker_container_name}} container"
|
||||||
|
$EXEC "hostname '$NEW_HOSTNAME'"
|
||||||
|
$EXEC "cat $HOSTS_TMP > $HOSTS"
|
||||||
|
$EXEC "rm -f $HOSTS_TMP"
|
||||||
|
}
|
||||||
|
|
||||||
function getBootType()
|
function getBootType()
|
||||||
{
|
{
|
||||||
local BOOT_TYPE
|
local BOOT_TYPE
|
||||||
@ -105,6 +131,10 @@ start() {
|
|||||||
# Obtain our HWSKU as we will mount directories with these names in each docker
|
# Obtain our HWSKU as we will mount directories with these names in each docker
|
||||||
HWSKU=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]'`
|
HWSKU=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]'`
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
HOSTNAME=`sonic-cfggen -m -v 'DEVICE_METADATA["localhost"]["hostname"]'`
|
||||||
|
if [ -z "$HOSTNAME" ] || ! [[ $HOSTNAME =~ ^[a-zA-Z0-9.\-]*$ ]]; then
|
||||||
|
HOSTNAME=`hostname`
|
||||||
|
fi
|
||||||
|
|
||||||
DOCKERCHECK=`docker inspect --type container {{docker_container_name}} 2>/dev/null`
|
DOCKERCHECK=`docker inspect --type container {{docker_container_name}} 2>/dev/null`
|
||||||
if [ "$?" -eq "0" ]; then
|
if [ "$?" -eq "0" ]; then
|
||||||
@ -121,6 +151,7 @@ start() {
|
|||||||
{%- endif %}
|
{%- endif %}
|
||||||
preStartAction
|
preStartAction
|
||||||
docker start {{docker_container_name}}
|
docker start {{docker_container_name}}
|
||||||
|
updateHostName "$HOSTNAME"
|
||||||
postStartAction
|
postStartAction
|
||||||
exit $?
|
exit $?
|
||||||
fi
|
fi
|
||||||
@ -134,6 +165,9 @@ start() {
|
|||||||
echo "Creating new {{docker_container_name}} container"
|
echo "Creating new {{docker_container_name}} container"
|
||||||
{%- else %}
|
{%- else %}
|
||||||
echo "Creating new {{docker_container_name}} container with HWSKU $HWSKU"
|
echo "Creating new {{docker_container_name}} container with HWSKU $HWSKU"
|
||||||
|
{%- endif %}
|
||||||
|
{%- if sonic_asic_platform == "mellanox" %}
|
||||||
|
# TODO: Mellanox will remove the --tmpfs exception after SDK socket path changed in new SDK version
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
docker create {{docker_image_run_opt}} \
|
docker create {{docker_image_run_opt}} \
|
||||||
{%- if '--log-driver=json-file' in docker_image_run_opt or '--log-driver' not in docker_image_run_opt %}
|
{%- if '--log-driver=json-file' in docker_image_run_opt or '--log-driver' not in docker_image_run_opt %}
|
||||||
@ -146,6 +180,10 @@ start() {
|
|||||||
-e PRM_SNIFFER \
|
-e PRM_SNIFFER \
|
||||||
-e PRM_SNIFFER_FILE_PATH \
|
-e PRM_SNIFFER_FILE_PATH \
|
||||||
-v /var/log/mellanox/sniffer:/var/log/mellanox/sniffer:rw \
|
-v /var/log/mellanox/sniffer:/var/log/mellanox/sniffer:rw \
|
||||||
|
-v mlnx_sdk_socket:/tmp \
|
||||||
|
-v /dev/shm:/dev/shm:rw \
|
||||||
|
{%- else %}
|
||||||
|
--tmpfs /tmp \
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{%- if docker_container_name == "pmon" %}
|
{%- if docker_container_name == "pmon" %}
|
||||||
-v /var/run/hw-management:/var/run/hw-management:rw \
|
-v /var/run/hw-management:/var/run/hw-management:rw \
|
||||||
@ -156,8 +194,11 @@ start() {
|
|||||||
{%- if docker_container_name != "database" %}
|
{%- if docker_container_name != "database" %}
|
||||||
-v /usr/share/sonic/device/$PLATFORM/$HWSKU:/usr/share/sonic/hwsku:ro \
|
-v /usr/share/sonic/device/$PLATFORM/$HWSKU:/usr/share/sonic/hwsku:ro \
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
{%- if sonic_asic_platform != "mellanox" %}
|
||||||
--tmpfs /tmp \
|
--tmpfs /tmp \
|
||||||
|
{%- endif %}
|
||||||
--tmpfs /var/tmp \
|
--tmpfs /var/tmp \
|
||||||
|
--hostname "$HOSTNAME" \
|
||||||
--name={{docker_container_name}} {{docker_image_name}}:latest || {
|
--name={{docker_container_name}} {{docker_image_name}}:latest || {
|
||||||
echo "Failed to docker run" >&1
|
echo "Failed to docker run" >&1
|
||||||
exit 4
|
exit 4
|
||||||
@ -177,11 +218,13 @@ stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
start|wait|stop)
|
start|wait|stop|updateHostName)
|
||||||
$1
|
cmd=$1
|
||||||
|
shift
|
||||||
|
$cmd $@
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Usage: $0 {start|wait|stop}"
|
echo "Usage: $0 {start|wait|stop|updateHostName new_hostname}"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import syslog
|
import syslog
|
||||||
@ -22,6 +23,15 @@ TACPLUS_SERVER_TIMEOUT_DEFAULT = "5"
|
|||||||
TACPLUS_SERVER_AUTH_TYPE_DEFAULT = "pap"
|
TACPLUS_SERVER_AUTH_TYPE_DEFAULT = "pap"
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid_hostname(name):
|
||||||
|
if hostname[-1] == ".":
|
||||||
|
hostname = hostname[:-1] # strip exactly one dot from the right, if present
|
||||||
|
if len(hostname) > 253:
|
||||||
|
return False
|
||||||
|
allowed = re.compile("(?!-)[A-Z\d-]{1,63}(?<!-)$", re.IGNORECASE)
|
||||||
|
return all(allowed.match(x) for x in hostname.split("."))
|
||||||
|
|
||||||
|
|
||||||
def is_true(val):
|
def is_true(val):
|
||||||
if val == 'True' or val == 'true':
|
if val == 'True' or val == 'true':
|
||||||
return True
|
return True
|
||||||
@ -148,6 +158,7 @@ class HostConfigDaemon:
|
|||||||
tacacs_server = self.config_db.get_table('TACPLUS_SERVER')
|
tacacs_server = self.config_db.get_table('TACPLUS_SERVER')
|
||||||
self.aaacfg = AaaCfg()
|
self.aaacfg = AaaCfg()
|
||||||
self.aaacfg.load(aaa, tacacs_global, tacacs_server)
|
self.aaacfg.load(aaa, tacacs_global, tacacs_server)
|
||||||
|
self.hostname_cache=""
|
||||||
|
|
||||||
def aaa_handler(self, key, data):
|
def aaa_handler(self, key, data):
|
||||||
self.aaacfg.aaa_update(key, data)
|
self.aaacfg.aaa_update(key, data)
|
||||||
@ -166,10 +177,49 @@ class HostConfigDaemon:
|
|||||||
log_data['passkey'] = obfuscate(log_data['passkey'])
|
log_data['passkey'] = obfuscate(log_data['passkey'])
|
||||||
syslog.syslog(syslog.LOG_INFO, 'value of {} changed to {}'.format(key, log_data))
|
syslog.syslog(syslog.LOG_INFO, 'value of {} changed to {}'.format(key, log_data))
|
||||||
|
|
||||||
|
def hostname_handler(self, key, data):
|
||||||
|
if key != "localhost":
|
||||||
|
return
|
||||||
|
|
||||||
|
hostname = data.get("hostname")
|
||||||
|
|
||||||
|
if not hostname:
|
||||||
|
syslog.syslog(syslog.LOG_WARNING, "hostname key is missing")
|
||||||
|
return
|
||||||
|
if not is_valid_hostname(hostname):
|
||||||
|
return
|
||||||
|
if hostname == self.hostname_cache:
|
||||||
|
return
|
||||||
|
|
||||||
|
syslog.syslog(syslog.LOG_INFO, "Get all running containers")
|
||||||
|
cmd = 'docker ps --format "{{.Names}}"'
|
||||||
|
try:
|
||||||
|
containers = subprocess.check_output(cmd, shell=True).split("\n")[:-1]
|
||||||
|
except subprocess.CalledProcessError as err:
|
||||||
|
syslog.syslog(syslog.LOG_ERR, "{} - failed: return code - {}, output:\n{}"
|
||||||
|
.format(err.cmd, err.returncode, err.output))
|
||||||
|
|
||||||
|
for name in containers:
|
||||||
|
script = '/usr/bin/{}.sh'.format(name)
|
||||||
|
exists = os.path.isfile(script)
|
||||||
|
if not exists:
|
||||||
|
syslog.syslog(syslog.LOG_ERR, "Can't find control script for {}".format(name))
|
||||||
|
continue
|
||||||
|
|
||||||
|
cmd = "{} updateHostName {}".format(script, hostname)
|
||||||
|
try:
|
||||||
|
subprocess.check_call(cmd, shell=True)
|
||||||
|
except subprocess.CalledProcessError as err:
|
||||||
|
syslog.syslog(syslog.LOG_ERR, "{} - failed: return code - {}, output:\n{}"
|
||||||
|
.format(err.cmd, err.returncode, err.output))
|
||||||
|
|
||||||
|
self.hostname_cache = hostname
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self.config_db.subscribe('AAA', lambda table, key, data: self.aaa_handler(key, data))
|
self.config_db.subscribe('AAA', lambda table, key, data: self.aaa_handler(key, data))
|
||||||
self.config_db.subscribe('TACPLUS_SERVER', lambda table, key, data: self.tacacs_server_handler(key, data))
|
self.config_db.subscribe('TACPLUS_SERVER', lambda table, key, data: self.tacacs_server_handler(key, data))
|
||||||
self.config_db.subscribe('TACPLUS', lambda table, key, data: self.tacacs_global_handler(key, data))
|
self.config_db.subscribe('TACPLUS', lambda table, key, data: self.tacacs_global_handler(key, data))
|
||||||
|
self.config_db.subscribe('DEVICE_METADATA', lambda table, key, data: self.hostname_handler(key, data))
|
||||||
self.config_db.listen()
|
self.config_db.listen()
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
auto lo
|
auto lo
|
||||||
iface lo inet loopback
|
iface lo inet loopback
|
||||||
# Use command 'ip addr list dev lo' to check all addresses
|
# Use command 'ip addr list dev lo' to check all addresses
|
||||||
{% for (name, prefix) in LOOPBACK_INTERFACE %}
|
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
|
||||||
iface lo {{ 'inet' if prefix | ipv4 else 'inet6' }} static
|
iface lo {{ 'inet' if prefix | ipv4 else 'inet6' }} static
|
||||||
address {{ prefix | ip }}
|
address {{ prefix | ip }}
|
||||||
netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }}
|
netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }}
|
||||||
@ -22,7 +22,7 @@ iface lo {{ 'inet' if prefix | ipv4 else 'inet6' }} static
|
|||||||
# The management network interface
|
# The management network interface
|
||||||
auto eth0
|
auto eth0
|
||||||
{% if MGMT_INTERFACE %}
|
{% if MGMT_INTERFACE %}
|
||||||
{% for (name, prefix) in MGMT_INTERFACE %}
|
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
|
||||||
iface eth0 {{ 'inet' if prefix | ipv4 else 'inet6' }} static
|
iface eth0 {{ 'inet' if prefix | ipv4 else 'inet6' }} static
|
||||||
address {{ prefix | ip }}
|
address {{ prefix | ip }}
|
||||||
netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }}
|
netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }}
|
||||||
|
@ -30,7 +30,7 @@ server {{ ntp_server }} iburst
|
|||||||
#only listen on localhost and eth0 ips (default is to listen on all ip addresses)
|
#only listen on localhost and eth0 ips (default is to listen on all ip addresses)
|
||||||
interface ignore wildcard
|
interface ignore wildcard
|
||||||
{% if MGMT_INTERFACE %}
|
{% if MGMT_INTERFACE %}
|
||||||
{% for (mgmt_intf, mgmt_prefix) in MGMT_INTERFACE %}
|
{% for (mgmt_intf, mgmt_prefix) in MGMT_INTERFACE|pfx_filter %}
|
||||||
interface listen {{ mgmt_prefix | ip }}
|
interface listen {{ mgmt_prefix | ip }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
@ -9,9 +9,9 @@
|
|||||||
|
|
||||||
while /bin/true; do
|
while /bin/true; do
|
||||||
# find L3 interfaces which are UP, send ipv6 multicast pings
|
# find L3 interfaces which are UP, send ipv6 multicast pings
|
||||||
echo "{% for (name, prefix) in INTERFACE %} {{name}} {% endfor %}" > /tmp/intf_tmp.j2
|
echo "{% for (name, prefix) in INTERFACE|pfx_filter %} {{name}} {% endfor %}" > /tmp/intf_tmp.j2
|
||||||
INTERFACE=`sonic-cfggen -d -t /tmp/intf_tmp.j2`
|
INTERFACE=`sonic-cfggen -d -t /tmp/intf_tmp.j2`
|
||||||
echo "{% for (name, prefix) in PORTCHANNEL_INTERFACE %} {{name}} {% endfor %}" > /tmp/pc_intf_tmp.j2
|
echo "{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %} {{name}} {% endfor %}" > /tmp/pc_intf_tmp.j2
|
||||||
PC_INTERFACE=`sonic-cfggen -d -t /tmp/pc_intf_tmp.j2`
|
PC_INTERFACE=`sonic-cfggen -d -t /tmp/pc_intf_tmp.j2`
|
||||||
|
|
||||||
ALL_INTERFACE="$INTERFACE $PC_INTERFACE"
|
ALL_INTERFACE="$INTERFACE $PC_INTERFACE"
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 0ed1df5a7d6c88319ce41b10ce604c2727afab69
|
Subproject commit 7b7c79ee463b43e570c48915215cdbf6ec250225
|
@ -4,7 +4,7 @@ DOCKER_SAISERVER_BRCM = docker-saiserver-brcm.gz
|
|||||||
$(DOCKER_SAISERVER_BRCM)_PATH = $(PLATFORM_PATH)/docker-saiserver-brcm
|
$(DOCKER_SAISERVER_BRCM)_PATH = $(PLATFORM_PATH)/docker-saiserver-brcm
|
||||||
$(DOCKER_SAISERVER_BRCM)_DEPENDS += $(SAISERVER)
|
$(DOCKER_SAISERVER_BRCM)_DEPENDS += $(SAISERVER)
|
||||||
$(DOCKER_SAISERVER_BRCM)_FILES += $(DSSERVE) $(BCMCMD)
|
$(DOCKER_SAISERVER_BRCM)_FILES += $(DSSERVE) $(BCMCMD)
|
||||||
$(DOCKER_SAISERVER_BRCM)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE)
|
$(DOCKER_SAISERVER_BRCM)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_STRETCH)
|
||||||
SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_BRCM)
|
SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_BRCM)
|
||||||
|
|
||||||
$(DOCKER_SAISERVER_BRCM)_CONTAINER_NAME = saiserver
|
$(DOCKER_SAISERVER_BRCM)_CONTAINER_NAME = saiserver
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM docker-config-engine
|
FROM docker-config-engine-stretch
|
||||||
|
|
||||||
ARG docker_container_name
|
ARG docker_container_name
|
||||||
RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf
|
RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf
|
||||||
|
@ -25,6 +25,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \
|
|||||||
$(ACCTON_AS4630_54PE_PLATFORM_MODULE) \
|
$(ACCTON_AS4630_54PE_PLATFORM_MODULE) \
|
||||||
$(ACCTON_MINIPACK_PLATFORM_MODULE) \
|
$(ACCTON_MINIPACK_PLATFORM_MODULE) \
|
||||||
$(ACCTON_AS5812_54X_PLATFORM_MODULE) \
|
$(ACCTON_AS5812_54X_PLATFORM_MODULE) \
|
||||||
|
$(ACCTON_AS5835_54X_PLATFORM_MODULE) \
|
||||||
$(INVENTEC_D7032Q28B_PLATFORM_MODULE) \
|
$(INVENTEC_D7032Q28B_PLATFORM_MODULE) \
|
||||||
$(INVENTEC_D7054Q28B_PLATFORM_MODULE) \
|
$(INVENTEC_D7054Q28B_PLATFORM_MODULE) \
|
||||||
$(INVENTEC_D7264Q28B_PLATFORM_MODULE) \
|
$(INVENTEC_D7264Q28B_PLATFORM_MODULE) \
|
||||||
@ -37,6 +38,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \
|
|||||||
$(QUANTA_IX1B_32X_PLATFORM_MODULE) \
|
$(QUANTA_IX1B_32X_PLATFORM_MODULE) \
|
||||||
$(MITAC_LY1200_32X_PLATFORM_MODULE) \
|
$(MITAC_LY1200_32X_PLATFORM_MODULE) \
|
||||||
$(ALPHANETWORKS_SNH60A0_320FV2_PLATFORM_MODULE) \
|
$(ALPHANETWORKS_SNH60A0_320FV2_PLATFORM_MODULE) \
|
||||||
$(ALPHANETWORKS_SNH60B0_640F_PLATFORM_MODULE)
|
$(ALPHANETWORKS_SNH60B0_640F_PLATFORM_MODULE) \
|
||||||
|
$(BRCM_XLR_GTS_PLATFORM_MODULE)
|
||||||
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
|
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
|
||||||
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)
|
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)
|
||||||
|
@ -12,6 +12,7 @@ ACCTON_AS7726_32X_PLATFORM_MODULE_VERSION = 1.1
|
|||||||
ACCTON_AS4630_54PE_PLATFORM_MODULE_VERSION = 1.1
|
ACCTON_AS4630_54PE_PLATFORM_MODULE_VERSION = 1.1
|
||||||
ACCTON_MINIPACK_PLATFORM_MODULE_VERSION = 1.1
|
ACCTON_MINIPACK_PLATFORM_MODULE_VERSION = 1.1
|
||||||
ACCTON_AS5812_54X_PLATFORM_MODULE_VERSION = 1.1
|
ACCTON_AS5812_54X_PLATFORM_MODULE_VERSION = 1.1
|
||||||
|
ACCTON_AS5835_54X_PLATFORM_MODULE_VERSION = 1.1
|
||||||
|
|
||||||
export ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION
|
export ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION
|
||||||
export ACCTON_AS5712_54X_PLATFORM_MODULE_VERSION
|
export ACCTON_AS5712_54X_PLATFORM_MODULE_VERSION
|
||||||
@ -25,6 +26,7 @@ export ACCTON_AS7726_32X_PLATFORM_MODULE_VERSION
|
|||||||
export ACCTON_AS4630_54PE_PLATFORM_MODULE_VERSION
|
export ACCTON_AS4630_54PE_PLATFORM_MODULE_VERSION
|
||||||
export ACCTON_MINIPACK_PLATFORM_MODULE_VERSION
|
export ACCTON_MINIPACK_PLATFORM_MODULE_VERSION
|
||||||
export ACCTON_AS5812_54X_PLATFORM_MODULE_VERSION
|
export ACCTON_AS5812_54X_PLATFORM_MODULE_VERSION
|
||||||
|
export ACCTON_AS5835_54X_PLATFORM_MODULE_VERSION
|
||||||
|
|
||||||
ACCTON_AS7712_32X_PLATFORM_MODULE = sonic-platform-accton-as7712-32x_$(ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION)_amd64.deb
|
ACCTON_AS7712_32X_PLATFORM_MODULE = sonic-platform-accton-as7712-32x_$(ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION)_amd64.deb
|
||||||
$(ACCTON_AS7712_32X_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-accton
|
$(ACCTON_AS7712_32X_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-accton
|
||||||
@ -77,4 +79,8 @@ ACCTON_AS5812_54X_PLATFORM_MODULE = sonic-platform-accton-as5812-54x_$(ACCTON_AS
|
|||||||
$(ACCTON_AS5812_54X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as5812_54x-r0
|
$(ACCTON_AS5812_54X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as5812_54x-r0
|
||||||
$(eval $(call add_extra_package,$(ACCTON_AS7712_32X_PLATFORM_MODULE),$(ACCTON_AS5812_54X_PLATFORM_MODULE)))
|
$(eval $(call add_extra_package,$(ACCTON_AS7712_32X_PLATFORM_MODULE),$(ACCTON_AS5812_54X_PLATFORM_MODULE)))
|
||||||
|
|
||||||
|
ACCTON_AS5835_54X_PLATFORM_MODULE = sonic-platform-accton-as5835-54x_$(ACCTON_AS5835_54X_PLATFORM_MODULE_VERSION)_amd64.deb
|
||||||
|
$(ACCTON_AS5835_54X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as5835_54x-r0
|
||||||
|
$(eval $(call add_extra_package,$(ACCTON_AS7712_32X_PLATFORM_MODULE),$(ACCTON_AS5835_54X_PLATFORM_MODULE)))
|
||||||
|
|
||||||
SONIC_STRETCH_DEBS += $(ACCTON_AS7712_32X_PLATFORM_MODULE)
|
SONIC_STRETCH_DEBS += $(ACCTON_AS7712_32X_PLATFORM_MODULE)
|
||||||
|
15
platform/broadcom/platform-modules-brcm-xlr-gts.mk
Normal file
15
platform/broadcom/platform-modules-brcm-xlr-gts.mk
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Broadcom XLR/GTS Platform modules
|
||||||
|
|
||||||
|
BRCM_XLR_GTS_PLATFORM_MODULE_VERSION = 1.0
|
||||||
|
|
||||||
|
export BRCM_XLR_GTS_PLATFORM_MODULE_VERSION
|
||||||
|
|
||||||
|
BRCM_XLR_GTS_PLATFORM_MODULE = sonic-platform-brcm-xlr-gts_$(BRCM_XLR_GTS_PLATFORM_MODULE_VERSION)_amd64.deb
|
||||||
|
$(BRCM_XLR_GTS_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-brcm-xlr-gts
|
||||||
|
$(BRCM_XLR_GTS_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
|
||||||
|
$(BRCM_XLR_GTS_PLATFORM_MODULE)_PLATFORM = x86_64-bcm_xlr-r0
|
||||||
|
SONIC_MAKE_DEBS += $(BRCM_XLR_GTS_PLATFORM_MODULE)
|
||||||
|
|
||||||
|
export BRCM_XLR_GTS_PLATFORM_MODULE
|
||||||
|
|
||||||
|
SONIC_STRETCH_DEBS += $(BRCM_XLR_GTS_PLATFORM_MODULE)
|
@ -11,6 +11,7 @@ include $(PLATFORM_PATH)/platform-modules-cel.mk
|
|||||||
include $(PLATFORM_PATH)/platform-modules-delta.mk
|
include $(PLATFORM_PATH)/platform-modules-delta.mk
|
||||||
include $(PLATFORM_PATH)/platform-modules-quanta.mk
|
include $(PLATFORM_PATH)/platform-modules-quanta.mk
|
||||||
#include $(PLATFORM_PATH)/platform-modules-mitac.mk
|
#include $(PLATFORM_PATH)/platform-modules-mitac.mk
|
||||||
|
include $(PLATFORM_PATH)/platform-modules-brcm-xlr-gts.mk
|
||||||
include $(PLATFORM_PATH)/docker-syncd-brcm.mk
|
include $(PLATFORM_PATH)/docker-syncd-brcm.mk
|
||||||
include $(PLATFORM_PATH)/docker-syncd-brcm-rpc.mk
|
include $(PLATFORM_PATH)/docker-syncd-brcm-rpc.mk
|
||||||
include $(PLATFORM_PATH)/docker-saiserver-brcm.mk
|
include $(PLATFORM_PATH)/docker-saiserver-brcm.mk
|
||||||
|
@ -252,7 +252,7 @@ def driver_inserted():
|
|||||||
kos = [
|
kos = [
|
||||||
'depmod -ae',
|
'depmod -ae',
|
||||||
'modprobe i2c_dev',
|
'modprobe i2c_dev',
|
||||||
'modprobe i2c_mux_pca954x',
|
'modprobe i2c_mux_pca954x force_deselect_on_exit=1',
|
||||||
'modprobe optoe',
|
'modprobe optoe',
|
||||||
'modprobe i2c-mux-accton_as5712_54x_cpld',
|
'modprobe i2c-mux-accton_as5712_54x_cpld',
|
||||||
'modprobe cpr_4011_4mxx',
|
'modprobe cpr_4011_4mxx',
|
||||||
@ -273,7 +273,15 @@ def driver_install():
|
|||||||
def driver_uninstall():
|
def driver_uninstall():
|
||||||
global FORCE
|
global FORCE
|
||||||
for i in range(0,len(kos)):
|
for i in range(0,len(kos)):
|
||||||
rm = kos[-(i+1)].replace("modprobe", "modprobe -rq")
|
#remove parameter if any
|
||||||
|
rm = kos[-(i+1)]
|
||||||
|
lst = rm.split(" ")
|
||||||
|
if len(lst) > 2:
|
||||||
|
del(lst[2:])
|
||||||
|
rm = " ".join(lst)
|
||||||
|
|
||||||
|
#Change to removing commands
|
||||||
|
rm = rm.replace("modprobe", "modprobe -rq")
|
||||||
rm = rm.replace("insmod", "rmmod")
|
rm = rm.replace("insmod", "rmmod")
|
||||||
status, output = log_os_system(rm, 1)
|
status, output = log_os_system(rm, 1)
|
||||||
if status:
|
if status:
|
||||||
|
@ -252,7 +252,7 @@ def driver_inserted():
|
|||||||
kos = [
|
kos = [
|
||||||
'depmod -ae',
|
'depmod -ae',
|
||||||
'modprobe i2c_dev',
|
'modprobe i2c_dev',
|
||||||
'modprobe i2c_mux_pca954x',
|
'modprobe i2c_mux_pca954x force_deselect_on_exit=1',
|
||||||
'modprobe optoe',
|
'modprobe optoe',
|
||||||
'modprobe i2c-mux-accton_as5812_54x_cpld',
|
'modprobe i2c-mux-accton_as5812_54x_cpld',
|
||||||
'modprobe cpr_4011_4mxx',
|
'modprobe cpr_4011_4mxx',
|
||||||
@ -273,7 +273,15 @@ def driver_install():
|
|||||||
def driver_uninstall():
|
def driver_uninstall():
|
||||||
global FORCE
|
global FORCE
|
||||||
for i in range(0,len(kos)):
|
for i in range(0,len(kos)):
|
||||||
rm = kos[-(i+1)].replace("modprobe", "modprobe -rq")
|
#remove parameter if any
|
||||||
|
rm = kos[-(i+1)]
|
||||||
|
lst = rm.split(" ")
|
||||||
|
if len(lst) > 2:
|
||||||
|
del(lst[2:])
|
||||||
|
rm = " ".join(lst)
|
||||||
|
|
||||||
|
#Change to removing commands
|
||||||
|
rm = rm.replace("modprobe", "modprobe -rq")
|
||||||
rm = rm.replace("insmod", "rmmod")
|
rm = rm.replace("insmod", "rmmod")
|
||||||
status, output = log_os_system(rm, 1)
|
status, output = log_os_system(rm, 1)
|
||||||
if status:
|
if status:
|
||||||
|
@ -0,0 +1,237 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# Copyright (C) 2017 Accton Technology Corporation
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# HISTORY:
|
||||||
|
# mm/dd/yyyy (A.D.)
|
||||||
|
# 5/27/2019: Brandon_Chuang create
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
|
||||||
|
try:
|
||||||
|
import time
|
||||||
|
import logging
|
||||||
|
from collections import namedtuple
|
||||||
|
except ImportError as e:
|
||||||
|
raise ImportError('%s - required module not found' % str(e))
|
||||||
|
|
||||||
|
|
||||||
|
class FanUtil(object):
|
||||||
|
"""Platform-specific FanUtil class"""
|
||||||
|
|
||||||
|
FAN_NUM_ON_MAIN_BROAD = 5
|
||||||
|
FAN_NUM_1_IDX = 1
|
||||||
|
FAN_NUM_2_IDX = 2
|
||||||
|
FAN_NUM_3_IDX = 3
|
||||||
|
FAN_NUM_4_IDX = 4
|
||||||
|
FAN_NUM_5_IDX = 5
|
||||||
|
|
||||||
|
FAN_NODE_NUM_OF_MAP = 2
|
||||||
|
FAN_NODE_FAULT_IDX_OF_MAP = 1
|
||||||
|
FAN_NODE_DIR_IDX_OF_MAP = 2
|
||||||
|
|
||||||
|
BASE_VAL_PATH = '/sys/bus/i2c/devices/3-0063/{0}'
|
||||||
|
FAN_DUTY_PATH = '/sys/bus/i2c/devices/3-0063/fan_duty_cycle_percentage'
|
||||||
|
|
||||||
|
#logfile = ''
|
||||||
|
#loglevel = logging.INFO
|
||||||
|
|
||||||
|
""" Dictionary where
|
||||||
|
key1 = fan id index (integer) starting from 1
|
||||||
|
key2 = fan node index (interger) starting from 1
|
||||||
|
value = path to fan device file (string) """
|
||||||
|
_fan_to_device_path_mapping = {}
|
||||||
|
|
||||||
|
#fan1_direction
|
||||||
|
#fan1_fault
|
||||||
|
#fan1_present
|
||||||
|
|
||||||
|
#(FAN_NUM_2_IDX, FAN_NODE_DUTY_IDX_OF_MAP): 'fan2_duty_cycle_percentage',
|
||||||
|
_fan_to_device_node_mapping = {
|
||||||
|
(FAN_NUM_1_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan1_fault',
|
||||||
|
(FAN_NUM_1_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan1_direction',
|
||||||
|
|
||||||
|
(FAN_NUM_2_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan2_fault',
|
||||||
|
(FAN_NUM_2_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan2_direction',
|
||||||
|
|
||||||
|
(FAN_NUM_3_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan3_fault',
|
||||||
|
(FAN_NUM_3_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan3_direction',
|
||||||
|
|
||||||
|
(FAN_NUM_4_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan4_fault',
|
||||||
|
(FAN_NUM_4_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan4_direction',
|
||||||
|
|
||||||
|
(FAN_NUM_5_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan5_fault',
|
||||||
|
(FAN_NUM_5_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan5_direction',
|
||||||
|
}
|
||||||
|
|
||||||
|
def _get_fan_to_device_node(self, fan_num, node_num):
|
||||||
|
return self._fan_to_device_node_mapping[(fan_num, node_num)]
|
||||||
|
|
||||||
|
def _get_fan_node_val(self, fan_num, node_num):
|
||||||
|
if fan_num < self.FAN_NUM_1_IDX or fan_num > self.FAN_NUM_ON_MAIN_BROAD:
|
||||||
|
logging.debug('GET. Parameter error. fan_num:%d', fan_num)
|
||||||
|
return None
|
||||||
|
|
||||||
|
if node_num < self.FAN_NODE_FAULT_IDX_OF_MAP or node_num > self.FAN_NODE_NUM_OF_MAP:
|
||||||
|
logging.debug('GET. Parameter error. node_num:%d', node_num)
|
||||||
|
return None
|
||||||
|
|
||||||
|
device_path = self.get_fan_to_device_path(fan_num, node_num)
|
||||||
|
|
||||||
|
try:
|
||||||
|
val_file = open(device_path, 'r')
|
||||||
|
except IOError as e:
|
||||||
|
logging.error('GET. unable to open file: %s', str(e))
|
||||||
|
return None
|
||||||
|
|
||||||
|
content = val_file.readline().rstrip()
|
||||||
|
|
||||||
|
if content == '':
|
||||||
|
logging.debug('GET. content is NULL. device_path:%s', device_path)
|
||||||
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
|
val_file.close()
|
||||||
|
except:
|
||||||
|
logging.debug('GET. unable to close file. device_path:%s', device_path)
|
||||||
|
return None
|
||||||
|
|
||||||
|
return int(content)
|
||||||
|
|
||||||
|
def _set_fan_node_val(self, fan_num, node_num, val):
|
||||||
|
if fan_num < self.FAN_NUM_1_IDX or fan_num > self.FAN_NUM_ON_MAIN_BROAD:
|
||||||
|
logging.debug('GET. Parameter error. fan_num:%d', fan_num)
|
||||||
|
return None
|
||||||
|
|
||||||
|
if node_num < self.FAN_NODE_FAULT_IDX_OF_MAP or node_num > self.FAN_NODE_NUM_OF_MAP:
|
||||||
|
logging.debug('GET. Parameter error. node_num:%d', node_num)
|
||||||
|
return None
|
||||||
|
|
||||||
|
content = str(val)
|
||||||
|
if content == '':
|
||||||
|
logging.debug('GET. content is NULL. device_path:%s', device_path)
|
||||||
|
return None
|
||||||
|
|
||||||
|
device_path = self.get_fan_to_device_path(fan_num, node_num)
|
||||||
|
try:
|
||||||
|
val_file = open(device_path, 'w')
|
||||||
|
except IOError as e:
|
||||||
|
logging.error('GET. unable to open file: %s', str(e))
|
||||||
|
return None
|
||||||
|
|
||||||
|
val_file.write(content)
|
||||||
|
|
||||||
|
try:
|
||||||
|
val_file.close()
|
||||||
|
except:
|
||||||
|
logging.debug('GET. unable to close file. device_path:%s', device_path)
|
||||||
|
return None
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
fan_path = self.BASE_VAL_PATH
|
||||||
|
|
||||||
|
for fan_num in range(self.FAN_NUM_1_IDX, self.FAN_NUM_ON_MAIN_BROAD+1):
|
||||||
|
for node_num in range(self.FAN_NODE_FAULT_IDX_OF_MAP, self.FAN_NODE_NUM_OF_MAP+1):
|
||||||
|
self._fan_to_device_path_mapping[(fan_num, node_num)] = fan_path.format(
|
||||||
|
self._fan_to_device_node_mapping[(fan_num, node_num)])
|
||||||
|
|
||||||
|
def get_num_fans(self):
|
||||||
|
return self.FAN_NUM_ON_MAIN_BROAD
|
||||||
|
|
||||||
|
def get_idx_fan_start(self):
|
||||||
|
return self.FAN_NUM_1_IDX
|
||||||
|
|
||||||
|
def get_num_nodes(self):
|
||||||
|
return self.FAN_NODE_NUM_OF_MAP
|
||||||
|
|
||||||
|
def get_idx_node_start(self):
|
||||||
|
return self.FAN_NODE_FAULT_IDX_OF_MAP
|
||||||
|
|
||||||
|
def get_size_node_map(self):
|
||||||
|
return len(self._fan_to_device_node_mapping)
|
||||||
|
|
||||||
|
def get_size_path_map(self):
|
||||||
|
return len(self._fan_to_device_path_mapping)
|
||||||
|
|
||||||
|
def get_fan_to_device_path(self, fan_num, node_num):
|
||||||
|
return self._fan_to_device_path_mapping[(fan_num, node_num)]
|
||||||
|
|
||||||
|
def get_fan_fault(self, fan_num):
|
||||||
|
return self._get_fan_node_val(fan_num, self.FAN_NODE_FAULT_IDX_OF_MAP)
|
||||||
|
|
||||||
|
#def get_fan_speed(self, fan_num):
|
||||||
|
# return self._get_fan_node_val(fan_num, self.FAN_NODE_SPEED_IDX_OF_MAP)
|
||||||
|
|
||||||
|
def get_fan_dir(self, fan_num):
|
||||||
|
return self._get_fan_node_val(fan_num, self.FAN_NODE_DIR_IDX_OF_MAP)
|
||||||
|
|
||||||
|
def get_fan_duty_cycle(self):
|
||||||
|
#duty_path = self.FAN_DUTY_PATH
|
||||||
|
try:
|
||||||
|
val_file = open(self.FAN_DUTY_PATH)
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
content = val_file.readline().rstrip()
|
||||||
|
val_file.close()
|
||||||
|
|
||||||
|
return int(content)
|
||||||
|
|
||||||
|
def set_fan_duty_cycle(self, val):
|
||||||
|
try:
|
||||||
|
fan_file = open(self.FAN_DUTY_PATH, 'r+')
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
fan_file.write(str(val))
|
||||||
|
fan_file.close()
|
||||||
|
return True
|
||||||
|
|
||||||
|
#def get_fanr_fault(self, fan_num):
|
||||||
|
# return self._get_fan_node_val(fan_num, self.FANR_NODE_FAULT_IDX_OF_MAP)
|
||||||
|
|
||||||
|
def get_fanr_speed(self, fan_num):
|
||||||
|
return self._get_fan_node_val(fan_num, self.FANR_NODE_SPEED_IDX_OF_MAP)
|
||||||
|
|
||||||
|
def get_fan_status(self, fan_num):
|
||||||
|
if fan_num < self.FAN_NUM_1_IDX or fan_num > self.FAN_NUM_ON_MAIN_BROAD:
|
||||||
|
logging.debug('GET. Parameter error. fan_num, %d', fan_num)
|
||||||
|
return None
|
||||||
|
|
||||||
|
if self.get_fan_fault(fan_num) is not None and self.get_fan_fault(fan_num) > 0:
|
||||||
|
logging.debug('GET. FAN fault. fan_num, %d', fan_num)
|
||||||
|
return False
|
||||||
|
|
||||||
|
#if self.get_fanr_fault(fan_num) is not None and self.get_fanr_fault(fan_num) > 0:
|
||||||
|
# logging.debug('GET. FANR fault. fan_num, %d', fan_num)
|
||||||
|
# return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
#def main():
|
||||||
|
# fan = FanUtil()
|
||||||
|
#
|
||||||
|
# print 'get_size_node_map : %d' % fan.get_size_node_map()
|
||||||
|
# print 'get_size_path_map : %d' % fan.get_size_path_map()
|
||||||
|
# for x in range(fan.get_idx_fan_start(), fan.get_num_fans()+1):
|
||||||
|
# for y in range(fan.get_idx_node_start(), fan.get_num_nodes()+1):
|
||||||
|
# print fan.get_fan_to_device_path(x, y)
|
||||||
|
#
|
||||||
|
#if __name__ == '__main__':
|
||||||
|
# main()
|
@ -0,0 +1,129 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# Copyright (C) 2017 Accton Technology Corporation
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# HISTORY:
|
||||||
|
# mm/dd/yyyy (A.D.)
|
||||||
|
# 5/27/2019: Brandon_Chuang create
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
|
||||||
|
try:
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import logging
|
||||||
|
import glob
|
||||||
|
import commands
|
||||||
|
from collections import namedtuple
|
||||||
|
except ImportError as e:
|
||||||
|
raise ImportError('%s - required module not found' % str(e))
|
||||||
|
|
||||||
|
class ThermalUtil(object):
|
||||||
|
"""Platform-specific ThermalUtil class"""
|
||||||
|
THERMAL_NUM_MAX = 4
|
||||||
|
THERMAL_NUM_1_IDX = 1 # 1_ON_CPU_BROAD. LM75
|
||||||
|
THERMAL_NUM_2_IDX = 2 # 2_ON_MAIN_BROAD. LM75
|
||||||
|
THERMAL_NUM_3_IDX = 3 # 3_ON_MAIN_BROAD. LM75
|
||||||
|
THERMAL_NUM_4_IDX = 4 # 4_ON_MAIN_BROAD. LM75
|
||||||
|
|
||||||
|
""" Dictionary where
|
||||||
|
key1 = thermal id index (integer) starting from 1
|
||||||
|
value = path to fan device file (string) """
|
||||||
|
#_thermal_to_device_path_mapping = {}
|
||||||
|
|
||||||
|
_thermal_to_device_node_mapping = {
|
||||||
|
THERMAL_NUM_1_IDX: ['18', '4b'],
|
||||||
|
THERMAL_NUM_2_IDX: ['19', '4c'],
|
||||||
|
THERMAL_NUM_3_IDX: ['20', '49'],
|
||||||
|
THERMAL_NUM_4_IDX: ['21', '4a'],
|
||||||
|
}
|
||||||
|
thermal_sysfspath ={
|
||||||
|
THERMAL_NUM_1_IDX: ["/sys/bus/i2c/devices/18-004b/hwmon/hwmon3/temp1_input"],
|
||||||
|
THERMAL_NUM_2_IDX: ["/sys/bus/i2c/devices/19-004c/hwmon/hwmon4/temp1_input"],
|
||||||
|
THERMAL_NUM_3_IDX: ["/sys/bus/i2c/devices/20-0049/hwmon/hwmon5/temp1_input"],
|
||||||
|
THERMAL_NUM_4_IDX: ["/sys/bus/i2c/devices/21-004a/hwmon/hwmon6/temp1_input"],
|
||||||
|
}
|
||||||
|
|
||||||
|
#def __init__(self):
|
||||||
|
def _get_thermal_val(self, thermal_num):
|
||||||
|
if thermal_num < self.THERMAL_NUM_1_IDX or thermal_num > self.THERMAL_NUM_MAX:
|
||||||
|
logging.debug('GET. Parameter error. thermal_num, %d', thermal_num)
|
||||||
|
return None
|
||||||
|
|
||||||
|
device_path = self.get_thermal_to_device_path(thermal_num)
|
||||||
|
if(os.path.isfile(device_path)):
|
||||||
|
for filename in glob.glob(device_path):
|
||||||
|
try:
|
||||||
|
val_file = open(filename, 'r')
|
||||||
|
except IOError as e:
|
||||||
|
logging.error('GET. unable to open file: %s', str(e))
|
||||||
|
return None
|
||||||
|
content = val_file.readline().rstrip()
|
||||||
|
if content == '':
|
||||||
|
logging.debug('GET. content is NULL. device_path:%s', device_path)
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
val_file.close()
|
||||||
|
except:
|
||||||
|
logging.debug('GET. unable to close file. device_path:%s', device_path)
|
||||||
|
return None
|
||||||
|
return int(content)
|
||||||
|
|
||||||
|
else:
|
||||||
|
print "No such device_path=%s"%device_path
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def get_num_thermals(self):
|
||||||
|
return self.THERMAL_NUM_MAX
|
||||||
|
|
||||||
|
def get_idx_thermal_start(self):
|
||||||
|
return self.THERMAL_NUM_1_IDX
|
||||||
|
|
||||||
|
def get_size_node_map(self):
|
||||||
|
return len(self._thermal_to_device_node_mapping)
|
||||||
|
|
||||||
|
def get_size_path_map(self):
|
||||||
|
return len(self.thermal_sysfspath)
|
||||||
|
|
||||||
|
def get_thermal_to_device_path(self, thermal_num):
|
||||||
|
return self.thermal_sysfspath[thermal_num][0]
|
||||||
|
|
||||||
|
def get_thermal_1_val(self):
|
||||||
|
return self._get_thermal_val(self.THERMAL_NUM_1_IDX)
|
||||||
|
|
||||||
|
def get_thermal_2_val(self):
|
||||||
|
return self._get_thermal_val(self.THERMAL_NUM_2_IDX)
|
||||||
|
|
||||||
|
def get_thermal_3_val(self):
|
||||||
|
return self._get_thermal_val(self.THERMAL_NUM_3_IDX)
|
||||||
|
|
||||||
|
def get_thermal_temp(self):
|
||||||
|
return (self._get_thermal_val(self.THERMAL_NUM_1_IDX) + self._get_thermal_val(self.THERMAL_NUM_2_IDX) +self._get_thermal_val(self.THERMAL_NUM_3_IDX))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
thermal = ThermalUtil()
|
||||||
|
print "termal1=%d" %thermal._get_thermal_val(1)
|
||||||
|
print "termal2=%d" %thermal._get_thermal_val(2)
|
||||||
|
print "termal3=%d" %thermal._get_thermal_val(3)
|
||||||
|
print "termal4=%d" %thermal._get_thermal_val(4)
|
||||||
|
#
|
||||||
|
# print 'get_size_node_map : %d' % thermal.get_size_node_map()
|
||||||
|
# print 'get_size_path_map : %d' % thermal.get_size_path_map()
|
||||||
|
# for x in range(thermal.get_idx_thermal_start(), thermal.get_num_thermals()+1):
|
||||||
|
# print thermal.get_thermal_to_device_path(x)
|
||||||
|
#
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
@ -0,0 +1,17 @@
|
|||||||
|
ifneq ($(KERNELRELEASE),)
|
||||||
|
obj-m:= accton_as5835_54x_cpld.o accton_as5835_54x_psu.o \
|
||||||
|
accton_as5835_54x_fan.o accton_as5835_54x_leds.o \
|
||||||
|
ym2651y.o
|
||||||
|
|
||||||
|
else
|
||||||
|
ifeq (,$(KERNEL_SRC))
|
||||||
|
$(error KERNEL_SRC is not defined)
|
||||||
|
else
|
||||||
|
KERNELDIR:=$(KERNEL_SRC)
|
||||||
|
endif
|
||||||
|
PWD:=$(shell pwd)
|
||||||
|
default:
|
||||||
|
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
|
||||||
|
clean:
|
||||||
|
rm -rf *.o *.mod.o *.mod.o *.ko .*cmd .tmp_versions Module.markers Module.symvers modules.order
|
||||||
|
endif
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,484 @@
|
|||||||
|
/*
|
||||||
|
* A hwmon driver for the Accton as5835 54x fan
|
||||||
|
*
|
||||||
|
* Copyright (C) 2016 Accton Technology Corporation.
|
||||||
|
* Brandon Chuang <brandon_chuang@accton.com.tw>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/jiffies.h>
|
||||||
|
#include <linux/i2c.h>
|
||||||
|
#include <linux/hwmon.h>
|
||||||
|
#include <linux/hwmon-sysfs.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/mutex.h>
|
||||||
|
#include <linux/sysfs.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
#include <linux/dmi.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
|
#define DRVNAME "as5835_54x_fan"
|
||||||
|
#define MAX_FAN_SPEED_RPM 21500
|
||||||
|
|
||||||
|
static struct as5835_54x_fan_data *as5835_54x_fan_update_device(struct device *dev);
|
||||||
|
static ssize_t fan_show_value(struct device *dev, struct device_attribute *da, char *buf);
|
||||||
|
static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da,
|
||||||
|
const char *buf, size_t count);
|
||||||
|
static ssize_t show_version(struct device *dev, struct device_attribute *da,
|
||||||
|
char *buf);
|
||||||
|
extern int as5835_54x_cpld_read(unsigned short cpld_addr, u8 reg);
|
||||||
|
extern int as5835_54x_cpld_write(unsigned short cpld_addr, u8 reg, u8 value);
|
||||||
|
|
||||||
|
/* fan related data, the index should match sysfs_fan_attributes
|
||||||
|
*/
|
||||||
|
static const u8 fan_reg[] = {
|
||||||
|
0x02, /* fan 1-5 present status */
|
||||||
|
0x03, /* fan 1-5 direction(0:F2B 1:B2F) */
|
||||||
|
0x04, /* front fan 1-5 fault status */
|
||||||
|
0x05, /* rear fan 1-5 fault status */
|
||||||
|
0x06, /* fan PWM(for all fan) */
|
||||||
|
0x07, /* front fan 1 speed(rpm) */
|
||||||
|
0x08, /* front fan 2 speed(rpm) */
|
||||||
|
0x09, /* front fan 3 speed(rpm) */
|
||||||
|
0x0A, /* front fan 4 speed(rpm) */
|
||||||
|
0x0B, /* front fan 5 speed(rpm) */
|
||||||
|
0x0C, /* rear fan 1 speed(rpm) */
|
||||||
|
0x0D, /* rear fan 2 speed(rpm) */
|
||||||
|
0x0E, /* rear fan 3 speed(rpm) */
|
||||||
|
0x0F, /* rear fan 4 speed(rpm) */
|
||||||
|
0x10, /* rear fan 5 speed(rpm) */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* fan data */
|
||||||
|
struct as5835_54x_fan_data {
|
||||||
|
struct platform_device *pdev;
|
||||||
|
struct device *hwmon_dev;
|
||||||
|
struct mutex update_lock;
|
||||||
|
char valid; /* != 0 if registers are valid */
|
||||||
|
unsigned long last_updated; /* In jiffies */
|
||||||
|
u8 reg_val[ARRAY_SIZE(fan_reg)]; /* Register value */
|
||||||
|
};
|
||||||
|
|
||||||
|
enum fan_id {
|
||||||
|
FAN1_ID,
|
||||||
|
FAN2_ID,
|
||||||
|
FAN3_ID,
|
||||||
|
FAN4_ID,
|
||||||
|
FAN5_ID
|
||||||
|
};
|
||||||
|
|
||||||
|
enum sysfs_fan_attributes {
|
||||||
|
FAN_PRESENT_REG,
|
||||||
|
FAN_DIRECTION_REG,
|
||||||
|
FAN_FRONT_FAULT_REG,
|
||||||
|
FAN_REAR_FAULT_REG,
|
||||||
|
FAN_DUTY_CYCLE_PERCENTAGE, /* Only one CPLD register to control duty cycle for all fans */
|
||||||
|
FAN1_FRONT_SPEED_RPM,
|
||||||
|
FAN2_FRONT_SPEED_RPM,
|
||||||
|
FAN3_FRONT_SPEED_RPM,
|
||||||
|
FAN4_FRONT_SPEED_RPM,
|
||||||
|
FAN5_FRONT_SPEED_RPM,
|
||||||
|
FAN1_REAR_SPEED_RPM,
|
||||||
|
FAN2_REAR_SPEED_RPM,
|
||||||
|
FAN3_REAR_SPEED_RPM,
|
||||||
|
FAN4_REAR_SPEED_RPM,
|
||||||
|
FAN5_REAR_SPEED_RPM,
|
||||||
|
FAN1_DIRECTION,
|
||||||
|
FAN2_DIRECTION,
|
||||||
|
FAN3_DIRECTION,
|
||||||
|
FAN4_DIRECTION,
|
||||||
|
FAN5_DIRECTION,
|
||||||
|
FAN1_PRESENT,
|
||||||
|
FAN2_PRESENT,
|
||||||
|
FAN3_PRESENT,
|
||||||
|
FAN4_PRESENT,
|
||||||
|
FAN5_PRESENT,
|
||||||
|
FAN1_FAULT,
|
||||||
|
FAN2_FAULT,
|
||||||
|
FAN3_FAULT,
|
||||||
|
FAN4_FAULT,
|
||||||
|
FAN5_FAULT,
|
||||||
|
FAN_MAX_RPM,
|
||||||
|
CPLD_VERSION
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Define attributes
|
||||||
|
*/
|
||||||
|
#define DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(index, index2) \
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index##_fault, S_IRUGO, fan_show_value, NULL, FAN##index##_FAULT);\
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index2##_fault, S_IRUGO, fan_show_value, NULL, FAN##index##_FAULT)
|
||||||
|
#define DECLARE_FAN_FAULT_ATTR(index, index2) &sensor_dev_attr_fan##index##_fault.dev_attr.attr, \
|
||||||
|
&sensor_dev_attr_fan##index2##_fault.dev_attr.attr
|
||||||
|
#define DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(index) \
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index##_direction, S_IRUGO, fan_show_value, NULL, FAN##index##_DIRECTION)
|
||||||
|
#define DECLARE_FAN_DIRECTION_ATTR(index) &sensor_dev_attr_fan##index##_direction.dev_attr.attr
|
||||||
|
|
||||||
|
#define DECLARE_FAN_DUTY_CYCLE_SENSOR_DEV_ATTR(index) \
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index##_duty_cycle_percentage, S_IWUSR | S_IRUGO, fan_show_value, set_duty_cycle, FAN##index##_DUTY_CYCLE_PERCENTAGE)
|
||||||
|
#define DECLARE_FAN_DUTY_CYCLE_ATTR(index) &sensor_dev_attr_fan##index##_duty_cycle_percentage.dev_attr.attr
|
||||||
|
|
||||||
|
#define DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(index) \
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index##_present, S_IRUGO, fan_show_value, NULL, FAN##index##_PRESENT)
|
||||||
|
#define DECLARE_FAN_PRESENT_ATTR(index) &sensor_dev_attr_fan##index##_present.dev_attr.attr
|
||||||
|
|
||||||
|
#define DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(index, index2) \
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index##_front_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN##index##_FRONT_SPEED_RPM);\
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index##_rear_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN##index##_REAR_SPEED_RPM);\
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index##_input, S_IRUGO, fan_show_value, NULL, FAN##index##_FRONT_SPEED_RPM);\
|
||||||
|
static SENSOR_DEVICE_ATTR(fan##index2##_input, S_IRUGO, fan_show_value, NULL, FAN##index##_REAR_SPEED_RPM)
|
||||||
|
#define DECLARE_FAN_SPEED_RPM_ATTR(index, index2) &sensor_dev_attr_fan##index##_front_speed_rpm.dev_attr.attr, \
|
||||||
|
&sensor_dev_attr_fan##index##_rear_speed_rpm.dev_attr.attr, \
|
||||||
|
&sensor_dev_attr_fan##index##_input.dev_attr.attr, \
|
||||||
|
&sensor_dev_attr_fan##index2##_input.dev_attr.attr
|
||||||
|
|
||||||
|
static SENSOR_DEVICE_ATTR(version, S_IRUGO, show_version, NULL, CPLD_VERSION);
|
||||||
|
static SENSOR_DEVICE_ATTR(fan_max_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN_MAX_RPM);
|
||||||
|
#define DECLARE_FAN_MAX_RPM_ATTR(index) &sensor_dev_attr_fan_max_speed_rpm.dev_attr.attr
|
||||||
|
|
||||||
|
|
||||||
|
/* 5 fan fault attributes in this platform */
|
||||||
|
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(1, 11);
|
||||||
|
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(2, 12);
|
||||||
|
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(3, 13);
|
||||||
|
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(4, 14);
|
||||||
|
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(5, 15);
|
||||||
|
/* 5 fan speed(rpm) attributes in this platform */
|
||||||
|
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(1, 11);
|
||||||
|
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(2, 12);
|
||||||
|
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(3, 13);
|
||||||
|
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(4, 14);
|
||||||
|
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(5, 15);
|
||||||
|
/* 5 fan present attributes in this platform */
|
||||||
|
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(1);
|
||||||
|
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(2);
|
||||||
|
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(3);
|
||||||
|
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(4);
|
||||||
|
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(5);
|
||||||
|
/* 5 fan direction attribute in this platform */
|
||||||
|
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(1);
|
||||||
|
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(2);
|
||||||
|
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(3);
|
||||||
|
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(4);
|
||||||
|
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(5);
|
||||||
|
/* 1 fan duty cycle attribute in this platform */
|
||||||
|
DECLARE_FAN_DUTY_CYCLE_SENSOR_DEV_ATTR();
|
||||||
|
|
||||||
|
static struct attribute *as5835_54x_fan_attributes[] = {
|
||||||
|
&sensor_dev_attr_version.dev_attr.attr,
|
||||||
|
/* fan related attributes */
|
||||||
|
DECLARE_FAN_FAULT_ATTR(1, 11),
|
||||||
|
DECLARE_FAN_FAULT_ATTR(2, 12),
|
||||||
|
DECLARE_FAN_FAULT_ATTR(3, 13),
|
||||||
|
DECLARE_FAN_FAULT_ATTR(4, 14),
|
||||||
|
DECLARE_FAN_FAULT_ATTR(5, 15),
|
||||||
|
DECLARE_FAN_SPEED_RPM_ATTR(1, 11),
|
||||||
|
DECLARE_FAN_SPEED_RPM_ATTR(2, 12),
|
||||||
|
DECLARE_FAN_SPEED_RPM_ATTR(3, 13),
|
||||||
|
DECLARE_FAN_SPEED_RPM_ATTR(4, 14),
|
||||||
|
DECLARE_FAN_SPEED_RPM_ATTR(5, 15),
|
||||||
|
DECLARE_FAN_PRESENT_ATTR(1),
|
||||||
|
DECLARE_FAN_PRESENT_ATTR(2),
|
||||||
|
DECLARE_FAN_PRESENT_ATTR(3),
|
||||||
|
DECLARE_FAN_PRESENT_ATTR(4),
|
||||||
|
DECLARE_FAN_PRESENT_ATTR(5),
|
||||||
|
DECLARE_FAN_DIRECTION_ATTR(1),
|
||||||
|
DECLARE_FAN_DIRECTION_ATTR(2),
|
||||||
|
DECLARE_FAN_DIRECTION_ATTR(3),
|
||||||
|
DECLARE_FAN_DIRECTION_ATTR(4),
|
||||||
|
DECLARE_FAN_DIRECTION_ATTR(5),
|
||||||
|
DECLARE_FAN_DUTY_CYCLE_ATTR(),
|
||||||
|
DECLARE_FAN_MAX_RPM_ATTR(),
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FAN_DUTY_CYCLE_REG_MASK 0x1F
|
||||||
|
#define FAN_MAX_DUTY_CYCLE 100
|
||||||
|
#define FAN_REG_VAL_TO_SPEED_RPM_STEP 150
|
||||||
|
|
||||||
|
static int as5835_54x_fan_read_value(struct i2c_client *client, u8 reg)
|
||||||
|
{
|
||||||
|
return i2c_smbus_read_byte_data(client, reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int as5835_54x_fan_write_value(struct i2c_client *client, u8 reg, u8 value)
|
||||||
|
{
|
||||||
|
return i2c_smbus_write_byte_data(client, reg, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fan utility functions
|
||||||
|
*/
|
||||||
|
static u32 reg_val_to_duty_cycle(u8 reg_val)
|
||||||
|
{
|
||||||
|
return (reg_val & FAN_DUTY_CYCLE_REG_MASK) * 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u8 duty_cycle_to_reg_val(u8 duty_cycle)
|
||||||
|
{
|
||||||
|
if (duty_cycle > FAN_MAX_DUTY_CYCLE) {
|
||||||
|
duty_cycle = FAN_MAX_DUTY_CYCLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (duty_cycle / 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 reg_val_to_speed_rpm(u8 reg_val)
|
||||||
|
{
|
||||||
|
return (u32)reg_val * FAN_REG_VAL_TO_SPEED_RPM_STEP;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u8 reg_val_to_direction(u8 reg_val, enum fan_id id)
|
||||||
|
{
|
||||||
|
return !!(reg_val & BIT(id)); /* 0: Front to Back, 1: Back to Front*/
|
||||||
|
}
|
||||||
|
|
||||||
|
static u8 reg_val_to_is_present(u8 reg_val, enum fan_id id)
|
||||||
|
{
|
||||||
|
return !(reg_val & BIT(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
static u8 is_fan_fault(struct as5835_54x_fan_data *data, enum fan_id id)
|
||||||
|
{
|
||||||
|
if ((data->reg_val[FAN_FRONT_FAULT_REG] & BIT(id)) ||
|
||||||
|
(data->reg_val[FAN_REAR_FAULT_REG] & BIT(id))) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da,
|
||||||
|
const char *buf, size_t count)
|
||||||
|
{
|
||||||
|
int error, value;
|
||||||
|
struct i2c_client *client = to_i2c_client(dev);
|
||||||
|
|
||||||
|
error = kstrtoint(buf, 10, &value);
|
||||||
|
if (error) {
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value < 0 || value > FAN_MAX_DUTY_CYCLE) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
as5835_54x_fan_write_value(client, fan_reg[FAN_DUTY_CYCLE_PERCENTAGE], duty_cycle_to_reg_val(value));
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t fan_show_value(struct device *dev, struct device_attribute *da,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
|
||||||
|
struct as5835_54x_fan_data *data = as5835_54x_fan_update_device(dev);
|
||||||
|
ssize_t ret = 0;
|
||||||
|
|
||||||
|
if (data->valid) {
|
||||||
|
switch (attr->index) {
|
||||||
|
case FAN_DUTY_CYCLE_PERCENTAGE:
|
||||||
|
{
|
||||||
|
u32 duty_cycle = reg_val_to_duty_cycle(data->reg_val[FAN_DUTY_CYCLE_PERCENTAGE]);
|
||||||
|
ret = sprintf(buf, "%u\n", duty_cycle);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FAN1_FRONT_SPEED_RPM:
|
||||||
|
case FAN2_FRONT_SPEED_RPM:
|
||||||
|
case FAN3_FRONT_SPEED_RPM:
|
||||||
|
case FAN4_FRONT_SPEED_RPM:
|
||||||
|
case FAN5_FRONT_SPEED_RPM:
|
||||||
|
case FAN1_REAR_SPEED_RPM:
|
||||||
|
case FAN2_REAR_SPEED_RPM:
|
||||||
|
case FAN3_REAR_SPEED_RPM:
|
||||||
|
case FAN4_REAR_SPEED_RPM:
|
||||||
|
case FAN5_REAR_SPEED_RPM:
|
||||||
|
ret = sprintf(buf, "%u\n", reg_val_to_speed_rpm(data->reg_val[attr->index]));
|
||||||
|
break;
|
||||||
|
case FAN1_PRESENT:
|
||||||
|
case FAN2_PRESENT:
|
||||||
|
case FAN3_PRESENT:
|
||||||
|
case FAN4_PRESENT:
|
||||||
|
case FAN5_PRESENT:
|
||||||
|
ret = sprintf(buf, "%d\n",
|
||||||
|
reg_val_to_is_present(data->reg_val[FAN_PRESENT_REG],
|
||||||
|
attr->index - FAN1_PRESENT));
|
||||||
|
break;
|
||||||
|
case FAN1_FAULT:
|
||||||
|
case FAN2_FAULT:
|
||||||
|
case FAN3_FAULT:
|
||||||
|
case FAN4_FAULT:
|
||||||
|
case FAN5_FAULT:
|
||||||
|
ret = sprintf(buf, "%d\n", is_fan_fault(data, attr->index - FAN1_FAULT));
|
||||||
|
break;
|
||||||
|
case FAN1_DIRECTION:
|
||||||
|
case FAN2_DIRECTION:
|
||||||
|
case FAN3_DIRECTION:
|
||||||
|
case FAN4_DIRECTION:
|
||||||
|
case FAN5_DIRECTION:
|
||||||
|
ret = sprintf(buf, "%d\n",
|
||||||
|
reg_val_to_direction(data->reg_val[FAN_DIRECTION_REG],
|
||||||
|
attr->index - FAN1_DIRECTION));
|
||||||
|
break;
|
||||||
|
case FAN_MAX_RPM:
|
||||||
|
ret = sprintf(buf, "%d\n", MAX_FAN_SPEED_RPM);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct attribute_group as5835_54x_fan_group = {
|
||||||
|
.attrs = as5835_54x_fan_attributes,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct as5835_54x_fan_data *as5835_54x_fan_update_device(struct device *dev)
|
||||||
|
{
|
||||||
|
struct i2c_client *client = to_i2c_client(dev);
|
||||||
|
struct as5835_54x_fan_data *data = i2c_get_clientdata(client);
|
||||||
|
|
||||||
|
mutex_lock(&data->update_lock);
|
||||||
|
|
||||||
|
if (time_after(jiffies, data->last_updated + HZ + HZ / 2) ||
|
||||||
|
!data->valid) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
dev_dbg(&client->dev, "Starting as5835_54x_fan update\n");
|
||||||
|
data->valid = 0;
|
||||||
|
|
||||||
|
/* Update fan data
|
||||||
|
*/
|
||||||
|
for (i = 0; i < ARRAY_SIZE(data->reg_val); i++) {
|
||||||
|
int status = as5835_54x_fan_read_value(client, fan_reg[i]);
|
||||||
|
|
||||||
|
if (status < 0) {
|
||||||
|
data->valid = 0;
|
||||||
|
mutex_unlock(&data->update_lock);
|
||||||
|
dev_dbg(&client->dev, "reg %d, err %d\n", fan_reg[i], status);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data->reg_val[i] = status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data->last_updated = jiffies;
|
||||||
|
data->valid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&data->update_lock);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_version(struct device *dev, struct device_attribute *attr, char *buf)
|
||||||
|
{
|
||||||
|
int val = 0;
|
||||||
|
struct i2c_client *client = to_i2c_client(dev);
|
||||||
|
|
||||||
|
val = i2c_smbus_read_byte_data(client, 0x1);
|
||||||
|
|
||||||
|
if (val < 0) {
|
||||||
|
dev_dbg(&client->dev, "cpld(0x%x) reg(0x1) err %d\n", client->addr, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf(buf, "%d\n", val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int as5835_54x_fan_probe(struct i2c_client *client,
|
||||||
|
const struct i2c_device_id *dev_id)
|
||||||
|
{
|
||||||
|
struct as5835_54x_fan_data *data;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
|
||||||
|
status = -EIO;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
data = kzalloc(sizeof(struct as5835_54x_fan_data), GFP_KERNEL);
|
||||||
|
if (!data) {
|
||||||
|
status = -ENOMEM;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_set_clientdata(client, data);
|
||||||
|
data->valid = 0;
|
||||||
|
mutex_init(&data->update_lock);
|
||||||
|
|
||||||
|
dev_info(&client->dev, "chip found\n");
|
||||||
|
|
||||||
|
/* Register sysfs hooks */
|
||||||
|
status = sysfs_create_group(&client->dev.kobj, &as5835_54x_fan_group);
|
||||||
|
if (status) {
|
||||||
|
goto exit_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
data->hwmon_dev = hwmon_device_register_with_info(&client->dev, "as5835_54x_fan",
|
||||||
|
NULL, NULL, NULL);
|
||||||
|
if (IS_ERR(data->hwmon_dev)) {
|
||||||
|
status = PTR_ERR(data->hwmon_dev);
|
||||||
|
goto exit_remove;
|
||||||
|
}
|
||||||
|
|
||||||
|
dev_info(&client->dev, "%s: fan '%s'\n",
|
||||||
|
dev_name(data->hwmon_dev), client->name);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
exit_remove:
|
||||||
|
sysfs_remove_group(&client->dev.kobj, &as5835_54x_fan_group);
|
||||||
|
exit_free:
|
||||||
|
kfree(data);
|
||||||
|
exit:
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int as5835_54x_fan_remove(struct i2c_client *client)
|
||||||
|
{
|
||||||
|
struct as5835_54x_fan_data *data = i2c_get_clientdata(client);
|
||||||
|
hwmon_device_unregister(data->hwmon_dev);
|
||||||
|
sysfs_remove_group(&client->dev.kobj, &as5835_54x_fan_group);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Addresses to scan */
|
||||||
|
static const unsigned short normal_i2c[] = { I2C_CLIENT_END };
|
||||||
|
|
||||||
|
static const struct i2c_device_id as5835_54x_fan_id[] = {
|
||||||
|
{ "as5835_54x_fan", 0 },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(i2c, as5835_54x_fan_id);
|
||||||
|
|
||||||
|
static struct i2c_driver as5835_54x_fan_driver = {
|
||||||
|
.class = I2C_CLASS_HWMON,
|
||||||
|
.driver = {
|
||||||
|
.name = DRVNAME,
|
||||||
|
},
|
||||||
|
.probe = as5835_54x_fan_probe,
|
||||||
|
.remove = as5835_54x_fan_remove,
|
||||||
|
.id_table = as5835_54x_fan_id,
|
||||||
|
.address_list = normal_i2c,
|
||||||
|
};
|
||||||
|
|
||||||
|
module_i2c_driver(as5835_54x_fan_driver);
|
||||||
|
|
||||||
|
MODULE_AUTHOR("Brandon Chuang <brandon_chuang@accton.com.tw>");
|
||||||
|
MODULE_DESCRIPTION("as5835_54x_fan driver");
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
|
@ -0,0 +1,380 @@
|
|||||||
|
/*
|
||||||
|
* A LED driver for the accton_as5822_54x_led
|
||||||
|
*
|
||||||
|
* Copyright (C) 2016 Accton Technology Corporation.
|
||||||
|
* Brandon Chuang <brandon_chuang@accton.com.tw>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/leds.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
|
#define DRVNAME "as5835_54x_led"
|
||||||
|
|
||||||
|
#define DEBUG_MODE 0
|
||||||
|
|
||||||
|
#if (DEBUG_MODE == 1)
|
||||||
|
#define DEBUG_PRINT(fmt, args...) \
|
||||||
|
printk (KERN_INFO "%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args)
|
||||||
|
#else
|
||||||
|
#define DEBUG_PRINT(fmt, args...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int as5835_54x_cpld_read(unsigned short cpld_addr, u8 reg);
|
||||||
|
extern int as5835_54x_cpld_write(unsigned short cpld_addr, u8 reg, u8 value);
|
||||||
|
|
||||||
|
struct accton_as5835_54x_led_data {
|
||||||
|
struct platform_device *pdev;
|
||||||
|
struct mutex update_lock;
|
||||||
|
char valid; /* != 0 if registers are valid */
|
||||||
|
unsigned long last_updated; /* In jiffies */
|
||||||
|
u8 reg_val[2]; /* Register value, 0 = RELEASE/DIAG LED,
|
||||||
|
1 = FAN/PSU LED,
|
||||||
|
2 ~ 4 = SYSTEM LED */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct accton_as5835_54x_led_data *ledctl = NULL;
|
||||||
|
|
||||||
|
#define LED_CNTRLER_I2C_ADDRESS (0x60)
|
||||||
|
|
||||||
|
#define LED_TYPE_DIAG_REG_MASK (0x0C)
|
||||||
|
#define LED_MODE_DIAG_GREEN_VALUE (0x08)
|
||||||
|
#define LED_MODE_DIAG_AMBER_VALUE (0x04)
|
||||||
|
#define LED_MODE_DIAG_OFF_VALUE (0x0C)
|
||||||
|
#define LED_MODE_DIAG_AMBER_VALUE1 (0x00)
|
||||||
|
|
||||||
|
#define LED_TYPE_LOC_REG_MASK (0x30)
|
||||||
|
#define LED_MODE_LOC_AMBER_BLINK_VALUE (0x20)
|
||||||
|
#define LED_MODE_LOC_OFF_VALUE (0x10)
|
||||||
|
#define LED_MODE_LOC_AMBER_VALUE (0x00)
|
||||||
|
|
||||||
|
static const u8 led_reg[] = {
|
||||||
|
0xA, /* LOC/DIAG/FAN LED */
|
||||||
|
0xB, /* PSU LED */
|
||||||
|
};
|
||||||
|
|
||||||
|
enum led_type {
|
||||||
|
LED_TYPE_DIAG,
|
||||||
|
LED_TYPE_LOC,
|
||||||
|
LED_TYPE_FAN,
|
||||||
|
LED_TYPE_PSU1,
|
||||||
|
LED_TYPE_PSU2
|
||||||
|
};
|
||||||
|
|
||||||
|
/* FAN/PSU/DIAG/RELEASE led mode */
|
||||||
|
enum led_light_mode {
|
||||||
|
LED_MODE_OFF = 0,
|
||||||
|
LED_MODE_GREEN,
|
||||||
|
LED_MODE_GREEN_BLINK,
|
||||||
|
LED_MODE_AMBER,
|
||||||
|
LED_MODE_AMBER_BLINK,
|
||||||
|
LED_MODE_RED,
|
||||||
|
LED_MODE_RED_BLINK,
|
||||||
|
LED_MODE_BLUE,
|
||||||
|
LED_MODE_BLUE_BLINK,
|
||||||
|
LED_MODE_AUTO,
|
||||||
|
LED_MODE_UNKNOWN
|
||||||
|
};
|
||||||
|
|
||||||
|
struct led_type_mode {
|
||||||
|
enum led_type type;
|
||||||
|
enum led_light_mode mode;
|
||||||
|
int type_mask;
|
||||||
|
int mode_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct led_type_mode led_type_mode_data[] = {
|
||||||
|
{LED_TYPE_LOC, LED_MODE_OFF, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_OFF_VALUE},
|
||||||
|
{LED_TYPE_LOC, LED_MODE_AMBER_BLINK, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_AMBER_BLINK_VALUE},
|
||||||
|
{LED_TYPE_LOC, LED_MODE_AMBER, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_AMBER_VALUE},
|
||||||
|
{LED_TYPE_DIAG, LED_MODE_OFF, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_OFF_VALUE},
|
||||||
|
{LED_TYPE_DIAG, LED_MODE_GREEN, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_GREEN_VALUE},
|
||||||
|
{LED_TYPE_DIAG, LED_MODE_AMBER, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_AMBER_VALUE},
|
||||||
|
{LED_TYPE_DIAG, LED_MODE_AMBER, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_AMBER_VALUE1},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int led_reg_val_to_light_mode(enum led_type type, u8 reg_val) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(led_type_mode_data); i++) {
|
||||||
|
if (type != led_type_mode_data[i].type) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((led_type_mode_data[i].type_mask & reg_val) ==
|
||||||
|
led_type_mode_data[i].mode_value) {
|
||||||
|
return led_type_mode_data[i].mode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return LED_MODE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u8 led_light_mode_to_reg_val(enum led_type type,
|
||||||
|
enum led_light_mode mode, u8 reg_val) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(led_type_mode_data); i++) {
|
||||||
|
int type_mask, mode_value;
|
||||||
|
|
||||||
|
if (type != led_type_mode_data[i].type)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (mode != led_type_mode_data[i].mode)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
type_mask = led_type_mode_data[i].type_mask;
|
||||||
|
mode_value = led_type_mode_data[i].mode_value;
|
||||||
|
reg_val = (reg_val & ~type_mask) | mode_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return reg_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int accton_as5835_54x_led_read_value(u8 reg)
|
||||||
|
{
|
||||||
|
return as5835_54x_cpld_read(LED_CNTRLER_I2C_ADDRESS, reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int accton_as5835_54x_led_write_value(u8 reg, u8 value)
|
||||||
|
{
|
||||||
|
return as5835_54x_cpld_write(LED_CNTRLER_I2C_ADDRESS, reg, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void accton_as5835_54x_led_update(void)
|
||||||
|
{
|
||||||
|
mutex_lock(&ledctl->update_lock);
|
||||||
|
|
||||||
|
if (time_after(jiffies, ledctl->last_updated + HZ + HZ / 2)
|
||||||
|
|| !ledctl->valid) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
dev_dbg(&ledctl->pdev->dev, "Starting accton_as5835_54x_led update\n");
|
||||||
|
ledctl->valid = 0;
|
||||||
|
|
||||||
|
/* Update LED data
|
||||||
|
*/
|
||||||
|
for (i = 0; i < ARRAY_SIZE(ledctl->reg_val); i++) {
|
||||||
|
int status = accton_as5835_54x_led_read_value(led_reg[i]);
|
||||||
|
|
||||||
|
if (status < 0) {
|
||||||
|
dev_dbg(&ledctl->pdev->dev, "reg %d, err %d\n", led_reg[i], status);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ledctl->reg_val[i] = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
ledctl->last_updated = jiffies;
|
||||||
|
ledctl->valid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mutex_unlock(&ledctl->update_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void accton_as5835_54x_led_set(struct led_classdev *led_cdev,
|
||||||
|
enum led_brightness led_light_mode,
|
||||||
|
u8 reg, enum led_type type)
|
||||||
|
{
|
||||||
|
int reg_val;
|
||||||
|
|
||||||
|
mutex_lock(&ledctl->update_lock);
|
||||||
|
reg_val = accton_as5835_54x_led_read_value(reg);
|
||||||
|
|
||||||
|
if (reg_val < 0) {
|
||||||
|
dev_dbg(&ledctl->pdev->dev, "reg %d, err %d\n", reg, reg_val);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg_val = led_light_mode_to_reg_val(type, led_light_mode, reg_val);
|
||||||
|
accton_as5835_54x_led_write_value(reg, reg_val);
|
||||||
|
ledctl->valid = 0;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mutex_unlock(&ledctl->update_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void accton_as7312_54x_led_auto_set(struct led_classdev *led_cdev,
|
||||||
|
enum led_brightness led_light_mode)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum led_brightness accton_as7312_54x_led_auto_get(struct led_classdev *cdev)
|
||||||
|
{
|
||||||
|
return LED_MODE_AUTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void accton_as5835_54x_led_diag_set(struct led_classdev *led_cdev,
|
||||||
|
enum led_brightness led_light_mode)
|
||||||
|
{
|
||||||
|
accton_as5835_54x_led_set(led_cdev, led_light_mode, led_reg[0], LED_TYPE_DIAG);
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum led_brightness accton_as5835_54x_led_diag_get(struct led_classdev *cdev)
|
||||||
|
{
|
||||||
|
accton_as5835_54x_led_update();
|
||||||
|
return led_reg_val_to_light_mode(LED_TYPE_DIAG, ledctl->reg_val[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum led_brightness accton_as5835_54x_led_loc_get(struct led_classdev *cdev)
|
||||||
|
{
|
||||||
|
accton_as5835_54x_led_update();
|
||||||
|
return led_reg_val_to_light_mode(LED_TYPE_LOC, ledctl->reg_val[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void accton_as5835_54x_led_loc_set(struct led_classdev *led_cdev,
|
||||||
|
enum led_brightness led_light_mode)
|
||||||
|
{
|
||||||
|
accton_as5835_54x_led_set(led_cdev, led_light_mode, led_reg[0], LED_TYPE_LOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct led_classdev accton_as5835_54x_leds[] = {
|
||||||
|
[LED_TYPE_LOC] = {
|
||||||
|
.name = "as5835_54x_led::loc",
|
||||||
|
.default_trigger = "unused",
|
||||||
|
.brightness_set = accton_as5835_54x_led_loc_set,
|
||||||
|
.brightness_get = accton_as5835_54x_led_loc_get,
|
||||||
|
.max_brightness = LED_MODE_AMBER_BLINK,
|
||||||
|
},
|
||||||
|
[LED_TYPE_DIAG] = {
|
||||||
|
.name = "as5835_54x_led::diag",
|
||||||
|
.default_trigger = "unused",
|
||||||
|
.brightness_set = accton_as5835_54x_led_diag_set,
|
||||||
|
.brightness_get = accton_as5835_54x_led_diag_get,
|
||||||
|
.max_brightness = LED_MODE_AMBER,
|
||||||
|
},
|
||||||
|
[LED_TYPE_PSU1] = {
|
||||||
|
.name = "as5835_54x_led::psu1",
|
||||||
|
.default_trigger = "unused",
|
||||||
|
.brightness_set = accton_as7312_54x_led_auto_set,
|
||||||
|
.brightness_get = accton_as7312_54x_led_auto_get,
|
||||||
|
.max_brightness = LED_MODE_AUTO,
|
||||||
|
},
|
||||||
|
[LED_TYPE_PSU2] = {
|
||||||
|
.name = "as5835_54x_led::psu2",
|
||||||
|
.default_trigger = "unused",
|
||||||
|
.brightness_set = accton_as7312_54x_led_auto_set,
|
||||||
|
.brightness_get = accton_as7312_54x_led_auto_get,
|
||||||
|
.max_brightness = LED_MODE_AUTO,
|
||||||
|
},
|
||||||
|
[LED_TYPE_FAN] = {
|
||||||
|
.name = "as5835_54x_led::fan",
|
||||||
|
.default_trigger = "unused",
|
||||||
|
.brightness_set = accton_as7312_54x_led_auto_set,
|
||||||
|
.brightness_get = accton_as7312_54x_led_auto_get,
|
||||||
|
.max_brightness = LED_MODE_AUTO,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int accton_as5835_54x_led_probe(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
int ret, i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(accton_as5835_54x_leds); i++) {
|
||||||
|
ret = led_classdev_register(&pdev->dev, &accton_as5835_54x_leds[i]);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if all LEDs were successfully registered */
|
||||||
|
if (i != ARRAY_SIZE(accton_as5835_54x_leds)){
|
||||||
|
int j;
|
||||||
|
|
||||||
|
/* only unregister the LEDs that were successfully registered */
|
||||||
|
for (j = 0; j < i; j++) {
|
||||||
|
led_classdev_unregister(&accton_as5835_54x_leds[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int accton_as5835_54x_led_remove(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(accton_as5835_54x_leds); i++) {
|
||||||
|
led_classdev_unregister(&accton_as5835_54x_leds[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct platform_driver accton_as5835_54x_led_driver = {
|
||||||
|
.probe = accton_as5835_54x_led_probe,
|
||||||
|
.remove = accton_as5835_54x_led_remove,
|
||||||
|
.driver = {
|
||||||
|
.name = DRVNAME,
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init accton_as5835_54x_led_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = platform_driver_register(&accton_as5835_54x_led_driver);
|
||||||
|
if (ret < 0) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ledctl = kzalloc(sizeof(struct accton_as5835_54x_led_data), GFP_KERNEL);
|
||||||
|
if (!ledctl) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto exit_driver;
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex_init(&ledctl->update_lock);
|
||||||
|
|
||||||
|
ledctl->pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0);
|
||||||
|
if (IS_ERR(ledctl->pdev)) {
|
||||||
|
ret = PTR_ERR(ledctl->pdev);
|
||||||
|
goto exit_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
exit_free:
|
||||||
|
kfree(ledctl);
|
||||||
|
exit_driver:
|
||||||
|
platform_driver_unregister(&accton_as5835_54x_led_driver);
|
||||||
|
exit:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __exit accton_as5835_54x_led_exit(void)
|
||||||
|
{
|
||||||
|
platform_device_unregister(ledctl->pdev);
|
||||||
|
platform_driver_unregister(&accton_as5835_54x_led_driver);
|
||||||
|
kfree(ledctl);
|
||||||
|
}
|
||||||
|
|
||||||
|
late_initcall(accton_as5835_54x_led_init);
|
||||||
|
module_exit(accton_as5835_54x_led_exit);
|
||||||
|
|
||||||
|
MODULE_AUTHOR("Brandon Chuang <brandon_chuang@accton.com.tw>");
|
||||||
|
MODULE_DESCRIPTION("accton_as5835_54x_led driver");
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
|
|
@ -0,0 +1,343 @@
|
|||||||
|
/*
|
||||||
|
* An hwmon driver for accton as5835_54x Power Module
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Accton Technology Corporation.
|
||||||
|
* Brandon Chuang <brandon_chuang@accton.com.tw>
|
||||||
|
*
|
||||||
|
* Based on ad7414.c
|
||||||
|
* Copyright 2006 Stefan Roese <sr at denx.de>, DENX Software Engineering
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/jiffies.h>
|
||||||
|
#include <linux/i2c.h>
|
||||||
|
#include <linux/hwmon.h>
|
||||||
|
#include <linux/hwmon-sysfs.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/mutex.h>
|
||||||
|
#include <linux/sysfs.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/dmi.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define PSU_STATUS_I2C_ADDR 0x60
|
||||||
|
#define PSU_STATUS_I2C_REG_OFFSET 0x2
|
||||||
|
|
||||||
|
#define MODEL_NAME_LEN 8
|
||||||
|
#define MODEL_NAME_REG_OFFSET 0x20
|
||||||
|
|
||||||
|
#define SERIAL_NUM_LEN 18
|
||||||
|
#define SERIAL_NUM_REG_OFFSET 0x35
|
||||||
|
|
||||||
|
#define IS_POWER_GOOD(id, value) (!!(value & BIT(id*4 + 1)))
|
||||||
|
#define IS_PRESENT(id, value) (!(value & BIT(id*4)))
|
||||||
|
|
||||||
|
static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf);
|
||||||
|
static ssize_t show_string(struct device *dev, struct device_attribute *da, char *buf);
|
||||||
|
extern int as5835_54x_cpld_read(unsigned short cpld_addr, u8 reg);
|
||||||
|
|
||||||
|
/* Addresses scanned
|
||||||
|
*/
|
||||||
|
static const unsigned short normal_i2c[] = { I2C_CLIENT_END };
|
||||||
|
|
||||||
|
/* Each client has this additional data
|
||||||
|
*/
|
||||||
|
struct as5835_54x_psu_data {
|
||||||
|
struct device *hwmon_dev;
|
||||||
|
struct mutex update_lock;
|
||||||
|
char valid; /* !=0 if registers are valid */
|
||||||
|
unsigned long last_updated; /* In jiffies */
|
||||||
|
u8 index; /* PSU index */
|
||||||
|
u8 status; /* Status(present/power_good) register read from CPLD */
|
||||||
|
char model_name[MODEL_NAME_LEN+1]; /* Model name, read from eeprom */
|
||||||
|
char serial[SERIAL_NUM_LEN+1]; /* Serial number, read from eeprom*/
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct as5835_54x_psu_data *as5835_54x_psu_update_device(struct device *dev);
|
||||||
|
|
||||||
|
enum as5835_54x_psu_sysfs_attributes {
|
||||||
|
PSU_PRESENT,
|
||||||
|
PSU_MODEL_NAME,
|
||||||
|
PSU_POWER_GOOD,
|
||||||
|
PSU_SERIAL_NUMBER
|
||||||
|
};
|
||||||
|
|
||||||
|
/* sysfs attributes for hwmon
|
||||||
|
*/
|
||||||
|
static SENSOR_DEVICE_ATTR(psu_present, S_IRUGO, show_status, NULL, PSU_PRESENT);
|
||||||
|
static SENSOR_DEVICE_ATTR(psu_model_name, S_IRUGO, show_string, NULL, PSU_MODEL_NAME);
|
||||||
|
static SENSOR_DEVICE_ATTR(psu_power_good, S_IRUGO, show_status, NULL, PSU_POWER_GOOD);
|
||||||
|
static SENSOR_DEVICE_ATTR(psu_serial_numer, S_IRUGO, show_string, NULL, PSU_SERIAL_NUMBER);
|
||||||
|
|
||||||
|
static struct attribute *as5835_54x_psu_attributes[] = {
|
||||||
|
&sensor_dev_attr_psu_present.dev_attr.attr,
|
||||||
|
&sensor_dev_attr_psu_model_name.dev_attr.attr,
|
||||||
|
&sensor_dev_attr_psu_power_good.dev_attr.attr,
|
||||||
|
&sensor_dev_attr_psu_serial_numer.dev_attr.attr,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static ssize_t show_status(struct device *dev, struct device_attribute *da,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
|
||||||
|
struct as5835_54x_psu_data *data = as5835_54x_psu_update_device(dev);
|
||||||
|
u8 status = 0;
|
||||||
|
|
||||||
|
if (!data->valid) {
|
||||||
|
return sprintf(buf, "0\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attr->index == PSU_PRESENT) {
|
||||||
|
status = IS_PRESENT(data->index, data->status);
|
||||||
|
}
|
||||||
|
else { /* PSU_POWER_GOOD */
|
||||||
|
status = IS_POWER_GOOD(data->index, data->status);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf(buf, "%d\n", status);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_string(struct device *dev, struct device_attribute *da,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
|
||||||
|
struct as5835_54x_psu_data *data = as5835_54x_psu_update_device(dev);
|
||||||
|
char *str = NULL;
|
||||||
|
|
||||||
|
if (!data->valid) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attr->index == PSU_MODEL_NAME) {
|
||||||
|
str = data->model_name;
|
||||||
|
}
|
||||||
|
else { /* PSU_SERIAL_NUBMER */
|
||||||
|
str = data->serial;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf(buf, "%s\n", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct attribute_group as5835_54x_psu_group = {
|
||||||
|
.attrs = as5835_54x_psu_attributes,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int as5835_54x_psu_probe(struct i2c_client *client,
|
||||||
|
const struct i2c_device_id *dev_id)
|
||||||
|
{
|
||||||
|
struct as5835_54x_psu_data *data;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) {
|
||||||
|
status = -EIO;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
data = kzalloc(sizeof(struct as5835_54x_psu_data), GFP_KERNEL);
|
||||||
|
if (!data) {
|
||||||
|
status = -ENOMEM;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_set_clientdata(client, data);
|
||||||
|
data->valid = 0;
|
||||||
|
data->index = dev_id->driver_data;
|
||||||
|
mutex_init(&data->update_lock);
|
||||||
|
|
||||||
|
dev_info(&client->dev, "chip found\n");
|
||||||
|
|
||||||
|
/* Register sysfs hooks */
|
||||||
|
status = sysfs_create_group(&client->dev.kobj, &as5835_54x_psu_group);
|
||||||
|
if (status) {
|
||||||
|
goto exit_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
data->hwmon_dev = hwmon_device_register_with_info(&client->dev, "as5835_54x_psu",
|
||||||
|
NULL, NULL, NULL);
|
||||||
|
if (IS_ERR(data->hwmon_dev)) {
|
||||||
|
status = PTR_ERR(data->hwmon_dev);
|
||||||
|
goto exit_remove;
|
||||||
|
}
|
||||||
|
|
||||||
|
dev_info(&client->dev, "%s: psu '%s'\n",
|
||||||
|
dev_name(data->hwmon_dev), client->name);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
exit_remove:
|
||||||
|
sysfs_remove_group(&client->dev.kobj, &as5835_54x_psu_group);
|
||||||
|
exit_free:
|
||||||
|
kfree(data);
|
||||||
|
exit:
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int as5835_54x_psu_remove(struct i2c_client *client)
|
||||||
|
{
|
||||||
|
struct as5835_54x_psu_data *data = i2c_get_clientdata(client);
|
||||||
|
|
||||||
|
hwmon_device_unregister(data->hwmon_dev);
|
||||||
|
sysfs_remove_group(&client->dev.kobj, &as5835_54x_psu_group);
|
||||||
|
kfree(data);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum psu_index
|
||||||
|
{
|
||||||
|
as5835_54x_psu1,
|
||||||
|
as5835_54x_psu2
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct i2c_device_id as5835_54x_psu_id[] = {
|
||||||
|
{ "as5835_54x_psu1", as5835_54x_psu1 },
|
||||||
|
{ "as5835_54x_psu2", as5835_54x_psu2 },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(i2c, as5835_54x_psu_id);
|
||||||
|
|
||||||
|
static struct i2c_driver as5835_54x_psu_driver = {
|
||||||
|
.class = I2C_CLASS_HWMON,
|
||||||
|
.driver = {
|
||||||
|
.name = "as5835_54x_psu",
|
||||||
|
},
|
||||||
|
.probe = as5835_54x_psu_probe,
|
||||||
|
.remove = as5835_54x_psu_remove,
|
||||||
|
.id_table = as5835_54x_psu_id,
|
||||||
|
.address_list = normal_i2c,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int as5835_54x_psu_read_byte(struct i2c_client *client, u8 command, u8 *data)
|
||||||
|
{
|
||||||
|
int status = 0;
|
||||||
|
int retry_count = 5;
|
||||||
|
|
||||||
|
while (retry_count) {
|
||||||
|
status = i2c_smbus_read_byte_data(client, command);
|
||||||
|
if (unlikely(status < 0)) {
|
||||||
|
msleep(10);
|
||||||
|
retry_count--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unlikely(status < 0)) {
|
||||||
|
dev_dbg(&client->dev, "sfp read byte data failed, command(0x%2x), data(0x%2x)\r\n", command, status);
|
||||||
|
goto abort;
|
||||||
|
}
|
||||||
|
|
||||||
|
*data = (u8)status;
|
||||||
|
|
||||||
|
abort:
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int as5835_54x_psu_read_bytes(struct i2c_client *client, u8 command, u8 *data,
|
||||||
|
int data_len)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
while (data_len) {
|
||||||
|
ssize_t status;
|
||||||
|
|
||||||
|
status = as5835_54x_psu_read_byte(client, command, data);
|
||||||
|
if (status <= 0) {
|
||||||
|
ret = status;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
data += 1;
|
||||||
|
command += 1;
|
||||||
|
data_len -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct as5835_54x_psu_data *as5835_54x_psu_update_device(struct device *dev)
|
||||||
|
{
|
||||||
|
struct i2c_client *client = to_i2c_client(dev);
|
||||||
|
struct as5835_54x_psu_data *data = i2c_get_clientdata(client);
|
||||||
|
|
||||||
|
mutex_lock(&data->update_lock);
|
||||||
|
|
||||||
|
if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
|
||||||
|
|| !data->valid) {
|
||||||
|
int status;
|
||||||
|
|
||||||
|
dev_dbg(&client->dev, "Starting as5835_54x update\n");
|
||||||
|
data->valid = 0;
|
||||||
|
|
||||||
|
/* Read psu status */
|
||||||
|
status = as5835_54x_cpld_read(PSU_STATUS_I2C_ADDR, PSU_STATUS_I2C_REG_OFFSET);
|
||||||
|
|
||||||
|
if (status < 0) {
|
||||||
|
dev_dbg(&client->dev, "cpld reg (0x%x) err %d\n", PSU_STATUS_I2C_ADDR, status);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data->status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
memset(data->model_name, 0, sizeof(data->model_name));
|
||||||
|
memset(data->serial, 0, sizeof(data->serial));
|
||||||
|
|
||||||
|
if (IS_PRESENT(data->index, data->status)) {
|
||||||
|
/* Read model name */
|
||||||
|
status = as5835_54x_psu_read_bytes(client, MODEL_NAME_REG_OFFSET, data->model_name,
|
||||||
|
ARRAY_SIZE(data->model_name)-1);
|
||||||
|
if (status < 0) {
|
||||||
|
data->model_name[0] = '\0';
|
||||||
|
dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read serial number */
|
||||||
|
status = as5835_54x_psu_read_bytes(client, SERIAL_NUM_REG_OFFSET, data->serial,
|
||||||
|
ARRAY_SIZE(data->serial)-1);
|
||||||
|
if (status < 0) {
|
||||||
|
data->serial[0] = '\0';
|
||||||
|
dev_dbg(&client->dev, "unable to read serial number from (0x%x)\n", client->addr);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data->serial[SERIAL_NUM_LEN] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data->last_updated = jiffies;
|
||||||
|
data->valid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mutex_unlock(&data->update_lock);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
module_i2c_driver(as5835_54x_psu_driver);
|
||||||
|
|
||||||
|
MODULE_AUTHOR("Brandon Chuang <brandon_chuang@accton.com.tw>");
|
||||||
|
MODULE_DESCRIPTION("as5835_54x_psu driver");
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
../../common/modules/ym2651y.c
|
@ -0,0 +1,16 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Accton AS5835-54X Platform Monitoring FAN service
|
||||||
|
Before=pmon.service
|
||||||
|
After=as5835-54x-platform-monitor.service
|
||||||
|
DefaultDependencies=no
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/local/bin/accton_as5835_54x_monitor_fan.py
|
||||||
|
KillSignal=SIGKILL
|
||||||
|
SuccessExitStatus=SIGKILL
|
||||||
|
|
||||||
|
# Resource Limitations
|
||||||
|
LimitCORE=infinity
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -0,0 +1,16 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Accton AS5835-54X Platform Monitoring PSU service
|
||||||
|
Before=pmon.service
|
||||||
|
After=as5835-54x-platform-monitor.service
|
||||||
|
DefaultDependencies=no
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/local/bin/accton_as5835_54x_monitor_psu.py
|
||||||
|
KillSignal=SIGKILL
|
||||||
|
SuccessExitStatus=SIGKILL
|
||||||
|
|
||||||
|
# Resource Limitations
|
||||||
|
LimitCORE=infinity
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -0,0 +1,18 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Accton AS5835-54X Platform Monitoring service
|
||||||
|
Before=pmon.service
|
||||||
|
After=sysinit.target
|
||||||
|
DefaultDependencies=no
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStartPre=/usr/local/bin/accton_as5835_54x_util.py install
|
||||||
|
ExecStart=/usr/local/bin/accton_as5835_54x_monitor.py
|
||||||
|
KillSignal=SIGKILL
|
||||||
|
SuccessExitStatus=SIGKILL
|
||||||
|
#StandardOutput=tty
|
||||||
|
|
||||||
|
# Resource Limitations
|
||||||
|
LimitCORE=infinity
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user