diff options
author | Dan Williams <dan.j.williams@intel.com> | 2016-04-27 18:46:15 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2016-05-05 22:02:45 -0400 |
commit | 6634fb06906f52a3a3125e88681a7fa6e353f31d (patch) | |
tree | aca18d10ccb2fe94220d69c328224d3d26a31d3a | |
parent | 87554098fec74a6c4a8cbea0d9adea2e8868e9e4 (diff) |
tools/testing/nvdimm: ND_CMD_CALL support
Enable nfit_test to use nd_cmd_pkg marshaling.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r-- | tools/testing/nvdimm/test/nfit.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c index ed899a411c22..e09a300eb8e0 100644 --- a/tools/testing/nvdimm/test/nfit.c +++ b/tools/testing/nvdimm/test/nfit.c | |||
@@ -336,6 +336,7 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc, | |||
336 | { | 336 | { |
337 | struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc); | 337 | struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc); |
338 | struct nfit_test *t = container_of(acpi_desc, typeof(*t), acpi_desc); | 338 | struct nfit_test *t = container_of(acpi_desc, typeof(*t), acpi_desc); |
339 | unsigned int func = cmd; | ||
339 | int i, rc = 0, __cmd_rc; | 340 | int i, rc = 0, __cmd_rc; |
340 | 341 | ||
341 | if (!cmd_rc) | 342 | if (!cmd_rc) |
@@ -346,7 +347,21 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc, | |||
346 | struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); | 347 | struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); |
347 | unsigned long cmd_mask = nvdimm_cmd_mask(nvdimm); | 348 | unsigned long cmd_mask = nvdimm_cmd_mask(nvdimm); |
348 | 349 | ||
349 | if (!nfit_mem || !test_bit(cmd, &cmd_mask)) | 350 | if (!nfit_mem) |
351 | return -ENOTTY; | ||
352 | |||
353 | if (cmd == ND_CMD_CALL) { | ||
354 | struct nd_cmd_pkg *call_pkg = buf; | ||
355 | |||
356 | buf_len = call_pkg->nd_size_in + call_pkg->nd_size_out; | ||
357 | buf = (void *) call_pkg->nd_payload; | ||
358 | func = call_pkg->nd_command; | ||
359 | if (call_pkg->nd_family != nfit_mem->family) | ||
360 | return -ENOTTY; | ||
361 | } | ||
362 | |||
363 | if (!test_bit(cmd, &cmd_mask) | ||
364 | || !test_bit(func, &nfit_mem->dsm_mask)) | ||
350 | return -ENOTTY; | 365 | return -ENOTTY; |
351 | 366 | ||
352 | /* lookup label space for the given dimm */ | 367 | /* lookup label space for the given dimm */ |
@@ -357,7 +372,7 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc, | |||
357 | if (i >= ARRAY_SIZE(handle)) | 372 | if (i >= ARRAY_SIZE(handle)) |
358 | return -ENXIO; | 373 | return -ENXIO; |
359 | 374 | ||
360 | switch (cmd) { | 375 | switch (func) { |
361 | case ND_CMD_GET_CONFIG_SIZE: | 376 | case ND_CMD_GET_CONFIG_SIZE: |
362 | rc = nfit_test_cmd_get_config_size(buf, buf_len); | 377 | rc = nfit_test_cmd_get_config_size(buf, buf_len); |
363 | break; | 378 | break; |
@@ -378,7 +393,7 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc, | |||
378 | if (!nd_desc || !test_bit(cmd, &nd_desc->cmd_mask)) | 393 | if (!nd_desc || !test_bit(cmd, &nd_desc->cmd_mask)) |
379 | return -ENOTTY; | 394 | return -ENOTTY; |
380 | 395 | ||
381 | switch (cmd) { | 396 | switch (func) { |
382 | case ND_CMD_ARS_CAP: | 397 | case ND_CMD_ARS_CAP: |
383 | rc = nfit_test_cmd_ars_cap(buf, buf_len); | 398 | rc = nfit_test_cmd_ars_cap(buf, buf_len); |
384 | break; | 399 | break; |