示例#1
0
static int
aoerio(SDreq *r)
{
    int i, count, rw;
    uvlong lba;
    Ctlr *c;
    SDunit *u;

    u = r->unit;
    c = u->dev->ctlr;
//	if(c->feat & Datapi)
//		return aoeriopkt(r, d);

    if(r->cmd[0] == 0x35 || r->cmd[0] == 0x91) {
        qlock(c);
        i = flushcache(c);
        qunlock(c);
        if(i == 0)
            return sdsetsense(r, SDok, 0, 0, 0);
        return sdsetsense(r, SDcheck, 3, 0xc, 2);
    }

    if((i = sdfakescsi(r)) != SDnostatus) {
        r->status = i;
        return i;
    }
    if((i = sdfakescsirw(r, &lba, &count, &rw)) != SDnostatus)
        return i;
    r->rlen = aoebio(u, r->lun, rw == SDwrite, r->data, count, lba);
    return r->status = SDok;
}
示例#2
0
文件: sdmmc.c 项目: srk-cmu/9problems
static int
mmcrio(SDreq *r)
{
	int i, rw, count;
	uvlong lba;

	if((i = sdfakescsi(r)) != SDnostatus)
		return r->status = i;
	if((i = sdfakescsirw(r, &lba, &count, &rw)) != SDnostatus)
		return i;
	r->rlen = mmcbio(r->unit, r->lun, rw == SDwrite, r->data, count, lba);
	return r->status = SDok;
}
示例#3
0
static int
looprio(SDreq *r)
{
	int i, count, rw;
	uvlong lba;
	SDunit *u;

	u = r->unit;

	if(r->cmd[0] == 0x35 || r->cmd[0] == 0x91)
		return sdsetsense(r, SDok, 0, 0, 0);

	if((i = sdfakescsi(r)) != SDnostatus)
		return r->status = i;
	if((i = sdfakescsirw(r, &lba, &count, &rw)) != SDnostatus)
		return i;
	r->rlen = loopbio(u, r->lun, rw == SDwrite, r->data, count, lba);
	return r->status = SDok;
}
示例#4
0
static int
viorio(SDreq *r)
{
	int i, count, rw;
	uvlong lba;
	SDunit *u;

	u = r->unit;
	if(r->cmd[0] == 0x35 || r->cmd[0] == 0x91){
		if(vioreq(u->dev->ctlr, 4, nil, 0, 0, 0) != 0)
			return sdsetsense(r, SDcheck, 3, 0xc, 2);
		return sdsetsense(r, SDok, 0, 0, 0);
	}
	if((i = sdfakescsi(r)) != SDnostatus)
		return r->status = i;
	if((i = sdfakescsirw(r, &lba, &count, &rw)) != SDnostatus)
		return i;
	r->rlen = viobio(u, r->lun, rw == SDwrite, r->data, count, lba);
	return r->status = SDok;
}