|
@@ -623,6 +623,7 @@ static int ata_scsiop_inquiry(ccb *pccb)
|
|
|
95 - 4,
|
|
|
};
|
|
|
u8 fis[20];
|
|
|
+ u16 *idbuf;
|
|
|
ALLOC_CACHE_ALIGN_BUFFER(u16, tmpid, ATA_ID_WORDS);
|
|
|
u8 port;
|
|
|
|
|
@@ -649,17 +650,25 @@ static int ata_scsiop_inquiry(ccb *pccb)
|
|
|
return -EIO;
|
|
|
}
|
|
|
|
|
|
- if (ataid[port])
|
|
|
- free(ataid[port]);
|
|
|
- ataid[port] = tmpid;
|
|
|
- ata_swap_buf_le16(tmpid, ATA_ID_WORDS);
|
|
|
+ if (!ataid[port]) {
|
|
|
+ ataid[port] = malloc(ATA_ID_WORDS * 2);
|
|
|
+ if (!ataid[port]) {
|
|
|
+ printf("%s: No memory for ataid[port]\n", __func__);
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ idbuf = ataid[port];
|
|
|
+
|
|
|
+ memcpy(idbuf, tmpid, ATA_ID_WORDS * 2);
|
|
|
+ ata_swap_buf_le16(idbuf, ATA_ID_WORDS);
|
|
|
|
|
|
memcpy(&pccb->pdata[8], "ATA ", 8);
|
|
|
- ata_id_strcpy((u16 *) &pccb->pdata[16], &tmpid[ATA_ID_PROD], 16);
|
|
|
- ata_id_strcpy((u16 *) &pccb->pdata[32], &tmpid[ATA_ID_FW_REV], 4);
|
|
|
+ ata_id_strcpy((u16 *)&pccb->pdata[16], &idbuf[ATA_ID_PROD], 16);
|
|
|
+ ata_id_strcpy((u16 *)&pccb->pdata[32], &idbuf[ATA_ID_FW_REV], 4);
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
- ata_dump_id(tmpid);
|
|
|
+ ata_dump_id(idbuf);
|
|
|
#endif
|
|
|
return 0;
|
|
|
}
|