net/ncsi: Avoid if statements in ncsi_suspend_channel()

There are several if/else statements in the state machine implemented
by switch/case in ncsi_suspend_channel() to avoid duplicated code. It
makes the code a bit hard to be understood.

This drops if/else statements in ncsi_suspend_channel() to improve the
code readability as Joel Stanley suggested. Also, it becomes easy to
add more states in the state machine without affecting current code.
No logical changes introduced by this.

Suggested-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Gavin Shan 2016-10-20 11:45:49 +11:00 committed by David S. Miller
parent 5712bf9c5c
commit 7ba5c003db

View File

@ -540,42 +540,60 @@ static void ncsi_suspend_channel(struct ncsi_dev_priv *ndp)
nd->state = ncsi_dev_state_suspend_select; nd->state = ncsi_dev_state_suspend_select;
/* Fall through */ /* Fall through */
case ncsi_dev_state_suspend_select: case ncsi_dev_state_suspend_select:
case ncsi_dev_state_suspend_dcnt:
case ncsi_dev_state_suspend_dc:
case ncsi_dev_state_suspend_deselect:
ndp->pending_req_num = 1; ndp->pending_req_num = 1;
np = ndp->active_package;
nc = ndp->active_channel;
nca.package = np->id;
if (nd->state == ncsi_dev_state_suspend_select) {
nca.type = NCSI_PKT_CMD_SP; nca.type = NCSI_PKT_CMD_SP;
nca.package = np->id;
nca.channel = NCSI_RESERVED_CHANNEL; nca.channel = NCSI_RESERVED_CHANNEL;
if (ndp->flags & NCSI_DEV_HWA) if (ndp->flags & NCSI_DEV_HWA)
nca.bytes[0] = 0; nca.bytes[0] = 0;
else else
nca.bytes[0] = 1; nca.bytes[0] = 1;
nd->state = ncsi_dev_state_suspend_dcnt; nd->state = ncsi_dev_state_suspend_dcnt;
} else if (nd->state == ncsi_dev_state_suspend_dcnt) { ret = ncsi_xmit_cmd(&nca);
if (ret)
goto error;
break;
case ncsi_dev_state_suspend_dcnt:
ndp->pending_req_num = 1;
nca.type = NCSI_PKT_CMD_DCNT; nca.type = NCSI_PKT_CMD_DCNT;
nca.package = np->id;
nca.channel = nc->id; nca.channel = nc->id;
nd->state = ncsi_dev_state_suspend_dc; nd->state = ncsi_dev_state_suspend_dc;
} else if (nd->state == ncsi_dev_state_suspend_dc) { ret = ncsi_xmit_cmd(&nca);
if (ret)
goto error;
break;
case ncsi_dev_state_suspend_dc:
ndp->pending_req_num = 1;
nca.type = NCSI_PKT_CMD_DC; nca.type = NCSI_PKT_CMD_DC;
nca.package = np->id;
nca.channel = nc->id; nca.channel = nc->id;
nca.bytes[0] = 1; nca.bytes[0] = 1;
nd->state = ncsi_dev_state_suspend_deselect;
} else if (nd->state == ncsi_dev_state_suspend_deselect) {
nca.type = NCSI_PKT_CMD_DP;
nca.channel = NCSI_RESERVED_CHANNEL;
nd->state = ncsi_dev_state_suspend_done;
}
nd->state = ncsi_dev_state_suspend_deselect;
ret = ncsi_xmit_cmd(&nca); ret = ncsi_xmit_cmd(&nca);
if (ret) { if (ret)
nd->state = ncsi_dev_state_functional; goto error;
return;
} break;
case ncsi_dev_state_suspend_deselect:
ndp->pending_req_num = 1;
nca.type = NCSI_PKT_CMD_DP;
nca.package = np->id;
nca.channel = NCSI_RESERVED_CHANNEL;
nd->state = ncsi_dev_state_suspend_done;
ret = ncsi_xmit_cmd(&nca);
if (ret)
goto error;
break; break;
case ncsi_dev_state_suspend_done: case ncsi_dev_state_suspend_done:
@ -589,6 +607,10 @@ static void ncsi_suspend_channel(struct ncsi_dev_priv *ndp)
netdev_warn(nd->dev, "Wrong NCSI state 0x%x in suspend\n", netdev_warn(nd->dev, "Wrong NCSI state 0x%x in suspend\n",
nd->state); nd->state);
} }
return;
error:
nd->state = ncsi_dev_state_functional;
} }
static void ncsi_configure_channel(struct ncsi_dev_priv *ndp) static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)