nfit: Add Hyper-V NVDIMM DSM command set to white list
Add the Hyper-V _DSM command set to the white list of NVDIMM command sets. This command set is documented at http://www.uefi.org/RFIC_LIST (see "Virtual NVDIMM 0x1901"). Signed-off-by: Dexuan Cui <decui@microsoft.com> Reviewed-by: Michael Kelley <mikelley@microsoft.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
Родитель
43f89877f2
Коммит
1194c41331
|
@ -1846,9 +1846,17 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc,
|
||||||
dev_set_drvdata(&adev_dimm->dev, nfit_mem);
|
dev_set_drvdata(&adev_dimm->dev, nfit_mem);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Until standardization materializes we need to consider 4
|
* There are 4 "legacy" NVDIMM command sets
|
||||||
* different command sets. Note, that checking for function0 (bit0)
|
* (NVDIMM_FAMILY_{INTEL,MSFT,HPE1,HPE2}) that were created before
|
||||||
* tells us if any commands are reachable through this GUID.
|
* an EFI working group was established to constrain this
|
||||||
|
* proliferation. The nfit driver probes for the supported command
|
||||||
|
* set by GUID. Note, if you're a platform developer looking to add
|
||||||
|
* a new command set to this probe, consider using an existing set,
|
||||||
|
* or otherwise seek approval to publish the command set at
|
||||||
|
* http://www.uefi.org/RFIC_LIST.
|
||||||
|
*
|
||||||
|
* Note, that checking for function0 (bit0) tells us if any commands
|
||||||
|
* are reachable through this GUID.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i <= NVDIMM_FAMILY_MAX; i++)
|
for (i = 0; i <= NVDIMM_FAMILY_MAX; i++)
|
||||||
if (acpi_check_dsm(adev_dimm->handle, to_nfit_uuid(i), 1, 1))
|
if (acpi_check_dsm(adev_dimm->handle, to_nfit_uuid(i), 1, 1))
|
||||||
|
@ -1871,6 +1879,8 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc,
|
||||||
dsm_mask &= ~(1 << 8);
|
dsm_mask &= ~(1 << 8);
|
||||||
} else if (nfit_mem->family == NVDIMM_FAMILY_MSFT) {
|
} else if (nfit_mem->family == NVDIMM_FAMILY_MSFT) {
|
||||||
dsm_mask = 0xffffffff;
|
dsm_mask = 0xffffffff;
|
||||||
|
} else if (nfit_mem->family == NVDIMM_FAMILY_HYPERV) {
|
||||||
|
dsm_mask = 0x1f;
|
||||||
} else {
|
} else {
|
||||||
dev_dbg(dev, "unknown dimm command family\n");
|
dev_dbg(dev, "unknown dimm command family\n");
|
||||||
nfit_mem->family = -1;
|
nfit_mem->family = -1;
|
||||||
|
@ -3714,6 +3724,7 @@ static __init int nfit_init(void)
|
||||||
guid_parse(UUID_NFIT_DIMM_N_HPE1, &nfit_uuid[NFIT_DEV_DIMM_N_HPE1]);
|
guid_parse(UUID_NFIT_DIMM_N_HPE1, &nfit_uuid[NFIT_DEV_DIMM_N_HPE1]);
|
||||||
guid_parse(UUID_NFIT_DIMM_N_HPE2, &nfit_uuid[NFIT_DEV_DIMM_N_HPE2]);
|
guid_parse(UUID_NFIT_DIMM_N_HPE2, &nfit_uuid[NFIT_DEV_DIMM_N_HPE2]);
|
||||||
guid_parse(UUID_NFIT_DIMM_N_MSFT, &nfit_uuid[NFIT_DEV_DIMM_N_MSFT]);
|
guid_parse(UUID_NFIT_DIMM_N_MSFT, &nfit_uuid[NFIT_DEV_DIMM_N_MSFT]);
|
||||||
|
guid_parse(UUID_NFIT_DIMM_N_HYPERV, &nfit_uuid[NFIT_DEV_DIMM_N_HYPERV]);
|
||||||
|
|
||||||
nfit_wq = create_singlethread_workqueue("nfit");
|
nfit_wq = create_singlethread_workqueue("nfit");
|
||||||
if (!nfit_wq)
|
if (!nfit_wq)
|
||||||
|
|
|
@ -34,11 +34,14 @@
|
||||||
/* https://msdn.microsoft.com/library/windows/hardware/mt604741 */
|
/* https://msdn.microsoft.com/library/windows/hardware/mt604741 */
|
||||||
#define UUID_NFIT_DIMM_N_MSFT "1ee68b36-d4bd-4a1a-9a16-4f8e53d46e05"
|
#define UUID_NFIT_DIMM_N_MSFT "1ee68b36-d4bd-4a1a-9a16-4f8e53d46e05"
|
||||||
|
|
||||||
|
/* http://www.uefi.org/RFIC_LIST (see "Virtual NVDIMM 0x1901") */
|
||||||
|
#define UUID_NFIT_DIMM_N_HYPERV "5746c5f2-a9a2-4264-ad0e-e4ddc9e09e80"
|
||||||
|
|
||||||
#define ACPI_NFIT_MEM_FAILED_MASK (ACPI_NFIT_MEM_SAVE_FAILED \
|
#define ACPI_NFIT_MEM_FAILED_MASK (ACPI_NFIT_MEM_SAVE_FAILED \
|
||||||
| ACPI_NFIT_MEM_RESTORE_FAILED | ACPI_NFIT_MEM_FLUSH_FAILED \
|
| ACPI_NFIT_MEM_RESTORE_FAILED | ACPI_NFIT_MEM_FLUSH_FAILED \
|
||||||
| ACPI_NFIT_MEM_NOT_ARMED | ACPI_NFIT_MEM_MAP_FAILED)
|
| ACPI_NFIT_MEM_NOT_ARMED | ACPI_NFIT_MEM_MAP_FAILED)
|
||||||
|
|
||||||
#define NVDIMM_FAMILY_MAX NVDIMM_FAMILY_MSFT
|
#define NVDIMM_FAMILY_MAX NVDIMM_FAMILY_HYPERV
|
||||||
|
|
||||||
#define NVDIMM_STANDARD_CMDMASK \
|
#define NVDIMM_STANDARD_CMDMASK \
|
||||||
(1 << ND_CMD_SMART | 1 << ND_CMD_SMART_THRESHOLD | 1 << ND_CMD_DIMM_FLAGS \
|
(1 << ND_CMD_SMART | 1 << ND_CMD_SMART_THRESHOLD | 1 << ND_CMD_DIMM_FLAGS \
|
||||||
|
@ -94,6 +97,7 @@ enum nfit_uuids {
|
||||||
NFIT_DEV_DIMM_N_HPE1 = NVDIMM_FAMILY_HPE1,
|
NFIT_DEV_DIMM_N_HPE1 = NVDIMM_FAMILY_HPE1,
|
||||||
NFIT_DEV_DIMM_N_HPE2 = NVDIMM_FAMILY_HPE2,
|
NFIT_DEV_DIMM_N_HPE2 = NVDIMM_FAMILY_HPE2,
|
||||||
NFIT_DEV_DIMM_N_MSFT = NVDIMM_FAMILY_MSFT,
|
NFIT_DEV_DIMM_N_MSFT = NVDIMM_FAMILY_MSFT,
|
||||||
|
NFIT_DEV_DIMM_N_HYPERV = NVDIMM_FAMILY_HYPERV,
|
||||||
NFIT_SPA_VOLATILE,
|
NFIT_SPA_VOLATILE,
|
||||||
NFIT_SPA_PM,
|
NFIT_SPA_PM,
|
||||||
NFIT_SPA_DCR,
|
NFIT_SPA_DCR,
|
||||||
|
|
|
@ -243,6 +243,7 @@ struct nd_cmd_pkg {
|
||||||
#define NVDIMM_FAMILY_HPE1 1
|
#define NVDIMM_FAMILY_HPE1 1
|
||||||
#define NVDIMM_FAMILY_HPE2 2
|
#define NVDIMM_FAMILY_HPE2 2
|
||||||
#define NVDIMM_FAMILY_MSFT 3
|
#define NVDIMM_FAMILY_MSFT 3
|
||||||
|
#define NVDIMM_FAMILY_HYPERV 4
|
||||||
|
|
||||||
#define ND_IOCTL_CALL _IOWR(ND_IOCTL, ND_CMD_CALL,\
|
#define ND_IOCTL_CALL _IOWR(ND_IOCTL, ND_CMD_CALL,\
|
||||||
struct nd_cmd_pkg)
|
struct nd_cmd_pkg)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче