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 /tools/testing/nvdimm | |
| 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>
Diffstat (limited to 'tools/testing/nvdimm')
| -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; |
