From patchwork Tue Jul 23 08:51:05 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Wu X-Patchwork-Id: 260986 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.180.67]) by ozlabs.org (Postfix) with ESMTP id B4E2E2C0040 for ; Tue, 23 Jul 2013 18:54:29 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755964Ab3GWIyW (ORCPT ); Tue, 23 Jul 2013 04:54:22 -0400 Received: from mail-ea0-f174.google.com ([209.85.215.174]:63858 "EHLO mail-ea0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755823Ab3GWIyP (ORCPT ); Tue, 23 Jul 2013 04:54:15 -0400 Received: by mail-ea0-f174.google.com with SMTP id o10so4275217eaj.19 for ; Tue, 23 Jul 2013 01:54:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:user-agent:in-reply-to :references:mime-version:content-transfer-encoding:content-type; bh=jo6VqCKQdPzyDE9/93W/7/R1cPMM2c1gQtMqWmFJvTA=; b=DVRt7gE07iFOcQm5fYMFVU++Ymt1HW2tV3vX1TIVhk7YCLoe3D5NRl7RmPyMcI6u2X y1FSFB4LlGuo+TNqD1nA8ZI95al3pLIDYJt+Mu6Bt3TGtlgqwtcpnsxuer1p6Kpcsw/x 72rilrzfR/bS6rkdn14rjO2d7API3fa/Ap+cM0Pwd7724mjiWwiTegjJ5DLm3hVYs5ZB s2Pq7j6VrbkD3+aN97ZtZ1pWfzmotbcZa/jjU0ArHePFoPA6TYZ2zWsVtqPpZEhhm0s/ InPJ/87YcNaKfOa5a5xT6n6U9TBkxWNvyhZC6K0KZfvQTRMUd1lDccbuRIB4VUc4oPjf Kw0Q== X-Received: by 10.14.218.136 with SMTP id k8mr31869637eep.111.1374569653642; Tue, 23 Jul 2013 01:54:13 -0700 (PDT) Received: from al.localnet (al.lekensteyn.nl. [2001:470:1f15:b83::c0d1:f1ed]) by mx.google.com with ESMTPSA id i2sm57053560eeu.4.2013.07.23.01.54.11 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 23 Jul 2013 01:54:12 -0700 (PDT) From: Peter Wu To: Ben Hutchings , Francois Romieu Cc: netdev@vger.kernel.org Subject: [PATCH 1/2] realtek: convert to per-chip mask Date: Tue, 23 Jul 2013 10:51:05 +0200 Message-ID: <6657153.nK7z8HGonh@al> User-Agent: KMail/4.10.5 (Linux/3.10.0-1-custom; KDE/4.10.5; x86_64; ; ) In-Reply-To: <3162188.mmLmSZRt9A@al> References: <3162188.mmLmSZRt9A@al> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The previous HW_REVID macro did not make identifiers more readable (compared to hex values like 0x12345678) and only allowed for one static mask. To make it easier to update the chips list, let's use similar structures as r8169 and remove HW_REVID. Names are removed and separated from the table and separated because the mac_version does not have to be unique. There are no functional changes for the output, except that the output now mentions "TxConfig" instead of "mask" when a chip is not found. Since the mask can be anything, the word is not masked either. Signed-off-by: Peter Wu --- realtek.c | 106 ++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 62 insertions(+), 44 deletions(-) "0x00: MAC Address %02x:%02x:%02x:%02x:%02x: %02x\n", diff --git a/realtek.c b/realtek.c index c3d7ae5..5a1fba7 100644 --- a/realtek.c +++ b/realtek.c @@ -5,13 +5,8 @@ #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -#define HW_REVID(b31, b30, b29, b28, b27, b26, b23, b22) \ - (b31<<31 | b30<<30 | b29<<29 | b28<<28 | \ - b27<<27 | b26<<26 | b23<<23 | b22<<22) - enum chip_type { - RTLNONE, - RTL8139, + RTL8139 = 1, RTL8139_K, RTL8139A, RTL8139A_G, @@ -22,6 +17,8 @@ enum chip_type { RTL8100B_8139D, RTL8139Cp, RTL8101, + + /* chips not handled by 8139too/8139cp module */ RTL8169, RTL8169S, RTL8110S, @@ -35,36 +32,62 @@ enum chip_type { RTL8100E2, }; -enum { - chip_type_mask = HW_REVID(1, 1, 1, 1, 1, 1, 1, 1) +static const char * const chip_names[] = { + [RTL8139] = "RTL-8139", + [RTL8139_K] = "RTL-8139-K", + [RTL8139A] = "RTL-8139A", + [RTL8139A_G] = "RTL-8139A-G", + [RTL8139B] = "RTL-8139B", + [RTL8130] = "RTL-8130", + [RTL8139C] = "RTL-8139C", + [RTL8100] = "RTL-8100", + [RTL8100B_8139D] = "RTL-8100B/8139D", + [RTL8139C] = "RTL-8139C+", + [RTL8101] = "RTL-8101", + + /* chips not handled by 8139too/8139cp module */ + [RTL8169] = "RTL-8169", + [RTL8169S] = "RTL-8169S", + [RTL8110S] = "RTL-8110S", + [RTL8169_8110SB] = "RTL-8169/8110SB", + [RTL8169_8110SCd] = "RTL-8169/8110SCd", + [RTL8169_8110SCe] = "RTL-8169/8110SCe", + [RTL8168_8111Bb] = "RTL-8168/8111Bb", + [RTL8168_8111Bef] = "RTL-8168/8111Bef", + [RTL8101Ebc] = "RTL-8101Ebc", + [RTL8100E1] = "RTL-8100E(1)", + [RTL8100E2] = "RTL-8100E(2)", }; static struct chip_info { - const char *name; u32 id_mask; + u32 id_val; + int mac_version; } rtl_info_tbl[] = { - { "RTL-8139", HW_REVID(0, 1, 0, 0, 0, 0, 0, 0) }, - { "RTL-8139-K", HW_REVID(0, 1, 1, 0, 0, 0, 0, 0) }, - { "RTL-8139A", HW_REVID(0, 1, 1, 1, 0, 0, 0, 0) }, - { "RTL-8139A-G", HW_REVID(0, 1, 1, 1, 0, 0, 1, 0) }, - { "RTL-8139B", HW_REVID(0, 1, 1, 1, 1, 0, 0, 0) }, - { "RTL-8130", HW_REVID(0, 1, 1, 1, 1, 1, 0, 0) }, - { "RTL-8139C", HW_REVID(0, 1, 1, 1, 0, 1, 0, 0) }, - { "RTL-8100", HW_REVID(0, 1, 1, 1, 1, 0, 1, 0) }, - { "RTL-8100B/8139D", HW_REVID(0, 1, 1, 1, 0, 1, 0, 1) }, - { "RTL-8139C+", HW_REVID(0, 1, 1, 1, 0, 1, 1, 0) }, - { "RTL-8101", HW_REVID(0, 1, 1, 1, 0, 1, 1, 1) }, - { "RTL-8169", HW_REVID(0, 0, 0, 0, 0, 0, 0, 0) }, - { "RTL-8169S", HW_REVID(0, 0, 0, 0, 0, 0, 1, 0) }, - { "RTL-8110S", HW_REVID(0, 0, 0, 0, 0, 1, 0, 0) }, - { "RTL-8169/8110SB", HW_REVID(0, 0, 0, 1, 0, 0, 0, 0) }, - { "RTL-8169/8110SCd", HW_REVID(0, 0, 0, 1, 1, 0, 0, 0) }, - { "RTL-8169/8110SCe", HW_REVID(1, 0, 0, 1, 1, 0, 0, 0) }, - { "RTL-8168/8111Bb", HW_REVID(0, 0, 1, 1, 0, 0, 0, 0) }, - { "RTL-8168/8111Bef", HW_REVID(0, 0, 1, 1, 1, 0, 0, 0) }, - { "RTL-8101Ebc", HW_REVID(0, 0, 1, 1, 0, 1, 0, 0) }, - { "RTL-8100E(1)", HW_REVID(0, 0, 1, 1, 0, 0, 1, 0) }, - { "RTL-8100E(2)", HW_REVID(0, 0, 1, 1, 1, 0, 1, 0) }, + { 0xfcc00000, 0x40000000, RTL8139 }, + { 0xfcc00000, 0x60000000, RTL8139_K }, + { 0xfcc00000, 0x70000000, RTL8139A }, + { 0xfcc00000, 0x70800000, RTL8139A_G }, + { 0xfcc00000, 0x78000000, RTL8139B }, + { 0xfcc00000, 0x7c000000, RTL8130 }, + { 0xfcc00000, 0x74000000, RTL8139C }, + { 0xfcc00000, 0x78800000, RTL8100 }, + { 0xfcc00000, 0x74400000, RTL8100B_8139D }, + { 0xfcc00000, 0x74800000, RTL8139C }, + { 0xfcc00000, 0x74c00000, RTL8101 }, + + /* chips not handled by 8139too/8139cp module */ + { 0xfcc00000, 0x00000000, RTL8169 }, + { 0xfcc00000, 0x00800000, RTL8169S }, + { 0xfcc00000, 0x04000000, RTL8110S }, + { 0xfcc00000, 0x10000000, RTL8169_8110SB }, + { 0xfcc00000, 0x18000000, RTL8169_8110SCd }, + { 0xfcc00000, 0x68000000, RTL8169_8110SCe }, + { 0xfcc00000, 0x30000000, RTL8168_8111Bb }, + { 0xfcc00000, 0x38000000, RTL8168_8111Bef }, + { 0xfcc00000, 0x34000000, RTL8101Ebc }, + { 0xfcc00000, 0x30800000, RTL8100E1 }, + { 0xfcc00000, 0x38800000, RTL8100E2 }, { } }; @@ -93,31 +116,26 @@ realtek_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs) u8 *data8 = (u8 *) regs->data; u32 v; struct chip_info *ci; - unsigned int board_type = RTLNONE, i; + unsigned int board_type; - v = data[0x40 >> 2] & chip_type_mask; + v = data[0x40 >> 2]; /* TxConfig */ ci = &rtl_info_tbl[0]; - while (ci->name) { - if (v == ci->id_mask) + while (ci->mac_version) { + if ((v & ci->id_mask) == ci->id_val) break; ci++; } - if (v != ci->id_mask) { - fprintf(stderr, "Unknown RealTek chip (mask: 0x%08x)\n", v); + board_type = ci->mac_version; + if (!board_type) { + fprintf(stderr, "Unknown RealTek chip (TxConfig: 0x%08x)\n", v); return 91; } - for (i = 0; i < ARRAY_SIZE(rtl_info_tbl); i++) { - if (ci == &rtl_info_tbl[i]) - board_type = i + 1; - } - if (board_type == RTLNONE) - abort(); fprintf(stdout, "RealTek %s registers:\n" "--------------------------------------------------------\n", - ci->name); + chip_names[board_type]); fprintf(stdout,