xref: /openbmc/linux/drivers/s390/net/qeth_core_mpc.c (revision 9f48b9db)
14a71df50SFrank Blaschka /*
24a71df50SFrank Blaschka  *    Copyright IBM Corp. 2007
34a71df50SFrank Blaschka  *    Author(s): Frank Pavlic <fpavlic@de.ibm.com>,
44a71df50SFrank Blaschka  *		 Thomas Spatzier <tspat@de.ibm.com>,
54a71df50SFrank Blaschka  *		 Frank Blaschka <frank.blaschka@de.ibm.com>
64a71df50SFrank Blaschka  */
74a71df50SFrank Blaschka 
84a71df50SFrank Blaschka #include <linux/module.h>
94a71df50SFrank Blaschka #include <asm/cio.h>
104a71df50SFrank Blaschka #include "qeth_core_mpc.h"
114a71df50SFrank Blaschka 
124a71df50SFrank Blaschka unsigned char IDX_ACTIVATE_READ[] = {
134a71df50SFrank Blaschka 	0x00, 0x00, 0x80, 0x00,  0x00, 0x00, 0x00, 0x00,
144a71df50SFrank Blaschka 	0x19, 0x01, 0x01, 0x80,  0x00, 0x00, 0x00, 0x00,
154a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0xc8, 0xc1,
164a71df50SFrank Blaschka 	0xd3, 0xd3, 0xd6, 0xd3,  0xc5, 0x40, 0x00, 0x00,
174a71df50SFrank Blaschka 	0x00, 0x00
184a71df50SFrank Blaschka };
194a71df50SFrank Blaschka 
204a71df50SFrank Blaschka unsigned char IDX_ACTIVATE_WRITE[] = {
214a71df50SFrank Blaschka 	0x00, 0x00, 0x80, 0x00,  0x00, 0x00, 0x00, 0x00,
224a71df50SFrank Blaschka 	0x15, 0x01, 0x01, 0x80,  0x00, 0x00, 0x00, 0x00,
234a71df50SFrank Blaschka 	0xff, 0xff, 0x00, 0x00,  0x00, 0x00, 0xc8, 0xc1,
244a71df50SFrank Blaschka 	0xd3, 0xd3, 0xd6, 0xd3,  0xc5, 0x40, 0x00, 0x00,
254a71df50SFrank Blaschka 	0x00, 0x00
264a71df50SFrank Blaschka };
274a71df50SFrank Blaschka 
284a71df50SFrank Blaschka unsigned char CM_ENABLE[] = {
294a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x01,
304a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x63,
314a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
324a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
334a71df50SFrank Blaschka 	0x81, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
344a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x23,
354a71df50SFrank Blaschka 	0x00, 0x00, 0x23, 0x05,  0x00, 0x00, 0x00, 0x00,
364a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
374a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x23,  0x00, 0x00, 0x00, 0x40,
384a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x02,  0x00, 0x17, 0x00, 0x00,
394a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
404a71df50SFrank Blaschka 	0x00, 0x0b, 0x04, 0x01,
414a71df50SFrank Blaschka 	0x7e, 0x04, 0x05, 0x00,  0x01, 0x01, 0x0f,
424a71df50SFrank Blaschka 	0x00,
434a71df50SFrank Blaschka 	0x0c, 0x04, 0x02, 0xff,  0xff, 0xff, 0xff, 0xff,
444a71df50SFrank Blaschka 	0xff, 0xff, 0xff
454a71df50SFrank Blaschka };
464a71df50SFrank Blaschka 
474a71df50SFrank Blaschka unsigned char CM_SETUP[] = {
484a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x02,
494a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x64,
504a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
514a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
524a71df50SFrank Blaschka 	0x81, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
534a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x24,
544a71df50SFrank Blaschka 	0x00, 0x00, 0x24, 0x05,  0x00, 0x00, 0x00, 0x00,
554a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
564a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x24,  0x00, 0x00, 0x00, 0x40,
574a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x04,  0x00, 0x18, 0x00, 0x00,
584a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
594a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
604a71df50SFrank Blaschka 	0x05, 0x00, 0x01, 0x01,  0x11,
614a71df50SFrank Blaschka 	0x00, 0x09, 0x04,
624a71df50SFrank Blaschka 	0x05, 0x05, 0x00, 0x00,  0x00, 0x00,
634a71df50SFrank Blaschka 	0x00, 0x06,
644a71df50SFrank Blaschka 	0x04, 0x06, 0xc8, 0x00
654a71df50SFrank Blaschka };
664a71df50SFrank Blaschka 
674a71df50SFrank Blaschka unsigned char ULP_ENABLE[] = {
684a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x03,
694a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x6b,
704a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
714a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
724a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x01,
734a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x2b,
744a71df50SFrank Blaschka 	0x00, 0x00, 0x2b, 0x05,  0x20, 0x01, 0x00, 0x00,
754a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
764a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x2b,  0x00, 0x00, 0x00, 0x40,
774a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x02,  0x00, 0x1f, 0x00, 0x00,
784a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
794a71df50SFrank Blaschka 	0x00, 0x0b, 0x04, 0x01,
804a71df50SFrank Blaschka 	0x03, 0x04, 0x05, 0x00,  0x01, 0x01, 0x12,
814a71df50SFrank Blaschka 	0x00,
824a71df50SFrank Blaschka 	0x14, 0x04, 0x0a, 0x00,  0x20, 0x00, 0x00, 0xff,
834a71df50SFrank Blaschka 	0xff, 0x00, 0x08, 0xc8,  0xe8, 0xc4, 0xf1, 0xc7,
844a71df50SFrank Blaschka 	0xf1, 0x00, 0x00
854a71df50SFrank Blaschka };
864a71df50SFrank Blaschka 
874a71df50SFrank Blaschka unsigned char ULP_SETUP[] = {
884a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x04,
894a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x6c,
904a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
914a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
924a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x02,
934a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x01,  0x00, 0x24, 0x00, 0x2c,
944a71df50SFrank Blaschka 	0x00, 0x00, 0x2c, 0x05,  0x20, 0x01, 0x00, 0x00,
954a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
964a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x2c,  0x00, 0x00, 0x00, 0x40,
974a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x04,  0x00, 0x20, 0x00, 0x00,
984a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
994a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
1004a71df50SFrank Blaschka 	0x05, 0x00, 0x01, 0x01,  0x14,
1014a71df50SFrank Blaschka 	0x00, 0x09, 0x04,
1024a71df50SFrank Blaschka 	0x05, 0x05, 0x30, 0x01,  0x00, 0x00,
1034a71df50SFrank Blaschka 	0x00, 0x06,
1044a71df50SFrank Blaschka 	0x04, 0x06, 0x40, 0x00,
1054a71df50SFrank Blaschka 	0x00, 0x08, 0x04, 0x0b,
1064a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00
1074a71df50SFrank Blaschka };
1084a71df50SFrank Blaschka 
1094a71df50SFrank Blaschka unsigned char DM_ACT[] = {
1104a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x05,
1114a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x55,
1124a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
1134a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
1144a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x03,
1154a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x02,  0x00, 0x24, 0x00, 0x15,
1164a71df50SFrank Blaschka 	0x00, 0x00, 0x2c, 0x05,  0x20, 0x01, 0x00, 0x00,
1174a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
1184a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x15,  0x00, 0x00, 0x00, 0x40,
1194a71df50SFrank Blaschka 	0x00, 0x0c, 0x43, 0x60,  0x00, 0x09, 0x00, 0x00,
1204a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
1214a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
1224a71df50SFrank Blaschka 	0x05, 0x40, 0x01, 0x01,  0x00
1234a71df50SFrank Blaschka };
1244a71df50SFrank Blaschka 
1254a71df50SFrank Blaschka unsigned char IPA_PDU_HEADER[] = {
1264a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x77, 0x77, 0x77, 0x77,
1274a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00,
1284a71df50SFrank Blaschka 		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd)) / 256,
1294a71df50SFrank Blaschka 		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd)) % 256,
1304a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
1314a71df50SFrank Blaschka 	0xc1, 0x03, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
1324a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24,
1334a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1344a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1354a71df50SFrank Blaschka 	0x00,
1364a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1374a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1384a71df50SFrank Blaschka 	0x05,
1394a71df50SFrank Blaschka 	0x77, 0x77, 0x77, 0x77,
1404a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
1414a71df50SFrank Blaschka 	0x01, 0x00,
1424a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1434a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1444a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x40,
1454a71df50SFrank Blaschka };
1464a71df50SFrank Blaschka EXPORT_SYMBOL_GPL(IPA_PDU_HEADER);
1474a71df50SFrank Blaschka 
1484a71df50SFrank Blaschka unsigned char WRITE_CCW[] = {
1494a71df50SFrank Blaschka 	0x01, CCW_FLAG_SLI, 0, 0,
1504a71df50SFrank Blaschka 	0, 0, 0, 0
1514a71df50SFrank Blaschka };
1524a71df50SFrank Blaschka 
1534a71df50SFrank Blaschka unsigned char READ_CCW[] = {
1544a71df50SFrank Blaschka 	0x02, CCW_FLAG_SLI, 0, 0,
1554a71df50SFrank Blaschka 	0, 0, 0, 0
1564a71df50SFrank Blaschka };
1574a71df50SFrank Blaschka 
1584a71df50SFrank Blaschka 
1594a71df50SFrank Blaschka struct ipa_rc_msg {
1604a71df50SFrank Blaschka 	enum qeth_ipa_return_codes rc;
1614a71df50SFrank Blaschka 	char *msg;
1624a71df50SFrank Blaschka };
1634a71df50SFrank Blaschka 
1644a71df50SFrank Blaschka static struct ipa_rc_msg qeth_ipa_rc_msg[] = {
1654a71df50SFrank Blaschka 	{IPA_RC_SUCCESS,		"success"},
1664a71df50SFrank Blaschka 	{IPA_RC_NOTSUPP,		"Command not supported"},
1674a71df50SFrank Blaschka 	{IPA_RC_IP_TABLE_FULL,		"Add Addr IP Table Full - ipv6"},
1684a71df50SFrank Blaschka 	{IPA_RC_UNKNOWN_ERROR,		"IPA command failed - reason unknown"},
1694a71df50SFrank Blaschka 	{IPA_RC_UNSUPPORTED_COMMAND,	"Command not supported"},
1704a71df50SFrank Blaschka 	{IPA_RC_DUP_IPV6_REMOTE, "ipv6 address already registered remote"},
1714a71df50SFrank Blaschka 	{IPA_RC_DUP_IPV6_HOME,		"ipv6 address already registered"},
1724a71df50SFrank Blaschka 	{IPA_RC_UNREGISTERED_ADDR,	"Address not registered"},
1734a71df50SFrank Blaschka 	{IPA_RC_NO_ID_AVAILABLE,	"No identifiers available"},
1744a71df50SFrank Blaschka 	{IPA_RC_ID_NOT_FOUND,		"Identifier not found"},
1754a71df50SFrank Blaschka 	{IPA_RC_INVALID_IP_VERSION,	"IP version incorrect"},
1764a71df50SFrank Blaschka 	{IPA_RC_LAN_FRAME_MISMATCH,	"LAN and frame mismatch"},
1774a71df50SFrank Blaschka 	{IPA_RC_L2_UNSUPPORTED_CMD,	"Unsupported layer 2 command"},
1784a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_MAC,		"Duplicate MAC address"},
1794a71df50SFrank Blaschka 	{IPA_RC_L2_ADDR_TABLE_FULL,	"Layer2 address table full"},
1804a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_LAYER3_MAC,	"Duplicate with layer 3 MAC"},
1814a71df50SFrank Blaschka 	{IPA_RC_L2_GMAC_NOT_FOUND,	"GMAC not found"},
1820666eb06SUrsula Braun 	{IPA_RC_L2_MAC_NOT_AUTH_BY_HYP,	"L2 mac not authorized by hypervisor"},
1830666eb06SUrsula Braun 	{IPA_RC_L2_MAC_NOT_AUTH_BY_ADP,	"L2 mac not authorized by adapter"},
1844a71df50SFrank Blaschka 	{IPA_RC_L2_MAC_NOT_FOUND,	"L2 mac address not found"},
1854a71df50SFrank Blaschka 	{IPA_RC_L2_INVALID_VLAN_ID,	"L2 invalid vlan id"},
1864a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_VLAN_ID,		"L2 duplicate vlan id"},
1874a71df50SFrank Blaschka 	{IPA_RC_L2_VLAN_ID_NOT_FOUND,	"L2 vlan id not found"},
1884a71df50SFrank Blaschka 	{IPA_RC_DATA_MISMATCH,		"Data field mismatch (v4/v6 mixed)"},
1894a71df50SFrank Blaschka 	{IPA_RC_INVALID_MTU_SIZE,	"Invalid MTU size"},
1904a71df50SFrank Blaschka 	{IPA_RC_INVALID_LANTYPE,	"Invalid LAN type"},
1914a71df50SFrank Blaschka 	{IPA_RC_INVALID_LANNUM,		"Invalid LAN num"},
1924a71df50SFrank Blaschka 	{IPA_RC_DUPLICATE_IP_ADDRESS,	"Address already registered"},
1934a71df50SFrank Blaschka 	{IPA_RC_IP_ADDR_TABLE_FULL,	"IP address table full"},
1944a71df50SFrank Blaschka 	{IPA_RC_LAN_PORT_STATE_ERROR,	"LAN port state error"},
1954a71df50SFrank Blaschka 	{IPA_RC_SETIP_NO_STARTLAN,	"Setip no startlan received"},
1964a71df50SFrank Blaschka 	{IPA_RC_SETIP_ALREADY_RECEIVED,	"Setip already received"},
1974a71df50SFrank Blaschka 	{IPA_RC_IP_ADDR_ALREADY_USED,	"IP address already in use on LAN"},
1982d921c32SUrsula Braun 	{IPA_RC_MC_ADDR_NOT_FOUND,	"Multicast address not found"},
1994a71df50SFrank Blaschka 	{IPA_RC_SETIP_INVALID_VERSION,	"SETIP invalid IP version"},
2004a71df50SFrank Blaschka 	{IPA_RC_UNSUPPORTED_SUBCMD,	"Unsupported assist subcommand"},
2014a71df50SFrank Blaschka 	{IPA_RC_ARP_ASSIST_NO_ENABLE,	"Only partial success, no enable"},
2024a71df50SFrank Blaschka 	{IPA_RC_PRIMARY_ALREADY_DEFINED, "Primary already defined"},
2034a71df50SFrank Blaschka 	{IPA_RC_SECOND_ALREADY_DEFINED,	"Secondary already defined"},
2044a71df50SFrank Blaschka 	{IPA_RC_INVALID_SETRTG_INDICATOR, "Invalid SETRTG indicator"},
2054a71df50SFrank Blaschka 	{IPA_RC_MC_ADDR_ALREADY_DEFINED, "Multicast address already defined"},
2064a71df50SFrank Blaschka 	{IPA_RC_LAN_OFFLINE,		"STRTLAN_LAN_DISABLED - LAN offline"},
2070f54761dSStefan Raspl 	{IPA_RC_VEPA_TO_VEB_TRANSITION,	"Adj. switch disabled port mode RR"},
2084a71df50SFrank Blaschka 	{IPA_RC_INVALID_IP_VERSION2,	"Invalid IP version"},
209e0a8114cSUrsula Braun 	{IPA_RC_ENOMEM,			"Memory problem"},
2104a71df50SFrank Blaschka 	{IPA_RC_FFFF,			"Unknown Error"}
2114a71df50SFrank Blaschka };
2124a71df50SFrank Blaschka 
2134a71df50SFrank Blaschka 
2144a71df50SFrank Blaschka 
2154a71df50SFrank Blaschka char *qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)
2164a71df50SFrank Blaschka {
2174a71df50SFrank Blaschka 	int x = 0;
2184a71df50SFrank Blaschka 	qeth_ipa_rc_msg[sizeof(qeth_ipa_rc_msg) /
2194a71df50SFrank Blaschka 			sizeof(struct ipa_rc_msg) - 1].rc = rc;
2204a71df50SFrank Blaschka 	while (qeth_ipa_rc_msg[x].rc != rc)
2214a71df50SFrank Blaschka 		x++;
2224a71df50SFrank Blaschka 	return qeth_ipa_rc_msg[x].msg;
2234a71df50SFrank Blaschka }
2244a71df50SFrank Blaschka 
2254a71df50SFrank Blaschka 
2264a71df50SFrank Blaschka struct ipa_cmd_names {
2274a71df50SFrank Blaschka 	enum qeth_ipa_cmds cmd;
2284a71df50SFrank Blaschka 	char *name;
2294a71df50SFrank Blaschka };
2304a71df50SFrank Blaschka 
2314a71df50SFrank Blaschka static struct ipa_cmd_names qeth_ipa_cmd_names[] = {
2324a71df50SFrank Blaschka 	{IPA_CMD_STARTLAN,	"startlan"},
2334a71df50SFrank Blaschka 	{IPA_CMD_STOPLAN,	"stoplan"},
2344a71df50SFrank Blaschka 	{IPA_CMD_SETVMAC,	"setvmac"},
235d11ba0c4SPeter Tiedemann 	{IPA_CMD_DELVMAC,	"delvmac"},
2364a71df50SFrank Blaschka 	{IPA_CMD_SETGMAC,	"setgmac"},
2374a71df50SFrank Blaschka 	{IPA_CMD_DELGMAC,	"delgmac"},
2384a71df50SFrank Blaschka 	{IPA_CMD_SETVLAN,	"setvlan"},
2394a71df50SFrank Blaschka 	{IPA_CMD_DELVLAN,	"delvlan"},
2404a71df50SFrank Blaschka 	{IPA_CMD_SETCCID,	"setccid"},
2414a71df50SFrank Blaschka 	{IPA_CMD_DELCCID,	"delccid"},
2424a71df50SFrank Blaschka 	{IPA_CMD_MODCCID,	"modccid"},
2434a71df50SFrank Blaschka 	{IPA_CMD_SETIP,		"setip"},
2444a71df50SFrank Blaschka 	{IPA_CMD_QIPASSIST,	"qipassist"},
2454a71df50SFrank Blaschka 	{IPA_CMD_SETASSPARMS,	"setassparms"},
2464a71df50SFrank Blaschka 	{IPA_CMD_SETIPM,	"setipm"},
2474a71df50SFrank Blaschka 	{IPA_CMD_DELIPM,	"delipm"},
2484a71df50SFrank Blaschka 	{IPA_CMD_SETRTG,	"setrtg"},
2494a71df50SFrank Blaschka 	{IPA_CMD_DELIP,		"delip"},
2504a71df50SFrank Blaschka 	{IPA_CMD_SETADAPTERPARMS, "setadapterparms"},
2514a71df50SFrank Blaschka 	{IPA_CMD_SET_DIAG_ASS,	"set_diag_ass"},
252b4d72c08SEugene Crosser 	{IPA_CMD_SETBRIDGEPORT,	"set_bridge_port"},
2534a71df50SFrank Blaschka 	{IPA_CMD_CREATE_ADDR,	"create_addr"},
2544a71df50SFrank Blaschka 	{IPA_CMD_DESTROY_ADDR,	"destroy_addr"},
2554a71df50SFrank Blaschka 	{IPA_CMD_REGISTER_LOCAL_ADDR,	"register_local_addr"},
2564a71df50SFrank Blaschka 	{IPA_CMD_UNREGISTER_LOCAL_ADDR,	"unregister_local_addr"},
2579f48b9dbSEugene Crosser 	{IPA_CMD_ADDRESS_CHANGE_NOTIF, "address_change_notification"},
2584a71df50SFrank Blaschka 	{IPA_CMD_UNKNOWN,	"unknown"},
2594a71df50SFrank Blaschka };
2604a71df50SFrank Blaschka 
2614a71df50SFrank Blaschka char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)
2624a71df50SFrank Blaschka {
2634a71df50SFrank Blaschka 	int x = 0;
2644a71df50SFrank Blaschka 	qeth_ipa_cmd_names[
2654a71df50SFrank Blaschka 		sizeof(qeth_ipa_cmd_names) /
2664a71df50SFrank Blaschka 			sizeof(struct ipa_cmd_names)-1].cmd = cmd;
2674a71df50SFrank Blaschka 	while (qeth_ipa_cmd_names[x].cmd != cmd)
2684a71df50SFrank Blaschka 		x++;
2694a71df50SFrank Blaschka 	return qeth_ipa_cmd_names[x].name;
2704a71df50SFrank Blaschka }
271