Monthly sparse warning avoidance patch. Sigh. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
		
			
				
	
	
		
			269 lines
		
	
	
	
		
			8.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
	
		
			8.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * linux/drivers/s390/net/qeth_mpc.c
 | 
						|
 *
 | 
						|
 * Linux on zSeries OSA Express and HiperSockets support
 | 
						|
 *
 | 
						|
 * Copyright 2000,2003 IBM Corporation
 | 
						|
 * Author(s): Frank Pavlic <fpavlic@de.ibm.com>
 | 
						|
 * 	      Thomas Spatzier <tspat@de.ibm.com>
 | 
						|
 *
 | 
						|
 */
 | 
						|
#include <asm/cio.h>
 | 
						|
#include "qeth_mpc.h"
 | 
						|
 | 
						|
unsigned char IDX_ACTIVATE_READ[]={
 | 
						|
	0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00,
 | 
						|
	0x19,0x01,0x01,0x80, 0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x00,0xc8,0xc1,
 | 
						|
	0xd3,0xd3,0xd6,0xd3, 0xc5,0x40,0x00,0x00,
 | 
						|
	0x00,0x00
 | 
						|
};
 | 
						|
 | 
						|
unsigned char IDX_ACTIVATE_WRITE[]={
 | 
						|
	0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00,
 | 
						|
	0x15,0x01,0x01,0x80, 0x00,0x00,0x00,0x00,
 | 
						|
	0xff,0xff,0x00,0x00, 0x00,0x00,0xc8,0xc1,
 | 
						|
	0xd3,0xd3,0xd6,0xd3, 0xc5,0x40,0x00,0x00,
 | 
						|
	0x00,0x00
 | 
						|
};
 | 
						|
 | 
						|
unsigned char CM_ENABLE[]={
 | 
						|
	0x00,0xe0,0x00,0x00, 0x00,0x00,0x00,0x01,
 | 
						|
	0x00,0x00,0x00,0x14, 0x00,0x00,0x00,0x63,
 | 
						|
	0x10,0x00,0x00,0x01,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x81,0x7e,0x00,0x01, 0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x24,0x00,0x23,
 | 
						|
	0x00,0x00,0x23,0x05, 0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
 | 
						|
	0x01,0x00,0x00,0x23, 0x00,0x00,0x00,0x40,
 | 
						|
	0x00,0x0c,0x41,0x02, 0x00,0x17,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x0b,0x04,0x01,
 | 
						|
	0x7e,0x04,0x05,0x00, 0x01,0x01,0x0f,
 | 
						|
	0x00,
 | 
						|
	0x0c,0x04,0x02,0xff, 0xff,0xff,0xff,0xff,
 | 
						|
	0xff,0xff,0xff
 | 
						|
};
 | 
						|
 | 
						|
unsigned char CM_SETUP[]={
 | 
						|
	0x00,0xe0,0x00,0x00, 0x00,0x00,0x00,0x02,
 | 
						|
	0x00,0x00,0x00,0x14, 0x00,0x00,0x00,0x64,
 | 
						|
	0x10,0x00,0x00,0x01,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x81,0x7e,0x00,0x01, 0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x24,0x00,0x24,
 | 
						|
	0x00,0x00,0x24,0x05, 0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
 | 
						|
	0x01,0x00,0x00,0x24, 0x00,0x00,0x00,0x40,
 | 
						|
	0x00,0x0c,0x41,0x04, 0x00,0x18,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x09,0x04,0x04,
 | 
						|
	0x05,0x00,0x01,0x01, 0x11,
 | 
						|
	0x00,0x09,0x04,
 | 
						|
	0x05,0x05,0x00,0x00, 0x00,0x00,
 | 
						|
	0x00,0x06,
 | 
						|
	0x04,0x06,0xc8,0x00
 | 
						|
};
 | 
						|
 | 
						|
unsigned char ULP_ENABLE[]={
 | 
						|
	0x00,0xe0,0x00,0x00, 0x00,0x00,0x00,0x03,
 | 
						|
	0x00,0x00,0x00,0x14, 0x00,0x00,0x00,0x6b,
 | 
						|
	0x10,0x00,0x00,0x01,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x41,0x7e,0x00,0x01, 0x00,0x00,0x00,0x01,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x24,0x00,0x2b,
 | 
						|
	0x00,0x00,0x2b,0x05, 0x20,0x01,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
 | 
						|
	0x01,0x00,0x00,0x2b, 0x00,0x00,0x00,0x40,
 | 
						|
	0x00,0x0c,0x41,0x02, 0x00,0x1f,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x0b,0x04,0x01,
 | 
						|
	0x03,0x04,0x05,0x00, 0x01,0x01,0x12,
 | 
						|
	0x00,
 | 
						|
	0x14,0x04,0x0a,0x00, 0x20,0x00,0x00,0xff,
 | 
						|
	0xff,0x00,0x08,0xc8, 0xe8,0xc4,0xf1,0xc7,
 | 
						|
	0xf1,0x00,0x00
 | 
						|
};
 | 
						|
 | 
						|
unsigned char ULP_SETUP[]={
 | 
						|
	0x00,0xe0,0x00,0x00, 0x00,0x00,0x00,0x04,
 | 
						|
	0x00,0x00,0x00,0x14, 0x00,0x00,0x00,0x6c,
 | 
						|
	0x10,0x00,0x00,0x01,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x41,0x7e,0x00,0x01, 0x00,0x00,0x00,0x02,
 | 
						|
	0x00,0x00,0x00,0x01, 0x00,0x24,0x00,0x2c,
 | 
						|
	0x00,0x00,0x2c,0x05, 0x20,0x01,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
 | 
						|
	0x01,0x00,0x00,0x2c, 0x00,0x00,0x00,0x40,
 | 
						|
	0x00,0x0c,0x41,0x04, 0x00,0x20,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x09,0x04,0x04,
 | 
						|
	0x05,0x00,0x01,0x01, 0x14,
 | 
						|
	0x00,0x09,0x04,
 | 
						|
	0x05,0x05,0x30,0x01, 0x00,0x00,
 | 
						|
	0x00,0x06,
 | 
						|
	0x04,0x06,0x40,0x00,
 | 
						|
	0x00,0x08,0x04,0x0b,
 | 
						|
	0x00,0x00,0x00,0x00
 | 
						|
};
 | 
						|
 | 
						|
unsigned char DM_ACT[]={
 | 
						|
	0x00,0xe0,0x00,0x00, 0x00,0x00,0x00,0x05,
 | 
						|
	0x00,0x00,0x00,0x14, 0x00,0x00,0x00,0x55,
 | 
						|
	0x10,0x00,0x00,0x01,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x41,0x7e,0x00,0x01, 0x00,0x00,0x00,0x03,
 | 
						|
	0x00,0x00,0x00,0x02, 0x00,0x24,0x00,0x15,
 | 
						|
	0x00,0x00,0x2c,0x05, 0x20,0x01,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
 | 
						|
	0x01,0x00,0x00,0x15, 0x00,0x00,0x00,0x40,
 | 
						|
	0x00,0x0c,0x43,0x60, 0x00,0x09,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x09,0x04,0x04,
 | 
						|
	0x05,0x40,0x01,0x01, 0x00
 | 
						|
};
 | 
						|
 | 
						|
unsigned char IPA_PDU_HEADER[]={
 | 
						|
	0x00,0xe0,0x00,0x00, 0x77,0x77,0x77,0x77,
 | 
						|
	0x00,0x00,0x00,0x14, 0x00,0x00,
 | 
						|
		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd))/256,
 | 
						|
		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd))%256,
 | 
						|
	0x10,0x00,0x00,0x01, 0x00,0x00,0x00,0x00,
 | 
						|
	0xc1,0x03,0x00,0x01, 0x00,0x00,0x00,0x00,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x24,
 | 
						|
		sizeof(struct qeth_ipa_cmd)/256,
 | 
						|
		sizeof(struct qeth_ipa_cmd)%256,
 | 
						|
	0x00,
 | 
						|
		sizeof(struct qeth_ipa_cmd)/256,
 | 
						|
		sizeof(struct qeth_ipa_cmd)%256,
 | 
						|
	0x05,
 | 
						|
	0x77,0x77,0x77,0x77,
 | 
						|
	0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
 | 
						|
	0x01,0x00,
 | 
						|
		sizeof(struct qeth_ipa_cmd)/256,
 | 
						|
		sizeof(struct qeth_ipa_cmd)%256,
 | 
						|
	0x00,0x00,0x00,0x40,
 | 
						|
};
 | 
						|
 | 
						|
unsigned char WRITE_CCW[]={
 | 
						|
	0x01,CCW_FLAG_SLI,0,0,
 | 
						|
	0,0,0,0
 | 
						|
};
 | 
						|
 | 
						|
unsigned char READ_CCW[]={
 | 
						|
	0x02,CCW_FLAG_SLI,0,0,
 | 
						|
	0,0,0,0
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
struct ipa_rc_msg {
 | 
						|
	enum qeth_ipa_return_codes rc;
 | 
						|
	char *msg;
 | 
						|
};
 | 
						|
 | 
						|
static struct ipa_rc_msg qeth_ipa_rc_msg[] = {
 | 
						|
	{IPA_RC_SUCCESS,		"success"},
 | 
						|
	{IPA_RC_NOTSUPP,		"Command not supported"},
 | 
						|
	{IPA_RC_IP_TABLE_FULL,		"Add Addr IP Table Full - ipv6"},
 | 
						|
	{IPA_RC_UNKNOWN_ERROR,		"IPA command failed - reason unknown"},
 | 
						|
	{IPA_RC_UNSUPPORTED_COMMAND,	"Command not supported"},
 | 
						|
	{IPA_RC_DUP_IPV6_REMOTE,"ipv6 address already registered remote"},
 | 
						|
	{IPA_RC_DUP_IPV6_HOME,		"ipv6 address already registered"},
 | 
						|
	{IPA_RC_UNREGISTERED_ADDR,	"Address not registered"},
 | 
						|
	{IPA_RC_NO_ID_AVAILABLE,	"No identifiers available"},
 | 
						|
	{IPA_RC_ID_NOT_FOUND,		"Identifier not found"},
 | 
						|
	{IPA_RC_INVALID_IP_VERSION,	"IP version incorrect"},
 | 
						|
	{IPA_RC_LAN_FRAME_MISMATCH,	"LAN and frame mismatch"},
 | 
						|
	{IPA_RC_L2_UNSUPPORTED_CMD,	"Unsupported layer 2 command"},
 | 
						|
	{IPA_RC_L2_DUP_MAC,		"Duplicate MAC address"},
 | 
						|
	{IPA_RC_L2_ADDR_TABLE_FULL,	"Layer2 address table full"},
 | 
						|
	{IPA_RC_L2_DUP_LAYER3_MAC,	"Duplicate with layer 3 MAC"},
 | 
						|
	{IPA_RC_L2_GMAC_NOT_FOUND,	"GMAC not found"},
 | 
						|
	{IPA_RC_L2_MAC_NOT_FOUND,	"L2 mac address not found"},
 | 
						|
	{IPA_RC_L2_INVALID_VLAN_ID,	"L2 invalid vlan id"},
 | 
						|
	{IPA_RC_L2_DUP_VLAN_ID,		"L2 duplicate vlan id"},
 | 
						|
	{IPA_RC_L2_VLAN_ID_NOT_FOUND,	"L2 vlan id not found"},
 | 
						|
	{IPA_RC_DATA_MISMATCH,		"Data field mismatch (v4/v6 mixed)"},
 | 
						|
	{IPA_RC_INVALID_MTU_SIZE,	"Invalid MTU size"},
 | 
						|
	{IPA_RC_INVALID_LANTYPE,	"Invalid LAN type"},
 | 
						|
	{IPA_RC_INVALID_LANNUM,		"Invalid LAN num"},
 | 
						|
	{IPA_RC_DUPLICATE_IP_ADDRESS,	"Address already registered"},
 | 
						|
	{IPA_RC_IP_ADDR_TABLE_FULL,	"IP address table full"},
 | 
						|
	{IPA_RC_LAN_PORT_STATE_ERROR,	"LAN port state error"},
 | 
						|
	{IPA_RC_SETIP_NO_STARTLAN,	"Setip no startlan received"},
 | 
						|
	{IPA_RC_SETIP_ALREADY_RECEIVED,	"Setip already received"},
 | 
						|
	{IPA_RC_IP_ADDR_ALREADY_USED,	"IP address already in use on LAN"},
 | 
						|
	{IPA_RC_MULTICAST_FULL,		"No task available, multicast full"},
 | 
						|
	{IPA_RC_SETIP_INVALID_VERSION,	"SETIP invalid IP version"},
 | 
						|
	{IPA_RC_UNSUPPORTED_SUBCMD,	"Unsupported assist subcommand"},
 | 
						|
	{IPA_RC_ARP_ASSIST_NO_ENABLE,	"Only partial success, no enable"},
 | 
						|
	{IPA_RC_PRIMARY_ALREADY_DEFINED,"Primary already defined"},
 | 
						|
	{IPA_RC_SECOND_ALREADY_DEFINED,	"Secondary already defined"},
 | 
						|
	{IPA_RC_INVALID_SETRTG_INDICATOR,"Invalid SETRTG indicator"},
 | 
						|
	{IPA_RC_MC_ADDR_ALREADY_DEFINED,"Multicast address already defined"},
 | 
						|
	{IPA_RC_LAN_OFFLINE,		"STRTLAN_LAN_DISABLED - LAN offline"},
 | 
						|
	{IPA_RC_INVALID_IP_VERSION2,	"Invalid IP version"},
 | 
						|
	{IPA_RC_FFFF,			"Unknown Error"}
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
char *
 | 
						|
qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)
 | 
						|
{
 | 
						|
	int x = 0;
 | 
						|
	qeth_ipa_rc_msg[sizeof(qeth_ipa_rc_msg) /
 | 
						|
			sizeof(struct ipa_rc_msg) - 1].rc = rc;
 | 
						|
	while(qeth_ipa_rc_msg[x].rc != rc)
 | 
						|
		x++;
 | 
						|
	return qeth_ipa_rc_msg[x].msg;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
struct ipa_cmd_names {
 | 
						|
	enum qeth_ipa_cmds cmd;
 | 
						|
	char *name;
 | 
						|
};
 | 
						|
 | 
						|
static struct ipa_cmd_names qeth_ipa_cmd_names[] = {
 | 
						|
	{IPA_CMD_STARTLAN,	"startlan"},
 | 
						|
	{IPA_CMD_STOPLAN,	"stoplan"},
 | 
						|
	{IPA_CMD_SETVMAC,	"setvmac"},
 | 
						|
	{IPA_CMD_DELVMAC,	"delvmca"},
 | 
						|
	{IPA_CMD_SETGMAC,	"setgmac"},
 | 
						|
	{IPA_CMD_DELGMAC,	"delgmac"},
 | 
						|
	{IPA_CMD_SETVLAN,	"setvlan"},
 | 
						|
	{IPA_CMD_DELVLAN,	"delvlan"},
 | 
						|
	{IPA_CMD_SETCCID,	"setccid"},
 | 
						|
	{IPA_CMD_DELCCID,	"delccid"},
 | 
						|
	{IPA_CMD_MODCCID,	"setip"},
 | 
						|
	{IPA_CMD_SETIP,		"setip"},
 | 
						|
	{IPA_CMD_QIPASSIST,	"qipassist"},
 | 
						|
	{IPA_CMD_SETASSPARMS,	"setassparms"},
 | 
						|
	{IPA_CMD_SETIPM,	"setipm"},
 | 
						|
	{IPA_CMD_DELIPM,	"delipm"},
 | 
						|
	{IPA_CMD_SETRTG,	"setrtg"},
 | 
						|
	{IPA_CMD_DELIP,		"delip"},
 | 
						|
	{IPA_CMD_SETADAPTERPARMS, "setadapterparms"},
 | 
						|
	{IPA_CMD_SET_DIAG_ASS,	"set_diag_ass"},
 | 
						|
	{IPA_CMD_CREATE_ADDR,	"create_addr"},
 | 
						|
	{IPA_CMD_DESTROY_ADDR,	"destroy_addr"},
 | 
						|
	{IPA_CMD_REGISTER_LOCAL_ADDR,	"register_local_addr"},
 | 
						|
	{IPA_CMD_UNREGISTER_LOCAL_ADDR,	"unregister_local_addr"},
 | 
						|
	{IPA_CMD_UNKNOWN,	"unknown"},
 | 
						|
};
 | 
						|
 | 
						|
char *
 | 
						|
qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)
 | 
						|
{
 | 
						|
	int x = 0;
 | 
						|
	qeth_ipa_cmd_names[
 | 
						|
		sizeof(qeth_ipa_cmd_names)/
 | 
						|
			sizeof(struct ipa_cmd_names)-1].cmd = cmd;
 | 
						|
	while(qeth_ipa_cmd_names[x].cmd != cmd)
 | 
						|
		x++;
 | 
						|
	return qeth_ipa_cmd_names[x].name;
 | 
						|
}
 | 
						|
 | 
						|
 |