xref: /openbmc/linux/drivers/s390/net/qeth_core_mpc.c (revision a8c7629c)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
24a71df50SFrank Blaschka /*
34a71df50SFrank Blaschka  *    Copyright IBM Corp. 2007
44a71df50SFrank Blaschka  *    Author(s): Frank Pavlic <fpavlic@de.ibm.com>,
54a71df50SFrank Blaschka  *		 Thomas Spatzier <tspat@de.ibm.com>,
64a71df50SFrank Blaschka  *		 Frank Blaschka <frank.blaschka@de.ibm.com>
74a71df50SFrank Blaschka  */
84a71df50SFrank Blaschka 
94a71df50SFrank Blaschka #include <linux/module.h>
104a71df50SFrank Blaschka #include <asm/cio.h>
114a71df50SFrank Blaschka #include "qeth_core_mpc.h"
124a71df50SFrank Blaschka 
1394ae20f7SJulian Wiedmann const unsigned char IDX_ACTIVATE_READ[] = {
144a71df50SFrank Blaschka 	0x00, 0x00, 0x80, 0x00,  0x00, 0x00, 0x00, 0x00,
154a71df50SFrank Blaschka 	0x19, 0x01, 0x01, 0x80,  0x00, 0x00, 0x00, 0x00,
164a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0xc8, 0xc1,
174a71df50SFrank Blaschka 	0xd3, 0xd3, 0xd6, 0xd3,  0xc5, 0x40, 0x00, 0x00,
184a71df50SFrank Blaschka 	0x00, 0x00
194a71df50SFrank Blaschka };
204a71df50SFrank Blaschka 
2194ae20f7SJulian Wiedmann const unsigned char IDX_ACTIVATE_WRITE[] = {
224a71df50SFrank Blaschka 	0x00, 0x00, 0x80, 0x00,  0x00, 0x00, 0x00, 0x00,
234a71df50SFrank Blaschka 	0x15, 0x01, 0x01, 0x80,  0x00, 0x00, 0x00, 0x00,
244a71df50SFrank Blaschka 	0xff, 0xff, 0x00, 0x00,  0x00, 0x00, 0xc8, 0xc1,
254a71df50SFrank Blaschka 	0xd3, 0xd3, 0xd6, 0xd3,  0xc5, 0x40, 0x00, 0x00,
264a71df50SFrank Blaschka 	0x00, 0x00
274a71df50SFrank Blaschka };
284a71df50SFrank Blaschka 
2994ae20f7SJulian Wiedmann const unsigned char CM_ENABLE[] = {
304a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x01,
314a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x63,
324a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
334a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
344a71df50SFrank Blaschka 	0x81, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
354a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x23,
364a71df50SFrank Blaschka 	0x00, 0x00, 0x23, 0x05,  0x00, 0x00, 0x00, 0x00,
374a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
384a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x23,  0x00, 0x00, 0x00, 0x40,
394a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x02,  0x00, 0x17, 0x00, 0x00,
404a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
414a71df50SFrank Blaschka 	0x00, 0x0b, 0x04, 0x01,
424a71df50SFrank Blaschka 	0x7e, 0x04, 0x05, 0x00,  0x01, 0x01, 0x0f,
434a71df50SFrank Blaschka 	0x00,
444a71df50SFrank Blaschka 	0x0c, 0x04, 0x02, 0xff,  0xff, 0xff, 0xff, 0xff,
454a71df50SFrank Blaschka 	0xff, 0xff, 0xff
464a71df50SFrank Blaschka };
474a71df50SFrank Blaschka 
4894ae20f7SJulian Wiedmann const unsigned char CM_SETUP[] = {
494a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x02,
504a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x64,
514a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
524a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
534a71df50SFrank Blaschka 	0x81, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
544a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x24,
554a71df50SFrank Blaschka 	0x00, 0x00, 0x24, 0x05,  0x00, 0x00, 0x00, 0x00,
564a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
574a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x24,  0x00, 0x00, 0x00, 0x40,
584a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x04,  0x00, 0x18, 0x00, 0x00,
594a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
604a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
614a71df50SFrank Blaschka 	0x05, 0x00, 0x01, 0x01,  0x11,
624a71df50SFrank Blaschka 	0x00, 0x09, 0x04,
634a71df50SFrank Blaschka 	0x05, 0x05, 0x00, 0x00,  0x00, 0x00,
644a71df50SFrank Blaschka 	0x00, 0x06,
654a71df50SFrank Blaschka 	0x04, 0x06, 0xc8, 0x00
664a71df50SFrank Blaschka };
674a71df50SFrank Blaschka 
6894ae20f7SJulian Wiedmann const unsigned char ULP_ENABLE[] = {
694a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x03,
704a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x6b,
714a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
724a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
734a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x01,
744a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x2b,
754a71df50SFrank Blaschka 	0x00, 0x00, 0x2b, 0x05,  0x20, 0x01, 0x00, 0x00,
764a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
774a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x2b,  0x00, 0x00, 0x00, 0x40,
784a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x02,  0x00, 0x1f, 0x00, 0x00,
794a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
804a71df50SFrank Blaschka 	0x00, 0x0b, 0x04, 0x01,
814a71df50SFrank Blaschka 	0x03, 0x04, 0x05, 0x00,  0x01, 0x01, 0x12,
824a71df50SFrank Blaschka 	0x00,
834a71df50SFrank Blaschka 	0x14, 0x04, 0x0a, 0x00,  0x20, 0x00, 0x00, 0xff,
844a71df50SFrank Blaschka 	0xff, 0x00, 0x08, 0xc8,  0xe8, 0xc4, 0xf1, 0xc7,
854a71df50SFrank Blaschka 	0xf1, 0x00, 0x00
864a71df50SFrank Blaschka };
874a71df50SFrank Blaschka 
8894ae20f7SJulian Wiedmann const unsigned char ULP_SETUP[] = {
894a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x04,
904a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x6c,
914a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
924a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
934a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x02,
944a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x01,  0x00, 0x24, 0x00, 0x2c,
954a71df50SFrank Blaschka 	0x00, 0x00, 0x2c, 0x05,  0x20, 0x01, 0x00, 0x00,
964a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
974a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x2c,  0x00, 0x00, 0x00, 0x40,
984a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x04,  0x00, 0x20, 0x00, 0x00,
994a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
1004a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
1014a71df50SFrank Blaschka 	0x05, 0x00, 0x01, 0x01,  0x14,
1024a71df50SFrank Blaschka 	0x00, 0x09, 0x04,
1034a71df50SFrank Blaschka 	0x05, 0x05, 0x30, 0x01,  0x00, 0x00,
1044a71df50SFrank Blaschka 	0x00, 0x06,
1054a71df50SFrank Blaschka 	0x04, 0x06, 0x40, 0x00,
1064a71df50SFrank Blaschka 	0x00, 0x08, 0x04, 0x0b,
1074a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00
1084a71df50SFrank Blaschka };
1094a71df50SFrank Blaschka 
11094ae20f7SJulian Wiedmann const unsigned char DM_ACT[] = {
1114a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x05,
1124a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x55,
1134a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
1144a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
1154a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x03,
1164a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x02,  0x00, 0x24, 0x00, 0x15,
1174a71df50SFrank Blaschka 	0x00, 0x00, 0x2c, 0x05,  0x20, 0x01, 0x00, 0x00,
1184a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
1194a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x15,  0x00, 0x00, 0x00, 0x40,
1204a71df50SFrank Blaschka 	0x00, 0x0c, 0x43, 0x60,  0x00, 0x09, 0x00, 0x00,
1214a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
1224a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
1234a71df50SFrank Blaschka 	0x05, 0x40, 0x01, 0x01,  0x00
1244a71df50SFrank Blaschka };
1254a71df50SFrank Blaschka 
12694ae20f7SJulian Wiedmann const unsigned char IPA_PDU_HEADER[] = {
1274a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x77, 0x77, 0x77, 0x77,
128c2153277SJulian Wiedmann 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x00,
1294a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
1304a71df50SFrank Blaschka 	0xc1, 0x03, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
131c2153277SJulian Wiedmann 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x00,
132c2153277SJulian Wiedmann 	0x00, 0x00, 0x00, 0x05,  0x77, 0x77, 0x77, 0x77,
1334a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
134c2153277SJulian Wiedmann 	0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x40,
1354a71df50SFrank Blaschka };
1364a71df50SFrank Blaschka 
1374a71df50SFrank Blaschka struct ipa_rc_msg {
1384a71df50SFrank Blaschka 	enum qeth_ipa_return_codes rc;
139048a7f8bSJean Delvare 	const char *msg;
1404a71df50SFrank Blaschka };
1414a71df50SFrank Blaschka 
142048a7f8bSJean Delvare static const struct ipa_rc_msg qeth_ipa_rc_msg[] = {
1434a71df50SFrank Blaschka 	{IPA_RC_SUCCESS,		"success"},
1444a71df50SFrank Blaschka 	{IPA_RC_NOTSUPP,		"Command not supported"},
1454a71df50SFrank Blaschka 	{IPA_RC_IP_TABLE_FULL,		"Add Addr IP Table Full - ipv6"},
1464a71df50SFrank Blaschka 	{IPA_RC_UNKNOWN_ERROR,		"IPA command failed - reason unknown"},
1474a71df50SFrank Blaschka 	{IPA_RC_UNSUPPORTED_COMMAND,	"Command not supported"},
148a45b3fafSHans Wippel 	{IPA_RC_VNICC_OOSEQ,		"Command issued out of sequence"},
14984616e86SJulian Wiedmann 	{IPA_RC_INVALID_FORMAT,		"invalid format or length"},
1504a71df50SFrank Blaschka 	{IPA_RC_DUP_IPV6_REMOTE, "ipv6 address already registered remote"},
1512063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_NOT_CONFIGURED,	"Not configured for bridgeport"},
1524a71df50SFrank Blaschka 	{IPA_RC_DUP_IPV6_HOME,		"ipv6 address already registered"},
1534a71df50SFrank Blaschka 	{IPA_RC_UNREGISTERED_ADDR,	"Address not registered"},
1544a71df50SFrank Blaschka 	{IPA_RC_NO_ID_AVAILABLE,	"No identifiers available"},
1554a71df50SFrank Blaschka 	{IPA_RC_ID_NOT_FOUND,		"Identifier not found"},
1562063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_ANO_DEV_PRIMARY, "Primary bridgeport exists already"},
1572063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_CURRENT_SECOND,	"Bridgeport is currently secondary"},
1582063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_LIMIT_SECOND, "Limit of secondary bridgeports reached"},
1594a71df50SFrank Blaschka 	{IPA_RC_INVALID_IP_VERSION,	"IP version incorrect"},
1602063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_CURRENT_PRIMARY, "Bridgeport is currently primary"},
1614a71df50SFrank Blaschka 	{IPA_RC_LAN_FRAME_MISMATCH,	"LAN and frame mismatch"},
1622063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_NO_QDIO_QUEUES,	"QDIO queues not established"},
1634a71df50SFrank Blaschka 	{IPA_RC_L2_UNSUPPORTED_CMD,	"Unsupported layer 2 command"},
1644a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_MAC,		"Duplicate MAC address"},
1654a71df50SFrank Blaschka 	{IPA_RC_L2_ADDR_TABLE_FULL,	"Layer2 address table full"},
1664a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_LAYER3_MAC,	"Duplicate with layer 3 MAC"},
1674a71df50SFrank Blaschka 	{IPA_RC_L2_GMAC_NOT_FOUND,	"GMAC not found"},
1680666eb06SUrsula Braun 	{IPA_RC_L2_MAC_NOT_AUTH_BY_HYP,	"L2 mac not authorized by hypervisor"},
1690666eb06SUrsula Braun 	{IPA_RC_L2_MAC_NOT_AUTH_BY_ADP,	"L2 mac not authorized by adapter"},
1704a71df50SFrank Blaschka 	{IPA_RC_L2_MAC_NOT_FOUND,	"L2 mac address not found"},
1714a71df50SFrank Blaschka 	{IPA_RC_L2_INVALID_VLAN_ID,	"L2 invalid vlan id"},
1724a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_VLAN_ID,		"L2 duplicate vlan id"},
1734a71df50SFrank Blaschka 	{IPA_RC_L2_VLAN_ID_NOT_FOUND,	"L2 vlan id not found"},
174a45b3fafSHans Wippel 	{IPA_RC_VNICC_VNICBP,		"VNIC is BridgePort"},
1752063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_NOT_CONFIGURED,	"Not configured for bridgeport"},
1762063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_OS_MISMATCH,	"OS mismatch"},
1772063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_ANO_DEV_PRIMARY, "Primary bridgeport exists already"},
1782063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_CURRENT_SECOND,	"Bridgeport is currently secondary"},
1792063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_LIMIT_SECOND, "Limit of secondary bridgeports reached"},
1802063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_NOT_AUTHD_BY_ZMAN, "Not authorized by zManager"},
1812063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_CURRENT_PRIMARY, "Bridgeport is currently primary"},
1822063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_NO_QDIO_QUEUES,	"QDIO queues not established"},
1834a71df50SFrank Blaschka 	{IPA_RC_DATA_MISMATCH,		"Data field mismatch (v4/v6 mixed)"},
1844a71df50SFrank Blaschka 	{IPA_RC_INVALID_MTU_SIZE,	"Invalid MTU size"},
1854a71df50SFrank Blaschka 	{IPA_RC_INVALID_LANTYPE,	"Invalid LAN type"},
1864a71df50SFrank Blaschka 	{IPA_RC_INVALID_LANNUM,		"Invalid LAN num"},
1874a71df50SFrank Blaschka 	{IPA_RC_DUPLICATE_IP_ADDRESS,	"Address already registered"},
1884a71df50SFrank Blaschka 	{IPA_RC_IP_ADDR_TABLE_FULL,	"IP address table full"},
1894a71df50SFrank Blaschka 	{IPA_RC_LAN_PORT_STATE_ERROR,	"LAN port state error"},
1904a71df50SFrank Blaschka 	{IPA_RC_SETIP_NO_STARTLAN,	"Setip no startlan received"},
1914a71df50SFrank Blaschka 	{IPA_RC_SETIP_ALREADY_RECEIVED,	"Setip already received"},
1924a71df50SFrank Blaschka 	{IPA_RC_IP_ADDR_ALREADY_USED,	"IP address already in use on LAN"},
1932d921c32SUrsula Braun 	{IPA_RC_MC_ADDR_NOT_FOUND,	"Multicast address not found"},
1944a71df50SFrank Blaschka 	{IPA_RC_SETIP_INVALID_VERSION,	"SETIP invalid IP version"},
1954a71df50SFrank Blaschka 	{IPA_RC_UNSUPPORTED_SUBCMD,	"Unsupported assist subcommand"},
1964a71df50SFrank Blaschka 	{IPA_RC_ARP_ASSIST_NO_ENABLE,	"Only partial success, no enable"},
1974a71df50SFrank Blaschka 	{IPA_RC_PRIMARY_ALREADY_DEFINED, "Primary already defined"},
1984a71df50SFrank Blaschka 	{IPA_RC_SECOND_ALREADY_DEFINED,	"Secondary already defined"},
1994a71df50SFrank Blaschka 	{IPA_RC_INVALID_SETRTG_INDICATOR, "Invalid SETRTG indicator"},
2004a71df50SFrank Blaschka 	{IPA_RC_MC_ADDR_ALREADY_DEFINED, "Multicast address already defined"},
2014a71df50SFrank Blaschka 	{IPA_RC_LAN_OFFLINE,		"STRTLAN_LAN_DISABLED - LAN offline"},
2020f54761dSStefan Raspl 	{IPA_RC_VEPA_TO_VEB_TRANSITION,	"Adj. switch disabled port mode RR"},
2034a71df50SFrank Blaschka 	{IPA_RC_INVALID_IP_VERSION2,	"Invalid IP version"},
2044b7ae122SJulian Wiedmann 	/* default for qeth_get_ipa_msg(): */
2054a71df50SFrank Blaschka 	{IPA_RC_FFFF,			"Unknown Error"}
2064a71df50SFrank Blaschka };
2074a71df50SFrank Blaschka 
qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)208048a7f8bSJean Delvare const char *qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)
2094a71df50SFrank Blaschka {
210048a7f8bSJean Delvare 	int x;
211048a7f8bSJean Delvare 
212048a7f8bSJean Delvare 	for (x = 0; x < ARRAY_SIZE(qeth_ipa_rc_msg) - 1; x++)
213048a7f8bSJean Delvare 		if (qeth_ipa_rc_msg[x].rc == rc)
214048a7f8bSJean Delvare 			return qeth_ipa_rc_msg[x].msg;
2154a71df50SFrank Blaschka 	return qeth_ipa_rc_msg[x].msg;
2164a71df50SFrank Blaschka }
2174a71df50SFrank Blaschka 
2184a71df50SFrank Blaschka 
2194a71df50SFrank Blaschka struct ipa_cmd_names {
2204a71df50SFrank Blaschka 	enum qeth_ipa_cmds cmd;
221048a7f8bSJean Delvare 	const char *name;
2224a71df50SFrank Blaschka };
2234a71df50SFrank Blaschka 
224048a7f8bSJean Delvare static const struct ipa_cmd_names qeth_ipa_cmd_names[] = {
2254a71df50SFrank Blaschka 	{IPA_CMD_STARTLAN,	"startlan"},
2264a71df50SFrank Blaschka 	{IPA_CMD_STOPLAN,	"stoplan"},
2274a71df50SFrank Blaschka 	{IPA_CMD_SETVMAC,	"setvmac"},
228d11ba0c4SPeter Tiedemann 	{IPA_CMD_DELVMAC,	"delvmac"},
2294a71df50SFrank Blaschka 	{IPA_CMD_SETGMAC,	"setgmac"},
2304a71df50SFrank Blaschka 	{IPA_CMD_DELGMAC,	"delgmac"},
2314a71df50SFrank Blaschka 	{IPA_CMD_SETVLAN,	"setvlan"},
2324a71df50SFrank Blaschka 	{IPA_CMD_DELVLAN,	"delvlan"},
233a45b3fafSHans Wippel 	{IPA_CMD_VNICC,		"vnic_characteristics"},
2349c23f4daSEugene Crosser 	{IPA_CMD_SETBRIDGEPORT_OSA,	"set_bridge_port(osa)"},
2354a71df50SFrank Blaschka 	{IPA_CMD_SETIP,		"setip"},
2364a71df50SFrank Blaschka 	{IPA_CMD_QIPASSIST,	"qipassist"},
2374a71df50SFrank Blaschka 	{IPA_CMD_SETASSPARMS,	"setassparms"},
2384a71df50SFrank Blaschka 	{IPA_CMD_SETIPM,	"setipm"},
2394a71df50SFrank Blaschka 	{IPA_CMD_DELIPM,	"delipm"},
2404a71df50SFrank Blaschka 	{IPA_CMD_SETRTG,	"setrtg"},
2414a71df50SFrank Blaschka 	{IPA_CMD_DELIP,		"delip"},
2424a71df50SFrank Blaschka 	{IPA_CMD_SETADAPTERPARMS, "setadapterparms"},
2434a71df50SFrank Blaschka 	{IPA_CMD_SET_DIAG_ASS,	"set_diag_ass"},
2449c23f4daSEugene Crosser 	{IPA_CMD_SETBRIDGEPORT_IQD,	"set_bridge_port(hs)"},
2454a71df50SFrank Blaschka 	{IPA_CMD_CREATE_ADDR,	"create_addr"},
2464a71df50SFrank Blaschka 	{IPA_CMD_DESTROY_ADDR,	"destroy_addr"},
2474a71df50SFrank Blaschka 	{IPA_CMD_REGISTER_LOCAL_ADDR,	"register_local_addr"},
2484a71df50SFrank Blaschka 	{IPA_CMD_UNREGISTER_LOCAL_ADDR,	"unregister_local_addr"},
2499f48b9dbSEugene Crosser 	{IPA_CMD_ADDRESS_CHANGE_NOTIF, "address_change_notification"},
2504a71df50SFrank Blaschka 	{IPA_CMD_UNKNOWN,	"unknown"},
2514a71df50SFrank Blaschka };
2524a71df50SFrank Blaschka 
qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)253048a7f8bSJean Delvare const char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)
2544a71df50SFrank Blaschka {
255048a7f8bSJean Delvare 	int x;
256048a7f8bSJean Delvare 
257048a7f8bSJean Delvare 	for (x = 0; x < ARRAY_SIZE(qeth_ipa_cmd_names) - 1; x++)
258048a7f8bSJean Delvare 		if (qeth_ipa_cmd_names[x].cmd == cmd)
259048a7f8bSJean Delvare 			return qeth_ipa_cmd_names[x].name;
2604a71df50SFrank Blaschka 	return qeth_ipa_cmd_names[x].name;
2614a71df50SFrank Blaschka }
262