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*);
113 ulong timeout; /* in ticks */
121 SDnosense = 0x00000001,
122 SDvalidsense = 0x00010000,
126 SDretry = -5, /* internal to controllers */
134 SDcheck = 0x02, /* check condition */
135 SDbusy = 0x08, /* busy */
148 * Allow the default #defines for sdmalloc & sdfree to be overridden by
149 * system-specific versions. This can be used to avoid extra copying
150 * by making sure sd buffers are cache-aligned (some ARM systems) or
151 * page-aligned (xen) for DMA.
154 #define sdmalloc(n) malloc(n)
155 #define sdfree(p) free(p)
159 * mmc/sd/sdio host controller interface
165 void (*enable)(void);
166 int (*inquiry)(char*, int);
167 int (*cmd)(u32int, u32int, u32int*);
168 void (*iosetup)(int, void*, int, int);
169 void (*io)(int, uchar*, int);
175 extern void sdadddevs(SDev*);
176 extern int sdsetsense(SDreq*, int, int, int, int);
177 extern int sdfakescsi(SDreq*);
178 extern int sdfakescsirw(SDreq*, uvlong*, int*, int*);
179 extern int sdaddfile(SDunit*, char*, int, char*, SDrw*, SDrw*);
182 extern int scsiverify(SDunit*);
183 extern int scsionline(SDunit*);
184 extern long scsibio(SDunit*, int, int, void*, long, uvlong);