From patchwork Mon Oct 12 14:06:01 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike McCormack X-Patchwork-Id: 35761 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id C8446B7B81 for ; Tue, 13 Oct 2009 01:09:35 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756024AbZJLOH3 (ORCPT ); Mon, 12 Oct 2009 10:07:29 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755830AbZJLOH3 (ORCPT ); Mon, 12 Oct 2009 10:07:29 -0400 Received: from mail-pz0-f188.google.com ([209.85.222.188]:46498 "EHLO mail-pz0-f188.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755590AbZJLOH2 (ORCPT ); Mon, 12 Oct 2009 10:07:28 -0400 Received: by pzk26 with SMTP id 26so8093642pzk.4 for ; Mon, 12 Oct 2009 07:06:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:message-id:date:from :user-agent:mime-version:to:cc:subject:content-type :content-transfer-encoding; bh=OI99SyYwwfqQ31iv1i9CR9UhNBJ/MUECMcooheXScpU=; b=FrppMowbF0FoE4rFMDjrrxDswgZFqwccv/8T/JywVeath+F6bIhmOEgDscY/4lcW4H wJZfrW+pawKDZC3RRN+js007r++02+5vBni1r+/aK+QW7111dxpQM56XUVRGHWdlx4qL FrWWPahqn8QLvGW1Ou5uYWAbsYDsyiIYjWz0s= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:message-id:date:from:user-agent:mime-version:to:cc:subject :content-type:content-transfer-encoding; b=hSiRmPpHDfW2QRFzl58o05BxK3z2RkpRMntDivLD9TEVi0k47LDmScdQxtUh/j+B/S sRWnUtfHjrh+62pFY65OTrC/vYnci+0aII4np8Uqgi2lnzQc5ukkpLYvHfzFFoSQ9mIa AnVqb2UInp2EVi/8076WMcMpDjSJ1Sth0tKSA= Received: by 10.114.50.17 with SMTP id x17mr10021905wax.168.1255356411889; Mon, 12 Oct 2009 07:06:51 -0700 (PDT) Received: from ?192.168.0.100? ([121.168.21.96]) by mx.google.com with ESMTPS id 23sm996440pzk.0.2009.10.12.07.06.49 (version=SSLv3 cipher=RC4-MD5); Mon, 12 Oct 2009 07:06:50 -0700 (PDT) Message-ID: <4AD337C9.3090105@ring3k.org> Date: Mon, 12 Oct 2009 23:06:01 +0900 From: Mike McCormack User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090706) MIME-Version: 1.0 To: Stephen Hemminger CC: netdev@vger.kernel.org Subject: [PATCH 1/3] sky2: Refactor sky2_get_regs into two functions Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Separate code deciding which registers can be accessed out of sky2_get_regs in preparation for adding more conditions into it. Signed-off-by: Mike McCormack --- drivers/net/sky2.c | 94 ++++++++++++++++++++++++++------------------------- 1 files changed, 48 insertions(+), 46 deletions(-) diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 2ab5c39..9713527 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -3730,6 +3730,50 @@ static int sky2_get_regs_len(struct net_device *dev) return 0x4000; } +static int sky2_reg_access_ok(struct sky2_hw *hw, unsigned int b) +{ + /* This complicated switch statement is to make sure and + * only access regions that are unreserved. + * Some blocks are only valid on dual port cards. + */ + switch (b) { + /* second port */ + case 5: /* Tx Arbiter 2 */ + case 9: /* RX2 */ + case 14 ... 15: /* TX2 */ + case 17: case 19: /* Ram Buffer 2 */ + case 22 ... 23: /* Tx Ram Buffer 2 */ + case 25: /* Rx MAC Fifo 1 */ + case 27: /* Tx MAC Fifo 2 */ + case 31: /* GPHY 2 */ + case 40 ... 47: /* Pattern Ram 2 */ + case 52: case 54: /* TCP Segmentation 2 */ + case 112 ... 116: /* GMAC 2 */ + return hw->ports > 1; + + case 0: /* Control */ + case 2: /* Mac address */ + case 4: /* Tx Arbiter 1 */ + case 7: /* PCI express reg */ + case 8: /* RX1 */ + case 12 ... 13: /* TX1 */ + case 16: case 18:/* Rx Ram Buffer 1 */ + case 20 ... 21: /* Tx Ram Buffer 1 */ + case 24: /* Rx MAC Fifo 1 */ + case 26: /* Tx MAC Fifo 1 */ + case 28 ... 29: /* Descriptor and status unit */ + case 30: /* GPHY 1*/ + case 32 ... 39: /* Pattern Ram 1 */ + case 48: case 50: /* TCP Segmentation 1 */ + case 56 ... 60: /* PCI space */ + case 80 ... 84: /* GMAC 1 */ + return 1; + + default: + return 0; + } +} + /* * Returns copy of control register region * Note: ethtool_get_regs always provides full size (16k) buffer @@ -3744,55 +3788,13 @@ static void sky2_get_regs(struct net_device *dev, struct ethtool_regs *regs, regs->version = 1; for (b = 0; b < 128; b++) { - /* This complicated switch statement is to make sure and - * only access regions that are unreserved. - * Some blocks are only valid on dual port cards. - * and block 3 has some special diagnostic registers that - * are poison. - */ - switch (b) { - case 3: - /* skip diagnostic ram region */ + /* skip poisonous diagnostic ram region in block 3 */ + if (b == 3) memcpy_fromio(p + 0x10, io + 0x10, 128 - 0x10); - break; - - /* dual port cards only */ - case 5: /* Tx Arbiter 2 */ - case 9: /* RX2 */ - case 14 ... 15: /* TX2 */ - case 17: case 19: /* Ram Buffer 2 */ - case 22 ... 23: /* Tx Ram Buffer 2 */ - case 25: /* Rx MAC Fifo 1 */ - case 27: /* Tx MAC Fifo 2 */ - case 31: /* GPHY 2 */ - case 40 ... 47: /* Pattern Ram 2 */ - case 52: case 54: /* TCP Segmentation 2 */ - case 112 ... 116: /* GMAC 2 */ - if (sky2->hw->ports == 1) - goto reserved; - /* fall through */ - case 0: /* Control */ - case 2: /* Mac address */ - case 4: /* Tx Arbiter 1 */ - case 7: /* PCI express reg */ - case 8: /* RX1 */ - case 12 ... 13: /* TX1 */ - case 16: case 18:/* Rx Ram Buffer 1 */ - case 20 ... 21: /* Tx Ram Buffer 1 */ - case 24: /* Rx MAC Fifo 1 */ - case 26: /* Tx MAC Fifo 1 */ - case 28 ... 29: /* Descriptor and status unit */ - case 30: /* GPHY 1*/ - case 32 ... 39: /* Pattern Ram 1 */ - case 48: case 50: /* TCP Segmentation 1 */ - case 56 ... 60: /* PCI space */ - case 80 ... 84: /* GMAC 1 */ + else if (sky2_reg_access_ok(sky2->hw, b)) memcpy_fromio(p, io, 128); - break; - default: -reserved: + else memset(p, 0, 128); - } p += 128; io += 128;