From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 3/5] lsi: move current_dev into lsi_request
Date: Wed, 6 Jan 2010 17:08:02 +0100 [thread overview]
Message-ID: <1262794084-8020-4-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1262794084-8020-1-git-send-email-kraxel@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/lsi53c895a.c | 23 ++++++++++++-----------
1 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c
index e6c13eb..8715b99 100644
--- a/hw/lsi53c895a.c
+++ b/hw/lsi53c895a.c
@@ -175,6 +175,7 @@ do { fprintf(stderr, "lsi_scsi: error: " fmt , ## __VA_ARGS__);} while (0)
typedef struct lsi_request {
uint32_t tag;
+ SCSIDevice *dev;
uint32_t pending;
int out;
QTAILQ_ENTRY(lsi_request) next;
@@ -199,7 +200,7 @@ typedef struct {
* 3 if a DMA operation is in progress. */
int waiting;
SCSIBus bus;
- SCSIDevice *current_dev;
+ SCSIDevice *select_dev;
int current_lun;
/* The tag is a combination of the device ID and the SCSI tag. */
uint32_t select_tag;
@@ -533,8 +534,8 @@ static void lsi_do_dma(LSIState *s, int out)
s->dbc -= count;
if (s->dma_buf == NULL) {
- s->dma_buf = s->current_dev->info->get_buf(s->current_dev,
- s->current->tag);
+ s->dma_buf = s->current->dev->info->get_buf(s->current->dev,
+ s->current->tag);
}
/* ??? Set SFBR to first data byte. */
@@ -548,10 +549,10 @@ static void lsi_do_dma(LSIState *s, int out)
s->dma_buf = NULL;
if (out) {
/* Write the data. */
- s->current_dev->info->write_data(s->current_dev, s->current->tag);
+ s->current->dev->info->write_data(s->current->dev, s->current->tag);
} else {
/* Request any remaining data. */
- s->current_dev->info->read_data(s->current_dev, s->current->tag);
+ s->current->dev->info->read_data(s->current->dev, s->current->tag);
}
} else {
s->dma_buf += count;
@@ -610,7 +611,6 @@ static void lsi_reselect(LSIState *s, uint32_t tag)
s->sfbr = 1 << (id & 0x7);
}
DPRINTF("Reselected target %d\n", id);
- s->current_dev = s->bus.devs[id];
s->scntl1 |= LSI_SCNTL1_CON;
lsi_set_phase(s, PHASE_MI);
s->msg_action = p->out ? 2 : 3;
@@ -721,15 +721,16 @@ static void lsi_do_command(LSIState *s)
assert(s->current == NULL);
s->current = qemu_mallocz(sizeof(lsi_request));
s->current->tag = s->select_tag;
+ s->current->dev = s->select_dev;
- n = s->current_dev->info->send_command(s->current_dev, s->current->tag, buf,
- s->current_lun);
+ n = s->current->dev->info->send_command(s->current->dev, s->current->tag, buf,
+ s->current_lun);
if (n > 0) {
lsi_set_phase(s, PHASE_DI);
- s->current_dev->info->read_data(s->current_dev, s->current->tag);
+ s->current->dev->info->read_data(s->current->dev, s->current->tag);
} else if (n < 0) {
lsi_set_phase(s, PHASE_DO);
- s->current_dev->info->write_data(s->current_dev, s->current->tag);
+ s->current->dev->info->write_data(s->current->dev, s->current->tag);
}
if (!s->command_complete) {
@@ -1096,7 +1097,7 @@ again:
/* ??? Linux drivers compain when this is set. Maybe
it only applies in low-level mode (unimplemented).
lsi_script_scsi_interrupt(s, LSI_SIST0_CMP, 0); */
- s->current_dev = s->bus.devs[id];
+ s->select_dev = s->bus.devs[id];
s->select_tag = id << 8;
s->scntl1 |= LSI_SCNTL1_CON;
if (insn & (1 << 3)) {
--
1.6.5.2
next prev parent reply other threads:[~2010-01-06 16:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-06 16:07 [Qemu-devel] [PATCH 0/5] lsi: a bunch of cleanups Gerd Hoffmann
2010-01-06 16:08 ` [Qemu-devel] [PATCH 1/5] lsi: use QTAILQ for lsi_queue Gerd Hoffmann
2010-01-11 16:02 ` Anthony Liguori
2010-01-06 16:08 ` [Qemu-devel] [PATCH 2/5] lsi: have lsi_request for the whole life time of the request Gerd Hoffmann
2010-01-06 16:08 ` Gerd Hoffmann [this message]
2010-01-06 16:08 ` [Qemu-devel] [PATCH 4/5] lsi: move dma_len+dma_buf into lsi_request Gerd Hoffmann
2010-01-06 16:08 ` [Qemu-devel] [PATCH 5/5] lsi: pass lsi_request to lsi_reselect Gerd Hoffmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1262794084-8020-4-git-send-email-kraxel@redhat.com \
--to=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).