Changeset 65 for trunk/src/os2ahci/atapi.c
- Timestamp:
- Dec 21, 2010, 6:06:19 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/os2ahci/atapi.c
r64 r65 32 32 33 33 static void atapi_req_sense_pp (IORBH _far *iorb); 34 35 34 36 35 /* ------------------------ global/static variables ------------------------ */ … … 94 93 AP_DEVICE, 0x4000, 95 94 AP_FEATURES, ATAPI_FEAT_DMA | ATAPI_FEAT_DMA_TO_HOST, 96 AP_SECTOR_28, ATAPI_LBA_DMA,97 95 AP_END); 98 96 … … 145 143 IORB_ADAPTER_PASSTHRU _far *pt = (IORB_ADAPTER_PASSTHRU _far *) iorb; 146 144 int rc; 145 u8 cdb[ATAPI_MAX_CDB_LEN] = {0}; 146 u16 cdb_len; 147 148 if (pt->ControllerCmdLen > ATAPI_MAX_CDB_LEN) { 149 ioerb_seterr(IOERR_CMD_SYNTAX); 150 return -1; 151 } 152 /* AHCI requires 12 or 16 byte commands; for now, we pad them 153 * since I have no idea what to do with commands that do not 154 * have a 12 or 16 byte equivalent */ 155 memcpy(cdb, pt->pControllerCmd, pt->ControllerCmdLen); 156 cdb_len = max(ATAPI_MIN_CDB_LEN, pt->ControllerCmdLen); 147 157 148 158 /* we do not perform the S/G limitation recovery loop here: … … 154 164 iorb_unit_device(iorb), 155 165 slot, ATA_CMD_PACKET, 156 AP_ATAPI_CMD, (void _far *) pt->pControllerCmd, 157 pt->ControllerCmdLen, 166 AP_ATAPI_CMD, (void _far *) cdb, cdb_len, 158 167 AP_SGLIST, pt->pSGList, pt->cSGList, 159 168 /* TODO: do we have to clear DMA_TO_HOST bit for … … 161 170 */ 162 171 AP_FEATURES, ATAPI_FEAT_DMA | ATAPI_FEAT_DMA_TO_HOST, 163 AP_SECTOR_28, ATAPI_LBA_DMA,164 172 AP_END); 165 173 … … 184 192 { 185 193 ADD_WORKSPACE _far *aws = add_workspace(iorb); 186 ATAPI_CDB_6 cdb;187 194 int rc; 195 u8 cdb[ATAPI_MIN_CDB_LEN]; 196 ATAPI_CDB_6 *pcdb; = (ATAPI_CDB_6*) cdb; 188 197 189 198 /* allocate sense buffer in ADD workspace */ … … 196 205 197 206 /* prepare request sense command */ 198 memset( &cdb, 0x00, sizeof(cdb));199 cdb.cmd = ATAPI_CMD_REQUEST_SENSE;200 cdb.trans_len = (u8) ATAPI_SENSE_LEN;207 memset(cdb, 0x00, sizeof(cdb)); 208 pcdb->cmd = ATAPI_CMD_REQUEST_SENSE; 209 pcdb->trans_len = (u8) ATAPI_SENSE_LEN; 201 210 202 211 aws->ppfunc = atapi_req_sense_pp; … … 206 215 slot, 207 216 ATA_CMD_PACKET, 208 AP_ATAPI_CMD, (void _far*) &cdb, sizeof(cdb),217 AP_ATAPI_CMD, (void _far*) cdb, sizeof(cdb), 209 218 AP_VADDR, (void _far *) aws->buf, ATAPI_SENSE_LEN, 210 219 AP_FEATURES, ATAPI_FEAT_DMA, 211 AP_SECTOR_28, ATAPI_LBA_DMA,212 220 AP_END); 213 221 214 222 if (rc > 0) { 215 /* should never happen - we got 64 bytes here */216 223 iorb_seterr(iorb, IOERR_CMD_SGLIST_BAD); 217 224 … … 281 288 282 289 } 290
Note:
See TracChangeset
for help on using the changeset viewer.