19751ee09SNobuhiro Iwamatsu /* 2903de461SYoshihiro Shimoda * sh_eth.h - Driver for Renesas SuperH ethernet controler. 39751ee09SNobuhiro Iwamatsu * 43bb4cc31SNobuhiro Iwamatsu * Copyright (C) 2008, 2011 Renesas Solutions Corp. 53bb4cc31SNobuhiro Iwamatsu * Copyright (c) 2008, 2011 Nobuhiro Iwamatsu 69751ee09SNobuhiro Iwamatsu * Copyright (c) 2007 Carlos Munoz <carlos@kenati.com> 79751ee09SNobuhiro Iwamatsu * 89751ee09SNobuhiro Iwamatsu * This program is free software; you can redistribute it and/or modify 99751ee09SNobuhiro Iwamatsu * it under the terms of the GNU General Public License as published by 109751ee09SNobuhiro Iwamatsu * the Free Software Foundation; either version 2 of the License, or 119751ee09SNobuhiro Iwamatsu * (at your option) any later version. 129751ee09SNobuhiro Iwamatsu * 139751ee09SNobuhiro Iwamatsu * This program is distributed in the hope that it will be useful, 149751ee09SNobuhiro Iwamatsu * but WITHOUT ANY WARRANTY; without even the implied warranty of 159751ee09SNobuhiro Iwamatsu * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 169751ee09SNobuhiro Iwamatsu * GNU General Public License for more details. 179751ee09SNobuhiro Iwamatsu * 189751ee09SNobuhiro Iwamatsu * You should have received a copy of the GNU General Public License 199751ee09SNobuhiro Iwamatsu * along with this program; if not, write to the Free Software 209751ee09SNobuhiro Iwamatsu * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 219751ee09SNobuhiro Iwamatsu */ 229751ee09SNobuhiro Iwamatsu 23bd3980ccSNobuhiro Iwamatsu #include <netdev.h> 249751ee09SNobuhiro Iwamatsu #include <asm/types.h> 259751ee09SNobuhiro Iwamatsu 269751ee09SNobuhiro Iwamatsu #define SHETHER_NAME "sh_eth" 279751ee09SNobuhiro Iwamatsu 289751ee09SNobuhiro Iwamatsu /* Malloc returns addresses in the P1 area (cacheable). However we need to 299751ee09SNobuhiro Iwamatsu use area P2 (non-cacheable) */ 309751ee09SNobuhiro Iwamatsu #define ADDR_TO_P2(addr) ((((int)(addr) & ~0xe0000000) | 0xa0000000)) 319751ee09SNobuhiro Iwamatsu 329751ee09SNobuhiro Iwamatsu /* The ethernet controller needs to use physical addresses */ 33903de461SYoshihiro Shimoda #if defined(CONFIG_SH_32BIT) 34903de461SYoshihiro Shimoda #define ADDR_TO_PHY(addr) ((((int)(addr) & ~0xe0000000) | 0x40000000)) 35903de461SYoshihiro Shimoda #else 369751ee09SNobuhiro Iwamatsu #define ADDR_TO_PHY(addr) ((int)(addr) & ~0xe0000000) 37903de461SYoshihiro Shimoda #endif 389751ee09SNobuhiro Iwamatsu 399751ee09SNobuhiro Iwamatsu /* Number of supported ports */ 409751ee09SNobuhiro Iwamatsu #define MAX_PORT_NUM 2 419751ee09SNobuhiro Iwamatsu 429751ee09SNobuhiro Iwamatsu /* Buffers must be big enough to hold the largest ethernet frame. Also, rx 439751ee09SNobuhiro Iwamatsu buffers must be a multiple of 32 bytes */ 449751ee09SNobuhiro Iwamatsu #define MAX_BUF_SIZE (48 * 32) 459751ee09SNobuhiro Iwamatsu 469751ee09SNobuhiro Iwamatsu /* The number of tx descriptors must be large enough to point to 5 or more 479751ee09SNobuhiro Iwamatsu frames. If each frame uses 2 descriptors, at least 10 descriptors are needed. 489751ee09SNobuhiro Iwamatsu We use one descriptor per frame */ 499751ee09SNobuhiro Iwamatsu #define NUM_TX_DESC 8 509751ee09SNobuhiro Iwamatsu 519751ee09SNobuhiro Iwamatsu /* The size of the tx descriptor is determined by how much padding is used. 529751ee09SNobuhiro Iwamatsu 4, 20, or 52 bytes of padding can be used */ 539751ee09SNobuhiro Iwamatsu #define TX_DESC_PADDING 4 549751ee09SNobuhiro Iwamatsu #define TX_DESC_SIZE (12 + TX_DESC_PADDING) 559751ee09SNobuhiro Iwamatsu 56bd3980ccSNobuhiro Iwamatsu /* Tx descriptor. We always use 3 bytes of padding */ 579751ee09SNobuhiro Iwamatsu struct tx_desc_s { 589751ee09SNobuhiro Iwamatsu volatile u32 td0; 599751ee09SNobuhiro Iwamatsu u32 td1; 609751ee09SNobuhiro Iwamatsu u32 td2; /* Buffer start */ 619751ee09SNobuhiro Iwamatsu u32 padding; 629751ee09SNobuhiro Iwamatsu }; 639751ee09SNobuhiro Iwamatsu 649751ee09SNobuhiro Iwamatsu /* There is no limitation in the number of rx descriptors */ 659751ee09SNobuhiro Iwamatsu #define NUM_RX_DESC 8 669751ee09SNobuhiro Iwamatsu 679751ee09SNobuhiro Iwamatsu /* The size of the rx descriptor is determined by how much padding is used. 689751ee09SNobuhiro Iwamatsu 4, 20, or 52 bytes of padding can be used */ 699751ee09SNobuhiro Iwamatsu #define RX_DESC_PADDING 4 709751ee09SNobuhiro Iwamatsu #define RX_DESC_SIZE (12 + RX_DESC_PADDING) 719751ee09SNobuhiro Iwamatsu 729751ee09SNobuhiro Iwamatsu /* Rx descriptor. We always use 4 bytes of padding */ 739751ee09SNobuhiro Iwamatsu struct rx_desc_s { 749751ee09SNobuhiro Iwamatsu volatile u32 rd0; 759751ee09SNobuhiro Iwamatsu volatile u32 rd1; 769751ee09SNobuhiro Iwamatsu u32 rd2; /* Buffer start */ 779751ee09SNobuhiro Iwamatsu u32 padding; 789751ee09SNobuhiro Iwamatsu }; 799751ee09SNobuhiro Iwamatsu 80bd3980ccSNobuhiro Iwamatsu struct sh_eth_info { 819751ee09SNobuhiro Iwamatsu struct tx_desc_s *tx_desc_malloc; 829751ee09SNobuhiro Iwamatsu struct tx_desc_s *tx_desc_base; 839751ee09SNobuhiro Iwamatsu struct tx_desc_s *tx_desc_cur; 849751ee09SNobuhiro Iwamatsu struct rx_desc_s *rx_desc_malloc; 859751ee09SNobuhiro Iwamatsu struct rx_desc_s *rx_desc_base; 869751ee09SNobuhiro Iwamatsu struct rx_desc_s *rx_desc_cur; 879751ee09SNobuhiro Iwamatsu u8 *rx_buf_malloc; 889751ee09SNobuhiro Iwamatsu u8 *rx_buf_base; 899751ee09SNobuhiro Iwamatsu u8 mac_addr[6]; 909751ee09SNobuhiro Iwamatsu u8 phy_addr; 91bd3980ccSNobuhiro Iwamatsu struct eth_device *dev; 92bd1024b0SYoshihiro Shimoda struct phy_device *phydev; 939751ee09SNobuhiro Iwamatsu }; 949751ee09SNobuhiro Iwamatsu 95bd3980ccSNobuhiro Iwamatsu struct sh_eth_dev { 969751ee09SNobuhiro Iwamatsu int port; 97bd3980ccSNobuhiro Iwamatsu struct sh_eth_info port_info[MAX_PORT_NUM]; 989751ee09SNobuhiro Iwamatsu }; 999751ee09SNobuhiro Iwamatsu 10049afb8caSYoshihiro Shimoda /* from linux/drivers/net/ethernet/renesas/sh_eth.h */ 10149afb8caSYoshihiro Shimoda enum { 10249afb8caSYoshihiro Shimoda /* E-DMAC registers */ 10349afb8caSYoshihiro Shimoda EDSR = 0, 10449afb8caSYoshihiro Shimoda EDMR, 10549afb8caSYoshihiro Shimoda EDTRR, 10649afb8caSYoshihiro Shimoda EDRRR, 10749afb8caSYoshihiro Shimoda EESR, 10849afb8caSYoshihiro Shimoda EESIPR, 10949afb8caSYoshihiro Shimoda TDLAR, 11049afb8caSYoshihiro Shimoda TDFAR, 11149afb8caSYoshihiro Shimoda TDFXR, 11249afb8caSYoshihiro Shimoda TDFFR, 11349afb8caSYoshihiro Shimoda RDLAR, 11449afb8caSYoshihiro Shimoda RDFAR, 11549afb8caSYoshihiro Shimoda RDFXR, 11649afb8caSYoshihiro Shimoda RDFFR, 11749afb8caSYoshihiro Shimoda TRSCER, 11849afb8caSYoshihiro Shimoda RMFCR, 11949afb8caSYoshihiro Shimoda TFTR, 12049afb8caSYoshihiro Shimoda FDR, 12149afb8caSYoshihiro Shimoda RMCR, 12249afb8caSYoshihiro Shimoda EDOCR, 12349afb8caSYoshihiro Shimoda TFUCR, 12449afb8caSYoshihiro Shimoda RFOCR, 12549afb8caSYoshihiro Shimoda FCFTR, 12649afb8caSYoshihiro Shimoda RPADIR, 12749afb8caSYoshihiro Shimoda TRIMD, 12849afb8caSYoshihiro Shimoda RBWAR, 12949afb8caSYoshihiro Shimoda TBRAR, 13049afb8caSYoshihiro Shimoda 13149afb8caSYoshihiro Shimoda /* Ether registers */ 13249afb8caSYoshihiro Shimoda ECMR, 13349afb8caSYoshihiro Shimoda ECSR, 13449afb8caSYoshihiro Shimoda ECSIPR, 13549afb8caSYoshihiro Shimoda PIR, 13649afb8caSYoshihiro Shimoda PSR, 13749afb8caSYoshihiro Shimoda RDMLR, 13849afb8caSYoshihiro Shimoda PIPR, 13949afb8caSYoshihiro Shimoda RFLR, 14049afb8caSYoshihiro Shimoda IPGR, 14149afb8caSYoshihiro Shimoda APR, 14249afb8caSYoshihiro Shimoda MPR, 14349afb8caSYoshihiro Shimoda PFTCR, 14449afb8caSYoshihiro Shimoda PFRCR, 14549afb8caSYoshihiro Shimoda RFCR, 14649afb8caSYoshihiro Shimoda RFCF, 14749afb8caSYoshihiro Shimoda TPAUSER, 14849afb8caSYoshihiro Shimoda TPAUSECR, 14949afb8caSYoshihiro Shimoda BCFR, 15049afb8caSYoshihiro Shimoda BCFRR, 15149afb8caSYoshihiro Shimoda GECMR, 15249afb8caSYoshihiro Shimoda BCULR, 15349afb8caSYoshihiro Shimoda MAHR, 15449afb8caSYoshihiro Shimoda MALR, 15549afb8caSYoshihiro Shimoda TROCR, 15649afb8caSYoshihiro Shimoda CDCR, 15749afb8caSYoshihiro Shimoda LCCR, 15849afb8caSYoshihiro Shimoda CNDCR, 15949afb8caSYoshihiro Shimoda CEFCR, 16049afb8caSYoshihiro Shimoda FRECR, 16149afb8caSYoshihiro Shimoda TSFRCR, 16249afb8caSYoshihiro Shimoda TLFRCR, 16349afb8caSYoshihiro Shimoda CERCR, 16449afb8caSYoshihiro Shimoda CEECR, 16549afb8caSYoshihiro Shimoda MAFCR, 16649afb8caSYoshihiro Shimoda RTRATE, 16749afb8caSYoshihiro Shimoda CSMR, 16849afb8caSYoshihiro Shimoda RMII_MII, 16949afb8caSYoshihiro Shimoda 17049afb8caSYoshihiro Shimoda /* This value must be written at last. */ 17149afb8caSYoshihiro Shimoda SH_ETH_MAX_REGISTER_OFFSET, 17249afb8caSYoshihiro Shimoda }; 17349afb8caSYoshihiro Shimoda 17449afb8caSYoshihiro Shimoda static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = { 17549afb8caSYoshihiro Shimoda [EDSR] = 0x0000, 17649afb8caSYoshihiro Shimoda [EDMR] = 0x0400, 17749afb8caSYoshihiro Shimoda [EDTRR] = 0x0408, 17849afb8caSYoshihiro Shimoda [EDRRR] = 0x0410, 17949afb8caSYoshihiro Shimoda [EESR] = 0x0428, 18049afb8caSYoshihiro Shimoda [EESIPR] = 0x0430, 18149afb8caSYoshihiro Shimoda [TDLAR] = 0x0010, 18249afb8caSYoshihiro Shimoda [TDFAR] = 0x0014, 18349afb8caSYoshihiro Shimoda [TDFXR] = 0x0018, 18449afb8caSYoshihiro Shimoda [TDFFR] = 0x001c, 18549afb8caSYoshihiro Shimoda [RDLAR] = 0x0030, 18649afb8caSYoshihiro Shimoda [RDFAR] = 0x0034, 18749afb8caSYoshihiro Shimoda [RDFXR] = 0x0038, 18849afb8caSYoshihiro Shimoda [RDFFR] = 0x003c, 18949afb8caSYoshihiro Shimoda [TRSCER] = 0x0438, 19049afb8caSYoshihiro Shimoda [RMFCR] = 0x0440, 19149afb8caSYoshihiro Shimoda [TFTR] = 0x0448, 19249afb8caSYoshihiro Shimoda [FDR] = 0x0450, 19349afb8caSYoshihiro Shimoda [RMCR] = 0x0458, 19449afb8caSYoshihiro Shimoda [RPADIR] = 0x0460, 19549afb8caSYoshihiro Shimoda [FCFTR] = 0x0468, 19649afb8caSYoshihiro Shimoda [CSMR] = 0x04E4, 19749afb8caSYoshihiro Shimoda 19849afb8caSYoshihiro Shimoda [ECMR] = 0x0500, 19949afb8caSYoshihiro Shimoda [ECSR] = 0x0510, 20049afb8caSYoshihiro Shimoda [ECSIPR] = 0x0518, 20149afb8caSYoshihiro Shimoda [PIR] = 0x0520, 20249afb8caSYoshihiro Shimoda [PSR] = 0x0528, 20349afb8caSYoshihiro Shimoda [PIPR] = 0x052c, 20449afb8caSYoshihiro Shimoda [RFLR] = 0x0508, 20549afb8caSYoshihiro Shimoda [APR] = 0x0554, 20649afb8caSYoshihiro Shimoda [MPR] = 0x0558, 20749afb8caSYoshihiro Shimoda [PFTCR] = 0x055c, 20849afb8caSYoshihiro Shimoda [PFRCR] = 0x0560, 20949afb8caSYoshihiro Shimoda [TPAUSER] = 0x0564, 21049afb8caSYoshihiro Shimoda [GECMR] = 0x05b0, 21149afb8caSYoshihiro Shimoda [BCULR] = 0x05b4, 21249afb8caSYoshihiro Shimoda [MAHR] = 0x05c0, 21349afb8caSYoshihiro Shimoda [MALR] = 0x05c8, 21449afb8caSYoshihiro Shimoda [TROCR] = 0x0700, 21549afb8caSYoshihiro Shimoda [CDCR] = 0x0708, 21649afb8caSYoshihiro Shimoda [LCCR] = 0x0710, 21749afb8caSYoshihiro Shimoda [CEFCR] = 0x0740, 21849afb8caSYoshihiro Shimoda [FRECR] = 0x0748, 21949afb8caSYoshihiro Shimoda [TSFRCR] = 0x0750, 22049afb8caSYoshihiro Shimoda [TLFRCR] = 0x0758, 22149afb8caSYoshihiro Shimoda [RFCR] = 0x0760, 22249afb8caSYoshihiro Shimoda [CERCR] = 0x0768, 22349afb8caSYoshihiro Shimoda [CEECR] = 0x0770, 22449afb8caSYoshihiro Shimoda [MAFCR] = 0x0778, 22549afb8caSYoshihiro Shimoda [RMII_MII] = 0x0790, 22649afb8caSYoshihiro Shimoda }; 22749afb8caSYoshihiro Shimoda 22849afb8caSYoshihiro Shimoda static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = { 22949afb8caSYoshihiro Shimoda [ECMR] = 0x0100, 23049afb8caSYoshihiro Shimoda [RFLR] = 0x0108, 23149afb8caSYoshihiro Shimoda [ECSR] = 0x0110, 23249afb8caSYoshihiro Shimoda [ECSIPR] = 0x0118, 23349afb8caSYoshihiro Shimoda [PIR] = 0x0120, 23449afb8caSYoshihiro Shimoda [PSR] = 0x0128, 23549afb8caSYoshihiro Shimoda [RDMLR] = 0x0140, 23649afb8caSYoshihiro Shimoda [IPGR] = 0x0150, 23749afb8caSYoshihiro Shimoda [APR] = 0x0154, 23849afb8caSYoshihiro Shimoda [MPR] = 0x0158, 23949afb8caSYoshihiro Shimoda [TPAUSER] = 0x0164, 24049afb8caSYoshihiro Shimoda [RFCF] = 0x0160, 24149afb8caSYoshihiro Shimoda [TPAUSECR] = 0x0168, 24249afb8caSYoshihiro Shimoda [BCFRR] = 0x016c, 24349afb8caSYoshihiro Shimoda [MAHR] = 0x01c0, 24449afb8caSYoshihiro Shimoda [MALR] = 0x01c8, 24549afb8caSYoshihiro Shimoda [TROCR] = 0x01d0, 24649afb8caSYoshihiro Shimoda [CDCR] = 0x01d4, 24749afb8caSYoshihiro Shimoda [LCCR] = 0x01d8, 24849afb8caSYoshihiro Shimoda [CNDCR] = 0x01dc, 24949afb8caSYoshihiro Shimoda [CEFCR] = 0x01e4, 25049afb8caSYoshihiro Shimoda [FRECR] = 0x01e8, 25149afb8caSYoshihiro Shimoda [TSFRCR] = 0x01ec, 25249afb8caSYoshihiro Shimoda [TLFRCR] = 0x01f0, 25349afb8caSYoshihiro Shimoda [RFCR] = 0x01f4, 25449afb8caSYoshihiro Shimoda [MAFCR] = 0x01f8, 25549afb8caSYoshihiro Shimoda [RTRATE] = 0x01fc, 25649afb8caSYoshihiro Shimoda 25749afb8caSYoshihiro Shimoda [EDMR] = 0x0000, 25849afb8caSYoshihiro Shimoda [EDTRR] = 0x0008, 25949afb8caSYoshihiro Shimoda [EDRRR] = 0x0010, 26049afb8caSYoshihiro Shimoda [TDLAR] = 0x0018, 26149afb8caSYoshihiro Shimoda [RDLAR] = 0x0020, 26249afb8caSYoshihiro Shimoda [EESR] = 0x0028, 26349afb8caSYoshihiro Shimoda [EESIPR] = 0x0030, 26449afb8caSYoshihiro Shimoda [TRSCER] = 0x0038, 26549afb8caSYoshihiro Shimoda [RMFCR] = 0x0040, 26649afb8caSYoshihiro Shimoda [TFTR] = 0x0048, 26749afb8caSYoshihiro Shimoda [FDR] = 0x0050, 26849afb8caSYoshihiro Shimoda [RMCR] = 0x0058, 26949afb8caSYoshihiro Shimoda [TFUCR] = 0x0064, 27049afb8caSYoshihiro Shimoda [RFOCR] = 0x0068, 27149afb8caSYoshihiro Shimoda [FCFTR] = 0x0070, 27249afb8caSYoshihiro Shimoda [RPADIR] = 0x0078, 27349afb8caSYoshihiro Shimoda [TRIMD] = 0x007c, 27449afb8caSYoshihiro Shimoda [RBWAR] = 0x00c8, 27549afb8caSYoshihiro Shimoda [RDFAR] = 0x00cc, 27649afb8caSYoshihiro Shimoda [TBRAR] = 0x00d4, 27749afb8caSYoshihiro Shimoda [TDFAR] = 0x00d8, 27849afb8caSYoshihiro Shimoda }; 27949afb8caSYoshihiro Shimoda 2809751ee09SNobuhiro Iwamatsu /* Register Address */ 28149afb8caSYoshihiro Shimoda #if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734) 28226235093SYoshihiro Shimoda #define SH_ETH_TYPE_GETHER 2839751ee09SNobuhiro Iwamatsu #define BASE_IO_ADDR 0xfee00000 284903de461SYoshihiro Shimoda #elif defined(CONFIG_CPU_SH7757) 285*631fea8fSYoshihiro Shimoda #if defined(CONFIG_SH_ETHER_USE_GETHER) 286*631fea8fSYoshihiro Shimoda #define SH_ETH_TYPE_GETHER 287*631fea8fSYoshihiro Shimoda #define BASE_IO_ADDR 0xfee00000 288*631fea8fSYoshihiro Shimoda #else 28926235093SYoshihiro Shimoda #define SH_ETH_TYPE_ETHER 290903de461SYoshihiro Shimoda #define BASE_IO_ADDR 0xfef00000 291*631fea8fSYoshihiro Shimoda #endif 2923bb4cc31SNobuhiro Iwamatsu #elif defined(CONFIG_CPU_SH7724) 29326235093SYoshihiro Shimoda #define SH_ETH_TYPE_ETHER 2943bb4cc31SNobuhiro Iwamatsu #define BASE_IO_ADDR 0xA4600000 295903de461SYoshihiro Shimoda #endif 296903de461SYoshihiro Shimoda 2979751ee09SNobuhiro Iwamatsu /* 2989751ee09SNobuhiro Iwamatsu * Register's bits 2999751ee09SNobuhiro Iwamatsu * Copy from Linux driver source code 3009751ee09SNobuhiro Iwamatsu */ 30126235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 3029751ee09SNobuhiro Iwamatsu /* EDSR */ 3039751ee09SNobuhiro Iwamatsu enum EDSR_BIT { 3049751ee09SNobuhiro Iwamatsu EDSR_ENT = 0x01, EDSR_ENR = 0x02, 3059751ee09SNobuhiro Iwamatsu }; 3069751ee09SNobuhiro Iwamatsu #define EDSR_ENALL (EDSR_ENT|EDSR_ENR) 3079751ee09SNobuhiro Iwamatsu #endif 3089751ee09SNobuhiro Iwamatsu 3099751ee09SNobuhiro Iwamatsu /* EDMR */ 3109751ee09SNobuhiro Iwamatsu enum DMAC_M_BIT { 3119751ee09SNobuhiro Iwamatsu EDMR_DL1 = 0x20, EDMR_DL0 = 0x10, 31226235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 313ee6ec5d4SNobuhiro Iwamatsu EDMR_SRST = 0x03, /* Receive/Send reset */ 3149751ee09SNobuhiro Iwamatsu EMDR_DESC_R = 0x30, /* Descriptor reserve size */ 3159751ee09SNobuhiro Iwamatsu EDMR_EL = 0x40, /* Litte endian */ 31626235093SYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER) 317903de461SYoshihiro Shimoda EDMR_SRST = 0x01, 318903de461SYoshihiro Shimoda EMDR_DESC_R = 0x30, /* Descriptor reserve size */ 319903de461SYoshihiro Shimoda EDMR_EL = 0x40, /* Litte endian */ 32026235093SYoshihiro Shimoda #else 3219751ee09SNobuhiro Iwamatsu EDMR_SRST = 0x01, 3229751ee09SNobuhiro Iwamatsu #endif 3239751ee09SNobuhiro Iwamatsu }; 3249751ee09SNobuhiro Iwamatsu 3259751ee09SNobuhiro Iwamatsu /* RFLR */ 3269751ee09SNobuhiro Iwamatsu #define RFLR_RFL_MIN 0x05EE /* Recv Frame length 1518 byte */ 3279751ee09SNobuhiro Iwamatsu 3289751ee09SNobuhiro Iwamatsu /* EDTRR */ 3299751ee09SNobuhiro Iwamatsu enum DMAC_T_BIT { 33026235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 3319751ee09SNobuhiro Iwamatsu EDTRR_TRNS = 0x03, 3329751ee09SNobuhiro Iwamatsu #else 3339751ee09SNobuhiro Iwamatsu EDTRR_TRNS = 0x01, 3349751ee09SNobuhiro Iwamatsu #endif 3359751ee09SNobuhiro Iwamatsu }; 3369751ee09SNobuhiro Iwamatsu 3379751ee09SNobuhiro Iwamatsu /* GECMR */ 3389751ee09SNobuhiro Iwamatsu enum GECMR_BIT { 339*631fea8fSYoshihiro Shimoda #if defined(CONFIG_CPU_SH7757) 340*631fea8fSYoshihiro Shimoda GECMR_1000B = 0x20, GECMR_100B = 0x01, GECMR_10B = 0x00, 341*631fea8fSYoshihiro Shimoda #else 34209fcc8b5SSimon Munton GECMR_1000B = 0x01, GECMR_100B = 0x04, GECMR_10B = 0x00, 343*631fea8fSYoshihiro Shimoda #endif 3449751ee09SNobuhiro Iwamatsu }; 3459751ee09SNobuhiro Iwamatsu 3469751ee09SNobuhiro Iwamatsu /* EDRRR*/ 3479751ee09SNobuhiro Iwamatsu enum EDRRR_R_BIT { 3489751ee09SNobuhiro Iwamatsu EDRRR_R = 0x01, 3499751ee09SNobuhiro Iwamatsu }; 3509751ee09SNobuhiro Iwamatsu 3519751ee09SNobuhiro Iwamatsu /* TPAUSER */ 3529751ee09SNobuhiro Iwamatsu enum TPAUSER_BIT { 3539751ee09SNobuhiro Iwamatsu TPAUSER_TPAUSE = 0x0000ffff, 3549751ee09SNobuhiro Iwamatsu TPAUSER_UNLIMITED = 0, 3559751ee09SNobuhiro Iwamatsu }; 3569751ee09SNobuhiro Iwamatsu 3579751ee09SNobuhiro Iwamatsu /* BCFR */ 3589751ee09SNobuhiro Iwamatsu enum BCFR_BIT { 3599751ee09SNobuhiro Iwamatsu BCFR_RPAUSE = 0x0000ffff, 3609751ee09SNobuhiro Iwamatsu BCFR_UNLIMITED = 0, 3619751ee09SNobuhiro Iwamatsu }; 3629751ee09SNobuhiro Iwamatsu 3639751ee09SNobuhiro Iwamatsu /* PIR */ 3649751ee09SNobuhiro Iwamatsu enum PIR_BIT { 3659751ee09SNobuhiro Iwamatsu PIR_MDI = 0x08, PIR_MDO = 0x04, PIR_MMD = 0x02, PIR_MDC = 0x01, 3669751ee09SNobuhiro Iwamatsu }; 3679751ee09SNobuhiro Iwamatsu 3689751ee09SNobuhiro Iwamatsu /* PSR */ 3699751ee09SNobuhiro Iwamatsu enum PHY_STATUS_BIT { PHY_ST_LINK = 0x01, }; 3709751ee09SNobuhiro Iwamatsu 3719751ee09SNobuhiro Iwamatsu /* EESR */ 3729751ee09SNobuhiro Iwamatsu enum EESR_BIT { 373ee6ec5d4SNobuhiro Iwamatsu 37426235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER) 3759751ee09SNobuhiro Iwamatsu EESR_TWB = 0x40000000, 3769751ee09SNobuhiro Iwamatsu #else 3779751ee09SNobuhiro Iwamatsu EESR_TWB = 0xC0000000, 3789751ee09SNobuhiro Iwamatsu EESR_TC1 = 0x20000000, 3799751ee09SNobuhiro Iwamatsu EESR_TUC = 0x10000000, 3809751ee09SNobuhiro Iwamatsu EESR_ROC = 0x80000000, 3819751ee09SNobuhiro Iwamatsu #endif 3829751ee09SNobuhiro Iwamatsu EESR_TABT = 0x04000000, 3839751ee09SNobuhiro Iwamatsu EESR_RABT = 0x02000000, EESR_RFRMER = 0x01000000, 38426235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER) 3859751ee09SNobuhiro Iwamatsu EESR_ADE = 0x00800000, 3869751ee09SNobuhiro Iwamatsu #endif 3879751ee09SNobuhiro Iwamatsu EESR_ECI = 0x00400000, 3889751ee09SNobuhiro Iwamatsu EESR_FTC = 0x00200000, EESR_TDE = 0x00100000, 3899751ee09SNobuhiro Iwamatsu EESR_TFE = 0x00080000, EESR_FRC = 0x00040000, 3909751ee09SNobuhiro Iwamatsu EESR_RDE = 0x00020000, EESR_RFE = 0x00010000, 39126235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER) 3929751ee09SNobuhiro Iwamatsu EESR_CND = 0x00000800, 3939751ee09SNobuhiro Iwamatsu #endif 3949751ee09SNobuhiro Iwamatsu EESR_DLC = 0x00000400, 3959751ee09SNobuhiro Iwamatsu EESR_CD = 0x00000200, EESR_RTO = 0x00000100, 3969751ee09SNobuhiro Iwamatsu EESR_RMAF = 0x00000080, EESR_CEEF = 0x00000040, 3979751ee09SNobuhiro Iwamatsu EESR_CELF = 0x00000020, EESR_RRF = 0x00000010, 3989751ee09SNobuhiro Iwamatsu rESR_RTLF = 0x00000008, EESR_RTSF = 0x00000004, 3999751ee09SNobuhiro Iwamatsu EESR_PRE = 0x00000002, EESR_CERF = 0x00000001, 4009751ee09SNobuhiro Iwamatsu }; 4019751ee09SNobuhiro Iwamatsu 4029751ee09SNobuhiro Iwamatsu 40326235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 4049751ee09SNobuhiro Iwamatsu # define TX_CHECK (EESR_TC1 | EESR_FTC) 4059751ee09SNobuhiro Iwamatsu # define EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \ 4069751ee09SNobuhiro Iwamatsu | EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI) 4079751ee09SNobuhiro Iwamatsu # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE) 4089751ee09SNobuhiro Iwamatsu 4099751ee09SNobuhiro Iwamatsu #else 4109751ee09SNobuhiro Iwamatsu # define TX_CHECK (EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO) 4119751ee09SNobuhiro Iwamatsu # define EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \ 4129751ee09SNobuhiro Iwamatsu | EESR_RFRMER | EESR_ADE | EESR_TFE | EESR_TDE | EESR_ECI) 4139751ee09SNobuhiro Iwamatsu # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_ADE | EESR_TDE | EESR_TFE) 4149751ee09SNobuhiro Iwamatsu #endif 4159751ee09SNobuhiro Iwamatsu 4169751ee09SNobuhiro Iwamatsu /* EESIPR */ 4179751ee09SNobuhiro Iwamatsu enum DMAC_IM_BIT { 4189751ee09SNobuhiro Iwamatsu DMAC_M_TWB = 0x40000000, DMAC_M_TABT = 0x04000000, 4199751ee09SNobuhiro Iwamatsu DMAC_M_RABT = 0x02000000, 4209751ee09SNobuhiro Iwamatsu DMAC_M_RFRMER = 0x01000000, DMAC_M_ADF = 0x00800000, 4219751ee09SNobuhiro Iwamatsu DMAC_M_ECI = 0x00400000, DMAC_M_FTC = 0x00200000, 4229751ee09SNobuhiro Iwamatsu DMAC_M_TDE = 0x00100000, DMAC_M_TFE = 0x00080000, 4239751ee09SNobuhiro Iwamatsu DMAC_M_FRC = 0x00040000, DMAC_M_RDE = 0x00020000, 4249751ee09SNobuhiro Iwamatsu DMAC_M_RFE = 0x00010000, DMAC_M_TINT4 = 0x00000800, 4259751ee09SNobuhiro Iwamatsu DMAC_M_TINT3 = 0x00000400, DMAC_M_TINT2 = 0x00000200, 4269751ee09SNobuhiro Iwamatsu DMAC_M_TINT1 = 0x00000100, DMAC_M_RINT8 = 0x00000080, 4279751ee09SNobuhiro Iwamatsu DMAC_M_RINT5 = 0x00000010, DMAC_M_RINT4 = 0x00000008, 4289751ee09SNobuhiro Iwamatsu DMAC_M_RINT3 = 0x00000004, DMAC_M_RINT2 = 0x00000002, 4299751ee09SNobuhiro Iwamatsu DMAC_M_RINT1 = 0x00000001, 4309751ee09SNobuhiro Iwamatsu }; 4319751ee09SNobuhiro Iwamatsu 4329751ee09SNobuhiro Iwamatsu /* Receive descriptor bit */ 4339751ee09SNobuhiro Iwamatsu enum RD_STS_BIT { 4349751ee09SNobuhiro Iwamatsu RD_RACT = 0x80000000, RD_RDLE = 0x40000000, 4359751ee09SNobuhiro Iwamatsu RD_RFP1 = 0x20000000, RD_RFP0 = 0x10000000, 4369751ee09SNobuhiro Iwamatsu RD_RFE = 0x08000000, RD_RFS10 = 0x00000200, 4379751ee09SNobuhiro Iwamatsu RD_RFS9 = 0x00000100, RD_RFS8 = 0x00000080, 4389751ee09SNobuhiro Iwamatsu RD_RFS7 = 0x00000040, RD_RFS6 = 0x00000020, 4399751ee09SNobuhiro Iwamatsu RD_RFS5 = 0x00000010, RD_RFS4 = 0x00000008, 4409751ee09SNobuhiro Iwamatsu RD_RFS3 = 0x00000004, RD_RFS2 = 0x00000002, 4419751ee09SNobuhiro Iwamatsu RD_RFS1 = 0x00000001, 4429751ee09SNobuhiro Iwamatsu }; 4439751ee09SNobuhiro Iwamatsu #define RDF1ST RD_RFP1 4449751ee09SNobuhiro Iwamatsu #define RDFEND RD_RFP0 4459751ee09SNobuhiro Iwamatsu #define RD_RFP (RD_RFP1|RD_RFP0) 4469751ee09SNobuhiro Iwamatsu 4479751ee09SNobuhiro Iwamatsu /* RDFFR*/ 4489751ee09SNobuhiro Iwamatsu enum RDFFR_BIT { 4499751ee09SNobuhiro Iwamatsu RDFFR_RDLF = 0x01, 4509751ee09SNobuhiro Iwamatsu }; 4519751ee09SNobuhiro Iwamatsu 4529751ee09SNobuhiro Iwamatsu /* FCFTR */ 4539751ee09SNobuhiro Iwamatsu enum FCFTR_BIT { 4549751ee09SNobuhiro Iwamatsu FCFTR_RFF2 = 0x00040000, FCFTR_RFF1 = 0x00020000, 4559751ee09SNobuhiro Iwamatsu FCFTR_RFF0 = 0x00010000, FCFTR_RFD2 = 0x00000004, 4569751ee09SNobuhiro Iwamatsu FCFTR_RFD1 = 0x00000002, FCFTR_RFD0 = 0x00000001, 4579751ee09SNobuhiro Iwamatsu }; 4589751ee09SNobuhiro Iwamatsu #define FIFO_F_D_RFF (FCFTR_RFF2|FCFTR_RFF1|FCFTR_RFF0) 4599751ee09SNobuhiro Iwamatsu #define FIFO_F_D_RFD (FCFTR_RFD2|FCFTR_RFD1|FCFTR_RFD0) 4609751ee09SNobuhiro Iwamatsu 4619751ee09SNobuhiro Iwamatsu /* Transfer descriptor bit */ 4629751ee09SNobuhiro Iwamatsu enum TD_STS_BIT { 46326235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_ETHER) 4649751ee09SNobuhiro Iwamatsu TD_TACT = 0x80000000, 4659751ee09SNobuhiro Iwamatsu #else 4669751ee09SNobuhiro Iwamatsu TD_TACT = 0x7fffffff, 4679751ee09SNobuhiro Iwamatsu #endif 4689751ee09SNobuhiro Iwamatsu TD_TDLE = 0x40000000, TD_TFP1 = 0x20000000, 4699751ee09SNobuhiro Iwamatsu TD_TFP0 = 0x10000000, 4709751ee09SNobuhiro Iwamatsu }; 4719751ee09SNobuhiro Iwamatsu #define TDF1ST TD_TFP1 4729751ee09SNobuhiro Iwamatsu #define TDFEND TD_TFP0 4739751ee09SNobuhiro Iwamatsu #define TD_TFP (TD_TFP1|TD_TFP0) 4749751ee09SNobuhiro Iwamatsu 4759751ee09SNobuhiro Iwamatsu /* RMCR */ 4769751ee09SNobuhiro Iwamatsu enum RECV_RST_BIT { RMCR_RST = 0x01, }; 4779751ee09SNobuhiro Iwamatsu /* ECMR */ 4789751ee09SNobuhiro Iwamatsu enum FELIC_MODE_BIT { 47926235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 4809751ee09SNobuhiro Iwamatsu ECMR_TRCCM=0x04000000, ECMR_RCSC= 0x00800000, ECMR_DPAD= 0x00200000, 4819751ee09SNobuhiro Iwamatsu ECMR_RZPF = 0x00100000, 4829751ee09SNobuhiro Iwamatsu #endif 4839751ee09SNobuhiro Iwamatsu ECMR_ZPF = 0x00080000, ECMR_PFR = 0x00040000, ECMR_RXF = 0x00020000, 4849751ee09SNobuhiro Iwamatsu ECMR_TXF = 0x00010000, ECMR_MCT = 0x00002000, ECMR_PRCEF = 0x00001000, 4859751ee09SNobuhiro Iwamatsu ECMR_PMDE = 0x00000200, ECMR_RE = 0x00000040, ECMR_TE = 0x00000020, 4869751ee09SNobuhiro Iwamatsu ECMR_ILB = 0x00000008, ECMR_ELB = 0x00000004, ECMR_DM = 0x00000002, 4879751ee09SNobuhiro Iwamatsu ECMR_PRM = 0x00000001, 4883bb4cc31SNobuhiro Iwamatsu #ifdef CONFIG_CPU_SH7724 4893bb4cc31SNobuhiro Iwamatsu ECMR_RTM = 0x00000010, 4903bb4cc31SNobuhiro Iwamatsu #endif 4913bb4cc31SNobuhiro Iwamatsu 4929751ee09SNobuhiro Iwamatsu }; 4939751ee09SNobuhiro Iwamatsu 49426235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 4959751ee09SNobuhiro Iwamatsu #define ECMR_CHG_DM (ECMR_TRCCM | ECMR_RZPF | ECMR_ZPF | ECMR_PFR | ECMR_RXF | \ 4969751ee09SNobuhiro Iwamatsu ECMR_TXF | ECMR_MCT) 49726235093SYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER) 4983bb4cc31SNobuhiro Iwamatsu #define ECMR_CHG_DM (ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF) 4999751ee09SNobuhiro Iwamatsu #else 500903de461SYoshihiro Shimoda #define ECMR_CHG_DM (ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF | ECMR_MCT) 5019751ee09SNobuhiro Iwamatsu #endif 5029751ee09SNobuhiro Iwamatsu 5039751ee09SNobuhiro Iwamatsu /* ECSR */ 5049751ee09SNobuhiro Iwamatsu enum ECSR_STATUS_BIT { 50526235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER) 5069751ee09SNobuhiro Iwamatsu ECSR_BRCRX = 0x20, ECSR_PSRTO = 0x10, 5079751ee09SNobuhiro Iwamatsu #endif 5089751ee09SNobuhiro Iwamatsu ECSR_LCHNG = 0x04, 5099751ee09SNobuhiro Iwamatsu ECSR_MPD = 0x02, ECSR_ICD = 0x01, 5109751ee09SNobuhiro Iwamatsu }; 5119751ee09SNobuhiro Iwamatsu 51226235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 5139751ee09SNobuhiro Iwamatsu # define ECSR_INIT (ECSR_ICD | ECSIPR_MPDIP) 5149751ee09SNobuhiro Iwamatsu #else 5159751ee09SNobuhiro Iwamatsu # define ECSR_INIT (ECSR_BRCRX | ECSR_PSRTO | \ 5169751ee09SNobuhiro Iwamatsu ECSR_LCHNG | ECSR_ICD | ECSIPR_MPDIP) 5179751ee09SNobuhiro Iwamatsu #endif 5189751ee09SNobuhiro Iwamatsu 5199751ee09SNobuhiro Iwamatsu /* ECSIPR */ 5209751ee09SNobuhiro Iwamatsu enum ECSIPR_STATUS_MASK_BIT { 52126235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER) 522a6616efbSNobuhiro Iwamatsu ECSIPR_BRCRXIP = 0x20, 523ee6ec5d4SNobuhiro Iwamatsu ECSIPR_PSRTOIP = 0x10, 52426235093SYoshihiro Shimoda #elif defined(SH_ETY_TYPE_GETHER) 525ee6ec5d4SNobuhiro Iwamatsu ECSIPR_PSRTOIP = 0x10, 526ee6ec5d4SNobuhiro Iwamatsu ECSIPR_PHYIP = 0x08, 527a6616efbSNobuhiro Iwamatsu #endif 528ee6ec5d4SNobuhiro Iwamatsu ECSIPR_LCHNGIP = 0x04, 529ee6ec5d4SNobuhiro Iwamatsu ECSIPR_MPDIP = 0x02, 530ee6ec5d4SNobuhiro Iwamatsu ECSIPR_ICDIP = 0x01, 5319751ee09SNobuhiro Iwamatsu }; 5329751ee09SNobuhiro Iwamatsu 53326235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 5349751ee09SNobuhiro Iwamatsu # define ECSIPR_INIT (ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP) 5359751ee09SNobuhiro Iwamatsu #else 5369751ee09SNobuhiro Iwamatsu # define ECSIPR_INIT (ECSIPR_BRCRXIP | ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | \ 5379751ee09SNobuhiro Iwamatsu ECSIPR_ICDIP | ECSIPR_MPDIP) 5389751ee09SNobuhiro Iwamatsu #endif 5399751ee09SNobuhiro Iwamatsu 5409751ee09SNobuhiro Iwamatsu /* APR */ 5419751ee09SNobuhiro Iwamatsu enum APR_BIT { 5429751ee09SNobuhiro Iwamatsu APR_AP = 0x00000004, 5439751ee09SNobuhiro Iwamatsu }; 5449751ee09SNobuhiro Iwamatsu 5459751ee09SNobuhiro Iwamatsu /* MPR */ 5469751ee09SNobuhiro Iwamatsu enum MPR_BIT { 5479751ee09SNobuhiro Iwamatsu MPR_MP = 0x00000006, 5489751ee09SNobuhiro Iwamatsu }; 5499751ee09SNobuhiro Iwamatsu 5509751ee09SNobuhiro Iwamatsu /* TRSCER */ 5519751ee09SNobuhiro Iwamatsu enum DESC_I_BIT { 5529751ee09SNobuhiro Iwamatsu DESC_I_TINT4 = 0x0800, DESC_I_TINT3 = 0x0400, DESC_I_TINT2 = 0x0200, 5539751ee09SNobuhiro Iwamatsu DESC_I_TINT1 = 0x0100, DESC_I_RINT8 = 0x0080, DESC_I_RINT5 = 0x0010, 5549751ee09SNobuhiro Iwamatsu DESC_I_RINT4 = 0x0008, DESC_I_RINT3 = 0x0004, DESC_I_RINT2 = 0x0002, 5559751ee09SNobuhiro Iwamatsu DESC_I_RINT1 = 0x0001, 5569751ee09SNobuhiro Iwamatsu }; 5579751ee09SNobuhiro Iwamatsu 5589751ee09SNobuhiro Iwamatsu /* RPADIR */ 5599751ee09SNobuhiro Iwamatsu enum RPADIR_BIT { 5609751ee09SNobuhiro Iwamatsu RPADIR_PADS1 = 0x20000, RPADIR_PADS0 = 0x10000, 5619751ee09SNobuhiro Iwamatsu RPADIR_PADR = 0x0003f, 5629751ee09SNobuhiro Iwamatsu }; 5639751ee09SNobuhiro Iwamatsu 56426235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 5659751ee09SNobuhiro Iwamatsu # define RPADIR_INIT (0x00) 5669751ee09SNobuhiro Iwamatsu #else 5679751ee09SNobuhiro Iwamatsu # define RPADIR_INIT (RPADIR_PADS1) 5689751ee09SNobuhiro Iwamatsu #endif 5699751ee09SNobuhiro Iwamatsu 5709751ee09SNobuhiro Iwamatsu /* FDR */ 5719751ee09SNobuhiro Iwamatsu enum FIFO_SIZE_BIT { 5729751ee09SNobuhiro Iwamatsu FIFO_SIZE_T = 0x00000700, FIFO_SIZE_R = 0x00000007, 5739751ee09SNobuhiro Iwamatsu }; 57449afb8caSYoshihiro Shimoda 57549afb8caSYoshihiro Shimoda static inline unsigned long sh_eth_reg_addr(struct sh_eth_dev *eth, 57649afb8caSYoshihiro Shimoda int enum_index) 57749afb8caSYoshihiro Shimoda { 57849afb8caSYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) 57949afb8caSYoshihiro Shimoda const u16 *reg_offset = sh_eth_offset_gigabit; 58049afb8caSYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER) 58149afb8caSYoshihiro Shimoda const u16 *reg_offset = sh_eth_offset_fast_sh4; 58249afb8caSYoshihiro Shimoda #else 58349afb8caSYoshihiro Shimoda #error 58449afb8caSYoshihiro Shimoda #endif 58549afb8caSYoshihiro Shimoda return BASE_IO_ADDR + reg_offset[enum_index] + 0x800 * eth->port; 58649afb8caSYoshihiro Shimoda } 58749afb8caSYoshihiro Shimoda 58849afb8caSYoshihiro Shimoda static inline void sh_eth_write(struct sh_eth_dev *eth, unsigned long data, 58949afb8caSYoshihiro Shimoda int enum_index) 59049afb8caSYoshihiro Shimoda { 59149afb8caSYoshihiro Shimoda outl(data, sh_eth_reg_addr(eth, enum_index)); 59249afb8caSYoshihiro Shimoda } 59349afb8caSYoshihiro Shimoda 59449afb8caSYoshihiro Shimoda static inline unsigned long sh_eth_read(struct sh_eth_dev *eth, 59549afb8caSYoshihiro Shimoda int enum_index) 59649afb8caSYoshihiro Shimoda { 59749afb8caSYoshihiro Shimoda return inl(sh_eth_reg_addr(eth, enum_index)); 59849afb8caSYoshihiro Shimoda } 599