|
Lines 1-58
Link Here
|
| 1 |
--- os_freebsd.cpp.orig 2017-04-24 09:34:16.000000000 -0700 |
|
|
| 2 |
+++ os_freebsd.cpp 2018-02-27 19:15:54.338861000 +0000 |
| 3 |
@@ -16,6 +16,8 @@ |
| 4 |
*/ |
| 5 |
|
| 6 |
#include <stdio.h> |
| 7 |
+#include <sys/endian.h> |
| 8 |
+#include <sys/param.h> |
| 9 |
#include <sys/types.h> |
| 10 |
#include <dirent.h> |
| 11 |
#include <fcntl.h> |
| 12 |
@@ -484,7 +486,7 @@ |
| 13 |
} |
| 14 |
nsid = 0xFFFFFFFF; // broadcast id |
| 15 |
} |
| 16 |
- else if (sscanf(dev, NVME_CTRLR_PREFIX"%d"NVME_NS_PREFIX"%d%c", |
| 17 |
+ else if (sscanf(dev, NVME_CTRLR_PREFIX"%d" NVME_NS_PREFIX "%d%c", |
| 18 |
&ctrlid, &nsid, &tmp) == 2) |
| 19 |
{ |
| 20 |
if(ctrlid < 0 || nsid < 0) { |
| 21 |
@@ -521,16 +523,20 @@ |
| 22 |
struct nvme_pt_command pt; |
| 23 |
memset(&pt, 0, sizeof(pt)); |
| 24 |
|
| 25 |
+#if __FreeBSD_version >= 1200058 && __FreeBSD_version < 1200081 |
| 26 |
+ pt.cmd.opc_fuse = NVME_CMD_SET_OPC(in.opcode); |
| 27 |
+#else |
| 28 |
pt.cmd.opc = in.opcode; |
| 29 |
+#endif |
| 30 |
- pt.cmd.nsid = in.nsid; |
| 31 |
+ pt.cmd.nsid = htole32(in.nsid); |
| 32 |
pt.buf = in.buffer; |
| 33 |
pt.len = in.size; |
| 34 |
- pt.cmd.cdw10 = in.cdw10; |
| 35 |
- pt.cmd.cdw11 = in.cdw11; |
| 36 |
- pt.cmd.cdw12 = in.cdw12; |
| 37 |
- pt.cmd.cdw13 = in.cdw13; |
| 38 |
- pt.cmd.cdw14 = in.cdw14; |
| 39 |
- pt.cmd.cdw15 = in.cdw15; |
| 40 |
+ pt.cmd.cdw10 = htole32(in.cdw10); |
| 41 |
+ pt.cmd.cdw11 = htole32(in.cdw11); |
| 42 |
+ pt.cmd.cdw12 = htole32(in.cdw12); |
| 43 |
+ pt.cmd.cdw13 = htole32(in.cdw13); |
| 44 |
+ pt.cmd.cdw14 = htole32(in.cdw14); |
| 45 |
+ pt.cmd.cdw15 = htole32(in.cdw15); |
| 46 |
pt.is_read = 1; // should we use in.direction()? |
| 47 |
|
| 48 |
int status = ioctl(get_fd(), NVME_PASSTHROUGH_CMD, &pt); |
| 49 |
@@ -538,6 +544,9 @@ |
| 50 |
if (status < 0) |
| 51 |
return set_err(errno, "NVME_PASSTHROUGH_CMD: %s", strerror(errno)); |
| 52 |
|
| 53 |
+#if __FreeBSD_version >= 1200058 |
| 54 |
+ nvme_completion_swapbytes(&pt.cpl); |
| 55 |
+#endif |
| 56 |
out.result=pt.cpl.cdw0; // Command specific result (DW0) |
| 57 |
|
| 58 |
if (nvme_completion_is_error(&pt.cpl)) |