Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __YENTA_H
0003 #define __YENTA_H
0004 
0005 #include <asm/io.h>
0006 
0007 #define CB_SOCKET_EVENT     0x00
0008 #define    CB_CSTSEVENT     0x00000001  /* Card status event */
0009 #define    CB_CD1EVENT      0x00000002  /* Card detect 1 change event */
0010 #define    CB_CD2EVENT      0x00000004  /* Card detect 2 change event */
0011 #define    CB_PWREVENT      0x00000008  /* PWRCYCLE change event */
0012 
0013 #define CB_SOCKET_MASK      0x04
0014 #define    CB_CSTSMASK      0x00000001  /* Card status mask */
0015 #define    CB_CDMASK        0x00000006  /* Card detect 1&2 mask */
0016 #define    CB_PWRMASK       0x00000008  /* PWRCYCLE change mask */
0017 
0018 #define CB_SOCKET_STATE     0x08
0019 #define    CB_CARDSTS       0x00000001  /* CSTSCHG status */
0020 #define    CB_CDETECT1      0x00000002  /* Card detect status 1 */
0021 #define    CB_CDETECT2      0x00000004  /* Card detect status 2 */
0022 #define    CB_PWRCYCLE      0x00000008  /* Socket powered */
0023 #define    CB_16BITCARD     0x00000010  /* 16-bit card detected */
0024 #define    CB_CBCARD        0x00000020  /* CardBus card detected */
0025 #define    CB_IREQCINT      0x00000040  /* READY(xIRQ)/xCINT high */
0026 #define    CB_NOTACARD      0x00000080  /* Unrecognizable PC card detected */
0027 #define    CB_DATALOST      0x00000100  /* Potential data loss due to card removal */
0028 #define    CB_BADVCCREQ     0x00000200  /* Invalid Vcc request by host software */
0029 #define    CB_5VCARD        0x00000400  /* Card Vcc at 5.0 volts? */
0030 #define    CB_3VCARD        0x00000800  /* Card Vcc at 3.3 volts? */
0031 #define    CB_XVCARD        0x00001000  /* Card Vcc at X.X volts? */
0032 #define    CB_YVCARD        0x00002000  /* Card Vcc at Y.Y volts? */
0033 #define    CB_5VSOCKET      0x10000000  /* Socket Vcc at 5.0 volts? */
0034 #define    CB_3VSOCKET      0x20000000  /* Socket Vcc at 3.3 volts? */
0035 #define    CB_XVSOCKET      0x40000000  /* Socket Vcc at X.X volts? */
0036 #define    CB_YVSOCKET      0x80000000  /* Socket Vcc at Y.Y volts? */
0037 
0038 #define CB_SOCKET_FORCE     0x0C
0039 #define    CB_FCARDSTS      0x00000001  /* Force CSTSCHG */
0040 #define    CB_FCDETECT1     0x00000002  /* Force CD1EVENT */
0041 #define    CB_FCDETECT2     0x00000004  /* Force CD2EVENT */
0042 #define    CB_FPWRCYCLE     0x00000008  /* Force PWREVENT */
0043 #define    CB_F16BITCARD    0x00000010  /* Force 16-bit PCMCIA card */
0044 #define    CB_FCBCARD       0x00000020  /* Force CardBus line */
0045 #define    CB_FNOTACARD     0x00000080  /* Force NOTACARD */
0046 #define    CB_FDATALOST     0x00000100  /* Force data lost */
0047 #define    CB_FBADVCCREQ    0x00000200  /* Force bad Vcc request */
0048 #define    CB_F5VCARD       0x00000400  /* Force 5.0 volt card */
0049 #define    CB_F3VCARD       0x00000800  /* Force 3.3 volt card */
0050 #define    CB_FXVCARD       0x00001000  /* Force X.X volt card */
0051 #define    CB_FYVCARD       0x00002000  /* Force Y.Y volt card */
0052 #define    CB_CVSTEST       0x00004000  /* Card VS test */
0053 
0054 #define CB_SOCKET_CONTROL   0x10
0055 #define  CB_SC_VPP_MASK     0x00000007
0056 #define   CB_SC_VPP_OFF     0x00000000
0057 #define   CB_SC_VPP_12V     0x00000001
0058 #define   CB_SC_VPP_5V      0x00000002
0059 #define   CB_SC_VPP_3V      0x00000003
0060 #define   CB_SC_VPP_XV      0x00000004
0061 #define   CB_SC_VPP_YV      0x00000005
0062 #define  CB_SC_VCC_MASK     0x00000070
0063 #define   CB_SC_VCC_OFF     0x00000000
0064 #define   CB_SC_VCC_5V      0x00000020
0065 #define   CB_SC_VCC_3V      0x00000030
0066 #define   CB_SC_VCC_XV      0x00000040
0067 #define   CB_SC_VCC_YV      0x00000050
0068 #define  CB_SC_CCLK_STOP    0x00000080
0069 
0070 #define CB_SOCKET_POWER     0x20
0071 #define    CB_SKTACCES      0x02000000  /* A PC card access has occurred (clear on read) */
0072 #define    CB_SKTMODE       0x01000000  /* Clock frequency has changed (clear on read) */
0073 #define    CB_CLKCTRLEN     0x00010000  /* Clock control enabled (RW) */
0074 #define    CB_CLKCTRL       0x00000001  /* Stop(0) or slow(1) CB clock (RW) */
0075 
0076 /*
0077  * Cardbus configuration space
0078  */
0079 #define CB_BRIDGE_BASE(m)   (0x1c + 8*(m))
0080 #define CB_BRIDGE_LIMIT(m)  (0x20 + 8*(m))
0081 #define CB_BRIDGE_CONTROL   0x3e
0082 #define   CB_BRIDGE_CPERREN 0x00000001
0083 #define   CB_BRIDGE_CSERREN 0x00000002
0084 #define   CB_BRIDGE_ISAEN   0x00000004
0085 #define   CB_BRIDGE_VGAEN   0x00000008
0086 #define   CB_BRIDGE_MABTMODE    0x00000020
0087 #define   CB_BRIDGE_CRST    0x00000040
0088 #define   CB_BRIDGE_INTR    0x00000080
0089 #define   CB_BRIDGE_PREFETCH0   0x00000100
0090 #define   CB_BRIDGE_PREFETCH1   0x00000200
0091 #define   CB_BRIDGE_POSTEN  0x00000400
0092 #define CB_LEGACY_MODE_BASE 0x44
0093 
0094 /*
0095  * ExCA area extensions in Yenta
0096  */
0097 #define CB_MEM_PAGE(map)    (0x40 + (map))
0098 
0099 
0100 /* control how 16bit cards are powered */
0101 #define YENTA_16BIT_POWER_EXCA  0x00000001
0102 #define YENTA_16BIT_POWER_DF    0x00000002
0103 
0104 
0105 struct yenta_socket;
0106 
0107 struct cardbus_type {
0108     int (*override)(struct yenta_socket *);
0109     void    (*save_state)(struct yenta_socket *);
0110     void    (*restore_state)(struct yenta_socket *);
0111     int (*sock_init)(struct yenta_socket *);
0112 };
0113 
0114 struct yenta_socket {
0115     struct pci_dev *dev;
0116     int cb_irq, io_irq;
0117     void __iomem *base;
0118     struct timer_list poll_timer;
0119 
0120     struct pcmcia_socket socket;
0121     struct cardbus_type *type;
0122 
0123     u32 flags;
0124 
0125     /* for PCI interrupt probing */
0126     unsigned int probe_status;
0127 
0128     /* A few words of private data for special stuff of overrides... */
0129     unsigned int private[8];
0130 
0131     /* PCI saved state */
0132     u32 saved_state[2];
0133 };
0134 
0135 
0136 #endif