Commit 5113fec0 authored by Ursula Braun's avatar Ursula Braun Committed by David S. Miller

qeth: support the new OSA CHPID types OSX and OSM

The qeth driver is enabled to support the new OSA CHPID types OSX
and OSM.
Signed-off-by: default avatarUrsula Braun <ursula.braun@de.ibm.com>
Signed-off-by: default avatarFrank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ae57b20a
...@@ -179,25 +179,23 @@ static inline int qeth_is_ipa_enabled(struct qeth_ipa_info *ipa, ...@@ -179,25 +179,23 @@ static inline int qeth_is_ipa_enabled(struct qeth_ipa_info *ipa,
((prot == QETH_PROT_IPV6) ? \ ((prot == QETH_PROT_IPV6) ? \
qeth_is_enabled6(c, f) : qeth_is_enabled(c, f)) qeth_is_enabled6(c, f) : qeth_is_enabled(c, f))
#define QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT 0x0101 #define QETH_IDX_FUNC_LEVEL_OSD 0x0101
#define QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT 0x0101
#define QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT 0x4108 #define QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT 0x4108
#define QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT 0x5108 #define QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT 0x5108
#define QETH_MODELLIST_ARRAY \ #define QETH_MODELLIST_ARRAY \
{{0x1731, 0x01, 0x1732, 0x01, QETH_CARD_TYPE_OSAE, 1, \ {{0x1731, 0x01, 0x1732, QETH_CARD_TYPE_OSD, QETH_MAX_QUEUES, 0}, \
QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT, \ {0x1731, 0x05, 0x1732, QETH_CARD_TYPE_IQD, QETH_MAX_QUEUES, 0x103}, \
QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT, \ {0x1731, 0x06, 0x1732, QETH_CARD_TYPE_OSN, QETH_MAX_QUEUES, 0}, \
QETH_MAX_QUEUES, 0}, \ {0x1731, 0x02, 0x1732, QETH_CARD_TYPE_OSM, QETH_MAX_QUEUES, 0}, \
{0x1731, 0x05, 0x1732, 0x05, QETH_CARD_TYPE_IQD, 0, \ {0x1731, 0x02, 0x1732, QETH_CARD_TYPE_OSX, QETH_MAX_QUEUES, 0}, \
QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT, \ {0, 0, 0, 0, 0, 0} }
QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT, \ #define QETH_CU_TYPE_IND 0
QETH_MAX_QUEUES, 0x103}, \ #define QETH_CU_MODEL_IND 1
{0x1731, 0x06, 0x1732, 0x06, QETH_CARD_TYPE_OSN, 0, \ #define QETH_DEV_TYPE_IND 2
QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT, \ #define QETH_DEV_MODEL_IND 3
QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT, \ #define QETH_QUEUE_NO_IND 4
QETH_MAX_QUEUES, 0}, \ #define QETH_MULTICAST_IND 5
{0, 0, 0, 0, 0, 0, 0, 0, 0} }
#define QETH_REAL_CARD 1 #define QETH_REAL_CARD 1
#define QETH_VLAN_CARD 2 #define QETH_VLAN_CARD 2
......
This diff is collapsed.
...@@ -48,9 +48,11 @@ extern unsigned char IPA_PDU_HEADER[]; ...@@ -48,9 +48,11 @@ extern unsigned char IPA_PDU_HEADER[];
enum qeth_card_types { enum qeth_card_types {
QETH_CARD_TYPE_UNKNOWN = 0, QETH_CARD_TYPE_UNKNOWN = 0,
QETH_CARD_TYPE_OSAE = 10, QETH_CARD_TYPE_OSD = 1,
QETH_CARD_TYPE_IQD = 1234, QETH_CARD_TYPE_IQD = 5,
QETH_CARD_TYPE_OSN = 11, QETH_CARD_TYPE_OSN = 6,
QETH_CARD_TYPE_OSM = 3,
QETH_CARD_TYPE_OSX = 2,
}; };
#define QETH_MPC_DIFINFO_LEN_INDICATES_LINK_TYPE 0x18 #define QETH_MPC_DIFINFO_LEN_INDICATES_LINK_TYPE 0x18
...@@ -614,6 +616,8 @@ extern unsigned char IDX_ACTIVATE_WRITE[]; ...@@ -614,6 +616,8 @@ extern unsigned char IDX_ACTIVATE_WRITE[];
#define QETH_IS_IDX_ACT_POS_REPLY(buffer) (((buffer)[0x08] & 3) == 2) #define QETH_IS_IDX_ACT_POS_REPLY(buffer) (((buffer)[0x08] & 3) == 2)
#define QETH_IDX_REPLY_LEVEL(buffer) (buffer + 0x12) #define QETH_IDX_REPLY_LEVEL(buffer) (buffer + 0x12)
#define QETH_IDX_ACT_CAUSE_CODE(buffer) (buffer)[0x09] #define QETH_IDX_ACT_CAUSE_CODE(buffer) (buffer)[0x09]
#define QETH_IDX_ACT_ERR_EXCL 0x19
#define QETH_IDX_ACT_ERR_AUTH 0x1E
#define PDU_ENCAPSULATION(buffer) \ #define PDU_ENCAPSULATION(buffer) \
(buffer + *(buffer + (*(buffer + 0x0b)) + \ (buffer + *(buffer + (*(buffer + 0x0b)) + \
......
...@@ -490,7 +490,8 @@ static ssize_t qeth_dev_isolation_store(struct device *dev, ...@@ -490,7 +490,8 @@ static ssize_t qeth_dev_isolation_store(struct device *dev,
mutex_lock(&card->conf_mutex); mutex_lock(&card->conf_mutex);
/* check for unknown, too, in case we do not yet know who we are */ /* check for unknown, too, in case we do not yet know who we are */
if (card->info.type != QETH_CARD_TYPE_OSAE && if (card->info.type != QETH_CARD_TYPE_OSD &&
card->info.type != QETH_CARD_TYPE_OSX &&
card->info.type != QETH_CARD_TYPE_UNKNOWN) { card->info.type != QETH_CARD_TYPE_UNKNOWN) {
rc = -EOPNOTSUPP; rc = -EOPNOTSUPP;
dev_err(&card->gdev->dev, "Adapter does not " dev_err(&card->gdev->dev, "Adapter does not "
......
...@@ -56,7 +56,9 @@ static int qeth_l2_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ...@@ -56,7 +56,9 @@ static int qeth_l2_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
rc = qeth_snmp_command(card, rq->ifr_ifru.ifru_data); rc = qeth_snmp_command(card, rq->ifr_ifru.ifru_data);
break; break;
case SIOC_QETH_GET_CARD_TYPE: case SIOC_QETH_GET_CARD_TYPE:
if ((card->info.type == QETH_CARD_TYPE_OSAE) && if ((card->info.type == QETH_CARD_TYPE_OSD ||
card->info.type == QETH_CARD_TYPE_OSM ||
card->info.type == QETH_CARD_TYPE_OSX) &&
!card->info.guestlan) !card->info.guestlan)
return 1; return 1;
return 0; return 0;
...@@ -309,6 +311,10 @@ static void qeth_l2_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) ...@@ -309,6 +311,10 @@ static void qeth_l2_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
struct qeth_vlan_vid *id; struct qeth_vlan_vid *id;
QETH_DBF_TEXT_(TRACE, 4, "aid:%d", vid); QETH_DBF_TEXT_(TRACE, 4, "aid:%d", vid);
if (card->info.type == QETH_CARD_TYPE_OSM) {
QETH_DBF_TEXT(TRACE, 3, "aidOSM");
return;
}
if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) {
QETH_DBF_TEXT(TRACE, 3, "aidREC"); QETH_DBF_TEXT(TRACE, 3, "aidREC");
return; return;
...@@ -329,6 +335,10 @@ static void qeth_l2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) ...@@ -329,6 +335,10 @@ static void qeth_l2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
struct qeth_card *card = dev->ml_priv; struct qeth_card *card = dev->ml_priv;
QETH_DBF_TEXT_(TRACE, 4, "kid:%d", vid); QETH_DBF_TEXT_(TRACE, 4, "kid:%d", vid);
if (card->info.type == QETH_CARD_TYPE_OSM) {
QETH_DBF_TEXT(TRACE, 3, "kidOSM");
return;
}
if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) {
QETH_DBF_TEXT(TRACE, 3, "kidREC"); QETH_DBF_TEXT(TRACE, 3, "kidREC");
return; return;
...@@ -559,8 +569,10 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card) ...@@ -559,8 +569,10 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
"device %s: x%x\n", CARD_BUS_ID(card), rc); "device %s: x%x\n", CARD_BUS_ID(card), rc);
} }
if ((card->info.type == QETH_CARD_TYPE_IQD) || if (card->info.type == QETH_CARD_TYPE_IQD ||
(card->info.guestlan)) { card->info.type == QETH_CARD_TYPE_OSM ||
card->info.type == QETH_CARD_TYPE_OSX ||
card->info.guestlan) {
rc = qeth_setadpparms_change_macaddr(card); rc = qeth_setadpparms_change_macaddr(card);
if (rc) { if (rc) {
QETH_DBF_MESSAGE(2, "couldn't get MAC address on " QETH_DBF_MESSAGE(2, "couldn't get MAC address on "
...@@ -589,8 +601,10 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p) ...@@ -589,8 +601,10 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p)
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
if (card->info.type == QETH_CARD_TYPE_OSN) { if (card->info.type == QETH_CARD_TYPE_OSN ||
QETH_DBF_TEXT(TRACE, 3, "setmcOSN"); card->info.type == QETH_CARD_TYPE_OSM ||
card->info.type == QETH_CARD_TYPE_OSX) {
QETH_DBF_TEXT(TRACE, 3, "setmcTYP");
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
QETH_DBF_TEXT_(TRACE, 3, "%s", CARD_BUS_ID(card)); QETH_DBF_TEXT_(TRACE, 3, "%s", CARD_BUS_ID(card));
...@@ -885,9 +899,6 @@ static const struct net_device_ops qeth_l2_netdev_ops = { ...@@ -885,9 +899,6 @@ static const struct net_device_ops qeth_l2_netdev_ops = {
static int qeth_l2_setup_netdev(struct qeth_card *card) static int qeth_l2_setup_netdev(struct qeth_card *card)
{ {
switch (card->info.type) { switch (card->info.type) {
case QETH_CARD_TYPE_OSAE:
card->dev = alloc_etherdev(0);
break;
case QETH_CARD_TYPE_IQD: case QETH_CARD_TYPE_IQD:
card->dev = alloc_netdev(0, "hsi%d", ether_setup); card->dev = alloc_netdev(0, "hsi%d", ether_setup);
break; break;
...@@ -964,11 +975,14 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode) ...@@ -964,11 +975,14 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
} else } else
card->lan_online = 1; card->lan_online = 1;
if (card->info.type != QETH_CARD_TYPE_OSN) { if ((card->info.type == QETH_CARD_TYPE_OSD) ||
(card->info.type == QETH_CARD_TYPE_OSX))
/* configure isolation level */ /* configure isolation level */
qeth_set_access_ctrl_online(card); qeth_set_access_ctrl_online(card);
if (card->info.type != QETH_CARD_TYPE_OSN &&
card->info.type != QETH_CARD_TYPE_OSM)
qeth_l2_process_vlans(card, 0); qeth_l2_process_vlans(card, 0);
}
netif_tx_disable(card->dev); netif_tx_disable(card->dev);
......
...@@ -2711,7 +2711,8 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ...@@ -2711,7 +2711,8 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
rc = qeth_snmp_command(card, rq->ifr_ifru.ifru_data); rc = qeth_snmp_command(card, rq->ifr_ifru.ifru_data);
break; break;
case SIOC_QETH_GET_CARD_TYPE: case SIOC_QETH_GET_CARD_TYPE:
if ((card->info.type == QETH_CARD_TYPE_OSAE) && if ((card->info.type == QETH_CARD_TYPE_OSD ||
card->info.type == QETH_CARD_TYPE_OSX) &&
!card->info.guestlan) !card->info.guestlan)
return 1; return 1;
return 0; return 0;
...@@ -3248,7 +3249,8 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = { ...@@ -3248,7 +3249,8 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
static int qeth_l3_setup_netdev(struct qeth_card *card) static int qeth_l3_setup_netdev(struct qeth_card *card)
{ {
if (card->info.type == QETH_CARD_TYPE_OSAE) { if (card->info.type == QETH_CARD_TYPE_OSD ||
card->info.type == QETH_CARD_TYPE_OSX) {
if ((card->info.link_type == QETH_LINK_TYPE_LANE_TR) || if ((card->info.link_type == QETH_LINK_TYPE_LANE_TR) ||
(card->info.link_type == QETH_LINK_TYPE_HSTR)) { (card->info.link_type == QETH_LINK_TYPE_HSTR)) {
#ifdef CONFIG_TR #ifdef CONFIG_TR
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment