[ES40-developers] Patch: scsi page code 0
Status: Alpha
Brought to you by:
iamcamiel
From: Brian W. <bdw...@in...> - 2008-02-18 14:34:28
|
Tru64 needed scsi page code 0 for it to boot up properly, so here's a patch that adds it. Its basically a list of page codes supported, so if any others are added, make sure to insert them in the proper place in page 0's list and increase the page length. Brian Index: Disk.cpp =================================================================== RCS file: /cvsroot/es40/es40/src/Disk.cpp,v retrieving revision 1.23 diff -u -r1.23 Disk.cpp --- Disk.cpp 18 Feb 2008 12:58:33 -0000 1.23 +++ Disk.cpp 18 Feb 2008 14:31:09 -0000 @@ -732,23 +732,30 @@ if (state.scsi.cmd.data[1] & 0x01) { // Vital Product Data - if (state.scsi.cmd.data[2] == 0x80) - { - char serial_number[20]; - sprintf(serial_number,"SRL%04x",scsi_initiator_id[0]*0x0101); - // unit serial number page - state.scsi.dati.data[1] = 0x80; // page code: 0x80 - state.scsi.dati.data[2] = 0x00; // reserved - state.scsi.dati.data[3] = (u8)strlen(serial_number); - memcpy(&state.scsi.dati.data[4],serial_number,strlen(serial_number)); - } - else - { - printf("Don't know format for vital product data page %02x!! \n",state.scsi.cmd.data[2]); - FAILURE("SCSI Command Failed"); - state.scsi.dati.data[1] = state.scsi.cmd.data[2]; // page code - state.scsi.dati.data[2] = 0x00; // reserved - } + switch(state.scsi.cmd.data[2]) + { + case 0x00: + state.scsi.dati.data[1] = 0x00; // page code 0 + state.scsi.dati.data[2] = 0x00; // reserved + state.scsi.dati.data[3] = 0x02; // page length + state.scsi.dati.data[4] = 0x00; // page 0 is supported. + state.scsi.dati.data[5] = 0x80; // page 0x80 is supported. + break; + case 0x80: + char serial_number[20]; + sprintf(serial_number,"SRL% 04x",scsi_initiator_id[0]*0x0101); + // unit serial number page + state.scsi.dati.data[1] = 0x80; // page code: 0x80 + state.scsi.dati.data[2] = 0x00; // reserved + state.scsi.dati.data[3] = (u8)strlen(serial_number); + memcpy(&state.scsi.dati.data[4],serial_number,strlen(serial_number)); + break; + default: + printf("Don't know format for vital product data page %02x!! \n",state.scsi.cmd.data[2]); + FAILURE("SCSI Command Failed"); + state.scsi.dati.data[1] = state.scsi.cmd.data[2]; // page code + state.scsi.dati.data[2] = 0x00; // reserved + } } else { |