diff options
Diffstat (limited to 'uClinux-2.4.20-uc1/drivers/scsi/sd.c')
-rw-r--r-- | uClinux-2.4.20-uc1/drivers/scsi/sd.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/uClinux-2.4.20-uc1/drivers/scsi/sd.c b/uClinux-2.4.20-uc1/drivers/scsi/sd.c index 1e0749b..faf38a2 100644 --- a/uClinux-2.4.20-uc1/drivers/scsi/sd.c +++ b/uClinux-2.4.20-uc1/drivers/scsi/sd.c @@ -376,10 +376,16 @@ static int sd_init_command(Scsi_Cmnd * SCpnt) return 0; } SCpnt->cmnd[0] = WRITE_6; +#ifdef CONFIG_BOARD_W90N745 + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[0] = WRITE_6; +#endif SCpnt->sc_data_direction = SCSI_DATA_WRITE; break; case READ: SCpnt->cmnd[0] = READ_6; +#ifdef CONFIG_BOARD_W90N745 + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[0] = READ_6; +#endif SCpnt->sc_data_direction = SCSI_DATA_READ; break; default: @@ -394,6 +400,11 @@ static int sd_init_command(Scsi_Cmnd * SCpnt) SCpnt->cmnd[1] = (SCpnt->device->scsi_level <= SCSI_2) ? ((SCpnt->lun << 5) & 0xe0) : 0; +#ifdef CONFIG_BOARD_W90N745 + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[1] = (SCpnt->device->scsi_level <= SCSI_2) ? + ((SCpnt->lun << 5) & 0xe0) : 0; +#endif + if (((this_count > 0xff) || (block > 0x1fffff)) || SCpnt->device->ten) { if (this_count > 0xffff) this_count = 0xffff; @@ -406,6 +417,16 @@ static int sd_init_command(Scsi_Cmnd * SCpnt) SCpnt->cmnd[6] = SCpnt->cmnd[9] = 0; SCpnt->cmnd[7] = (unsigned char) (this_count >> 8) & 0xff; SCpnt->cmnd[8] = (unsigned char) this_count & 0xff; +#ifdef CONFIG_BOARD_W90N745 + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[0] = SCpnt->cmnd[0]; + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[2] = (unsigned char) (block >> 24) & 0xff; + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[3] = (unsigned char) (block >> 16) & 0xff; + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[4] = (unsigned char) (block >> 8) & 0xff; + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[5] = (unsigned char) block & 0xff; + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[6] = SCpnt->cmnd[9] = 0; + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[7] = (unsigned char) (this_count >> 8) & 0xff; + ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[8] = (unsigned char) this_count & 0xff; +#endif } else { if (this_count > 0xff) this_count = 0xff; @@ -415,6 +436,14 @@ static int sd_init_command(Scsi_Cmnd * SCpnt) SCpnt->cmnd[3] = (unsigned char) block & 0xff; SCpnt->cmnd[4] = (unsigned char) this_count; SCpnt->cmnd[5] = 0; + +#ifdef CONFIG_BOARD_W90N745 + ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[1] |= (unsigned char) ((block >> 16) & 0x1f); + ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[2] = (unsigned char) ((block >> 8) & 0xff); + ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[3] = (unsigned char) block & 0xff; + ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[4] = (unsigned char) this_count; + ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[5] = 0; +#endif } /* @@ -805,6 +834,9 @@ static int sd_init_onedisk(int i) return i; } +#ifdef CONFIG_BOARD_W90N745 + buffer = (unsigned char *)((unsigned long)buffer | 0x80000000); +#endif spintime = 0; /* Spin up drives, as required. Only do this at boot time */ |