Changes in uspace/lib/drv/generic/remote_ahci.c [0f5c4e4:984a9ba] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/remote_ahci.c
r0f5c4e4 r984a9ba 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda3 2 * Copyright (c) 2012 Petr Jerman 4 3 * All rights reserved. … … 153 152 IPC_M_AHCI_READ_BLOCKS, HI(blocknum), LO(blocknum), count, NULL); 154 153 155 errno_t rc = async_data_read_start(exch, buf, count * 512); 154 async_share_out_start(exch, buf, AS_AREA_READ | AS_AREA_WRITE); 155 156 156 async_exchange_end(exch); 157 if (rc != EOK) { 158 async_forget(req); 159 return rc; 160 } 161 162 errno_t retval; 163 async_wait_for(req, &retval); 164 return retval; 157 158 errno_t rc; 159 async_wait_for(req, &rc); 160 161 return rc; 165 162 } 166 163 … … 175 172 IPC_M_AHCI_WRITE_BLOCKS, HI(blocknum), LO(blocknum), count, NULL); 176 173 177 errno_t rc = async_data_write_start(exch, buf, count * 512); 174 async_share_out_start(exch, buf, AS_AREA_READ | AS_AREA_WRITE); 175 178 176 async_exchange_end(exch); 179 177 180 if (rc != EOK) { 181 async_forget(req); 182 return rc; 183 } 184 185 errno_t retval; 186 async_wait_for(req, &retval); 187 return retval; 178 errno_t rc; 179 async_wait_for(req, &rc); 180 181 return rc; 188 182 } 189 183 … … 290 284 } 291 285 292 ipc_call_t rcall; 293 size_t size; 294 if (!async_data_read_receive(&rcall, &size)) { 295 async_answer_0(&rcall, EINVAL); 296 async_answer_0(call, EINVAL); 297 return; 298 } 299 300 void *buf = malloc(size); 301 if (buf == NULL) { 302 async_answer_0(&rcall, ENOMEM); 303 async_answer_0(call, ENOMEM); 304 return; 305 } 306 307 uint64_t blocknum = 286 ipc_call_t data; 287 size_t maxblock_size; 288 unsigned int flags; 289 async_share_out_receive(&data, &maxblock_size, &flags); 290 291 void *buf; 292 async_share_out_finalize(&data, &buf); 293 294 const uint64_t blocknum = 308 295 (((uint64_t) (DEV_IPC_GET_ARG1(*call))) << 32) | 309 296 (((uint64_t) (DEV_IPC_GET_ARG2(*call))) & 0xffffffff); 310 size_t cnt = (size_t) DEV_IPC_GET_ARG3(*call); 311 312 errno_t rc = ahci_iface->read_blocks(fun, blocknum, cnt, buf); 313 if (rc != EOK) { 314 async_answer_0(&rcall, ENOMEM); 315 async_answer_0(call, ENOMEM); 316 free(buf); 317 return; 318 } 319 320 async_data_read_finalize(&rcall, buf, size); 321 322 free(buf); 323 async_answer_0(call, EOK); 297 const size_t cnt = (size_t) DEV_IPC_GET_ARG3(*call); 298 299 const errno_t ret = ahci_iface->read_blocks(fun, blocknum, cnt, buf); 300 301 async_answer_0(call, ret); 324 302 } 325 303 … … 328 306 const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface; 329 307 330 if (ahci_iface-> write_blocks == NULL) {331 async_answer_0(call, ENOTSUP); 332 return; 333 } 334 335 void *data;336 size_t dsize;337 errno_t rc = async_data_write_accept(&data, false, 0, 0, 0, &dsize);338 if (rc != EOK) {339 async_answer_0(call, rc); 340 return;341 }342 343 uint64_t blocknum =308 if (ahci_iface->read_blocks == NULL) { 309 async_answer_0(call, ENOTSUP); 310 return; 311 } 312 313 ipc_call_t data; 314 size_t maxblock_size; 315 unsigned int flags; 316 async_share_out_receive(&data, &maxblock_size, &flags); 317 318 void *buf; 319 async_share_out_finalize(&data, &buf); 320 321 const uint64_t blocknum = 344 322 (((uint64_t)(DEV_IPC_GET_ARG1(*call))) << 32) | 345 323 (((uint64_t)(DEV_IPC_GET_ARG2(*call))) & 0xffffffff); 346 size_t cnt = (size_t) DEV_IPC_GET_ARG3(*call); 347 348 if (dsize != cnt * 512) { 349 async_answer_0(call, EINVAL); 350 return; 351 } 352 353 rc = ahci_iface->write_blocks(fun, blocknum, cnt, data); 354 free(data); 355 async_answer_0(call, rc); 324 const size_t cnt = (size_t) DEV_IPC_GET_ARG3(*call); 325 326 const errno_t ret = ahci_iface->write_blocks(fun, blocknum, cnt, buf); 327 328 async_answer_0(call, ret); 356 329 } 357 330
Note:
See TracChangeset
for help on using the changeset viewer.