1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2000-2004 3*4882a593Smuzhiyun * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef _PCMCIA_H 9*4882a593Smuzhiyun #define _PCMCIA_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <common.h> 12*4882a593Smuzhiyun #include <config.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /* 15*4882a593Smuzhiyun * Allow configuration to select PCMCIA slot, 16*4882a593Smuzhiyun * or try to generate a useful default 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun #if defined(CONFIG_CMD_PCMCIA) 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) 21*4882a593Smuzhiyun # error "PCMCIA Slot not configured" 22*4882a593Smuzhiyun #endif /* !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) */ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* Make sure exactly one slot is defined - we support only one for now */ 25*4882a593Smuzhiyun #if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) 26*4882a593Smuzhiyun #error Neither CONFIG_PCMCIA_SLOT_A nor CONFIG_PCMCIA_SLOT_B configured 27*4882a593Smuzhiyun #endif 28*4882a593Smuzhiyun #if defined(CONFIG_PCMCIA_SLOT_A) && defined(CONFIG_PCMCIA_SLOT_B) 29*4882a593Smuzhiyun #error Both CONFIG_PCMCIA_SLOT_A and CONFIG_PCMCIA_SLOT_B configured 30*4882a593Smuzhiyun #endif 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #ifndef PCMCIA_SOCKETS_NO 33*4882a593Smuzhiyun #define PCMCIA_SOCKETS_NO 1 34*4882a593Smuzhiyun #endif 35*4882a593Smuzhiyun #ifndef PCMCIA_MEM_WIN_NO 36*4882a593Smuzhiyun #define PCMCIA_MEM_WIN_NO 4 37*4882a593Smuzhiyun #endif 38*4882a593Smuzhiyun #define PCMCIA_IO_WIN_NO 2 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* define _slot_ to be able to optimize macros */ 41*4882a593Smuzhiyun #ifdef CONFIG_PCMCIA_SLOT_A 42*4882a593Smuzhiyun # define _slot_ 0 43*4882a593Smuzhiyun # define PCMCIA_SLOT_MSG "slot A" 44*4882a593Smuzhiyun # define PCMCIA_SLOT_x PCMCIA_PSLOT_A 45*4882a593Smuzhiyun #else 46*4882a593Smuzhiyun # define _slot_ 1 47*4882a593Smuzhiyun # define PCMCIA_SLOT_MSG "slot B" 48*4882a593Smuzhiyun # define PCMCIA_SLOT_x PCMCIA_PSLOT_B 49*4882a593Smuzhiyun #endif 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* 52*4882a593Smuzhiyun * This structure is used to address each window in the PCMCIA controller. 53*4882a593Smuzhiyun * 54*4882a593Smuzhiyun * Keep in mind that we assume that pcmcia_win_t[n+1] is mapped directly 55*4882a593Smuzhiyun * after pcmcia_win_t[n]... 56*4882a593Smuzhiyun */ 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun typedef struct { 59*4882a593Smuzhiyun ulong br; 60*4882a593Smuzhiyun ulong or; 61*4882a593Smuzhiyun } pcmcia_win_t; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun /* 64*4882a593Smuzhiyun * Definitions for PCMCIA control registers to operate in IDE mode 65*4882a593Smuzhiyun * 66*4882a593Smuzhiyun * All timing related setup (PCMCIA_SHT, PCMCIA_SST, PCMCIA_SL) 67*4882a593Smuzhiyun * to be done later (depending on CPU clock) 68*4882a593Smuzhiyun */ 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun /* Window 0: 71*4882a593Smuzhiyun * Base: 0xFE100000 CS1 72*4882a593Smuzhiyun * Port Size: 2 Bytes 73*4882a593Smuzhiyun * Port Size: 16 Bit 74*4882a593Smuzhiyun * Common Memory Space 75*4882a593Smuzhiyun */ 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR0 0xFE100000 78*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR0 ( PCMCIA_BSIZE_2 \ 79*4882a593Smuzhiyun | PCMCIA_PPS_16 \ 80*4882a593Smuzhiyun | PCMCIA_PRS_MEM \ 81*4882a593Smuzhiyun | PCMCIA_SLOT_x \ 82*4882a593Smuzhiyun | PCMCIA_PV \ 83*4882a593Smuzhiyun ) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun /* Window 1: 86*4882a593Smuzhiyun * Base: 0xFE100080 CS1 87*4882a593Smuzhiyun * Port Size: 8 Bytes 88*4882a593Smuzhiyun * Port Size: 8 Bit 89*4882a593Smuzhiyun * Common Memory Space 90*4882a593Smuzhiyun */ 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR1 0xFE100080 93*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR1 ( PCMCIA_BSIZE_8 \ 94*4882a593Smuzhiyun | PCMCIA_PPS_8 \ 95*4882a593Smuzhiyun | PCMCIA_PRS_MEM \ 96*4882a593Smuzhiyun | PCMCIA_SLOT_x \ 97*4882a593Smuzhiyun | PCMCIA_PV \ 98*4882a593Smuzhiyun ) 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* Window 2: 101*4882a593Smuzhiyun * Base: 0xFE100100 CS2 102*4882a593Smuzhiyun * Port Size: 8 Bytes 103*4882a593Smuzhiyun * Port Size: 8 Bit 104*4882a593Smuzhiyun * Common Memory Space 105*4882a593Smuzhiyun */ 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR2 0xFE100100 108*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR2 ( PCMCIA_BSIZE_8 \ 109*4882a593Smuzhiyun | PCMCIA_PPS_8 \ 110*4882a593Smuzhiyun | PCMCIA_PRS_MEM \ 111*4882a593Smuzhiyun | PCMCIA_SLOT_x \ 112*4882a593Smuzhiyun | PCMCIA_PV \ 113*4882a593Smuzhiyun ) 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun /* Window 3: 116*4882a593Smuzhiyun * not used 117*4882a593Smuzhiyun */ 118*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR3 0 119*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR3 0 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun /* Window 4: 122*4882a593Smuzhiyun * Base: 0xFE100C00 CS1 123*4882a593Smuzhiyun * Port Size: 2 Bytes 124*4882a593Smuzhiyun * Port Size: 16 Bit 125*4882a593Smuzhiyun * Common Memory Space 126*4882a593Smuzhiyun */ 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR4 0xFE100C00 129*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR4 ( PCMCIA_BSIZE_2 \ 130*4882a593Smuzhiyun | PCMCIA_PPS_16 \ 131*4882a593Smuzhiyun | PCMCIA_PRS_MEM \ 132*4882a593Smuzhiyun | PCMCIA_SLOT_x \ 133*4882a593Smuzhiyun | PCMCIA_PV \ 134*4882a593Smuzhiyun ) 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /* Window 5: 137*4882a593Smuzhiyun * Base: 0xFE100C80 CS1 138*4882a593Smuzhiyun * Port Size: 8 Bytes 139*4882a593Smuzhiyun * Port Size: 8 Bit 140*4882a593Smuzhiyun * Common Memory Space 141*4882a593Smuzhiyun */ 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR5 0xFE100C80 144*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR5 ( PCMCIA_BSIZE_8 \ 145*4882a593Smuzhiyun | PCMCIA_PPS_8 \ 146*4882a593Smuzhiyun | PCMCIA_PRS_MEM \ 147*4882a593Smuzhiyun | PCMCIA_SLOT_x \ 148*4882a593Smuzhiyun | PCMCIA_PV \ 149*4882a593Smuzhiyun ) 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun /* Window 6: 152*4882a593Smuzhiyun * Base: 0xFE100D00 CS2 153*4882a593Smuzhiyun * Port Size: 8 Bytes 154*4882a593Smuzhiyun * Port Size: 8 Bit 155*4882a593Smuzhiyun * Common Memory Space 156*4882a593Smuzhiyun */ 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR6 0xFE100D00 159*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR6 ( PCMCIA_BSIZE_8 \ 160*4882a593Smuzhiyun | PCMCIA_PPS_8 \ 161*4882a593Smuzhiyun | PCMCIA_PRS_MEM \ 162*4882a593Smuzhiyun | PCMCIA_SLOT_x \ 163*4882a593Smuzhiyun | PCMCIA_PV \ 164*4882a593Smuzhiyun ) 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun /* Window 7: 167*4882a593Smuzhiyun * not used 168*4882a593Smuzhiyun */ 169*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_PBR7 0 170*4882a593Smuzhiyun #define CONFIG_SYS_PCMCIA_POR7 0 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun /**********************************************************************/ 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun /* 175*4882a593Smuzhiyun * CIS Tupel codes 176*4882a593Smuzhiyun */ 177*4882a593Smuzhiyun #define CISTPL_NULL 0x00 178*4882a593Smuzhiyun #define CISTPL_DEVICE 0x01 179*4882a593Smuzhiyun #define CISTPL_LONGLINK_CB 0x02 180*4882a593Smuzhiyun #define CISTPL_INDIRECT 0x03 181*4882a593Smuzhiyun #define CISTPL_CONFIG_CB 0x04 182*4882a593Smuzhiyun #define CISTPL_CFTABLE_ENTRY_CB 0x05 183*4882a593Smuzhiyun #define CISTPL_LONGLINK_MFC 0x06 184*4882a593Smuzhiyun #define CISTPL_BAR 0x07 185*4882a593Smuzhiyun #define CISTPL_PWR_MGMNT 0x08 186*4882a593Smuzhiyun #define CISTPL_EXTDEVICE 0x09 187*4882a593Smuzhiyun #define CISTPL_CHECKSUM 0x10 188*4882a593Smuzhiyun #define CISTPL_LONGLINK_A 0x11 189*4882a593Smuzhiyun #define CISTPL_LONGLINK_C 0x12 190*4882a593Smuzhiyun #define CISTPL_LINKTARGET 0x13 191*4882a593Smuzhiyun #define CISTPL_NO_LINK 0x14 192*4882a593Smuzhiyun #define CISTPL_VERS_1 0x15 193*4882a593Smuzhiyun #define CISTPL_ALTSTR 0x16 194*4882a593Smuzhiyun #define CISTPL_DEVICE_A 0x17 195*4882a593Smuzhiyun #define CISTPL_JEDEC_C 0x18 196*4882a593Smuzhiyun #define CISTPL_JEDEC_A 0x19 197*4882a593Smuzhiyun #define CISTPL_CONFIG 0x1a 198*4882a593Smuzhiyun #define CISTPL_CFTABLE_ENTRY 0x1b 199*4882a593Smuzhiyun #define CISTPL_DEVICE_OC 0x1c 200*4882a593Smuzhiyun #define CISTPL_DEVICE_OA 0x1d 201*4882a593Smuzhiyun #define CISTPL_DEVICE_GEO 0x1e 202*4882a593Smuzhiyun #define CISTPL_DEVICE_GEO_A 0x1f 203*4882a593Smuzhiyun #define CISTPL_MANFID 0x20 204*4882a593Smuzhiyun #define CISTPL_FUNCID 0x21 205*4882a593Smuzhiyun #define CISTPL_FUNCE 0x22 206*4882a593Smuzhiyun #define CISTPL_SWIL 0x23 207*4882a593Smuzhiyun #define CISTPL_END 0xff 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun /* 210*4882a593Smuzhiyun * CIS Function ID codes 211*4882a593Smuzhiyun */ 212*4882a593Smuzhiyun #define CISTPL_FUNCID_MULTI 0x00 213*4882a593Smuzhiyun #define CISTPL_FUNCID_MEMORY 0x01 214*4882a593Smuzhiyun #define CISTPL_FUNCID_SERIAL 0x02 215*4882a593Smuzhiyun #define CISTPL_FUNCID_PARALLEL 0x03 216*4882a593Smuzhiyun #define CISTPL_FUNCID_FIXED 0x04 217*4882a593Smuzhiyun #define CISTPL_FUNCID_VIDEO 0x05 218*4882a593Smuzhiyun #define CISTPL_FUNCID_NETWORK 0x06 219*4882a593Smuzhiyun #define CISTPL_FUNCID_AIMS 0x07 220*4882a593Smuzhiyun #define CISTPL_FUNCID_SCSI 0x08 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun /* 223*4882a593Smuzhiyun * Fixed Disk FUNCE codes 224*4882a593Smuzhiyun */ 225*4882a593Smuzhiyun #define CISTPL_IDE_INTERFACE 0x01 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_IFACE 0x01 228*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_MASTER 0x02 229*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_SLAVE 0x03 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun /* First feature byte */ 232*4882a593Smuzhiyun #define CISTPL_IDE_SILICON 0x04 233*4882a593Smuzhiyun #define CISTPL_IDE_UNIQUE 0x08 234*4882a593Smuzhiyun #define CISTPL_IDE_DUAL 0x10 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun /* Second feature byte */ 237*4882a593Smuzhiyun #define CISTPL_IDE_HAS_SLEEP 0x01 238*4882a593Smuzhiyun #define CISTPL_IDE_HAS_STANDBY 0x02 239*4882a593Smuzhiyun #define CISTPL_IDE_HAS_IDLE 0x04 240*4882a593Smuzhiyun #define CISTPL_IDE_LOW_POWER 0x08 241*4882a593Smuzhiyun #define CISTPL_IDE_REG_INHIBIT 0x10 242*4882a593Smuzhiyun #define CISTPL_IDE_HAS_INDEX 0x20 243*4882a593Smuzhiyun #define CISTPL_IDE_IOIS16 0x40 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun #endif 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun #endif /* _PCMCIA_H */ 248