1*4e9514d6Skrw /* $OpenBSD: nvmeio.h,v 1.1 2024/05/24 12:04:07 krw Exp $ */ 2*4e9514d6Skrw /* 3*4e9514d6Skrw * Copyright (c) 2023 Kenneth R Westerback <krw@openbsd.org> 4*4e9514d6Skrw * 5*4e9514d6Skrw * Permission to use, copy, modify, and distribute this software for any 6*4e9514d6Skrw * purpose with or without fee is hereby granted, provided that the above 7*4e9514d6Skrw * copyright notice and this permission notice appear in all copies. 8*4e9514d6Skrw * 9*4e9514d6Skrw * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*4e9514d6Skrw * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*4e9514d6Skrw * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*4e9514d6Skrw * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*4e9514d6Skrw * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*4e9514d6Skrw * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*4e9514d6Skrw * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*4e9514d6Skrw */ 17*4e9514d6Skrw 18*4e9514d6Skrw #define NVME_PASSTHROUGH_CMD _IOWR('n', 0, struct nvme_pt_cmd) 19*4e9514d6Skrw 20*4e9514d6Skrw struct nvme_pt_status { 21*4e9514d6Skrw int ps_dv_unit; 22*4e9514d6Skrw int ps_nsid; 23*4e9514d6Skrw int ps_flags; 24*4e9514d6Skrw uint32_t ps_csts; 25*4e9514d6Skrw uint32_t ps_cc; 26*4e9514d6Skrw }; 27*4e9514d6Skrw 28*4e9514d6Skrw struct nvme_pt_cmd { 29*4e9514d6Skrw /* Commands may arrive via /dev/bio. */ 30*4e9514d6Skrw struct bio pt_bio; 31*4e9514d6Skrw 32*4e9514d6Skrw /* The sqe fields that the caller may specify. */ 33*4e9514d6Skrw uint8_t pt_opcode; 34*4e9514d6Skrw uint32_t pt_nsid; 35*4e9514d6Skrw uint32_t pt_cdw10; 36*4e9514d6Skrw uint32_t pt_cdw11; 37*4e9514d6Skrw uint32_t pt_cdw12; 38*4e9514d6Skrw uint32_t pt_cdw13; 39*4e9514d6Skrw uint32_t pt_cdw14; 40*4e9514d6Skrw uint32_t pt_cdw15; 41*4e9514d6Skrw 42*4e9514d6Skrw caddr_t pt_status; 43*4e9514d6Skrw uint32_t pt_statuslen; 44*4e9514d6Skrw 45*4e9514d6Skrw caddr_t pt_databuf; /* User space address. */ 46*4e9514d6Skrw uint32_t pt_databuflen; /* Length of buffer. */ 47*4e9514d6Skrw }; 48