diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-28 19:44:18 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-28 19:44:18 -0400 |
| commit | ec7ae517537ae5c7b0b2cd7f562dfa3e7a05b954 (patch) | |
| tree | e6b0c64a51a7c0aa0efd09d4f7a80872e3b1657a /drivers/scsi/mvsas | |
| parent | 97d2eb13a019ec09cc1a7ea2d3705c0b117b3c0d (diff) | |
| parent | 590134fa78fbdbe5fea78c7ae0b2c3364bc9572f (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (204 commits)
[SCSI] qla4xxx: export address/port of connection (fix udev disk names)
[SCSI] ipr: Fix BUG on adapter dump timeout
[SCSI] megaraid_sas: Fix instance access in megasas_reset_timer
[SCSI] hpsa: change confusing message to be more clear
[SCSI] iscsi class: fix vlan configuration
[SCSI] qla4xxx: fix data alignment and use nl helpers
[SCSI] iscsi class: fix link local mispelling
[SCSI] iscsi class: Replace iscsi_get_next_target_id with IDA
[SCSI] aacraid: use lower snprintf() limit
[SCSI] lpfc 8.3.27: Change driver version to 8.3.27
[SCSI] lpfc 8.3.27: T10 additions for SLI4
[SCSI] lpfc 8.3.27: Fix queue allocation failure recovery
[SCSI] lpfc 8.3.27: Change algorithm for getting physical port name
[SCSI] lpfc 8.3.27: Changed worst case mailbox timeout
[SCSI] lpfc 8.3.27: Miscellanous logic and interface fixes
[SCSI] megaraid_sas: Changelog and version update
[SCSI] megaraid_sas: Add driver workaround for PERC5/1068 kdump kernel panic
[SCSI] megaraid_sas: Add multiple MSI-X vector/multiple reply queue support
[SCSI] megaraid_sas: Add support for MegaRAID 9360/9380 12GB/s controllers
[SCSI] megaraid_sas: Clear FUSION_IN_RESET before enabling interrupts
...
Diffstat (limited to 'drivers/scsi/mvsas')
| -rw-r--r-- | drivers/scsi/mvsas/mv_94xx.c | 35 | ||||
| -rw-r--r-- | drivers/scsi/mvsas/mv_defs.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/mvsas/mv_init.c | 13 | ||||
| -rw-r--r-- | drivers/scsi/mvsas/mv_sas.c | 79 | ||||
| -rw-r--r-- | drivers/scsi/mvsas/mv_sas.h | 4 |
5 files changed, 68 insertions, 65 deletions
diff --git a/drivers/scsi/mvsas/mv_94xx.c b/drivers/scsi/mvsas/mv_94xx.c index 3501291618fd..7e423e5ad5e1 100644 --- a/drivers/scsi/mvsas/mv_94xx.c +++ b/drivers/scsi/mvsas/mv_94xx.c | |||
| @@ -398,6 +398,16 @@ static int __devinit mvs_94xx_init(struct mvs_info *mvi) | |||
| 398 | /* init phys */ | 398 | /* init phys */ |
| 399 | mvs_phy_hacks(mvi); | 399 | mvs_phy_hacks(mvi); |
| 400 | 400 | ||
| 401 | /* disable non data frame retry */ | ||
| 402 | tmp = mvs_cr32(mvi, CMD_SAS_CTL1); | ||
| 403 | if ((revision == VANIR_A0_REV) || | ||
| 404 | (revision == VANIR_B0_REV) || | ||
| 405 | (revision == VANIR_C0_REV)) { | ||
| 406 | tmp &= ~0xffff; | ||
| 407 | tmp |= 0x007f; | ||
| 408 | mvs_cw32(mvi, CMD_SAS_CTL1, tmp); | ||
| 409 | } | ||
| 410 | |||
| 401 | /* set LED blink when IO*/ | 411 | /* set LED blink when IO*/ |
| 402 | mw32(MVS_PA_VSR_ADDR, VSR_PHY_ACT_LED); | 412 | mw32(MVS_PA_VSR_ADDR, VSR_PHY_ACT_LED); |
| 403 | tmp = mr32(MVS_PA_VSR_PORT); | 413 | tmp = mr32(MVS_PA_VSR_PORT); |
| @@ -500,6 +510,27 @@ static int __devinit mvs_94xx_init(struct mvs_info *mvi) | |||
| 500 | tmp |= CINT_PHY_MASK; | 510 | tmp |= CINT_PHY_MASK; |
| 501 | mw32(MVS_INT_MASK, tmp); | 511 | mw32(MVS_INT_MASK, tmp); |
| 502 | 512 | ||
| 513 | tmp = mvs_cr32(mvi, CMD_LINK_TIMER); | ||
| 514 | tmp |= 0xFFFF0000; | ||
| 515 | mvs_cw32(mvi, CMD_LINK_TIMER, tmp); | ||
| 516 | |||
| 517 | /* tune STP performance */ | ||
| 518 | tmp = 0x003F003F; | ||
| 519 | mvs_cw32(mvi, CMD_PL_TIMER, tmp); | ||
| 520 | |||
| 521 | /* This can improve expander large block size seq write performance */ | ||
| 522 | tmp = mvs_cr32(mvi, CMD_PORT_LAYER_TIMER1); | ||
| 523 | tmp |= 0xFFFF007F; | ||
| 524 | mvs_cw32(mvi, CMD_PORT_LAYER_TIMER1, tmp); | ||
| 525 | |||
| 526 | /* change the connection open-close behavior (bit 9) | ||
| 527 | * set bit8 to 1 for performance tuning */ | ||
| 528 | tmp = mvs_cr32(mvi, CMD_SL_MODE0); | ||
| 529 | tmp |= 0x00000300; | ||
| 530 | /* set bit0 to 0 to enable retry for no_dest reject case */ | ||
| 531 | tmp &= 0xFFFFFFFE; | ||
| 532 | mvs_cw32(mvi, CMD_SL_MODE0, tmp); | ||
| 533 | |||
| 503 | /* Enable SRS interrupt */ | 534 | /* Enable SRS interrupt */ |
| 504 | mw32(MVS_INT_MASK_SRS_0, 0xFFFF); | 535 | mw32(MVS_INT_MASK_SRS_0, 0xFFFF); |
| 505 | 536 | ||
| @@ -823,6 +854,10 @@ static void mvs_94xx_fix_phy_info(struct mvs_info *mvi, int i, | |||
| 823 | phy->att_dev_info = PORT_DEV_STP_TRGT | 1; | 854 | phy->att_dev_info = PORT_DEV_STP_TRGT | 1; |
| 824 | } | 855 | } |
| 825 | 856 | ||
| 857 | /* enable spin up bit */ | ||
| 858 | mvs_write_port_cfg_addr(mvi, i, PHYR_PHY_STAT); | ||
| 859 | mvs_write_port_cfg_data(mvi, i, 0x04); | ||
| 860 | |||
| 826 | } | 861 | } |
| 827 | 862 | ||
| 828 | void mvs_94xx_phy_set_link_rate(struct mvs_info *mvi, u32 phy_id, | 863 | void mvs_94xx_phy_set_link_rate(struct mvs_info *mvi, u32 phy_id, |
diff --git a/drivers/scsi/mvsas/mv_defs.h b/drivers/scsi/mvsas/mv_defs.h index dec7cadb7485..f5451940d289 100644 --- a/drivers/scsi/mvsas/mv_defs.h +++ b/drivers/scsi/mvsas/mv_defs.h | |||
| @@ -387,6 +387,8 @@ enum sas_cmd_port_registers { | |||
| 387 | CMD_SL_MODE0 = 0x1BC, /* SL Mode 0 */ | 387 | CMD_SL_MODE0 = 0x1BC, /* SL Mode 0 */ |
| 388 | CMD_SL_MODE1 = 0x1C0, /* SL Mode 1 */ | 388 | CMD_SL_MODE1 = 0x1C0, /* SL Mode 1 */ |
| 389 | CMD_PND_FIFO_CTL1 = 0x1C4, /* Pending FIFO Control 1 */ | 389 | CMD_PND_FIFO_CTL1 = 0x1C4, /* Pending FIFO Control 1 */ |
| 390 | CMD_PORT_LAYER_TIMER1 = 0x1E0, /* Port Layer Timer 1 */ | ||
| 391 | CMD_LINK_TIMER = 0x1E4, /* Link Timer */ | ||
| 390 | }; | 392 | }; |
| 391 | 393 | ||
| 392 | enum mvs_info_flags { | 394 | enum mvs_info_flags { |
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c index 4e9af66fd1d3..621b5e072758 100644 --- a/drivers/scsi/mvsas/mv_init.c +++ b/drivers/scsi/mvsas/mv_init.c | |||
| @@ -59,7 +59,7 @@ static struct scsi_host_template mvs_sht = { | |||
| 59 | .name = DRV_NAME, | 59 | .name = DRV_NAME, |
| 60 | .queuecommand = sas_queuecommand, | 60 | .queuecommand = sas_queuecommand, |
| 61 | .target_alloc = sas_target_alloc, | 61 | .target_alloc = sas_target_alloc, |
| 62 | .slave_configure = mvs_slave_configure, | 62 | .slave_configure = sas_slave_configure, |
| 63 | .slave_destroy = sas_slave_destroy, | 63 | .slave_destroy = sas_slave_destroy, |
| 64 | .scan_finished = mvs_scan_finished, | 64 | .scan_finished = mvs_scan_finished, |
| 65 | .scan_start = mvs_scan_start, | 65 | .scan_start = mvs_scan_start, |
| @@ -74,7 +74,7 @@ static struct scsi_host_template mvs_sht = { | |||
| 74 | .use_clustering = ENABLE_CLUSTERING, | 74 | .use_clustering = ENABLE_CLUSTERING, |
| 75 | .eh_device_reset_handler = sas_eh_device_reset_handler, | 75 | .eh_device_reset_handler = sas_eh_device_reset_handler, |
| 76 | .eh_bus_reset_handler = sas_eh_bus_reset_handler, | 76 | .eh_bus_reset_handler = sas_eh_bus_reset_handler, |
| 77 | .slave_alloc = mvs_slave_alloc, | 77 | .slave_alloc = sas_slave_alloc, |
| 78 | .target_destroy = sas_target_destroy, | 78 | .target_destroy = sas_target_destroy, |
| 79 | .ioctl = sas_ioctl, | 79 | .ioctl = sas_ioctl, |
| 80 | .shost_attrs = mvst_host_attrs, | 80 | .shost_attrs = mvst_host_attrs, |
| @@ -707,6 +707,15 @@ static struct pci_device_id __devinitdata mvs_pci_table[] = { | |||
| 707 | { PCI_VDEVICE(TTI, 0x2760), chip_9480 }, | 707 | { PCI_VDEVICE(TTI, 0x2760), chip_9480 }, |
| 708 | { | 708 | { |
| 709 | .vendor = 0x1b4b, | 709 | .vendor = 0x1b4b, |
| 710 | .device = 0x9480, | ||
| 711 | .subvendor = PCI_ANY_ID, | ||
| 712 | .subdevice = 0x9480, | ||
| 713 | .class = 0, | ||
| 714 | .class_mask = 0, | ||
| 715 | .driver_data = chip_9480, | ||
| 716 | }, | ||
| 717 | { | ||
| 718 | .vendor = 0x1b4b, | ||
| 710 | .device = 0x9445, | 719 | .device = 0x9445, |
| 711 | .subvendor = PCI_ANY_ID, | 720 | .subvendor = PCI_ANY_ID, |
| 712 | .subdevice = 0x9480, | 721 | .subdevice = 0x9480, |
diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c index 4958fefff365..a4884a57cf79 100644 --- a/drivers/scsi/mvsas/mv_sas.c +++ b/drivers/scsi/mvsas/mv_sas.c | |||
| @@ -214,7 +214,7 @@ int mvs_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func, | |||
| 214 | break; | 214 | break; |
| 215 | case PHY_FUNC_RELEASE_SPINUP_HOLD: | 215 | case PHY_FUNC_RELEASE_SPINUP_HOLD: |
| 216 | default: | 216 | default: |
| 217 | rc = -EOPNOTSUPP; | 217 | rc = -ENOSYS; |
| 218 | } | 218 | } |
| 219 | msleep(200); | 219 | msleep(200); |
| 220 | return rc; | 220 | return rc; |
| @@ -265,6 +265,12 @@ static void mvs_bytes_dmaed(struct mvs_info *mvi, int i) | |||
| 265 | id->dev_type = phy->identify.device_type; | 265 | id->dev_type = phy->identify.device_type; |
| 266 | id->initiator_bits = SAS_PROTOCOL_ALL; | 266 | id->initiator_bits = SAS_PROTOCOL_ALL; |
| 267 | id->target_bits = phy->identify.target_port_protocols; | 267 | id->target_bits = phy->identify.target_port_protocols; |
| 268 | |||
| 269 | /* direct attached SAS device */ | ||
| 270 | if (phy->att_dev_info & PORT_SSP_TRGT_MASK) { | ||
| 271 | MVS_CHIP_DISP->write_port_cfg_addr(mvi, i, PHYR_PHY_STAT); | ||
| 272 | MVS_CHIP_DISP->write_port_cfg_data(mvi, i, 0x00); | ||
| 273 | } | ||
| 268 | } else if (phy->phy_type & PORT_TYPE_SATA) { | 274 | } else if (phy->phy_type & PORT_TYPE_SATA) { |
| 269 | /*Nothing*/ | 275 | /*Nothing*/ |
| 270 | } | 276 | } |
| @@ -276,36 +282,6 @@ static void mvs_bytes_dmaed(struct mvs_info *mvi, int i) | |||
| 276 | PORTE_BYTES_DMAED); | 282 | PORTE_BYTES_DMAED); |
| 277 | } | 283 | } |
| 278 | 284 | ||
| 279 | int mvs_slave_alloc(struct scsi_device *scsi_dev) | ||
| 280 | { | ||
| 281 | struct domain_device *dev = sdev_to_domain_dev(scsi_dev); | ||
| 282 | if (dev_is_sata(dev)) { | ||
| 283 | /* We don't need to rescan targets | ||
| 284 | * if REPORT_LUNS request is failed | ||
| 285 | */ | ||
| 286 | if (scsi_dev->lun > 0) | ||
| 287 | return -ENXIO; | ||
| 288 | scsi_dev->tagged_supported = 1; | ||
| 289 | } | ||
| 290 | |||
| 291 | return sas_slave_alloc(scsi_dev); | ||
| 292 | } | ||
| 293 | |||
| 294 | int mvs_slave_configure(struct scsi_device *sdev) | ||
| 295 | { | ||
| 296 | struct domain_device *dev = sdev_to_domain_dev(sdev); | ||
| 297 | int ret = sas_slave_configure(sdev); | ||
| 298 | |||
| 299 | if (ret) | ||
| 300 | return ret; | ||
| 301 | if (!dev_is_sata(dev)) { | ||
| 302 | sas_change_queue_depth(sdev, | ||
| 303 | MVS_QUEUE_SIZE, | ||
| 304 | SCSI_QDEPTH_DEFAULT); | ||
| 305 | } | ||
| 306 | return 0; | ||
| 307 | } | ||
| 308 | |||
| 309 | void mvs_scan_start(struct Scsi_Host *shost) | 285 | void mvs_scan_start(struct Scsi_Host *shost) |
| 310 | { | 286 | { |
| 311 | int i, j; | 287 | int i, j; |
| @@ -426,7 +402,7 @@ static int mvs_task_prep_smp(struct mvs_info *mvi, | |||
| 426 | /* generate open address frame hdr (first 12 bytes) */ | 402 | /* generate open address frame hdr (first 12 bytes) */ |
| 427 | /* initiator, SMP, ftype 1h */ | 403 | /* initiator, SMP, ftype 1h */ |
| 428 | buf_oaf[0] = (1 << 7) | (PROTOCOL_SMP << 4) | 0x01; | 404 | buf_oaf[0] = (1 << 7) | (PROTOCOL_SMP << 4) | 0x01; |
| 429 | buf_oaf[1] = dev->linkrate & 0xf; | 405 | buf_oaf[1] = min(sas_port->linkrate, dev->linkrate) & 0xf; |
| 430 | *(u16 *)(buf_oaf + 2) = 0xFFFF; /* SAS SPEC */ | 406 | *(u16 *)(buf_oaf + 2) = 0xFFFF; /* SAS SPEC */ |
| 431 | memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE); | 407 | memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE); |
| 432 | 408 | ||
| @@ -571,7 +547,7 @@ static int mvs_task_prep_ata(struct mvs_info *mvi, | |||
| 571 | /* generate open address frame hdr (first 12 bytes) */ | 547 | /* generate open address frame hdr (first 12 bytes) */ |
| 572 | /* initiator, STP, ftype 1h */ | 548 | /* initiator, STP, ftype 1h */ |
| 573 | buf_oaf[0] = (1 << 7) | (PROTOCOL_STP << 4) | 0x1; | 549 | buf_oaf[0] = (1 << 7) | (PROTOCOL_STP << 4) | 0x1; |
| 574 | buf_oaf[1] = dev->linkrate & 0xf; | 550 | buf_oaf[1] = min(sas_port->linkrate, dev->linkrate) & 0xf; |
| 575 | *(u16 *)(buf_oaf + 2) = cpu_to_be16(mvi_dev->device_id + 1); | 551 | *(u16 *)(buf_oaf + 2) = cpu_to_be16(mvi_dev->device_id + 1); |
| 576 | memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE); | 552 | memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE); |
| 577 | 553 | ||
| @@ -679,7 +655,7 @@ static int mvs_task_prep_ssp(struct mvs_info *mvi, | |||
| 679 | /* generate open address frame hdr (first 12 bytes) */ | 655 | /* generate open address frame hdr (first 12 bytes) */ |
| 680 | /* initiator, SSP, ftype 1h */ | 656 | /* initiator, SSP, ftype 1h */ |
| 681 | buf_oaf[0] = (1 << 7) | (PROTOCOL_SSP << 4) | 0x1; | 657 | buf_oaf[0] = (1 << 7) | (PROTOCOL_SSP << 4) | 0x1; |
| 682 | buf_oaf[1] = dev->linkrate & 0xf; | 658 | buf_oaf[1] = min(sas_port->linkrate, dev->linkrate) & 0xf; |
| 683 | *(u16 *)(buf_oaf + 2) = cpu_to_be16(mvi_dev->device_id + 1); | 659 | *(u16 *)(buf_oaf + 2) = cpu_to_be16(mvi_dev->device_id + 1); |
| 684 | memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE); | 660 | memcpy(buf_oaf + 4, dev->sas_addr, SAS_ADDR_SIZE); |
| 685 | 661 | ||
| @@ -1241,6 +1217,12 @@ static void mvs_port_notify_formed(struct asd_sas_phy *sas_phy, int lock) | |||
| 1241 | port->wide_port_phymap = sas_port->phy_mask; | 1217 | port->wide_port_phymap = sas_port->phy_mask; |
| 1242 | mv_printk("set wide port phy map %x\n", sas_port->phy_mask); | 1218 | mv_printk("set wide port phy map %x\n", sas_port->phy_mask); |
| 1243 | mvs_update_wideport(mvi, sas_phy->id); | 1219 | mvs_update_wideport(mvi, sas_phy->id); |
| 1220 | |||
| 1221 | /* direct attached SAS device */ | ||
| 1222 | if (phy->att_dev_info & PORT_SSP_TRGT_MASK) { | ||
| 1223 | MVS_CHIP_DISP->write_port_cfg_addr(mvi, i, PHYR_PHY_STAT); | ||
| 1224 | MVS_CHIP_DISP->write_port_cfg_data(mvi, i, 0x04); | ||
| 1225 | } | ||
| 1244 | } | 1226 | } |
| 1245 | if (lock) | 1227 | if (lock) |
| 1246 | spin_unlock_irqrestore(&mvi->lock, flags); | 1228 | spin_unlock_irqrestore(&mvi->lock, flags); |
| @@ -1387,28 +1369,6 @@ void mvs_dev_gone(struct domain_device *dev) | |||
| 1387 | mvs_dev_gone_notify(dev); | 1369 | mvs_dev_gone_notify(dev); |
| 1388 | } | 1370 | } |
| 1389 | 1371 | ||
| 1390 | static struct sas_task *mvs_alloc_task(void) | ||
| 1391 | { | ||
| 1392 | struct sas_task *task = kzalloc(sizeof(struct sas_task), GFP_KERNEL); | ||
| 1393 | |||
| 1394 | if (task) { | ||
| 1395 | INIT_LIST_HEAD(&task->list); | ||
| 1396 | spin_lock_init(&task->task_state_lock); | ||
| 1397 | task->task_state_flags = SAS_TASK_STATE_PENDING; | ||
| 1398 | init_timer(&task->timer); | ||
| 1399 | init_completion(&task->completion); | ||
| 1400 | } | ||
| 1401 | return task; | ||
| 1402 | } | ||
| 1403 | |||
| 1404 | static void mvs_free_task(struct sas_task *task) | ||
| 1405 | { | ||
| 1406 | if (task) { | ||
| 1407 | BUG_ON(!list_empty(&task->list)); | ||
| 1408 | kfree(task); | ||
| 1409 | } | ||
| 1410 | } | ||
| 1411 | |||
| 1412 | static void mvs_task_done(struct sas_task *task) | 1372 | static void mvs_task_done(struct sas_task *task) |
| 1413 | { | 1373 | { |
| 1414 | if (!del_timer(&task->timer)) | 1374 | if (!del_timer(&task->timer)) |
| @@ -1432,7 +1392,7 @@ static int mvs_exec_internal_tmf_task(struct domain_device *dev, | |||
| 1432 | struct sas_task *task = NULL; | 1392 | struct sas_task *task = NULL; |
| 1433 | 1393 | ||
| 1434 | for (retry = 0; retry < 3; retry++) { | 1394 | for (retry = 0; retry < 3; retry++) { |
| 1435 | task = mvs_alloc_task(); | 1395 | task = sas_alloc_task(GFP_KERNEL); |
| 1436 | if (!task) | 1396 | if (!task) |
| 1437 | return -ENOMEM; | 1397 | return -ENOMEM; |
| 1438 | 1398 | ||
| @@ -1490,15 +1450,14 @@ static int mvs_exec_internal_tmf_task(struct domain_device *dev, | |||
| 1490 | SAS_ADDR(dev->sas_addr), | 1450 | SAS_ADDR(dev->sas_addr), |
| 1491 | task->task_status.resp, | 1451 | task->task_status.resp, |
| 1492 | task->task_status.stat); | 1452 | task->task_status.stat); |
| 1493 | mvs_free_task(task); | 1453 | sas_free_task(task); |
| 1494 | task = NULL; | 1454 | task = NULL; |
| 1495 | 1455 | ||
| 1496 | } | 1456 | } |
| 1497 | } | 1457 | } |
| 1498 | ex_err: | 1458 | ex_err: |
| 1499 | BUG_ON(retry == 3 && task != NULL); | 1459 | BUG_ON(retry == 3 && task != NULL); |
| 1500 | if (task != NULL) | 1460 | sas_free_task(task); |
| 1501 | mvs_free_task(task); | ||
| 1502 | return res; | 1461 | return res; |
| 1503 | } | 1462 | } |
| 1504 | 1463 | ||
diff --git a/drivers/scsi/mvsas/mv_sas.h b/drivers/scsi/mvsas/mv_sas.h index 44b474513223..c04a4f5b5972 100644 --- a/drivers/scsi/mvsas/mv_sas.h +++ b/drivers/scsi/mvsas/mv_sas.h | |||
| @@ -46,7 +46,7 @@ | |||
| 46 | #include "mv_defs.h" | 46 | #include "mv_defs.h" |
| 47 | 47 | ||
| 48 | #define DRV_NAME "mvsas" | 48 | #define DRV_NAME "mvsas" |
| 49 | #define DRV_VERSION "0.8.2" | 49 | #define DRV_VERSION "0.8.16" |
| 50 | #define MVS_ID_NOT_MAPPED 0x7f | 50 | #define MVS_ID_NOT_MAPPED 0x7f |
| 51 | #define WIDE_PORT_MAX_PHY 4 | 51 | #define WIDE_PORT_MAX_PHY 4 |
| 52 | #define mv_printk(fmt, arg ...) \ | 52 | #define mv_printk(fmt, arg ...) \ |
| @@ -458,8 +458,6 @@ int mvs_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func, | |||
| 458 | void *funcdata); | 458 | void *funcdata); |
| 459 | void __devinit mvs_set_sas_addr(struct mvs_info *mvi, int port_id, | 459 | void __devinit mvs_set_sas_addr(struct mvs_info *mvi, int port_id, |
| 460 | u32 off_lo, u32 off_hi, u64 sas_addr); | 460 | u32 off_lo, u32 off_hi, u64 sas_addr); |
| 461 | int mvs_slave_alloc(struct scsi_device *scsi_dev); | ||
| 462 | int mvs_slave_configure(struct scsi_device *sdev); | ||
| 463 | void mvs_scan_start(struct Scsi_Host *shost); | 461 | void mvs_scan_start(struct Scsi_Host *shost); |
| 464 | int mvs_scan_finished(struct Scsi_Host *shost, unsigned long time); | 462 | int mvs_scan_finished(struct Scsi_Host *shost, unsigned long time); |
| 465 | int mvs_queue_command(struct sas_task *task, const int num, | 463 | int mvs_queue_command(struct sas_task *task, const int num, |
