xref: /openbmc/linux/drivers/s390/net/qeth_core_mpc.c (revision 048a7f8b)
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 
134a71df50SFrank Blaschka 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 
214a71df50SFrank Blaschka 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 
294a71df50SFrank Blaschka 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 
484a71df50SFrank Blaschka 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 
684a71df50SFrank Blaschka 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 
884a71df50SFrank Blaschka 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 
1104a71df50SFrank Blaschka 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 
1264a71df50SFrank Blaschka unsigned char IPA_PDU_HEADER[] = {
1274a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x77, 0x77, 0x77, 0x77,
1284a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00,
1294a71df50SFrank Blaschka 		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd)) / 256,
1304a71df50SFrank Blaschka 		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd)) % 256,
1314a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
1324a71df50SFrank Blaschka 	0xc1, 0x03, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
1334a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24,
1344a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1354a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1364a71df50SFrank Blaschka 	0x00,
1374a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1384a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1394a71df50SFrank Blaschka 	0x05,
1404a71df50SFrank Blaschka 	0x77, 0x77, 0x77, 0x77,
1414a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
1424a71df50SFrank Blaschka 	0x01, 0x00,
1434a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1444a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1454a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x40,
1464a71df50SFrank Blaschka };
1474a71df50SFrank Blaschka EXPORT_SYMBOL_GPL(IPA_PDU_HEADER);
1484a71df50SFrank Blaschka 
1494a71df50SFrank Blaschka struct ipa_rc_msg {
1504a71df50SFrank Blaschka 	enum qeth_ipa_return_codes rc;
151048a7f8bSJean Delvare 	const char *msg;
1524a71df50SFrank Blaschka };
1534a71df50SFrank Blaschka 
154048a7f8bSJean Delvare static const struct ipa_rc_msg qeth_ipa_rc_msg[] = {
1554a71df50SFrank Blaschka 	{IPA_RC_SUCCESS,		"success"},
1564a71df50SFrank Blaschka 	{IPA_RC_NOTSUPP,		"Command not supported"},
1574a71df50SFrank Blaschka 	{IPA_RC_IP_TABLE_FULL,		"Add Addr IP Table Full - ipv6"},
1584a71df50SFrank Blaschka 	{IPA_RC_UNKNOWN_ERROR,		"IPA command failed - reason unknown"},
1594a71df50SFrank Blaschka 	{IPA_RC_UNSUPPORTED_COMMAND,	"Command not supported"},
160a45b3fafSHans Wippel 	{IPA_RC_VNICC_OOSEQ,		"Command issued out of sequence"},
16184616e86SJulian Wiedmann 	{IPA_RC_INVALID_FORMAT,		"invalid format or length"},
1624a71df50SFrank Blaschka 	{IPA_RC_DUP_IPV6_REMOTE, "ipv6 address already registered remote"},
1632063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_NOT_CONFIGURED,	"Not configured for bridgeport"},
1644a71df50SFrank Blaschka 	{IPA_RC_DUP_IPV6_HOME,		"ipv6 address already registered"},
1654a71df50SFrank Blaschka 	{IPA_RC_UNREGISTERED_ADDR,	"Address not registered"},
1664a71df50SFrank Blaschka 	{IPA_RC_NO_ID_AVAILABLE,	"No identifiers available"},
1674a71df50SFrank Blaschka 	{IPA_RC_ID_NOT_FOUND,		"Identifier not found"},
1682063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_ANO_DEV_PRIMARY, "Primary bridgeport exists already"},
1692063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_CURRENT_SECOND,	"Bridgeport is currently secondary"},
1702063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_LIMIT_SECOND, "Limit of secondary bridgeports reached"},
1714a71df50SFrank Blaschka 	{IPA_RC_INVALID_IP_VERSION,	"IP version incorrect"},
1722063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_CURRENT_PRIMARY, "Bridgeport is currently primary"},
1734a71df50SFrank Blaschka 	{IPA_RC_LAN_FRAME_MISMATCH,	"LAN and frame mismatch"},
1742063a5f5SKittipon Meesompop 	{IPA_RC_SBP_IQD_NO_QDIO_QUEUES,	"QDIO queues not established"},
1754a71df50SFrank Blaschka 	{IPA_RC_L2_UNSUPPORTED_CMD,	"Unsupported layer 2 command"},
1764a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_MAC,		"Duplicate MAC address"},
1774a71df50SFrank Blaschka 	{IPA_RC_L2_ADDR_TABLE_FULL,	"Layer2 address table full"},
1784a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_LAYER3_MAC,	"Duplicate with layer 3 MAC"},
1794a71df50SFrank Blaschka 	{IPA_RC_L2_GMAC_NOT_FOUND,	"GMAC not found"},
1800666eb06SUrsula Braun 	{IPA_RC_L2_MAC_NOT_AUTH_BY_HYP,	"L2 mac not authorized by hypervisor"},
1810666eb06SUrsula Braun 	{IPA_RC_L2_MAC_NOT_AUTH_BY_ADP,	"L2 mac not authorized by adapter"},
1824a71df50SFrank Blaschka 	{IPA_RC_L2_MAC_NOT_FOUND,	"L2 mac address not found"},
1834a71df50SFrank Blaschka 	{IPA_RC_L2_INVALID_VLAN_ID,	"L2 invalid vlan id"},
1844a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_VLAN_ID,		"L2 duplicate vlan id"},
1854a71df50SFrank Blaschka 	{IPA_RC_L2_VLAN_ID_NOT_FOUND,	"L2 vlan id not found"},
186a45b3fafSHans Wippel 	{IPA_RC_VNICC_VNICBP,		"VNIC is BridgePort"},
1872063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_NOT_CONFIGURED,	"Not configured for bridgeport"},
1882063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_OS_MISMATCH,	"OS mismatch"},
1892063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_ANO_DEV_PRIMARY, "Primary bridgeport exists already"},
1902063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_CURRENT_SECOND,	"Bridgeport is currently secondary"},
1912063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_LIMIT_SECOND, "Limit of secondary bridgeports reached"},
1922063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_NOT_AUTHD_BY_ZMAN, "Not authorized by zManager"},
1932063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_CURRENT_PRIMARY, "Bridgeport is currently primary"},
1942063a5f5SKittipon Meesompop 	{IPA_RC_SBP_OSA_NO_QDIO_QUEUES,	"QDIO queues not established"},
1954a71df50SFrank Blaschka 	{IPA_RC_DATA_MISMATCH,		"Data field mismatch (v4/v6 mixed)"},
1964a71df50SFrank Blaschka 	{IPA_RC_INVALID_MTU_SIZE,	"Invalid MTU size"},
1974a71df50SFrank Blaschka 	{IPA_RC_INVALID_LANTYPE,	"Invalid LAN type"},
1984a71df50SFrank Blaschka 	{IPA_RC_INVALID_LANNUM,		"Invalid LAN num"},
1994a71df50SFrank Blaschka 	{IPA_RC_DUPLICATE_IP_ADDRESS,	"Address already registered"},
2004a71df50SFrank Blaschka 	{IPA_RC_IP_ADDR_TABLE_FULL,	"IP address table full"},
2014a71df50SFrank Blaschka 	{IPA_RC_LAN_PORT_STATE_ERROR,	"LAN port state error"},
2024a71df50SFrank Blaschka 	{IPA_RC_SETIP_NO_STARTLAN,	"Setip no startlan received"},
2034a71df50SFrank Blaschka 	{IPA_RC_SETIP_ALREADY_RECEIVED,	"Setip already received"},
2044a71df50SFrank Blaschka 	{IPA_RC_IP_ADDR_ALREADY_USED,	"IP address already in use on LAN"},
2052d921c32SUrsula Braun 	{IPA_RC_MC_ADDR_NOT_FOUND,	"Multicast address not found"},
2064a71df50SFrank Blaschka 	{IPA_RC_SETIP_INVALID_VERSION,	"SETIP invalid IP version"},
2074a71df50SFrank Blaschka 	{IPA_RC_UNSUPPORTED_SUBCMD,	"Unsupported assist subcommand"},
2084a71df50SFrank Blaschka 	{IPA_RC_ARP_ASSIST_NO_ENABLE,	"Only partial success, no enable"},
2094a71df50SFrank Blaschka 	{IPA_RC_PRIMARY_ALREADY_DEFINED, "Primary already defined"},
2104a71df50SFrank Blaschka 	{IPA_RC_SECOND_ALREADY_DEFINED,	"Secondary already defined"},
2114a71df50SFrank Blaschka 	{IPA_RC_INVALID_SETRTG_INDICATOR, "Invalid SETRTG indicator"},
2124a71df50SFrank Blaschka 	{IPA_RC_MC_ADDR_ALREADY_DEFINED, "Multicast address already defined"},
2134a71df50SFrank Blaschka 	{IPA_RC_LAN_OFFLINE,		"STRTLAN_LAN_DISABLED - LAN offline"},
2140f54761dSStefan Raspl 	{IPA_RC_VEPA_TO_VEB_TRANSITION,	"Adj. switch disabled port mode RR"},
2154a71df50SFrank Blaschka 	{IPA_RC_INVALID_IP_VERSION2,	"Invalid IP version"},
216e0a8114cSUrsula Braun 	{IPA_RC_ENOMEM,			"Memory problem"},
2174a71df50SFrank Blaschka 	{IPA_RC_FFFF,			"Unknown Error"}
2184a71df50SFrank Blaschka };
2194a71df50SFrank Blaschka 
2204a71df50SFrank Blaschka 
2214a71df50SFrank Blaschka 
222048a7f8bSJean Delvare const char *qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)
2234a71df50SFrank Blaschka {
224048a7f8bSJean Delvare 	int x;
225048a7f8bSJean Delvare 
226048a7f8bSJean Delvare 	for (x = 0; x < ARRAY_SIZE(qeth_ipa_rc_msg) - 1; x++)
227048a7f8bSJean Delvare 		if (qeth_ipa_rc_msg[x].rc == rc)
228048a7f8bSJean Delvare 			return qeth_ipa_rc_msg[x].msg;
2294a71df50SFrank Blaschka 	return qeth_ipa_rc_msg[x].msg;
2304a71df50SFrank Blaschka }
2314a71df50SFrank Blaschka 
2324a71df50SFrank Blaschka 
2334a71df50SFrank Blaschka struct ipa_cmd_names {
2344a71df50SFrank Blaschka 	enum qeth_ipa_cmds cmd;
235048a7f8bSJean Delvare 	const char *name;
2364a71df50SFrank Blaschka };
2374a71df50SFrank Blaschka 
238048a7f8bSJean Delvare static const struct ipa_cmd_names qeth_ipa_cmd_names[] = {
2394a71df50SFrank Blaschka 	{IPA_CMD_STARTLAN,	"startlan"},
2404a71df50SFrank Blaschka 	{IPA_CMD_STOPLAN,	"stoplan"},
2414a71df50SFrank Blaschka 	{IPA_CMD_SETVMAC,	"setvmac"},
242d11ba0c4SPeter Tiedemann 	{IPA_CMD_DELVMAC,	"delvmac"},
2434a71df50SFrank Blaschka 	{IPA_CMD_SETGMAC,	"setgmac"},
2444a71df50SFrank Blaschka 	{IPA_CMD_DELGMAC,	"delgmac"},
2454a71df50SFrank Blaschka 	{IPA_CMD_SETVLAN,	"setvlan"},
2464a71df50SFrank Blaschka 	{IPA_CMD_DELVLAN,	"delvlan"},
247a45b3fafSHans Wippel 	{IPA_CMD_VNICC,		"vnic_characteristics"},
2489c23f4daSEugene Crosser 	{IPA_CMD_SETBRIDGEPORT_OSA,	"set_bridge_port(osa)"},
2494a71df50SFrank Blaschka 	{IPA_CMD_SETCCID,	"setccid"},
2504a71df50SFrank Blaschka 	{IPA_CMD_DELCCID,	"delccid"},
2514a71df50SFrank Blaschka 	{IPA_CMD_MODCCID,	"modccid"},
2524a71df50SFrank Blaschka 	{IPA_CMD_SETIP,		"setip"},
2534a71df50SFrank Blaschka 	{IPA_CMD_QIPASSIST,	"qipassist"},
2544a71df50SFrank Blaschka 	{IPA_CMD_SETASSPARMS,	"setassparms"},
2554a71df50SFrank Blaschka 	{IPA_CMD_SETIPM,	"setipm"},
2564a71df50SFrank Blaschka 	{IPA_CMD_DELIPM,	"delipm"},
2574a71df50SFrank Blaschka 	{IPA_CMD_SETRTG,	"setrtg"},
2584a71df50SFrank Blaschka 	{IPA_CMD_DELIP,		"delip"},
2594a71df50SFrank Blaschka 	{IPA_CMD_SETADAPTERPARMS, "setadapterparms"},
2604a71df50SFrank Blaschka 	{IPA_CMD_SET_DIAG_ASS,	"set_diag_ass"},
2619c23f4daSEugene Crosser 	{IPA_CMD_SETBRIDGEPORT_IQD,	"set_bridge_port(hs)"},
2624a71df50SFrank Blaschka 	{IPA_CMD_CREATE_ADDR,	"create_addr"},
2634a71df50SFrank Blaschka 	{IPA_CMD_DESTROY_ADDR,	"destroy_addr"},
2644a71df50SFrank Blaschka 	{IPA_CMD_REGISTER_LOCAL_ADDR,	"register_local_addr"},
2654a71df50SFrank Blaschka 	{IPA_CMD_UNREGISTER_LOCAL_ADDR,	"unregister_local_addr"},
2669f48b9dbSEugene Crosser 	{IPA_CMD_ADDRESS_CHANGE_NOTIF, "address_change_notification"},
2674a71df50SFrank Blaschka 	{IPA_CMD_UNKNOWN,	"unknown"},
2684a71df50SFrank Blaschka };
2694a71df50SFrank Blaschka 
270048a7f8bSJean Delvare const char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)
2714a71df50SFrank Blaschka {
272048a7f8bSJean Delvare 	int x;
273048a7f8bSJean Delvare 
274048a7f8bSJean Delvare 	for (x = 0; x < ARRAY_SIZE(qeth_ipa_cmd_names) - 1; x++)
275048a7f8bSJean Delvare 		if (qeth_ipa_cmd_names[x].cmd == cmd)
276048a7f8bSJean Delvare 			return qeth_ipa_cmd_names[x].name;
2774a71df50SFrank Blaschka 	return qeth_ipa_cmd_names[x].name;
2784a71df50SFrank Blaschka }
279