Index: src/sys/dev/ic/mpt_mpilib.h =================================================================== RCS file: /cvsroot/src/sys/dev/ic/mpt_mpilib.h,v retrieving revision 1.6 diff -u -r1.6 mpt_mpilib.h --- src/sys/dev/ic/mpt_mpilib.h 10 Feb 2024 18:43:52 -0000 1.6 +++ src/sys/dev/ic/mpt_mpilib.h 25 Jun 2026 16:13:55 -0000 @@ -1980,6 +1980,7 @@ #define MPI_RAIDVOL0_STATUS_STATE_OPTIMAL (0x00) #define MPI_RAIDVOL0_STATUS_STATE_DEGRADED (0x01) #define MPI_RAIDVOL0_STATUS_STATE_FAILED (0x02) +#define MPI_RAIDVOL0_STATUS_STATE_MISSING (0x03) typedef struct _RAID_VOL0_SETTINGS { Index: src/sys/dev/ic/mpt_netbsd.c =================================================================== RCS file: /cvsroot/src/sys/dev/ic/mpt_netbsd.c,v retrieving revision 1.40 diff -u -r1.40 mpt_netbsd.c --- src/sys/dev/ic/mpt_netbsd.c 9 Feb 2024 22:08:34 -0000 1.40 +++ src/sys/dev/ic/mpt_netbsd.c 25 Jun 2026 16:13:55 -0000 @@ -1481,6 +1481,151 @@ } break; + case MPI_EVENT_INTEGRATED_RAID: +#define MSG_LEN 64 +#define ERR_LEN 32 + char raid_msg[MSG_LEN], err_msg[ERR_LEN]; + EVENT_DATA_RAID *data = (EVENT_DATA_RAID *) msg->Data; + uint32_t sstatus = le32toh(data->SettingsStatus); + uint8_t sflags = sstatus & 0xff; + uint8_t sstate = (sstatus >> 8) & 0xff; + + switch(data->ReasonCode) { + case MPI_EVENT_RAID_RC_VOLUME_CREATED: + snprintf(raid_msg, MSG_LEN, + "volume %d created", data->VolumeID); + break; + case MPI_EVENT_RAID_RC_VOLUME_DELETED: + snprintf(raid_msg, MSG_LEN, + "volume %d deleted", data->VolumeID); + break; + case MPI_EVENT_RAID_RC_VOLUME_SETTINGS_CHANGED: + snprintf(raid_msg, MSG_LEN, + "volume %d settings changed", + data->VolumeID); + break; + case MPI_EVENT_RAID_RC_VOLUME_STATUS_CHANGED: + snprintf(raid_msg, MSG_LEN, + "volume %d status ", data->VolumeID); + switch (sstate) { + case MPI_RAIDVOL0_STATUS_STATE_OPTIMAL: + strncat(raid_msg, "optimal", MSG_LEN - 1); + break; + case MPI_RAIDVOL0_STATUS_STATE_DEGRADED: + strncat(raid_msg, "degraded", MSG_LEN - 1); + break; + case MPI_RAIDVOL0_STATUS_STATE_FAILED: + strncat(raid_msg, "failed", MSG_LEN - 1); + break; + case MPI_RAIDVOL0_STATUS_STATE_MISSING: + strncat(raid_msg, "missing", MSG_LEN - 1); + break; + default: + snprintf(err_msg, ERR_LEN, "unknown: 0x%02x%02x", sstate, sflags); + strncat(raid_msg, err_msg, MSG_LEN - 1); + break; + } + switch (sflags) { + case MPI_RAIDVOL0_STATUS_FLAG_ENABLED: + strncat(raid_msg, ", enabled", MSG_LEN - 1); + break; + case MPI_RAIDVOL0_STATUS_FLAG_QUIESCED: + strncat(raid_msg, ", quiesced", MSG_LEN - 1); + break; + case MPI_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS: + strncat(raid_msg, ", resyncing", MSG_LEN - 1); + break; + } + break; + case MPI_EVENT_RAID_RC_VOLUME_PHYSDISK_CHANGED: + snprintf(raid_msg, MSG_LEN, + "volume of physdisk %d (id %d) changed", + data->PhysDiskNum, data->VolumeID); + break; + case MPI_EVENT_RAID_RC_PHYSDISK_CREATED: + snprintf(raid_msg, MSG_LEN, + "physdisk %d (id %d) created", + data->PhysDiskNum, data->VolumeID); + break; + case MPI_EVENT_RAID_RC_PHYSDISK_DELETED: + snprintf(raid_msg, MSG_LEN, + "physdisk %d (id %d) deleted", + data->PhysDiskNum, data->VolumeID); + break; + case MPI_EVENT_RAID_RC_PHYSDISK_SETTINGS_CHANGED: + snprintf(raid_msg, MSG_LEN, + "physdisk %d (id %d) settings changed", + data->PhysDiskNum, data->VolumeID); + break; + case MPI_EVENT_RAID_RC_PHYSDISK_STATUS_CHANGED: + snprintf(raid_msg, MSG_LEN, + "physdisk %d (id %d) status ", + data->PhysDiskNum, data->VolumeID); + switch (sstate) { + case MPI_PHYSDISK0_STATUS_ONLINE: + strncat(raid_msg, "online", MSG_LEN - 1); + break; + case MPI_PHYSDISK0_STATUS_MISSING: + strncat(raid_msg, "missing", MSG_LEN - 1); + break; + case MPI_PHYSDISK0_STATUS_NOT_COMPATIBLE: + strncat(raid_msg, "not compatible", + MSG_LEN - 1); + break; + case MPI_PHYSDISK0_STATUS_FAILED: + strncat(raid_msg, "failed", MSG_LEN - 1); + break; + case MPI_PHYSDISK0_STATUS_INITIALIZING: + strncat(raid_msg, "initializing", MSG_LEN - 1); + break; + case MPI_PHYSDISK0_STATUS_OFFLINE_REQUESTED: + strncat(raid_msg, "offline requested", + MSG_LEN - 1); + break; + case MPI_PHYSDISK0_STATUS_FAILED_REQUESTED: + strncat(raid_msg, "failed requested", + MSG_LEN - 1); + break; + case MPI_PHYSDISK0_STATUS_OTHER_OFFLINE: + strncat(raid_msg, "offline", MSG_LEN - 1); + break; + default: + strncat(raid_msg, "unknown", MSG_LEN - 1); + break; + } + switch (sflags) { + case MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC: + strncat(raid_msg, ", out of sync", + MSG_LEN - 1); + break; + case MPI_PHYSDISK0_STATUS_FLAG_QUIESCED: + strncat(raid_msg, ", quiesced", MSG_LEN - 1); + break; + } + break; + case MPI_EVENT_RAID_RC_DOMAIN_VAL_NEEDED: + snprintf(raid_msg, MSG_LEN, + "physdisk %d domain val needed", data->PhysDiskNum); + break; + case MPI_EVENT_RAID_RC_SMART_DATA: + snprintf(raid_msg, MSG_LEN, + "smart data ASC/ASCQ: 0x%02x/0x%02x", + data->ASC, data->ASCQ); + break; + case MPI_EVENT_RAID_RC_REPLACE_ACTION_STARTED: + snprintf(raid_msg, MSG_LEN, + "replace physdisk %d started", data->PhysDiskNum); + break; + default: + snprintf(raid_msg, MSG_LEN, + "unknown reason code"); + break; + } + mpt_prt(mpt, "Integrated RAID Event: %s", raid_msg); +#undef MSG_LEN +#undef ERR_LEN + break; + case MPI_EVENT_SAS_DEVICE_STATUS_CHANGE: case MPI_EVENT_SAS_DISCOVERY: /* ignore these events for now */ @@ -1493,7 +1638,7 @@ break; default: - mpt_prt(mpt, "Unknown async event: 0x%x", msg->Event); + mpt_prt(mpt, "Unknown async event: 0x%x", le32toh(msg->Event)); break; } Index: src/etc/etc.sparc64/MAKEDEV.conf =================================================================== RCS file: /cvsroot/src/etc/etc.sparc64/MAKEDEV.conf,v retrieving revision 1.20 diff -u -r1.20 MAKEDEV.conf --- src/etc/etc.sparc64/MAKEDEV.conf 5 Apr 2020 14:09:17 -0000 1.20 +++ src/etc/etc.sparc64/MAKEDEV.conf 25 Jun 2026 16:13:55 -0000 @@ -21,6 +21,7 @@ makedev altq makedev wscons makedev kttcp + makedev bio makedev cfs ;;