aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-05-12 07:01:03 -0400
committerDan Williams <dan.j.williams@intel.com>2011-07-03 07:04:48 -0400
commit931532364e7966f61683bdf40fa1698d6707f523 (patch)
tree650417ae7c31cb108ac305a166282e1ede7dae1a
parent966699b50c61940e06ff39fb1085bea813f9a51d (diff)
isci: unify phy stop handlers
Merge all implementations in scic_sds_phy_stop(), and kill the state handler Reported-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--drivers/scsi/isci/phy.c79
-rw-r--r--drivers/scsi/isci/phy.h6
2 files changed, 23 insertions, 62 deletions
diff --git a/drivers/scsi/isci/phy.c b/drivers/scsi/isci/phy.c
index 7cae192a2a30..cf8f2e9f6b25 100644
--- a/drivers/scsi/isci/phy.c
+++ b/drivers/scsi/isci/phy.c
@@ -463,16 +463,31 @@ enum sci_status scic_sds_phy_start(struct scic_sds_phy *sci_phy)
463 return SCI_SUCCESS; 463 return SCI_SUCCESS;
464} 464}
465 465
466/**
467 * This method will attempt to stop the phy object.
468 * @sci_phy:
469 *
470 * enum sci_status SCI_SUCCESS if the phy is going to stop SCI_INVALID_STATE
471 * if the phy is not in a valid state to stop
472 */
473enum sci_status scic_sds_phy_stop(struct scic_sds_phy *sci_phy) 466enum sci_status scic_sds_phy_stop(struct scic_sds_phy *sci_phy)
474{ 467{
475 return sci_phy->state_handlers->stop_handler(sci_phy); 468 enum scic_sds_phy_states state = sci_phy->state_machine.current_state_id;
469
470 switch (state) {
471 case SCIC_SDS_PHY_STARTING_SUBSTATE_INITIAL:
472 case SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_OSSP_EN:
473 case SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SAS_SPEED_EN:
474 case SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SAS_POWER:
475 case SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_POWER:
476 case SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_PHY_EN:
477 case SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_SPEED_EN:
478 case SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SIG_FIS_UF:
479 case SCIC_SDS_PHY_STARTING_SUBSTATE_FINAL:
480 case SCI_BASE_PHY_STATE_READY:
481 break;
482 default:
483 dev_dbg(sciphy_to_dev(sci_phy),
484 "%s: in wrong state: %d\n", __func__, state);
485 return SCI_FAILURE_INVALID_STATE;
486 }
487
488 sci_base_state_machine_change_state(&sci_phy->state_machine,
489 SCI_BASE_PHY_STATE_STOPPED);
490 return SCI_SUCCESS;
476} 491}
477 492
478/** 493/**
@@ -611,23 +626,6 @@ static void scic_sds_phy_restart_starting_state(
611 SCI_BASE_PHY_STATE_STARTING); 626 SCI_BASE_PHY_STATE_STARTING);
612} 627}
613 628
614/* ****************************************************************************
615 * SCIC SDS PHY general handlers
616 ************************************************************************** */
617static enum sci_status scic_sds_phy_starting_substate_general_stop_handler(
618 struct scic_sds_phy *phy)
619{
620 sci_base_state_machine_change_state(&phy->state_machine,
621 SCI_BASE_PHY_STATE_STOPPED);
622
623 return SCI_SUCCESS;
624}
625
626/*
627 * *****************************************************************************
628 * * SCIC SDS PHY EVENT_HANDLERS
629 * ***************************************************************************** */
630
631/** 629/**
632 * 630 *
633 * @phy: This struct scic_sds_phy object which has received an event. 631 * @phy: This struct scic_sds_phy object which has received an event.
@@ -1268,12 +1266,6 @@ static enum sci_status default_phy_handler(struct scic_sds_phy *sci_phy,
1268} 1266}
1269 1267
1270static enum sci_status 1268static enum sci_status
1271scic_sds_phy_default_stop_handler(struct scic_sds_phy *sci_phy)
1272{
1273 return default_phy_handler(sci_phy, __func__);
1274}
1275
1276static enum sci_status
1277scic_sds_phy_default_reset_handler(struct scic_sds_phy *sci_phy) 1269scic_sds_phy_default_reset_handler(struct scic_sds_phy *sci_phy)
1278{ 1270{
1279 return default_phy_handler(sci_phy, __func__); 1271 return default_phy_handler(sci_phy, __func__);
@@ -1317,15 +1309,6 @@ scic_sds_phy_stopped_state_destroy_handler(struct scic_sds_phy *sci_phy)
1317} 1309}
1318 1310
1319static enum sci_status 1311static enum sci_status
1320scic_sds_phy_ready_state_stop_handler(struct scic_sds_phy *sci_phy)
1321{
1322 sci_base_state_machine_change_state(&sci_phy->state_machine,
1323 SCI_BASE_PHY_STATE_STOPPED);
1324
1325 return SCI_SUCCESS;
1326}
1327
1328static enum sci_status
1329scic_sds_phy_ready_state_reset_handler(struct scic_sds_phy *sci_phy) 1312scic_sds_phy_ready_state_reset_handler(struct scic_sds_phy *sci_phy)
1330{ 1313{
1331 sci_base_state_machine_change_state(&sci_phy->state_machine, 1314 sci_base_state_machine_change_state(&sci_phy->state_machine,
@@ -1409,7 +1392,6 @@ static enum sci_status scic_sds_phy_resetting_state_event_handler(struct scic_sd
1409 1392
1410static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[] = { 1393static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[] = {
1411 [SCI_BASE_PHY_STATE_INITIAL] = { 1394 [SCI_BASE_PHY_STATE_INITIAL] = {
1412 .stop_handler = scic_sds_phy_default_stop_handler,
1413 .reset_handler = scic_sds_phy_default_reset_handler, 1395 .reset_handler = scic_sds_phy_default_reset_handler,
1414 .destruct_handler = scic_sds_phy_default_destroy_handler, 1396 .destruct_handler = scic_sds_phy_default_destroy_handler,
1415 .frame_handler = scic_sds_phy_default_frame_handler, 1397 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1417,7 +1399,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1417 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1399 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1418 }, 1400 },
1419 [SCI_BASE_PHY_STATE_STOPPED] = { 1401 [SCI_BASE_PHY_STATE_STOPPED] = {
1420 .stop_handler = scic_sds_phy_default_stop_handler,
1421 .reset_handler = scic_sds_phy_default_reset_handler, 1402 .reset_handler = scic_sds_phy_default_reset_handler,
1422 .destruct_handler = scic_sds_phy_stopped_state_destroy_handler, 1403 .destruct_handler = scic_sds_phy_stopped_state_destroy_handler,
1423 .frame_handler = scic_sds_phy_default_frame_handler, 1404 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1425,7 +1406,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1425 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1406 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1426 }, 1407 },
1427 [SCI_BASE_PHY_STATE_STARTING] = { 1408 [SCI_BASE_PHY_STATE_STARTING] = {
1428 .stop_handler = scic_sds_phy_default_stop_handler,
1429 .reset_handler = scic_sds_phy_default_reset_handler, 1409 .reset_handler = scic_sds_phy_default_reset_handler,
1430 .destruct_handler = scic_sds_phy_default_destroy_handler, 1410 .destruct_handler = scic_sds_phy_default_destroy_handler,
1431 .frame_handler = scic_sds_phy_default_frame_handler, 1411 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1433,7 +1413,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1433 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1413 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1434 }, 1414 },
1435 [SCIC_SDS_PHY_STARTING_SUBSTATE_INITIAL] = { 1415 [SCIC_SDS_PHY_STARTING_SUBSTATE_INITIAL] = {
1436 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1437 .reset_handler = scic_sds_phy_default_reset_handler, 1416 .reset_handler = scic_sds_phy_default_reset_handler,
1438 .destruct_handler = scic_sds_phy_default_destroy_handler, 1417 .destruct_handler = scic_sds_phy_default_destroy_handler,
1439 .frame_handler = scic_sds_phy_default_frame_handler, 1418 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1441,7 +1420,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1441 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1420 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1442 }, 1421 },
1443 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_OSSP_EN] = { 1422 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_OSSP_EN] = {
1444 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1445 .reset_handler = scic_sds_phy_default_reset_handler, 1423 .reset_handler = scic_sds_phy_default_reset_handler,
1446 .destruct_handler = scic_sds_phy_default_destroy_handler, 1424 .destruct_handler = scic_sds_phy_default_destroy_handler,
1447 .frame_handler = scic_sds_phy_default_frame_handler, 1425 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1449,7 +1427,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1449 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1427 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1450 }, 1428 },
1451 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SAS_SPEED_EN] = { 1429 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SAS_SPEED_EN] = {
1452 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1453 .reset_handler = scic_sds_phy_default_reset_handler, 1430 .reset_handler = scic_sds_phy_default_reset_handler,
1454 .destruct_handler = scic_sds_phy_default_destroy_handler, 1431 .destruct_handler = scic_sds_phy_default_destroy_handler,
1455 .frame_handler = scic_sds_phy_default_frame_handler, 1432 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1457,7 +1434,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1457 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1434 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1458 }, 1435 },
1459 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_IAF_UF] = { 1436 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_IAF_UF] = {
1460 .stop_handler = scic_sds_phy_default_stop_handler,
1461 .reset_handler = scic_sds_phy_default_reset_handler, 1437 .reset_handler = scic_sds_phy_default_reset_handler,
1462 .destruct_handler = scic_sds_phy_default_destroy_handler, 1438 .destruct_handler = scic_sds_phy_default_destroy_handler,
1463 .frame_handler = scic_sds_phy_starting_substate_await_iaf_uf_frame_handler, 1439 .frame_handler = scic_sds_phy_starting_substate_await_iaf_uf_frame_handler,
@@ -1465,7 +1441,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1465 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1441 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1466 }, 1442 },
1467 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SAS_POWER] = { 1443 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SAS_POWER] = {
1468 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1469 .reset_handler = scic_sds_phy_default_reset_handler, 1444 .reset_handler = scic_sds_phy_default_reset_handler,
1470 .destruct_handler = scic_sds_phy_default_destroy_handler, 1445 .destruct_handler = scic_sds_phy_default_destroy_handler,
1471 .frame_handler = scic_sds_phy_default_frame_handler, 1446 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1473,7 +1448,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1473 .consume_power_handler = scic_sds_phy_starting_substate_await_sas_power_consume_power_handler 1448 .consume_power_handler = scic_sds_phy_starting_substate_await_sas_power_consume_power_handler
1474 }, 1449 },
1475 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_POWER] = { 1450 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_POWER] = {
1476 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1477 .reset_handler = scic_sds_phy_default_reset_handler, 1451 .reset_handler = scic_sds_phy_default_reset_handler,
1478 .destruct_handler = scic_sds_phy_default_destroy_handler, 1452 .destruct_handler = scic_sds_phy_default_destroy_handler,
1479 .frame_handler = scic_sds_phy_default_frame_handler, 1453 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1481,7 +1455,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1481 .consume_power_handler = scic_sds_phy_starting_substate_await_sata_power_consume_power_handler 1455 .consume_power_handler = scic_sds_phy_starting_substate_await_sata_power_consume_power_handler
1482 }, 1456 },
1483 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_PHY_EN] = { 1457 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_PHY_EN] = {
1484 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1485 .reset_handler = scic_sds_phy_default_reset_handler, 1458 .reset_handler = scic_sds_phy_default_reset_handler,
1486 .destruct_handler = scic_sds_phy_default_destroy_handler, 1459 .destruct_handler = scic_sds_phy_default_destroy_handler,
1487 .frame_handler = scic_sds_phy_default_frame_handler, 1460 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1489,7 +1462,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1489 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1462 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1490 }, 1463 },
1491 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_SPEED_EN] = { 1464 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SATA_SPEED_EN] = {
1492 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1493 .reset_handler = scic_sds_phy_default_reset_handler, 1465 .reset_handler = scic_sds_phy_default_reset_handler,
1494 .destruct_handler = scic_sds_phy_default_destroy_handler, 1466 .destruct_handler = scic_sds_phy_default_destroy_handler,
1495 .frame_handler = scic_sds_phy_default_frame_handler, 1467 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1497,7 +1469,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1497 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1469 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1498 }, 1470 },
1499 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SIG_FIS_UF] = { 1471 [SCIC_SDS_PHY_STARTING_SUBSTATE_AWAIT_SIG_FIS_UF] = {
1500 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1501 .reset_handler = scic_sds_phy_default_reset_handler, 1472 .reset_handler = scic_sds_phy_default_reset_handler,
1502 .destruct_handler = scic_sds_phy_default_destroy_handler, 1473 .destruct_handler = scic_sds_phy_default_destroy_handler,
1503 .frame_handler = scic_sds_phy_starting_substate_await_sig_fis_frame_handler, 1474 .frame_handler = scic_sds_phy_starting_substate_await_sig_fis_frame_handler,
@@ -1505,7 +1476,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1505 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1476 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1506 }, 1477 },
1507 [SCIC_SDS_PHY_STARTING_SUBSTATE_FINAL] = { 1478 [SCIC_SDS_PHY_STARTING_SUBSTATE_FINAL] = {
1508 .stop_handler = scic_sds_phy_starting_substate_general_stop_handler,
1509 .reset_handler = scic_sds_phy_default_reset_handler, 1479 .reset_handler = scic_sds_phy_default_reset_handler,
1510 .destruct_handler = scic_sds_phy_default_destroy_handler, 1480 .destruct_handler = scic_sds_phy_default_destroy_handler,
1511 .frame_handler = scic_sds_phy_default_frame_handler, 1481 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1513,7 +1483,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1513 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1483 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1514 }, 1484 },
1515 [SCI_BASE_PHY_STATE_READY] = { 1485 [SCI_BASE_PHY_STATE_READY] = {
1516 .stop_handler = scic_sds_phy_ready_state_stop_handler,
1517 .reset_handler = scic_sds_phy_ready_state_reset_handler, 1486 .reset_handler = scic_sds_phy_ready_state_reset_handler,
1518 .destruct_handler = scic_sds_phy_default_destroy_handler, 1487 .destruct_handler = scic_sds_phy_default_destroy_handler,
1519 .frame_handler = scic_sds_phy_default_frame_handler, 1488 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1521,7 +1490,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1521 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1490 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1522 }, 1491 },
1523 [SCI_BASE_PHY_STATE_RESETTING] = { 1492 [SCI_BASE_PHY_STATE_RESETTING] = {
1524 .stop_handler = scic_sds_phy_default_stop_handler,
1525 .reset_handler = scic_sds_phy_default_reset_handler, 1493 .reset_handler = scic_sds_phy_default_reset_handler,
1526 .destruct_handler = scic_sds_phy_default_destroy_handler, 1494 .destruct_handler = scic_sds_phy_default_destroy_handler,
1527 .frame_handler = scic_sds_phy_default_frame_handler, 1495 .frame_handler = scic_sds_phy_default_frame_handler,
@@ -1529,7 +1497,6 @@ static const struct scic_sds_phy_state_handler scic_sds_phy_state_handler_table[
1529 .consume_power_handler = scic_sds_phy_default_consume_power_handler 1497 .consume_power_handler = scic_sds_phy_default_consume_power_handler
1530 }, 1498 },
1531 [SCI_BASE_PHY_STATE_FINAL] = { 1499 [SCI_BASE_PHY_STATE_FINAL] = {
1532 .stop_handler = scic_sds_phy_default_stop_handler,
1533 .reset_handler = scic_sds_phy_default_reset_handler, 1500 .reset_handler = scic_sds_phy_default_reset_handler,
1534 .destruct_handler = scic_sds_phy_default_destroy_handler, 1501 .destruct_handler = scic_sds_phy_default_destroy_handler,
1535 .frame_handler = scic_sds_phy_default_frame_handler, 1502 .frame_handler = scic_sds_phy_default_frame_handler,
diff --git a/drivers/scsi/isci/phy.h b/drivers/scsi/isci/phy.h
index 9b7d54e64e8f..d829e15eed10 100644
--- a/drivers/scsi/isci/phy.h
+++ b/drivers/scsi/isci/phy.h
@@ -512,12 +512,6 @@ typedef enum sci_status (*scic_sds_phy_power_handler_t)(struct scic_sds_phy *);
512 512
513struct scic_sds_phy_state_handler { 513struct scic_sds_phy_state_handler {
514 /** 514 /**
515 * The stop_handler specifies the method invoked when there is an
516 * attempt to stop a phy.
517 */
518 scic_sds_phy_handler_t stop_handler;
519
520 /**
521 * The reset_handler specifies the method invoked when there is an 515 * The reset_handler specifies the method invoked when there is an
522 * attempt to reset a phy. 516 * attempt to reset a phy.
523 */ 517 */