xref: /openbmc/linux/drivers/s390/net/qeth_core_mpc.c (revision 2d921c32)
14a71df50SFrank Blaschka /*
24a71df50SFrank Blaschka  *  drivers/s390/net/qeth_core_mpc.c
34a71df50SFrank Blaschka  *
44a71df50SFrank Blaschka  *    Copyright IBM Corp. 2007
54a71df50SFrank Blaschka  *    Author(s): Frank Pavlic <fpavlic@de.ibm.com>,
64a71df50SFrank Blaschka  *		 Thomas Spatzier <tspat@de.ibm.com>,
74a71df50SFrank Blaschka  *		 Frank Blaschka <frank.blaschka@de.ibm.com>
84a71df50SFrank Blaschka  */
94a71df50SFrank Blaschka 
104a71df50SFrank Blaschka #include <linux/module.h>
114a71df50SFrank Blaschka #include <asm/cio.h>
124a71df50SFrank Blaschka #include "qeth_core_mpc.h"
134a71df50SFrank Blaschka 
144a71df50SFrank Blaschka unsigned char IDX_ACTIVATE_READ[] = {
154a71df50SFrank Blaschka 	0x00, 0x00, 0x80, 0x00,  0x00, 0x00, 0x00, 0x00,
164a71df50SFrank Blaschka 	0x19, 0x01, 0x01, 0x80,  0x00, 0x00, 0x00, 0x00,
174a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0xc8, 0xc1,
184a71df50SFrank Blaschka 	0xd3, 0xd3, 0xd6, 0xd3,  0xc5, 0x40, 0x00, 0x00,
194a71df50SFrank Blaschka 	0x00, 0x00
204a71df50SFrank Blaschka };
214a71df50SFrank Blaschka 
224a71df50SFrank Blaschka unsigned char IDX_ACTIVATE_WRITE[] = {
234a71df50SFrank Blaschka 	0x00, 0x00, 0x80, 0x00,  0x00, 0x00, 0x00, 0x00,
244a71df50SFrank Blaschka 	0x15, 0x01, 0x01, 0x80,  0x00, 0x00, 0x00, 0x00,
254a71df50SFrank Blaschka 	0xff, 0xff, 0x00, 0x00,  0x00, 0x00, 0xc8, 0xc1,
264a71df50SFrank Blaschka 	0xd3, 0xd3, 0xd6, 0xd3,  0xc5, 0x40, 0x00, 0x00,
274a71df50SFrank Blaschka 	0x00, 0x00
284a71df50SFrank Blaschka };
294a71df50SFrank Blaschka 
304a71df50SFrank Blaschka unsigned char CM_ENABLE[] = {
314a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x01,
324a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x63,
334a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
344a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
354a71df50SFrank Blaschka 	0x81, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
364a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x23,
374a71df50SFrank Blaschka 	0x00, 0x00, 0x23, 0x05,  0x00, 0x00, 0x00, 0x00,
384a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
394a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x23,  0x00, 0x00, 0x00, 0x40,
404a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x02,  0x00, 0x17, 0x00, 0x00,
414a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
424a71df50SFrank Blaschka 	0x00, 0x0b, 0x04, 0x01,
434a71df50SFrank Blaschka 	0x7e, 0x04, 0x05, 0x00,  0x01, 0x01, 0x0f,
444a71df50SFrank Blaschka 	0x00,
454a71df50SFrank Blaschka 	0x0c, 0x04, 0x02, 0xff,  0xff, 0xff, 0xff, 0xff,
464a71df50SFrank Blaschka 	0xff, 0xff, 0xff
474a71df50SFrank Blaschka };
484a71df50SFrank Blaschka 
494a71df50SFrank Blaschka unsigned char CM_SETUP[] = {
504a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x02,
514a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x64,
524a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
534a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
544a71df50SFrank Blaschka 	0x81, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
554a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x24,
564a71df50SFrank Blaschka 	0x00, 0x00, 0x24, 0x05,  0x00, 0x00, 0x00, 0x00,
574a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
584a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x24,  0x00, 0x00, 0x00, 0x40,
594a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x04,  0x00, 0x18, 0x00, 0x00,
604a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
614a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
624a71df50SFrank Blaschka 	0x05, 0x00, 0x01, 0x01,  0x11,
634a71df50SFrank Blaschka 	0x00, 0x09, 0x04,
644a71df50SFrank Blaschka 	0x05, 0x05, 0x00, 0x00,  0x00, 0x00,
654a71df50SFrank Blaschka 	0x00, 0x06,
664a71df50SFrank Blaschka 	0x04, 0x06, 0xc8, 0x00
674a71df50SFrank Blaschka };
684a71df50SFrank Blaschka 
694a71df50SFrank Blaschka unsigned char ULP_ENABLE[] = {
704a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x03,
714a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x6b,
724a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
734a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
744a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x01,
754a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24, 0x00, 0x2b,
764a71df50SFrank Blaschka 	0x00, 0x00, 0x2b, 0x05,  0x20, 0x01, 0x00, 0x00,
774a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
784a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x2b,  0x00, 0x00, 0x00, 0x40,
794a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x02,  0x00, 0x1f, 0x00, 0x00,
804a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
814a71df50SFrank Blaschka 	0x00, 0x0b, 0x04, 0x01,
824a71df50SFrank Blaschka 	0x03, 0x04, 0x05, 0x00,  0x01, 0x01, 0x12,
834a71df50SFrank Blaschka 	0x00,
844a71df50SFrank Blaschka 	0x14, 0x04, 0x0a, 0x00,  0x20, 0x00, 0x00, 0xff,
854a71df50SFrank Blaschka 	0xff, 0x00, 0x08, 0xc8,  0xe8, 0xc4, 0xf1, 0xc7,
864a71df50SFrank Blaschka 	0xf1, 0x00, 0x00
874a71df50SFrank Blaschka };
884a71df50SFrank Blaschka 
894a71df50SFrank Blaschka unsigned char ULP_SETUP[] = {
904a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x04,
914a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x6c,
924a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
934a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
944a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x02,
954a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x01,  0x00, 0x24, 0x00, 0x2c,
964a71df50SFrank Blaschka 	0x00, 0x00, 0x2c, 0x05,  0x20, 0x01, 0x00, 0x00,
974a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
984a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x2c,  0x00, 0x00, 0x00, 0x40,
994a71df50SFrank Blaschka 	0x00, 0x0c, 0x41, 0x04,  0x00, 0x20, 0x00, 0x00,
1004a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
1014a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
1024a71df50SFrank Blaschka 	0x05, 0x00, 0x01, 0x01,  0x14,
1034a71df50SFrank Blaschka 	0x00, 0x09, 0x04,
1044a71df50SFrank Blaschka 	0x05, 0x05, 0x30, 0x01,  0x00, 0x00,
1054a71df50SFrank Blaschka 	0x00, 0x06,
1064a71df50SFrank Blaschka 	0x04, 0x06, 0x40, 0x00,
1074a71df50SFrank Blaschka 	0x00, 0x08, 0x04, 0x0b,
1084a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00
1094a71df50SFrank Blaschka };
1104a71df50SFrank Blaschka 
1114a71df50SFrank Blaschka unsigned char DM_ACT[] = {
1124a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x00, 0x00, 0x00, 0x05,
1134a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00, 0x00, 0x55,
1144a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,
1154a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
1164a71df50SFrank Blaschka 	0x41, 0x7e, 0x00, 0x01,  0x00, 0x00, 0x00, 0x03,
1174a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x02,  0x00, 0x24, 0x00, 0x15,
1184a71df50SFrank Blaschka 	0x00, 0x00, 0x2c, 0x05,  0x20, 0x01, 0x00, 0x00,
1194a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
1204a71df50SFrank Blaschka 	0x01, 0x00, 0x00, 0x15,  0x00, 0x00, 0x00, 0x40,
1214a71df50SFrank Blaschka 	0x00, 0x0c, 0x43, 0x60,  0x00, 0x09, 0x00, 0x00,
1224a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,
1234a71df50SFrank Blaschka 	0x00, 0x09, 0x04, 0x04,
1244a71df50SFrank Blaschka 	0x05, 0x40, 0x01, 0x01,  0x00
1254a71df50SFrank Blaschka };
1264a71df50SFrank Blaschka 
1274a71df50SFrank Blaschka unsigned char IPA_PDU_HEADER[] = {
1284a71df50SFrank Blaschka 	0x00, 0xe0, 0x00, 0x00,  0x77, 0x77, 0x77, 0x77,
1294a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x14,  0x00, 0x00,
1304a71df50SFrank Blaschka 		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd)) / 256,
1314a71df50SFrank Blaschka 		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd)) % 256,
1324a71df50SFrank Blaschka 	0x10, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
1334a71df50SFrank Blaschka 	0xc1, 0x03, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
1344a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x24,
1354a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1364a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1374a71df50SFrank Blaschka 	0x00,
1384a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1394a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1404a71df50SFrank Blaschka 	0x05,
1414a71df50SFrank Blaschka 	0x77, 0x77, 0x77, 0x77,
1424a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
1434a71df50SFrank Blaschka 	0x01, 0x00,
1444a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) / 256,
1454a71df50SFrank Blaschka 		sizeof(struct qeth_ipa_cmd) % 256,
1464a71df50SFrank Blaschka 	0x00, 0x00, 0x00, 0x40,
1474a71df50SFrank Blaschka };
1484a71df50SFrank Blaschka EXPORT_SYMBOL_GPL(IPA_PDU_HEADER);
1494a71df50SFrank Blaschka 
1504a71df50SFrank Blaschka unsigned char WRITE_CCW[] = {
1514a71df50SFrank Blaschka 	0x01, CCW_FLAG_SLI, 0, 0,
1524a71df50SFrank Blaschka 	0, 0, 0, 0
1534a71df50SFrank Blaschka };
1544a71df50SFrank Blaschka 
1554a71df50SFrank Blaschka unsigned char READ_CCW[] = {
1564a71df50SFrank Blaschka 	0x02, CCW_FLAG_SLI, 0, 0,
1574a71df50SFrank Blaschka 	0, 0, 0, 0
1584a71df50SFrank Blaschka };
1594a71df50SFrank Blaschka 
1604a71df50SFrank Blaschka 
1614a71df50SFrank Blaschka struct ipa_rc_msg {
1624a71df50SFrank Blaschka 	enum qeth_ipa_return_codes rc;
1634a71df50SFrank Blaschka 	char *msg;
1644a71df50SFrank Blaschka };
1654a71df50SFrank Blaschka 
1664a71df50SFrank Blaschka static struct ipa_rc_msg qeth_ipa_rc_msg[] = {
1674a71df50SFrank Blaschka 	{IPA_RC_SUCCESS,		"success"},
1684a71df50SFrank Blaschka 	{IPA_RC_NOTSUPP,		"Command not supported"},
1694a71df50SFrank Blaschka 	{IPA_RC_IP_TABLE_FULL,		"Add Addr IP Table Full - ipv6"},
1704a71df50SFrank Blaschka 	{IPA_RC_UNKNOWN_ERROR,		"IPA command failed - reason unknown"},
1714a71df50SFrank Blaschka 	{IPA_RC_UNSUPPORTED_COMMAND,	"Command not supported"},
1724a71df50SFrank Blaschka 	{IPA_RC_DUP_IPV6_REMOTE, "ipv6 address already registered remote"},
1734a71df50SFrank Blaschka 	{IPA_RC_DUP_IPV6_HOME,		"ipv6 address already registered"},
1744a71df50SFrank Blaschka 	{IPA_RC_UNREGISTERED_ADDR,	"Address not registered"},
1754a71df50SFrank Blaschka 	{IPA_RC_NO_ID_AVAILABLE,	"No identifiers available"},
1764a71df50SFrank Blaschka 	{IPA_RC_ID_NOT_FOUND,		"Identifier not found"},
1774a71df50SFrank Blaschka 	{IPA_RC_INVALID_IP_VERSION,	"IP version incorrect"},
1784a71df50SFrank Blaschka 	{IPA_RC_LAN_FRAME_MISMATCH,	"LAN and frame mismatch"},
1794a71df50SFrank Blaschka 	{IPA_RC_L2_UNSUPPORTED_CMD,	"Unsupported layer 2 command"},
1804a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_MAC,		"Duplicate MAC address"},
1814a71df50SFrank Blaschka 	{IPA_RC_L2_ADDR_TABLE_FULL,	"Layer2 address table full"},
1824a71df50SFrank Blaschka 	{IPA_RC_L2_DUP_LAYER3_MAC,	"Duplicate with layer 3 MAC"},
1834a71df50SFrank Blaschka 	{IPA_RC_L2_GMAC_NOT_FOUND,	"GMAC not found"},
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"},
2074a71df50SFrank Blaschka 	{IPA_RC_INVALID_IP_VERSION2,	"Invalid IP version"},
2084a71df50SFrank Blaschka 	{IPA_RC_FFFF,			"Unknown Error"}
2094a71df50SFrank Blaschka };
2104a71df50SFrank Blaschka 
2114a71df50SFrank Blaschka 
2124a71df50SFrank Blaschka 
2134a71df50SFrank Blaschka char *qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)
2144a71df50SFrank Blaschka {
2154a71df50SFrank Blaschka 	int x = 0;
2164a71df50SFrank Blaschka 	qeth_ipa_rc_msg[sizeof(qeth_ipa_rc_msg) /
2174a71df50SFrank Blaschka 			sizeof(struct ipa_rc_msg) - 1].rc = rc;
2184a71df50SFrank Blaschka 	while (qeth_ipa_rc_msg[x].rc != rc)
2194a71df50SFrank Blaschka 		x++;
2204a71df50SFrank Blaschka 	return qeth_ipa_rc_msg[x].msg;
2214a71df50SFrank Blaschka }
2224a71df50SFrank Blaschka 
2234a71df50SFrank Blaschka 
2244a71df50SFrank Blaschka struct ipa_cmd_names {
2254a71df50SFrank Blaschka 	enum qeth_ipa_cmds cmd;
2264a71df50SFrank Blaschka 	char *name;
2274a71df50SFrank Blaschka };
2284a71df50SFrank Blaschka 
2294a71df50SFrank Blaschka static struct ipa_cmd_names qeth_ipa_cmd_names[] = {
2304a71df50SFrank Blaschka 	{IPA_CMD_STARTLAN,	"startlan"},
2314a71df50SFrank Blaschka 	{IPA_CMD_STOPLAN,	"stoplan"},
2324a71df50SFrank Blaschka 	{IPA_CMD_SETVMAC,	"setvmac"},
2334a71df50SFrank Blaschka 	{IPA_CMD_DELVMAC,	"delvmca"},
2344a71df50SFrank Blaschka 	{IPA_CMD_SETGMAC,	"setgmac"},
2354a71df50SFrank Blaschka 	{IPA_CMD_DELGMAC,	"delgmac"},
2364a71df50SFrank Blaschka 	{IPA_CMD_SETVLAN,	"setvlan"},
2374a71df50SFrank Blaschka 	{IPA_CMD_DELVLAN,	"delvlan"},
2384a71df50SFrank Blaschka 	{IPA_CMD_SETCCID,	"setccid"},
2394a71df50SFrank Blaschka 	{IPA_CMD_DELCCID,	"delccid"},
2404a71df50SFrank Blaschka 	{IPA_CMD_MODCCID,	"modccid"},
2414a71df50SFrank Blaschka 	{IPA_CMD_SETIP,		"setip"},
2424a71df50SFrank Blaschka 	{IPA_CMD_QIPASSIST,	"qipassist"},
2434a71df50SFrank Blaschka 	{IPA_CMD_SETASSPARMS,	"setassparms"},
2444a71df50SFrank Blaschka 	{IPA_CMD_SETIPM,	"setipm"},
2454a71df50SFrank Blaschka 	{IPA_CMD_DELIPM,	"delipm"},
2464a71df50SFrank Blaschka 	{IPA_CMD_SETRTG,	"setrtg"},
2474a71df50SFrank Blaschka 	{IPA_CMD_DELIP,		"delip"},
2484a71df50SFrank Blaschka 	{IPA_CMD_SETADAPTERPARMS, "setadapterparms"},
2494a71df50SFrank Blaschka 	{IPA_CMD_SET_DIAG_ASS,	"set_diag_ass"},
2504a71df50SFrank Blaschka 	{IPA_CMD_CREATE_ADDR,	"create_addr"},
2514a71df50SFrank Blaschka 	{IPA_CMD_DESTROY_ADDR,	"destroy_addr"},
2524a71df50SFrank Blaschka 	{IPA_CMD_REGISTER_LOCAL_ADDR,	"register_local_addr"},
2534a71df50SFrank Blaschka 	{IPA_CMD_UNREGISTER_LOCAL_ADDR,	"unregister_local_addr"},
2544a71df50SFrank Blaschka 	{IPA_CMD_UNKNOWN,	"unknown"},
2554a71df50SFrank Blaschka };
2564a71df50SFrank Blaschka 
2574a71df50SFrank Blaschka char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)
2584a71df50SFrank Blaschka {
2594a71df50SFrank Blaschka 	int x = 0;
2604a71df50SFrank Blaschka 	qeth_ipa_cmd_names[
2614a71df50SFrank Blaschka 		sizeof(qeth_ipa_cmd_names) /
2624a71df50SFrank Blaschka 			sizeof(struct ipa_cmd_names)-1].cmd = cmd;
2634a71df50SFrank Blaschka 	while (qeth_ipa_cmd_names[x].cmd != cmd)
2644a71df50SFrank Blaschka 		x++;
2654a71df50SFrank Blaschka 	return qeth_ipa_cmd_names[x].name;
2664a71df50SFrank Blaschka }
267