xref: /plan9/sys/src/cmd/scuzz/changer.c (revision fd362a73ff89ae80075dd82c9aad2a3468f0f3c9)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
3*fd362a73SDavid du Colombier #include <disk.h>
47dd7cddfSDavid du Colombier #include "scsireq.h"
57dd7cddfSDavid du Colombier 
67dd7cddfSDavid du Colombier long
SReinitialise(ScsiReq * rp)77dd7cddfSDavid du Colombier SReinitialise(ScsiReq *rp)
87dd7cddfSDavid du Colombier {
97dd7cddfSDavid du Colombier 	uchar cmd[6];
107dd7cddfSDavid du Colombier 
117dd7cddfSDavid du Colombier 	memset(cmd, 0, sizeof(cmd));
127dd7cddfSDavid du Colombier 	cmd[0] = ScmdEInitialise;
137dd7cddfSDavid du Colombier 	rp->cmd.p = cmd;
147dd7cddfSDavid du Colombier 	rp->cmd.count = sizeof(cmd);
157dd7cddfSDavid du Colombier 	rp->data.p = cmd;
167dd7cddfSDavid du Colombier 	rp->data.count = 0;
177dd7cddfSDavid du Colombier 	rp->data.write = 1;
187dd7cddfSDavid du Colombier 	return SRrequest(rp);
197dd7cddfSDavid du Colombier }
207dd7cddfSDavid du Colombier 
217dd7cddfSDavid du Colombier long
SRmmove(ScsiReq * rp,int transport,int source,int destination,int invert)227dd7cddfSDavid du Colombier SRmmove(ScsiReq *rp, int transport, int source, int destination, int invert)
237dd7cddfSDavid du Colombier {
247dd7cddfSDavid du Colombier 	uchar cmd[12];
257dd7cddfSDavid du Colombier 
267dd7cddfSDavid du Colombier 	memset(cmd, 0, sizeof(cmd));
277dd7cddfSDavid du Colombier 	cmd[0] = ScmdMMove;
287dd7cddfSDavid du Colombier 	cmd[2] = transport>>8;
297dd7cddfSDavid du Colombier 	cmd[3] = transport;
307dd7cddfSDavid du Colombier 	cmd[4] = source>>8;
317dd7cddfSDavid du Colombier 	cmd[5] = source;
327dd7cddfSDavid du Colombier 	cmd[6] = destination>>8;
337dd7cddfSDavid du Colombier 	cmd[7] = destination;
347dd7cddfSDavid du Colombier 	cmd[10] = invert & 0x01;
357dd7cddfSDavid du Colombier 	rp->cmd.p = cmd;
367dd7cddfSDavid du Colombier 	rp->cmd.count = sizeof(cmd);
377dd7cddfSDavid du Colombier 	rp->data.p = cmd;
387dd7cddfSDavid du Colombier 	rp->data.count = 0;
397dd7cddfSDavid du Colombier 	rp->data.write = 1;
407dd7cddfSDavid du Colombier 	return SRrequest(rp);
417dd7cddfSDavid du Colombier }
427dd7cddfSDavid du Colombier 
437dd7cddfSDavid du Colombier long
SRestatus(ScsiReq * rp,uchar type,uchar * list,int nbytes)447dd7cddfSDavid du Colombier SRestatus(ScsiReq *rp, uchar type, uchar *list, int nbytes)
457dd7cddfSDavid du Colombier {
467dd7cddfSDavid du Colombier 	uchar cmd[12];
477dd7cddfSDavid du Colombier 
487dd7cddfSDavid du Colombier 	memset(cmd, 0, sizeof(cmd));
497dd7cddfSDavid du Colombier 	cmd[0] = ScmdEStatus;
507dd7cddfSDavid du Colombier 	cmd[1] = type & 0x07;
517dd7cddfSDavid du Colombier 	cmd[4] = 0xFF;
527dd7cddfSDavid du Colombier 	cmd[5] = 0xFF;
537dd7cddfSDavid du Colombier 	cmd[7] = nbytes>>16;
547dd7cddfSDavid du Colombier 	cmd[8] = nbytes>>8;
557dd7cddfSDavid du Colombier 	cmd[9] = nbytes;
567dd7cddfSDavid du Colombier 	rp->cmd.p = cmd;
577dd7cddfSDavid du Colombier 	rp->cmd.count = sizeof(cmd);
587dd7cddfSDavid du Colombier 	rp->data.p = list;
597dd7cddfSDavid du Colombier 	rp->data.count = nbytes;
607dd7cddfSDavid du Colombier 	rp->data.write = 0;
617dd7cddfSDavid du Colombier 	return SRrequest(rp);
627dd7cddfSDavid du Colombier }
63