|
@@ -1365,7 +1365,7 @@ static void qeth_start_kernel_thread(struct work_struct *work)
|
|
|
card->write.state != CH_STATE_UP)
|
|
|
return;
|
|
|
if (qeth_do_start_thread(card, QETH_RECOVER_THREAD)) {
|
|
|
- ts = kthread_run(card->discipline.recover, (void *)card,
|
|
|
+ ts = kthread_run(card->discipline->recover, (void *)card,
|
|
|
"qeth_recover");
|
|
|
if (IS_ERR(ts)) {
|
|
|
qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD);
|
|
@@ -4629,7 +4629,7 @@ static int qeth_qdio_establish(struct qeth_card *card)
|
|
|
goto out_free_in_sbals;
|
|
|
}
|
|
|
for (i = 0; i < card->qdio.no_in_queues; ++i)
|
|
|
- queue_start_poll[i] = card->discipline.start_poll;
|
|
|
+ queue_start_poll[i] = card->discipline->start_poll;
|
|
|
|
|
|
qeth_qdio_establish_cq(card, in_sbal_ptrs, queue_start_poll);
|
|
|
|
|
@@ -4653,8 +4653,8 @@ static int qeth_qdio_establish(struct qeth_card *card)
|
|
|
init_data.qib_param_field = qib_param_field;
|
|
|
init_data.no_input_qs = card->qdio.no_in_queues;
|
|
|
init_data.no_output_qs = card->qdio.no_out_queues;
|
|
|
- init_data.input_handler = card->discipline.input_handler;
|
|
|
- init_data.output_handler = card->discipline.output_handler;
|
|
|
+ init_data.input_handler = card->discipline->input_handler;
|
|
|
+ init_data.output_handler = card->discipline->output_handler;
|
|
|
init_data.queue_start_poll_array = queue_start_poll;
|
|
|
init_data.int_parm = (unsigned long) card;
|
|
|
init_data.input_sbal_addr_array = (void **) in_sbal_ptrs;
|
|
@@ -5039,17 +5039,15 @@ int qeth_core_load_discipline(struct qeth_card *card,
|
|
|
mutex_lock(&qeth_mod_mutex);
|
|
|
switch (discipline) {
|
|
|
case QETH_DISCIPLINE_LAYER3:
|
|
|
- card->discipline.ccwgdriver = try_then_request_module(
|
|
|
- symbol_get(qeth_l3_ccwgroup_driver),
|
|
|
- "qeth_l3");
|
|
|
+ card->discipline = try_then_request_module(
|
|
|
+ symbol_get(qeth_l3_discipline), "qeth_l3");
|
|
|
break;
|
|
|
case QETH_DISCIPLINE_LAYER2:
|
|
|
- card->discipline.ccwgdriver = try_then_request_module(
|
|
|
- symbol_get(qeth_l2_ccwgroup_driver),
|
|
|
- "qeth_l2");
|
|
|
+ card->discipline = try_then_request_module(
|
|
|
+ symbol_get(qeth_l2_discipline), "qeth_l2");
|
|
|
break;
|
|
|
}
|
|
|
- if (!card->discipline.ccwgdriver) {
|
|
|
+ if (!card->discipline) {
|
|
|
dev_err(&card->gdev->dev, "There is no kernel module to "
|
|
|
"support discipline %d\n", discipline);
|
|
|
rc = -EINVAL;
|
|
@@ -5061,10 +5059,10 @@ int qeth_core_load_discipline(struct qeth_card *card,
|
|
|
void qeth_core_free_discipline(struct qeth_card *card)
|
|
|
{
|
|
|
if (card->options.layer2)
|
|
|
- symbol_put(qeth_l2_ccwgroup_driver);
|
|
|
+ symbol_put(qeth_l2_discipline);
|
|
|
else
|
|
|
- symbol_put(qeth_l3_ccwgroup_driver);
|
|
|
- card->discipline.ccwgdriver = NULL;
|
|
|
+ symbol_put(qeth_l3_discipline);
|
|
|
+ card->discipline = NULL;
|
|
|
}
|
|
|
|
|
|
static const struct device_type qeth_generic_devtype = {
|
|
@@ -5140,7 +5138,7 @@ static int qeth_core_probe_device(struct ccwgroup_device *gdev)
|
|
|
rc = qeth_core_load_discipline(card, QETH_DISCIPLINE_LAYER2);
|
|
|
if (rc)
|
|
|
goto err_dbf;
|
|
|
- rc = card->discipline.ccwgdriver->probe(card->gdev);
|
|
|
+ rc = card->discipline->setup(card->gdev);
|
|
|
if (rc)
|
|
|
goto err_disc;
|
|
|
case QETH_CARD_TYPE_OSD:
|
|
@@ -5174,8 +5172,8 @@ static void qeth_core_remove_device(struct ccwgroup_device *gdev)
|
|
|
|
|
|
QETH_DBF_TEXT(SETUP, 2, "removedv");
|
|
|
|
|
|
- if (card->discipline.ccwgdriver) {
|
|
|
- card->discipline.ccwgdriver->remove(gdev);
|
|
|
+ if (card->discipline) {
|
|
|
+ card->discipline->remove(gdev);
|
|
|
qeth_core_free_discipline(card);
|
|
|
}
|
|
|
|
|
@@ -5195,7 +5193,7 @@ static int qeth_core_set_online(struct ccwgroup_device *gdev)
|
|
|
int rc = 0;
|
|
|
int def_discipline;
|
|
|
|
|
|
- if (!card->discipline.ccwgdriver) {
|
|
|
+ if (!card->discipline) {
|
|
|
if (card->info.type == QETH_CARD_TYPE_IQD)
|
|
|
def_discipline = QETH_DISCIPLINE_LAYER3;
|
|
|
else
|
|
@@ -5203,11 +5201,11 @@ static int qeth_core_set_online(struct ccwgroup_device *gdev)
|
|
|
rc = qeth_core_load_discipline(card, def_discipline);
|
|
|
if (rc)
|
|
|
goto err;
|
|
|
- rc = card->discipline.ccwgdriver->probe(card->gdev);
|
|
|
+ rc = card->discipline->setup(card->gdev);
|
|
|
if (rc)
|
|
|
goto err;
|
|
|
}
|
|
|
- rc = card->discipline.ccwgdriver->set_online(gdev);
|
|
|
+ rc = card->discipline->set_online(gdev);
|
|
|
err:
|
|
|
return rc;
|
|
|
}
|
|
@@ -5215,58 +5213,52 @@ err:
|
|
|
static int qeth_core_set_offline(struct ccwgroup_device *gdev)
|
|
|
{
|
|
|
struct qeth_card *card = dev_get_drvdata(&gdev->dev);
|
|
|
- return card->discipline.ccwgdriver->set_offline(gdev);
|
|
|
+ return card->discipline->set_offline(gdev);
|
|
|
}
|
|
|
|
|
|
static void qeth_core_shutdown(struct ccwgroup_device *gdev)
|
|
|
{
|
|
|
struct qeth_card *card = dev_get_drvdata(&gdev->dev);
|
|
|
- if (card->discipline.ccwgdriver &&
|
|
|
- card->discipline.ccwgdriver->shutdown)
|
|
|
- card->discipline.ccwgdriver->shutdown(gdev);
|
|
|
+ if (card->discipline && card->discipline->shutdown)
|
|
|
+ card->discipline->shutdown(gdev);
|
|
|
}
|
|
|
|
|
|
static int qeth_core_prepare(struct ccwgroup_device *gdev)
|
|
|
{
|
|
|
struct qeth_card *card = dev_get_drvdata(&gdev->dev);
|
|
|
- if (card->discipline.ccwgdriver &&
|
|
|
- card->discipline.ccwgdriver->prepare)
|
|
|
- return card->discipline.ccwgdriver->prepare(gdev);
|
|
|
+ if (card->discipline && card->discipline->prepare)
|
|
|
+ return card->discipline->prepare(gdev);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static void qeth_core_complete(struct ccwgroup_device *gdev)
|
|
|
{
|
|
|
struct qeth_card *card = dev_get_drvdata(&gdev->dev);
|
|
|
- if (card->discipline.ccwgdriver &&
|
|
|
- card->discipline.ccwgdriver->complete)
|
|
|
- card->discipline.ccwgdriver->complete(gdev);
|
|
|
+ if (card->discipline && card->discipline->complete)
|
|
|
+ card->discipline->complete(gdev);
|
|
|
}
|
|
|
|
|
|
static int qeth_core_freeze(struct ccwgroup_device *gdev)
|
|
|
{
|
|
|
struct qeth_card *card = dev_get_drvdata(&gdev->dev);
|
|
|
- if (card->discipline.ccwgdriver &&
|
|
|
- card->discipline.ccwgdriver->freeze)
|
|
|
- return card->discipline.ccwgdriver->freeze(gdev);
|
|
|
+ if (card->discipline && card->discipline->freeze)
|
|
|
+ return card->discipline->freeze(gdev);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int qeth_core_thaw(struct ccwgroup_device *gdev)
|
|
|
{
|
|
|
struct qeth_card *card = dev_get_drvdata(&gdev->dev);
|
|
|
- if (card->discipline.ccwgdriver &&
|
|
|
- card->discipline.ccwgdriver->thaw)
|
|
|
- return card->discipline.ccwgdriver->thaw(gdev);
|
|
|
+ if (card->discipline && card->discipline->thaw)
|
|
|
+ return card->discipline->thaw(gdev);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int qeth_core_restore(struct ccwgroup_device *gdev)
|
|
|
{
|
|
|
struct qeth_card *card = dev_get_drvdata(&gdev->dev);
|
|
|
- if (card->discipline.ccwgdriver &&
|
|
|
- card->discipline.ccwgdriver->restore)
|
|
|
- return card->discipline.ccwgdriver->restore(gdev);
|
|
|
+ if (card->discipline && card->discipline->restore)
|
|
|
+ return card->discipline->restore(gdev);
|
|
|
return 0;
|
|
|
}
|
|
|
|