xref: /aosp_15_r20/external/sg3_utils/scripts/55-scsi-sg3_id.rules (revision 44704f698541f6367e81f991ef8bb54ccbf3fc18)
1*44704f69SBart Van Assche# SCSI-ID mappings for sg3_utils
2*44704f69SBart Van Assche
3*44704f69SBart Van AsscheACTION=="remove", GOTO="sg3_utils_id_end"
4*44704f69SBart Van Assche
5*44704f69SBart Van AsscheSUBSYSTEM=="block", GOTO="block_dev"
6*44704f69SBart Van Assche
7*44704f69SBart Van Assche# SCSI devices other than "block"
8*44704f69SBart Van Assche# This code used to live in 60-persistent-storage-tape.rules.
9*44704f69SBart Van Assche
10*44704f69SBart Van Assche# type 8 devices are "Medium Changers"
11*44704f69SBart Van AsscheSUBSYSTEM=="scsi_generic", KERNEL=="sg*[0-9]", ATTRS{type}=="8", \
12*44704f69SBart Van Assche  GOTO="scsi_inquiry"
13*44704f69SBart Van AsscheSUBSYSTEM=="scsi_changer", KERNEL=="sch*[0-9]", ATTRS{type}=="8", \
14*44704f69SBart Van Assche  ENV{.INQUIRY_DEV}="$root/bsg/$id", GOTO="scsi_inquiry"
15*44704f69SBart Van Assche
16*44704f69SBart Van Assche# tapes need to be accessed through their bsg device
17*44704f69SBart Van AsscheKERNEL=="st*[0-9]|nst*[0-9]", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", \
18*44704f69SBart Van Assche  ENV{.INQUIRY_DEV}="$root/bsg/$id", GOTO="scsi_inquiry"
19*44704f69SBart Van Assche
20*44704f69SBart Van AsscheGOTO="sg3_utils_id_end"
21*44704f69SBart Van Assche
22*44704f69SBart Van AsscheLABEL="block_dev"
23*44704f69SBart Van Assche
24*44704f69SBart Van Assche# Import values for partitions
25*44704f69SBart Van AsscheENV{DEVTYPE}=="partition", IMPORT{parent}="ID_SCSI", IMPORT{parent}="SCSI_*"
26*44704f69SBart Van AsscheENV{DEVTYPE}=="partition", ENV{ID_SCSI}=="1", GOTO="compat"
27*44704f69SBart Van Assche
28*44704f69SBart Van Assche# Handle non-SCSI devices that implement SCSI inquiry
29*44704f69SBart Van AsscheKERNEL=="cciss*", ENV{DEVTYPE}=="disk", GOTO="sg_inquiry"
30*44704f69SBart Van Assche
31*44704f69SBart Van Assche# Ignore everything else except sd/sr
32*44704f69SBart Van AsscheKERNEL!="sd*[!0-9]|sr*", GOTO="sg3_utils_id_end"
33*44704f69SBart Van Assche
34*44704f69SBart Van Assche# SCSI INQUIRY values
35*44704f69SBart Van Assche# If the 'inquiry' sysfs attribute is present the kernel will already
36*44704f69SBart Van Assche# have scanned for VPD pages, so if the vpd page attribute is not
37*44704f69SBart Van Assche# present it is not supported (or deemed unsafe to access).
38*44704f69SBart Van Assche# Hence we can skip the call to sg_inq and avoid I/O altogether.
39*44704f69SBart Van Assche# Set 'ID_SCSI_INQUIRY=0' in an earlier udev rule if the kernel
40*44704f69SBart Van Assche# fails to scan VPD pages correctly; the rules will then fall
41*44704f69SBart Van Assche# back to calling sg_vpd directly.
42*44704f69SBart Van AsscheLABEL="scsi_inquiry"
43*44704f69SBart Van AsscheENV{ID_SCSI_INQUIRY}=="0", GOTO="sg_inquiry"
44*44704f69SBart Van Assche
45*44704f69SBart Van Assche# "inquiry" is an attribute of the scsi_device in sysfs,
46*44704f69SBart Van Assche# we obtain it by using $id after an ATTRS match.
47*44704f69SBart Van AsscheSUBSYSTEMS=="scsi", ATTRS{inquiry}=="*", KERNELS=="[0-9]*:*[0-9]", \
48*44704f69SBart Van Assche  ENV{.SYSFS_PATH}="$sys/class/scsi_device/$id/device"
49*44704f69SBart Van AsscheENV{.SYSFS_PATH}=="", GOTO="sg_inquiry"
50*44704f69SBart Van Assche
51*44704f69SBart Van AsscheIMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/inquiry --raw", \
52*44704f69SBart Van Assche  ENV{ID_SCSI}="1", ENV{ID_SCSI_INQUIRY}="1"
53*44704f69SBart Van Assche# If inquiry sysfs attribute reading it failed, fallback to sg
54*44704f69SBart Van AsscheENV{ID_SCSI}!="1", GOTO="sg_inquiry"
55*44704f69SBart Van Assche# Read VPD pages 80 (sn) and 83 (di)
56*44704f69SBart Van AsscheIMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/vpd_pg80 --raw"
57*44704f69SBart Van AsscheIMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/vpd_pg83 --raw"
58*44704f69SBart Van AsscheGOTO="compat"
59*44704f69SBart Van Assche
60*44704f69SBart Van AsscheLABEL="sg_inquiry"
61*44704f69SBart Van Assche# Handle devices that have no inquiry attributes in sysfs
62*44704f69SBart Van AsscheENV{.INQUIRY_DEV}=="", ENV{.INQUIRY_DEV}="$tempnode"
63*44704f69SBart Van Assche
64*44704f69SBart Van AsscheIMPORT{program}="/usr/bin/sg_inq --export $env{.INQUIRY_DEV}", ENV{ID_SCSI}="1"
65*44704f69SBart Van Assche# Give up if this fails, too
66*44704f69SBart Van AsscheENV{ID_SCSI}!="1", GOTO="sg3_utils_id_end"
67*44704f69SBart Van AsscheIMPORT{program}="/usr/bin/sg_inq --export --page=sn $env{.INQUIRY_DEV}"
68*44704f69SBart Van AsscheIMPORT{program}="/usr/bin/sg_inq --export --page=di $env{.INQUIRY_DEV}"
69*44704f69SBart Van Assche
70*44704f69SBart Van AsscheLABEL="compat"
71*44704f69SBart Van Assche
72*44704f69SBart Van Assche# scsi_id compat mappings
73*44704f69SBart Van AsscheENV{ID_VENDOR}!="?*", ENV{SCSI_VENDOR}=="?*", ENV{ID_VENDOR}="$env{SCSI_VENDOR}"
74*44704f69SBart Van AsscheENV{ID_VENDOR_ENC}!="?*", ENV{SCSI_VENDOR_ENC}=="?*", ENV{ID_VENDOR_ENC}="$env{SCSI_VENDOR_ENC}"
75*44704f69SBart Van AsscheENV{ID_MODEL}!="?*", ENV{SCSI_MODEL}=="?*", ENV{ID_MODEL}="$env{SCSI_MODEL}"
76*44704f69SBart Van AsscheENV{ID_MODEL_ENC}!="?*", ENV{SCSI_MODEL_ENC}=="?*", ENV{ID_MODEL_ENC}="$env{SCSI_MODEL_ENC}"
77*44704f69SBart Van AsscheENV{ID_REVISION}!="?*", ENV{SCSI_REVISION}=="?*", ENV{ID_REVISION}="$env{SCSI_REVISION}"
78*44704f69SBart Van AsscheENV{ID_TYPE}!="?*", ENV{SCSI_TYPE}=="?*", ENV{ID_TYPE}="$env{SCSI_TYPE}"
79*44704f69SBart Van AsscheENV{ID_TARGET_PORT}!="?*", ENV{SCSI_IDENT_PORT_TARGET_PORT_GROUP}=="?*", \
80*44704f69SBart Van Assche	PROGRAM="/bin/sh -c 'echo $env{SCSI_IDENT_PORT_TARGET_PORT_GROUP} | /bin/sed s/^0x//'", \
81*44704f69SBart Van Assche	ENV{ID_TARGET_PORT}="$result"
82*44704f69SBart Van Assche
83*44704f69SBart Van Assche# ID_WWN compat mapping
84*44704f69SBart Van AsscheENV{SCSI_IDENT_LUN_NAA_REGEXT}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_REGEXT}"
85*44704f69SBart Van AsscheENV{SCSI_IDENT_LUN_NAA_REG}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_REG}"
86*44704f69SBart Van AsscheENV{SCSI_IDENT_LUN_NAA_EXT}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_EXT}"
87*44704f69SBart Van AsscheENV{SCSI_IDENT_LUN_NAA_LOCAL}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_LOCAL}"
88*44704f69SBart Van Assche# ID_WWN has max 16 characters
89*44704f69SBart Van AsscheENV{ID_WWN_WITH_EXTENSION}=="?*", ENV{ID_WWN}!="?*", \
90*44704f69SBart Van Assche	PROGRAM="/bin/sh -c 'echo $env{ID_WWN_WITH_EXTENSION} | /bin/sed s/^\\\(0x.\\\{1,16\\\}\\\).*/\\1/'", \
91*44704f69SBart Van Assche	ENV{ID_WWN}="$result"
92*44704f69SBart Van Assche
93*44704f69SBart Van Assche# ata_id compatibility
94*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_ATA}=="?*", ENV{ID_BUS}="ata", ENV{ID_ATA}="1", ENV{ID_SERIAL}="$env{SCSI_IDENT_LUN_ATA}"
95*44704f69SBart Van AsscheENV{ID_SERIAL_SHORT}!="?*", ENV{SCSI_VENDOR}=="ATA", ENV{SCSI_IDENT_LUN_VENDOR}=="?*", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_VENDOR}"
96*44704f69SBart Van Assche# Compat ID_SERIAL setting
97*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA_REGEXT}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA_REGEXT}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA_REGEXT}"
98*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA_REG}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA_REG}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA_REG}"
99*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA_EXT}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA_EXT}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA_EXT}"
100*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_EUI64}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="2$env{SCSI_IDENT_LUN_EUI64}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_EUI64}"
101*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAME}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="8$env{SCSI_IDENT_LUN_NAME}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAME}"
102*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_T10}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="1$env{SCSI_IDENT_LUN_T10}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_T10}"
103*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA_LOCAL}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA_LOCAL}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA_LOCAL}"
104*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_VENDOR}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="0$env{SCSI_VENDOR}_$env{SCSI_MODEL}_$env{SCSI_IDENT_LUN_VENDOR}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_VENDOR}"
105*44704f69SBart Van AsscheENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_SERIAL}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="S$env{SCSI_VENDOR}_$env{SCSI_MODEL}_$env{SCSI_IDENT_SERIAL}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_SERIAL}"
106*44704f69SBart Van Assche
107*44704f69SBart Van Assche# Compat ID_SCSI_SERIAL setting
108*44704f69SBart Van AsscheENV{ID_SCSI_SERIAL}!="?*", ENV{SCSI_IDENT_SERIAL}=="?*", ENV{ID_SCSI_SERIAL}="$env{SCSI_IDENT_SERIAL}"
109*44704f69SBart Van AsscheLABEL="sg3_utils_id_end"
110