1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * drivers/net/ethernet/ibm/emac/tah.h 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Driver for PowerPC 4xx on-chip ethernet controller, TAH support. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright 2007 Benjamin Herrenschmidt, IBM Corp. 8*4882a593Smuzhiyun * <benh@kernel.crashing.org> 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Based on the arch/ppc version of the driver: 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * Copyright 2004 MontaVista Software, Inc. 13*4882a593Smuzhiyun * Matt Porter <mporter@kernel.crashing.org> 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun * Copyright (c) 2005 Eugene Surovegin <ebs@ebshome.net> 16*4882a593Smuzhiyun */ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #ifndef __IBM_NEWEMAC_TAH_H 19*4882a593Smuzhiyun #define __IBM_NEWEMAC_TAH_H 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* TAH */ 22*4882a593Smuzhiyun struct tah_regs { 23*4882a593Smuzhiyun u32 revid; 24*4882a593Smuzhiyun u32 pad[3]; 25*4882a593Smuzhiyun u32 mr; 26*4882a593Smuzhiyun u32 ssr0; 27*4882a593Smuzhiyun u32 ssr1; 28*4882a593Smuzhiyun u32 ssr2; 29*4882a593Smuzhiyun u32 ssr3; 30*4882a593Smuzhiyun u32 ssr4; 31*4882a593Smuzhiyun u32 ssr5; 32*4882a593Smuzhiyun u32 tsr; 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* TAH device */ 37*4882a593Smuzhiyun struct tah_instance { 38*4882a593Smuzhiyun struct tah_regs __iomem *base; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* Only one EMAC whacks us at a time */ 41*4882a593Smuzhiyun struct mutex lock; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* number of EMACs using this TAH */ 44*4882a593Smuzhiyun int users; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* OF device instance */ 47*4882a593Smuzhiyun struct platform_device *ofdev; 48*4882a593Smuzhiyun }; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* TAH engine */ 52*4882a593Smuzhiyun #define TAH_MR_CVR 0x80000000 53*4882a593Smuzhiyun #define TAH_MR_SR 0x40000000 54*4882a593Smuzhiyun #define TAH_MR_ST_256 0x01000000 55*4882a593Smuzhiyun #define TAH_MR_ST_512 0x02000000 56*4882a593Smuzhiyun #define TAH_MR_ST_768 0x03000000 57*4882a593Smuzhiyun #define TAH_MR_ST_1024 0x04000000 58*4882a593Smuzhiyun #define TAH_MR_ST_1280 0x05000000 59*4882a593Smuzhiyun #define TAH_MR_ST_1536 0x06000000 60*4882a593Smuzhiyun #define TAH_MR_TFS_16KB 0x00000000 61*4882a593Smuzhiyun #define TAH_MR_TFS_2KB 0x00200000 62*4882a593Smuzhiyun #define TAH_MR_TFS_4KB 0x00400000 63*4882a593Smuzhiyun #define TAH_MR_TFS_6KB 0x00600000 64*4882a593Smuzhiyun #define TAH_MR_TFS_8KB 0x00800000 65*4882a593Smuzhiyun #define TAH_MR_TFS_10KB 0x00a00000 66*4882a593Smuzhiyun #define TAH_MR_DTFP 0x00100000 67*4882a593Smuzhiyun #define TAH_MR_DIG 0x00080000 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #ifdef CONFIG_IBM_EMAC_TAH 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun int tah_init(void); 72*4882a593Smuzhiyun void tah_exit(void); 73*4882a593Smuzhiyun int tah_attach(struct platform_device *ofdev, int channel); 74*4882a593Smuzhiyun void tah_detach(struct platform_device *ofdev, int channel); 75*4882a593Smuzhiyun void tah_reset(struct platform_device *ofdev); 76*4882a593Smuzhiyun int tah_get_regs_len(struct platform_device *ofdev); 77*4882a593Smuzhiyun void *tah_dump_regs(struct platform_device *ofdev, void *buf); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #else 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun # define tah_init() 0 82*4882a593Smuzhiyun # define tah_exit() do { } while(0) 83*4882a593Smuzhiyun # define tah_attach(x,y) (-ENXIO) 84*4882a593Smuzhiyun # define tah_detach(x,y) do { } while(0) 85*4882a593Smuzhiyun # define tah_reset(x) do { } while(0) 86*4882a593Smuzhiyun # define tah_get_regs_len(x) 0 87*4882a593Smuzhiyun # define tah_dump_regs(x,buf) (buf) 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun #endif /* !CONFIG_IBM_EMAC_TAH */ 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #endif /* __IBM_NEWEMAC_TAH_H */ 92