#include "qeth_l3.h"
#include "qeth_core_offl.h"
-DEFINE_PER_CPU(char[256], qeth_l3_dbf_txt_buf);
-
static int qeth_l3_set_offline(struct ccwgroup_device *);
static int qeth_l3_recover(void *);
static int qeth_l3_stop(struct net_device *);
addr->users += add ? 1 : -1;
if (add && (addr->type == QETH_IP_TYPE_NORMAL) &&
qeth_l3_is_addr_covered_by_ipato(card, addr)) {
- QETH_DBF_TEXT(trace, 2, "tkovaddr");
+ QETH_DBF_TEXT(TRACE, 2, "tkovaddr");
addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG;
}
list_add_tail(&addr->entry, card->ip_tbd_list);
unsigned long flags;
int rc = 0;
- QETH_DBF_TEXT(trace, 4, "delip");
+ QETH_DBF_TEXT(TRACE, 4, "delip");
if (addr->proto == QETH_PROT_IPV4)
- QETH_DBF_HEX(trace, 4, &addr->u.a4.addr, 4);
+ QETH_DBF_HEX(TRACE, 4, &addr->u.a4.addr, 4);
else {
- QETH_DBF_HEX(trace, 4, &addr->u.a6.addr, 8);
- QETH_DBF_HEX(trace, 4, ((char *)&addr->u.a6.addr) + 8, 8);
+ QETH_DBF_HEX(TRACE, 4, &addr->u.a6.addr, 8);
+ QETH_DBF_HEX(TRACE, 4, ((char *)&addr->u.a6.addr) + 8, 8);
}
spin_lock_irqsave(&card->ip_lock, flags);
rc = __qeth_l3_insert_ip_todo(card, addr, 0);
unsigned long flags;
int rc = 0;
- QETH_DBF_TEXT(trace, 4, "addip");
+ QETH_DBF_TEXT(TRACE, 4, "addip");
if (addr->proto == QETH_PROT_IPV4)
- QETH_DBF_HEX(trace, 4, &addr->u.a4.addr, 4);
+ QETH_DBF_HEX(TRACE, 4, &addr->u.a4.addr, 4);
else {
- QETH_DBF_HEX(trace, 4, &addr->u.a6.addr, 8);
- QETH_DBF_HEX(trace, 4, ((char *)&addr->u.a6.addr) + 8, 8);
+ QETH_DBF_HEX(TRACE, 4, &addr->u.a6.addr, 8);
+ QETH_DBF_HEX(TRACE, 4, ((char *)&addr->u.a6.addr) + 8, 8);
}
spin_lock_irqsave(&card->ip_lock, flags);
rc = __qeth_l3_insert_ip_todo(card, addr, 1);
addr = kzalloc(sizeof(struct qeth_ipaddr), GFP_ATOMIC);
if (addr == NULL) {
- PRINT_WARN("Not enough memory to add address\n");
return NULL;
}
addr->type = QETH_IP_TYPE_NORMAL;
struct qeth_ipaddr *iptodo;
unsigned long flags;
- QETH_DBF_TEXT(trace, 4, "delmc");
+ QETH_DBF_TEXT(TRACE, 4, "delmc");
iptodo = qeth_l3_get_addr_buffer(QETH_PROT_IPV4);
if (!iptodo) {
- QETH_DBF_TEXT(trace, 2, "dmcnomem");
+ QETH_DBF_TEXT(TRACE, 2, "dmcnomem");
return;
}
iptodo->type = QETH_IP_TYPE_DEL_ALL_MC;
unsigned long flags;
int rc;
- QETH_DBF_TEXT(trace, 2, "sdiplist");
- QETH_DBF_HEX(trace, 2, &card, sizeof(void *));
+ QETH_DBF_TEXT(TRACE, 2, "sdiplist");
+ QETH_DBF_HEX(TRACE, 2, &card, sizeof(void *));
spin_lock_irqsave(&card->ip_lock, flags);
tbd_list = card->ip_tbd_list;
card->ip_tbd_list = kmalloc(sizeof(struct list_head), GFP_ATOMIC);
if (!card->ip_tbd_list) {
- QETH_DBF_TEXT(trace, 0, "silnomem");
+ QETH_DBF_TEXT(TRACE, 0, "silnomem");
card->ip_tbd_list = tbd_list;
spin_unlock_irqrestore(&card->ip_lock, flags);
return;
spin_unlock_irqrestore(&card->ip_lock, flags);
rc = qeth_l3_register_addr_entry(card, todo);
spin_lock_irqsave(&card->ip_lock, flags);
- if (!rc)
+ if (!rc || (rc == IPA_RC_LAN_OFFLINE))
list_add_tail(&todo->entry, &card->ip_list);
else
kfree(todo);
struct qeth_ipaddr *addr, *tmp;
unsigned long flags;
- QETH_DBF_TEXT(trace, 4, "clearip");
+ QETH_DBF_TEXT(TRACE, 4, "clearip");
spin_lock_irqsave(&card->ip_lock, flags);
/* clear todo list */
list_for_each_entry_safe(addr, tmp, card->ip_tbd_list, entry) {
struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(trace, 4, "setdelmc");
+ QETH_DBF_TEXT(TRACE, 4, "setdelmc");
iob = qeth_get_ipacmd_buffer(card, ipacmd, addr->proto);
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
struct qeth_ipa_cmd *cmd;
__u8 netmask[16];
- QETH_DBF_TEXT(trace, 4, "setdelip");
- QETH_DBF_TEXT_(trace, 4, "flags%02X", flags);
+ QETH_DBF_TEXT(TRACE, 4, "setdelip");
+ QETH_DBF_TEXT_(TRACE, 4, "flags%02X", flags);
iob = qeth_get_ipacmd_buffer(card, ipacmd, addr->proto);
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
struct qeth_ipa_cmd *cmd;
struct qeth_cmd_buffer *iob;
- QETH_DBF_TEXT(trace, 4, "setroutg");
+ QETH_DBF_TEXT(TRACE, 4, "setroutg");
iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETRTG, prot);
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
cmd->data.setrtg.type = (type);
}
}
out_inval:
- PRINT_WARN("Routing type '%s' not supported for interface %s.\n"
- "Router status set to 'no router'.\n",
- ((*type == PRIMARY_ROUTER)? "primary router" :
- (*type == SECONDARY_ROUTER)? "secondary router" :
- (*type == PRIMARY_CONNECTOR)? "primary connector" :
- (*type == SECONDARY_CONNECTOR)? "secondary connector" :
- (*type == MULTICAST_ROUTER)? "multicast router" :
- "unknown"),
- card->dev->name);
*type = NO_ROUTER;
}
{
int rc;
- QETH_DBF_TEXT(trace, 3, "setrtg4");
+ QETH_DBF_TEXT(TRACE, 3, "setrtg4");
qeth_l3_correct_routing_type(card, &card->options.route4.type,
QETH_PROT_IPV4);
QETH_PROT_IPV4);
if (rc) {
card->options.route4.type = NO_ROUTER;
- PRINT_WARN("Error (0x%04x) while setting routing type on %s. "
- "Type set to 'no router'.\n",
- rc, QETH_CARD_IFNAME(card));
+ QETH_DBF_MESSAGE(2, "Error (0x%04x) while setting routing type"
+ " on %s. Type set to 'no router'.\n", rc,
+ QETH_CARD_IFNAME(card));
}
return rc;
}
{
int rc = 0;
- QETH_DBF_TEXT(trace, 3, "setrtg6");
+ QETH_DBF_TEXT(TRACE, 3, "setrtg6");
#ifdef CONFIG_QETH_IPV6
if (!qeth_is_supported(card, IPA_IPV6))
QETH_PROT_IPV6);
if (rc) {
card->options.route6.type = NO_ROUTER;
- PRINT_WARN("Error (0x%04x) while setting routing type on %s. "
- "Type set to 'no router'.\n",
- rc, QETH_CARD_IFNAME(card));
+ QETH_DBF_MESSAGE(2, "Error (0x%04x) while setting routing type"
+ " on %s. Type set to 'no router'.\n", rc,
+ QETH_CARD_IFNAME(card));
}
#endif
return rc;
unsigned long flags;
int rc = 0;
- QETH_DBF_TEXT(trace, 2, "addipato");
+ QETH_DBF_TEXT(TRACE, 2, "addipato");
spin_lock_irqsave(&card->ip_lock, flags);
list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
if (ipatoe->proto != new->proto)
if (!memcmp(ipatoe->addr, new->addr,
(ipatoe->proto == QETH_PROT_IPV4)? 4:16) &&
(ipatoe->mask_bits == new->mask_bits)) {
- PRINT_WARN("ipato entry already exists!\n");
rc = -EEXIST;
break;
}
struct qeth_ipato_entry *ipatoe, *tmp;
unsigned long flags;
- QETH_DBF_TEXT(trace, 2, "delipato");
+ QETH_DBF_TEXT(TRACE, 2, "delipato");
spin_lock_irqsave(&card->ip_lock, flags);
list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
if (ipatoe->proto != proto)
ipaddr = qeth_l3_get_addr_buffer(proto);
if (ipaddr) {
if (proto == QETH_PROT_IPV4) {
- QETH_DBF_TEXT(trace, 2, "addvipa4");
+ QETH_DBF_TEXT(TRACE, 2, "addvipa4");
memcpy(&ipaddr->u.a4.addr, addr, 4);
ipaddr->u.a4.mask = 0;
} else if (proto == QETH_PROT_IPV6) {
- QETH_DBF_TEXT(trace, 2, "addvipa6");
+ QETH_DBF_TEXT(TRACE, 2, "addvipa6");
memcpy(&ipaddr->u.a6.addr, addr, 16);
ipaddr->u.a6.pfxlen = 0;
}
rc = -EEXIST;
spin_unlock_irqrestore(&card->ip_lock, flags);
if (rc) {
- PRINT_WARN("Cannot add VIPA. Address already exists!\n");
return rc;
}
if (!qeth_l3_add_ip(card, ipaddr))
ipaddr = qeth_l3_get_addr_buffer(proto);
if (ipaddr) {
if (proto == QETH_PROT_IPV4) {
- QETH_DBF_TEXT(trace, 2, "delvipa4");
+ QETH_DBF_TEXT(TRACE, 2, "delvipa4");
memcpy(&ipaddr->u.a4.addr, addr, 4);
ipaddr->u.a4.mask = 0;
} else if (proto == QETH_PROT_IPV6) {
- QETH_DBF_TEXT(trace, 2, "delvipa6");
+ QETH_DBF_TEXT(TRACE, 2, "delvipa6");
memcpy(&ipaddr->u.a6.addr, addr, 16);
ipaddr->u.a6.pfxlen = 0;
}
ipaddr = qeth_l3_get_addr_buffer(proto);
if (ipaddr) {
if (proto == QETH_PROT_IPV4) {
- QETH_DBF_TEXT(trace, 2, "addrxip4");
+ QETH_DBF_TEXT(TRACE, 2, "addrxip4");
memcpy(&ipaddr->u.a4.addr, addr, 4);
ipaddr->u.a4.mask = 0;
} else if (proto == QETH_PROT_IPV6) {
- QETH_DBF_TEXT(trace, 2, "addrxip6");
+ QETH_DBF_TEXT(TRACE, 2, "addrxip6");
memcpy(&ipaddr->u.a6.addr, addr, 16);
ipaddr->u.a6.pfxlen = 0;
}
rc = -EEXIST;
spin_unlock_irqrestore(&card->ip_lock, flags);
if (rc) {
- PRINT_WARN("Cannot add RXIP. Address already exists!\n");
return rc;
}
if (!qeth_l3_add_ip(card, ipaddr))
ipaddr = qeth_l3_get_addr_buffer(proto);
if (ipaddr) {
if (proto == QETH_PROT_IPV4) {
- QETH_DBF_TEXT(trace, 2, "addrxip4");
+ QETH_DBF_TEXT(TRACE, 2, "addrxip4");
memcpy(&ipaddr->u.a4.addr, addr, 4);
ipaddr->u.a4.mask = 0;
} else if (proto == QETH_PROT_IPV6) {
- QETH_DBF_TEXT(trace, 2, "addrxip6");
+ QETH_DBF_TEXT(TRACE, 2, "addrxip6");
memcpy(&ipaddr->u.a6.addr, addr, 16);
ipaddr->u.a6.pfxlen = 0;
}
int cnt = 3;
if (addr->proto == QETH_PROT_IPV4) {
- QETH_DBF_TEXT(trace, 2, "setaddr4");
- QETH_DBF_HEX(trace, 3, &addr->u.a4.addr, sizeof(int));
+ QETH_DBF_TEXT(TRACE, 2, "setaddr4");
+ QETH_DBF_HEX(TRACE, 3, &addr->u.a4.addr, sizeof(int));
} else if (addr->proto == QETH_PROT_IPV6) {
- QETH_DBF_TEXT(trace, 2, "setaddr6");
- QETH_DBF_HEX(trace, 3, &addr->u.a6.addr, 8);
- QETH_DBF_HEX(trace, 3, ((char *)&addr->u.a6.addr) + 8, 8);
+ QETH_DBF_TEXT(TRACE, 2, "setaddr6");
+ QETH_DBF_HEX(TRACE, 3, &addr->u.a6.addr, 8);
+ QETH_DBF_HEX(TRACE, 3, ((char *)&addr->u.a6.addr) + 8, 8);
} else {
- QETH_DBF_TEXT(trace, 2, "setaddr?");
- QETH_DBF_HEX(trace, 3, addr, sizeof(struct qeth_ipaddr));
+ QETH_DBF_TEXT(TRACE, 2, "setaddr?");
+ QETH_DBF_HEX(TRACE, 3, addr, sizeof(struct qeth_ipaddr));
}
do {
if (addr->is_multicast)
rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_SETIP,
addr->set_flags);
if (rc)
- QETH_DBF_TEXT(trace, 2, "failed");
+ QETH_DBF_TEXT(TRACE, 2, "failed");
} while ((--cnt > 0) && rc);
if (rc) {
- QETH_DBF_TEXT(trace, 2, "FAILED");
+ QETH_DBF_TEXT(TRACE, 2, "FAILED");
qeth_l3_ipaddr_to_string(addr->proto, (u8 *)&addr->u, buf);
PRINT_WARN("Could not register IP address %s (rc=0x%x/%d)\n",
buf, rc, rc);
int rc = 0;
if (addr->proto == QETH_PROT_IPV4) {
- QETH_DBF_TEXT(trace, 2, "deladdr4");
- QETH_DBF_HEX(trace, 3, &addr->u.a4.addr, sizeof(int));
+ QETH_DBF_TEXT(TRACE, 2, "deladdr4");
+ QETH_DBF_HEX(TRACE, 3, &addr->u.a4.addr, sizeof(int));
} else if (addr->proto == QETH_PROT_IPV6) {
- QETH_DBF_TEXT(trace, 2, "deladdr6");
- QETH_DBF_HEX(trace, 3, &addr->u.a6.addr, 8);
- QETH_DBF_HEX(trace, 3, ((char *)&addr->u.a6.addr) + 8, 8);
+ QETH_DBF_TEXT(TRACE, 2, "deladdr6");
+ QETH_DBF_HEX(TRACE, 3, &addr->u.a6.addr, 8);
+ QETH_DBF_HEX(TRACE, 3, ((char *)&addr->u.a6.addr) + 8, 8);
} else {
- QETH_DBF_TEXT(trace, 2, "deladdr?");
- QETH_DBF_HEX(trace, 3, addr, sizeof(struct qeth_ipaddr));
+ QETH_DBF_TEXT(TRACE, 2, "deladdr?");
+ QETH_DBF_HEX(TRACE, 3, addr, sizeof(struct qeth_ipaddr));
}
if (addr->is_multicast)
rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_DELIPM);
rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_DELIP,
addr->del_flags);
if (rc) {
- QETH_DBF_TEXT(trace, 2, "failed");
+ QETH_DBF_TEXT(TRACE, 2, "failed");
/* TODO: re-activate this warning as soon as we have a
* clean mirco code
qeth_ipaddr_to_string(addr->proto, (u8 *)&addr->u, buf);
struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(trace, 4, "adpmode");
+ QETH_DBF_TEXT(TRACE, 4, "adpmode");
iob = qeth_get_adapter_cmd(card, command,
sizeof(struct qeth_ipacmd_setadpparms));
{
int rc;
- QETH_DBF_TEXT(trace, 4, "adphstr");
+ QETH_DBF_TEXT(TRACE, 4, "adphstr");
if (qeth_adp_supported(card, IPA_SETADP_SET_BROADCAST_MODE)) {
rc = qeth_l3_send_setadp_mode(card,
IPA_SETADP_SET_BROADCAST_MODE,
card->options.broadcast_mode);
if (rc)
- PRINT_WARN("couldn't set broadcast mode on "
+ QETH_DBF_MESSAGE(2, "couldn't set broadcast mode on "
"device %s: x%x\n",
CARD_BUS_ID(card), rc);
rc = qeth_l3_send_setadp_mode(card,
IPA_SETADP_ALTER_MAC_ADDRESS,
card->options.macaddr_mode);
if (rc)
- PRINT_WARN("couldn't set macaddr mode on "
+ QETH_DBF_MESSAGE(2, "couldn't set macaddr mode on "
"device %s: x%x\n", CARD_BUS_ID(card), rc);
return rc;
}
if (card->options.broadcast_mode == QETH_TR_BROADCAST_LOCAL)
- PRINT_WARN("set adapter parameters not available "
+ QETH_DBF_MESSAGE(2, "set adapter parameters not available "
"to set broadcast mode, using ALLRINGS "
"on device %s:\n", CARD_BUS_ID(card));
if (card->options.macaddr_mode == QETH_TR_MACADDR_CANONICAL)
- PRINT_WARN("set adapter parameters not available "
+ QETH_DBF_MESSAGE(2, "set adapter parameters not available "
"to set macaddr mode, using NONCANONICAL "
"on device %s:\n", CARD_BUS_ID(card));
return 0;
{
int rc;
- QETH_DBF_TEXT(setup, 2, "setadprm");
+ QETH_DBF_TEXT(SETUP, 2, "setadprm");
if (!qeth_is_supported(card, IPA_SETADAPTERPARMS)) {
PRINT_WARN("set adapter parameters not supported "
"on device %s.\n",
CARD_BUS_ID(card));
- QETH_DBF_TEXT(setup, 2, " notsupp");
+ QETH_DBF_TEXT(SETUP, 2, " notsupp");
return 0;
}
rc = qeth_query_setadapterparms(card);
{
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(trace, 4, "defadpcb");
+ QETH_DBF_TEXT(TRACE, 4, "defadpcb");
cmd = (struct qeth_ipa_cmd *) data;
if (cmd->hdr.return_code == 0) {
if (cmd->data.setassparms.hdr.assist_no == IPA_INBOUND_CHECKSUM &&
cmd->data.setassparms.hdr.command_code == IPA_CMD_ASS_START) {
card->info.csum_mask = cmd->data.setassparms.data.flags_32bit;
- QETH_DBF_TEXT_(trace, 3, "csum:%d", card->info.csum_mask);
+ QETH_DBF_TEXT_(TRACE, 3, "csum:%d", card->info.csum_mask);
}
return 0;
}
struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(trace, 4, "getasscm");
+ QETH_DBF_TEXT(TRACE, 4, "getasscm");
iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETASSPARMS, prot);
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
int rc;
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(trace, 4, "sendassp");
+ QETH_DBF_TEXT(TRACE, 4, "sendassp");
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
if (len <= sizeof(__u32))
int rc;
struct qeth_cmd_buffer *iob;
- QETH_DBF_TEXT(trace, 4, "simassp6");
+ QETH_DBF_TEXT(TRACE, 4, "simassp6");
iob = qeth_l3_get_setassparms_cmd(card, ipa_func, cmd_code,
0, QETH_PROT_IPV6);
rc = qeth_l3_send_setassparms(card, iob, 0, 0,
int length = 0;
struct qeth_cmd_buffer *iob;
- QETH_DBF_TEXT(trace, 4, "simassp4");
+ QETH_DBF_TEXT(TRACE, 4, "simassp4");
if (data)
length = sizeof(__u32);
iob = qeth_l3_get_setassparms_cmd(card, ipa_func, cmd_code,
{
int rc;
- QETH_DBF_TEXT(trace, 3, "ipaarp");
+ QETH_DBF_TEXT(TRACE, 3, "ipaarp");
if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
PRINT_WARN("ARP processing not supported "
{
int rc;
- QETH_DBF_TEXT(trace, 3, "ipaipfrg");
+ QETH_DBF_TEXT(TRACE, 3, "ipaipfrg");
if (!qeth_is_supported(card, IPA_IP_FRAGMENTATION)) {
PRINT_INFO("Hardware IP fragmentation not supported on %s\n",
{
int rc;
- QETH_DBF_TEXT(trace, 3, "stsrcmac");
+ QETH_DBF_TEXT(TRACE, 3, "stsrcmac");
if (!card->options.fake_ll)
return -EOPNOTSUPP;
{
int rc = 0;
- QETH_DBF_TEXT(trace, 3, "strtvlan");
+ QETH_DBF_TEXT(TRACE, 3, "strtvlan");
if (!qeth_is_supported(card, IPA_FULL_VLAN)) {
PRINT_WARN("VLAN not supported on %s\n",
{
int rc;
- QETH_DBF_TEXT(trace, 3, "stmcast");
+ QETH_DBF_TEXT(TRACE, 3, "stmcast");
if (!qeth_is_supported(card, IPA_MULTICASTING)) {
PRINT_WARN("Multicast not supported on %s\n",
{
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(setup, 2, "qipasscb");
+ QETH_DBF_TEXT(SETUP, 2, "qipasscb");
cmd = (struct qeth_ipa_cmd *) data;
if (cmd->hdr.prot_version == QETH_PROT_IPV4) {
card->options.ipa6.supported_funcs = cmd->hdr.ipa_supported;
card->options.ipa6.enabled_funcs = cmd->hdr.ipa_enabled;
}
- QETH_DBF_TEXT(setup, 2, "suppenbl");
- QETH_DBF_TEXT_(setup, 2, "%x", cmd->hdr.ipa_supported);
- QETH_DBF_TEXT_(setup, 2, "%x", cmd->hdr.ipa_enabled);
+ QETH_DBF_TEXT(SETUP, 2, "suppenbl");
+ QETH_DBF_TEXT_(SETUP, 2, "%x", cmd->hdr.ipa_supported);
+ QETH_DBF_TEXT_(SETUP, 2, "%x", cmd->hdr.ipa_enabled);
return 0;
}
int rc;
struct qeth_cmd_buffer *iob;
- QETH_DBF_TEXT_(setup, 2, "qipassi%i", prot);
+ QETH_DBF_TEXT_(SETUP, 2, "qipassi%i", prot);
iob = qeth_get_ipacmd_buffer(card, IPA_CMD_QIPASSIST, prot);
rc = qeth_send_ipa_cmd(card, iob, qeth_l3_query_ipassists_cb, NULL);
return rc;
{
int rc;
- QETH_DBF_TEXT(trace, 3, "softipv6");
+ QETH_DBF_TEXT(TRACE, 3, "softipv6");
if (card->info.type == QETH_CARD_TYPE_IQD)
goto out;
{
int rc = 0;
- QETH_DBF_TEXT(trace, 3, "strtipv6");
+ QETH_DBF_TEXT(TRACE, 3, "strtipv6");
if (!qeth_is_supported(card, IPA_IPV6)) {
PRINT_WARN("IPv6 not supported on %s\n",
{
int rc;
- QETH_DBF_TEXT(trace, 3, "stbrdcst");
+ QETH_DBF_TEXT(TRACE, 3, "stbrdcst");
card->info.broadcast_capable = 0;
if (!qeth_is_supported(card, IPA_FILTERING)) {
PRINT_WARN("Broadcast not supported on %s\n",
{
int rc = 0;
- QETH_DBF_TEXT(trace, 3, "strtcsum");
+ QETH_DBF_TEXT(TRACE, 3, "strtcsum");
if (card->options.checksum_type == NO_CHECKSUMMING) {
PRINT_WARN("Using no checksumming on %s.\n",
{
int rc;
- QETH_DBF_TEXT(trace, 3, "sttso");
+ QETH_DBF_TEXT(TRACE, 3, "sttso");
if (!qeth_is_supported(card, IPA_OUTBOUND_TSO)) {
PRINT_WARN("Outbound TSO not supported on %s\n",
static int qeth_l3_start_ipassists(struct qeth_card *card)
{
- QETH_DBF_TEXT(trace, 3, "strtipas");
+ QETH_DBF_TEXT(TRACE, 3, "strtipas");
qeth_l3_start_ipa_arp_processing(card); /* go on*/
qeth_l3_start_ipa_ip_fragmentation(card); /* go on*/
qeth_l3_start_ipa_source_mac(card); /* go on*/
struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(trace, 2, "puniqeid");
+ QETH_DBF_TEXT(TRACE, 2, "puniqeid");
if ((card->info.unique_id & UNIQUE_ID_NOT_BY_CARD) ==
UNIQUE_ID_NOT_BY_CARD)
struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(setup, 2, "hsrmac");
+ QETH_DBF_TEXT(SETUP, 2, "hsrmac");
iob = qeth_get_ipacmd_buffer(card, IPA_CMD_CREATE_ADDR,
QETH_PROT_IPV6);
struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
- QETH_DBF_TEXT(setup, 2, "guniqeid");
+ QETH_DBF_TEXT(SETUP, 2, "guniqeid");
if (!qeth_is_supported(card, IPA_IPV6)) {
card->info.unique_id = UNIQUE_ID_IF_CREATE_ADDR_FAILED |
struct ip_mc_list *im4;
char buf[MAX_ADDR_LEN];
- QETH_DBF_TEXT(trace, 4, "addmc");
+ QETH_DBF_TEXT(TRACE, 4, "addmc");
for (im4 = in4_dev->mc_list; im4; im4 = im4->next) {
qeth_l3_get_mac_for_ipm(im4->multiaddr, buf, in4_dev->dev);
ipm = qeth_l3_get_addr_buffer(QETH_PROT_IPV4);
struct vlan_group *vg;
int i;
- QETH_DBF_TEXT(trace, 4, "addmcvl");
+ QETH_DBF_TEXT(TRACE, 4, "addmcvl");
if (!qeth_is_supported(card, IPA_FULL_VLAN) || (card->vlangrp == NULL))
return;
{
struct in_device *in4_dev;
- QETH_DBF_TEXT(trace, 4, "chkmcv4");
+ QETH_DBF_TEXT(TRACE, 4, "chkmcv4");
in4_dev = in_dev_get(card->dev);
if (in4_dev == NULL)
return;
struct ifmcaddr6 *im6;
char buf[MAX_ADDR_LEN];
- QETH_DBF_TEXT(trace, 4, "addmc6");
+ QETH_DBF_TEXT(TRACE, 4, "addmc6");
for (im6 = in6_dev->mc_list; im6 != NULL; im6 = im6->next) {
ndisc_mc_map(&im6->mca_addr, buf, in6_dev->dev, 0);
ipm = qeth_l3_get_addr_buffer(QETH_PROT_IPV6);
struct vlan_group *vg;
int i;
- QETH_DBF_TEXT(trace, 4, "admc6vl");
+ QETH_DBF_TEXT(TRACE, 4, "admc6vl");
if (!qeth_is_supported(card, IPA_FULL_VLAN) || (card->vlangrp == NULL))
return;
{
struct inet6_dev *in6_dev;
- QETH_DBF_TEXT(trace, 4, "chkmcv6");
+ QETH_DBF_TEXT(TRACE, 4, "chkmcv6");
if (!qeth_is_supported(card, IPA_IPV6))
return ;
in6_dev = in6_dev_get(card->dev);
struct in_ifaddr *ifa;
struct qeth_ipaddr *addr;
- QETH_DBF_TEXT(trace, 4, "frvaddr4");
+ QETH_DBF_TEXT(TRACE, 4, "frvaddr4");
in_dev = in_dev_get(vlan_group_get_device(card->vlangrp, vid));
if (!in_dev)
struct inet6_ifaddr *ifa;
struct qeth_ipaddr *addr;
- QETH_DBF_TEXT(trace, 4, "frvaddr6");
+ QETH_DBF_TEXT(TRACE, 4, "frvaddr6");
in6_dev = in6_dev_get(vlan_group_get_device(card->vlangrp, vid));
if (!in6_dev)
struct qeth_card *card = netdev_priv(dev);
unsigned long flags;
- QETH_DBF_TEXT(trace, 4, "vlanreg");
+ QETH_DBF_TEXT(TRACE, 4, "vlanreg");
spin_lock_irqsave(&card->vlanlock, flags);
card->vlangrp = grp;
spin_unlock_irqrestore(&card->vlanlock, flags);
struct qeth_card *card = netdev_priv(dev);
unsigned long flags;
- QETH_DBF_TEXT_(trace, 4, "kid:%d", vid);
+ QETH_DBF_TEXT_(TRACE, 4, "kid:%d", vid);
spin_lock_irqsave(&card->vlanlock, flags);
/* unregister IP addresses of vlan device */
qeth_l3_free_vlan_addresses(card, vid);
break;
default:
dev_kfree_skb_any(skb);
- QETH_DBF_TEXT(trace, 3, "inbunkno");
- QETH_DBF_HEX(control, 3, hdr, QETH_DBF_CONTROL_LEN);
+ QETH_DBF_TEXT(TRACE, 3, "inbunkno");
+ QETH_DBF_HEX(CTRL, 3, hdr, QETH_DBF_CTRL_LEN);
continue;
}
card = netdev_priv(dev);
else if (rc == QETH_VLAN_CARD)
card = netdev_priv(vlan_dev_info(dev)->real_dev);
- if (card->options.layer2)
+ if (card && card->options.layer2)
card = NULL;
- QETH_DBF_TEXT_(trace, 4, "%d", rc);
+ QETH_DBF_TEXT_(TRACE, 4, "%d", rc);
return card ;
}
{
int rc = 0;
- QETH_DBF_TEXT(setup, 2, "stopcard");
- QETH_DBF_HEX(setup, 2, &card, sizeof(void *));
+ QETH_DBF_TEXT(SETUP, 2, "stopcard");
+ QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
qeth_set_allowed_threads(card, 0, 1);
if (qeth_wait_for_threads(card, ~QETH_RECOVER_THREAD))
(card->state == CARD_STATE_UP)) {
if (recovery_mode)
qeth_l3_stop(card->dev);
+ else {
+ rtnl_lock();
+ dev_close(card->dev);
+ rtnl_unlock();
+ }
if (!card->use_hard_stop) {
rc = qeth_send_stoplan(card);
if (rc)
- QETH_DBF_TEXT_(setup, 2, "1err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
}
card->state = CARD_STATE_SOFTSETUP;
}
(card->info.type != QETH_CARD_TYPE_IQD)) {
rc = qeth_l3_put_unique_id(card);
if (rc)
- QETH_DBF_TEXT_(setup, 2, "2err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "2err%d", rc);
}
qeth_qdio_clear_card(card, 0);
qeth_clear_qdio_buffers(card);
{
struct qeth_card *card = netdev_priv(dev);
- QETH_DBF_TEXT(trace, 3, "setmulti");
+ QETH_DBF_TEXT(TRACE, 3, "setmulti");
qeth_l3_delete_mc_addresses(card);
qeth_l3_add_multicast_ipv4(card);
#ifdef CONFIG_QETH_IPV6
int tmp;
int rc;
- QETH_DBF_TEXT(trace, 3, "arpstnoe");
+ QETH_DBF_TEXT(TRACE, 3, "arpstnoe");
/*
* currently GuestLAN only supports the ARP assist function
if (card->info.guestlan)
return -EOPNOTSUPP;
if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
- PRINT_WARN("ARP processing not supported "
- "on %s!\n", QETH_CARD_IFNAME(card));
return -EOPNOTSUPP;
}
rc = qeth_l3_send_simple_setassparms(card, IPA_ARP_PROCESSING,
no_entries);
if (rc) {
tmp = rc;
- PRINT_WARN("Could not set number of ARP entries on %s: "
- "%s (0x%x/%d)\n", QETH_CARD_IFNAME(card),
+ QETH_DBF_MESSAGE(2, "Could not set number of ARP entries on "
+ "%s: %s (0x%x/%d)\n", QETH_CARD_IFNAME(card),
qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
}
return rc;
int uentry_size;
int i;
- QETH_DBF_TEXT(trace, 4, "arpquecb");
+ QETH_DBF_TEXT(TRACE, 4, "arpquecb");
qinfo = (struct qeth_arp_query_info *) reply->param;
cmd = (struct qeth_ipa_cmd *) data;
if (cmd->hdr.return_code) {
- QETH_DBF_TEXT_(trace, 4, "qaer1%i", cmd->hdr.return_code);
+ QETH_DBF_TEXT_(TRACE, 4, "qaer1%i", cmd->hdr.return_code);
return 0;
}
if (cmd->data.setassparms.hdr.return_code) {
cmd->hdr.return_code = cmd->data.setassparms.hdr.return_code;
- QETH_DBF_TEXT_(trace, 4, "qaer2%i", cmd->hdr.return_code);
+ QETH_DBF_TEXT_(TRACE, 4, "qaer2%i", cmd->hdr.return_code);
return 0;
}
qdata = &cmd->data.setassparms.data.query_arp;
/* check if there is enough room in userspace */
if ((qinfo->udata_len - qinfo->udata_offset) <
qdata->no_entries * uentry_size){
- QETH_DBF_TEXT_(trace, 4, "qaer3%i", -ENOMEM);
+ QETH_DBF_TEXT_(TRACE, 4, "qaer3%i", -ENOMEM);
cmd->hdr.return_code = -ENOMEM;
- PRINT_WARN("query ARP user space buffer is too small for "
- "the returned number of ARP entries. "
- "Aborting query!\n");
goto out_error;
}
- QETH_DBF_TEXT_(trace, 4, "anore%i",
+ QETH_DBF_TEXT_(TRACE, 4, "anore%i",
cmd->data.setassparms.hdr.number_of_replies);
- QETH_DBF_TEXT_(trace, 4, "aseqn%i", cmd->data.setassparms.hdr.seq_no);
- QETH_DBF_TEXT_(trace, 4, "anoen%i", qdata->no_entries);
+ QETH_DBF_TEXT_(TRACE, 4, "aseqn%i", cmd->data.setassparms.hdr.seq_no);
+ QETH_DBF_TEXT_(TRACE, 4, "anoen%i", qdata->no_entries);
if (qinfo->mask_bits & QETH_QARP_STRIP_ENTRIES) {
/* strip off "media specific information" */
unsigned long),
void *reply_param)
{
- QETH_DBF_TEXT(trace, 4, "sendarp");
+ QETH_DBF_TEXT(TRACE, 4, "sendarp");
memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE);
memcpy(QETH_IPA_CMD_DEST_ADDR(iob->data),
int tmp;
int rc;
- QETH_DBF_TEXT(trace, 3, "arpquery");
+ QETH_DBF_TEXT(TRACE, 3, "arpquery");
if (!qeth_is_supported(card,/*IPA_QUERY_ARP_ADDR_INFO*/
IPA_ARP_PROCESSING)) {
- PRINT_WARN("ARP processing not supported "
- "on %s!\n", QETH_CARD_IFNAME(card));
return -EOPNOTSUPP;
}
/* get size of userspace buffer and mask_bits -> 6 bytes */
qeth_l3_arp_query_cb, (void *)&qinfo);
if (rc) {
tmp = rc;
- PRINT_WARN("Error while querying ARP cache on %s: %s "
+ QETH_DBF_MESSAGE(2, "Error while querying ARP cache on %s: %s "
"(0x%x/%d)\n", QETH_CARD_IFNAME(card),
qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
if (copy_to_user(udata, qinfo.udata, 4))
int tmp;
int rc;
- QETH_DBF_TEXT(trace, 3, "arpadent");
+ QETH_DBF_TEXT(TRACE, 3, "arpadent");
/*
* currently GuestLAN only supports the ARP assist function
if (card->info.guestlan)
return -EOPNOTSUPP;
if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
- PRINT_WARN("ARP processing not supported "
- "on %s!\n", QETH_CARD_IFNAME(card));
return -EOPNOTSUPP;
}
if (rc) {
tmp = rc;
qeth_l3_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
- PRINT_WARN("Could not add ARP entry for address %s on %s: "
- "%s (0x%x/%d)\n",
- buf, QETH_CARD_IFNAME(card),
- qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
+ QETH_DBF_MESSAGE(2, "Could not add ARP entry for address %s "
+ "on %s: %s (0x%x/%d)\n", buf, QETH_CARD_IFNAME(card),
+ qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
}
return rc;
}
int tmp;
int rc;
- QETH_DBF_TEXT(trace, 3, "arprment");
+ QETH_DBF_TEXT(TRACE, 3, "arprment");
/*
* currently GuestLAN only supports the ARP assist function
if (card->info.guestlan)
return -EOPNOTSUPP;
if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
- PRINT_WARN("ARP processing not supported "
- "on %s!\n", QETH_CARD_IFNAME(card));
return -EOPNOTSUPP;
}
memcpy(buf, entry, 12);
tmp = rc;
memset(buf, 0, 16);
qeth_l3_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
- PRINT_WARN("Could not delete ARP entry for address %s on %s: "
- "%s (0x%x/%d)\n",
- buf, QETH_CARD_IFNAME(card),
- qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
+ QETH_DBF_MESSAGE(2, "Could not delete ARP entry for address %s"
+ " on %s: %s (0x%x/%d)\n", buf, QETH_CARD_IFNAME(card),
+ qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
}
return rc;
}
int rc;
int tmp;
- QETH_DBF_TEXT(trace, 3, "arpflush");
+ QETH_DBF_TEXT(TRACE, 3, "arpflush");
/*
* currently GuestLAN only supports the ARP assist function
if (card->info.guestlan || (card->info.type == QETH_CARD_TYPE_IQD))
return -EOPNOTSUPP;
if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
- PRINT_WARN("ARP processing not supported "
- "on %s!\n", QETH_CARD_IFNAME(card));
return -EOPNOTSUPP;
}
rc = qeth_l3_send_simple_setassparms(card, IPA_ARP_PROCESSING,
IPA_CMD_ASS_ARP_FLUSH_CACHE, 0);
if (rc) {
tmp = rc;
- PRINT_WARN("Could not flush ARP cache on %s: %s (0x%x/%d)\n",
- QETH_CARD_IFNAME(card),
+ QETH_DBF_MESSAGE(2, "Could not flush ARP cache on %s: %s "
+ "(0x%x/%d)\n", QETH_CARD_IFNAME(card),
qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
}
return rc;
rc = -EOPNOTSUPP;
}
if (rc)
- QETH_DBF_TEXT_(trace, 2, "ioce%d", rc);
+ QETH_DBF_TEXT_(TRACE, 2, "ioce%d", rc);
return rc;
}
static void qeth_l3_fill_header(struct qeth_card *card, struct qeth_hdr *hdr,
struct sk_buff *skb, int ipv, int cast_type)
{
- QETH_DBF_TEXT(trace, 6, "fillhdr");
-
memset(hdr, 0, sizeof(struct qeth_hdr));
hdr->hdr.l3.id = QETH_HEADER_TYPE_LAYER3;
hdr->hdr.l3.ext_flags = 0;
* v6 uses passthrough, v4 sets the tag in the QDIO header.
*/
if (card->vlangrp && vlan_tx_tag_present(skb)) {
- hdr->hdr.l3.ext_flags = (ipv == 4) ?
- QETH_HDR_EXT_VLAN_FRAME :
- QETH_HDR_EXT_INCLUDE_VLAN_TAG;
+ if ((ipv == 4) || (card->info.type == QETH_CARD_TYPE_IQD))
+ hdr->hdr.l3.ext_flags = QETH_HDR_EXT_VLAN_FRAME;
+ else
+ hdr->hdr.l3.ext_flags = QETH_HDR_EXT_INCLUDE_VLAN_TAG;
hdr->hdr.l3.vlan_id = vlan_tx_tag_get(skb);
}
enum qeth_large_send_types large_send = QETH_LARGE_SEND_NO;
struct qeth_eddp_context *ctx = NULL;
- QETH_DBF_TEXT(trace, 6, "l3xmit");
-
if ((card->info.type == QETH_CARD_TYPE_IQD) &&
(skb->protocol != htons(ETH_P_IPV6)) &&
(skb->protocol != htons(ETH_P_IP)))
ctx = qeth_eddp_create_context(card, new_skb, hdr,
skb->sk->sk_protocol);
if (ctx == NULL) {
- PRINT_WARN("could not create eddp context\n");
+ QETH_DBF_MESSAGE(2, "could not create eddp context\n");
goto tx_drop;
}
} else {
if ((new_skb != skb) && new_skb)
dev_kfree_skb_any(new_skb);
dev_kfree_skb_any(skb);
+ netif_wake_queue(dev);
return NETDEV_TX_OK;
}
{
struct qeth_card *card = netdev_priv(dev);
- QETH_DBF_TEXT(trace, 4, "qethopen");
+ QETH_DBF_TEXT(TRACE, 4, "qethopen");
if (card->state != CARD_STATE_SOFTSETUP)
return -ENODEV;
card->data.state = CH_STATE_UP;
{
struct qeth_card *card = netdev_priv(dev);
- QETH_DBF_TEXT(trace, 4, "qethstop");
+ QETH_DBF_TEXT(TRACE, 4, "qethstop");
netif_tx_disable(dev);
card->dev->flags &= ~IFF_UP;
if (card->state == CARD_STATE_UP)
.get_ethtool_stats = qeth_core_get_ethtool_stats,
.get_stats_count = qeth_core_get_stats_count,
.get_drvinfo = qeth_core_get_drvinfo,
+ .get_settings = qeth_core_ethtool_get_settings,
};
/*
card->dev->vlan_rx_add_vid = qeth_l3_vlan_rx_add_vid;
card->dev->vlan_rx_kill_vid = qeth_l3_vlan_rx_kill_vid;
card->dev->mtu = card->info.initial_mtu;
+ card->dev->set_mac_address = NULL;
SET_ETHTOOL_OPS(card->dev, &qeth_l3_ethtool_ops);
card->dev->features |= NETIF_F_HW_VLAN_TX |
NETIF_F_HW_VLAN_RX |
int index;
int i;
- QETH_DBF_TEXT(trace, 6, "qdinput");
card = (struct qeth_card *) card_ptr;
net_dev = card->dev;
if (card->options.performance_stats) {
}
if (status & QDIO_STATUS_LOOK_FOR_ERROR) {
if (status & QDIO_STATUS_ACTIVATE_CHECK_CONDITION) {
- QETH_DBF_TEXT(trace, 1, "qdinchk");
- QETH_DBF_TEXT_(trace, 1, "%s", CARD_BUS_ID(card));
- QETH_DBF_TEXT_(trace, 1, "%04X%04X",
+ QETH_DBF_TEXT(TRACE, 1, "qdinchk");
+ QETH_DBF_TEXT_(TRACE, 1, "%s", CARD_BUS_ID(card));
+ QETH_DBF_TEXT_(TRACE, 1, "%04X%04X",
first_element, count);
- QETH_DBF_TEXT_(trace, 1, "%04X%04X", queue, status);
+ QETH_DBF_TEXT_(TRACE, 1, "%04X%04X", queue, status);
qeth_schedule_recovery(card);
return;
}
enum qeth_card_states recover_flag;
BUG_ON(!card);
- QETH_DBF_TEXT(setup, 2, "setonlin");
- QETH_DBF_HEX(setup, 2, &card, sizeof(void *));
+ QETH_DBF_TEXT(SETUP, 2, "setonlin");
+ QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
qeth_set_allowed_threads(card, QETH_RECOVER_THREAD, 1);
if (qeth_wait_for_threads(card, ~QETH_RECOVER_THREAD)) {
recover_flag = card->state;
rc = ccw_device_set_online(CARD_RDEV(card));
if (rc) {
- QETH_DBF_TEXT_(setup, 2, "1err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
return -EIO;
}
rc = ccw_device_set_online(CARD_WDEV(card));
if (rc) {
- QETH_DBF_TEXT_(setup, 2, "1err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
return -EIO;
}
rc = ccw_device_set_online(CARD_DDEV(card));
if (rc) {
- QETH_DBF_TEXT_(setup, 2, "1err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
return -EIO;
}
rc = qeth_core_hardsetup_card(card);
if (rc) {
- QETH_DBF_TEXT_(setup, 2, "2err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "2err%d", rc);
goto out_remove;
}
qeth_print_status_message(card);
/* softsetup */
- QETH_DBF_TEXT(setup, 2, "softsetp");
+ QETH_DBF_TEXT(SETUP, 2, "softsetp");
rc = qeth_send_startlan(card);
if (rc) {
- QETH_DBF_TEXT_(setup, 2, "1err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
if (rc == 0xe080) {
PRINT_WARN("LAN on card %s if offline! "
"Waiting for STARTLAN from card.\n",
rc = qeth_l3_setadapter_parms(card);
if (rc)
- QETH_DBF_TEXT_(setup, 2, "2err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "2err%d", rc);
rc = qeth_l3_start_ipassists(card);
if (rc)
- QETH_DBF_TEXT_(setup, 2, "3err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "3err%d", rc);
rc = qeth_l3_setrouting_v4(card);
if (rc)
- QETH_DBF_TEXT_(setup, 2, "4err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "4err%d", rc);
rc = qeth_l3_setrouting_v6(card);
if (rc)
- QETH_DBF_TEXT_(setup, 2, "5err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "5err%d", rc);
netif_tx_disable(card->dev);
rc = qeth_init_qdio_queues(card);
if (rc) {
- QETH_DBF_TEXT_(setup, 2, "6err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc);
goto out_remove;
}
card->state = CARD_STATE_SOFTSETUP;
netif_carrier_on(card->dev);
qeth_set_allowed_threads(card, 0xffffffff, 0);
- if ((recover_flag == CARD_STATE_RECOVER) && recovery_mode) {
+ if (recover_flag == CARD_STATE_RECOVER) {
+ if (recovery_mode)
qeth_l3_open(card->dev);
- qeth_l3_set_multicast_list(card->dev);
+ else {
+ rtnl_lock();
+ dev_open(card->dev);
+ rtnl_unlock();
+ }
+ qeth_l3_set_multicast_list(card->dev);
}
/* let user_space know that device is online */
kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE);
int rc = 0, rc2 = 0, rc3 = 0;
enum qeth_card_states recover_flag;
- QETH_DBF_TEXT(setup, 3, "setoffl");
- QETH_DBF_HEX(setup, 3, &card, sizeof(void *));
+ QETH_DBF_TEXT(SETUP, 3, "setoffl");
+ QETH_DBF_HEX(SETUP, 3, &card, sizeof(void *));
if (card->dev && netif_carrier_ok(card->dev))
netif_carrier_off(card->dev);
if (!rc)
rc = (rc2) ? rc2 : rc3;
if (rc)
- QETH_DBF_TEXT_(setup, 2, "1err%d", rc);
+ QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
if (recover_flag == CARD_STATE_UP)
card->state = CARD_STATE_RECOVER;
/* let user_space know that device is offline */
int rc = 0;
card = (struct qeth_card *) ptr;
- QETH_DBF_TEXT(trace, 2, "recover1");
- QETH_DBF_HEX(trace, 2, &card, sizeof(void *));
+ QETH_DBF_TEXT(TRACE, 2, "recover1");
+ QETH_DBF_HEX(TRACE, 2, &card, sizeof(void *));
if (!qeth_do_run_thread(card, QETH_RECOVER_THREAD))
return 0;
- QETH_DBF_TEXT(trace, 2, "recover2");
+ QETH_DBF_TEXT(TRACE, 2, "recover2");
PRINT_WARN("Recovery of device %s started ...\n",
CARD_BUS_ID(card));
card->use_hard_stop = 1;
if (dev_net(dev) != &init_net)
return NOTIFY_DONE;
- QETH_DBF_TEXT(trace, 3, "ipevent");
+ QETH_DBF_TEXT(TRACE, 3, "ipevent");
card = qeth_l3_get_card_from_dev(dev);
if (!card)
return NOTIFY_DONE;
struct qeth_ipaddr *addr;
struct qeth_card *card;
- QETH_DBF_TEXT(trace, 3, "ip6event");
+ QETH_DBF_TEXT(TRACE, 3, "ip6event");
card = qeth_l3_get_card_from_dev(dev);
if (!card)
{
int rc;
- QETH_DBF_TEXT(trace, 5, "regnotif");
+ QETH_DBF_TEXT(TRACE, 5, "regnotif");
rc = register_inetaddr_notifier(&qeth_l3_ip_notifier);
if (rc)
return rc;
static void qeth_l3_unregister_notifiers(void)
{
- QETH_DBF_TEXT(trace, 5, "unregnot");
+ QETH_DBF_TEXT(TRACE, 5, "unregnot");
BUG_ON(unregister_inetaddr_notifier(&qeth_l3_ip_notifier));
#ifdef CONFIG_QETH_IPV6
BUG_ON(unregister_inet6addr_notifier(&qeth_l3_ip6_notifier));