diff --git a/sys/cam/mmc/mmc_da.c b/sys/cam/mmc/mmc_da.c --- a/sys/cam/mmc/mmc_da.c +++ b/sys/cam/mmc/mmc_da.c @@ -1592,8 +1592,38 @@ part->disk->d_fwsectors = 0; part->disk->d_fwheads = 0; - if (sdda_mmcsd_compat) - disk_add_alias(part->disk, "mmcsd"); + if (sdda_mmcsd_compat) { +#define MMCSD_COMPAT_PREFIX "mmcsd" + char cname[SDDA_PART_NAMELEN]; /* This equals the mmcsd namelen. */ + + switch (type) { + case EXT_CSD_PART_CONFIG_ACC_RPMB: + /* Should never be seen. */ + snprintf(cname, sizeof(cname), MMCSD_COMPAT_PREFIX + "d%drpmb", periph->unit_number); + break; + case EXT_CSD_PART_CONFIG_ACC_BOOT0: + case EXT_CSD_PART_CONFIG_ACC_BOOT1: + snprintf(cname, sizeof(cname), MMCSD_COMPAT_PREFIX + "%dboot", periph->unit_number); + break; + case EXT_CSD_PART_CONFIG_ACC_DEFAULT: + memcpy(cname, MMCSD_COMPAT_PREFIX, + sizeof(MMCSD_COMPAT_PREFIX)); + break; + case EXT_CSD_PART_CONFIG_ACC_GP0: + case EXT_CSD_PART_CONFIG_ACC_GP1: + case EXT_CSD_PART_CONFIG_ACC_GP2: + case EXT_CSD_PART_CONFIG_ACC_GP3: + snprintf(cname, sizeof(cname), MMCSD_COMPAT_PREFIX + "d%dgp", periph->unit_number); + break; + default: + panic("%s: Unknown type %d for disk alias\n", __func__, type); + } + disk_add_alias(part->disk, cname); +#undef MMCSD_COMPAT_PREFIX + } /* * Acquire a reference to the periph before we register with GEOM.