1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * This file is subject to the terms and conditions of the GNU General Public 3*4882a593Smuzhiyun * License. See the file "COPYING" in the main directory of this archive 4*4882a593Smuzhiyun * for more details. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright (C) 2000, 2003 Ralf Baechle 7*4882a593Smuzhiyun * Copyright (C) 2000 Silicon Graphics, Inc. 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun #ifndef _ASM_SN_IO_H 10*4882a593Smuzhiyun #define _ASM_SN_IO_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #if defined(CONFIG_SGI_IP27) 13*4882a593Smuzhiyun #include <asm/sn/sn0/hubio.h> 14*4882a593Smuzhiyun #endif 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define IIO_ITTE_BASE 0x400160 /* base of translation table entries */ 18*4882a593Smuzhiyun #define IIO_ITTE(bigwin) (IIO_ITTE_BASE + 8*(bigwin)) 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #define IIO_ITTE_OFFSET_BITS 5 /* size of offset field */ 21*4882a593Smuzhiyun #define IIO_ITTE_OFFSET_MASK ((1<<IIO_ITTE_OFFSET_BITS)-1) 22*4882a593Smuzhiyun #define IIO_ITTE_OFFSET_SHIFT 0 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define IIO_ITTE_WIDGET_BITS 4 /* size of widget field */ 25*4882a593Smuzhiyun #define IIO_ITTE_WIDGET_MASK ((1<<IIO_ITTE_WIDGET_BITS)-1) 26*4882a593Smuzhiyun #define IIO_ITTE_WIDGET_SHIFT 8 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define IIO_ITTE_IOSP 1 /* I/O Space bit */ 29*4882a593Smuzhiyun #define IIO_ITTE_IOSP_MASK 1 30*4882a593Smuzhiyun #define IIO_ITTE_IOSP_SHIFT 12 31*4882a593Smuzhiyun #define HUB_PIO_MAP_TO_MEM 0 32*4882a593Smuzhiyun #define HUB_PIO_MAP_TO_IO 1 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define IIO_ITTE_INVALID_WIDGET 3 /* an invalid widget */ 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define IIO_ITTE_PUT(nasid, bigwin, io_or_mem, widget, addr) \ 37*4882a593Smuzhiyun REMOTE_HUB_S((nasid), IIO_ITTE(bigwin), \ 38*4882a593Smuzhiyun (((((addr) >> BWIN_SIZE_BITS) & \ 39*4882a593Smuzhiyun IIO_ITTE_OFFSET_MASK) << IIO_ITTE_OFFSET_SHIFT) | \ 40*4882a593Smuzhiyun (io_or_mem << IIO_ITTE_IOSP_SHIFT) | \ 41*4882a593Smuzhiyun (((widget) & IIO_ITTE_WIDGET_MASK) << IIO_ITTE_WIDGET_SHIFT))) 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #define IIO_ITTE_DISABLE(nasid, bigwin) \ 44*4882a593Smuzhiyun IIO_ITTE_PUT((nasid), HUB_PIO_MAP_TO_MEM, \ 45*4882a593Smuzhiyun (bigwin), IIO_ITTE_INVALID_WIDGET, 0) 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define IIO_ITTE_GET(nasid, bigwin) REMOTE_HUB_PTR((nasid), IIO_ITTE(bigwin)) 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* 50*4882a593Smuzhiyun * Macro which takes the widget number, and returns the 51*4882a593Smuzhiyun * IO PRB address of that widget. 52*4882a593Smuzhiyun * value _x is expected to be a widget number in the range 53*4882a593Smuzhiyun * 0, 8 - 0xF 54*4882a593Smuzhiyun */ 55*4882a593Smuzhiyun #define IIO_IOPRB(_x) (IIO_IOPRB_0 + ( ( (_x) < HUB_WIDGET_ID_MIN ? \ 56*4882a593Smuzhiyun (_x) : \ 57*4882a593Smuzhiyun (_x) - (HUB_WIDGET_ID_MIN-1)) << 3) ) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #endif /* _ASM_SN_IO_H */ 60