• Home
  • Raw
  • Download

Lines Matching refs:r

85     SCSIRequest *r;  in scsi_new_request()  local
88 r = free_requests; in scsi_new_request()
89 free_requests = r->next; in scsi_new_request()
91 r = qemu_malloc(sizeof(SCSIRequest)); in scsi_new_request()
92 r->iov.iov_base = qemu_memalign(512, SCSI_DMA_BUF_SIZE); in scsi_new_request()
94 r->dev = s; in scsi_new_request()
95 r->tag = tag; in scsi_new_request()
96 r->sector_count = 0; in scsi_new_request()
97 r->iov.iov_len = 0; in scsi_new_request()
98 r->aiocb = NULL; in scsi_new_request()
99 r->status = 0; in scsi_new_request()
101 r->next = s->requests; in scsi_new_request()
102 s->requests = r; in scsi_new_request()
103 return r; in scsi_new_request()
106 static void scsi_remove_request(SCSIRequest *r) in scsi_remove_request() argument
109 SCSIDeviceState *s = r->dev; in scsi_remove_request()
111 if (s->requests == r) { in scsi_remove_request()
112 s->requests = r->next; in scsi_remove_request()
115 while (last && last->next != r) in scsi_remove_request()
118 last->next = r->next; in scsi_remove_request()
123 r->next = free_requests; in scsi_remove_request()
124 free_requests = r; in scsi_remove_request()
129 SCSIRequest *r; in scsi_find_request() local
131 r = s->requests; in scsi_find_request()
132 while (r && r->tag != tag) in scsi_find_request()
133 r = r->next; in scsi_find_request()
135 return r; in scsi_find_request()
139 static void scsi_command_complete(SCSIRequest *r, int status, int sense) in scsi_command_complete() argument
141 SCSIDeviceState *s = r->dev; in scsi_command_complete()
143 DPRINTF("Command complete tag=0x%x status=%d sense=%d\n", r->tag, status, sense); in scsi_command_complete()
145 tag = r->tag; in scsi_command_complete()
146 scsi_remove_request(r); in scsi_command_complete()
154 SCSIRequest *r; in scsi_cancel_io() local
156 r = scsi_find_request(s, tag); in scsi_cancel_io()
157 if (r) { in scsi_cancel_io()
158 if (r->aiocb) in scsi_cancel_io()
159 bdrv_aio_cancel(r->aiocb); in scsi_cancel_io()
160 r->aiocb = NULL; in scsi_cancel_io()
161 scsi_remove_request(r); in scsi_cancel_io()
167 SCSIRequest *r = (SCSIRequest *)opaque; in scsi_read_complete() local
168 SCSIDeviceState *s = r->dev; in scsi_read_complete()
172 s->completion(s->opaque, SCSI_REASON_DATA, r->tag, 0); in scsi_read_complete()
173 scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_NO_SENSE); in scsi_read_complete()
176 DPRINTF("Data ready tag=0x%x len=%d\n", r->tag, r->iov.iov_len); in scsi_read_complete()
178 s->completion(s->opaque, SCSI_REASON_DATA, r->tag, r->iov.iov_len); in scsi_read_complete()
185 SCSIRequest *r; in scsi_read_data() local
188 r = scsi_find_request(s, tag); in scsi_read_data()
189 if (!r) { in scsi_read_data()
192 scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); in scsi_read_data()
195 if (r->sector_count == (uint32_t)-1) { in scsi_read_data()
196 DPRINTF("Read buf_len=%d\n", r->iov.iov_len); in scsi_read_data()
197 r->sector_count = 0; in scsi_read_data()
198 s->completion(s->opaque, SCSI_REASON_DATA, r->tag, r->iov.iov_len); in scsi_read_data()
201 DPRINTF("Read sector_count=%d\n", r->sector_count); in scsi_read_data()
202 if (r->sector_count == 0) { in scsi_read_data()
203 scsi_command_complete(r, STATUS_GOOD, SENSE_NO_SENSE); in scsi_read_data()
207 n = r->sector_count; in scsi_read_data()
211 r->iov.iov_len = n * 512; in scsi_read_data()
212 qemu_iovec_init_external(&r->qiov, &r->iov, 1); in scsi_read_data()
213 r->aiocb = bdrv_aio_readv(s->bdrv, r->sector, &r->qiov, n, in scsi_read_data()
214 scsi_read_complete, r); in scsi_read_data()
215 if (r->aiocb == NULL) in scsi_read_data()
216 scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); in scsi_read_data()
217 r->sector += n; in scsi_read_data()
218 r->sector_count -= n; in scsi_read_data()
221 static int scsi_handle_write_error(SCSIRequest *r, int error) in scsi_handle_write_error() argument
223 BlockErrorAction action = bdrv_get_on_error(r->dev->bdrv, 0); in scsi_handle_write_error()
230 r->status |= SCSI_REQ_STATUS_RETRY; in scsi_handle_write_error()
233 scsi_command_complete(r, STATUS_CHECK_CONDITION, in scsi_handle_write_error()
242 SCSIRequest *r = (SCSIRequest *)opaque; in scsi_write_complete() local
243 SCSIDeviceState *s = r->dev; in scsi_write_complete()
247 r->aiocb = NULL; in scsi_write_complete()
250 if (scsi_handle_write_error(r, -ret)) in scsi_write_complete()
254 n = r->iov.iov_len / 512; in scsi_write_complete()
255 r->sector += n; in scsi_write_complete()
256 r->sector_count -= n; in scsi_write_complete()
257 if (r->sector_count == 0) { in scsi_write_complete()
258 scsi_command_complete(r, STATUS_GOOD, SENSE_NO_SENSE); in scsi_write_complete()
260 len = r->sector_count * 512; in scsi_write_complete()
264 r->iov.iov_len = len; in scsi_write_complete()
265 DPRINTF("Write complete tag=0x%x more=%d\n", r->tag, len); in scsi_write_complete()
266 s->completion(s->opaque, SCSI_REASON_DATA, r->tag, len); in scsi_write_complete()
270 static void scsi_write_request(SCSIRequest *r) in scsi_write_request() argument
272 SCSIDeviceState *s = r->dev; in scsi_write_request()
275 n = r->iov.iov_len / 512; in scsi_write_request()
277 qemu_iovec_init_external(&r->qiov, &r->iov, 1); in scsi_write_request()
278 r->aiocb = bdrv_aio_writev(s->bdrv, r->sector, &r->qiov, n, in scsi_write_request()
279 scsi_write_complete, r); in scsi_write_request()
280 if (r->aiocb == NULL) in scsi_write_request()
281 scsi_command_complete(r, STATUS_CHECK_CONDITION, in scsi_write_request()
285 scsi_write_complete(r, 0); in scsi_write_request()
294 SCSIRequest *r; in scsi_write_data() local
297 r = scsi_find_request(s, tag); in scsi_write_data()
298 if (!r) { in scsi_write_data()
300 scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); in scsi_write_data()
304 if (r->aiocb) in scsi_write_data()
307 scsi_write_request(r); in scsi_write_data()
315 SCSIRequest *r = s->requests; in scsi_dma_restart_cb() local
319 while (r) { in scsi_dma_restart_cb()
320 if (r->status & SCSI_REQ_STATUS_RETRY) { in scsi_dma_restart_cb()
321 r->status &= ~SCSI_REQ_STATUS_RETRY; in scsi_dma_restart_cb()
322 scsi_write_request(r); in scsi_dma_restart_cb()
324 r = r->next; in scsi_dma_restart_cb()
332 SCSIRequest *r; in scsi_get_buf() local
334 r = scsi_find_request(s, tag); in scsi_get_buf()
335 if (!r) { in scsi_get_buf()
339 return (uint8_t *)r->iov.iov_base; in scsi_get_buf()
358 SCSIRequest *r; in scsi_send_command() local
361 r = scsi_find_request(s, tag); in scsi_send_command()
362 if (r) { in scsi_send_command()
368 r = scsi_new_request(s, tag); in scsi_send_command()
369 outbuf = (uint8_t *)r->iov.iov_base; in scsi_send_command()
430 r->iov.iov_len = 4; in scsi_send_command()
433 r->iov.iov_len = 18; in scsi_send_command()
466 r->iov.iov_len = 0; in scsi_send_command()
469 outbuf[r->iov.iov_len++] = 5; in scsi_send_command()
471 outbuf[r->iov.iov_len++] = 0; in scsi_send_command()
474 outbuf[r->iov.iov_len++] = 0x00; // this page in scsi_send_command()
475 outbuf[r->iov.iov_len++] = 0x00; in scsi_send_command()
476 outbuf[r->iov.iov_len++] = 3; // number of pages in scsi_send_command()
477 outbuf[r->iov.iov_len++] = 0x00; // list of supported pages (this page) in scsi_send_command()
478 outbuf[r->iov.iov_len++] = 0x80; // unit serial number in scsi_send_command()
479 outbuf[r->iov.iov_len++] = 0x83; // device identification in scsi_send_command()
496 r->iov.iov_len = 0; in scsi_send_command()
500 outbuf[r->iov.iov_len++] = 5; in scsi_send_command()
502 outbuf[r->iov.iov_len++] = 0; in scsi_send_command()
505 outbuf[r->iov.iov_len++] = 0x80; // this page in scsi_send_command()
506 outbuf[r->iov.iov_len++] = 0x00; in scsi_send_command()
507 outbuf[r->iov.iov_len++] = l; in scsi_send_command()
508 memcpy(&outbuf[r->iov.iov_len], s->drive_serial_str, l); in scsi_send_command()
509 r->iov.iov_len += l; in scsi_send_command()
523 r->iov.iov_len = 0; in scsi_send_command()
525 outbuf[r->iov.iov_len++] = 5; in scsi_send_command()
527 outbuf[r->iov.iov_len++] = 0; in scsi_send_command()
530 outbuf[r->iov.iov_len++] = 0x83; // this page in scsi_send_command()
531 outbuf[r->iov.iov_len++] = 0x00; in scsi_send_command()
532 outbuf[r->iov.iov_len++] = 3 + id_len; in scsi_send_command()
534 outbuf[r->iov.iov_len++] = 0x2; // ASCII in scsi_send_command()
535 outbuf[r->iov.iov_len++] = 0; // not officially assigned in scsi_send_command()
536 outbuf[r->iov.iov_len++] = 0; // reserved in scsi_send_command()
537 outbuf[r->iov.iov_len++] = id_len; // length of data following in scsi_send_command()
539 memcpy(&outbuf[r->iov.iov_len], in scsi_send_command()
541 r->iov.iov_len += id_len; in scsi_send_command()
597 r->iov.iov_len = len; in scsi_send_command()
732 r->iov.iov_len = p - outbuf; in scsi_send_command()
733 outbuf[0] = r->iov.iov_len - 4; in scsi_send_command()
734 if (r->iov.iov_len > len) in scsi_send_command()
735 r->iov.iov_len = len; in scsi_send_command()
771 r->iov.iov_len = 8; in scsi_send_command()
774 scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_NOT_READY); in scsi_send_command()
784 r->sector = lba * s->cluster_size; in scsi_send_command()
785 r->sector_count = len * s->cluster_size; in scsi_send_command()
793 r->sector = lba * s->cluster_size; in scsi_send_command()
794 r->sector_count = len * s->cluster_size; in scsi_send_command()
832 r->iov.iov_len = len; in scsi_send_command()
845 r->iov.iov_len = 8; in scsi_send_command()
882 r->iov.iov_len = len; in scsi_send_command()
884 scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_NOT_READY); in scsi_send_command()
897 r->iov.iov_len = 16; in scsi_send_command()
905 scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_ILLEGAL_REQUEST); in scsi_send_command()
908 scsi_command_complete(r, STATUS_CHECK_CONDITION, SENSE_HARDWARE_ERROR); in scsi_send_command()
911 if (r->sector_count == 0 && r->iov.iov_len == 0) { in scsi_send_command()
912 scsi_command_complete(r, STATUS_GOOD, SENSE_NO_SENSE); in scsi_send_command()
914 len = r->sector_count * 512 + r->iov.iov_len; in scsi_send_command()
918 if (!r->sector_count) in scsi_send_command()
919 r->sector_count = -1; in scsi_send_command()