4 typedef struct SDev SDev;
5 typedef struct SDfile SDfile;
6 typedef struct SDifc SDifc;
7 typedef struct SDio SDio;
8 typedef struct SDpart SDpart;
9 typedef struct SDperm SDperm;
10 typedef struct SDreq SDreq;
11 typedef struct SDunit SDunit;
27 typedef long SDrw(SDunit*, Chan*, void*, long, vlong);
37 uchar inquiry[255]; /* format follows SCSI spec */
38 uchar sense[18]; /* format follows SCSI spec */
39 uchar rsense[18]; /* support seperate rq sense and inline return */
46 SDpart* part; /* nil or array of size npart */
51 QLock raw; /* raw read or write in progress */
52 ulong rawinuse; /* really just a test-and-set */
61 * Each controller is represented by a SDev.
64 Ref r; /* Number of callers using device */
65 SDifc* ifc; /* pnp/legacy */
71 QLock; /* enable/disable */
73 int nunit; /* Number of units */
74 QLock unitlock; /* `Loading' of units */
75 int* unitflg; /* Unit flags */
83 SDev* (*xxlegacy)(int, int); /* unused. remove me */
85 int (*disable)(SDev*);
87 int (*verify)(SDunit*);
88 int (*online)(SDunit*);
90 int (*rctl)(SDunit*, char*, int);
91 int (*wctl)(SDunit*, Cmdbuf*);
93 long (*bio)(SDunit*, int, int, void*, long, uvlong);
94 SDev* (*probe)(DevConf*);
96 char* (*rtopctl)(SDev*, char*, char*);
97 int (*wtopctl)(SDev*, Cmdbuf*);
120 SDnosense = 0x00000001,
121 SDvalidsense = 0x00010000,
125 SDretry = -5, /* internal to controllers */
133 SDcheck = 0x02, /* check condition */
134 SDbusy = 0x08, /* busy */
147 * Avoid extra copying by making sd buffers page-aligned for DMA.
149 #define sdmalloc(n) mallocalign(n, BY2PG, 0, 0)
150 #define sdfree(p) free(p)
153 * mmc/sd/sdio host controller interface
159 void (*enable)(void);
160 int (*inquiry)(char*, int);
161 int (*cmd)(u32int, u32int, u32int*);
162 void (*iosetup)(int, void*, int, int);
163 void (*io)(int, uchar*, int);
170 extern void sdadddevs(SDev*);
171 extern int sdsetsense(SDreq*, int, int, int, int);
172 extern int sdfakescsi(SDreq*);
173 extern int sdfakescsirw(SDreq*, uvlong*, int*, int*);
174 extern int sdaddfile(SDunit*, char*, int, char*, SDrw*, SDrw*);
177 extern int scsiverify(SDunit*);
178 extern int scsionline(SDunit*);
179 extern long scsibio(SDunit*, int, int, void*, long, uvlong);