}
static struct pd_unit *pd_current; /* current request's drive */
-static PIA *pi_current; /* current request's PIA */
static struct request *pd_req; /* current request */
static void run_fsm(void)
next_request(res);
break;
case Claim:
- pi_do_claimed(pi_current, run_fsm);
+ pi_do_claimed(pd_current->pi, run_fsm);
break;
case Hold:
ps_set_intr();
static enum action do_pd_io(void)
{
pd_current = pd_req->rq_disk->private_data;
- pi_current = pd_current->pi;
phase = do_pd_io_start;
return Claim;
}
pd_run = pd_req->nr_sectors;
pd_count = pd_req->current_nr_sectors;
if (pd_block + pd_count > get_capacity(pd_req->rq_disk)) {
- pi_unclaim(pi_current);
+ pi_unclaim(pd_current->pi);
return Fail;
}
} else if (pd_cmd == WRITE) {
return do_pd_write_start();
} else {
- pi_unclaim(pi_current);
+ pi_unclaim(pd_current->pi);
return Fail;
}
}
static enum action do_pd_read_start(void)
{
- pi_current->proto->connect(pi_current);
+ pi_connect(pd_current->pi);
if (pd_wait_for(pd_current, STAT_READY, "do_pd_read") & STAT_ERR) {
- pi_current->proto->disconnect(pi_current);
+ pi_disconnect(pd_current->pi);
if (pd_retries < PD_MAX_RETRIES) {
pd_retries++;
- pi_unclaim(pi_current);
return Claim;
}
- pi_unclaim(pi_current);
return Fail;
}
pd_ide_command(pd_current, IDE_READ, pd_block, pd_run);
while (1) {
if (pd_wait_for(pd_current, STAT_DRQ, "do_pd_read_drq") & STAT_ERR) {
- pi_current->proto->disconnect(pi_current);
+ pi_disconnect(pd_current->pi);
if (pd_retries < PD_MAX_RETRIES) {
pd_retries++;
phase = do_pd_read_start;
- pi_unclaim(pi_current);
return Claim;
}
- pi_unclaim(pi_current);
return Fail;
}
pi_read_block(pd_current->pi, pd_buf, 512);
if (pd_next_buf())
break;
}
- pi_current->proto->disconnect(pi_current);
- pi_unclaim(pi_current);
+ pi_disconnect(pd_current->pi);
return Ok;
}
static enum action do_pd_write_start(void)
{
- pi_current->proto->connect(pi_current);
+ pi_connect(pd_current->pi);
if (pd_wait_for(pd_current, STAT_READY, "do_pd_write") & STAT_ERR) {
- pi_current->proto->disconnect(pi_current);
+ pi_disconnect(pd_current->pi);
if (pd_retries < PD_MAX_RETRIES) {
pd_retries++;
- pi_unclaim(pi_current);
return Claim;
}
- pi_unclaim(pi_current);
return Fail;
}
pd_ide_command(pd_current, IDE_WRITE, pd_block, pd_run);
while (1) {
if (pd_wait_for(pd_current, STAT_DRQ, "do_pd_write_drq") & STAT_ERR) {
- pi_current->proto->disconnect(pi_current);
+ pi_disconnect(pd_current->pi);
if (pd_retries < PD_MAX_RETRIES) {
pd_retries++;
- pi_unclaim(pi_current);
return Claim;
}
- pi_unclaim(pi_current);
return Fail;
}
pi_write_block(pd_current->pi, pd_buf, 512);
return Hold;
if (pd_wait_for(pd_current, STAT_READY, "do_pd_write_done") & STAT_ERR) {
- pi_current->proto->disconnect(pi_current);
+ pi_disconnect(pd_current->pi);
if (pd_retries < PD_MAX_RETRIES) {
pd_retries++;
phase = do_pd_write_start;
- pi_unclaim(pi_current);
return Claim;
}
- pi_unclaim(pi_current);
return Fail;
}
- pi_current->proto->disconnect(pi_current);
- pi_unclaim(pi_current);
+ pi_disconnect(pd_current->pi);
return Ok;
}