mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-07 00:50:50 +00:00
Pass data pointers to the driver in way in expects.
Probably due to historical reasons the driver uses In/Out arguments in odd way. While this tool still never uses Out arguments to see that, make the code to not trigger EINVAL in possible future uses. MFC after: 2 weeks
This commit is contained in:
parent
5d993207da
commit
b627cd1c20
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=348422
|
@ -651,27 +651,32 @@ mps_pass_command(int fd, void *req, uint32_t req_len, void *reply,
|
|||
{
|
||||
struct mprs_pass_thru pass;
|
||||
|
||||
bzero(&pass, sizeof(pass));
|
||||
pass.PtrRequest = (uint64_t)(uintptr_t)req;
|
||||
pass.PtrReply = (uint64_t)(uintptr_t)reply;
|
||||
pass.PtrData = (uint64_t)(uintptr_t)data_in;
|
||||
pass.PtrDataOut = (uint64_t)(uintptr_t)data_out;
|
||||
pass.RequestSize = req_len;
|
||||
pass.ReplySize = reply_len;
|
||||
pass.DataSize = datain_len;
|
||||
pass.DataOutSize = dataout_len;
|
||||
if (datain_len && dataout_len) {
|
||||
pass.PtrData = (uint64_t)(uintptr_t)data_in;
|
||||
pass.PtrDataOut = (uint64_t)(uintptr_t)data_out;
|
||||
pass.DataSize = datain_len;
|
||||
pass.DataOutSize = dataout_len;
|
||||
if (is_mps) {
|
||||
pass.DataDirection = MPS_PASS_THRU_DIRECTION_BOTH;
|
||||
} else {
|
||||
pass.DataDirection = MPR_PASS_THRU_DIRECTION_BOTH;
|
||||
}
|
||||
} else if (datain_len) {
|
||||
pass.PtrData = (uint64_t)(uintptr_t)data_in;
|
||||
pass.DataSize = datain_len;
|
||||
if (is_mps) {
|
||||
pass.DataDirection = MPS_PASS_THRU_DIRECTION_READ;
|
||||
} else {
|
||||
pass.DataDirection = MPR_PASS_THRU_DIRECTION_READ;
|
||||
}
|
||||
} else if (dataout_len) {
|
||||
pass.PtrData = (uint64_t)(uintptr_t)data_out;
|
||||
pass.DataSize = dataout_len;
|
||||
if (is_mps) {
|
||||
pass.DataDirection = MPS_PASS_THRU_DIRECTION_WRITE;
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue