## diffname port/sd.h 2000/0506
## diff -e /dev/null /n/emeliedump/2000/0506/sys/src/9/pc/sd.h
0a
/*
* Storage Device.
*/
typedef struct SDev SDev;
typedef struct SDifc SDifc;
typedef struct SDpart SDpart;
typedef struct SDreq SDreq;
typedef struct SDunit SDunit;
typedef struct SDpart {
ulong start;
ulong end;
char name[NAMELEN];
char user[NAMELEN];
ulong perm;
int valid;
int nopen; /* of this partition */
} SDpart;
typedef struct SDunit {
SDev* dev;
int subno;
uchar inquiry[256]; /* format follows SCSI spec */
char name[NAMELEN];
Rendez rendez;
QLock ctl;
ulong sectors;
ulong secsize;
SDpart* part;
int npart; /* of valid partitions */
int nopen; /* of partitions on this unit */
int changed;
QLock raw;
int state;
ulong pid;
SDreq* req;
} SDunit;
typedef struct SDev {
SDifc* ifc; /* pnp/legacy */
void *ctlr;
int idno;
char name[NAMELEN];
int index; /* into unit space */
int nunit;
SDev* next;
QLock; /* enable/disable */
int enabled;
} SDev;
typedef struct SDifc {
char* name;
SDev* (*pnp)(void);
SDev* (*legacy)(int, int);
SDev* (*id)(SDev*);
int (*enable)(SDev*);
int (*disable)(SDev*);
int (*verify)(SDunit*);
int (*online)(SDunit*);
int (*rio)(SDreq*);
int (*rctl)(SDunit*, char*, int);
int (*wctl)(SDunit*, Cmdbuf*);
long (*bio)(SDunit*, int, int, void*, long, long);
} SDifc;
typedef struct SDreq {
SDunit* unit;
int lun;
int write;
uchar cmd[16];
int clen;
void* data;
int dlen;
int flags;
int status;
long rlen;
uchar sense[256];
} SDreq;
enum {
SDnosense = 0x00000001,
SDvalidsense = 0x00010000,
};
enum {
SDmalloc = -4,
SDeio = -3,
SDtimeout = -2,
SDnostatus = -1,
SDok = 0,
SDcheck = 0x02, /* check condition */
SDbusy = 0x08, /* busy */
SDmaxio = 2048*1024,
SDnpart = 16,
};
#define sdmalloc(n) malloc(n)
#define sdfree(p) free(p)
/* sdscsi.c */
extern int scsiverify(SDunit*);
extern int scsionline(SDunit*);
extern long scsibio(SDunit*, int, int, void*, long, long);
extern SDev* scsiid(SDev*, SDifc*);
.
## diffname port/sd.h 2000/0526
## diff -e /n/emeliedump/2000/0506/sys/src/9/pc/sd.h /n/emeliedump/2000/0526/sys/src/9/pc/sd.h
37d
35c
Lock rawinuse;
.
## diffname port/sd.h 2000/0531
## diff -e /n/emeliedump/2000/0526/sys/src/9/pc/sd.h /n/emeliedump/2000/0531/sys/src/9/pc/sd.h
35c
Lock rawinuse; /* really just a test-and-set */
.
## diffname port/sd.h 2000/0607
## diff -e /n/emeliedump/2000/0531/sys/src/9/pc/sd.h /n/emeliedump/2000/0607/sys/src/9/pc/sd.h
92a
SDretry = -5, /* internal to controllers */
.
## diffname port/sd.h 2000/0617
## diff -e /n/emeliedump/2000/0607/sys/src/9/pc/sd.h /n/emeliedump/2000/0617/sys/src/9/pc/sd.h
30,33c
SDpart* part; /* either nil or points at array of size SDnpart */
ulong vers;
.
17c
ulong vers;
.
## diffname port/sd.h 2000/0706
## diff -e /n/emeliedump/2000/0617/sys/src/9/pc/sd.h /n/emeliedump/2000/0706/sys/src/9/pc/sd.h
35a
SDperm rawperm;
.
31a
SDperm ctlperm;
.
30c
SDpart* part; /* nil or array of size SDnpart */
.
24c
SDperm;
.
15a
} SDperm;
typedef struct SDpart {
ulong start;
ulong end;
SDperm;
.
10,12c
typedef struct SDperm {
.
6a
typedef struct SDperm SDperm;
.
## diffname port/sd.h 2000/0809
## diff -e /n/emeliedump/2000/0706/sys/src/9/pc/sd.h /n/emeliedump/2000/0809/sys/src/9/pc/sd.h
35c
SDpart* part; /* nil or array of size npart */
int npart;
.
## diffname port/sd.h 2000/1129
## diff -e /n/emeliedump/2000/1129/sys/src/9/pc/sd.h /n/emeliedump/2000/1129/sys/src/9/port/sd.h
43a
Log log;
.
39a
QLock raw; /* raw read or write in progress */
.
## diffname port/sd.h 2001/0527
## diff -e /n/emeliedump/2000/1129/sys/src/9/port/sd.h /n/emeliedump/2001/0527/sys/src/9/port/sd.h
53c
char *name;
.
12,13c
char *name;
char *user;
.
## diffname port/sd.h 2001/0905
## diff -e /n/emeliedump/2001/0527/sys/src/9/port/sd.h /n/emeliedump/2001/0905/sys/src/9/port/sd.h
77a
SDev* (*probe)(DevConf *);
void (*clear)(SDev *);
char* (*stat)(SDev*, char*, char*);
.
59a
int nunit; /* Number of units */
QLock unitlock; /* `Loading' of units */
int *unitflg; /* Unit flags */
SDunit **unit; /* Each controller has at least one unit */
.
54,55d
49a
Ref r; /* Number of callers using device */
.
48a
/*
* Each controller is represented by a SDev, each controller is responsible
* for allocating its unit structures.
*/
.
## diffname port/sd.h 2001/1022
## diff -e /n/emeliedump/2001/0905/sys/src/9/port/sd.h /n/emeliedump/2001/1022/sys/src/9/port/sd.h
85,86c
SDev* (*probe)(DevConf*);
void (*clear)(SDev*);
.
65,66c
int* unitflg; /* Unit flags */
SDunit**unit;
.
63c
int nunit; /* Number of units */
.
58c
char* name;
.
56c
void* ctlr;
.
54c
Ref r; /* Number of callers using device */
.
50,52c
* Each controller is represented by a SDev.
* Each controller is responsible for allocating its unit structures.
* Each controller has at least one unit.
*/
.
46c
Log log;
.
40c
QLock raw; /* raw read or write in progress */
.
12,13c
char* name;
char* user;
.
## diffname port/sd.h 2002/0402
## diff -e /n/emeliedump/2001/1022/sys/src/9/port/sd.h /n/emeliedump/2002/0402/sys/src/9/port/sd.h
41c
ulong rawinuse; /* really just a test-and-set */
.
## diffname port/sd.h 2002/0404
## diff -e /n/emeliedump/2002/0402/sys/src/9/port/sd.h /n/emeliedump/2002/0404/sys/src/9/port/sd.h
45,46d
## diffname port/sd.h 2002/0406
## diff -e /n/emeliedump/2002/0404/sys/src/9/port/sd.h /n/emeliedump/2002/0406/sys/src/9/port/sd.h
103c
};
.
89c
struct SDreq {
.
87c
};
.
68c
struct SDifc {
.
66c
};
.
52c
struct SDev {
.
46a
int wpunit; /* whole unit is write protected */
SDwp *wp; /* block level write prtection */
};
.
45d
25c
struct SDcache {
ulong age;
ulong bn;
uchar *data;
};
struct SDwp {
QLock;
ulong age;
ulong start;
ulong end;
SDcache cache[SDcachesize];
};
struct SDunit {
.
23c
};
.
17c
struct SDpart {
.
15c
};
.
11c
enum {
SDcachesize = 20,
};
struct SDperm {
.
9a
typedef struct SDwp SDwp;
typedef struct SDcache SDcache;
.
## diffname port/sd.h 2003/0407
## diff -e /n/emeliedump/2002/0406/sys/src/9/port/sd.h /n/emeliedump/2003/0407/sys/src/9/port/sd.h
50d
|