mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
s390/qeth: consolidate online code
Move duplicated code from the disciplines into the core path. Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7fb7fe5c7b
commit
b7ea041b2e
@ -753,7 +753,7 @@ struct qeth_discipline {
|
||||
const struct device_type *devtype;
|
||||
int (*setup) (struct ccwgroup_device *);
|
||||
void (*remove) (struct ccwgroup_device *);
|
||||
int (*set_online)(struct qeth_card *card);
|
||||
int (*set_online)(struct qeth_card *card, bool carrier_ok);
|
||||
void (*set_offline)(struct qeth_card *card);
|
||||
int (*do_ioctl)(struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
int (*control_event_handler)(struct qeth_card *card,
|
||||
@ -1037,11 +1037,8 @@ struct net_device *qeth_clone_netdev(struct net_device *orig);
|
||||
struct qeth_card *qeth_get_card_by_busid(char *bus_id);
|
||||
void qeth_set_allowed_threads(struct qeth_card *, unsigned long , int);
|
||||
int qeth_threads_running(struct qeth_card *, unsigned long);
|
||||
int qeth_core_hardsetup_card(struct qeth_card *card, bool *carrier_ok);
|
||||
int qeth_stop_channel(struct qeth_channel *channel);
|
||||
int qeth_set_offline(struct qeth_card *card, bool resetting);
|
||||
|
||||
void qeth_print_status_message(struct qeth_card *);
|
||||
int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *,
|
||||
int (*reply_cb)
|
||||
(struct qeth_card *, struct qeth_reply *, unsigned long),
|
||||
@ -1093,7 +1090,6 @@ int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
|
||||
int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
|
||||
int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
|
||||
void qeth_trace_features(struct qeth_card *);
|
||||
int qeth_setassparms_cb(struct qeth_card *, struct qeth_reply *, unsigned long);
|
||||
int qeth_setup_netdev(struct qeth_card *card);
|
||||
int qeth_set_features(struct net_device *, netdev_features_t);
|
||||
|
@ -1753,7 +1753,7 @@ static int qeth_halt_channel(struct qeth_card *card,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qeth_stop_channel(struct qeth_channel *channel)
|
||||
static int qeth_stop_channel(struct qeth_channel *channel)
|
||||
{
|
||||
struct ccw_device *cdev = channel->ccwdev;
|
||||
int rc;
|
||||
@ -1771,7 +1771,6 @@ int qeth_stop_channel(struct qeth_channel *channel)
|
||||
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qeth_stop_channel);
|
||||
|
||||
static int qeth_start_channel(struct qeth_channel *channel)
|
||||
{
|
||||
@ -2866,7 +2865,7 @@ static int qeth_mpc_initialize(struct qeth_card *card)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qeth_print_status_message(struct qeth_card *card)
|
||||
static void qeth_print_status_message(struct qeth_card *card)
|
||||
{
|
||||
switch (card->info.type) {
|
||||
case QETH_CARD_TYPE_OSD:
|
||||
@ -2907,7 +2906,6 @@ void qeth_print_status_message(struct qeth_card *card)
|
||||
(card->info.mcl_level[0]) ? ")" : "",
|
||||
qeth_get_cardname_short(card));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qeth_print_status_message);
|
||||
|
||||
static void qeth_initialize_working_pool_list(struct qeth_card *card)
|
||||
{
|
||||
@ -5123,7 +5121,7 @@ static void qeth_core_free_card(struct qeth_card *card)
|
||||
kfree(card);
|
||||
}
|
||||
|
||||
void qeth_trace_features(struct qeth_card *card)
|
||||
static void qeth_trace_features(struct qeth_card *card)
|
||||
{
|
||||
QETH_CARD_TEXT(card, 2, "features");
|
||||
QETH_CARD_HEX(card, 2, &card->options.ipa4, sizeof(card->options.ipa4));
|
||||
@ -5132,7 +5130,6 @@ void qeth_trace_features(struct qeth_card *card)
|
||||
QETH_CARD_HEX(card, 2, &card->info.diagass_support,
|
||||
sizeof(card->info.diagass_support));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qeth_trace_features);
|
||||
|
||||
static struct ccw_device_id qeth_ids[] = {
|
||||
{CCW_DEVICE_DEVTYPE(0x1731, 0x01, 0x1732, 0x01),
|
||||
@ -5163,7 +5160,7 @@ static struct ccw_driver qeth_ccw_driver = {
|
||||
.remove = ccwgroup_remove_ccwdev,
|
||||
};
|
||||
|
||||
int qeth_core_hardsetup_card(struct qeth_card *card, bool *carrier_ok)
|
||||
static int qeth_hardsetup_card(struct qeth_card *card, bool *carrier_ok)
|
||||
{
|
||||
int retries = 3;
|
||||
int rc;
|
||||
@ -5277,6 +5274,8 @@ retriable:
|
||||
QETH_CARD_TEXT_(card, 2, "8err%d", rc);
|
||||
}
|
||||
|
||||
qeth_trace_features(card);
|
||||
|
||||
if (!qeth_is_diagass_supported(card, QETH_DIAGS_CMD_TRAP) ||
|
||||
(card->info.hwtrap && qeth_hw_trap(card, QETH_DIAGS_TRAP_ARM)))
|
||||
card->info.hwtrap = 0;
|
||||
@ -5302,21 +5301,45 @@ out:
|
||||
CARD_DEVID(card), rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qeth_core_hardsetup_card);
|
||||
|
||||
static int qeth_set_online(struct qeth_card *card)
|
||||
{
|
||||
bool carrier_ok;
|
||||
int rc;
|
||||
|
||||
mutex_lock(&card->discipline_mutex);
|
||||
mutex_lock(&card->conf_mutex);
|
||||
QETH_CARD_TEXT(card, 2, "setonlin");
|
||||
|
||||
rc = card->discipline->set_online(card);
|
||||
rc = qeth_hardsetup_card(card, &carrier_ok);
|
||||
if (rc) {
|
||||
QETH_CARD_TEXT_(card, 2, "2err%04x", rc);
|
||||
rc = -ENODEV;
|
||||
goto err_hardsetup;
|
||||
}
|
||||
|
||||
qeth_print_status_message(card);
|
||||
|
||||
rc = card->discipline->set_online(card, carrier_ok);
|
||||
if (rc)
|
||||
goto err_online;
|
||||
|
||||
/* let user_space know that device is online */
|
||||
kobject_uevent(&card->gdev->dev.kobj, KOBJ_CHANGE);
|
||||
|
||||
mutex_unlock(&card->conf_mutex);
|
||||
mutex_unlock(&card->discipline_mutex);
|
||||
return 0;
|
||||
|
||||
err_online:
|
||||
err_hardsetup:
|
||||
qeth_stop_channel(&card->data);
|
||||
qeth_stop_channel(&card->write);
|
||||
qeth_stop_channel(&card->read);
|
||||
qdio_free(CARD_DDEV(card));
|
||||
|
||||
mutex_unlock(&card->conf_mutex);
|
||||
mutex_unlock(&card->discipline_mutex);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -1138,19 +1138,10 @@ static void qeth_l2_enable_brport_features(struct qeth_card *card)
|
||||
}
|
||||
}
|
||||
|
||||
static int qeth_l2_set_online(struct qeth_card *card)
|
||||
static int qeth_l2_set_online(struct qeth_card *card, bool carrier_ok)
|
||||
{
|
||||
struct ccwgroup_device *gdev = card->gdev;
|
||||
struct net_device *dev = card->dev;
|
||||
int rc = 0;
|
||||
bool carrier_ok;
|
||||
|
||||
rc = qeth_core_hardsetup_card(card, &carrier_ok);
|
||||
if (rc) {
|
||||
QETH_CARD_TEXT_(card, 2, "2err%04x", rc);
|
||||
rc = -ENODEV;
|
||||
goto out_remove;
|
||||
}
|
||||
|
||||
/* query before bridgeport_notification may be enabled */
|
||||
qeth_l2_detect_dev2br_support(card);
|
||||
@ -1169,11 +1160,8 @@ static int qeth_l2_set_online(struct qeth_card *card)
|
||||
/* for the rx_bcast characteristic, init VNICC after setmac */
|
||||
qeth_l2_vnicc_init(card);
|
||||
|
||||
qeth_trace_features(card);
|
||||
qeth_l2_trace_features(card);
|
||||
|
||||
qeth_print_status_message(card);
|
||||
|
||||
/* softsetup */
|
||||
QETH_CARD_TEXT(card, 2, "softsetp");
|
||||
|
||||
@ -1205,16 +1193,10 @@ static int qeth_l2_set_online(struct qeth_card *card)
|
||||
}
|
||||
rtnl_unlock();
|
||||
}
|
||||
/* let user_space know that device is online */
|
||||
kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE);
|
||||
return 0;
|
||||
|
||||
out_remove:
|
||||
qeth_l2_stop_card(card);
|
||||
qeth_stop_channel(&card->data);
|
||||
qeth_stop_channel(&card->write);
|
||||
qeth_stop_channel(&card->read);
|
||||
qdio_free(CARD_DDEV(card));
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -2012,21 +2012,10 @@ static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
|
||||
qeth_l3_clear_ipato_list(card);
|
||||
}
|
||||
|
||||
static int qeth_l3_set_online(struct qeth_card *card)
|
||||
static int qeth_l3_set_online(struct qeth_card *card, bool carrier_ok)
|
||||
{
|
||||
struct ccwgroup_device *gdev = card->gdev;
|
||||
struct net_device *dev = card->dev;
|
||||
int rc = 0;
|
||||
bool carrier_ok;
|
||||
|
||||
rc = qeth_core_hardsetup_card(card, &carrier_ok);
|
||||
if (rc) {
|
||||
QETH_CARD_TEXT_(card, 2, "2err%04x", rc);
|
||||
rc = -ENODEV;
|
||||
goto out_remove;
|
||||
}
|
||||
|
||||
qeth_print_status_message(card);
|
||||
|
||||
/* softsetup */
|
||||
QETH_CARD_TEXT(card, 2, "softsetp");
|
||||
@ -2073,16 +2062,10 @@ static int qeth_l3_set_online(struct qeth_card *card)
|
||||
}
|
||||
rtnl_unlock();
|
||||
}
|
||||
qeth_trace_features(card);
|
||||
/* let user_space know that device is online */
|
||||
kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE);
|
||||
return 0;
|
||||
|
||||
out_remove:
|
||||
qeth_l3_stop_card(card);
|
||||
qeth_stop_channel(&card->data);
|
||||
qeth_stop_channel(&card->write);
|
||||
qeth_stop_channel(&card->read);
|
||||
qdio_free(CARD_DDEV(card));
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user