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)) |