|
@@ -6,7 +6,7 @@
|
|
|
* Fixes by : Jochen Röhrig (roehrig@de.ibm.com)
|
|
|
* Arnaldo Carvalho de Melo <acme@conectiva.com.br>
|
|
|
Peter Tiedemann (ptiedem@de.ibm.com)
|
|
|
- * Driver Model stuff by : Cornelia Huck <huckc@de.ibm.com>
|
|
|
+ * Driver Model stuff by : Cornelia Huck <cornelia.huck@de.ibm.com>
|
|
|
*
|
|
|
* Documentation used:
|
|
|
* - Principles of Operation (IBM doc#: SA22-7201-06)
|
|
@@ -65,7 +65,6 @@
|
|
|
|
|
|
#include <asm/idals.h>
|
|
|
|
|
|
-#include "ctctty.h"
|
|
|
#include "fsm.h"
|
|
|
#include "cu3088.h"
|
|
|
|
|
@@ -479,10 +478,7 @@ ctc_unpack_skb(struct channel *ch, struct sk_buff *pskb)
|
|
|
skb->dev = pskb->dev;
|
|
|
skb->protocol = pskb->protocol;
|
|
|
pskb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
|
- if (ch->protocol == CTC_PROTO_LINUX_TTY)
|
|
|
- ctc_tty_netif_rx(skb);
|
|
|
- else
|
|
|
- netif_rx_ni(skb);
|
|
|
+ netif_rx_ni(skb);
|
|
|
/**
|
|
|
* Successful rx; reset logflags
|
|
|
*/
|
|
@@ -557,8 +553,7 @@ ccw_unit_check(struct channel *ch, unsigned char sense)
|
|
|
DBF_TEXT(trace, 5, __FUNCTION__);
|
|
|
if (sense & SNS0_INTERVENTION_REQ) {
|
|
|
if (sense & 0x01) {
|
|
|
- if (ch->protocol != CTC_PROTO_LINUX_TTY)
|
|
|
- ctc_pr_debug("%s: Interface disc. or Sel. reset "
|
|
|
+ ctc_pr_debug("%s: Interface disc. or Sel. reset "
|
|
|
"(remote)\n", ch->id);
|
|
|
fsm_event(ch->fsm, CH_EVENT_UC_RCRESET, ch);
|
|
|
} else {
|
|
@@ -2034,7 +2029,6 @@ static void
|
|
|
dev_action_chup(fsm_instance * fi, int event, void *arg)
|
|
|
{
|
|
|
struct net_device *dev = (struct net_device *) arg;
|
|
|
- struct ctc_priv *privptr = dev->priv;
|
|
|
|
|
|
DBF_TEXT(trace, 3, __FUNCTION__);
|
|
|
switch (fsm_getstate(fi)) {
|
|
@@ -2049,8 +2043,6 @@ dev_action_chup(fsm_instance * fi, int event, void *arg)
|
|
|
fsm_newstate(fi, DEV_STATE_RUNNING);
|
|
|
ctc_pr_info("%s: connected with remote side\n",
|
|
|
dev->name);
|
|
|
- if (privptr->protocol == CTC_PROTO_LINUX_TTY)
|
|
|
- ctc_tty_setcarrier(dev, 1);
|
|
|
ctc_clear_busy(dev);
|
|
|
}
|
|
|
break;
|
|
@@ -2059,8 +2051,6 @@ dev_action_chup(fsm_instance * fi, int event, void *arg)
|
|
|
fsm_newstate(fi, DEV_STATE_RUNNING);
|
|
|
ctc_pr_info("%s: connected with remote side\n",
|
|
|
dev->name);
|
|
|
- if (privptr->protocol == CTC_PROTO_LINUX_TTY)
|
|
|
- ctc_tty_setcarrier(dev, 1);
|
|
|
ctc_clear_busy(dev);
|
|
|
}
|
|
|
break;
|
|
@@ -2086,14 +2076,10 @@ dev_action_chup(fsm_instance * fi, int event, void *arg)
|
|
|
static void
|
|
|
dev_action_chdown(fsm_instance * fi, int event, void *arg)
|
|
|
{
|
|
|
- struct net_device *dev = (struct net_device *) arg;
|
|
|
- struct ctc_priv *privptr = dev->priv;
|
|
|
|
|
|
DBF_TEXT(trace, 3, __FUNCTION__);
|
|
|
switch (fsm_getstate(fi)) {
|
|
|
case DEV_STATE_RUNNING:
|
|
|
- if (privptr->protocol == CTC_PROTO_LINUX_TTY)
|
|
|
- ctc_tty_setcarrier(dev, 0);
|
|
|
if (event == DEV_EVENT_TXDOWN)
|
|
|
fsm_newstate(fi, DEV_STATE_STARTWAIT_TX);
|
|
|
else
|
|
@@ -2397,8 +2383,6 @@ ctc_tx(struct sk_buff *skb, struct net_device * dev)
|
|
|
*/
|
|
|
if (fsm_getstate(privptr->fsm) != DEV_STATE_RUNNING) {
|
|
|
fsm_event(privptr->fsm, DEV_EVENT_START, dev);
|
|
|
- if (privptr->protocol == CTC_PROTO_LINUX_TTY)
|
|
|
- return -EBUSY;
|
|
|
dev_kfree_skb(skb);
|
|
|
privptr->stats.tx_dropped++;
|
|
|
privptr->stats.tx_errors++;
|
|
@@ -2608,20 +2592,13 @@ ctc_netdev_unregister(struct net_device * dev)
|
|
|
if (!dev)
|
|
|
return;
|
|
|
privptr = (struct ctc_priv *) dev->priv;
|
|
|
- if (privptr->protocol != CTC_PROTO_LINUX_TTY)
|
|
|
- unregister_netdev(dev);
|
|
|
- else
|
|
|
- ctc_tty_unregister_netdev(dev);
|
|
|
+ unregister_netdev(dev);
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
ctc_netdev_register(struct net_device * dev)
|
|
|
{
|
|
|
- struct ctc_priv *privptr = (struct ctc_priv *) dev->priv;
|
|
|
- if (privptr->protocol != CTC_PROTO_LINUX_TTY)
|
|
|
- return register_netdev(dev);
|
|
|
- else
|
|
|
- return ctc_tty_register_netdev(dev);
|
|
|
+ return register_netdev(dev);
|
|
|
}
|
|
|
|
|
|
static void
|
|
@@ -2667,7 +2644,9 @@ ctc_proto_store(struct device *dev, struct device_attribute *attr, const char *b
|
|
|
if (!priv)
|
|
|
return -ENODEV;
|
|
|
sscanf(buf, "%u", &value);
|
|
|
- if ((value < 0) || (value > CTC_PROTO_MAX))
|
|
|
+ if (!((value == CTC_PROTO_S390) ||
|
|
|
+ (value == CTC_PROTO_LINUX) ||
|
|
|
+ (value == CTC_PROTO_OS390)))
|
|
|
return -EINVAL;
|
|
|
priv->protocol = value;
|
|
|
|
|
@@ -2897,10 +2876,7 @@ ctc_new_device(struct ccwgroup_device *cgdev)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- if (privptr->protocol == CTC_PROTO_LINUX_TTY)
|
|
|
- strlcpy(dev->name, "ctctty%d", IFNAMSIZ);
|
|
|
- else
|
|
|
- strlcpy(dev->name, "ctc%d", IFNAMSIZ);
|
|
|
+ strlcpy(dev->name, "ctc%d", IFNAMSIZ);
|
|
|
|
|
|
for (direction = READ; direction <= WRITE; direction++) {
|
|
|
privptr->channel[direction] =
|
|
@@ -3046,7 +3022,6 @@ ctc_exit(void)
|
|
|
{
|
|
|
DBF_TEXT(setup, 3, __FUNCTION__);
|
|
|
unregister_cu3088_discipline(&ctc_group_driver);
|
|
|
- ctc_tty_cleanup();
|
|
|
ctc_unregister_dbf_views();
|
|
|
ctc_pr_info("CTC driver unloaded\n");
|
|
|
}
|
|
@@ -3073,10 +3048,8 @@ ctc_init(void)
|
|
|
ctc_pr_crit("ctc_init failed with ctc_register_dbf_views rc = %d\n", ret);
|
|
|
return ret;
|
|
|
}
|
|
|
- ctc_tty_init();
|
|
|
ret = register_cu3088_discipline(&ctc_group_driver);
|
|
|
if (ret) {
|
|
|
- ctc_tty_cleanup();
|
|
|
ctc_unregister_dbf_views();
|
|
|
}
|
|
|
return ret;
|