Changeset 77 for trunk/src/os2ahci/atapi.c
- Timestamp:
- Feb 22, 2011, 2:25:44 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/os2ahci/atapi.c
r76 r77 201 201 u8 cdb[ATAPI_MIN_CDB_LEN]; 202 202 ATAPI_CDB_6 _far *pcdb = (ATAPI_CDB_6 _far *) cdb; 203 size_t sense_buf_len = ATAPI_SENSE_LEN; 203 204 204 205 if ((iorb->RequestControl & IORB_REQ_STATUSBLOCK) && … … 211 212 (u16) iorb->pStatusBlock); 212 213 if (ssb->Flags & 0x0008U) { 213 /* set a generic error code and skip automatic sense code handling */214 214 iorb_seterr(iorb, IOERR_DEVICE_NONSPECIFIC); 215 215 return(-1); 216 216 } 217 218 /* if the sense buffer requested is larger than our default, adjust 219 * the length accordingly to satisfy the caller's requirements. */ 220 if (ssb->SenseData != NULL && ssb->ReqSenseLen > sense_buf_len) { 221 sense_buf_len = ssb->ReqSenseLen; 222 } 217 223 } 218 224 219 225 /* allocate sense buffer in ADD workspace */ 220 if ((aws->buf = malloc( ATAPI_SENSE_LEN)) == NULL) {226 if ((aws->buf = malloc(sense_buf_len)) == NULL) { 221 227 iorb_seterr(iorb, IOERR_CMD_SW_RESOURCE); 222 228 return(-1); 223 229 } 224 memset(aws->buf, 0x00, ATAPI_SENSE_LEN);230 memset(aws->buf, 0x00, sense_buf_len); 225 231 226 232 /* prepare request sense command */ 227 233 memset(cdb, 0x00, sizeof(cdb)); 228 234 pcdb->cmd = ATAPI_CMD_REQUEST_SENSE; 229 pcdb->trans_len = (u8) ATAPI_SENSE_LEN;235 pcdb->trans_len = (u8) sense_buf_len; 230 236 231 237 aws->ppfunc = atapi_req_sense_pp; … … 236 242 ATA_CMD_PACKET, 237 243 AP_ATAPI_CMD, (void _far*) cdb, sizeof(cdb), 238 AP_VADDR, (void _far *) aws->buf, ATAPI_SENSE_LEN,244 AP_VADDR, (void _far *) aws->buf, sense_buf_len, 239 245 AP_FEATURES, ATAPI_FEAT_DMA, 240 246 AP_END); … … 277 283 278 284 if (ssb->SenseData != NULL) { 279 memcpy(ssb->SenseData, psd, max(ssb->ReqSenseLen, ATAPI_SENSE_LEN));285 memcpy(ssb->SenseData, psd, ssb->ReqSenseLen); 280 286 ssb->Flags |= STATUS_SENSEDATA_VALID; 281 287 }
Note:
See TracChangeset
for help on using the changeset viewer.