Skip to content
Snippets Groups Projects
Commit dcdf4063 authored by chrfranke's avatar chrfranke
Browse files

os_win32.cpp: Clear ProtocolDataRequestSubValue for NVMe Get Log Page

commands because newer drivers pass this value as CDW12 (LPOL) to the drive.
This fixes log page access for NVMe 1.2.1+ drives (#1201).

Thanks to Vikram Manja for bug report and testing.

git-svn-id: https://svn.code.sf.net/p/smartmontools/code/trunk@4920 4ea69e1a-61f1-4043-bf83-b5c94c648137
parent 675d9f38
Branches
No related tags found
No related merge requests found
$Id$ $Id$
2019-06-17 Christian Franke <franke@computer.org>
os_win32.cpp: Clear ProtocolDataRequestSubValue for NVMe Get Log Page
commands because newer drivers pass this value as CDW12 (LPOL) to the
drive. This fixes log page access for NVMe 1.2.1+ drives (#1201).
Thanks to Vikram Manja for bug report and testing.
2019-06-12 Christian Franke <franke@computer.org> 2019-06-12 Christian Franke <franke@computer.org>
os_netbsd.cpp: Fix device scan crash on empty name list. os_netbsd.cpp: Fix device scan crash on empty name list.
......
...@@ -3858,18 +3858,21 @@ bool win10_nvme_device::nvme_pass_through(const nvme_cmd_in & in, nvme_cmd_out & ...@@ -3858,18 +3858,21 @@ bool win10_nvme_device::nvme_pass_through(const nvme_cmd_in & in, nvme_cmd_out &
spsq->PropertyQuery.PropertyId = win10::StorageDeviceProtocolSpecificProperty; spsq->PropertyQuery.PropertyId = win10::StorageDeviceProtocolSpecificProperty;
spsq->ProtocolSpecific.DataType = win10::NVMeDataTypeIdentify; spsq->ProtocolSpecific.DataType = win10::NVMeDataTypeIdentify;
spsq->ProtocolSpecific.ProtocolDataRequestValue = in.cdw10; spsq->ProtocolSpecific.ProtocolDataRequestValue = in.cdw10;
spsq->ProtocolSpecific.ProtocolDataRequestSubValue = in.nsid;
break; break;
case smartmontools::nvme_admin_get_log_page: case smartmontools::nvme_admin_get_log_page:
spsq->PropertyQuery.PropertyId = win10::StorageDeviceProtocolSpecificProperty; spsq->PropertyQuery.PropertyId = win10::StorageDeviceProtocolSpecificProperty;
spsq->ProtocolSpecific.DataType = win10::NVMeDataTypeLogPage; spsq->ProtocolSpecific.DataType = win10::NVMeDataTypeLogPage;
spsq->ProtocolSpecific.ProtocolDataRequestValue = in.cdw10 & 0xff; // LID only ? spsq->ProtocolSpecific.ProtocolDataRequestValue = in.cdw10 & 0xff; // LID only ?
// Older drivers (Win10 1607) ignore SubValue
// Newer drivers (Win10 1809) pass SubValue to CDW12 (DW aligned)
spsq->ProtocolSpecific.ProtocolDataRequestSubValue = 0; // in.cdw12 (LPOL, NVMe 1.2.1+) ?
break; break;
// TODO: nvme_admin_get_features // TODO: nvme_admin_get_features
default: default:
return set_err(ENOSYS, "NVMe admin command 0x%02x not supported", in.opcode); return set_err(ENOSYS, "NVMe admin command 0x%02x not supported", in.opcode);
} }
spsq->ProtocolSpecific.ProtocolDataRequestSubValue = in.nsid; // ?
spsq->ProtocolSpecific.ProtocolDataOffset = sizeof(spsq->ProtocolSpecific); spsq->ProtocolSpecific.ProtocolDataOffset = sizeof(spsq->ProtocolSpecific);
spsq->ProtocolSpecific.ProtocolDataLength = in.size; spsq->ProtocolSpecific.ProtocolDataLength = in.size;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment