aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/rts_pstor
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rts_pstor')
-rw-r--r--drivers/staging/rts_pstor/ms.c3
-rw-r--r--drivers/staging/rts_pstor/rtsx.c5
-rw-r--r--drivers/staging/rts_pstor/rtsx_transport.c11
3 files changed, 13 insertions, 6 deletions
diff --git a/drivers/staging/rts_pstor/ms.c b/drivers/staging/rts_pstor/ms.c
index 66341dff8c9..f9a4498984c 100644
--- a/drivers/staging/rts_pstor/ms.c
+++ b/drivers/staging/rts_pstor/ms.c
@@ -3498,7 +3498,8 @@ static int ms_rw_multi_sector(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32
3498 3498
3499 log_blk++; 3499 log_blk++;
3500 3500
3501 for (seg_no = 0; seg_no < sizeof(ms_start_idx)/2; seg_no++) { 3501 for (seg_no = 0; seg_no < ARRAY_SIZE(ms_start_idx) - 1;
3502 seg_no++) {
3502 if (log_blk < ms_start_idx[seg_no+1]) 3503 if (log_blk < ms_start_idx[seg_no+1])
3503 break; 3504 break;
3504 } 3505 }
diff --git a/drivers/staging/rts_pstor/rtsx.c b/drivers/staging/rts_pstor/rtsx.c
index a7feb3e328a..1dccd933a7e 100644
--- a/drivers/staging/rts_pstor/rtsx.c
+++ b/drivers/staging/rts_pstor/rtsx.c
@@ -1000,6 +1000,11 @@ static int __devinit rtsx_probe(struct pci_dev *pci,
1000 1000
1001 rtsx_init_chip(dev->chip); 1001 rtsx_init_chip(dev->chip);
1002 1002
1003 /* set the supported max_lun and max_id for the scsi host
1004 * NOTE: the minimal value of max_id is 1 */
1005 host->max_id = 1;
1006 host->max_lun = dev->chip->max_lun;
1007
1003 /* Start up our control thread */ 1008 /* Start up our control thread */
1004 th = kthread_run(rtsx_control_thread, dev, CR_DRIVER_NAME); 1009 th = kthread_run(rtsx_control_thread, dev, CR_DRIVER_NAME);
1005 if (IS_ERR(th)) { 1010 if (IS_ERR(th)) {
diff --git a/drivers/staging/rts_pstor/rtsx_transport.c b/drivers/staging/rts_pstor/rtsx_transport.c
index 4e3d2c106af..9b2e5c99870 100644
--- a/drivers/staging/rts_pstor/rtsx_transport.c
+++ b/drivers/staging/rts_pstor/rtsx_transport.c
@@ -335,6 +335,7 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
335 int sg_cnt, i, resid; 335 int sg_cnt, i, resid;
336 int err = 0; 336 int err = 0;
337 long timeleft; 337 long timeleft;
338 struct scatterlist *sg_ptr;
338 u32 val = TRIG_DMA; 339 u32 val = TRIG_DMA;
339 340
340 if ((sg == NULL) || (num_sg <= 0) || !offset || !index) 341 if ((sg == NULL) || (num_sg <= 0) || !offset || !index)
@@ -371,7 +372,7 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
371 sg_cnt = dma_map_sg(&(rtsx->pci->dev), sg, num_sg, dma_dir); 372 sg_cnt = dma_map_sg(&(rtsx->pci->dev), sg, num_sg, dma_dir);
372 373
373 resid = size; 374 resid = size;
374 375 sg_ptr = sg;
375 chip->sgi = 0; 376 chip->sgi = 0;
376 /* Usually the next entry will be @sg@ + 1, but if this sg element 377 /* Usually the next entry will be @sg@ + 1, but if this sg element
377 * is part of a chained scatterlist, it could jump to the start of 378 * is part of a chained scatterlist, it could jump to the start of
@@ -379,14 +380,14 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
379 * the proper sg 380 * the proper sg
380 */ 381 */
381 for (i = 0; i < *index; i++) 382 for (i = 0; i < *index; i++)
382 sg = sg_next(sg); 383 sg_ptr = sg_next(sg_ptr);
383 for (i = *index; i < sg_cnt; i++) { 384 for (i = *index; i < sg_cnt; i++) {
384 dma_addr_t addr; 385 dma_addr_t addr;
385 unsigned int len; 386 unsigned int len;
386 u8 option; 387 u8 option;
387 388
388 addr = sg_dma_address(sg); 389 addr = sg_dma_address(sg_ptr);
389 len = sg_dma_len(sg); 390 len = sg_dma_len(sg_ptr);
390 391
391 RTSX_DEBUGP("DMA addr: 0x%x, Len: 0x%x\n", 392 RTSX_DEBUGP("DMA addr: 0x%x, Len: 0x%x\n",
392 (unsigned int)addr, len); 393 (unsigned int)addr, len);
@@ -415,7 +416,7 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
415 if (!resid) 416 if (!resid)
416 break; 417 break;
417 418
418 sg = sg_next(sg); 419 sg_ptr = sg_next(sg_ptr);
419 } 420 }
420 421
421 RTSX_DEBUGP("SG table count = %d\n", chip->sgi); 422 RTSX_DEBUGP("SG table count = %d\n", chip->sgi);