1#!/usr/bin/ksh 2# 3# This file and its contents are supplied under the terms of the 4# Common Development and Distribution License ("CDDL"), version 1.0. 5# You may only use this file in accordance with the terms of version 6# 1.0 of the CDDL. 7# 8# A full copy of the text of the CDDL should have accompanied this 9# source. A copy of the CDDL is also available via the Internet at 10# http://www.illumos.org/license/CDDL. 11# 12 13# 14# Copyright 2025 Oxide Computer Company 15# 16 17# 18# Test functionality of i2cadm against the automatically set up tree. This 19# generally covers bad arguments, good and bad filters, and ofmt. Positive 20# tests for performing io and scanning are in separate programs. 21# 22 23. $(dirname $0)/common.ksh 24 25# 26# Bad arguments to the program 27# 28i2cadm_fail 29i2cadm_fail controller 30i2cadm_fail controller foobar 31i2cadm_fail controller help 32i2cadm_fail controller 123 33i2cadm_fail controller list -wat 34i2cadm_fail controller list -o 35i2cadm_fail controller list -o foobar 36i2cadm_fail controller list -p 37i2cadm_fail controller prop get 38i2cadm_fail controller prop get -p i2csim0 39i2cadm_fail controller prop get -H -p i2csim0 40i2cadm_fail controller prop get -H -p i2csim0 41i2cadm_fail controller prop get -o foo i2csim0 42i2cadm_fail controller prop get -o foo 43i2cadm_fail controller prop set 44i2cadm_fail controller prop set speed 45i2cadm_fail controller prop set i2csim0 46i2cadm_fail controller prop set i2csim0 speed 47i2cadm_fail controller prop set i2csim0 speed= 48i2cadm_fail controller prop set i2csim0 i2c-max-read=0x 49i2cadm_fail controller prop set i2csim0 i2c-max-read=nope 50i2cadm_fail controller prop set i2csim0 i2c-max-read=0x2nope 51i2cadm_fail controller prop set i2csim0 i2c-max-read=42answer 52i2cadm_fail device 53i2cadm_fail device help 54i2cadm_fail device sephiroth 55i2cadm_fail device list cloud 56i2cadm_fail device list -o 57i2cadm_fail device list -o aerith 58i2cadm_fail device list -o aerith i2csim0 59i2cadm_fail device list -p 60i2cadm_fail device addrs cloud 61i2cadm_fail device addrs -o 62i2cadm_fail device addrs -o aerith 63i2cadm_fail device addrs -o aerith i2csim0 64i2cadm_fail device addrs -p 65i2cadm_fail device add 66i2cadm_fail device add i2csim0/0 67i2cadm_fail device add i2csim0/0 foobar 68i2cadm_fail device add i2csim0/0 foobar 0x11 trailing 69i2cadm_fail device add i2csim0/0 foo@bar 0x11 70i2cadm_fail device add i2csim0/0 1oobar 0x11 71i2cadm_fail device add i2csim0/0 foo^bar% 0x11 72i2cadm_fail device add i2csim0/0 'foo bar' 0x11 73i2cadm_fail device add i2csim0 foobar 0x11 74i2cadm_fail device add i2csim0/0/0x20 foobar 0x11 75i2cadm_fail device remove 76i2cadm_fail device remove i2csim0 77i2cadm_fail device remove i2csim0/0 78i2cadm_fail device remove i2csim0/23 79i2cadm_fail device remove i2csim0/0/0x11 80i2cadm_fail device remove i2csim0/0/0x70/0/0x11 81i2cadm_fail device remove i2csim0/0x10 82i2cadm_fail device remove i2csim0/23/0x10 83i2cadm_fail device remove i2csim0/0/0x10 extra 84i2cadm_fail mux 85i2cadm_fail mux cid 86i2cadm_fail mux list -o 87i2cadm_fail mux list -o tifa 88i2cadm_fail mux list -o tifa i2csim0 89i2cadm_fail mux list -p 90i2cadm_fail port 91i2cadm_fail port vincent 92i2cadm_fail port list -o 93i2cadm_fail port list -o red13 94i2cadm_fail port list -o red13 i2csim0 95i2cadm_fail port list -p 96i2cadm_fail port map 97i2cadm_fail port map -p i2csim0/0 98i2cadm_fail port map -o foo i2csim0/0 99i2cadm_fail port map -p -o foo 100i2cadm_fail port map -p -o type 101i2cadm_fail port map -wtf i2csim0/0 102i2cadm_fail port map i2csim0 103i2cadm_fail port map i2csim0/23 104i2cadm_fail port map i2csim0/0/0x10 105i2cadm_fail port map i2csim0/0/0x70 106i2cadm_fail port map i2csim0/0/0x70/0/0x71 107i2cadm_fail io 108i2cadm_fail io i2csim0/0 109i2cadm_fail io -m i2c 110i2cadm_fail io -m i2c -a 0x20 111i2cadm_fail io -m i2c -d i2csim0/0/0x10 -r hello 112i2cadm_fail io -m i2c -d i2csim0/0/0x10 -r 0x7777 113i2cadm_fail io -m i2c -d i2csim0/0 -a 0x10 -r hello 114i2cadm_fail io -m i2c -d i2csim0/0 -a 0x10 -r 0x7777 115i2cadm_fail io -m i2c -c 0x23 -a 0x10 -r 0x4 -w 2 0x00 0x00 116i2cadm_fail io -m read-u8 -d i2csim0/0/x20 117i2cadm_fail io -m recv-u8 -c 0x23 -d i2csim0/0/0x20 118i2cadm_fail io -d i2csim0/0 -r 2 -w 1 0x00 119i2cadm_fail io -d i2csim0/0/x20 -r 2 -w 1 0x00 120i2cadm_fail io -d i2csim0/0/0x20 121i2cadm_fail io -d i2csim0/0/0x20 -w 1 122i2cadm_fail scan 123i2cadm_fail scan -p 124i2cadm_fail scan -p -o addr,result 125i2cadm_fail scan -p i2csim0/0 126i2cadm_fail scan -c i2csim0/0 127i2cadm_fail scan -d foobar i2csim0/0 128i2cadm_fail scan -d 0x7777 i2csim0/0 129i2cadm_fail scan -d 0x10 -d 0x7777 i2csim0/0 130i2cadm_fail scan i2csim0/0/0x10 131i2cadm_fail scan i2csim0/0/0x70 132i2cadm_fail scan i2csim0/0/0x70/0/0x71 133i2cadm_fail scan i2csim0/0/0x70/0/0x71/2/0x72 134 135# 136# Bad filters 137# 138i2cadm_fail controller list 2345 139i2cadm_fail controller list bl@rgh 140i2cadm_fail controller list i2csim7777 141i2cadm_fail controller prop get i2csim0 2345 142i2cadm_fail controller prop get i2csim0 speed foobar 143i2cadm_fail controller prop get i2csimXXyy 144i2cadm_fail controller prop get foo^bar 145i2cadm_fail device list triforce 146i2cadm_fail device list i2csim0 triforce 147i2cadm_fail device list i2csim0/XXX 148i2cadm_fail device list i2csim0/0/itsatrap 149i2cadm_fail device list i2csim0/0/0x11 150i2cadm_fail device list magecite%materia 151i2cadm_fail device addrs triforce 152i2cadm_fail device addrs power courage i2csim0/0 153i2cadm_fail device addrs i2csim0/XXX 154i2cadm_fail device addrs i2csim0/0/itsatrap 155i2cadm_fail device addrs magecite%materia 156i2cadm_fail mux list triforce 157i2cadm_fail mux list i2csim0 triforce 158i2cadm_fail mux list i2csim0/XXX 159i2cadm_fail mux list i2csim0/0/itsatrap 160i2cadm_fail mux list magecite%materia 161i2cadm_fail port list triforce 162i2cadm_fail port list power courage i2csim0/0 163i2cadm_fail port list i2csim0/XXX 164i2cadm_fail port list i2csim0/0/itsatrap 165i2cadm_fail port list magecite%materia 166 167# 168# Read-only properties 169# 170i2cadm_fail controller prop set i2csim0 ports=23 171i2cadm_fail controller prop set i2csim0 smbus-ops=send-byte 172i2cadm_fail controller prop set i2csim0 i2c-max-read=169 173 174# 175# Things that should pass. A subset of these we use our simulation based devices 176# and verify that the output is as we expect. 177# 178i2cadm_pass controller list 179i2cadm_pass controller list i2csim0 180i2cadm_pass controller list smbussim1 181i2cadm_pass controller list i2csim0 smbussim1 182i2cadm_check_output "i2csim0:i2c" controller list -Hpo name,type i2csim0 183i2cadm_check_output "smbussim1" controller list -Hpo name smbussim1 184i2cadm_check_output "2:i2csim" controller list -Hpo nports,driver smbussim1 185i2cadm_check_output "i2csim0" controller list -Hpo instance i2csim0 186i2cadm_check_output "standard:/pseudo/i2csim@0/i2cnex@i2csim0" controller list \ 187 -Hpo speed,provider i2csim0 188i2cadm_pass controller prop get i2csim0 189i2cadm_pass controller prop get smbussim1 190i2cadm_pass controller prop get i2csim0 speed smbus-ops type 191i2cadm_check_output "speed:standard" controller prop get -Hpo property,value \ 192 i2csim0 speed 193i2cadm_check_output "smbus:r-" controller prop get -Hpo value,perm smbussim1 \ 194 type 195i2cadm_check_output "bit32:i2csim0" controller prop get -Hpo type,controller \ 196 i2csim0 smbus-ops 197i2cadm_pass device list 198i2cadm_pass device list i2csim0 199i2cadm_pass device list i2csim0/0 200i2cadm_pass device list ts5111 201i2cadm_pass device list pca954x 202i2cadm_pass device list at24c4 i2csim0 203i2cadm_pass device list i2csim0/0/0x10 204i2cadm_pass device list i2csim0/0/0x70/3 205i2cadm_check_output "at24c32" device list -Hpo name i2csim0/0/0x10 206i2cadm_check_output "at24c08" device list -Hpo name i2csim0/0/0x20 207i2cadm_check_output "0x72" device list -Hpo addr i2csim0/0/0x70/0/0x71/0 208i2cadm_check_output "0x72" device list -Hpo addr i2csim0/0/0x70/0/0x71/4 209i2cadm_check_output "i2csim0/0/0x70/0/0x71/7/0x72" device list -Hpo path \ 210 i2csim0/0/0x70/0/0x71/7 211# 212# Claimed addresses come and go so we elide them based on whether the driver is 213# attached or detached so we leave them out of the test suite. 214# 215i2cadm_pass device addrs 216i2cadm_pass device addrs i2csim0 217i2cadm_pass device addrs pca9548 218i2cadm_pass device addrs at24c 219i2cadm_pass device addrs i2csim0/0/0x70/1/0x71 ts5111 220i2cadm_check_output "7-bit:0x10" device addrs -Hpo type,addr i2csim0/0/0x10 221i2cadm_check_output "platform" device addrs -Hpo source i2csim0/0/0x70/2/0x72 222i2cadm_pass mux list 223i2cadm_pass mux list pca9548 224i2cadm_pass mux list pca954x 225i2cadm_pass mux list -Ho name,nports,device 226i2cadm_pass mux list -po name,nports,device pca954x 227i2cadm_pass port list 228i2cadm_pass port list i2csim0 229i2cadm_pass port list smbussim1 230i2cadm_pass port list smbussim1/1 231i2cadm_pass port list smbussim1/1 i2csim0/0 232i2cadm_pass port list controller 233i2cadm_pass port list multiplexor 234i2cadm_pass port list i2csim0/0 i2csim0/0/0x70/4 235i2cadm_pass port list i2csim0/0/0x70/0/0x71/7 236i2cadm_check_output "1:1" port list -Hpo ndevs,tdevs i2csim0/0/0x70/0/0x71/7 237i2cadm_check_output "4:4" port list -Hpo name,portno i2csim0/0/0x70/4 238i2cadm_check_output "controller" port list -Hpo type smbussim1/1 239i2cadm_pass port map i2csim0/0 240i2cadm_pass port map i2csim0/0/0x70/3 241i2cadm_pass port map i2csim0/0/0x70/0/0x71/7 242i2cadm_pass port map smbussim1/1 243i2cadm_pass port map -Ho addr,major,driver i2csim0/0 244i2cadm_pass port map -po count,type i2csim0/0 245 246if (( i2c_exit == 0 )); then 247 printf "All tests passed successfully!\n" 248fi 249 250exit $i2c_exit 251