Merge pull request #1 from dron0gus/scsi-configurable-buffer
lib_scsi: configurable size of read/write buffer
This commit is contained in:
commit
2f52cc19db
|
@ -363,19 +363,23 @@ static bool data_read_write10(SCSITarget *scsip, const uint8_t *cmd) {
|
||||||
blkGetInfo(blkdev, &bdi);
|
blkGetInfo(blkdev, &bdi);
|
||||||
size_t bs = bdi.blk_size;
|
size_t bs = bdi.blk_size;
|
||||||
uint8_t *buf = scsip->config->blkbuf;
|
uint8_t *buf = scsip->config->blkbuf;
|
||||||
|
uint32_t n_bufs = scsip->config->blkbufsize / bs;
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
for (i=0; i<req.blk_cnt; i++) {
|
while (i < req.blk_cnt) {
|
||||||
|
size_t n = n_bufs > (req.blk_cnt - i) ? (req.blk_cnt - i) : n_bufs;
|
||||||
|
|
||||||
if (cmd[0] == SCSI_CMD_READ_10) {
|
if (cmd[0] == SCSI_CMD_READ_10) {
|
||||||
// TODO: block error handling
|
// TODO: block error handling
|
||||||
blkRead(blkdev, req.first_lba + i, buf, 1);
|
blkRead(blkdev, req.first_lba + i, buf, n);
|
||||||
tr->transmit(tr, buf, bs);
|
tr->transmit(tr, buf, bs * n);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// TODO: block error handling
|
// TODO: block error handling
|
||||||
tr->receive(tr, buf, bs);
|
tr->receive(tr, buf, bs * n);
|
||||||
blkWrite(blkdev, req.first_lba + i, buf, 1);
|
blkWrite(blkdev, req.first_lba + i, buf, n);
|
||||||
}
|
}
|
||||||
|
i += n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return SCSI_SUCCESS;
|
return SCSI_SUCCESS;
|
||||||
|
|
|
@ -229,9 +229,13 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
BaseBlockDevice *blkdev;
|
BaseBlockDevice *blkdev;
|
||||||
/**
|
/**
|
||||||
* @brief Pointer to data buffer for single block.
|
* @brief Pointer to data buffer.
|
||||||
*/
|
*/
|
||||||
uint8_t *blkbuf;
|
uint8_t *blkbuf;
|
||||||
|
/**
|
||||||
|
* brief Size of data buffer.
|
||||||
|
*/
|
||||||
|
uint32_t blkbufsize;
|
||||||
/**
|
/**
|
||||||
* @brief Pointer to SCSI inquiry response object.
|
* @brief Pointer to SCSI inquiry response object.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue