From patchwork Tue Jul 23 18:05:56 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Wu X-Patchwork-Id: 261169 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 D66272C00BA for ; Wed, 24 Jul 2013 04:07:02 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934093Ab3GWSG6 (ORCPT ); Tue, 23 Jul 2013 14:06:58 -0400 Received: from mail-we0-f177.google.com ([74.125.82.177]:61641 "EHLO mail-we0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933779Ab3GWSG4 (ORCPT ); Tue, 23 Jul 2013 14:06:56 -0400 Received: by mail-we0-f177.google.com with SMTP id m46so691438wev.8 for ; Tue, 23 Jul 2013 11:06:54 -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=atXdkI98xapltdhXqtKlpHU0eNF5p/XIcxH29KqJm+U=; b=lx+o1RNuCjMcKLCM05fsmGcgsiXD8esHMiUhhB8xtUHjSqkZfesrn+DmDm89ENZYbA uV1tPIZTOudAncbvqk7xdozKtIgECyF8HatRo7R9wMSJCkHUpwnxeVuCp+uwCGk8gygu r3RvRDti28aNThnDSBdnxhE6Q6T3jo5rsh48JdZq0kdM+VJX9W4zaEF/UwsOsCybvuCr J3o5oOkO5zKXOS0CXjvt6XLR/rftEAsMVOe8Y54GTMb8xElQZGSD/+pGIKE1JDdoiTc1 J5cH5y0NRCDC2GvQiVMr2llnGYUcfi+T53XX0tfDbqftxm49GKHJxKdRGOKDLHaGmpjR iIOQ== X-Received: by 10.180.96.227 with SMTP id dv3mr23001809wib.59.1374602814812; Tue, 23 Jul 2013 11:06:54 -0700 (PDT) Received: from al.localnet (al.lekensteyn.nl. [2001:470:1f15:b83::c0d1:f1ed]) by mx.google.com with ESMTPSA id b20sm7688433wiw.4.2013.07.23.11.06.52 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 23 Jul 2013 11:06:53 -0700 (PDT) From: Peter Wu To: Ben Hutchings Cc: Francois Romieu , netdev@vger.kernel.org Subject: [PATCH v2 1/2] realtek: convert to per-chip mask Date: Tue, 23 Jul 2013 20:05:56 +0200 Message-ID: <1602191.cqZWCGFrek@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 --- Attempt 2, sorry for the wordwrap issues, I have been fighting to get git-send-email to work with kmail and forgot to disable wordwrapping. --- realtek.c | 106 ++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 62 insertions(+), 44 deletions(-) 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, "0x00: MAC Address %02x:%02x:%02x:%02x:%02x:%02x\n",