Commit abe8806901086b6cb29b4d4d4c616bbff3f0e7e1

Authored by Ken Kawasaki
Committed by David S. Miller
1 parent 7ad6848c7e

pcnet_cs: add cis of KTI PE520 pcmcia network card

pcnet_cs,serial_cs:

add cis of KTI PE520 pcmcia network card,
and serial card(Sierra Wireless AC860).

Signed-off-by: Ken Kawasaki <ken_kawasaki@spring.nifty.jp>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 5 changed files with 28 additions and 4 deletions Inline Diff

drivers/net/pcmcia/pcnet_cs.c
1 /*====================================================================== 1 /*======================================================================
2 2
3 A PCMCIA ethernet driver for NS8390-based cards 3 A PCMCIA ethernet driver for NS8390-based cards
4 4
5 This driver supports the D-Link DE-650 and Linksys EthernetCard 5 This driver supports the D-Link DE-650 and Linksys EthernetCard
6 cards, the newer D-Link and Linksys combo cards, Accton EN2212 6 cards, the newer D-Link and Linksys combo cards, Accton EN2212
7 cards, the RPTI EP400, and the PreMax PE-200 in non-shared-memory 7 cards, the RPTI EP400, and the PreMax PE-200 in non-shared-memory
8 mode, and the IBM Credit Card Adapter, the NE4100, the Thomas 8 mode, and the IBM Credit Card Adapter, the NE4100, the Thomas
9 Conrad ethernet card, and the Kingston KNE-PCM/x in shared-memory 9 Conrad ethernet card, and the Kingston KNE-PCM/x in shared-memory
10 mode. It will also handle the Socket EA card in either mode. 10 mode. It will also handle the Socket EA card in either mode.
11 11
12 Copyright (C) 1999 David A. Hinds -- dahinds@users.sourceforge.net 12 Copyright (C) 1999 David A. Hinds -- dahinds@users.sourceforge.net
13 13
14 pcnet_cs.c 1.153 2003/11/09 18:53:09 14 pcnet_cs.c 1.153 2003/11/09 18:53:09
15 15
16 The network driver code is based on Donald Becker's NE2000 code: 16 The network driver code is based on Donald Becker's NE2000 code:
17 17
18 Written 1992,1993 by Donald Becker. 18 Written 1992,1993 by Donald Becker.
19 Copyright 1993 United States Government as represented by the 19 Copyright 1993 United States Government as represented by the
20 Director, National Security Agency. This software may be used and 20 Director, National Security Agency. This software may be used and
21 distributed according to the terms of the GNU General Public License, 21 distributed according to the terms of the GNU General Public License,
22 incorporated herein by reference. 22 incorporated herein by reference.
23 Donald Becker may be reached at becker@scyld.com 23 Donald Becker may be reached at becker@scyld.com
24 24
25 Based also on Keith Moore's changes to Don Becker's code, for IBM 25 Based also on Keith Moore's changes to Don Becker's code, for IBM
26 CCAE support. Drivers merged back together, and shared-memory 26 CCAE support. Drivers merged back together, and shared-memory
27 Socket EA support added, by Ken Raeburn, September 1995. 27 Socket EA support added, by Ken Raeburn, September 1995.
28 28
29 ======================================================================*/ 29 ======================================================================*/
30 30
31 #include <linux/kernel.h> 31 #include <linux/kernel.h>
32 #include <linux/module.h> 32 #include <linux/module.h>
33 #include <linux/init.h> 33 #include <linux/init.h>
34 #include <linux/ptrace.h> 34 #include <linux/ptrace.h>
35 #include <linux/slab.h> 35 #include <linux/slab.h>
36 #include <linux/string.h> 36 #include <linux/string.h>
37 #include <linux/timer.h> 37 #include <linux/timer.h>
38 #include <linux/delay.h> 38 #include <linux/delay.h>
39 #include <linux/ethtool.h> 39 #include <linux/ethtool.h>
40 #include <linux/netdevice.h> 40 #include <linux/netdevice.h>
41 #include <linux/log2.h> 41 #include <linux/log2.h>
42 #include <linux/etherdevice.h> 42 #include <linux/etherdevice.h>
43 #include <linux/mii.h> 43 #include <linux/mii.h>
44 #include "../8390.h" 44 #include "../8390.h"
45 45
46 #include <pcmcia/cs_types.h> 46 #include <pcmcia/cs_types.h>
47 #include <pcmcia/cs.h> 47 #include <pcmcia/cs.h>
48 #include <pcmcia/cistpl.h> 48 #include <pcmcia/cistpl.h>
49 #include <pcmcia/ciscode.h> 49 #include <pcmcia/ciscode.h>
50 #include <pcmcia/ds.h> 50 #include <pcmcia/ds.h>
51 #include <pcmcia/cisreg.h> 51 #include <pcmcia/cisreg.h>
52 52
53 #include <asm/io.h> 53 #include <asm/io.h>
54 #include <asm/system.h> 54 #include <asm/system.h>
55 #include <asm/byteorder.h> 55 #include <asm/byteorder.h>
56 #include <asm/uaccess.h> 56 #include <asm/uaccess.h>
57 57
58 #define PCNET_CMD 0x00 58 #define PCNET_CMD 0x00
59 #define PCNET_DATAPORT 0x10 /* NatSemi-defined port window offset. */ 59 #define PCNET_DATAPORT 0x10 /* NatSemi-defined port window offset. */
60 #define PCNET_RESET 0x1f /* Issue a read to reset, a write to clear. */ 60 #define PCNET_RESET 0x1f /* Issue a read to reset, a write to clear. */
61 #define PCNET_MISC 0x18 /* For IBM CCAE and Socket EA cards */ 61 #define PCNET_MISC 0x18 /* For IBM CCAE and Socket EA cards */
62 62
63 #define PCNET_START_PG 0x40 /* First page of TX buffer */ 63 #define PCNET_START_PG 0x40 /* First page of TX buffer */
64 #define PCNET_STOP_PG 0x80 /* Last page +1 of RX ring */ 64 #define PCNET_STOP_PG 0x80 /* Last page +1 of RX ring */
65 65
66 /* Socket EA cards have a larger packet buffer */ 66 /* Socket EA cards have a larger packet buffer */
67 #define SOCKET_START_PG 0x01 67 #define SOCKET_START_PG 0x01
68 #define SOCKET_STOP_PG 0xff 68 #define SOCKET_STOP_PG 0xff
69 69
70 #define PCNET_RDC_TIMEOUT (2*HZ/100) /* Max wait in jiffies for Tx RDC */ 70 #define PCNET_RDC_TIMEOUT (2*HZ/100) /* Max wait in jiffies for Tx RDC */
71 71
72 static const char *if_names[] = { "auto", "10baseT", "10base2"}; 72 static const char *if_names[] = { "auto", "10baseT", "10base2"};
73 73
74 74
75 /*====================================================================*/ 75 /*====================================================================*/
76 76
77 /* Module parameters */ 77 /* Module parameters */
78 78
79 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>"); 79 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
80 MODULE_DESCRIPTION("NE2000 compatible PCMCIA ethernet driver"); 80 MODULE_DESCRIPTION("NE2000 compatible PCMCIA ethernet driver");
81 MODULE_LICENSE("GPL"); 81 MODULE_LICENSE("GPL");
82 82
83 #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0) 83 #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
84 84
85 INT_MODULE_PARM(if_port, 1); /* Transceiver type */ 85 INT_MODULE_PARM(if_port, 1); /* Transceiver type */
86 INT_MODULE_PARM(use_big_buf, 1); /* use 64K packet buffer? */ 86 INT_MODULE_PARM(use_big_buf, 1); /* use 64K packet buffer? */
87 INT_MODULE_PARM(mem_speed, 0); /* shared mem speed, in ns */ 87 INT_MODULE_PARM(mem_speed, 0); /* shared mem speed, in ns */
88 INT_MODULE_PARM(delay_output, 0); /* pause after xmit? */ 88 INT_MODULE_PARM(delay_output, 0); /* pause after xmit? */
89 INT_MODULE_PARM(delay_time, 4); /* in usec */ 89 INT_MODULE_PARM(delay_time, 4); /* in usec */
90 INT_MODULE_PARM(use_shmem, -1); /* use shared memory? */ 90 INT_MODULE_PARM(use_shmem, -1); /* use shared memory? */
91 INT_MODULE_PARM(full_duplex, 0); /* full duplex? */ 91 INT_MODULE_PARM(full_duplex, 0); /* full duplex? */
92 92
93 /* Ugh! Let the user hardwire the hardware address for queer cards */ 93 /* Ugh! Let the user hardwire the hardware address for queer cards */
94 static int hw_addr[6] = { 0, /* ... */ }; 94 static int hw_addr[6] = { 0, /* ... */ };
95 module_param_array(hw_addr, int, NULL, 0); 95 module_param_array(hw_addr, int, NULL, 0);
96 96
97 /*====================================================================*/ 97 /*====================================================================*/
98 98
99 static void mii_phy_probe(struct net_device *dev); 99 static void mii_phy_probe(struct net_device *dev);
100 static int pcnet_config(struct pcmcia_device *link); 100 static int pcnet_config(struct pcmcia_device *link);
101 static void pcnet_release(struct pcmcia_device *link); 101 static void pcnet_release(struct pcmcia_device *link);
102 static int pcnet_open(struct net_device *dev); 102 static int pcnet_open(struct net_device *dev);
103 static int pcnet_close(struct net_device *dev); 103 static int pcnet_close(struct net_device *dev);
104 static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 104 static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
105 static const struct ethtool_ops netdev_ethtool_ops; 105 static const struct ethtool_ops netdev_ethtool_ops;
106 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id); 106 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id);
107 static void ei_watchdog(u_long arg); 107 static void ei_watchdog(u_long arg);
108 static void pcnet_reset_8390(struct net_device *dev); 108 static void pcnet_reset_8390(struct net_device *dev);
109 static int set_config(struct net_device *dev, struct ifmap *map); 109 static int set_config(struct net_device *dev, struct ifmap *map);
110 static int setup_shmem_window(struct pcmcia_device *link, int start_pg, 110 static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
111 int stop_pg, int cm_offset); 111 int stop_pg, int cm_offset);
112 static int setup_dma_config(struct pcmcia_device *link, int start_pg, 112 static int setup_dma_config(struct pcmcia_device *link, int start_pg,
113 int stop_pg); 113 int stop_pg);
114 114
115 static void pcnet_detach(struct pcmcia_device *p_dev); 115 static void pcnet_detach(struct pcmcia_device *p_dev);
116 116
117 static dev_info_t dev_info = "pcnet_cs"; 117 static dev_info_t dev_info = "pcnet_cs";
118 118
119 /*====================================================================*/ 119 /*====================================================================*/
120 120
121 typedef struct hw_info_t { 121 typedef struct hw_info_t {
122 u_int offset; 122 u_int offset;
123 u_char a0, a1, a2; 123 u_char a0, a1, a2;
124 u_int flags; 124 u_int flags;
125 } hw_info_t; 125 } hw_info_t;
126 126
127 #define DELAY_OUTPUT 0x01 127 #define DELAY_OUTPUT 0x01
128 #define HAS_MISC_REG 0x02 128 #define HAS_MISC_REG 0x02
129 #define USE_BIG_BUF 0x04 129 #define USE_BIG_BUF 0x04
130 #define HAS_IBM_MISC 0x08 130 #define HAS_IBM_MISC 0x08
131 #define IS_DL10019 0x10 131 #define IS_DL10019 0x10
132 #define IS_DL10022 0x20 132 #define IS_DL10022 0x20
133 #define HAS_MII 0x40 133 #define HAS_MII 0x40
134 #define USE_SHMEM 0x80 /* autodetected */ 134 #define USE_SHMEM 0x80 /* autodetected */
135 135
136 #define AM79C9XX_HOME_PHY 0x00006B90 /* HomePNA PHY */ 136 #define AM79C9XX_HOME_PHY 0x00006B90 /* HomePNA PHY */
137 #define AM79C9XX_ETH_PHY 0x00006B70 /* 10baseT PHY */ 137 #define AM79C9XX_ETH_PHY 0x00006B70 /* 10baseT PHY */
138 #define MII_PHYID_REV_MASK 0xfffffff0 138 #define MII_PHYID_REV_MASK 0xfffffff0
139 #define MII_PHYID_REG1 0x02 139 #define MII_PHYID_REG1 0x02
140 #define MII_PHYID_REG2 0x03 140 #define MII_PHYID_REG2 0x03
141 141
142 static hw_info_t hw_info[] = { 142 static hw_info_t hw_info[] = {
143 { /* Accton EN2212 */ 0x0ff0, 0x00, 0x00, 0xe8, DELAY_OUTPUT }, 143 { /* Accton EN2212 */ 0x0ff0, 0x00, 0x00, 0xe8, DELAY_OUTPUT },
144 { /* Allied Telesis LA-PCM */ 0x0ff0, 0x00, 0x00, 0xf4, 0 }, 144 { /* Allied Telesis LA-PCM */ 0x0ff0, 0x00, 0x00, 0xf4, 0 },
145 { /* APEX MultiCard */ 0x03f4, 0x00, 0x20, 0xe5, 0 }, 145 { /* APEX MultiCard */ 0x03f4, 0x00, 0x20, 0xe5, 0 },
146 { /* ASANTE FriendlyNet */ 0x4910, 0x00, 0x00, 0x94, 146 { /* ASANTE FriendlyNet */ 0x4910, 0x00, 0x00, 0x94,
147 DELAY_OUTPUT | HAS_IBM_MISC }, 147 DELAY_OUTPUT | HAS_IBM_MISC },
148 { /* Danpex EN-6200P2 */ 0x0110, 0x00, 0x40, 0xc7, 0 }, 148 { /* Danpex EN-6200P2 */ 0x0110, 0x00, 0x40, 0xc7, 0 },
149 { /* DataTrek NetCard */ 0x0ff0, 0x00, 0x20, 0xe8, 0 }, 149 { /* DataTrek NetCard */ 0x0ff0, 0x00, 0x20, 0xe8, 0 },
150 { /* Dayna CommuniCard E */ 0x0110, 0x00, 0x80, 0x19, 0 }, 150 { /* Dayna CommuniCard E */ 0x0110, 0x00, 0x80, 0x19, 0 },
151 { /* D-Link DE-650 */ 0x0040, 0x00, 0x80, 0xc8, 0 }, 151 { /* D-Link DE-650 */ 0x0040, 0x00, 0x80, 0xc8, 0 },
152 { /* EP-210 Ethernet */ 0x0110, 0x00, 0x40, 0x33, 0 }, 152 { /* EP-210 Ethernet */ 0x0110, 0x00, 0x40, 0x33, 0 },
153 { /* EP4000 Ethernet */ 0x01c0, 0x00, 0x00, 0xb4, 0 }, 153 { /* EP4000 Ethernet */ 0x01c0, 0x00, 0x00, 0xb4, 0 },
154 { /* Epson EEN10B */ 0x0ff0, 0x00, 0x00, 0x48, 154 { /* Epson EEN10B */ 0x0ff0, 0x00, 0x00, 0x48,
155 HAS_MISC_REG | HAS_IBM_MISC }, 155 HAS_MISC_REG | HAS_IBM_MISC },
156 { /* ELECOM Laneed LD-CDWA */ 0xb8, 0x08, 0x00, 0x42, 0 }, 156 { /* ELECOM Laneed LD-CDWA */ 0xb8, 0x08, 0x00, 0x42, 0 },
157 { /* Hypertec Ethernet */ 0x01c0, 0x00, 0x40, 0x4c, 0 }, 157 { /* Hypertec Ethernet */ 0x01c0, 0x00, 0x40, 0x4c, 0 },
158 { /* IBM CCAE */ 0x0ff0, 0x08, 0x00, 0x5a, 158 { /* IBM CCAE */ 0x0ff0, 0x08, 0x00, 0x5a,
159 HAS_MISC_REG | HAS_IBM_MISC }, 159 HAS_MISC_REG | HAS_IBM_MISC },
160 { /* IBM CCAE */ 0x0ff0, 0x00, 0x04, 0xac, 160 { /* IBM CCAE */ 0x0ff0, 0x00, 0x04, 0xac,
161 HAS_MISC_REG | HAS_IBM_MISC }, 161 HAS_MISC_REG | HAS_IBM_MISC },
162 { /* IBM CCAE */ 0x0ff0, 0x00, 0x06, 0x29, 162 { /* IBM CCAE */ 0x0ff0, 0x00, 0x06, 0x29,
163 HAS_MISC_REG | HAS_IBM_MISC }, 163 HAS_MISC_REG | HAS_IBM_MISC },
164 { /* IBM FME */ 0x0374, 0x08, 0x00, 0x5a, 164 { /* IBM FME */ 0x0374, 0x08, 0x00, 0x5a,
165 HAS_MISC_REG | HAS_IBM_MISC }, 165 HAS_MISC_REG | HAS_IBM_MISC },
166 { /* IBM FME */ 0x0374, 0x00, 0x04, 0xac, 166 { /* IBM FME */ 0x0374, 0x00, 0x04, 0xac,
167 HAS_MISC_REG | HAS_IBM_MISC }, 167 HAS_MISC_REG | HAS_IBM_MISC },
168 { /* Kansai KLA-PCM/T */ 0x0ff0, 0x00, 0x60, 0x87, 168 { /* Kansai KLA-PCM/T */ 0x0ff0, 0x00, 0x60, 0x87,
169 HAS_MISC_REG | HAS_IBM_MISC }, 169 HAS_MISC_REG | HAS_IBM_MISC },
170 { /* NSC DP83903 */ 0x0374, 0x08, 0x00, 0x17, 170 { /* NSC DP83903 */ 0x0374, 0x08, 0x00, 0x17,
171 HAS_MISC_REG | HAS_IBM_MISC }, 171 HAS_MISC_REG | HAS_IBM_MISC },
172 { /* NSC DP83903 */ 0x0374, 0x00, 0xc0, 0xa8, 172 { /* NSC DP83903 */ 0x0374, 0x00, 0xc0, 0xa8,
173 HAS_MISC_REG | HAS_IBM_MISC }, 173 HAS_MISC_REG | HAS_IBM_MISC },
174 { /* NSC DP83903 */ 0x0374, 0x00, 0xa0, 0xb0, 174 { /* NSC DP83903 */ 0x0374, 0x00, 0xa0, 0xb0,
175 HAS_MISC_REG | HAS_IBM_MISC }, 175 HAS_MISC_REG | HAS_IBM_MISC },
176 { /* NSC DP83903 */ 0x0198, 0x00, 0x20, 0xe0, 176 { /* NSC DP83903 */ 0x0198, 0x00, 0x20, 0xe0,
177 HAS_MISC_REG | HAS_IBM_MISC }, 177 HAS_MISC_REG | HAS_IBM_MISC },
178 { /* I-O DATA PCLA/T */ 0x0ff0, 0x00, 0xa0, 0xb0, 0 }, 178 { /* I-O DATA PCLA/T */ 0x0ff0, 0x00, 0xa0, 0xb0, 0 },
179 { /* Katron PE-520 */ 0x0110, 0x00, 0x40, 0xf6, 0 }, 179 { /* Katron PE-520 */ 0x0110, 0x00, 0x40, 0xf6, 0 },
180 { /* Kingston KNE-PCM/x */ 0x0ff0, 0x00, 0xc0, 0xf0, 180 { /* Kingston KNE-PCM/x */ 0x0ff0, 0x00, 0xc0, 0xf0,
181 HAS_MISC_REG | HAS_IBM_MISC }, 181 HAS_MISC_REG | HAS_IBM_MISC },
182 { /* Kingston KNE-PCM/x */ 0x0ff0, 0xe2, 0x0c, 0x0f, 182 { /* Kingston KNE-PCM/x */ 0x0ff0, 0xe2, 0x0c, 0x0f,
183 HAS_MISC_REG | HAS_IBM_MISC }, 183 HAS_MISC_REG | HAS_IBM_MISC },
184 { /* Kingston KNE-PC2 */ 0x0180, 0x00, 0xc0, 0xf0, 0 }, 184 { /* Kingston KNE-PC2 */ 0x0180, 0x00, 0xc0, 0xf0, 0 },
185 { /* Maxtech PCN2000 */ 0x5000, 0x00, 0x00, 0xe8, 0 }, 185 { /* Maxtech PCN2000 */ 0x5000, 0x00, 0x00, 0xe8, 0 },
186 { /* NDC Instant-Link */ 0x003a, 0x00, 0x80, 0xc6, 0 }, 186 { /* NDC Instant-Link */ 0x003a, 0x00, 0x80, 0xc6, 0 },
187 { /* NE2000 Compatible */ 0x0ff0, 0x00, 0xa0, 0x0c, 0 }, 187 { /* NE2000 Compatible */ 0x0ff0, 0x00, 0xa0, 0x0c, 0 },
188 { /* Network General Sniffer */ 0x0ff0, 0x00, 0x00, 0x65, 188 { /* Network General Sniffer */ 0x0ff0, 0x00, 0x00, 0x65,
189 HAS_MISC_REG | HAS_IBM_MISC }, 189 HAS_MISC_REG | HAS_IBM_MISC },
190 { /* Panasonic VEL211 */ 0x0ff0, 0x00, 0x80, 0x45, 190 { /* Panasonic VEL211 */ 0x0ff0, 0x00, 0x80, 0x45,
191 HAS_MISC_REG | HAS_IBM_MISC }, 191 HAS_MISC_REG | HAS_IBM_MISC },
192 { /* PreMax PE-200 */ 0x07f0, 0x00, 0x20, 0xe0, 0 }, 192 { /* PreMax PE-200 */ 0x07f0, 0x00, 0x20, 0xe0, 0 },
193 { /* RPTI EP400 */ 0x0110, 0x00, 0x40, 0x95, 0 }, 193 { /* RPTI EP400 */ 0x0110, 0x00, 0x40, 0x95, 0 },
194 { /* SCM Ethernet */ 0x0ff0, 0x00, 0x20, 0xcb, 0 }, 194 { /* SCM Ethernet */ 0x0ff0, 0x00, 0x20, 0xcb, 0 },
195 { /* Socket EA */ 0x4000, 0x00, 0xc0, 0x1b, 195 { /* Socket EA */ 0x4000, 0x00, 0xc0, 0x1b,
196 DELAY_OUTPUT | HAS_MISC_REG | USE_BIG_BUF }, 196 DELAY_OUTPUT | HAS_MISC_REG | USE_BIG_BUF },
197 { /* Socket LP-E CF+ */ 0x01c0, 0x00, 0xc0, 0x1b, 0 }, 197 { /* Socket LP-E CF+ */ 0x01c0, 0x00, 0xc0, 0x1b, 0 },
198 { /* SuperSocket RE450T */ 0x0110, 0x00, 0xe0, 0x98, 0 }, 198 { /* SuperSocket RE450T */ 0x0110, 0x00, 0xe0, 0x98, 0 },
199 { /* Volktek NPL-402CT */ 0x0060, 0x00, 0x40, 0x05, 0 }, 199 { /* Volktek NPL-402CT */ 0x0060, 0x00, 0x40, 0x05, 0 },
200 { /* NEC PC-9801N-J12 */ 0x0ff0, 0x00, 0x00, 0x4c, 0 }, 200 { /* NEC PC-9801N-J12 */ 0x0ff0, 0x00, 0x00, 0x4c, 0 },
201 { /* PCMCIA Technology OEM */ 0x01c8, 0x00, 0xa0, 0x0c, 0 } 201 { /* PCMCIA Technology OEM */ 0x01c8, 0x00, 0xa0, 0x0c, 0 }
202 }; 202 };
203 203
204 #define NR_INFO ARRAY_SIZE(hw_info) 204 #define NR_INFO ARRAY_SIZE(hw_info)
205 205
206 static hw_info_t default_info = { 0, 0, 0, 0, 0 }; 206 static hw_info_t default_info = { 0, 0, 0, 0, 0 };
207 static hw_info_t dl10019_info = { 0, 0, 0, 0, IS_DL10019|HAS_MII }; 207 static hw_info_t dl10019_info = { 0, 0, 0, 0, IS_DL10019|HAS_MII };
208 static hw_info_t dl10022_info = { 0, 0, 0, 0, IS_DL10022|HAS_MII }; 208 static hw_info_t dl10022_info = { 0, 0, 0, 0, IS_DL10022|HAS_MII };
209 209
210 typedef struct pcnet_dev_t { 210 typedef struct pcnet_dev_t {
211 struct pcmcia_device *p_dev; 211 struct pcmcia_device *p_dev;
212 dev_node_t node; 212 dev_node_t node;
213 u_int flags; 213 u_int flags;
214 void __iomem *base; 214 void __iomem *base;
215 struct timer_list watchdog; 215 struct timer_list watchdog;
216 int stale, fast_poll; 216 int stale, fast_poll;
217 u_char phy_id; 217 u_char phy_id;
218 u_char eth_phy, pna_phy; 218 u_char eth_phy, pna_phy;
219 u_short link_status; 219 u_short link_status;
220 u_long mii_reset; 220 u_long mii_reset;
221 } pcnet_dev_t; 221 } pcnet_dev_t;
222 222
223 static inline pcnet_dev_t *PRIV(struct net_device *dev) 223 static inline pcnet_dev_t *PRIV(struct net_device *dev)
224 { 224 {
225 char *p = netdev_priv(dev); 225 char *p = netdev_priv(dev);
226 return (pcnet_dev_t *)(p + sizeof(struct ei_device)); 226 return (pcnet_dev_t *)(p + sizeof(struct ei_device));
227 } 227 }
228 228
229 static const struct net_device_ops pcnet_netdev_ops = { 229 static const struct net_device_ops pcnet_netdev_ops = {
230 .ndo_open = pcnet_open, 230 .ndo_open = pcnet_open,
231 .ndo_stop = pcnet_close, 231 .ndo_stop = pcnet_close,
232 .ndo_set_config = set_config, 232 .ndo_set_config = set_config,
233 .ndo_start_xmit = ei_start_xmit, 233 .ndo_start_xmit = ei_start_xmit,
234 .ndo_get_stats = ei_get_stats, 234 .ndo_get_stats = ei_get_stats,
235 .ndo_do_ioctl = ei_ioctl, 235 .ndo_do_ioctl = ei_ioctl,
236 .ndo_set_multicast_list = ei_set_multicast_list, 236 .ndo_set_multicast_list = ei_set_multicast_list,
237 .ndo_tx_timeout = ei_tx_timeout, 237 .ndo_tx_timeout = ei_tx_timeout,
238 .ndo_change_mtu = eth_change_mtu, 238 .ndo_change_mtu = eth_change_mtu,
239 .ndo_set_mac_address = eth_mac_addr, 239 .ndo_set_mac_address = eth_mac_addr,
240 .ndo_validate_addr = eth_validate_addr, 240 .ndo_validate_addr = eth_validate_addr,
241 #ifdef CONFIG_NET_POLL_CONTROLLER 241 #ifdef CONFIG_NET_POLL_CONTROLLER
242 .ndo_poll_controller = ei_poll, 242 .ndo_poll_controller = ei_poll,
243 #endif 243 #endif
244 }; 244 };
245 245
246 /*====================================================================== 246 /*======================================================================
247 247
248 pcnet_attach() creates an "instance" of the driver, allocating 248 pcnet_attach() creates an "instance" of the driver, allocating
249 local data structures for one device. The device is registered 249 local data structures for one device. The device is registered
250 with Card Services. 250 with Card Services.
251 251
252 ======================================================================*/ 252 ======================================================================*/
253 253
254 static int pcnet_probe(struct pcmcia_device *link) 254 static int pcnet_probe(struct pcmcia_device *link)
255 { 255 {
256 pcnet_dev_t *info; 256 pcnet_dev_t *info;
257 struct net_device *dev; 257 struct net_device *dev;
258 258
259 dev_dbg(&link->dev, "pcnet_attach()\n"); 259 dev_dbg(&link->dev, "pcnet_attach()\n");
260 260
261 /* Create new ethernet device */ 261 /* Create new ethernet device */
262 dev = __alloc_ei_netdev(sizeof(pcnet_dev_t)); 262 dev = __alloc_ei_netdev(sizeof(pcnet_dev_t));
263 if (!dev) return -ENOMEM; 263 if (!dev) return -ENOMEM;
264 info = PRIV(dev); 264 info = PRIV(dev);
265 info->p_dev = link; 265 info->p_dev = link;
266 link->priv = dev; 266 link->priv = dev;
267 267
268 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; 268 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
269 link->conf.Attributes = CONF_ENABLE_IRQ; 269 link->conf.Attributes = CONF_ENABLE_IRQ;
270 link->conf.IntType = INT_MEMORY_AND_IO; 270 link->conf.IntType = INT_MEMORY_AND_IO;
271 271
272 dev->netdev_ops = &pcnet_netdev_ops; 272 dev->netdev_ops = &pcnet_netdev_ops;
273 273
274 return pcnet_config(link); 274 return pcnet_config(link);
275 } /* pcnet_attach */ 275 } /* pcnet_attach */
276 276
277 /*====================================================================== 277 /*======================================================================
278 278
279 This deletes a driver "instance". The device is de-registered 279 This deletes a driver "instance". The device is de-registered
280 with Card Services. If it has been released, all local data 280 with Card Services. If it has been released, all local data
281 structures are freed. Otherwise, the structures will be freed 281 structures are freed. Otherwise, the structures will be freed
282 when the device is released. 282 when the device is released.
283 283
284 ======================================================================*/ 284 ======================================================================*/
285 285
286 static void pcnet_detach(struct pcmcia_device *link) 286 static void pcnet_detach(struct pcmcia_device *link)
287 { 287 {
288 struct net_device *dev = link->priv; 288 struct net_device *dev = link->priv;
289 289
290 dev_dbg(&link->dev, "pcnet_detach\n"); 290 dev_dbg(&link->dev, "pcnet_detach\n");
291 291
292 if (link->dev_node) 292 if (link->dev_node)
293 unregister_netdev(dev); 293 unregister_netdev(dev);
294 294
295 pcnet_release(link); 295 pcnet_release(link);
296 296
297 free_netdev(dev); 297 free_netdev(dev);
298 } /* pcnet_detach */ 298 } /* pcnet_detach */
299 299
300 /*====================================================================== 300 /*======================================================================
301 301
302 This probes for a card's hardware address, for card types that 302 This probes for a card's hardware address, for card types that
303 encode this information in their CIS. 303 encode this information in their CIS.
304 304
305 ======================================================================*/ 305 ======================================================================*/
306 306
307 static hw_info_t *get_hwinfo(struct pcmcia_device *link) 307 static hw_info_t *get_hwinfo(struct pcmcia_device *link)
308 { 308 {
309 struct net_device *dev = link->priv; 309 struct net_device *dev = link->priv;
310 win_req_t req; 310 win_req_t req;
311 memreq_t mem; 311 memreq_t mem;
312 u_char __iomem *base, *virt; 312 u_char __iomem *base, *virt;
313 int i, j; 313 int i, j;
314 314
315 /* Allocate a small memory window */ 315 /* Allocate a small memory window */
316 req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE; 316 req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
317 req.Base = 0; req.Size = 0; 317 req.Base = 0; req.Size = 0;
318 req.AccessSpeed = 0; 318 req.AccessSpeed = 0;
319 i = pcmcia_request_window(link, &req, &link->win); 319 i = pcmcia_request_window(link, &req, &link->win);
320 if (i != 0) 320 if (i != 0)
321 return NULL; 321 return NULL;
322 322
323 virt = ioremap(req.Base, req.Size); 323 virt = ioremap(req.Base, req.Size);
324 mem.Page = 0; 324 mem.Page = 0;
325 for (i = 0; i < NR_INFO; i++) { 325 for (i = 0; i < NR_INFO; i++) {
326 mem.CardOffset = hw_info[i].offset & ~(req.Size-1); 326 mem.CardOffset = hw_info[i].offset & ~(req.Size-1);
327 pcmcia_map_mem_page(link, link->win, &mem); 327 pcmcia_map_mem_page(link, link->win, &mem);
328 base = &virt[hw_info[i].offset & (req.Size-1)]; 328 base = &virt[hw_info[i].offset & (req.Size-1)];
329 if ((readb(base+0) == hw_info[i].a0) && 329 if ((readb(base+0) == hw_info[i].a0) &&
330 (readb(base+2) == hw_info[i].a1) && 330 (readb(base+2) == hw_info[i].a1) &&
331 (readb(base+4) == hw_info[i].a2)) { 331 (readb(base+4) == hw_info[i].a2)) {
332 for (j = 0; j < 6; j++) 332 for (j = 0; j < 6; j++)
333 dev->dev_addr[j] = readb(base + (j<<1)); 333 dev->dev_addr[j] = readb(base + (j<<1));
334 break; 334 break;
335 } 335 }
336 } 336 }
337 337
338 iounmap(virt); 338 iounmap(virt);
339 j = pcmcia_release_window(link, link->win); 339 j = pcmcia_release_window(link, link->win);
340 return (i < NR_INFO) ? hw_info+i : NULL; 340 return (i < NR_INFO) ? hw_info+i : NULL;
341 } /* get_hwinfo */ 341 } /* get_hwinfo */
342 342
343 /*====================================================================== 343 /*======================================================================
344 344
345 This probes for a card's hardware address by reading the PROM. 345 This probes for a card's hardware address by reading the PROM.
346 It checks the address against a list of known types, then falls 346 It checks the address against a list of known types, then falls
347 back to a simple NE2000 clone signature check. 347 back to a simple NE2000 clone signature check.
348 348
349 ======================================================================*/ 349 ======================================================================*/
350 350
351 static hw_info_t *get_prom(struct pcmcia_device *link) 351 static hw_info_t *get_prom(struct pcmcia_device *link)
352 { 352 {
353 struct net_device *dev = link->priv; 353 struct net_device *dev = link->priv;
354 unsigned int ioaddr = dev->base_addr; 354 unsigned int ioaddr = dev->base_addr;
355 u_char prom[32]; 355 u_char prom[32];
356 int i, j; 356 int i, j;
357 357
358 /* This is lifted straight from drivers/net/ne.c */ 358 /* This is lifted straight from drivers/net/ne.c */
359 struct { 359 struct {
360 u_char value, offset; 360 u_char value, offset;
361 } program_seq[] = { 361 } program_seq[] = {
362 {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/ 362 {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
363 {0x48, EN0_DCFG}, /* Set byte-wide (0x48) access. */ 363 {0x48, EN0_DCFG}, /* Set byte-wide (0x48) access. */
364 {0x00, EN0_RCNTLO}, /* Clear the count regs. */ 364 {0x00, EN0_RCNTLO}, /* Clear the count regs. */
365 {0x00, EN0_RCNTHI}, 365 {0x00, EN0_RCNTHI},
366 {0x00, EN0_IMR}, /* Mask completion irq. */ 366 {0x00, EN0_IMR}, /* Mask completion irq. */
367 {0xFF, EN0_ISR}, 367 {0xFF, EN0_ISR},
368 {E8390_RXOFF, EN0_RXCR}, /* 0x20 Set to monitor */ 368 {E8390_RXOFF, EN0_RXCR}, /* 0x20 Set to monitor */
369 {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */ 369 {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */
370 {32, EN0_RCNTLO}, 370 {32, EN0_RCNTLO},
371 {0x00, EN0_RCNTHI}, 371 {0x00, EN0_RCNTHI},
372 {0x00, EN0_RSARLO}, /* DMA starting at 0x0000. */ 372 {0x00, EN0_RSARLO}, /* DMA starting at 0x0000. */
373 {0x00, EN0_RSARHI}, 373 {0x00, EN0_RSARHI},
374 {E8390_RREAD+E8390_START, E8390_CMD}, 374 {E8390_RREAD+E8390_START, E8390_CMD},
375 }; 375 };
376 376
377 pcnet_reset_8390(dev); 377 pcnet_reset_8390(dev);
378 mdelay(10); 378 mdelay(10);
379 379
380 for (i = 0; i < ARRAY_SIZE(program_seq); i++) 380 for (i = 0; i < ARRAY_SIZE(program_seq); i++)
381 outb_p(program_seq[i].value, ioaddr + program_seq[i].offset); 381 outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
382 382
383 for (i = 0; i < 32; i++) 383 for (i = 0; i < 32; i++)
384 prom[i] = inb(ioaddr + PCNET_DATAPORT); 384 prom[i] = inb(ioaddr + PCNET_DATAPORT);
385 for (i = 0; i < NR_INFO; i++) { 385 for (i = 0; i < NR_INFO; i++) {
386 if ((prom[0] == hw_info[i].a0) && 386 if ((prom[0] == hw_info[i].a0) &&
387 (prom[2] == hw_info[i].a1) && 387 (prom[2] == hw_info[i].a1) &&
388 (prom[4] == hw_info[i].a2)) 388 (prom[4] == hw_info[i].a2))
389 break; 389 break;
390 } 390 }
391 if ((i < NR_INFO) || ((prom[28] == 0x57) && (prom[30] == 0x57))) { 391 if ((i < NR_INFO) || ((prom[28] == 0x57) && (prom[30] == 0x57))) {
392 for (j = 0; j < 6; j++) 392 for (j = 0; j < 6; j++)
393 dev->dev_addr[j] = prom[j<<1]; 393 dev->dev_addr[j] = prom[j<<1];
394 return (i < NR_INFO) ? hw_info+i : &default_info; 394 return (i < NR_INFO) ? hw_info+i : &default_info;
395 } 395 }
396 return NULL; 396 return NULL;
397 } /* get_prom */ 397 } /* get_prom */
398 398
399 /*====================================================================== 399 /*======================================================================
400 400
401 For DL10019 based cards, like the Linksys EtherFast 401 For DL10019 based cards, like the Linksys EtherFast
402 402
403 ======================================================================*/ 403 ======================================================================*/
404 404
405 static hw_info_t *get_dl10019(struct pcmcia_device *link) 405 static hw_info_t *get_dl10019(struct pcmcia_device *link)
406 { 406 {
407 struct net_device *dev = link->priv; 407 struct net_device *dev = link->priv;
408 int i; 408 int i;
409 u_char sum; 409 u_char sum;
410 410
411 for (sum = 0, i = 0x14; i < 0x1c; i++) 411 for (sum = 0, i = 0x14; i < 0x1c; i++)
412 sum += inb_p(dev->base_addr + i); 412 sum += inb_p(dev->base_addr + i);
413 if (sum != 0xff) 413 if (sum != 0xff)
414 return NULL; 414 return NULL;
415 for (i = 0; i < 6; i++) 415 for (i = 0; i < 6; i++)
416 dev->dev_addr[i] = inb_p(dev->base_addr + 0x14 + i); 416 dev->dev_addr[i] = inb_p(dev->base_addr + 0x14 + i);
417 i = inb(dev->base_addr + 0x1f); 417 i = inb(dev->base_addr + 0x1f);
418 return ((i == 0x91)||(i == 0x99)) ? &dl10022_info : &dl10019_info; 418 return ((i == 0x91)||(i == 0x99)) ? &dl10022_info : &dl10019_info;
419 } 419 }
420 420
421 /*====================================================================== 421 /*======================================================================
422 422
423 For Asix AX88190 based cards 423 For Asix AX88190 based cards
424 424
425 ======================================================================*/ 425 ======================================================================*/
426 426
427 static hw_info_t *get_ax88190(struct pcmcia_device *link) 427 static hw_info_t *get_ax88190(struct pcmcia_device *link)
428 { 428 {
429 struct net_device *dev = link->priv; 429 struct net_device *dev = link->priv;
430 unsigned int ioaddr = dev->base_addr; 430 unsigned int ioaddr = dev->base_addr;
431 int i, j; 431 int i, j;
432 432
433 /* Not much of a test, but the alternatives are messy */ 433 /* Not much of a test, but the alternatives are messy */
434 if (link->conf.ConfigBase != 0x03c0) 434 if (link->conf.ConfigBase != 0x03c0)
435 return NULL; 435 return NULL;
436 436
437 outb_p(0x01, ioaddr + EN0_DCFG); /* Set word-wide access. */ 437 outb_p(0x01, ioaddr + EN0_DCFG); /* Set word-wide access. */
438 outb_p(0x00, ioaddr + EN0_RSARLO); /* DMA starting at 0x0400. */ 438 outb_p(0x00, ioaddr + EN0_RSARLO); /* DMA starting at 0x0400. */
439 outb_p(0x04, ioaddr + EN0_RSARHI); 439 outb_p(0x04, ioaddr + EN0_RSARHI);
440 outb_p(E8390_RREAD+E8390_START, ioaddr + E8390_CMD); 440 outb_p(E8390_RREAD+E8390_START, ioaddr + E8390_CMD);
441 441
442 for (i = 0; i < 6; i += 2) { 442 for (i = 0; i < 6; i += 2) {
443 j = inw(ioaddr + PCNET_DATAPORT); 443 j = inw(ioaddr + PCNET_DATAPORT);
444 dev->dev_addr[i] = j & 0xff; 444 dev->dev_addr[i] = j & 0xff;
445 dev->dev_addr[i+1] = j >> 8; 445 dev->dev_addr[i+1] = j >> 8;
446 } 446 }
447 printk(KERN_NOTICE "pcnet_cs: this is an AX88190 card!\n"); 447 printk(KERN_NOTICE "pcnet_cs: this is an AX88190 card!\n");
448 printk(KERN_NOTICE "pcnet_cs: use axnet_cs instead.\n"); 448 printk(KERN_NOTICE "pcnet_cs: use axnet_cs instead.\n");
449 return NULL; 449 return NULL;
450 } 450 }
451 451
452 /*====================================================================== 452 /*======================================================================
453 453
454 This should be totally unnecessary... but when we can't figure 454 This should be totally unnecessary... but when we can't figure
455 out the hardware address any other way, we'll let the user hard 455 out the hardware address any other way, we'll let the user hard
456 wire it when the module is initialized. 456 wire it when the module is initialized.
457 457
458 ======================================================================*/ 458 ======================================================================*/
459 459
460 static hw_info_t *get_hwired(struct pcmcia_device *link) 460 static hw_info_t *get_hwired(struct pcmcia_device *link)
461 { 461 {
462 struct net_device *dev = link->priv; 462 struct net_device *dev = link->priv;
463 int i; 463 int i;
464 464
465 for (i = 0; i < 6; i++) 465 for (i = 0; i < 6; i++)
466 if (hw_addr[i] != 0) break; 466 if (hw_addr[i] != 0) break;
467 if (i == 6) 467 if (i == 6)
468 return NULL; 468 return NULL;
469 469
470 for (i = 0; i < 6; i++) 470 for (i = 0; i < 6; i++)
471 dev->dev_addr[i] = hw_addr[i]; 471 dev->dev_addr[i] = hw_addr[i];
472 472
473 return &default_info; 473 return &default_info;
474 } /* get_hwired */ 474 } /* get_hwired */
475 475
476 /*====================================================================== 476 /*======================================================================
477 477
478 pcnet_config() is scheduled to run after a CARD_INSERTION event 478 pcnet_config() is scheduled to run after a CARD_INSERTION event
479 is received, to configure the PCMCIA socket, and to make the 479 is received, to configure the PCMCIA socket, and to make the
480 ethernet device available to the system. 480 ethernet device available to the system.
481 481
482 ======================================================================*/ 482 ======================================================================*/
483 483
484 static int try_io_port(struct pcmcia_device *link) 484 static int try_io_port(struct pcmcia_device *link)
485 { 485 {
486 int j, ret; 486 int j, ret;
487 if (link->io.NumPorts1 == 32) { 487 if (link->io.NumPorts1 == 32) {
488 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 488 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
489 if (link->io.NumPorts2 > 0) { 489 if (link->io.NumPorts2 > 0) {
490 /* for master/slave multifunction cards */ 490 /* for master/slave multifunction cards */
491 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8; 491 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
492 link->irq.Attributes = 492 link->irq.Attributes =
493 IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED; 493 IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
494 } 494 }
495 } else { 495 } else {
496 /* This should be two 16-port windows */ 496 /* This should be two 16-port windows */
497 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 497 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
498 link->io.Attributes2 = IO_DATA_PATH_WIDTH_16; 498 link->io.Attributes2 = IO_DATA_PATH_WIDTH_16;
499 } 499 }
500 if (link->io.BasePort1 == 0) { 500 if (link->io.BasePort1 == 0) {
501 link->io.IOAddrLines = 16; 501 link->io.IOAddrLines = 16;
502 for (j = 0; j < 0x400; j += 0x20) { 502 for (j = 0; j < 0x400; j += 0x20) {
503 link->io.BasePort1 = j ^ 0x300; 503 link->io.BasePort1 = j ^ 0x300;
504 link->io.BasePort2 = (j ^ 0x300) + 0x10; 504 link->io.BasePort2 = (j ^ 0x300) + 0x10;
505 ret = pcmcia_request_io(link, &link->io); 505 ret = pcmcia_request_io(link, &link->io);
506 if (ret == 0) 506 if (ret == 0)
507 return ret; 507 return ret;
508 } 508 }
509 return ret; 509 return ret;
510 } else { 510 } else {
511 return pcmcia_request_io(link, &link->io); 511 return pcmcia_request_io(link, &link->io);
512 } 512 }
513 } 513 }
514 514
515 static int pcnet_confcheck(struct pcmcia_device *p_dev, 515 static int pcnet_confcheck(struct pcmcia_device *p_dev,
516 cistpl_cftable_entry_t *cfg, 516 cistpl_cftable_entry_t *cfg,
517 cistpl_cftable_entry_t *dflt, 517 cistpl_cftable_entry_t *dflt,
518 unsigned int vcc, 518 unsigned int vcc,
519 void *priv_data) 519 void *priv_data)
520 { 520 {
521 int *has_shmem = priv_data; 521 int *has_shmem = priv_data;
522 int i; 522 int i;
523 cistpl_io_t *io = &cfg->io; 523 cistpl_io_t *io = &cfg->io;
524 524
525 if (cfg->index == 0 || cfg->io.nwin == 0) 525 if (cfg->index == 0 || cfg->io.nwin == 0)
526 return -EINVAL; 526 return -EINVAL;
527 527
528 /* For multifunction cards, by convention, we configure the 528 /* For multifunction cards, by convention, we configure the
529 network function with window 0, and serial with window 1 */ 529 network function with window 0, and serial with window 1 */
530 if (io->nwin > 1) { 530 if (io->nwin > 1) {
531 i = (io->win[1].len > io->win[0].len); 531 i = (io->win[1].len > io->win[0].len);
532 p_dev->io.BasePort2 = io->win[1-i].base; 532 p_dev->io.BasePort2 = io->win[1-i].base;
533 p_dev->io.NumPorts2 = io->win[1-i].len; 533 p_dev->io.NumPorts2 = io->win[1-i].len;
534 } else { 534 } else {
535 i = p_dev->io.NumPorts2 = 0; 535 i = p_dev->io.NumPorts2 = 0;
536 } 536 }
537 537
538 *has_shmem = ((cfg->mem.nwin == 1) && 538 *has_shmem = ((cfg->mem.nwin == 1) &&
539 (cfg->mem.win[0].len >= 0x4000)); 539 (cfg->mem.win[0].len >= 0x4000));
540 p_dev->io.BasePort1 = io->win[i].base; 540 p_dev->io.BasePort1 = io->win[i].base;
541 p_dev->io.NumPorts1 = io->win[i].len; 541 p_dev->io.NumPorts1 = io->win[i].len;
542 p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK; 542 p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
543 if (p_dev->io.NumPorts1 + p_dev->io.NumPorts2 >= 32) 543 if (p_dev->io.NumPorts1 + p_dev->io.NumPorts2 >= 32)
544 return try_io_port(p_dev); 544 return try_io_port(p_dev);
545 545
546 return 0; 546 return 0;
547 } 547 }
548 548
549 static int pcnet_config(struct pcmcia_device *link) 549 static int pcnet_config(struct pcmcia_device *link)
550 { 550 {
551 struct net_device *dev = link->priv; 551 struct net_device *dev = link->priv;
552 pcnet_dev_t *info = PRIV(dev); 552 pcnet_dev_t *info = PRIV(dev);
553 int ret, start_pg, stop_pg, cm_offset; 553 int ret, start_pg, stop_pg, cm_offset;
554 int has_shmem = 0; 554 int has_shmem = 0;
555 hw_info_t *local_hw_info; 555 hw_info_t *local_hw_info;
556 556
557 dev_dbg(&link->dev, "pcnet_config\n"); 557 dev_dbg(&link->dev, "pcnet_config\n");
558 558
559 ret = pcmcia_loop_config(link, pcnet_confcheck, &has_shmem); 559 ret = pcmcia_loop_config(link, pcnet_confcheck, &has_shmem);
560 if (ret) 560 if (ret)
561 goto failed; 561 goto failed;
562 562
563 ret = pcmcia_request_irq(link, &link->irq); 563 ret = pcmcia_request_irq(link, &link->irq);
564 if (ret) 564 if (ret)
565 goto failed; 565 goto failed;
566 566
567 if (link->io.NumPorts2 == 8) { 567 if (link->io.NumPorts2 == 8) {
568 link->conf.Attributes |= CONF_ENABLE_SPKR; 568 link->conf.Attributes |= CONF_ENABLE_SPKR;
569 link->conf.Status = CCSR_AUDIO_ENA; 569 link->conf.Status = CCSR_AUDIO_ENA;
570 } 570 }
571 if ((link->manf_id == MANFID_IBM) && 571 if ((link->manf_id == MANFID_IBM) &&
572 (link->card_id == PRODID_IBM_HOME_AND_AWAY)) 572 (link->card_id == PRODID_IBM_HOME_AND_AWAY))
573 link->conf.ConfigIndex |= 0x10; 573 link->conf.ConfigIndex |= 0x10;
574 574
575 ret = pcmcia_request_configuration(link, &link->conf); 575 ret = pcmcia_request_configuration(link, &link->conf);
576 if (ret) 576 if (ret)
577 goto failed; 577 goto failed;
578 dev->irq = link->irq.AssignedIRQ; 578 dev->irq = link->irq.AssignedIRQ;
579 dev->base_addr = link->io.BasePort1; 579 dev->base_addr = link->io.BasePort1;
580 if (info->flags & HAS_MISC_REG) { 580 if (info->flags & HAS_MISC_REG) {
581 if ((if_port == 1) || (if_port == 2)) 581 if ((if_port == 1) || (if_port == 2))
582 dev->if_port = if_port; 582 dev->if_port = if_port;
583 else 583 else
584 printk(KERN_NOTICE "pcnet_cs: invalid if_port requested\n"); 584 printk(KERN_NOTICE "pcnet_cs: invalid if_port requested\n");
585 } else { 585 } else {
586 dev->if_port = 0; 586 dev->if_port = 0;
587 } 587 }
588 588
589 if ((link->conf.ConfigBase == 0x03c0) && 589 if ((link->conf.ConfigBase == 0x03c0) &&
590 (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) { 590 (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) {
591 printk(KERN_INFO "pcnet_cs: this is an AX88190 card!\n"); 591 printk(KERN_INFO "pcnet_cs: this is an AX88190 card!\n");
592 printk(KERN_INFO "pcnet_cs: use axnet_cs instead.\n"); 592 printk(KERN_INFO "pcnet_cs: use axnet_cs instead.\n");
593 goto failed; 593 goto failed;
594 } 594 }
595 595
596 local_hw_info = get_hwinfo(link); 596 local_hw_info = get_hwinfo(link);
597 if (local_hw_info == NULL) 597 if (local_hw_info == NULL)
598 local_hw_info = get_prom(link); 598 local_hw_info = get_prom(link);
599 if (local_hw_info == NULL) 599 if (local_hw_info == NULL)
600 local_hw_info = get_dl10019(link); 600 local_hw_info = get_dl10019(link);
601 if (local_hw_info == NULL) 601 if (local_hw_info == NULL)
602 local_hw_info = get_ax88190(link); 602 local_hw_info = get_ax88190(link);
603 if (local_hw_info == NULL) 603 if (local_hw_info == NULL)
604 local_hw_info = get_hwired(link); 604 local_hw_info = get_hwired(link);
605 605
606 if (local_hw_info == NULL) { 606 if (local_hw_info == NULL) {
607 printk(KERN_NOTICE "pcnet_cs: unable to read hardware net" 607 printk(KERN_NOTICE "pcnet_cs: unable to read hardware net"
608 " address for io base %#3lx\n", dev->base_addr); 608 " address for io base %#3lx\n", dev->base_addr);
609 goto failed; 609 goto failed;
610 } 610 }
611 611
612 info->flags = local_hw_info->flags; 612 info->flags = local_hw_info->flags;
613 /* Check for user overrides */ 613 /* Check for user overrides */
614 info->flags |= (delay_output) ? DELAY_OUTPUT : 0; 614 info->flags |= (delay_output) ? DELAY_OUTPUT : 0;
615 if ((link->manf_id == MANFID_SOCKET) && 615 if ((link->manf_id == MANFID_SOCKET) &&
616 ((link->card_id == PRODID_SOCKET_LPE) || 616 ((link->card_id == PRODID_SOCKET_LPE) ||
617 (link->card_id == PRODID_SOCKET_LPE_CF) || 617 (link->card_id == PRODID_SOCKET_LPE_CF) ||
618 (link->card_id == PRODID_SOCKET_EIO))) 618 (link->card_id == PRODID_SOCKET_EIO)))
619 info->flags &= ~USE_BIG_BUF; 619 info->flags &= ~USE_BIG_BUF;
620 if (!use_big_buf) 620 if (!use_big_buf)
621 info->flags &= ~USE_BIG_BUF; 621 info->flags &= ~USE_BIG_BUF;
622 622
623 if (info->flags & USE_BIG_BUF) { 623 if (info->flags & USE_BIG_BUF) {
624 start_pg = SOCKET_START_PG; 624 start_pg = SOCKET_START_PG;
625 stop_pg = SOCKET_STOP_PG; 625 stop_pg = SOCKET_STOP_PG;
626 cm_offset = 0x10000; 626 cm_offset = 0x10000;
627 } else { 627 } else {
628 start_pg = PCNET_START_PG; 628 start_pg = PCNET_START_PG;
629 stop_pg = PCNET_STOP_PG; 629 stop_pg = PCNET_STOP_PG;
630 cm_offset = 0; 630 cm_offset = 0;
631 } 631 }
632 632
633 /* has_shmem is ignored if use_shmem != -1 */ 633 /* has_shmem is ignored if use_shmem != -1 */
634 if ((use_shmem == 0) || (!has_shmem && (use_shmem == -1)) || 634 if ((use_shmem == 0) || (!has_shmem && (use_shmem == -1)) ||
635 (setup_shmem_window(link, start_pg, stop_pg, cm_offset) != 0)) 635 (setup_shmem_window(link, start_pg, stop_pg, cm_offset) != 0))
636 setup_dma_config(link, start_pg, stop_pg); 636 setup_dma_config(link, start_pg, stop_pg);
637 637
638 ei_status.name = "NE2000"; 638 ei_status.name = "NE2000";
639 ei_status.word16 = 1; 639 ei_status.word16 = 1;
640 ei_status.reset_8390 = &pcnet_reset_8390; 640 ei_status.reset_8390 = &pcnet_reset_8390;
641 641
642 SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops); 642 SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
643 643
644 if (info->flags & (IS_DL10019|IS_DL10022)) 644 if (info->flags & (IS_DL10019|IS_DL10022))
645 mii_phy_probe(dev); 645 mii_phy_probe(dev);
646 646
647 link->dev_node = &info->node; 647 link->dev_node = &info->node;
648 SET_NETDEV_DEV(dev, &link->dev); 648 SET_NETDEV_DEV(dev, &link->dev);
649 649
650 if (register_netdev(dev) != 0) { 650 if (register_netdev(dev) != 0) {
651 printk(KERN_NOTICE "pcnet_cs: register_netdev() failed\n"); 651 printk(KERN_NOTICE "pcnet_cs: register_netdev() failed\n");
652 link->dev_node = NULL; 652 link->dev_node = NULL;
653 goto failed; 653 goto failed;
654 } 654 }
655 655
656 strcpy(info->node.dev_name, dev->name); 656 strcpy(info->node.dev_name, dev->name);
657 657
658 if (info->flags & (IS_DL10019|IS_DL10022)) { 658 if (info->flags & (IS_DL10019|IS_DL10022)) {
659 u_char id = inb(dev->base_addr + 0x1a); 659 u_char id = inb(dev->base_addr + 0x1a);
660 printk(KERN_INFO "%s: NE2000 (DL100%d rev %02x): ", 660 printk(KERN_INFO "%s: NE2000 (DL100%d rev %02x): ",
661 dev->name, ((info->flags & IS_DL10022) ? 22 : 19), id); 661 dev->name, ((info->flags & IS_DL10022) ? 22 : 19), id);
662 if (info->pna_phy) 662 if (info->pna_phy)
663 printk("PNA, "); 663 printk("PNA, ");
664 } else { 664 } else {
665 printk(KERN_INFO "%s: NE2000 Compatible: ", dev->name); 665 printk(KERN_INFO "%s: NE2000 Compatible: ", dev->name);
666 } 666 }
667 printk("io %#3lx, irq %d,", dev->base_addr, dev->irq); 667 printk("io %#3lx, irq %d,", dev->base_addr, dev->irq);
668 if (info->flags & USE_SHMEM) 668 if (info->flags & USE_SHMEM)
669 printk (" mem %#5lx,", dev->mem_start); 669 printk (" mem %#5lx,", dev->mem_start);
670 if (info->flags & HAS_MISC_REG) 670 if (info->flags & HAS_MISC_REG)
671 printk(" %s xcvr,", if_names[dev->if_port]); 671 printk(" %s xcvr,", if_names[dev->if_port]);
672 printk(" hw_addr %pM\n", dev->dev_addr); 672 printk(" hw_addr %pM\n", dev->dev_addr);
673 return 0; 673 return 0;
674 674
675 failed: 675 failed:
676 pcnet_release(link); 676 pcnet_release(link);
677 return -ENODEV; 677 return -ENODEV;
678 } /* pcnet_config */ 678 } /* pcnet_config */
679 679
680 /*====================================================================== 680 /*======================================================================
681 681
682 After a card is removed, pcnet_release() will unregister the net 682 After a card is removed, pcnet_release() will unregister the net
683 device, and release the PCMCIA configuration. If the device is 683 device, and release the PCMCIA configuration. If the device is
684 still open, this will be postponed until it is closed. 684 still open, this will be postponed until it is closed.
685 685
686 ======================================================================*/ 686 ======================================================================*/
687 687
688 static void pcnet_release(struct pcmcia_device *link) 688 static void pcnet_release(struct pcmcia_device *link)
689 { 689 {
690 pcnet_dev_t *info = PRIV(link->priv); 690 pcnet_dev_t *info = PRIV(link->priv);
691 691
692 dev_dbg(&link->dev, "pcnet_release\n"); 692 dev_dbg(&link->dev, "pcnet_release\n");
693 693
694 if (info->flags & USE_SHMEM) 694 if (info->flags & USE_SHMEM)
695 iounmap(info->base); 695 iounmap(info->base);
696 696
697 pcmcia_disable_device(link); 697 pcmcia_disable_device(link);
698 } 698 }
699 699
700 /*====================================================================== 700 /*======================================================================
701 701
702 The card status event handler. Mostly, this schedules other 702 The card status event handler. Mostly, this schedules other
703 stuff to run after an event is received. A CARD_REMOVAL event 703 stuff to run after an event is received. A CARD_REMOVAL event
704 also sets some flags to discourage the net drivers from trying 704 also sets some flags to discourage the net drivers from trying
705 to talk to the card any more. 705 to talk to the card any more.
706 706
707 ======================================================================*/ 707 ======================================================================*/
708 708
709 static int pcnet_suspend(struct pcmcia_device *link) 709 static int pcnet_suspend(struct pcmcia_device *link)
710 { 710 {
711 struct net_device *dev = link->priv; 711 struct net_device *dev = link->priv;
712 712
713 if (link->open) 713 if (link->open)
714 netif_device_detach(dev); 714 netif_device_detach(dev);
715 715
716 return 0; 716 return 0;
717 } 717 }
718 718
719 static int pcnet_resume(struct pcmcia_device *link) 719 static int pcnet_resume(struct pcmcia_device *link)
720 { 720 {
721 struct net_device *dev = link->priv; 721 struct net_device *dev = link->priv;
722 722
723 if (link->open) { 723 if (link->open) {
724 pcnet_reset_8390(dev); 724 pcnet_reset_8390(dev);
725 NS8390_init(dev, 1); 725 NS8390_init(dev, 1);
726 netif_device_attach(dev); 726 netif_device_attach(dev);
727 } 727 }
728 728
729 return 0; 729 return 0;
730 } 730 }
731 731
732 732
733 /*====================================================================== 733 /*======================================================================
734 734
735 MII interface support for DL10019 and DL10022 based cards 735 MII interface support for DL10019 and DL10022 based cards
736 736
737 On the DL10019, the MII IO direction bit is 0x10; on the DL10022 737 On the DL10019, the MII IO direction bit is 0x10; on the DL10022
738 it is 0x20. Setting both bits seems to work on both card types. 738 it is 0x20. Setting both bits seems to work on both card types.
739 739
740 ======================================================================*/ 740 ======================================================================*/
741 741
742 #define DLINK_GPIO 0x1c 742 #define DLINK_GPIO 0x1c
743 #define DLINK_DIAG 0x1d 743 #define DLINK_DIAG 0x1d
744 #define DLINK_EEPROM 0x1e 744 #define DLINK_EEPROM 0x1e
745 745
746 #define MDIO_SHIFT_CLK 0x80 746 #define MDIO_SHIFT_CLK 0x80
747 #define MDIO_DATA_OUT 0x40 747 #define MDIO_DATA_OUT 0x40
748 #define MDIO_DIR_WRITE 0x30 748 #define MDIO_DIR_WRITE 0x30
749 #define MDIO_DATA_WRITE0 (MDIO_DIR_WRITE) 749 #define MDIO_DATA_WRITE0 (MDIO_DIR_WRITE)
750 #define MDIO_DATA_WRITE1 (MDIO_DIR_WRITE | MDIO_DATA_OUT) 750 #define MDIO_DATA_WRITE1 (MDIO_DIR_WRITE | MDIO_DATA_OUT)
751 #define MDIO_DATA_READ 0x10 751 #define MDIO_DATA_READ 0x10
752 #define MDIO_MASK 0x0f 752 #define MDIO_MASK 0x0f
753 753
754 static void mdio_sync(unsigned int addr) 754 static void mdio_sync(unsigned int addr)
755 { 755 {
756 int bits, mask = inb(addr) & MDIO_MASK; 756 int bits, mask = inb(addr) & MDIO_MASK;
757 for (bits = 0; bits < 32; bits++) { 757 for (bits = 0; bits < 32; bits++) {
758 outb(mask | MDIO_DATA_WRITE1, addr); 758 outb(mask | MDIO_DATA_WRITE1, addr);
759 outb(mask | MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, addr); 759 outb(mask | MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, addr);
760 } 760 }
761 } 761 }
762 762
763 static int mdio_read(unsigned int addr, int phy_id, int loc) 763 static int mdio_read(unsigned int addr, int phy_id, int loc)
764 { 764 {
765 u_int cmd = (0x06<<10)|(phy_id<<5)|loc; 765 u_int cmd = (0x06<<10)|(phy_id<<5)|loc;
766 int i, retval = 0, mask = inb(addr) & MDIO_MASK; 766 int i, retval = 0, mask = inb(addr) & MDIO_MASK;
767 767
768 mdio_sync(addr); 768 mdio_sync(addr);
769 for (i = 13; i >= 0; i--) { 769 for (i = 13; i >= 0; i--) {
770 int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0; 770 int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
771 outb(mask | dat, addr); 771 outb(mask | dat, addr);
772 outb(mask | dat | MDIO_SHIFT_CLK, addr); 772 outb(mask | dat | MDIO_SHIFT_CLK, addr);
773 } 773 }
774 for (i = 19; i > 0; i--) { 774 for (i = 19; i > 0; i--) {
775 outb(mask, addr); 775 outb(mask, addr);
776 retval = (retval << 1) | ((inb(addr) & MDIO_DATA_READ) != 0); 776 retval = (retval << 1) | ((inb(addr) & MDIO_DATA_READ) != 0);
777 outb(mask | MDIO_SHIFT_CLK, addr); 777 outb(mask | MDIO_SHIFT_CLK, addr);
778 } 778 }
779 return (retval>>1) & 0xffff; 779 return (retval>>1) & 0xffff;
780 } 780 }
781 781
782 static void mdio_write(unsigned int addr, int phy_id, int loc, int value) 782 static void mdio_write(unsigned int addr, int phy_id, int loc, int value)
783 { 783 {
784 u_int cmd = (0x05<<28)|(phy_id<<23)|(loc<<18)|(1<<17)|value; 784 u_int cmd = (0x05<<28)|(phy_id<<23)|(loc<<18)|(1<<17)|value;
785 int i, mask = inb(addr) & MDIO_MASK; 785 int i, mask = inb(addr) & MDIO_MASK;
786 786
787 mdio_sync(addr); 787 mdio_sync(addr);
788 for (i = 31; i >= 0; i--) { 788 for (i = 31; i >= 0; i--) {
789 int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0; 789 int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
790 outb(mask | dat, addr); 790 outb(mask | dat, addr);
791 outb(mask | dat | MDIO_SHIFT_CLK, addr); 791 outb(mask | dat | MDIO_SHIFT_CLK, addr);
792 } 792 }
793 for (i = 1; i >= 0; i--) { 793 for (i = 1; i >= 0; i--) {
794 outb(mask, addr); 794 outb(mask, addr);
795 outb(mask | MDIO_SHIFT_CLK, addr); 795 outb(mask | MDIO_SHIFT_CLK, addr);
796 } 796 }
797 } 797 }
798 798
799 /*====================================================================== 799 /*======================================================================
800 800
801 EEPROM access routines for DL10019 and DL10022 based cards 801 EEPROM access routines for DL10019 and DL10022 based cards
802 802
803 ======================================================================*/ 803 ======================================================================*/
804 804
805 #define EE_EEP 0x40 805 #define EE_EEP 0x40
806 #define EE_ASIC 0x10 806 #define EE_ASIC 0x10
807 #define EE_CS 0x08 807 #define EE_CS 0x08
808 #define EE_CK 0x04 808 #define EE_CK 0x04
809 #define EE_DO 0x02 809 #define EE_DO 0x02
810 #define EE_DI 0x01 810 #define EE_DI 0x01
811 #define EE_ADOT 0x01 /* DataOut for ASIC */ 811 #define EE_ADOT 0x01 /* DataOut for ASIC */
812 #define EE_READ_CMD 0x06 812 #define EE_READ_CMD 0x06
813 813
814 #define DL19FDUPLX 0x0400 /* DL10019 Full duplex mode */ 814 #define DL19FDUPLX 0x0400 /* DL10019 Full duplex mode */
815 815
816 static int read_eeprom(unsigned int ioaddr, int location) 816 static int read_eeprom(unsigned int ioaddr, int location)
817 { 817 {
818 int i, retval = 0; 818 int i, retval = 0;
819 unsigned int ee_addr = ioaddr + DLINK_EEPROM; 819 unsigned int ee_addr = ioaddr + DLINK_EEPROM;
820 int read_cmd = location | (EE_READ_CMD << 8); 820 int read_cmd = location | (EE_READ_CMD << 8);
821 821
822 outb(0, ee_addr); 822 outb(0, ee_addr);
823 outb(EE_EEP|EE_CS, ee_addr); 823 outb(EE_EEP|EE_CS, ee_addr);
824 824
825 /* Shift the read command bits out. */ 825 /* Shift the read command bits out. */
826 for (i = 10; i >= 0; i--) { 826 for (i = 10; i >= 0; i--) {
827 short dataval = (read_cmd & (1 << i)) ? EE_DO : 0; 827 short dataval = (read_cmd & (1 << i)) ? EE_DO : 0;
828 outb_p(EE_EEP|EE_CS|dataval, ee_addr); 828 outb_p(EE_EEP|EE_CS|dataval, ee_addr);
829 outb_p(EE_EEP|EE_CS|dataval|EE_CK, ee_addr); 829 outb_p(EE_EEP|EE_CS|dataval|EE_CK, ee_addr);
830 } 830 }
831 outb(EE_EEP|EE_CS, ee_addr); 831 outb(EE_EEP|EE_CS, ee_addr);
832 832
833 for (i = 16; i > 0; i--) { 833 for (i = 16; i > 0; i--) {
834 outb_p(EE_EEP|EE_CS | EE_CK, ee_addr); 834 outb_p(EE_EEP|EE_CS | EE_CK, ee_addr);
835 retval = (retval << 1) | ((inb(ee_addr) & EE_DI) ? 1 : 0); 835 retval = (retval << 1) | ((inb(ee_addr) & EE_DI) ? 1 : 0);
836 outb_p(EE_EEP|EE_CS, ee_addr); 836 outb_p(EE_EEP|EE_CS, ee_addr);
837 } 837 }
838 838
839 /* Terminate the EEPROM access. */ 839 /* Terminate the EEPROM access. */
840 outb(0, ee_addr); 840 outb(0, ee_addr);
841 return retval; 841 return retval;
842 } 842 }
843 843
844 /* 844 /*
845 The internal ASIC registers can be changed by EEPROM READ access 845 The internal ASIC registers can be changed by EEPROM READ access
846 with EE_ASIC bit set. 846 with EE_ASIC bit set.
847 In ASIC mode, EE_ADOT is used to output the data to the ASIC. 847 In ASIC mode, EE_ADOT is used to output the data to the ASIC.
848 */ 848 */
849 849
850 static void write_asic(unsigned int ioaddr, int location, short asic_data) 850 static void write_asic(unsigned int ioaddr, int location, short asic_data)
851 { 851 {
852 int i; 852 int i;
853 unsigned int ee_addr = ioaddr + DLINK_EEPROM; 853 unsigned int ee_addr = ioaddr + DLINK_EEPROM;
854 short dataval; 854 short dataval;
855 int read_cmd = location | (EE_READ_CMD << 8); 855 int read_cmd = location | (EE_READ_CMD << 8);
856 856
857 asic_data |= read_eeprom(ioaddr, location); 857 asic_data |= read_eeprom(ioaddr, location);
858 858
859 outb(0, ee_addr); 859 outb(0, ee_addr);
860 outb(EE_ASIC|EE_CS|EE_DI, ee_addr); 860 outb(EE_ASIC|EE_CS|EE_DI, ee_addr);
861 861
862 read_cmd = read_cmd >> 1; 862 read_cmd = read_cmd >> 1;
863 863
864 /* Shift the read command bits out. */ 864 /* Shift the read command bits out. */
865 for (i = 9; i >= 0; i--) { 865 for (i = 9; i >= 0; i--) {
866 dataval = (read_cmd & (1 << i)) ? EE_DO : 0; 866 dataval = (read_cmd & (1 << i)) ? EE_DO : 0;
867 outb_p(EE_ASIC|EE_CS|EE_DI|dataval, ee_addr); 867 outb_p(EE_ASIC|EE_CS|EE_DI|dataval, ee_addr);
868 outb_p(EE_ASIC|EE_CS|EE_DI|dataval|EE_CK, ee_addr); 868 outb_p(EE_ASIC|EE_CS|EE_DI|dataval|EE_CK, ee_addr);
869 outb_p(EE_ASIC|EE_CS|EE_DI|dataval, ee_addr); 869 outb_p(EE_ASIC|EE_CS|EE_DI|dataval, ee_addr);
870 } 870 }
871 // sync 871 // sync
872 outb(EE_ASIC|EE_CS, ee_addr); 872 outb(EE_ASIC|EE_CS, ee_addr);
873 outb(EE_ASIC|EE_CS|EE_CK, ee_addr); 873 outb(EE_ASIC|EE_CS|EE_CK, ee_addr);
874 outb(EE_ASIC|EE_CS, ee_addr); 874 outb(EE_ASIC|EE_CS, ee_addr);
875 875
876 for (i = 15; i >= 0; i--) { 876 for (i = 15; i >= 0; i--) {
877 dataval = (asic_data & (1 << i)) ? EE_ADOT : 0; 877 dataval = (asic_data & (1 << i)) ? EE_ADOT : 0;
878 outb_p(EE_ASIC|EE_CS|dataval, ee_addr); 878 outb_p(EE_ASIC|EE_CS|dataval, ee_addr);
879 outb_p(EE_ASIC|EE_CS|dataval|EE_CK, ee_addr); 879 outb_p(EE_ASIC|EE_CS|dataval|EE_CK, ee_addr);
880 outb_p(EE_ASIC|EE_CS|dataval, ee_addr); 880 outb_p(EE_ASIC|EE_CS|dataval, ee_addr);
881 } 881 }
882 882
883 /* Terminate the ASIC access. */ 883 /* Terminate the ASIC access. */
884 outb(EE_ASIC|EE_DI, ee_addr); 884 outb(EE_ASIC|EE_DI, ee_addr);
885 outb(EE_ASIC|EE_DI| EE_CK, ee_addr); 885 outb(EE_ASIC|EE_DI| EE_CK, ee_addr);
886 outb(EE_ASIC|EE_DI, ee_addr); 886 outb(EE_ASIC|EE_DI, ee_addr);
887 887
888 outb(0, ee_addr); 888 outb(0, ee_addr);
889 } 889 }
890 890
891 /*====================================================================*/ 891 /*====================================================================*/
892 892
893 static void set_misc_reg(struct net_device *dev) 893 static void set_misc_reg(struct net_device *dev)
894 { 894 {
895 unsigned int nic_base = dev->base_addr; 895 unsigned int nic_base = dev->base_addr;
896 pcnet_dev_t *info = PRIV(dev); 896 pcnet_dev_t *info = PRIV(dev);
897 u_char tmp; 897 u_char tmp;
898 898
899 if (info->flags & HAS_MISC_REG) { 899 if (info->flags & HAS_MISC_REG) {
900 tmp = inb_p(nic_base + PCNET_MISC) & ~3; 900 tmp = inb_p(nic_base + PCNET_MISC) & ~3;
901 if (dev->if_port == 2) 901 if (dev->if_port == 2)
902 tmp |= 1; 902 tmp |= 1;
903 if (info->flags & USE_BIG_BUF) 903 if (info->flags & USE_BIG_BUF)
904 tmp |= 2; 904 tmp |= 2;
905 if (info->flags & HAS_IBM_MISC) 905 if (info->flags & HAS_IBM_MISC)
906 tmp |= 8; 906 tmp |= 8;
907 outb_p(tmp, nic_base + PCNET_MISC); 907 outb_p(tmp, nic_base + PCNET_MISC);
908 } 908 }
909 if (info->flags & IS_DL10022) { 909 if (info->flags & IS_DL10022) {
910 if (info->flags & HAS_MII) { 910 if (info->flags & HAS_MII) {
911 /* Advertise 100F, 100H, 10F, 10H */ 911 /* Advertise 100F, 100H, 10F, 10H */
912 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 4, 0x01e1); 912 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 4, 0x01e1);
913 /* Restart MII autonegotiation */ 913 /* Restart MII autonegotiation */
914 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x0000); 914 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x0000);
915 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x1200); 915 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x1200);
916 info->mii_reset = jiffies; 916 info->mii_reset = jiffies;
917 } else { 917 } else {
918 outb(full_duplex ? 4 : 0, nic_base + DLINK_DIAG); 918 outb(full_duplex ? 4 : 0, nic_base + DLINK_DIAG);
919 } 919 }
920 } else if (info->flags & IS_DL10019) { 920 } else if (info->flags & IS_DL10019) {
921 /* Advertise 100F, 100H, 10F, 10H */ 921 /* Advertise 100F, 100H, 10F, 10H */
922 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 4, 0x01e1); 922 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 4, 0x01e1);
923 /* Restart MII autonegotiation */ 923 /* Restart MII autonegotiation */
924 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x0000); 924 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x0000);
925 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x1200); 925 mdio_write(nic_base + DLINK_GPIO, info->eth_phy, 0, 0x1200);
926 } 926 }
927 } 927 }
928 928
929 /*====================================================================*/ 929 /*====================================================================*/
930 930
931 static void mii_phy_probe(struct net_device *dev) 931 static void mii_phy_probe(struct net_device *dev)
932 { 932 {
933 pcnet_dev_t *info = PRIV(dev); 933 pcnet_dev_t *info = PRIV(dev);
934 unsigned int mii_addr = dev->base_addr + DLINK_GPIO; 934 unsigned int mii_addr = dev->base_addr + DLINK_GPIO;
935 int i; 935 int i;
936 u_int tmp, phyid; 936 u_int tmp, phyid;
937 937
938 for (i = 31; i >= 0; i--) { 938 for (i = 31; i >= 0; i--) {
939 tmp = mdio_read(mii_addr, i, 1); 939 tmp = mdio_read(mii_addr, i, 1);
940 if ((tmp == 0) || (tmp == 0xffff)) 940 if ((tmp == 0) || (tmp == 0xffff))
941 continue; 941 continue;
942 tmp = mdio_read(mii_addr, i, MII_PHYID_REG1); 942 tmp = mdio_read(mii_addr, i, MII_PHYID_REG1);
943 phyid = tmp << 16; 943 phyid = tmp << 16;
944 phyid |= mdio_read(mii_addr, i, MII_PHYID_REG2); 944 phyid |= mdio_read(mii_addr, i, MII_PHYID_REG2);
945 phyid &= MII_PHYID_REV_MASK; 945 phyid &= MII_PHYID_REV_MASK;
946 pr_debug("%s: MII at %d is 0x%08x\n", dev->name, i, phyid); 946 pr_debug("%s: MII at %d is 0x%08x\n", dev->name, i, phyid);
947 if (phyid == AM79C9XX_HOME_PHY) { 947 if (phyid == AM79C9XX_HOME_PHY) {
948 info->pna_phy = i; 948 info->pna_phy = i;
949 } else if (phyid != AM79C9XX_ETH_PHY) { 949 } else if (phyid != AM79C9XX_ETH_PHY) {
950 info->eth_phy = i; 950 info->eth_phy = i;
951 } 951 }
952 } 952 }
953 } 953 }
954 954
955 static int pcnet_open(struct net_device *dev) 955 static int pcnet_open(struct net_device *dev)
956 { 956 {
957 int ret; 957 int ret;
958 pcnet_dev_t *info = PRIV(dev); 958 pcnet_dev_t *info = PRIV(dev);
959 struct pcmcia_device *link = info->p_dev; 959 struct pcmcia_device *link = info->p_dev;
960 unsigned int nic_base = dev->base_addr; 960 unsigned int nic_base = dev->base_addr;
961 961
962 dev_dbg(&link->dev, "pcnet_open('%s')\n", dev->name); 962 dev_dbg(&link->dev, "pcnet_open('%s')\n", dev->name);
963 963
964 if (!pcmcia_dev_present(link)) 964 if (!pcmcia_dev_present(link))
965 return -ENODEV; 965 return -ENODEV;
966 966
967 set_misc_reg(dev); 967 set_misc_reg(dev);
968 968
969 outb_p(0xFF, nic_base + EN0_ISR); /* Clear bogus intr. */ 969 outb_p(0xFF, nic_base + EN0_ISR); /* Clear bogus intr. */
970 ret = request_irq(dev->irq, ei_irq_wrapper, IRQF_SHARED, dev_info, dev); 970 ret = request_irq(dev->irq, ei_irq_wrapper, IRQF_SHARED, dev_info, dev);
971 if (ret) 971 if (ret)
972 return ret; 972 return ret;
973 973
974 link->open++; 974 link->open++;
975 975
976 info->phy_id = info->eth_phy; 976 info->phy_id = info->eth_phy;
977 info->link_status = 0x00; 977 info->link_status = 0x00;
978 init_timer(&info->watchdog); 978 init_timer(&info->watchdog);
979 info->watchdog.function = &ei_watchdog; 979 info->watchdog.function = &ei_watchdog;
980 info->watchdog.data = (u_long)dev; 980 info->watchdog.data = (u_long)dev;
981 info->watchdog.expires = jiffies + HZ; 981 info->watchdog.expires = jiffies + HZ;
982 add_timer(&info->watchdog); 982 add_timer(&info->watchdog);
983 983
984 return ei_open(dev); 984 return ei_open(dev);
985 } /* pcnet_open */ 985 } /* pcnet_open */
986 986
987 /*====================================================================*/ 987 /*====================================================================*/
988 988
989 static int pcnet_close(struct net_device *dev) 989 static int pcnet_close(struct net_device *dev)
990 { 990 {
991 pcnet_dev_t *info = PRIV(dev); 991 pcnet_dev_t *info = PRIV(dev);
992 struct pcmcia_device *link = info->p_dev; 992 struct pcmcia_device *link = info->p_dev;
993 993
994 dev_dbg(&link->dev, "pcnet_close('%s')\n", dev->name); 994 dev_dbg(&link->dev, "pcnet_close('%s')\n", dev->name);
995 995
996 ei_close(dev); 996 ei_close(dev);
997 free_irq(dev->irq, dev); 997 free_irq(dev->irq, dev);
998 998
999 link->open--; 999 link->open--;
1000 netif_stop_queue(dev); 1000 netif_stop_queue(dev);
1001 del_timer_sync(&info->watchdog); 1001 del_timer_sync(&info->watchdog);
1002 1002
1003 return 0; 1003 return 0;
1004 } /* pcnet_close */ 1004 } /* pcnet_close */
1005 1005
1006 /*====================================================================== 1006 /*======================================================================
1007 1007
1008 Hard reset the card. This used to pause for the same period that 1008 Hard reset the card. This used to pause for the same period that
1009 a 8390 reset command required, but that shouldn't be necessary. 1009 a 8390 reset command required, but that shouldn't be necessary.
1010 1010
1011 ======================================================================*/ 1011 ======================================================================*/
1012 1012
1013 static void pcnet_reset_8390(struct net_device *dev) 1013 static void pcnet_reset_8390(struct net_device *dev)
1014 { 1014 {
1015 unsigned int nic_base = dev->base_addr; 1015 unsigned int nic_base = dev->base_addr;
1016 int i; 1016 int i;
1017 1017
1018 ei_status.txing = ei_status.dmaing = 0; 1018 ei_status.txing = ei_status.dmaing = 0;
1019 1019
1020 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, nic_base + E8390_CMD); 1020 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, nic_base + E8390_CMD);
1021 1021
1022 outb(inb(nic_base + PCNET_RESET), nic_base + PCNET_RESET); 1022 outb(inb(nic_base + PCNET_RESET), nic_base + PCNET_RESET);
1023 1023
1024 for (i = 0; i < 100; i++) { 1024 for (i = 0; i < 100; i++) {
1025 if ((inb_p(nic_base+EN0_ISR) & ENISR_RESET) != 0) 1025 if ((inb_p(nic_base+EN0_ISR) & ENISR_RESET) != 0)
1026 break; 1026 break;
1027 udelay(100); 1027 udelay(100);
1028 } 1028 }
1029 outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */ 1029 outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */
1030 1030
1031 if (i == 100) 1031 if (i == 100)
1032 printk(KERN_ERR "%s: pcnet_reset_8390() did not complete.\n", 1032 printk(KERN_ERR "%s: pcnet_reset_8390() did not complete.\n",
1033 dev->name); 1033 dev->name);
1034 set_misc_reg(dev); 1034 set_misc_reg(dev);
1035 1035
1036 } /* pcnet_reset_8390 */ 1036 } /* pcnet_reset_8390 */
1037 1037
1038 /*====================================================================*/ 1038 /*====================================================================*/
1039 1039
1040 static int set_config(struct net_device *dev, struct ifmap *map) 1040 static int set_config(struct net_device *dev, struct ifmap *map)
1041 { 1041 {
1042 pcnet_dev_t *info = PRIV(dev); 1042 pcnet_dev_t *info = PRIV(dev);
1043 if ((map->port != (u_char)(-1)) && (map->port != dev->if_port)) { 1043 if ((map->port != (u_char)(-1)) && (map->port != dev->if_port)) {
1044 if (!(info->flags & HAS_MISC_REG)) 1044 if (!(info->flags & HAS_MISC_REG))
1045 return -EOPNOTSUPP; 1045 return -EOPNOTSUPP;
1046 else if ((map->port < 1) || (map->port > 2)) 1046 else if ((map->port < 1) || (map->port > 2))
1047 return -EINVAL; 1047 return -EINVAL;
1048 dev->if_port = map->port; 1048 dev->if_port = map->port;
1049 printk(KERN_INFO "%s: switched to %s port\n", 1049 printk(KERN_INFO "%s: switched to %s port\n",
1050 dev->name, if_names[dev->if_port]); 1050 dev->name, if_names[dev->if_port]);
1051 NS8390_init(dev, 1); 1051 NS8390_init(dev, 1);
1052 } 1052 }
1053 return 0; 1053 return 0;
1054 } 1054 }
1055 1055
1056 /*====================================================================*/ 1056 /*====================================================================*/
1057 1057
1058 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id) 1058 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id)
1059 { 1059 {
1060 struct net_device *dev = dev_id; 1060 struct net_device *dev = dev_id;
1061 pcnet_dev_t *info; 1061 pcnet_dev_t *info;
1062 irqreturn_t ret = ei_interrupt(irq, dev_id); 1062 irqreturn_t ret = ei_interrupt(irq, dev_id);
1063 1063
1064 if (ret == IRQ_HANDLED) { 1064 if (ret == IRQ_HANDLED) {
1065 info = PRIV(dev); 1065 info = PRIV(dev);
1066 info->stale = 0; 1066 info->stale = 0;
1067 } 1067 }
1068 return ret; 1068 return ret;
1069 } 1069 }
1070 1070
1071 static void ei_watchdog(u_long arg) 1071 static void ei_watchdog(u_long arg)
1072 { 1072 {
1073 struct net_device *dev = (struct net_device *)arg; 1073 struct net_device *dev = (struct net_device *)arg;
1074 pcnet_dev_t *info = PRIV(dev); 1074 pcnet_dev_t *info = PRIV(dev);
1075 unsigned int nic_base = dev->base_addr; 1075 unsigned int nic_base = dev->base_addr;
1076 unsigned int mii_addr = nic_base + DLINK_GPIO; 1076 unsigned int mii_addr = nic_base + DLINK_GPIO;
1077 u_short link; 1077 u_short link;
1078 1078
1079 if (!netif_device_present(dev)) goto reschedule; 1079 if (!netif_device_present(dev)) goto reschedule;
1080 1080
1081 /* Check for pending interrupt with expired latency timer: with 1081 /* Check for pending interrupt with expired latency timer: with
1082 this, we can limp along even if the interrupt is blocked */ 1082 this, we can limp along even if the interrupt is blocked */
1083 if (info->stale++ && (inb_p(nic_base + EN0_ISR) & ENISR_ALL)) { 1083 if (info->stale++ && (inb_p(nic_base + EN0_ISR) & ENISR_ALL)) {
1084 if (!info->fast_poll) 1084 if (!info->fast_poll)
1085 printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name); 1085 printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
1086 ei_irq_wrapper(dev->irq, dev); 1086 ei_irq_wrapper(dev->irq, dev);
1087 info->fast_poll = HZ; 1087 info->fast_poll = HZ;
1088 } 1088 }
1089 if (info->fast_poll) { 1089 if (info->fast_poll) {
1090 info->fast_poll--; 1090 info->fast_poll--;
1091 info->watchdog.expires = jiffies + 1; 1091 info->watchdog.expires = jiffies + 1;
1092 add_timer(&info->watchdog); 1092 add_timer(&info->watchdog);
1093 return; 1093 return;
1094 } 1094 }
1095 1095
1096 if (!(info->flags & HAS_MII)) 1096 if (!(info->flags & HAS_MII))
1097 goto reschedule; 1097 goto reschedule;
1098 1098
1099 mdio_read(mii_addr, info->phy_id, 1); 1099 mdio_read(mii_addr, info->phy_id, 1);
1100 link = mdio_read(mii_addr, info->phy_id, 1); 1100 link = mdio_read(mii_addr, info->phy_id, 1);
1101 if (!link || (link == 0xffff)) { 1101 if (!link || (link == 0xffff)) {
1102 if (info->eth_phy) { 1102 if (info->eth_phy) {
1103 info->phy_id = info->eth_phy = 0; 1103 info->phy_id = info->eth_phy = 0;
1104 } else { 1104 } else {
1105 printk(KERN_INFO "%s: MII is missing!\n", dev->name); 1105 printk(KERN_INFO "%s: MII is missing!\n", dev->name);
1106 info->flags &= ~HAS_MII; 1106 info->flags &= ~HAS_MII;
1107 } 1107 }
1108 goto reschedule; 1108 goto reschedule;
1109 } 1109 }
1110 1110
1111 link &= 0x0004; 1111 link &= 0x0004;
1112 if (link != info->link_status) { 1112 if (link != info->link_status) {
1113 u_short p = mdio_read(mii_addr, info->phy_id, 5); 1113 u_short p = mdio_read(mii_addr, info->phy_id, 5);
1114 printk(KERN_INFO "%s: %s link beat\n", dev->name, 1114 printk(KERN_INFO "%s: %s link beat\n", dev->name,
1115 (link) ? "found" : "lost"); 1115 (link) ? "found" : "lost");
1116 if (link && (info->flags & IS_DL10022)) { 1116 if (link && (info->flags & IS_DL10022)) {
1117 /* Disable collision detection on full duplex links */ 1117 /* Disable collision detection on full duplex links */
1118 outb((p & 0x0140) ? 4 : 0, nic_base + DLINK_DIAG); 1118 outb((p & 0x0140) ? 4 : 0, nic_base + DLINK_DIAG);
1119 } else if (link && (info->flags & IS_DL10019)) { 1119 } else if (link && (info->flags & IS_DL10019)) {
1120 /* Disable collision detection on full duplex links */ 1120 /* Disable collision detection on full duplex links */
1121 write_asic(dev->base_addr, 4, (p & 0x140) ? DL19FDUPLX : 0); 1121 write_asic(dev->base_addr, 4, (p & 0x140) ? DL19FDUPLX : 0);
1122 } 1122 }
1123 if (link) { 1123 if (link) {
1124 if (info->phy_id == info->eth_phy) { 1124 if (info->phy_id == info->eth_phy) {
1125 if (p) 1125 if (p)
1126 printk(KERN_INFO "%s: autonegotiation complete: " 1126 printk(KERN_INFO "%s: autonegotiation complete: "
1127 "%sbaseT-%cD selected\n", dev->name, 1127 "%sbaseT-%cD selected\n", dev->name,
1128 ((p & 0x0180) ? "100" : "10"), 1128 ((p & 0x0180) ? "100" : "10"),
1129 ((p & 0x0140) ? 'F' : 'H')); 1129 ((p & 0x0140) ? 'F' : 'H'));
1130 else 1130 else
1131 printk(KERN_INFO "%s: link partner did not " 1131 printk(KERN_INFO "%s: link partner did not "
1132 "autonegotiate\n", dev->name); 1132 "autonegotiate\n", dev->name);
1133 } 1133 }
1134 NS8390_init(dev, 1); 1134 NS8390_init(dev, 1);
1135 } 1135 }
1136 info->link_status = link; 1136 info->link_status = link;
1137 } 1137 }
1138 if (info->pna_phy && time_after(jiffies, info->mii_reset + 6*HZ)) { 1138 if (info->pna_phy && time_after(jiffies, info->mii_reset + 6*HZ)) {
1139 link = mdio_read(mii_addr, info->eth_phy, 1) & 0x0004; 1139 link = mdio_read(mii_addr, info->eth_phy, 1) & 0x0004;
1140 if (((info->phy_id == info->pna_phy) && link) || 1140 if (((info->phy_id == info->pna_phy) && link) ||
1141 ((info->phy_id != info->pna_phy) && !link)) { 1141 ((info->phy_id != info->pna_phy) && !link)) {
1142 /* isolate this MII and try flipping to the other one */ 1142 /* isolate this MII and try flipping to the other one */
1143 mdio_write(mii_addr, info->phy_id, 0, 0x0400); 1143 mdio_write(mii_addr, info->phy_id, 0, 0x0400);
1144 info->phy_id ^= info->pna_phy ^ info->eth_phy; 1144 info->phy_id ^= info->pna_phy ^ info->eth_phy;
1145 printk(KERN_INFO "%s: switched to %s transceiver\n", dev->name, 1145 printk(KERN_INFO "%s: switched to %s transceiver\n", dev->name,
1146 (info->phy_id == info->eth_phy) ? "ethernet" : "PNA"); 1146 (info->phy_id == info->eth_phy) ? "ethernet" : "PNA");
1147 mdio_write(mii_addr, info->phy_id, 0, 1147 mdio_write(mii_addr, info->phy_id, 0,
1148 (info->phy_id == info->eth_phy) ? 0x1000 : 0); 1148 (info->phy_id == info->eth_phy) ? 0x1000 : 0);
1149 info->link_status = 0; 1149 info->link_status = 0;
1150 info->mii_reset = jiffies; 1150 info->mii_reset = jiffies;
1151 } 1151 }
1152 } 1152 }
1153 1153
1154 reschedule: 1154 reschedule:
1155 info->watchdog.expires = jiffies + HZ; 1155 info->watchdog.expires = jiffies + HZ;
1156 add_timer(&info->watchdog); 1156 add_timer(&info->watchdog);
1157 } 1157 }
1158 1158
1159 /*====================================================================*/ 1159 /*====================================================================*/
1160 1160
1161 static void netdev_get_drvinfo(struct net_device *dev, 1161 static void netdev_get_drvinfo(struct net_device *dev,
1162 struct ethtool_drvinfo *info) 1162 struct ethtool_drvinfo *info)
1163 { 1163 {
1164 strcpy(info->driver, "pcnet_cs"); 1164 strcpy(info->driver, "pcnet_cs");
1165 } 1165 }
1166 1166
1167 static const struct ethtool_ops netdev_ethtool_ops = { 1167 static const struct ethtool_ops netdev_ethtool_ops = {
1168 .get_drvinfo = netdev_get_drvinfo, 1168 .get_drvinfo = netdev_get_drvinfo,
1169 }; 1169 };
1170 1170
1171 /*====================================================================*/ 1171 /*====================================================================*/
1172 1172
1173 1173
1174 static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 1174 static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1175 { 1175 {
1176 pcnet_dev_t *info = PRIV(dev); 1176 pcnet_dev_t *info = PRIV(dev);
1177 struct mii_ioctl_data *data = if_mii(rq); 1177 struct mii_ioctl_data *data = if_mii(rq);
1178 unsigned int mii_addr = dev->base_addr + DLINK_GPIO; 1178 unsigned int mii_addr = dev->base_addr + DLINK_GPIO;
1179 1179
1180 if (!(info->flags & (IS_DL10019|IS_DL10022))) 1180 if (!(info->flags & (IS_DL10019|IS_DL10022)))
1181 return -EINVAL; 1181 return -EINVAL;
1182 1182
1183 switch (cmd) { 1183 switch (cmd) {
1184 case SIOCGMIIPHY: 1184 case SIOCGMIIPHY:
1185 data->phy_id = info->phy_id; 1185 data->phy_id = info->phy_id;
1186 case SIOCGMIIREG: /* Read MII PHY register. */ 1186 case SIOCGMIIREG: /* Read MII PHY register. */
1187 data->val_out = mdio_read(mii_addr, data->phy_id, data->reg_num & 0x1f); 1187 data->val_out = mdio_read(mii_addr, data->phy_id, data->reg_num & 0x1f);
1188 return 0; 1188 return 0;
1189 case SIOCSMIIREG: /* Write MII PHY register. */ 1189 case SIOCSMIIREG: /* Write MII PHY register. */
1190 mdio_write(mii_addr, data->phy_id, data->reg_num & 0x1f, data->val_in); 1190 mdio_write(mii_addr, data->phy_id, data->reg_num & 0x1f, data->val_in);
1191 return 0; 1191 return 0;
1192 } 1192 }
1193 return -EOPNOTSUPP; 1193 return -EOPNOTSUPP;
1194 } 1194 }
1195 1195
1196 /*====================================================================*/ 1196 /*====================================================================*/
1197 1197
1198 static void dma_get_8390_hdr(struct net_device *dev, 1198 static void dma_get_8390_hdr(struct net_device *dev,
1199 struct e8390_pkt_hdr *hdr, 1199 struct e8390_pkt_hdr *hdr,
1200 int ring_page) 1200 int ring_page)
1201 { 1201 {
1202 unsigned int nic_base = dev->base_addr; 1202 unsigned int nic_base = dev->base_addr;
1203 1203
1204 if (ei_status.dmaing) { 1204 if (ei_status.dmaing) {
1205 printk(KERN_NOTICE "%s: DMAing conflict in dma_block_input." 1205 printk(KERN_NOTICE "%s: DMAing conflict in dma_block_input."
1206 "[DMAstat:%1x][irqlock:%1x]\n", 1206 "[DMAstat:%1x][irqlock:%1x]\n",
1207 dev->name, ei_status.dmaing, ei_status.irqlock); 1207 dev->name, ei_status.dmaing, ei_status.irqlock);
1208 return; 1208 return;
1209 } 1209 }
1210 1210
1211 ei_status.dmaing |= 0x01; 1211 ei_status.dmaing |= 0x01;
1212 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base + PCNET_CMD); 1212 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base + PCNET_CMD);
1213 outb_p(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO); 1213 outb_p(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO);
1214 outb_p(0, nic_base + EN0_RCNTHI); 1214 outb_p(0, nic_base + EN0_RCNTHI);
1215 outb_p(0, nic_base + EN0_RSARLO); /* On page boundary */ 1215 outb_p(0, nic_base + EN0_RSARLO); /* On page boundary */
1216 outb_p(ring_page, nic_base + EN0_RSARHI); 1216 outb_p(ring_page, nic_base + EN0_RSARHI);
1217 outb_p(E8390_RREAD+E8390_START, nic_base + PCNET_CMD); 1217 outb_p(E8390_RREAD+E8390_START, nic_base + PCNET_CMD);
1218 1218
1219 insw(nic_base + PCNET_DATAPORT, hdr, 1219 insw(nic_base + PCNET_DATAPORT, hdr,
1220 sizeof(struct e8390_pkt_hdr)>>1); 1220 sizeof(struct e8390_pkt_hdr)>>1);
1221 /* Fix for big endian systems */ 1221 /* Fix for big endian systems */
1222 hdr->count = le16_to_cpu(hdr->count); 1222 hdr->count = le16_to_cpu(hdr->count);
1223 1223
1224 outb_p(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */ 1224 outb_p(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
1225 ei_status.dmaing &= ~0x01; 1225 ei_status.dmaing &= ~0x01;
1226 } 1226 }
1227 1227
1228 /*====================================================================*/ 1228 /*====================================================================*/
1229 1229
1230 static void dma_block_input(struct net_device *dev, int count, 1230 static void dma_block_input(struct net_device *dev, int count,
1231 struct sk_buff *skb, int ring_offset) 1231 struct sk_buff *skb, int ring_offset)
1232 { 1232 {
1233 unsigned int nic_base = dev->base_addr; 1233 unsigned int nic_base = dev->base_addr;
1234 int xfer_count = count; 1234 int xfer_count = count;
1235 char *buf = skb->data; 1235 char *buf = skb->data;
1236 1236
1237 if ((ei_debug > 4) && (count != 4)) 1237 if ((ei_debug > 4) && (count != 4))
1238 pr_debug("%s: [bi=%d]\n", dev->name, count+4); 1238 pr_debug("%s: [bi=%d]\n", dev->name, count+4);
1239 if (ei_status.dmaing) { 1239 if (ei_status.dmaing) {
1240 printk(KERN_NOTICE "%s: DMAing conflict in dma_block_input." 1240 printk(KERN_NOTICE "%s: DMAing conflict in dma_block_input."
1241 "[DMAstat:%1x][irqlock:%1x]\n", 1241 "[DMAstat:%1x][irqlock:%1x]\n",
1242 dev->name, ei_status.dmaing, ei_status.irqlock); 1242 dev->name, ei_status.dmaing, ei_status.irqlock);
1243 return; 1243 return;
1244 } 1244 }
1245 ei_status.dmaing |= 0x01; 1245 ei_status.dmaing |= 0x01;
1246 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base + PCNET_CMD); 1246 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base + PCNET_CMD);
1247 outb_p(count & 0xff, nic_base + EN0_RCNTLO); 1247 outb_p(count & 0xff, nic_base + EN0_RCNTLO);
1248 outb_p(count >> 8, nic_base + EN0_RCNTHI); 1248 outb_p(count >> 8, nic_base + EN0_RCNTHI);
1249 outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO); 1249 outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
1250 outb_p(ring_offset >> 8, nic_base + EN0_RSARHI); 1250 outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
1251 outb_p(E8390_RREAD+E8390_START, nic_base + PCNET_CMD); 1251 outb_p(E8390_RREAD+E8390_START, nic_base + PCNET_CMD);
1252 1252
1253 insw(nic_base + PCNET_DATAPORT,buf,count>>1); 1253 insw(nic_base + PCNET_DATAPORT,buf,count>>1);
1254 if (count & 0x01) 1254 if (count & 0x01)
1255 buf[count-1] = inb(nic_base + PCNET_DATAPORT), xfer_count++; 1255 buf[count-1] = inb(nic_base + PCNET_DATAPORT), xfer_count++;
1256 1256
1257 /* This was for the ALPHA version only, but enough people have been 1257 /* This was for the ALPHA version only, but enough people have been
1258 encountering problems that it is still here. */ 1258 encountering problems that it is still here. */
1259 #ifdef PCMCIA_DEBUG 1259 #ifdef PCMCIA_DEBUG
1260 if (ei_debug > 4) { /* DMA termination address check... */ 1260 if (ei_debug > 4) { /* DMA termination address check... */
1261 int addr, tries = 20; 1261 int addr, tries = 20;
1262 do { 1262 do {
1263 /* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here 1263 /* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here
1264 -- it's broken for Rx on some cards! */ 1264 -- it's broken for Rx on some cards! */
1265 int high = inb_p(nic_base + EN0_RSARHI); 1265 int high = inb_p(nic_base + EN0_RSARHI);
1266 int low = inb_p(nic_base + EN0_RSARLO); 1266 int low = inb_p(nic_base + EN0_RSARLO);
1267 addr = (high << 8) + low; 1267 addr = (high << 8) + low;
1268 if (((ring_offset + xfer_count) & 0xff) == (addr & 0xff)) 1268 if (((ring_offset + xfer_count) & 0xff) == (addr & 0xff))
1269 break; 1269 break;
1270 } while (--tries > 0); 1270 } while (--tries > 0);
1271 if (tries <= 0) 1271 if (tries <= 0)
1272 printk(KERN_NOTICE "%s: RX transfer address mismatch," 1272 printk(KERN_NOTICE "%s: RX transfer address mismatch,"
1273 "%#4.4x (expected) vs. %#4.4x (actual).\n", 1273 "%#4.4x (expected) vs. %#4.4x (actual).\n",
1274 dev->name, ring_offset + xfer_count, addr); 1274 dev->name, ring_offset + xfer_count, addr);
1275 } 1275 }
1276 #endif 1276 #endif
1277 outb_p(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */ 1277 outb_p(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
1278 ei_status.dmaing &= ~0x01; 1278 ei_status.dmaing &= ~0x01;
1279 } /* dma_block_input */ 1279 } /* dma_block_input */
1280 1280
1281 /*====================================================================*/ 1281 /*====================================================================*/
1282 1282
1283 static void dma_block_output(struct net_device *dev, int count, 1283 static void dma_block_output(struct net_device *dev, int count,
1284 const u_char *buf, const int start_page) 1284 const u_char *buf, const int start_page)
1285 { 1285 {
1286 unsigned int nic_base = dev->base_addr; 1286 unsigned int nic_base = dev->base_addr;
1287 pcnet_dev_t *info = PRIV(dev); 1287 pcnet_dev_t *info = PRIV(dev);
1288 #ifdef PCMCIA_DEBUG 1288 #ifdef PCMCIA_DEBUG
1289 int retries = 0; 1289 int retries = 0;
1290 #endif 1290 #endif
1291 u_long dma_start; 1291 u_long dma_start;
1292 1292
1293 #ifdef PCMCIA_DEBUG 1293 #ifdef PCMCIA_DEBUG
1294 if (ei_debug > 4) 1294 if (ei_debug > 4)
1295 printk(KERN_DEBUG "%s: [bo=%d]\n", dev->name, count); 1295 printk(KERN_DEBUG "%s: [bo=%d]\n", dev->name, count);
1296 #endif 1296 #endif
1297 1297
1298 /* Round the count up for word writes. Do we need to do this? 1298 /* Round the count up for word writes. Do we need to do this?
1299 What effect will an odd byte count have on the 8390? 1299 What effect will an odd byte count have on the 8390?
1300 I should check someday. */ 1300 I should check someday. */
1301 if (count & 0x01) 1301 if (count & 0x01)
1302 count++; 1302 count++;
1303 if (ei_status.dmaing) { 1303 if (ei_status.dmaing) {
1304 printk(KERN_NOTICE "%s: DMAing conflict in dma_block_output." 1304 printk(KERN_NOTICE "%s: DMAing conflict in dma_block_output."
1305 "[DMAstat:%1x][irqlock:%1x]\n", 1305 "[DMAstat:%1x][irqlock:%1x]\n",
1306 dev->name, ei_status.dmaing, ei_status.irqlock); 1306 dev->name, ei_status.dmaing, ei_status.irqlock);
1307 return; 1307 return;
1308 } 1308 }
1309 ei_status.dmaing |= 0x01; 1309 ei_status.dmaing |= 0x01;
1310 /* We should already be in page 0, but to be safe... */ 1310 /* We should already be in page 0, but to be safe... */
1311 outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base+PCNET_CMD); 1311 outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base+PCNET_CMD);
1312 1312
1313 #ifdef PCMCIA_DEBUG 1313 #ifdef PCMCIA_DEBUG
1314 retry: 1314 retry:
1315 #endif 1315 #endif
1316 1316
1317 outb_p(ENISR_RDC, nic_base + EN0_ISR); 1317 outb_p(ENISR_RDC, nic_base + EN0_ISR);
1318 1318
1319 /* Now the normal output. */ 1319 /* Now the normal output. */
1320 outb_p(count & 0xff, nic_base + EN0_RCNTLO); 1320 outb_p(count & 0xff, nic_base + EN0_RCNTLO);
1321 outb_p(count >> 8, nic_base + EN0_RCNTHI); 1321 outb_p(count >> 8, nic_base + EN0_RCNTHI);
1322 outb_p(0x00, nic_base + EN0_RSARLO); 1322 outb_p(0x00, nic_base + EN0_RSARLO);
1323 outb_p(start_page, nic_base + EN0_RSARHI); 1323 outb_p(start_page, nic_base + EN0_RSARHI);
1324 1324
1325 outb_p(E8390_RWRITE+E8390_START, nic_base + PCNET_CMD); 1325 outb_p(E8390_RWRITE+E8390_START, nic_base + PCNET_CMD);
1326 outsw(nic_base + PCNET_DATAPORT, buf, count>>1); 1326 outsw(nic_base + PCNET_DATAPORT, buf, count>>1);
1327 1327
1328 dma_start = jiffies; 1328 dma_start = jiffies;
1329 1329
1330 #ifdef PCMCIA_DEBUG 1330 #ifdef PCMCIA_DEBUG
1331 /* This was for the ALPHA version only, but enough people have been 1331 /* This was for the ALPHA version only, but enough people have been
1332 encountering problems that it is still here. */ 1332 encountering problems that it is still here. */
1333 if (ei_debug > 4) { /* DMA termination address check... */ 1333 if (ei_debug > 4) { /* DMA termination address check... */
1334 int addr, tries = 20; 1334 int addr, tries = 20;
1335 do { 1335 do {
1336 int high = inb_p(nic_base + EN0_RSARHI); 1336 int high = inb_p(nic_base + EN0_RSARHI);
1337 int low = inb_p(nic_base + EN0_RSARLO); 1337 int low = inb_p(nic_base + EN0_RSARLO);
1338 addr = (high << 8) + low; 1338 addr = (high << 8) + low;
1339 if ((start_page << 8) + count == addr) 1339 if ((start_page << 8) + count == addr)
1340 break; 1340 break;
1341 } while (--tries > 0); 1341 } while (--tries > 0);
1342 if (tries <= 0) { 1342 if (tries <= 0) {
1343 printk(KERN_NOTICE "%s: Tx packet transfer address mismatch," 1343 printk(KERN_NOTICE "%s: Tx packet transfer address mismatch,"
1344 "%#4.4x (expected) vs. %#4.4x (actual).\n", 1344 "%#4.4x (expected) vs. %#4.4x (actual).\n",
1345 dev->name, (start_page << 8) + count, addr); 1345 dev->name, (start_page << 8) + count, addr);
1346 if (retries++ == 0) 1346 if (retries++ == 0)
1347 goto retry; 1347 goto retry;
1348 } 1348 }
1349 } 1349 }
1350 #endif 1350 #endif
1351 1351
1352 while ((inb_p(nic_base + EN0_ISR) & ENISR_RDC) == 0) 1352 while ((inb_p(nic_base + EN0_ISR) & ENISR_RDC) == 0)
1353 if (time_after(jiffies, dma_start + PCNET_RDC_TIMEOUT)) { 1353 if (time_after(jiffies, dma_start + PCNET_RDC_TIMEOUT)) {
1354 printk(KERN_NOTICE "%s: timeout waiting for Tx RDC.\n", 1354 printk(KERN_NOTICE "%s: timeout waiting for Tx RDC.\n",
1355 dev->name); 1355 dev->name);
1356 pcnet_reset_8390(dev); 1356 pcnet_reset_8390(dev);
1357 NS8390_init(dev, 1); 1357 NS8390_init(dev, 1);
1358 break; 1358 break;
1359 } 1359 }
1360 1360
1361 outb_p(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */ 1361 outb_p(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
1362 if (info->flags & DELAY_OUTPUT) 1362 if (info->flags & DELAY_OUTPUT)
1363 udelay((long)delay_time); 1363 udelay((long)delay_time);
1364 ei_status.dmaing &= ~0x01; 1364 ei_status.dmaing &= ~0x01;
1365 } 1365 }
1366 1366
1367 /*====================================================================*/ 1367 /*====================================================================*/
1368 1368
1369 static int setup_dma_config(struct pcmcia_device *link, int start_pg, 1369 static int setup_dma_config(struct pcmcia_device *link, int start_pg,
1370 int stop_pg) 1370 int stop_pg)
1371 { 1371 {
1372 struct net_device *dev = link->priv; 1372 struct net_device *dev = link->priv;
1373 1373
1374 ei_status.tx_start_page = start_pg; 1374 ei_status.tx_start_page = start_pg;
1375 ei_status.rx_start_page = start_pg + TX_PAGES; 1375 ei_status.rx_start_page = start_pg + TX_PAGES;
1376 ei_status.stop_page = stop_pg; 1376 ei_status.stop_page = stop_pg;
1377 1377
1378 /* set up block i/o functions */ 1378 /* set up block i/o functions */
1379 ei_status.get_8390_hdr = &dma_get_8390_hdr; 1379 ei_status.get_8390_hdr = &dma_get_8390_hdr;
1380 ei_status.block_input = &dma_block_input; 1380 ei_status.block_input = &dma_block_input;
1381 ei_status.block_output = &dma_block_output; 1381 ei_status.block_output = &dma_block_output;
1382 1382
1383 return 0; 1383 return 0;
1384 } 1384 }
1385 1385
1386 /*====================================================================*/ 1386 /*====================================================================*/
1387 1387
1388 static void copyin(void *dest, void __iomem *src, int c) 1388 static void copyin(void *dest, void __iomem *src, int c)
1389 { 1389 {
1390 u_short *d = dest; 1390 u_short *d = dest;
1391 u_short __iomem *s = src; 1391 u_short __iomem *s = src;
1392 int odd; 1392 int odd;
1393 1393
1394 if (c <= 0) 1394 if (c <= 0)
1395 return; 1395 return;
1396 odd = (c & 1); c >>= 1; 1396 odd = (c & 1); c >>= 1;
1397 1397
1398 if (c) { 1398 if (c) {
1399 do { *d++ = __raw_readw(s++); } while (--c); 1399 do { *d++ = __raw_readw(s++); } while (--c);
1400 } 1400 }
1401 /* get last byte by fetching a word and masking */ 1401 /* get last byte by fetching a word and masking */
1402 if (odd) 1402 if (odd)
1403 *((u_char *)d) = readw(s) & 0xff; 1403 *((u_char *)d) = readw(s) & 0xff;
1404 } 1404 }
1405 1405
1406 static void copyout(void __iomem *dest, const void *src, int c) 1406 static void copyout(void __iomem *dest, const void *src, int c)
1407 { 1407 {
1408 u_short __iomem *d = dest; 1408 u_short __iomem *d = dest;
1409 const u_short *s = src; 1409 const u_short *s = src;
1410 int odd; 1410 int odd;
1411 1411
1412 if (c <= 0) 1412 if (c <= 0)
1413 return; 1413 return;
1414 odd = (c & 1); c >>= 1; 1414 odd = (c & 1); c >>= 1;
1415 1415
1416 if (c) { 1416 if (c) {
1417 do { __raw_writew(*s++, d++); } while (--c); 1417 do { __raw_writew(*s++, d++); } while (--c);
1418 } 1418 }
1419 /* copy last byte doing a read-modify-write */ 1419 /* copy last byte doing a read-modify-write */
1420 if (odd) 1420 if (odd)
1421 writew((readw(d) & 0xff00) | *(u_char *)s, d); 1421 writew((readw(d) & 0xff00) | *(u_char *)s, d);
1422 } 1422 }
1423 1423
1424 /*====================================================================*/ 1424 /*====================================================================*/
1425 1425
1426 static void shmem_get_8390_hdr(struct net_device *dev, 1426 static void shmem_get_8390_hdr(struct net_device *dev,
1427 struct e8390_pkt_hdr *hdr, 1427 struct e8390_pkt_hdr *hdr,
1428 int ring_page) 1428 int ring_page)
1429 { 1429 {
1430 void __iomem *xfer_start = ei_status.mem + (TX_PAGES<<8) 1430 void __iomem *xfer_start = ei_status.mem + (TX_PAGES<<8)
1431 + (ring_page << 8) 1431 + (ring_page << 8)
1432 - (ei_status.rx_start_page << 8); 1432 - (ei_status.rx_start_page << 8);
1433 1433
1434 copyin(hdr, xfer_start, sizeof(struct e8390_pkt_hdr)); 1434 copyin(hdr, xfer_start, sizeof(struct e8390_pkt_hdr));
1435 /* Fix for big endian systems */ 1435 /* Fix for big endian systems */
1436 hdr->count = le16_to_cpu(hdr->count); 1436 hdr->count = le16_to_cpu(hdr->count);
1437 } 1437 }
1438 1438
1439 /*====================================================================*/ 1439 /*====================================================================*/
1440 1440
1441 static void shmem_block_input(struct net_device *dev, int count, 1441 static void shmem_block_input(struct net_device *dev, int count,
1442 struct sk_buff *skb, int ring_offset) 1442 struct sk_buff *skb, int ring_offset)
1443 { 1443 {
1444 void __iomem *base = ei_status.mem; 1444 void __iomem *base = ei_status.mem;
1445 unsigned long offset = (TX_PAGES<<8) + ring_offset 1445 unsigned long offset = (TX_PAGES<<8) + ring_offset
1446 - (ei_status.rx_start_page << 8); 1446 - (ei_status.rx_start_page << 8);
1447 char *buf = skb->data; 1447 char *buf = skb->data;
1448 1448
1449 if (offset + count > ei_status.priv) { 1449 if (offset + count > ei_status.priv) {
1450 /* We must wrap the input move. */ 1450 /* We must wrap the input move. */
1451 int semi_count = ei_status.priv - offset; 1451 int semi_count = ei_status.priv - offset;
1452 copyin(buf, base + offset, semi_count); 1452 copyin(buf, base + offset, semi_count);
1453 buf += semi_count; 1453 buf += semi_count;
1454 offset = TX_PAGES<<8; 1454 offset = TX_PAGES<<8;
1455 count -= semi_count; 1455 count -= semi_count;
1456 } 1456 }
1457 copyin(buf, base + offset, count); 1457 copyin(buf, base + offset, count);
1458 } 1458 }
1459 1459
1460 /*====================================================================*/ 1460 /*====================================================================*/
1461 1461
1462 static void shmem_block_output(struct net_device *dev, int count, 1462 static void shmem_block_output(struct net_device *dev, int count,
1463 const u_char *buf, const int start_page) 1463 const u_char *buf, const int start_page)
1464 { 1464 {
1465 void __iomem *shmem = ei_status.mem + (start_page << 8); 1465 void __iomem *shmem = ei_status.mem + (start_page << 8);
1466 shmem -= ei_status.tx_start_page << 8; 1466 shmem -= ei_status.tx_start_page << 8;
1467 copyout(shmem, buf, count); 1467 copyout(shmem, buf, count);
1468 } 1468 }
1469 1469
1470 /*====================================================================*/ 1470 /*====================================================================*/
1471 1471
1472 static int setup_shmem_window(struct pcmcia_device *link, int start_pg, 1472 static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
1473 int stop_pg, int cm_offset) 1473 int stop_pg, int cm_offset)
1474 { 1474 {
1475 struct net_device *dev = link->priv; 1475 struct net_device *dev = link->priv;
1476 pcnet_dev_t *info = PRIV(dev); 1476 pcnet_dev_t *info = PRIV(dev);
1477 win_req_t req; 1477 win_req_t req;
1478 memreq_t mem; 1478 memreq_t mem;
1479 int i, window_size, offset, ret; 1479 int i, window_size, offset, ret;
1480 1480
1481 window_size = (stop_pg - start_pg) << 8; 1481 window_size = (stop_pg - start_pg) << 8;
1482 if (window_size > 32 * 1024) 1482 if (window_size > 32 * 1024)
1483 window_size = 32 * 1024; 1483 window_size = 32 * 1024;
1484 1484
1485 /* Make sure it's a power of two. */ 1485 /* Make sure it's a power of two. */
1486 window_size = roundup_pow_of_two(window_size); 1486 window_size = roundup_pow_of_two(window_size);
1487 1487
1488 /* Allocate a memory window */ 1488 /* Allocate a memory window */
1489 req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE; 1489 req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE;
1490 req.Attributes |= WIN_USE_WAIT; 1490 req.Attributes |= WIN_USE_WAIT;
1491 req.Base = 0; req.Size = window_size; 1491 req.Base = 0; req.Size = window_size;
1492 req.AccessSpeed = mem_speed; 1492 req.AccessSpeed = mem_speed;
1493 ret = pcmcia_request_window(link, &req, &link->win); 1493 ret = pcmcia_request_window(link, &req, &link->win);
1494 if (ret) 1494 if (ret)
1495 goto failed; 1495 goto failed;
1496 1496
1497 mem.CardOffset = (start_pg << 8) + cm_offset; 1497 mem.CardOffset = (start_pg << 8) + cm_offset;
1498 offset = mem.CardOffset % window_size; 1498 offset = mem.CardOffset % window_size;
1499 mem.CardOffset -= offset; 1499 mem.CardOffset -= offset;
1500 mem.Page = 0; 1500 mem.Page = 0;
1501 ret = pcmcia_map_mem_page(link, link->win, &mem); 1501 ret = pcmcia_map_mem_page(link, link->win, &mem);
1502 if (ret) 1502 if (ret)
1503 goto failed; 1503 goto failed;
1504 1504
1505 /* Try scribbling on the buffer */ 1505 /* Try scribbling on the buffer */
1506 info->base = ioremap(req.Base, window_size); 1506 info->base = ioremap(req.Base, window_size);
1507 for (i = 0; i < (TX_PAGES<<8); i += 2) 1507 for (i = 0; i < (TX_PAGES<<8); i += 2)
1508 __raw_writew((i>>1), info->base+offset+i); 1508 __raw_writew((i>>1), info->base+offset+i);
1509 udelay(100); 1509 udelay(100);
1510 for (i = 0; i < (TX_PAGES<<8); i += 2) 1510 for (i = 0; i < (TX_PAGES<<8); i += 2)
1511 if (__raw_readw(info->base+offset+i) != (i>>1)) break; 1511 if (__raw_readw(info->base+offset+i) != (i>>1)) break;
1512 pcnet_reset_8390(dev); 1512 pcnet_reset_8390(dev);
1513 if (i != (TX_PAGES<<8)) { 1513 if (i != (TX_PAGES<<8)) {
1514 iounmap(info->base); 1514 iounmap(info->base);
1515 pcmcia_release_window(link, link->win); 1515 pcmcia_release_window(link, link->win);
1516 info->base = NULL; link->win = 0; 1516 info->base = NULL; link->win = 0;
1517 goto failed; 1517 goto failed;
1518 } 1518 }
1519 1519
1520 ei_status.mem = info->base + offset; 1520 ei_status.mem = info->base + offset;
1521 ei_status.priv = req.Size; 1521 ei_status.priv = req.Size;
1522 dev->mem_start = (u_long)ei_status.mem; 1522 dev->mem_start = (u_long)ei_status.mem;
1523 dev->mem_end = dev->mem_start + req.Size; 1523 dev->mem_end = dev->mem_start + req.Size;
1524 1524
1525 ei_status.tx_start_page = start_pg; 1525 ei_status.tx_start_page = start_pg;
1526 ei_status.rx_start_page = start_pg + TX_PAGES; 1526 ei_status.rx_start_page = start_pg + TX_PAGES;
1527 ei_status.stop_page = start_pg + ((req.Size - offset) >> 8); 1527 ei_status.stop_page = start_pg + ((req.Size - offset) >> 8);
1528 1528
1529 /* set up block i/o functions */ 1529 /* set up block i/o functions */
1530 ei_status.get_8390_hdr = &shmem_get_8390_hdr; 1530 ei_status.get_8390_hdr = &shmem_get_8390_hdr;
1531 ei_status.block_input = &shmem_block_input; 1531 ei_status.block_input = &shmem_block_input;
1532 ei_status.block_output = &shmem_block_output; 1532 ei_status.block_output = &shmem_block_output;
1533 1533
1534 info->flags |= USE_SHMEM; 1534 info->flags |= USE_SHMEM;
1535 return 0; 1535 return 0;
1536 1536
1537 failed: 1537 failed:
1538 return 1; 1538 return 1;
1539 } 1539 }
1540 1540
1541 /*====================================================================*/ 1541 /*====================================================================*/
1542 1542
1543 static struct pcmcia_device_id pcnet_ids[] = { 1543 static struct pcmcia_device_id pcnet_ids[] = {
1544 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0057, 0x0021), 1544 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0057, 0x0021),
1545 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0104, 0x000a), 1545 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0104, 0x000a),
1546 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0105, 0xea15), 1546 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0105, 0xea15),
1547 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0143, 0x3341), 1547 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0143, 0x3341),
1548 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0143, 0xc0ab), 1548 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0143, 0xc0ab),
1549 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x021b, 0x0101), 1549 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x021b, 0x0101),
1550 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x08a1, 0xc0ab), 1550 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x08a1, 0xc0ab),
1551 PCMCIA_PFC_DEVICE_PROD_ID12(0, "AnyCom", "Fast Ethernet + 56K COMBO", 0x578ba6e7, 0xb0ac62c4), 1551 PCMCIA_PFC_DEVICE_PROD_ID12(0, "AnyCom", "Fast Ethernet + 56K COMBO", 0x578ba6e7, 0xb0ac62c4),
1552 PCMCIA_PFC_DEVICE_PROD_ID12(0, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff), 1552 PCMCIA_PFC_DEVICE_PROD_ID12(0, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff),
1553 PCMCIA_PFC_DEVICE_PROD_ID12(0, "Grey Cell", "GCS3000", 0x2a151fac, 0x48b932ae), 1553 PCMCIA_PFC_DEVICE_PROD_ID12(0, "Grey Cell", "GCS3000", 0x2a151fac, 0x48b932ae),
1554 PCMCIA_PFC_DEVICE_PROD_ID12(0, "Linksys", "EtherFast 10&100 + 56K PC Card (PCMLM56)", 0x0733cc81, 0xb3765033), 1554 PCMCIA_PFC_DEVICE_PROD_ID12(0, "Linksys", "EtherFast 10&100 + 56K PC Card (PCMLM56)", 0x0733cc81, 0xb3765033),
1555 PCMCIA_PFC_DEVICE_PROD_ID12(0, "LINKSYS", "PCMLM336", 0xf7cb0b07, 0x7a821b58), 1555 PCMCIA_PFC_DEVICE_PROD_ID12(0, "LINKSYS", "PCMLM336", 0xf7cb0b07, 0x7a821b58),
1556 PCMCIA_PFC_DEVICE_PROD_ID12(0, "MICRO RESEARCH", "COMBO-L/M-336", 0xb2ced065, 0x3ced0555), 1556 PCMCIA_PFC_DEVICE_PROD_ID12(0, "MICRO RESEARCH", "COMBO-L/M-336", 0xb2ced065, 0x3ced0555),
1557 PCMCIA_PFC_DEVICE_PROD_ID12(0, "PCMCIAs", "ComboCard", 0xdcfe12d3, 0xcd8906cc), 1557 PCMCIA_PFC_DEVICE_PROD_ID12(0, "PCMCIAs", "ComboCard", 0xdcfe12d3, 0xcd8906cc),
1558 PCMCIA_PFC_DEVICE_PROD_ID12(0, "PCMCIAs", "LanModem", 0xdcfe12d3, 0xc67c648f), 1558 PCMCIA_PFC_DEVICE_PROD_ID12(0, "PCMCIAs", "LanModem", 0xdcfe12d3, 0xc67c648f),
1559 PCMCIA_MFC_DEVICE_PROD_ID12(0, "IBM", "Home and Away 28.8 PC Card ", 0xb569a6e5, 0x5bd4ff2c), 1559 PCMCIA_MFC_DEVICE_PROD_ID12(0, "IBM", "Home and Away 28.8 PC Card ", 0xb569a6e5, 0x5bd4ff2c),
1560 PCMCIA_MFC_DEVICE_PROD_ID12(0, "IBM", "Home and Away Credit Card Adapter", 0xb569a6e5, 0x4bdf15c3), 1560 PCMCIA_MFC_DEVICE_PROD_ID12(0, "IBM", "Home and Away Credit Card Adapter", 0xb569a6e5, 0x4bdf15c3),
1561 PCMCIA_MFC_DEVICE_PROD_ID12(0, "IBM", "w95 Home and Away Credit Card ", 0xb569a6e5, 0xae911c15), 1561 PCMCIA_MFC_DEVICE_PROD_ID12(0, "IBM", "w95 Home and Away Credit Card ", 0xb569a6e5, 0xae911c15),
1562 PCMCIA_MFC_DEVICE_PROD_ID123(0, "APEX DATA", "MULTICARD", "ETHERNET-MODEM", 0x11c2da09, 0x7289dc5d, 0xaad95e1f), 1562 PCMCIA_MFC_DEVICE_PROD_ID123(0, "APEX DATA", "MULTICARD", "ETHERNET-MODEM", 0x11c2da09, 0x7289dc5d, 0xaad95e1f),
1563 PCMCIA_MFC_DEVICE_PROD_ID2(0, "FAX/Modem/Ethernet Combo Card ", 0x1ed59302), 1563 PCMCIA_MFC_DEVICE_PROD_ID2(0, "FAX/Modem/Ethernet Combo Card ", 0x1ed59302),
1564 PCMCIA_DEVICE_MANF_CARD(0x0057, 0x1004), 1564 PCMCIA_DEVICE_MANF_CARD(0x0057, 0x1004),
1565 PCMCIA_DEVICE_MANF_CARD(0x0104, 0x000d), 1565 PCMCIA_DEVICE_MANF_CARD(0x0104, 0x000d),
1566 PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0075), 1566 PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0075),
1567 PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0145), 1567 PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0145),
1568 PCMCIA_DEVICE_MANF_CARD(0x0149, 0x0230), 1568 PCMCIA_DEVICE_MANF_CARD(0x0149, 0x0230),
1569 PCMCIA_DEVICE_MANF_CARD(0x0149, 0x4530), 1569 PCMCIA_DEVICE_MANF_CARD(0x0149, 0x4530),
1570 PCMCIA_DEVICE_MANF_CARD(0x0149, 0xc1ab), 1570 PCMCIA_DEVICE_MANF_CARD(0x0149, 0xc1ab),
1571 PCMCIA_DEVICE_MANF_CARD(0x0186, 0x0110), 1571 PCMCIA_DEVICE_MANF_CARD(0x0186, 0x0110),
1572 PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x2328), 1572 PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x2328),
1573 PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x8041), 1573 PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x8041),
1574 PCMCIA_DEVICE_MANF_CARD(0x0213, 0x2452), 1574 PCMCIA_DEVICE_MANF_CARD(0x0213, 0x2452),
1575 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0300), 1575 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0300),
1576 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0307), 1576 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0307),
1577 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030a), 1577 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030a),
1578 PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1103), 1578 PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1103),
1579 PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1121), 1579 PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1121),
1580 PCMCIA_DEVICE_PROD_ID12("2408LAN", "Ethernet", 0x352fff7f, 0x00b2e941), 1580 PCMCIA_DEVICE_PROD_ID12("2408LAN", "Ethernet", 0x352fff7f, 0x00b2e941),
1581 PCMCIA_DEVICE_PROD_ID1234("Socket", "CF 10/100 Ethernet Card", "Revision B", "05/11/06", 0xb38bcc2e, 0x4de88352, 0xeaca6c8d, 0x7e57c22e), 1581 PCMCIA_DEVICE_PROD_ID1234("Socket", "CF 10/100 Ethernet Card", "Revision B", "05/11/06", 0xb38bcc2e, 0x4de88352, 0xeaca6c8d, 0x7e57c22e),
1582 PCMCIA_DEVICE_PROD_ID123("Cardwell", "PCMCIA", "ETHERNET", 0x9533672e, 0x281f1c5d, 0x3ff7175b), 1582 PCMCIA_DEVICE_PROD_ID123("Cardwell", "PCMCIA", "ETHERNET", 0x9533672e, 0x281f1c5d, 0x3ff7175b),
1583 PCMCIA_DEVICE_PROD_ID123("CNet ", "CN30BC", "ETHERNET", 0x9fe55d3d, 0x85601198, 0x3ff7175b), 1583 PCMCIA_DEVICE_PROD_ID123("CNet ", "CN30BC", "ETHERNET", 0x9fe55d3d, 0x85601198, 0x3ff7175b),
1584 PCMCIA_DEVICE_PROD_ID123("Digital", "Ethernet", "Adapter", 0x9999ab35, 0x00b2e941, 0x4b0d829e), 1584 PCMCIA_DEVICE_PROD_ID123("Digital", "Ethernet", "Adapter", 0x9999ab35, 0x00b2e941, 0x4b0d829e),
1585 PCMCIA_DEVICE_PROD_ID123("Edimax Technology Inc.", "PCMCIA", "Ethernet Card", 0x738a0019, 0x281f1c5d, 0x5e9d92c0), 1585 PCMCIA_DEVICE_PROD_ID123("Edimax Technology Inc.", "PCMCIA", "Ethernet Card", 0x738a0019, 0x281f1c5d, 0x5e9d92c0),
1586 PCMCIA_DEVICE_PROD_ID123("EFA ", "EFA207", "ETHERNET", 0x3d294be4, 0xeb9aab6c, 0x3ff7175b), 1586 PCMCIA_DEVICE_PROD_ID123("EFA ", "EFA207", "ETHERNET", 0x3d294be4, 0xeb9aab6c, 0x3ff7175b),
1587 PCMCIA_DEVICE_PROD_ID123("I-O DATA", "PCLA", "ETHERNET", 0x1d55d7ec, 0xe4c64d34, 0x3ff7175b), 1587 PCMCIA_DEVICE_PROD_ID123("I-O DATA", "PCLA", "ETHERNET", 0x1d55d7ec, 0xe4c64d34, 0x3ff7175b),
1588 PCMCIA_DEVICE_PROD_ID123("IO DATA", "PCLATE", "ETHERNET", 0x547e66dc, 0x6b260753, 0x3ff7175b), 1588 PCMCIA_DEVICE_PROD_ID123("IO DATA", "PCLATE", "ETHERNET", 0x547e66dc, 0x6b260753, 0x3ff7175b),
1589 PCMCIA_DEVICE_PROD_ID123("KingMax Technology Inc.", "EN10-T2", "PCMCIA Ethernet Card", 0x932b7189, 0x699e4436, 0x6f6652e0), 1589 PCMCIA_DEVICE_PROD_ID123("KingMax Technology Inc.", "EN10-T2", "PCMCIA Ethernet Card", 0x932b7189, 0x699e4436, 0x6f6652e0),
1590 PCMCIA_DEVICE_PROD_ID123("PCMCIA", "PCMCIA-ETHERNET-CARD", "UE2216", 0x281f1c5d, 0xd4cd2f20, 0xb87add82), 1590 PCMCIA_DEVICE_PROD_ID123("PCMCIA", "PCMCIA-ETHERNET-CARD", "UE2216", 0x281f1c5d, 0xd4cd2f20, 0xb87add82),
1591 PCMCIA_DEVICE_PROD_ID123("PCMCIA", "PCMCIA-ETHERNET-CARD", "UE2620", 0x281f1c5d, 0xd4cd2f20, 0x7d3d83a8), 1591 PCMCIA_DEVICE_PROD_ID123("PCMCIA", "PCMCIA-ETHERNET-CARD", "UE2620", 0x281f1c5d, 0xd4cd2f20, 0x7d3d83a8),
1592 PCMCIA_DEVICE_PROD_ID1("2412LAN", 0x67f236ab), 1592 PCMCIA_DEVICE_PROD_ID1("2412LAN", 0x67f236ab),
1593 PCMCIA_DEVICE_PROD_ID12("ACCTON", "EN2212", 0xdfc6b5b2, 0xcb112a11), 1593 PCMCIA_DEVICE_PROD_ID12("ACCTON", "EN2212", 0xdfc6b5b2, 0xcb112a11),
1594 PCMCIA_DEVICE_PROD_ID12("ACCTON", "EN2216-PCMCIA-ETHERNET", 0xdfc6b5b2, 0x5542bfff), 1594 PCMCIA_DEVICE_PROD_ID12("ACCTON", "EN2216-PCMCIA-ETHERNET", 0xdfc6b5b2, 0x5542bfff),
1595 PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA100-PCM-T V2 100/10M LAN PC Card", 0xbb7fbdd7, 0xcd91cc68), 1595 PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA100-PCM-T V2 100/10M LAN PC Card", 0xbb7fbdd7, 0xcd91cc68),
1596 PCMCIA_DEVICE_PROD_ID12("Allied Telesis K.K.", "LA100-PCM V2", 0x36634a66, 0xc6d05997), 1596 PCMCIA_DEVICE_PROD_ID12("Allied Telesis K.K.", "LA100-PCM V2", 0x36634a66, 0xc6d05997),
1597 PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA-PCM_V2", 0xbb7fBdd7, 0x28e299f8), 1597 PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA-PCM_V2", 0xbb7fBdd7, 0x28e299f8),
1598 PCMCIA_DEVICE_PROD_ID12("Allied Telesis K.K.", "LA-PCM V3", 0x36634a66, 0x62241d96), 1598 PCMCIA_DEVICE_PROD_ID12("Allied Telesis K.K.", "LA-PCM V3", 0x36634a66, 0x62241d96),
1599 PCMCIA_DEVICE_PROD_ID12("AmbiCom", "AMB8010", 0x5070a7f9, 0x82f96e96), 1599 PCMCIA_DEVICE_PROD_ID12("AmbiCom", "AMB8010", 0x5070a7f9, 0x82f96e96),
1600 PCMCIA_DEVICE_PROD_ID12("AmbiCom", "AMB8610", 0x5070a7f9, 0x86741224), 1600 PCMCIA_DEVICE_PROD_ID12("AmbiCom", "AMB8610", 0x5070a7f9, 0x86741224),
1601 PCMCIA_DEVICE_PROD_ID12("AmbiCom Inc", "AMB8002", 0x93b15570, 0x75ec3efb), 1601 PCMCIA_DEVICE_PROD_ID12("AmbiCom Inc", "AMB8002", 0x93b15570, 0x75ec3efb),
1602 PCMCIA_DEVICE_PROD_ID12("AmbiCom Inc", "AMB8002T", 0x93b15570, 0x461c5247), 1602 PCMCIA_DEVICE_PROD_ID12("AmbiCom Inc", "AMB8002T", 0x93b15570, 0x461c5247),
1603 PCMCIA_DEVICE_PROD_ID12("AmbiCom Inc", "AMB8010", 0x93b15570, 0x82f96e96), 1603 PCMCIA_DEVICE_PROD_ID12("AmbiCom Inc", "AMB8010", 0x93b15570, 0x82f96e96),
1604 PCMCIA_DEVICE_PROD_ID12("AnyCom", "ECO Ethernet", 0x578ba6e7, 0x0a9888c1), 1604 PCMCIA_DEVICE_PROD_ID12("AnyCom", "ECO Ethernet", 0x578ba6e7, 0x0a9888c1),
1605 PCMCIA_DEVICE_PROD_ID12("AnyCom", "ECO Ethernet 10/100", 0x578ba6e7, 0x939fedbd), 1605 PCMCIA_DEVICE_PROD_ID12("AnyCom", "ECO Ethernet 10/100", 0x578ba6e7, 0x939fedbd),
1606 PCMCIA_DEVICE_PROD_ID12("AROWANA", "PCMCIA Ethernet LAN Card", 0x313adbc8, 0x08d9f190), 1606 PCMCIA_DEVICE_PROD_ID12("AROWANA", "PCMCIA Ethernet LAN Card", 0x313adbc8, 0x08d9f190),
1607 PCMCIA_DEVICE_PROD_ID12("ASANTE", "FriendlyNet PC Card", 0x3a7ade0f, 0x41c64504), 1607 PCMCIA_DEVICE_PROD_ID12("ASANTE", "FriendlyNet PC Card", 0x3a7ade0f, 0x41c64504),
1608 PCMCIA_DEVICE_PROD_ID12("Billionton", "LNT-10TB", 0x552ab682, 0xeeb1ba6a), 1608 PCMCIA_DEVICE_PROD_ID12("Billionton", "LNT-10TB", 0x552ab682, 0xeeb1ba6a),
1609 PCMCIA_DEVICE_PROD_ID12("CF", "10Base-Ethernet", 0x44ebf863, 0x93ae4d79), 1609 PCMCIA_DEVICE_PROD_ID12("CF", "10Base-Ethernet", 0x44ebf863, 0x93ae4d79),
1610 PCMCIA_DEVICE_PROD_ID12("CNet", "CN40BC Ethernet", 0xbc477dde, 0xfba775a7), 1610 PCMCIA_DEVICE_PROD_ID12("CNet", "CN40BC Ethernet", 0xbc477dde, 0xfba775a7),
1611 PCMCIA_DEVICE_PROD_ID12("COMPU-SHACK", "BASEline PCMCIA 10 MBit Ethernetadapter", 0xfa2e424d, 0xe9190d8a), 1611 PCMCIA_DEVICE_PROD_ID12("COMPU-SHACK", "BASEline PCMCIA 10 MBit Ethernetadapter", 0xfa2e424d, 0xe9190d8a),
1612 PCMCIA_DEVICE_PROD_ID12("COMPU-SHACK", "FASTline PCMCIA 10/100 Fast-Ethernet", 0xfa2e424d, 0x3953d9b9), 1612 PCMCIA_DEVICE_PROD_ID12("COMPU-SHACK", "FASTline PCMCIA 10/100 Fast-Ethernet", 0xfa2e424d, 0x3953d9b9),
1613 PCMCIA_DEVICE_PROD_ID12("CONTEC", "C-NET(PC)C-10L", 0x21cab552, 0xf6f90722), 1613 PCMCIA_DEVICE_PROD_ID12("CONTEC", "C-NET(PC)C-10L", 0x21cab552, 0xf6f90722),
1614 PCMCIA_DEVICE_PROD_ID12("corega", "FEther PCC-TXF", 0x0a21501a, 0xa51564a2), 1614 PCMCIA_DEVICE_PROD_ID12("corega", "FEther PCC-TXF", 0x0a21501a, 0xa51564a2),
1615 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega EtherII PCC-T", 0x5261440f, 0xfa9d85bd), 1615 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega EtherII PCC-T", 0x5261440f, 0xfa9d85bd),
1616 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega EtherII PCC-TD", 0x5261440f, 0xc49bd73d), 1616 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega EtherII PCC-TD", 0x5261440f, 0xc49bd73d),
1617 PCMCIA_DEVICE_PROD_ID12("Corega K.K.", "corega EtherII PCC-TD", 0xd4fdcbd8, 0xc49bd73d), 1617 PCMCIA_DEVICE_PROD_ID12("Corega K.K.", "corega EtherII PCC-TD", 0xd4fdcbd8, 0xc49bd73d),
1618 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega Ether PCC-T", 0x5261440f, 0x6705fcaa), 1618 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega Ether PCC-T", 0x5261440f, 0x6705fcaa),
1619 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega Ether PCC-TD", 0x5261440f, 0x47d5ca83), 1619 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega Ether PCC-TD", 0x5261440f, 0x47d5ca83),
1620 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FastEther PCC-TX", 0x5261440f, 0x485e85d9), 1620 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FastEther PCC-TX", 0x5261440f, 0x485e85d9),
1621 PCMCIA_DEVICE_PROD_ID12("Corega,K.K.", "Ethernet LAN Card", 0x110d26d9, 0x9fd2f0a2), 1621 PCMCIA_DEVICE_PROD_ID12("Corega,K.K.", "Ethernet LAN Card", 0x110d26d9, 0x9fd2f0a2),
1622 PCMCIA_DEVICE_PROD_ID12("corega,K.K.", "Ethernet LAN Card", 0x9791a90e, 0x9fd2f0a2), 1622 PCMCIA_DEVICE_PROD_ID12("corega,K.K.", "Ethernet LAN Card", 0x9791a90e, 0x9fd2f0a2),
1623 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "(CG-LAPCCTXD)", 0x5261440f, 0x73ec0d88), 1623 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "(CG-LAPCCTXD)", 0x5261440f, 0x73ec0d88),
1624 PCMCIA_DEVICE_PROD_ID12("CouplerlessPCMCIA", "100BASE", 0xee5af0ad, 0x7c2add04), 1624 PCMCIA_DEVICE_PROD_ID12("CouplerlessPCMCIA", "100BASE", 0xee5af0ad, 0x7c2add04),
1625 PCMCIA_DEVICE_PROD_ID12("CyQ've", "ELA-010", 0x77008979, 0x9d8d445d), 1625 PCMCIA_DEVICE_PROD_ID12("CyQ've", "ELA-010", 0x77008979, 0x9d8d445d),
1626 PCMCIA_DEVICE_PROD_ID12("CyQ've", "ELA-110E 10/100M LAN Card", 0x77008979, 0xfd184814), 1626 PCMCIA_DEVICE_PROD_ID12("CyQ've", "ELA-110E 10/100M LAN Card", 0x77008979, 0xfd184814),
1627 PCMCIA_DEVICE_PROD_ID12("DataTrek.", "NetCard ", 0x5cd66d9d, 0x84697ce0), 1627 PCMCIA_DEVICE_PROD_ID12("DataTrek.", "NetCard ", 0x5cd66d9d, 0x84697ce0),
1628 PCMCIA_DEVICE_PROD_ID12("Dayna Communications, Inc.", "CommuniCard E", 0x0c629325, 0xb4e7dbaf), 1628 PCMCIA_DEVICE_PROD_ID12("Dayna Communications, Inc.", "CommuniCard E", 0x0c629325, 0xb4e7dbaf),
1629 PCMCIA_DEVICE_PROD_ID12("Digicom", "Palladio LAN 10/100", 0x697403d8, 0xe160b995), 1629 PCMCIA_DEVICE_PROD_ID12("Digicom", "Palladio LAN 10/100", 0x697403d8, 0xe160b995),
1630 PCMCIA_DEVICE_PROD_ID12("Digicom", "Palladio LAN 10/100 Dongless", 0x697403d8, 0xa6d3b233), 1630 PCMCIA_DEVICE_PROD_ID12("Digicom", "Palladio LAN 10/100 Dongless", 0x697403d8, 0xa6d3b233),
1631 PCMCIA_DEVICE_PROD_ID12("DIGITAL", "DEPCM-XX", 0x69616cb3, 0xe600e76e), 1631 PCMCIA_DEVICE_PROD_ID12("DIGITAL", "DEPCM-XX", 0x69616cb3, 0xe600e76e),
1632 PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-650", 0x1a424a1c, 0xf28c8398), 1632 PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-650", 0x1a424a1c, 0xf28c8398),
1633 PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-660", 0x1a424a1c, 0xd9a1d05b), 1633 PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-660", 0x1a424a1c, 0xd9a1d05b),
1634 PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-660+", 0x1a424a1c, 0x50dcd0ec), 1634 PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-660+", 0x1a424a1c, 0x50dcd0ec),
1635 PCMCIA_DEVICE_PROD_ID12("D-Link", "DFE-650", 0x1a424a1c, 0x0f0073f9), 1635 PCMCIA_DEVICE_PROD_ID12("D-Link", "DFE-650", 0x1a424a1c, 0x0f0073f9),
1636 PCMCIA_DEVICE_PROD_ID12("Dual Speed", "10/100 PC Card", 0x725b842d, 0xf1efee84), 1636 PCMCIA_DEVICE_PROD_ID12("Dual Speed", "10/100 PC Card", 0x725b842d, 0xf1efee84),
1637 PCMCIA_DEVICE_PROD_ID12("Dual Speed", "10/100 Port Attached PC Card", 0x725b842d, 0x2db1f8e9), 1637 PCMCIA_DEVICE_PROD_ID12("Dual Speed", "10/100 Port Attached PC Card", 0x725b842d, 0x2db1f8e9),
1638 PCMCIA_DEVICE_PROD_ID12("Dynalink", "L10BC", 0x55632fd5, 0xdc65f2b1), 1638 PCMCIA_DEVICE_PROD_ID12("Dynalink", "L10BC", 0x55632fd5, 0xdc65f2b1),
1639 PCMCIA_DEVICE_PROD_ID12("DYNALINK", "L10BC", 0x6a26d1cf, 0xdc65f2b1), 1639 PCMCIA_DEVICE_PROD_ID12("DYNALINK", "L10BC", 0x6a26d1cf, 0xdc65f2b1),
1640 PCMCIA_DEVICE_PROD_ID12("DYNALINK", "L10C", 0x6a26d1cf, 0xc4f84efb), 1640 PCMCIA_DEVICE_PROD_ID12("DYNALINK", "L10C", 0x6a26d1cf, 0xc4f84efb),
1641 PCMCIA_DEVICE_PROD_ID12("E-CARD", "E-CARD", 0x6701da11, 0x6701da11), 1641 PCMCIA_DEVICE_PROD_ID12("E-CARD", "E-CARD", 0x6701da11, 0x6701da11),
1642 PCMCIA_DEVICE_PROD_ID12("EIGER Labs Inc.", "Ethernet 10BaseT card", 0x53c864c6, 0xedd059f6), 1642 PCMCIA_DEVICE_PROD_ID12("EIGER Labs Inc.", "Ethernet 10BaseT card", 0x53c864c6, 0xedd059f6),
1643 PCMCIA_DEVICE_PROD_ID12("EIGER Labs Inc.", "Ethernet Combo card", 0x53c864c6, 0x929c486c), 1643 PCMCIA_DEVICE_PROD_ID12("EIGER Labs Inc.", "Ethernet Combo card", 0x53c864c6, 0x929c486c),
1644 PCMCIA_DEVICE_PROD_ID12("Ethernet", "Adapter", 0x00b2e941, 0x4b0d829e), 1644 PCMCIA_DEVICE_PROD_ID12("Ethernet", "Adapter", 0x00b2e941, 0x4b0d829e),
1645 PCMCIA_DEVICE_PROD_ID12("Ethernet Adapter", "E2000 PCMCIA Ethernet", 0x96767301, 0x71fbbc61), 1645 PCMCIA_DEVICE_PROD_ID12("Ethernet Adapter", "E2000 PCMCIA Ethernet", 0x96767301, 0x71fbbc61),
1646 PCMCIA_DEVICE_PROD_ID12("Ethernet PCMCIA adapter", "EP-210", 0x8dd86181, 0xf2b52517), 1646 PCMCIA_DEVICE_PROD_ID12("Ethernet PCMCIA adapter", "EP-210", 0x8dd86181, 0xf2b52517),
1647 PCMCIA_DEVICE_PROD_ID12("Fast Ethernet", "Adapter", 0xb4be14e3, 0x4b0d829e), 1647 PCMCIA_DEVICE_PROD_ID12("Fast Ethernet", "Adapter", 0xb4be14e3, 0x4b0d829e),
1648 PCMCIA_DEVICE_PROD_ID12("Grey Cell", "GCS2000", 0x2a151fac, 0xf00555cb), 1648 PCMCIA_DEVICE_PROD_ID12("Grey Cell", "GCS2000", 0x2a151fac, 0xf00555cb),
1649 PCMCIA_DEVICE_PROD_ID12("Grey Cell", "GCS2220", 0x2a151fac, 0xc1b7e327), 1649 PCMCIA_DEVICE_PROD_ID12("Grey Cell", "GCS2220", 0x2a151fac, 0xc1b7e327),
1650 PCMCIA_DEVICE_PROD_ID12("GVC", "NIC-2000p", 0x76e171bd, 0x6eb1c947), 1650 PCMCIA_DEVICE_PROD_ID12("GVC", "NIC-2000p", 0x76e171bd, 0x6eb1c947),
1651 PCMCIA_DEVICE_PROD_ID12("IBM Corp.", "Ethernet", 0xe3736c88, 0x00b2e941), 1651 PCMCIA_DEVICE_PROD_ID12("IBM Corp.", "Ethernet", 0xe3736c88, 0x00b2e941),
1652 PCMCIA_DEVICE_PROD_ID12("IC-CARD", "IC-CARD", 0x60cb09a6, 0x60cb09a6), 1652 PCMCIA_DEVICE_PROD_ID12("IC-CARD", "IC-CARD", 0x60cb09a6, 0x60cb09a6),
1653 PCMCIA_DEVICE_PROD_ID12("IC-CARD+", "IC-CARD+", 0x93693494, 0x93693494), 1653 PCMCIA_DEVICE_PROD_ID12("IC-CARD+", "IC-CARD+", 0x93693494, 0x93693494),
1654 PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCETTX", 0x547e66dc, 0x6fc5459b), 1654 PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCETTX", 0x547e66dc, 0x6fc5459b),
1655 PCMCIA_DEVICE_PROD_ID12("iPort", "10/100 Ethernet Card", 0x56c538d2, 0x11b0ffc0), 1655 PCMCIA_DEVICE_PROD_ID12("iPort", "10/100 Ethernet Card", 0x56c538d2, 0x11b0ffc0),
1656 PCMCIA_DEVICE_PROD_ID12("KANSAI ELECTRIC CO.,LTD", "KLA-PCM/T", 0xb18dc3b4, 0xcc51a956), 1656 PCMCIA_DEVICE_PROD_ID12("KANSAI ELECTRIC CO.,LTD", "KLA-PCM/T", 0xb18dc3b4, 0xcc51a956),
1657 PCMCIA_DEVICE_PROD_ID12("KCI", "PE520 PCMCIA Ethernet Adapter", 0xa89b87d3, 0x1eb88e64), 1657 PCMCIA_DEVICE_PROD_ID12("KCI", "PE520 PCMCIA Ethernet Adapter", 0xa89b87d3, 0x1eb88e64),
1658 PCMCIA_DEVICE_PROD_ID12("KINGMAX", "EN10T2T", 0x7bcb459a, 0xa5c81fa5), 1658 PCMCIA_DEVICE_PROD_ID12("KINGMAX", "EN10T2T", 0x7bcb459a, 0xa5c81fa5),
1659 PCMCIA_DEVICE_PROD_ID12("Kingston", "KNE-PC2", 0x1128e633, 0xce2a89b3), 1659 PCMCIA_DEVICE_PROD_ID12("Kingston", "KNE-PC2", 0x1128e633, 0xce2a89b3),
1660 PCMCIA_DEVICE_PROD_ID12("Kingston Technology Corp.", "EtheRx PC Card Ethernet Adapter", 0x313c7be3, 0x0afb54a2), 1660 PCMCIA_DEVICE_PROD_ID12("Kingston Technology Corp.", "EtheRx PC Card Ethernet Adapter", 0x313c7be3, 0x0afb54a2),
1661 PCMCIA_DEVICE_PROD_ID12("Laneed", "LD-10/100CD", 0x1b7827b2, 0xcda71d1c), 1661 PCMCIA_DEVICE_PROD_ID12("Laneed", "LD-10/100CD", 0x1b7827b2, 0xcda71d1c),
1662 PCMCIA_DEVICE_PROD_ID12("Laneed", "LD-CDF", 0x1b7827b2, 0xfec71e40), 1662 PCMCIA_DEVICE_PROD_ID12("Laneed", "LD-CDF", 0x1b7827b2, 0xfec71e40),
1663 PCMCIA_DEVICE_PROD_ID12("Laneed", "LD-CDL/T", 0x1b7827b2, 0x79fba4f7), 1663 PCMCIA_DEVICE_PROD_ID12("Laneed", "LD-CDL/T", 0x1b7827b2, 0x79fba4f7),
1664 PCMCIA_DEVICE_PROD_ID12("Laneed", "LD-CDS", 0x1b7827b2, 0x931afaab), 1664 PCMCIA_DEVICE_PROD_ID12("Laneed", "LD-CDS", 0x1b7827b2, 0x931afaab),
1665 PCMCIA_DEVICE_PROD_ID12("LEMEL", "LM-N89TX PRO", 0xbbefb52f, 0xd2897a97), 1665 PCMCIA_DEVICE_PROD_ID12("LEMEL", "LM-N89TX PRO", 0xbbefb52f, 0xd2897a97),
1666 PCMCIA_DEVICE_PROD_ID12("Linksys", "Combo PCMCIA EthernetCard (EC2T)", 0x0733cc81, 0x32ee8c78), 1666 PCMCIA_DEVICE_PROD_ID12("Linksys", "Combo PCMCIA EthernetCard (EC2T)", 0x0733cc81, 0x32ee8c78),
1667 PCMCIA_DEVICE_PROD_ID12("LINKSYS", "E-CARD", 0xf7cb0b07, 0x6701da11), 1667 PCMCIA_DEVICE_PROD_ID12("LINKSYS", "E-CARD", 0xf7cb0b07, 0x6701da11),
1668 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 Integrated PC Card (PCM100)", 0x0733cc81, 0x453c3f9d), 1668 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 Integrated PC Card (PCM100)", 0x0733cc81, 0x453c3f9d),
1669 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100)", 0x0733cc81, 0x66c5a389), 1669 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100)", 0x0733cc81, 0x66c5a389),
1670 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V2)", 0x0733cc81, 0x3a3b28e9), 1670 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V2)", 0x0733cc81, 0x3a3b28e9),
1671 PCMCIA_DEVICE_PROD_ID12("Linksys", "HomeLink Phoneline + 10/100 Network PC Card (PCM100H1)", 0x733cc81, 0x7a3e5c3a), 1671 PCMCIA_DEVICE_PROD_ID12("Linksys", "HomeLink Phoneline + 10/100 Network PC Card (PCM100H1)", 0x733cc81, 0x7a3e5c3a),
1672 PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN100TX", 0x88fcdeda, 0x6d772737), 1672 PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN100TX", 0x88fcdeda, 0x6d772737),
1673 PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN100TE", 0x88fcdeda, 0x0e714bee), 1673 PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN100TE", 0x88fcdeda, 0x0e714bee),
1674 PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN20T", 0x88fcdeda, 0x81090922), 1674 PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN20T", 0x88fcdeda, 0x81090922),
1675 PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN10TE", 0x88fcdeda, 0xc1e2521c), 1675 PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN10TE", 0x88fcdeda, 0xc1e2521c),
1676 PCMCIA_DEVICE_PROD_ID12("LONGSHINE", "PCMCIA Ethernet Card", 0xf866b0b0, 0x6f6652e0), 1676 PCMCIA_DEVICE_PROD_ID12("LONGSHINE", "PCMCIA Ethernet Card", 0xf866b0b0, 0x6f6652e0),
1677 PCMCIA_DEVICE_PROD_ID12("MACNICA", "ME1-JEIDA", 0x20841b68, 0xaf8a3578), 1677 PCMCIA_DEVICE_PROD_ID12("MACNICA", "ME1-JEIDA", 0x20841b68, 0xaf8a3578),
1678 PCMCIA_DEVICE_PROD_ID12("Macsense", "MPC-10", 0xd830297f, 0xd265c307), 1678 PCMCIA_DEVICE_PROD_ID12("Macsense", "MPC-10", 0xd830297f, 0xd265c307),
1679 PCMCIA_DEVICE_PROD_ID12("Matsushita Electric Industrial Co.,LTD.", "CF-VEL211", 0x44445376, 0x8ded41d4), 1679 PCMCIA_DEVICE_PROD_ID12("Matsushita Electric Industrial Co.,LTD.", "CF-VEL211", 0x44445376, 0x8ded41d4),
1680 PCMCIA_DEVICE_PROD_ID12("MAXTECH", "PCN2000", 0x78d64bc0, 0xca0ca4b8), 1680 PCMCIA_DEVICE_PROD_ID12("MAXTECH", "PCN2000", 0x78d64bc0, 0xca0ca4b8),
1681 PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC2-T", 0x481e0094, 0xa2eb0cf3), 1681 PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC2-T", 0x481e0094, 0xa2eb0cf3),
1682 PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC2-TX", 0x481e0094, 0x41a6916c), 1682 PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC2-TX", 0x481e0094, 0x41a6916c),
1683 PCMCIA_DEVICE_PROD_ID12("Microcom C.E.", "Travel Card LAN 10/100", 0x4b91cec7, 0xe70220d6), 1683 PCMCIA_DEVICE_PROD_ID12("Microcom C.E.", "Travel Card LAN 10/100", 0x4b91cec7, 0xe70220d6),
1684 PCMCIA_DEVICE_PROD_ID12("Microdyne", "NE4200", 0x2e6da59b, 0x0478e472), 1684 PCMCIA_DEVICE_PROD_ID12("Microdyne", "NE4200", 0x2e6da59b, 0x0478e472),
1685 PCMCIA_DEVICE_PROD_ID12("MIDORI ELEC.", "LT-PCMT", 0x648d55c1, 0xbde526c7), 1685 PCMCIA_DEVICE_PROD_ID12("MIDORI ELEC.", "LT-PCMT", 0x648d55c1, 0xbde526c7),
1686 PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover 4100", 0x36e1191f, 0x60c229b9), 1686 PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover 4100", 0x36e1191f, 0x60c229b9),
1687 PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover NE4100", 0x36e1191f, 0xa6617ec8), 1687 PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover NE4100", 0x36e1191f, 0xa6617ec8),
1688 PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J12", 0x18df0ba0, 0xbc912d76), 1688 PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J12", 0x18df0ba0, 0xbc912d76),
1689 PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA410TX", 0x9aa79dc3, 0x60e5bc0e), 1689 PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA410TX", 0x9aa79dc3, 0x60e5bc0e),
1690 PCMCIA_DEVICE_PROD_ID12("Network Everywhere", "Fast Ethernet 10/100 PC Card", 0x820a67b6, 0x31ed1a5f), 1690 PCMCIA_DEVICE_PROD_ID12("Network Everywhere", "Fast Ethernet 10/100 PC Card", 0x820a67b6, 0x31ed1a5f),
1691 PCMCIA_DEVICE_PROD_ID12("NextCom K.K.", "Next Hawk", 0xaedaec74, 0xad050ef1), 1691 PCMCIA_DEVICE_PROD_ID12("NextCom K.K.", "Next Hawk", 0xaedaec74, 0xad050ef1),
1692 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100Mbps Ethernet Card", 0x281f1c5d, 0x6e41773b), 1692 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100Mbps Ethernet Card", 0x281f1c5d, 0x6e41773b),
1693 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Ethernet", 0x281f1c5d, 0x00b2e941), 1693 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Ethernet", 0x281f1c5d, 0x00b2e941),
1694 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "ETHERNET", 0x281f1c5d, 0x3ff7175b), 1694 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "ETHERNET", 0x281f1c5d, 0x3ff7175b),
1695 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Ethernet 10BaseT Card", 0x281f1c5d, 0x4de2f6c8), 1695 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Ethernet 10BaseT Card", 0x281f1c5d, 0x4de2f6c8),
1696 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Ethernet Card", 0x281f1c5d, 0x5e9d92c0), 1696 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Ethernet Card", 0x281f1c5d, 0x5e9d92c0),
1697 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Ethernet Combo card", 0x281f1c5d, 0x929c486c), 1697 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Ethernet Combo card", 0x281f1c5d, 0x929c486c),
1698 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "ETHERNET V1.0", 0x281f1c5d, 0x4d8817c8), 1698 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "ETHERNET V1.0", 0x281f1c5d, 0x4d8817c8),
1699 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEthernet", 0x281f1c5d, 0xfe871eeb), 1699 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEthernet", 0x281f1c5d, 0xfe871eeb),
1700 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Fast-Ethernet", 0x281f1c5d, 0x45f1f3b4), 1700 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Fast-Ethernet", 0x281f1c5d, 0x45f1f3b4),
1701 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FAST ETHERNET CARD", 0x281f1c5d, 0xec5dbca7), 1701 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FAST ETHERNET CARD", 0x281f1c5d, 0xec5dbca7),
1702 PCMCIA_DEVICE_PROD_ID12("PCMCIA LAN", "Ethernet", 0x7500e246, 0x00b2e941), 1702 PCMCIA_DEVICE_PROD_ID12("PCMCIA LAN", "Ethernet", 0x7500e246, 0x00b2e941),
1703 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "LNT-10TN", 0x281f1c5d, 0xe707f641), 1703 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "LNT-10TN", 0x281f1c5d, 0xe707f641),
1704 PCMCIA_DEVICE_PROD_ID12("PCMCIAs", "ComboCard", 0xdcfe12d3, 0xcd8906cc), 1704 PCMCIA_DEVICE_PROD_ID12("PCMCIAs", "ComboCard", 0xdcfe12d3, 0xcd8906cc),
1705 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "UE2212", 0x281f1c5d, 0xbf17199b), 1705 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "UE2212", 0x281f1c5d, 0xbf17199b),
1706 PCMCIA_DEVICE_PROD_ID12("PCMCIA", " Ethernet NE2000 Compatible", 0x281f1c5d, 0x42d5d7e1), 1706 PCMCIA_DEVICE_PROD_ID12("PCMCIA", " Ethernet NE2000 Compatible", 0x281f1c5d, 0x42d5d7e1),
1707 PCMCIA_DEVICE_PROD_ID12("PRETEC", "Ethernet CompactLAN 10baseT 3.3V", 0xebf91155, 0x30074c80), 1707 PCMCIA_DEVICE_PROD_ID12("PRETEC", "Ethernet CompactLAN 10baseT 3.3V", 0xebf91155, 0x30074c80),
1708 PCMCIA_DEVICE_PROD_ID12("PRETEC", "Ethernet CompactLAN 10BaseT 3.3V", 0xebf91155, 0x7f5a4f50), 1708 PCMCIA_DEVICE_PROD_ID12("PRETEC", "Ethernet CompactLAN 10BaseT 3.3V", 0xebf91155, 0x7f5a4f50),
1709 PCMCIA_DEVICE_PROD_ID12("Psion Dacom", "Gold Card Ethernet", 0xf5f025c2, 0x3a30e110), 1709 PCMCIA_DEVICE_PROD_ID12("Psion Dacom", "Gold Card Ethernet", 0xf5f025c2, 0x3a30e110),
1710 PCMCIA_DEVICE_PROD_ID12("=RELIA==", "Ethernet", 0xcdd0644a, 0x00b2e941), 1710 PCMCIA_DEVICE_PROD_ID12("=RELIA==", "Ethernet", 0xcdd0644a, 0x00b2e941),
1711 PCMCIA_DEVICE_PROD_ID12("RIOS Systems Co.", "PC CARD3 ETHERNET", 0x7dd33481, 0x10b41826), 1711 PCMCIA_DEVICE_PROD_ID12("RIOS Systems Co.", "PC CARD3 ETHERNET", 0x7dd33481, 0x10b41826),
1712 PCMCIA_DEVICE_PROD_ID12("RP", "1625B Ethernet NE2000 Compatible", 0xe3e66e22, 0xb96150df), 1712 PCMCIA_DEVICE_PROD_ID12("RP", "1625B Ethernet NE2000 Compatible", 0xe3e66e22, 0xb96150df),
1713 PCMCIA_DEVICE_PROD_ID12("RPTI", "EP400 Ethernet NE2000 Compatible", 0xdc6f88fd, 0x4a7e2ae0), 1713 PCMCIA_DEVICE_PROD_ID12("RPTI", "EP400 Ethernet NE2000 Compatible", 0xdc6f88fd, 0x4a7e2ae0),
1714 PCMCIA_DEVICE_PROD_ID12("RPTI", "EP401 Ethernet NE2000 Compatible", 0xdc6f88fd, 0x4bcbd7fd), 1714 PCMCIA_DEVICE_PROD_ID12("RPTI", "EP401 Ethernet NE2000 Compatible", 0xdc6f88fd, 0x4bcbd7fd),
1715 PCMCIA_DEVICE_PROD_ID12("RPTI LTD.", "EP400", 0xc53ac515, 0x81e39388), 1715 PCMCIA_DEVICE_PROD_ID12("RPTI LTD.", "EP400", 0xc53ac515, 0x81e39388),
1716 PCMCIA_DEVICE_PROD_ID12("SCM", "Ethernet Combo card", 0xbdc3b102, 0x929c486c), 1716 PCMCIA_DEVICE_PROD_ID12("SCM", "Ethernet Combo card", 0xbdc3b102, 0x929c486c),
1717 PCMCIA_DEVICE_PROD_ID12("Seiko Epson Corp.", "Ethernet", 0x09928730, 0x00b2e941), 1717 PCMCIA_DEVICE_PROD_ID12("Seiko Epson Corp.", "Ethernet", 0x09928730, 0x00b2e941),
1718 PCMCIA_DEVICE_PROD_ID12("SMC", "EZCard-10-PCMCIA", 0xc4f8b18b, 0xfb21d265), 1718 PCMCIA_DEVICE_PROD_ID12("SMC", "EZCard-10-PCMCIA", 0xc4f8b18b, 0xfb21d265),
1719 PCMCIA_DEVICE_PROD_ID12("Socket Communications Inc", "Socket EA PCMCIA LAN Adapter Revision D", 0xc70a4760, 0x2ade483e), 1719 PCMCIA_DEVICE_PROD_ID12("Socket Communications Inc", "Socket EA PCMCIA LAN Adapter Revision D", 0xc70a4760, 0x2ade483e),
1720 PCMCIA_DEVICE_PROD_ID12("Socket Communications Inc", "Socket EA PCMCIA LAN Adapter Revision E", 0xc70a4760, 0x5dd978a8), 1720 PCMCIA_DEVICE_PROD_ID12("Socket Communications Inc", "Socket EA PCMCIA LAN Adapter Revision E", 0xc70a4760, 0x5dd978a8),
1721 PCMCIA_DEVICE_PROD_ID12("TDK", "LAK-CD031 for PCMCIA", 0x1eae9475, 0x0ed386fa), 1721 PCMCIA_DEVICE_PROD_ID12("TDK", "LAK-CD031 for PCMCIA", 0x1eae9475, 0x0ed386fa),
1722 PCMCIA_DEVICE_PROD_ID12("Telecom Device K.K.", "SuperSocket RE450T", 0x466b05f0, 0x8b74bc4f), 1722 PCMCIA_DEVICE_PROD_ID12("Telecom Device K.K.", "SuperSocket RE450T", 0x466b05f0, 0x8b74bc4f),
1723 PCMCIA_DEVICE_PROD_ID12("Telecom Device K.K.", "SuperSocket RE550T", 0x466b05f0, 0x33c8db2a), 1723 PCMCIA_DEVICE_PROD_ID12("Telecom Device K.K.", "SuperSocket RE550T", 0x466b05f0, 0x33c8db2a),
1724 PCMCIA_DEVICE_PROD_ID13("Hypertec", "EP401", 0x8787bec7, 0xf6e4a31e), 1724 PCMCIA_DEVICE_PROD_ID13("Hypertec", "EP401", 0x8787bec7, 0xf6e4a31e),
1725 PCMCIA_DEVICE_PROD_ID13("KingMax Technology Inc.", "Ethernet Card", 0x932b7189, 0x5e9d92c0), 1725 PCMCIA_DEVICE_PROD_ID13("KingMax Technology Inc.", "Ethernet Card", 0x932b7189, 0x5e9d92c0),
1726 PCMCIA_DEVICE_PROD_ID13("LONGSHINE", "EP401", 0xf866b0b0, 0xf6e4a31e), 1726 PCMCIA_DEVICE_PROD_ID13("LONGSHINE", "EP401", 0xf866b0b0, 0xf6e4a31e),
1727 PCMCIA_DEVICE_PROD_ID13("Xircom", "CFE-10", 0x2e3ee845, 0x22a49f89), 1727 PCMCIA_DEVICE_PROD_ID13("Xircom", "CFE-10", 0x2e3ee845, 0x22a49f89),
1728 PCMCIA_DEVICE_PROD_ID1("CyQ've 10 Base-T LAN CARD", 0x94faf360), 1728 PCMCIA_DEVICE_PROD_ID1("CyQ've 10 Base-T LAN CARD", 0x94faf360),
1729 PCMCIA_DEVICE_PROD_ID1("EP-210 PCMCIA LAN CARD.", 0x8850b4de), 1729 PCMCIA_DEVICE_PROD_ID1("EP-210 PCMCIA LAN CARD.", 0x8850b4de),
1730 PCMCIA_DEVICE_PROD_ID1("ETHER-C16", 0x06a8514f), 1730 PCMCIA_DEVICE_PROD_ID1("ETHER-C16", 0x06a8514f),
1731 PCMCIA_DEVICE_PROD_ID1("NE2000 Compatible", 0x75b8ad5a), 1731 PCMCIA_DEVICE_PROD_ID1("NE2000 Compatible", 0x75b8ad5a),
1732 PCMCIA_DEVICE_PROD_ID2("EN-6200P2", 0xa996d078), 1732 PCMCIA_DEVICE_PROD_ID2("EN-6200P2", 0xa996d078),
1733 /* too generic! */ 1733 /* too generic! */
1734 /* PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100 Ethernet Card", 0x281f1c5d, 0x11b0ffc0), */ 1734 /* PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100 Ethernet Card", 0x281f1c5d, 0x11b0ffc0), */
1735 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "PCMCIA", "EN2218-LAN/MODEM", 0x281f1c5d, 0x570f348e, "cis/PCMLM28.cis"), 1735 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "PCMCIA", "EN2218-LAN/MODEM", 0x281f1c5d, 0x570f348e, "cis/PCMLM28.cis"),
1736 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "PCMCIA", "UE2218-LAN/MODEM", 0x281f1c5d, 0x6fdcacee, "cis/PCMLM28.cis"), 1736 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "PCMCIA", "UE2218-LAN/MODEM", 0x281f1c5d, 0x6fdcacee, "cis/PCMLM28.cis"),
1737 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"), 1737 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"),
1738 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "Psion Dacom", "Gold Card V34 Ethernet GSM", 0xf5f025c2, 0x4ae85d35, "cis/PCMLM28.cis"), 1738 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "Psion Dacom", "Gold Card V34 Ethernet GSM", 0xf5f025c2, 0x4ae85d35, "cis/PCMLM28.cis"),
1739 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "LINKSYS", "PCMLM28", 0xf7cb0b07, 0x66881874, "cis/PCMLM28.cis"), 1739 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "LINKSYS", "PCMLM28", 0xf7cb0b07, 0x66881874, "cis/PCMLM28.cis"),
1740 PCMCIA_MFC_DEVICE_CIS_PROD_ID12(0, "DAYNA COMMUNICATIONS", "LAN AND MODEM MULTIFUNCTION", 0x8fdf8f89, 0xdd5ed9e8, "cis/DP83903.cis"), 1740 PCMCIA_MFC_DEVICE_CIS_PROD_ID12(0, "DAYNA COMMUNICATIONS", "LAN AND MODEM MULTIFUNCTION", 0x8fdf8f89, 0xdd5ed9e8, "cis/DP83903.cis"),
1741 PCMCIA_MFC_DEVICE_CIS_PROD_ID4(0, "NSC MF LAN/Modem", 0x58fc6056, "cis/DP83903.cis"), 1741 PCMCIA_MFC_DEVICE_CIS_PROD_ID4(0, "NSC MF LAN/Modem", 0x58fc6056, "cis/DP83903.cis"),
1742 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(0, 0x0175, 0x0000, "cis/DP83903.cis"), 1742 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(0, 0x0175, 0x0000, "cis/DP83903.cis"),
1743 PCMCIA_DEVICE_CIS_MANF_CARD(0xc00f, 0x0002, "cis/LA-PCM.cis"), 1743 PCMCIA_DEVICE_CIS_MANF_CARD(0xc00f, 0x0002, "cis/LA-PCM.cis"),
1744 PCMCIA_DEVICE_CIS_PROD_ID12("KTI", "PE520 PLUS", 0xad180345, 0x9d58d392, "PE520.cis"), 1744 PCMCIA_DEVICE_CIS_PROD_ID12("KTI", "PE520 PLUS", 0xad180345, 0x9d58d392, "cis/PE520.cis"),
1745 PCMCIA_DEVICE_CIS_PROD_ID12("NDC", "Ethernet", 0x01c43ae1, 0x00b2e941, "cis/NE2K.cis"), 1745 PCMCIA_DEVICE_CIS_PROD_ID12("NDC", "Ethernet", 0x01c43ae1, 0x00b2e941, "cis/NE2K.cis"),
1746 PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "cis/PE-200.cis"), 1746 PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "cis/PE-200.cis"),
1747 PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "cis/tamarack.cis"), 1747 PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "cis/tamarack.cis"),
1748 PCMCIA_DEVICE_PROD_ID12("Ethernet", "CF Size PC Card", 0x00b2e941, 0x43ac239b), 1748 PCMCIA_DEVICE_PROD_ID12("Ethernet", "CF Size PC Card", 0x00b2e941, 0x43ac239b),
1749 PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0", 1749 PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
1750 0xb4be14e3, 0x43ac239b, 0x0877b627), 1750 0xb4be14e3, 0x43ac239b, 0x0877b627),
1751 PCMCIA_DEVICE_NULL 1751 PCMCIA_DEVICE_NULL
1752 }; 1752 };
1753 MODULE_DEVICE_TABLE(pcmcia, pcnet_ids); 1753 MODULE_DEVICE_TABLE(pcmcia, pcnet_ids);
1754 MODULE_FIRMWARE("cis/PCMLM28.cis"); 1754 MODULE_FIRMWARE("cis/PCMLM28.cis");
1755 MODULE_FIRMWARE("cis/DP83903.cis"); 1755 MODULE_FIRMWARE("cis/DP83903.cis");
1756 MODULE_FIRMWARE("cis/LA-PCM.cis"); 1756 MODULE_FIRMWARE("cis/LA-PCM.cis");
1757 MODULE_FIRMWARE("PE520.cis"); 1757 MODULE_FIRMWARE("cis/PE520.cis");
1758 MODULE_FIRMWARE("cis/NE2K.cis"); 1758 MODULE_FIRMWARE("cis/NE2K.cis");
1759 MODULE_FIRMWARE("cis/PE-200.cis"); 1759 MODULE_FIRMWARE("cis/PE-200.cis");
1760 MODULE_FIRMWARE("cis/tamarack.cis"); 1760 MODULE_FIRMWARE("cis/tamarack.cis");
1761 1761
1762 static struct pcmcia_driver pcnet_driver = { 1762 static struct pcmcia_driver pcnet_driver = {
1763 .drv = { 1763 .drv = {
1764 .name = "pcnet_cs", 1764 .name = "pcnet_cs",
1765 }, 1765 },
1766 .probe = pcnet_probe, 1766 .probe = pcnet_probe,
1767 .remove = pcnet_detach, 1767 .remove = pcnet_detach,
1768 .owner = THIS_MODULE, 1768 .owner = THIS_MODULE,
1769 .id_table = pcnet_ids, 1769 .id_table = pcnet_ids,
1770 .suspend = pcnet_suspend, 1770 .suspend = pcnet_suspend,
1771 .resume = pcnet_resume, 1771 .resume = pcnet_resume,
1772 }; 1772 };
1773 1773
1774 static int __init init_pcnet_cs(void) 1774 static int __init init_pcnet_cs(void)
1775 { 1775 {
1776 return pcmcia_register_driver(&pcnet_driver); 1776 return pcmcia_register_driver(&pcnet_driver);
1777 } 1777 }
1778 1778
1779 static void __exit exit_pcnet_cs(void) 1779 static void __exit exit_pcnet_cs(void)
1780 { 1780 {
1781 pcmcia_unregister_driver(&pcnet_driver); 1781 pcmcia_unregister_driver(&pcnet_driver);
1782 } 1782 }
1783 1783
1784 module_init(init_pcnet_cs); 1784 module_init(init_pcnet_cs);
1785 module_exit(exit_pcnet_cs); 1785 module_exit(exit_pcnet_cs);
1786 1786
drivers/serial/serial_cs.c
1 /*====================================================================== 1 /*======================================================================
2 2
3 A driver for PCMCIA serial devices 3 A driver for PCMCIA serial devices
4 4
5 serial_cs.c 1.134 2002/05/04 05:48:53 5 serial_cs.c 1.134 2002/05/04 05:48:53
6 6
7 The contents of this file are subject to the Mozilla Public 7 The contents of this file are subject to the Mozilla Public
8 License Version 1.1 (the "License"); you may not use this file 8 License Version 1.1 (the "License"); you may not use this file
9 except in compliance with the License. You may obtain a copy of 9 except in compliance with the License. You may obtain a copy of
10 the License at http://www.mozilla.org/MPL/ 10 the License at http://www.mozilla.org/MPL/
11 11
12 Software distributed under the License is distributed on an "AS 12 Software distributed under the License is distributed on an "AS
13 IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 13 IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 implied. See the License for the specific language governing 14 implied. See the License for the specific language governing
15 rights and limitations under the License. 15 rights and limitations under the License.
16 16
17 The initial developer of the original code is David A. Hinds 17 The initial developer of the original code is David A. Hinds
18 <dahinds@users.sourceforge.net>. Portions created by David A. Hinds 18 <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
19 are Copyright (C) 1999 David A. Hinds. All Rights Reserved. 19 are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
20 20
21 Alternatively, the contents of this file may be used under the 21 Alternatively, the contents of this file may be used under the
22 terms of the GNU General Public License version 2 (the "GPL"), in which 22 terms of the GNU General Public License version 2 (the "GPL"), in which
23 case the provisions of the GPL are applicable instead of the 23 case the provisions of the GPL are applicable instead of the
24 above. If you wish to allow the use of your version of this file 24 above. If you wish to allow the use of your version of this file
25 only under the terms of the GPL and not to allow others to use 25 only under the terms of the GPL and not to allow others to use
26 your version of this file under the MPL, indicate your decision 26 your version of this file under the MPL, indicate your decision
27 by deleting the provisions above and replace them with the notice 27 by deleting the provisions above and replace them with the notice
28 and other provisions required by the GPL. If you do not delete 28 and other provisions required by the GPL. If you do not delete
29 the provisions above, a recipient may use your version of this 29 the provisions above, a recipient may use your version of this
30 file under either the MPL or the GPL. 30 file under either the MPL or the GPL.
31 31
32 ======================================================================*/ 32 ======================================================================*/
33 33
34 #include <linux/module.h> 34 #include <linux/module.h>
35 #include <linux/moduleparam.h> 35 #include <linux/moduleparam.h>
36 #include <linux/kernel.h> 36 #include <linux/kernel.h>
37 #include <linux/init.h> 37 #include <linux/init.h>
38 #include <linux/ptrace.h> 38 #include <linux/ptrace.h>
39 #include <linux/slab.h> 39 #include <linux/slab.h>
40 #include <linux/string.h> 40 #include <linux/string.h>
41 #include <linux/timer.h> 41 #include <linux/timer.h>
42 #include <linux/serial_core.h> 42 #include <linux/serial_core.h>
43 #include <linux/delay.h> 43 #include <linux/delay.h>
44 #include <linux/major.h> 44 #include <linux/major.h>
45 #include <asm/io.h> 45 #include <asm/io.h>
46 #include <asm/system.h> 46 #include <asm/system.h>
47 47
48 #include <pcmcia/cs_types.h> 48 #include <pcmcia/cs_types.h>
49 #include <pcmcia/cs.h> 49 #include <pcmcia/cs.h>
50 #include <pcmcia/cistpl.h> 50 #include <pcmcia/cistpl.h>
51 #include <pcmcia/ciscode.h> 51 #include <pcmcia/ciscode.h>
52 #include <pcmcia/ds.h> 52 #include <pcmcia/ds.h>
53 #include <pcmcia/cisreg.h> 53 #include <pcmcia/cisreg.h>
54 54
55 #include "8250.h" 55 #include "8250.h"
56 56
57 57
58 /*====================================================================*/ 58 /*====================================================================*/
59 59
60 /* Parameters that can be set with 'insmod' */ 60 /* Parameters that can be set with 'insmod' */
61 61
62 /* Enable the speaker? */ 62 /* Enable the speaker? */
63 static int do_sound = 1; 63 static int do_sound = 1;
64 /* Skip strict UART tests? */ 64 /* Skip strict UART tests? */
65 static int buggy_uart; 65 static int buggy_uart;
66 66
67 module_param(do_sound, int, 0444); 67 module_param(do_sound, int, 0444);
68 module_param(buggy_uart, int, 0444); 68 module_param(buggy_uart, int, 0444);
69 69
70 /*====================================================================*/ 70 /*====================================================================*/
71 71
72 /* Table of multi-port card ID's */ 72 /* Table of multi-port card ID's */
73 73
74 struct serial_quirk { 74 struct serial_quirk {
75 unsigned int manfid; 75 unsigned int manfid;
76 unsigned int prodid; 76 unsigned int prodid;
77 int multi; /* 1 = multifunction, > 1 = # ports */ 77 int multi; /* 1 = multifunction, > 1 = # ports */
78 void (*config)(struct pcmcia_device *); 78 void (*config)(struct pcmcia_device *);
79 void (*setup)(struct pcmcia_device *, struct uart_port *); 79 void (*setup)(struct pcmcia_device *, struct uart_port *);
80 void (*wakeup)(struct pcmcia_device *); 80 void (*wakeup)(struct pcmcia_device *);
81 int (*post)(struct pcmcia_device *); 81 int (*post)(struct pcmcia_device *);
82 }; 82 };
83 83
84 struct serial_info { 84 struct serial_info {
85 struct pcmcia_device *p_dev; 85 struct pcmcia_device *p_dev;
86 int ndev; 86 int ndev;
87 int multi; 87 int multi;
88 int slave; 88 int slave;
89 int manfid; 89 int manfid;
90 int prodid; 90 int prodid;
91 int c950ctrl; 91 int c950ctrl;
92 dev_node_t node[4]; 92 dev_node_t node[4];
93 int line[4]; 93 int line[4];
94 const struct serial_quirk *quirk; 94 const struct serial_quirk *quirk;
95 }; 95 };
96 96
97 struct serial_cfg_mem { 97 struct serial_cfg_mem {
98 tuple_t tuple; 98 tuple_t tuple;
99 cisparse_t parse; 99 cisparse_t parse;
100 u_char buf[256]; 100 u_char buf[256];
101 }; 101 };
102 102
103 /* 103 /*
104 * vers_1 5.0, "Brain Boxes", "2-Port RS232 card", "r6" 104 * vers_1 5.0, "Brain Boxes", "2-Port RS232 card", "r6"
105 * manfid 0x0160, 0x0104 105 * manfid 0x0160, 0x0104
106 * This card appears to have a 14.7456MHz clock. 106 * This card appears to have a 14.7456MHz clock.
107 */ 107 */
108 static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port) 108 static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port)
109 { 109 {
110 port->uartclk = 14745600; 110 port->uartclk = 14745600;
111 } 111 }
112 112
113 static int quirk_post_ibm(struct pcmcia_device *link) 113 static int quirk_post_ibm(struct pcmcia_device *link)
114 { 114 {
115 conf_reg_t reg = { 0, CS_READ, 0x800, 0 }; 115 conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
116 int ret; 116 int ret;
117 117
118 ret = pcmcia_access_configuration_register(link, &reg); 118 ret = pcmcia_access_configuration_register(link, &reg);
119 if (ret) 119 if (ret)
120 goto failed; 120 goto failed;
121 121
122 reg.Action = CS_WRITE; 122 reg.Action = CS_WRITE;
123 reg.Value = reg.Value | 1; 123 reg.Value = reg.Value | 1;
124 ret = pcmcia_access_configuration_register(link, &reg); 124 ret = pcmcia_access_configuration_register(link, &reg);
125 if (ret) 125 if (ret)
126 goto failed; 126 goto failed;
127 return 0; 127 return 0;
128 128
129 failed: 129 failed:
130 return -ENODEV; 130 return -ENODEV;
131 } 131 }
132 132
133 /* 133 /*
134 * Nokia cards are not really multiport cards. Shouldn't this 134 * Nokia cards are not really multiport cards. Shouldn't this
135 * be handled by setting the quirk entry .multi = 0 | 1 ? 135 * be handled by setting the quirk entry .multi = 0 | 1 ?
136 */ 136 */
137 static void quirk_config_nokia(struct pcmcia_device *link) 137 static void quirk_config_nokia(struct pcmcia_device *link)
138 { 138 {
139 struct serial_info *info = link->priv; 139 struct serial_info *info = link->priv;
140 140
141 if (info->multi > 1) 141 if (info->multi > 1)
142 info->multi = 1; 142 info->multi = 1;
143 } 143 }
144 144
145 static void quirk_wakeup_oxsemi(struct pcmcia_device *link) 145 static void quirk_wakeup_oxsemi(struct pcmcia_device *link)
146 { 146 {
147 struct serial_info *info = link->priv; 147 struct serial_info *info = link->priv;
148 148
149 outb(12, info->c950ctrl + 1); 149 outb(12, info->c950ctrl + 1);
150 } 150 }
151 151
152 /* request_region? oxsemi branch does no request_region too... */ 152 /* request_region? oxsemi branch does no request_region too... */
153 /* 153 /*
154 * This sequence is needed to properly initialize MC45 attached to OXCF950. 154 * This sequence is needed to properly initialize MC45 attached to OXCF950.
155 * I tried decreasing these msleep()s, but it worked properly (survived 155 * I tried decreasing these msleep()s, but it worked properly (survived
156 * 1000 stop/start operations) with these timeouts (or bigger). 156 * 1000 stop/start operations) with these timeouts (or bigger).
157 */ 157 */
158 static void quirk_wakeup_possio_gcc(struct pcmcia_device *link) 158 static void quirk_wakeup_possio_gcc(struct pcmcia_device *link)
159 { 159 {
160 struct serial_info *info = link->priv; 160 struct serial_info *info = link->priv;
161 unsigned int ctrl = info->c950ctrl; 161 unsigned int ctrl = info->c950ctrl;
162 162
163 outb(0xA, ctrl + 1); 163 outb(0xA, ctrl + 1);
164 msleep(100); 164 msleep(100);
165 outb(0xE, ctrl + 1); 165 outb(0xE, ctrl + 1);
166 msleep(300); 166 msleep(300);
167 outb(0xC, ctrl + 1); 167 outb(0xC, ctrl + 1);
168 msleep(100); 168 msleep(100);
169 outb(0xE, ctrl + 1); 169 outb(0xE, ctrl + 1);
170 msleep(200); 170 msleep(200);
171 outb(0xF, ctrl + 1); 171 outb(0xF, ctrl + 1);
172 msleep(100); 172 msleep(100);
173 outb(0xE, ctrl + 1); 173 outb(0xE, ctrl + 1);
174 msleep(100); 174 msleep(100);
175 outb(0xC, ctrl + 1); 175 outb(0xC, ctrl + 1);
176 } 176 }
177 177
178 /* 178 /*
179 * Socket Dual IO: this enables irq's for second port 179 * Socket Dual IO: this enables irq's for second port
180 */ 180 */
181 static void quirk_config_socket(struct pcmcia_device *link) 181 static void quirk_config_socket(struct pcmcia_device *link)
182 { 182 {
183 struct serial_info *info = link->priv; 183 struct serial_info *info = link->priv;
184 184
185 if (info->multi) { 185 if (info->multi) {
186 link->conf.Present |= PRESENT_EXT_STATUS; 186 link->conf.Present |= PRESENT_EXT_STATUS;
187 link->conf.ExtStatus = ESR_REQ_ATTN_ENA; 187 link->conf.ExtStatus = ESR_REQ_ATTN_ENA;
188 } 188 }
189 } 189 }
190 190
191 static const struct serial_quirk quirks[] = { 191 static const struct serial_quirk quirks[] = {
192 { 192 {
193 .manfid = 0x0160, 193 .manfid = 0x0160,
194 .prodid = 0x0104, 194 .prodid = 0x0104,
195 .multi = -1, 195 .multi = -1,
196 .setup = quirk_setup_brainboxes_0104, 196 .setup = quirk_setup_brainboxes_0104,
197 }, { 197 }, {
198 .manfid = MANFID_IBM, 198 .manfid = MANFID_IBM,
199 .prodid = ~0, 199 .prodid = ~0,
200 .multi = -1, 200 .multi = -1,
201 .post = quirk_post_ibm, 201 .post = quirk_post_ibm,
202 }, { 202 }, {
203 .manfid = MANFID_INTEL, 203 .manfid = MANFID_INTEL,
204 .prodid = PRODID_INTEL_DUAL_RS232, 204 .prodid = PRODID_INTEL_DUAL_RS232,
205 .multi = 2, 205 .multi = 2,
206 }, { 206 }, {
207 .manfid = MANFID_NATINST, 207 .manfid = MANFID_NATINST,
208 .prodid = PRODID_NATINST_QUAD_RS232, 208 .prodid = PRODID_NATINST_QUAD_RS232,
209 .multi = 4, 209 .multi = 4,
210 }, { 210 }, {
211 .manfid = MANFID_NOKIA, 211 .manfid = MANFID_NOKIA,
212 .prodid = ~0, 212 .prodid = ~0,
213 .multi = -1, 213 .multi = -1,
214 .config = quirk_config_nokia, 214 .config = quirk_config_nokia,
215 }, { 215 }, {
216 .manfid = MANFID_OMEGA, 216 .manfid = MANFID_OMEGA,
217 .prodid = PRODID_OMEGA_QSP_100, 217 .prodid = PRODID_OMEGA_QSP_100,
218 .multi = 4, 218 .multi = 4,
219 }, { 219 }, {
220 .manfid = MANFID_OXSEMI, 220 .manfid = MANFID_OXSEMI,
221 .prodid = ~0, 221 .prodid = ~0,
222 .multi = -1, 222 .multi = -1,
223 .wakeup = quirk_wakeup_oxsemi, 223 .wakeup = quirk_wakeup_oxsemi,
224 }, { 224 }, {
225 .manfid = MANFID_POSSIO, 225 .manfid = MANFID_POSSIO,
226 .prodid = PRODID_POSSIO_GCC, 226 .prodid = PRODID_POSSIO_GCC,
227 .multi = -1, 227 .multi = -1,
228 .wakeup = quirk_wakeup_possio_gcc, 228 .wakeup = quirk_wakeup_possio_gcc,
229 }, { 229 }, {
230 .manfid = MANFID_QUATECH, 230 .manfid = MANFID_QUATECH,
231 .prodid = PRODID_QUATECH_DUAL_RS232, 231 .prodid = PRODID_QUATECH_DUAL_RS232,
232 .multi = 2, 232 .multi = 2,
233 }, { 233 }, {
234 .manfid = MANFID_QUATECH, 234 .manfid = MANFID_QUATECH,
235 .prodid = PRODID_QUATECH_DUAL_RS232_D1, 235 .prodid = PRODID_QUATECH_DUAL_RS232_D1,
236 .multi = 2, 236 .multi = 2,
237 }, { 237 }, {
238 .manfid = MANFID_QUATECH, 238 .manfid = MANFID_QUATECH,
239 .prodid = PRODID_QUATECH_DUAL_RS232_G, 239 .prodid = PRODID_QUATECH_DUAL_RS232_G,
240 .multi = 2, 240 .multi = 2,
241 }, { 241 }, {
242 .manfid = MANFID_QUATECH, 242 .manfid = MANFID_QUATECH,
243 .prodid = PRODID_QUATECH_QUAD_RS232, 243 .prodid = PRODID_QUATECH_QUAD_RS232,
244 .multi = 4, 244 .multi = 4,
245 }, { 245 }, {
246 .manfid = MANFID_SOCKET, 246 .manfid = MANFID_SOCKET,
247 .prodid = PRODID_SOCKET_DUAL_RS232, 247 .prodid = PRODID_SOCKET_DUAL_RS232,
248 .multi = 2, 248 .multi = 2,
249 .config = quirk_config_socket, 249 .config = quirk_config_socket,
250 }, { 250 }, {
251 .manfid = MANFID_SOCKET, 251 .manfid = MANFID_SOCKET,
252 .prodid = ~0, 252 .prodid = ~0,
253 .multi = -1, 253 .multi = -1,
254 .config = quirk_config_socket, 254 .config = quirk_config_socket,
255 } 255 }
256 }; 256 };
257 257
258 258
259 static int serial_config(struct pcmcia_device * link); 259 static int serial_config(struct pcmcia_device * link);
260 260
261 261
262 /*====================================================================== 262 /*======================================================================
263 263
264 After a card is removed, serial_remove() will unregister 264 After a card is removed, serial_remove() will unregister
265 the serial device(s), and release the PCMCIA configuration. 265 the serial device(s), and release the PCMCIA configuration.
266 266
267 ======================================================================*/ 267 ======================================================================*/
268 268
269 static void serial_remove(struct pcmcia_device *link) 269 static void serial_remove(struct pcmcia_device *link)
270 { 270 {
271 struct serial_info *info = link->priv; 271 struct serial_info *info = link->priv;
272 int i; 272 int i;
273 273
274 dev_dbg(&link->dev, "serial_release\n"); 274 dev_dbg(&link->dev, "serial_release\n");
275 275
276 /* 276 /*
277 * Recheck to see if the device is still configured. 277 * Recheck to see if the device is still configured.
278 */ 278 */
279 for (i = 0; i < info->ndev; i++) 279 for (i = 0; i < info->ndev; i++)
280 serial8250_unregister_port(info->line[i]); 280 serial8250_unregister_port(info->line[i]);
281 281
282 info->p_dev->dev_node = NULL; 282 info->p_dev->dev_node = NULL;
283 283
284 if (!info->slave) 284 if (!info->slave)
285 pcmcia_disable_device(link); 285 pcmcia_disable_device(link);
286 } 286 }
287 287
288 static int serial_suspend(struct pcmcia_device *link) 288 static int serial_suspend(struct pcmcia_device *link)
289 { 289 {
290 struct serial_info *info = link->priv; 290 struct serial_info *info = link->priv;
291 int i; 291 int i;
292 292
293 for (i = 0; i < info->ndev; i++) 293 for (i = 0; i < info->ndev; i++)
294 serial8250_suspend_port(info->line[i]); 294 serial8250_suspend_port(info->line[i]);
295 295
296 return 0; 296 return 0;
297 } 297 }
298 298
299 static int serial_resume(struct pcmcia_device *link) 299 static int serial_resume(struct pcmcia_device *link)
300 { 300 {
301 struct serial_info *info = link->priv; 301 struct serial_info *info = link->priv;
302 int i; 302 int i;
303 303
304 for (i = 0; i < info->ndev; i++) 304 for (i = 0; i < info->ndev; i++)
305 serial8250_resume_port(info->line[i]); 305 serial8250_resume_port(info->line[i]);
306 306
307 if (info->quirk && info->quirk->wakeup) 307 if (info->quirk && info->quirk->wakeup)
308 info->quirk->wakeup(link); 308 info->quirk->wakeup(link);
309 309
310 return 0; 310 return 0;
311 } 311 }
312 312
313 /*====================================================================== 313 /*======================================================================
314 314
315 serial_attach() creates an "instance" of the driver, allocating 315 serial_attach() creates an "instance" of the driver, allocating
316 local data structures for one device. The device is registered 316 local data structures for one device. The device is registered
317 with Card Services. 317 with Card Services.
318 318
319 ======================================================================*/ 319 ======================================================================*/
320 320
321 static int serial_probe(struct pcmcia_device *link) 321 static int serial_probe(struct pcmcia_device *link)
322 { 322 {
323 struct serial_info *info; 323 struct serial_info *info;
324 324
325 dev_dbg(&link->dev, "serial_attach()\n"); 325 dev_dbg(&link->dev, "serial_attach()\n");
326 326
327 /* Create new serial device */ 327 /* Create new serial device */
328 info = kzalloc(sizeof (*info), GFP_KERNEL); 328 info = kzalloc(sizeof (*info), GFP_KERNEL);
329 if (!info) 329 if (!info)
330 return -ENOMEM; 330 return -ENOMEM;
331 info->p_dev = link; 331 info->p_dev = link;
332 link->priv = info; 332 link->priv = info;
333 333
334 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 334 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
335 link->io.NumPorts1 = 8; 335 link->io.NumPorts1 = 8;
336 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; 336 link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
337 link->conf.Attributes = CONF_ENABLE_IRQ; 337 link->conf.Attributes = CONF_ENABLE_IRQ;
338 if (do_sound) { 338 if (do_sound) {
339 link->conf.Attributes |= CONF_ENABLE_SPKR; 339 link->conf.Attributes |= CONF_ENABLE_SPKR;
340 link->conf.Status = CCSR_AUDIO_ENA; 340 link->conf.Status = CCSR_AUDIO_ENA;
341 } 341 }
342 link->conf.IntType = INT_MEMORY_AND_IO; 342 link->conf.IntType = INT_MEMORY_AND_IO;
343 343
344 return serial_config(link); 344 return serial_config(link);
345 } 345 }
346 346
347 /*====================================================================== 347 /*======================================================================
348 348
349 This deletes a driver "instance". The device is de-registered 349 This deletes a driver "instance". The device is de-registered
350 with Card Services. If it has been released, all local data 350 with Card Services. If it has been released, all local data
351 structures are freed. Otherwise, the structures will be freed 351 structures are freed. Otherwise, the structures will be freed
352 when the device is released. 352 when the device is released.
353 353
354 ======================================================================*/ 354 ======================================================================*/
355 355
356 static void serial_detach(struct pcmcia_device *link) 356 static void serial_detach(struct pcmcia_device *link)
357 { 357 {
358 struct serial_info *info = link->priv; 358 struct serial_info *info = link->priv;
359 359
360 dev_dbg(&link->dev, "serial_detach\n"); 360 dev_dbg(&link->dev, "serial_detach\n");
361 361
362 /* 362 /*
363 * Ensure any outstanding scheduled tasks are completed. 363 * Ensure any outstanding scheduled tasks are completed.
364 */ 364 */
365 flush_scheduled_work(); 365 flush_scheduled_work();
366 366
367 /* 367 /*
368 * Ensure that the ports have been released. 368 * Ensure that the ports have been released.
369 */ 369 */
370 serial_remove(link); 370 serial_remove(link);
371 371
372 /* free bits */ 372 /* free bits */
373 kfree(info); 373 kfree(info);
374 } 374 }
375 375
376 /*====================================================================*/ 376 /*====================================================================*/
377 377
378 static int setup_serial(struct pcmcia_device *handle, struct serial_info * info, 378 static int setup_serial(struct pcmcia_device *handle, struct serial_info * info,
379 unsigned int iobase, int irq) 379 unsigned int iobase, int irq)
380 { 380 {
381 struct uart_port port; 381 struct uart_port port;
382 int line; 382 int line;
383 383
384 memset(&port, 0, sizeof (struct uart_port)); 384 memset(&port, 0, sizeof (struct uart_port));
385 port.iobase = iobase; 385 port.iobase = iobase;
386 port.irq = irq; 386 port.irq = irq;
387 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ; 387 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ;
388 port.uartclk = 1843200; 388 port.uartclk = 1843200;
389 port.dev = &handle->dev; 389 port.dev = &handle->dev;
390 if (buggy_uart) 390 if (buggy_uart)
391 port.flags |= UPF_BUGGY_UART; 391 port.flags |= UPF_BUGGY_UART;
392 392
393 if (info->quirk && info->quirk->setup) 393 if (info->quirk && info->quirk->setup)
394 info->quirk->setup(handle, &port); 394 info->quirk->setup(handle, &port);
395 395
396 line = serial8250_register_port(&port); 396 line = serial8250_register_port(&port);
397 if (line < 0) { 397 if (line < 0) {
398 printk(KERN_NOTICE "serial_cs: serial8250_register_port() at " 398 printk(KERN_NOTICE "serial_cs: serial8250_register_port() at "
399 "0x%04lx, irq %d failed\n", (u_long)iobase, irq); 399 "0x%04lx, irq %d failed\n", (u_long)iobase, irq);
400 return -EINVAL; 400 return -EINVAL;
401 } 401 }
402 402
403 info->line[info->ndev] = line; 403 info->line[info->ndev] = line;
404 sprintf(info->node[info->ndev].dev_name, "ttyS%d", line); 404 sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
405 info->node[info->ndev].major = TTY_MAJOR; 405 info->node[info->ndev].major = TTY_MAJOR;
406 info->node[info->ndev].minor = 0x40 + line; 406 info->node[info->ndev].minor = 0x40 + line;
407 if (info->ndev > 0) 407 if (info->ndev > 0)
408 info->node[info->ndev - 1].next = &info->node[info->ndev]; 408 info->node[info->ndev - 1].next = &info->node[info->ndev];
409 info->ndev++; 409 info->ndev++;
410 410
411 return 0; 411 return 0;
412 } 412 }
413 413
414 /*====================================================================*/ 414 /*====================================================================*/
415 415
416 static int simple_config_check(struct pcmcia_device *p_dev, 416 static int simple_config_check(struct pcmcia_device *p_dev,
417 cistpl_cftable_entry_t *cf, 417 cistpl_cftable_entry_t *cf,
418 cistpl_cftable_entry_t *dflt, 418 cistpl_cftable_entry_t *dflt,
419 unsigned int vcc, 419 unsigned int vcc,
420 void *priv_data) 420 void *priv_data)
421 { 421 {
422 static const int size_table[2] = { 8, 16 }; 422 static const int size_table[2] = { 8, 16 };
423 int *try = priv_data; 423 int *try = priv_data;
424 424
425 if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM)) 425 if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
426 p_dev->conf.Vpp = 426 p_dev->conf.Vpp =
427 cf->vpp1.param[CISTPL_POWER_VNOM] / 10000; 427 cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
428 428
429 if ((cf->io.nwin > 0) && (cf->io.win[0].len == size_table[(*try >> 1)]) 429 if ((cf->io.nwin > 0) && (cf->io.win[0].len == size_table[(*try >> 1)])
430 && (cf->io.win[0].base != 0)) { 430 && (cf->io.win[0].base != 0)) {
431 p_dev->io.BasePort1 = cf->io.win[0].base; 431 p_dev->io.BasePort1 = cf->io.win[0].base;
432 p_dev->io.IOAddrLines = ((*try & 0x1) == 0) ? 432 p_dev->io.IOAddrLines = ((*try & 0x1) == 0) ?
433 16 : cf->io.flags & CISTPL_IO_LINES_MASK; 433 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
434 if (!pcmcia_request_io(p_dev, &p_dev->io)) 434 if (!pcmcia_request_io(p_dev, &p_dev->io))
435 return 0; 435 return 0;
436 } 436 }
437 return -EINVAL; 437 return -EINVAL;
438 } 438 }
439 439
440 static int simple_config_check_notpicky(struct pcmcia_device *p_dev, 440 static int simple_config_check_notpicky(struct pcmcia_device *p_dev,
441 cistpl_cftable_entry_t *cf, 441 cistpl_cftable_entry_t *cf,
442 cistpl_cftable_entry_t *dflt, 442 cistpl_cftable_entry_t *dflt,
443 unsigned int vcc, 443 unsigned int vcc,
444 void *priv_data) 444 void *priv_data)
445 { 445 {
446 static const unsigned int base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 }; 446 static const unsigned int base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
447 int j; 447 int j;
448 448
449 if ((cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) { 449 if ((cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
450 for (j = 0; j < 5; j++) { 450 for (j = 0; j < 5; j++) {
451 p_dev->io.BasePort1 = base[j]; 451 p_dev->io.BasePort1 = base[j];
452 p_dev->io.IOAddrLines = base[j] ? 16 : 3; 452 p_dev->io.IOAddrLines = base[j] ? 16 : 3;
453 if (!pcmcia_request_io(p_dev, &p_dev->io)) 453 if (!pcmcia_request_io(p_dev, &p_dev->io))
454 return 0; 454 return 0;
455 } 455 }
456 } 456 }
457 return -ENODEV; 457 return -ENODEV;
458 } 458 }
459 459
460 static int simple_config(struct pcmcia_device *link) 460 static int simple_config(struct pcmcia_device *link)
461 { 461 {
462 struct serial_info *info = link->priv; 462 struct serial_info *info = link->priv;
463 int i = -ENODEV, try; 463 int i = -ENODEV, try;
464 464
465 /* If the card is already configured, look up the port and irq */ 465 /* If the card is already configured, look up the port and irq */
466 if (link->function_config) { 466 if (link->function_config) {
467 unsigned int port = 0; 467 unsigned int port = 0;
468 if ((link->io.BasePort2 != 0) && 468 if ((link->io.BasePort2 != 0) &&
469 (link->io.NumPorts2 == 8)) { 469 (link->io.NumPorts2 == 8)) {
470 port = link->io.BasePort2; 470 port = link->io.BasePort2;
471 info->slave = 1; 471 info->slave = 1;
472 } else if ((info->manfid == MANFID_OSITECH) && 472 } else if ((info->manfid == MANFID_OSITECH) &&
473 (link->io.NumPorts1 == 0x40)) { 473 (link->io.NumPorts1 == 0x40)) {
474 port = link->io.BasePort1 + 0x28; 474 port = link->io.BasePort1 + 0x28;
475 info->slave = 1; 475 info->slave = 1;
476 } 476 }
477 if (info->slave) { 477 if (info->slave) {
478 return setup_serial(link, info, port, 478 return setup_serial(link, info, port,
479 link->irq.AssignedIRQ); 479 link->irq.AssignedIRQ);
480 } 480 }
481 } 481 }
482 482
483 /* First pass: look for a config entry that looks normal. 483 /* First pass: look for a config entry that looks normal.
484 * Two tries: without IO aliases, then with aliases */ 484 * Two tries: without IO aliases, then with aliases */
485 for (try = 0; try < 4; try++) 485 for (try = 0; try < 4; try++)
486 if (!pcmcia_loop_config(link, simple_config_check, &try)) 486 if (!pcmcia_loop_config(link, simple_config_check, &try))
487 goto found_port; 487 goto found_port;
488 488
489 /* Second pass: try to find an entry that isn't picky about 489 /* Second pass: try to find an entry that isn't picky about
490 its base address, then try to grab any standard serial port 490 its base address, then try to grab any standard serial port
491 address, and finally try to get any free port. */ 491 address, and finally try to get any free port. */
492 if (!pcmcia_loop_config(link, simple_config_check_notpicky, NULL)) 492 if (!pcmcia_loop_config(link, simple_config_check_notpicky, NULL))
493 goto found_port; 493 goto found_port;
494 494
495 printk(KERN_NOTICE 495 printk(KERN_NOTICE
496 "serial_cs: no usable port range found, giving up\n"); 496 "serial_cs: no usable port range found, giving up\n");
497 return -1; 497 return -1;
498 498
499 found_port: 499 found_port:
500 i = pcmcia_request_irq(link, &link->irq); 500 i = pcmcia_request_irq(link, &link->irq);
501 if (i != 0) 501 if (i != 0)
502 link->irq.AssignedIRQ = 0; 502 link->irq.AssignedIRQ = 0;
503 503
504 if (info->multi && (info->manfid == MANFID_3COM)) 504 if (info->multi && (info->manfid == MANFID_3COM))
505 link->conf.ConfigIndex &= ~(0x08); 505 link->conf.ConfigIndex &= ~(0x08);
506 506
507 /* 507 /*
508 * Apply any configuration quirks. 508 * Apply any configuration quirks.
509 */ 509 */
510 if (info->quirk && info->quirk->config) 510 if (info->quirk && info->quirk->config)
511 info->quirk->config(link); 511 info->quirk->config(link);
512 512
513 i = pcmcia_request_configuration(link, &link->conf); 513 i = pcmcia_request_configuration(link, &link->conf);
514 if (i != 0) 514 if (i != 0)
515 return -1; 515 return -1;
516 return setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ); 516 return setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ);
517 } 517 }
518 518
519 static int multi_config_check(struct pcmcia_device *p_dev, 519 static int multi_config_check(struct pcmcia_device *p_dev,
520 cistpl_cftable_entry_t *cf, 520 cistpl_cftable_entry_t *cf,
521 cistpl_cftable_entry_t *dflt, 521 cistpl_cftable_entry_t *dflt,
522 unsigned int vcc, 522 unsigned int vcc,
523 void *priv_data) 523 void *priv_data)
524 { 524 {
525 int *base2 = priv_data; 525 int *base2 = priv_data;
526 526
527 /* The quad port cards have bad CIS's, so just look for a 527 /* The quad port cards have bad CIS's, so just look for a
528 window larger than 8 ports and assume it will be right */ 528 window larger than 8 ports and assume it will be right */
529 if ((cf->io.nwin == 1) && (cf->io.win[0].len > 8)) { 529 if ((cf->io.nwin == 1) && (cf->io.win[0].len > 8)) {
530 p_dev->io.BasePort1 = cf->io.win[0].base; 530 p_dev->io.BasePort1 = cf->io.win[0].base;
531 p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK; 531 p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
532 if (!pcmcia_request_io(p_dev, &p_dev->io)) { 532 if (!pcmcia_request_io(p_dev, &p_dev->io)) {
533 *base2 = p_dev->io.BasePort1 + 8; 533 *base2 = p_dev->io.BasePort1 + 8;
534 return 0; 534 return 0;
535 } 535 }
536 } 536 }
537 return -ENODEV; 537 return -ENODEV;
538 } 538 }
539 539
540 static int multi_config_check_notpicky(struct pcmcia_device *p_dev, 540 static int multi_config_check_notpicky(struct pcmcia_device *p_dev,
541 cistpl_cftable_entry_t *cf, 541 cistpl_cftable_entry_t *cf,
542 cistpl_cftable_entry_t *dflt, 542 cistpl_cftable_entry_t *dflt,
543 unsigned int vcc, 543 unsigned int vcc,
544 void *priv_data) 544 void *priv_data)
545 { 545 {
546 int *base2 = priv_data; 546 int *base2 = priv_data;
547 547
548 if (cf->io.nwin == 2) { 548 if (cf->io.nwin == 2) {
549 p_dev->io.BasePort1 = cf->io.win[0].base; 549 p_dev->io.BasePort1 = cf->io.win[0].base;
550 p_dev->io.BasePort2 = cf->io.win[1].base; 550 p_dev->io.BasePort2 = cf->io.win[1].base;
551 p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK; 551 p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
552 if (!pcmcia_request_io(p_dev, &p_dev->io)) { 552 if (!pcmcia_request_io(p_dev, &p_dev->io)) {
553 *base2 = p_dev->io.BasePort2; 553 *base2 = p_dev->io.BasePort2;
554 return 0; 554 return 0;
555 } 555 }
556 } 556 }
557 return -ENODEV; 557 return -ENODEV;
558 } 558 }
559 559
560 static int multi_config(struct pcmcia_device *link) 560 static int multi_config(struct pcmcia_device *link)
561 { 561 {
562 struct serial_info *info = link->priv; 562 struct serial_info *info = link->priv;
563 int i, base2 = 0; 563 int i, base2 = 0;
564 564
565 /* First, look for a generic full-sized window */ 565 /* First, look for a generic full-sized window */
566 link->io.NumPorts1 = info->multi * 8; 566 link->io.NumPorts1 = info->multi * 8;
567 if (pcmcia_loop_config(link, multi_config_check, &base2)) { 567 if (pcmcia_loop_config(link, multi_config_check, &base2)) {
568 /* If that didn't work, look for two windows */ 568 /* If that didn't work, look for two windows */
569 link->io.NumPorts1 = link->io.NumPorts2 = 8; 569 link->io.NumPorts1 = link->io.NumPorts2 = 8;
570 info->multi = 2; 570 info->multi = 2;
571 if (pcmcia_loop_config(link, multi_config_check_notpicky, 571 if (pcmcia_loop_config(link, multi_config_check_notpicky,
572 &base2)) { 572 &base2)) {
573 printk(KERN_NOTICE "serial_cs: no usable port range" 573 printk(KERN_NOTICE "serial_cs: no usable port range"
574 "found, giving up\n"); 574 "found, giving up\n");
575 return -ENODEV; 575 return -ENODEV;
576 } 576 }
577 } 577 }
578 578
579 i = pcmcia_request_irq(link, &link->irq); 579 i = pcmcia_request_irq(link, &link->irq);
580 if (i != 0) { 580 if (i != 0) {
581 /* FIXME: comment does not fit, error handling does not fit */ 581 /* FIXME: comment does not fit, error handling does not fit */
582 printk(KERN_NOTICE 582 printk(KERN_NOTICE
583 "serial_cs: no usable port range found, giving up\n"); 583 "serial_cs: no usable port range found, giving up\n");
584 link->irq.AssignedIRQ = 0; 584 link->irq.AssignedIRQ = 0;
585 } 585 }
586 586
587 /* 587 /*
588 * Apply any configuration quirks. 588 * Apply any configuration quirks.
589 */ 589 */
590 if (info->quirk && info->quirk->config) 590 if (info->quirk && info->quirk->config)
591 info->quirk->config(link); 591 info->quirk->config(link);
592 592
593 i = pcmcia_request_configuration(link, &link->conf); 593 i = pcmcia_request_configuration(link, &link->conf);
594 if (i != 0) 594 if (i != 0)
595 return -ENODEV; 595 return -ENODEV;
596 596
597 /* The Oxford Semiconductor OXCF950 cards are in fact single-port: 597 /* The Oxford Semiconductor OXCF950 cards are in fact single-port:
598 * 8 registers are for the UART, the others are extra registers. 598 * 8 registers are for the UART, the others are extra registers.
599 * Siemen's MC45 PCMCIA (Possio's GCC) is OXCF950 based too. 599 * Siemen's MC45 PCMCIA (Possio's GCC) is OXCF950 based too.
600 */ 600 */
601 if (info->manfid == MANFID_OXSEMI || (info->manfid == MANFID_POSSIO && 601 if (info->manfid == MANFID_OXSEMI || (info->manfid == MANFID_POSSIO &&
602 info->prodid == PRODID_POSSIO_GCC)) { 602 info->prodid == PRODID_POSSIO_GCC)) {
603 int err; 603 int err;
604 604
605 if (link->conf.ConfigIndex == 1 || 605 if (link->conf.ConfigIndex == 1 ||
606 link->conf.ConfigIndex == 3) { 606 link->conf.ConfigIndex == 3) {
607 err = setup_serial(link, info, base2, 607 err = setup_serial(link, info, base2,
608 link->irq.AssignedIRQ); 608 link->irq.AssignedIRQ);
609 base2 = link->io.BasePort1; 609 base2 = link->io.BasePort1;
610 } else { 610 } else {
611 err = setup_serial(link, info, link->io.BasePort1, 611 err = setup_serial(link, info, link->io.BasePort1,
612 link->irq.AssignedIRQ); 612 link->irq.AssignedIRQ);
613 } 613 }
614 info->c950ctrl = base2; 614 info->c950ctrl = base2;
615 615
616 /* 616 /*
617 * FIXME: We really should wake up the port prior to 617 * FIXME: We really should wake up the port prior to
618 * handing it over to the serial layer. 618 * handing it over to the serial layer.
619 */ 619 */
620 if (info->quirk && info->quirk->wakeup) 620 if (info->quirk && info->quirk->wakeup)
621 info->quirk->wakeup(link); 621 info->quirk->wakeup(link);
622 622
623 return 0; 623 return 0;
624 } 624 }
625 625
626 setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ); 626 setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ);
627 for (i = 0; i < info->multi - 1; i++) 627 for (i = 0; i < info->multi - 1; i++)
628 setup_serial(link, info, base2 + (8 * i), 628 setup_serial(link, info, base2 + (8 * i),
629 link->irq.AssignedIRQ); 629 link->irq.AssignedIRQ);
630 return 0; 630 return 0;
631 } 631 }
632 632
633 static int serial_check_for_multi(struct pcmcia_device *p_dev, 633 static int serial_check_for_multi(struct pcmcia_device *p_dev,
634 cistpl_cftable_entry_t *cf, 634 cistpl_cftable_entry_t *cf,
635 cistpl_cftable_entry_t *dflt, 635 cistpl_cftable_entry_t *dflt,
636 unsigned int vcc, 636 unsigned int vcc,
637 void *priv_data) 637 void *priv_data)
638 { 638 {
639 struct serial_info *info = p_dev->priv; 639 struct serial_info *info = p_dev->priv;
640 640
641 if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) 641 if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0))
642 info->multi = cf->io.win[0].len >> 3; 642 info->multi = cf->io.win[0].len >> 3;
643 643
644 if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) && 644 if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) &&
645 (cf->io.win[1].len == 8)) 645 (cf->io.win[1].len == 8))
646 info->multi = 2; 646 info->multi = 2;
647 647
648 return 0; /* break */ 648 return 0; /* break */
649 } 649 }
650 650
651 651
652 /*====================================================================== 652 /*======================================================================
653 653
654 serial_config() is scheduled to run after a CARD_INSERTION event 654 serial_config() is scheduled to run after a CARD_INSERTION event
655 is received, to configure the PCMCIA socket, and to make the 655 is received, to configure the PCMCIA socket, and to make the
656 serial device available to the system. 656 serial device available to the system.
657 657
658 ======================================================================*/ 658 ======================================================================*/
659 659
660 static int serial_config(struct pcmcia_device * link) 660 static int serial_config(struct pcmcia_device * link)
661 { 661 {
662 struct serial_info *info = link->priv; 662 struct serial_info *info = link->priv;
663 int i; 663 int i;
664 664
665 dev_dbg(&link->dev, "serial_config\n"); 665 dev_dbg(&link->dev, "serial_config\n");
666 666
667 /* Is this a compliant multifunction card? */ 667 /* Is this a compliant multifunction card? */
668 info->multi = (link->socket->functions > 1); 668 info->multi = (link->socket->functions > 1);
669 669
670 /* Is this a multiport card? */ 670 /* Is this a multiport card? */
671 info->manfid = link->manf_id; 671 info->manfid = link->manf_id;
672 info->prodid = link->card_id; 672 info->prodid = link->card_id;
673 673
674 for (i = 0; i < ARRAY_SIZE(quirks); i++) 674 for (i = 0; i < ARRAY_SIZE(quirks); i++)
675 if ((quirks[i].manfid == ~0 || 675 if ((quirks[i].manfid == ~0 ||
676 quirks[i].manfid == info->manfid) && 676 quirks[i].manfid == info->manfid) &&
677 (quirks[i].prodid == ~0 || 677 (quirks[i].prodid == ~0 ||
678 quirks[i].prodid == info->prodid)) { 678 quirks[i].prodid == info->prodid)) {
679 info->quirk = &quirks[i]; 679 info->quirk = &quirks[i];
680 break; 680 break;
681 } 681 }
682 682
683 /* Another check for dual-serial cards: look for either serial or 683 /* Another check for dual-serial cards: look for either serial or
684 multifunction cards that ask for appropriate IO port ranges */ 684 multifunction cards that ask for appropriate IO port ranges */
685 if ((info->multi == 0) && 685 if ((info->multi == 0) &&
686 (link->has_func_id) && 686 (link->has_func_id) &&
687 ((link->func_id == CISTPL_FUNCID_MULTI) || 687 ((link->func_id == CISTPL_FUNCID_MULTI) ||
688 (link->func_id == CISTPL_FUNCID_SERIAL))) 688 (link->func_id == CISTPL_FUNCID_SERIAL)))
689 pcmcia_loop_config(link, serial_check_for_multi, info); 689 pcmcia_loop_config(link, serial_check_for_multi, info);
690 690
691 /* 691 /*
692 * Apply any multi-port quirk. 692 * Apply any multi-port quirk.
693 */ 693 */
694 if (info->quirk && info->quirk->multi != -1) 694 if (info->quirk && info->quirk->multi != -1)
695 info->multi = info->quirk->multi; 695 info->multi = info->quirk->multi;
696 696
697 if (info->multi > 1) 697 if (info->multi > 1)
698 multi_config(link); 698 multi_config(link);
699 else 699 else
700 simple_config(link); 700 simple_config(link);
701 701
702 if (info->ndev == 0) 702 if (info->ndev == 0)
703 goto failed; 703 goto failed;
704 704
705 /* 705 /*
706 * Apply any post-init quirk. FIXME: This should really happen 706 * Apply any post-init quirk. FIXME: This should really happen
707 * before we register the port, since it might already be in use. 707 * before we register the port, since it might already be in use.
708 */ 708 */
709 if (info->quirk && info->quirk->post) 709 if (info->quirk && info->quirk->post)
710 if (info->quirk->post(link)) 710 if (info->quirk->post(link))
711 goto failed; 711 goto failed;
712 712
713 link->dev_node = &info->node[0]; 713 link->dev_node = &info->node[0];
714 return 0; 714 return 0;
715 715
716 failed: 716 failed:
717 serial_remove(link); 717 serial_remove(link);
718 return -ENODEV; 718 return -ENODEV;
719 } 719 }
720 720
721 static struct pcmcia_device_id serial_ids[] = { 721 static struct pcmcia_device_id serial_ids[] = {
722 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0057, 0x0021), 722 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0057, 0x0021),
723 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0089, 0x110a), 723 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0089, 0x110a),
724 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0104, 0x000a), 724 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0104, 0x000a),
725 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0xea15), 725 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0xea15),
726 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0109, 0x0501), 726 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0109, 0x0501),
727 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0138, 0x110a), 727 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0138, 0x110a),
728 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0140, 0x000a), 728 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0140, 0x000a),
729 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0143, 0x3341), 729 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0143, 0x3341),
730 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0143, 0xc0ab), 730 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0143, 0xc0ab),
731 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x016c, 0x0081), 731 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x016c, 0x0081),
732 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x021b, 0x0101), 732 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x021b, 0x0101),
733 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x08a1, 0xc0ab), 733 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x08a1, 0xc0ab),
734 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0x0d0a), 734 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0x0d0a),
735 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0x0e0a), 735 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0x0e0a),
736 PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "CC/XJEM3288", "DATA/FAX/CELL ETHERNET MODEM", 0xf510db04, 0x04cd2988, 0x46a52d63), 736 PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "CC/XJEM3288", "DATA/FAX/CELL ETHERNET MODEM", 0xf510db04, 0x04cd2988, 0x46a52d63),
737 PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "CC/XJEM3336", "DATA/FAX/CELL ETHERNET MODEM", 0xf510db04, 0x0143b773, 0x46a52d63), 737 PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "CC/XJEM3336", "DATA/FAX/CELL ETHERNET MODEM", 0xf510db04, 0x0143b773, 0x46a52d63),
738 PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "EM1144T", "PCMCIA MODEM", 0xf510db04, 0x856d66c8, 0xbd6c43ef), 738 PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "EM1144T", "PCMCIA MODEM", 0xf510db04, 0x856d66c8, 0xbd6c43ef),
739 PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "XJEM1144/CCEM1144", "PCMCIA MODEM", 0xf510db04, 0x52d21e1e, 0xbd6c43ef), 739 PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "XJEM1144/CCEM1144", "PCMCIA MODEM", 0xf510db04, 0x52d21e1e, 0xbd6c43ef),
740 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "CEM28", 0x2e3ee845, 0x0ea978ea), 740 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "CEM28", 0x2e3ee845, 0x0ea978ea),
741 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "CEM33", 0x2e3ee845, 0x80609023), 741 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "CEM33", 0x2e3ee845, 0x80609023),
742 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "CEM56", 0x2e3ee845, 0xa650c32a), 742 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "CEM56", 0x2e3ee845, 0xa650c32a),
743 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "REM10", 0x2e3ee845, 0x76df1d29), 743 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "REM10", 0x2e3ee845, 0x76df1d29),
744 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "XEM5600", 0x2e3ee845, 0xf1403719), 744 PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "XEM5600", 0x2e3ee845, 0xf1403719),
745 PCMCIA_PFC_DEVICE_PROD_ID12(1, "AnyCom", "Fast Ethernet + 56K COMBO", 0x578ba6e7, 0xb0ac62c4), 745 PCMCIA_PFC_DEVICE_PROD_ID12(1, "AnyCom", "Fast Ethernet + 56K COMBO", 0x578ba6e7, 0xb0ac62c4),
746 PCMCIA_PFC_DEVICE_PROD_ID12(1, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff), 746 PCMCIA_PFC_DEVICE_PROD_ID12(1, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff),
747 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Gateway 2000", "XJEM3336", 0xdd9989be, 0x662c394c), 747 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Gateway 2000", "XJEM3336", 0xdd9989be, 0x662c394c),
748 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Grey Cell", "GCS3000", 0x2a151fac, 0x48b932ae), 748 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Grey Cell", "GCS3000", 0x2a151fac, 0x48b932ae),
749 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Linksys", "EtherFast 10&100 + 56K PC Card (PCMLM56)", 0x0733cc81, 0xb3765033), 749 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Linksys", "EtherFast 10&100 + 56K PC Card (PCMLM56)", 0x0733cc81, 0xb3765033),
750 PCMCIA_PFC_DEVICE_PROD_ID12(1, "LINKSYS", "PCMLM336", 0xf7cb0b07, 0x7a821b58), 750 PCMCIA_PFC_DEVICE_PROD_ID12(1, "LINKSYS", "PCMLM336", 0xf7cb0b07, 0x7a821b58),
751 PCMCIA_PFC_DEVICE_PROD_ID12(1, "MEGAHERTZ", "XJEM1144/CCEM1144", 0xf510db04, 0x52d21e1e), 751 PCMCIA_PFC_DEVICE_PROD_ID12(1, "MEGAHERTZ", "XJEM1144/CCEM1144", 0xf510db04, 0x52d21e1e),
752 PCMCIA_PFC_DEVICE_PROD_ID12(1, "MICRO RESEARCH", "COMBO-L/M-336", 0xb2ced065, 0x3ced0555), 752 PCMCIA_PFC_DEVICE_PROD_ID12(1, "MICRO RESEARCH", "COMBO-L/M-336", 0xb2ced065, 0x3ced0555),
753 PCMCIA_PFC_DEVICE_PROD_ID12(1, "NEC", "PK-UG-J001" ,0x18df0ba0 ,0x831b1064), 753 PCMCIA_PFC_DEVICE_PROD_ID12(1, "NEC", "PK-UG-J001" ,0x18df0ba0 ,0x831b1064),
754 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Ositech", "Trumpcard:Jack of Diamonds Modem+Ethernet", 0xc2f80cd, 0x656947b9), 754 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Ositech", "Trumpcard:Jack of Diamonds Modem+Ethernet", 0xc2f80cd, 0x656947b9),
755 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Ositech", "Trumpcard:Jack of Hearts Modem+Ethernet", 0xc2f80cd, 0xdc9ba5ed), 755 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Ositech", "Trumpcard:Jack of Hearts Modem+Ethernet", 0xc2f80cd, 0xdc9ba5ed),
756 PCMCIA_PFC_DEVICE_PROD_ID12(1, "PCMCIAs", "ComboCard", 0xdcfe12d3, 0xcd8906cc), 756 PCMCIA_PFC_DEVICE_PROD_ID12(1, "PCMCIAs", "ComboCard", 0xdcfe12d3, 0xcd8906cc),
757 PCMCIA_PFC_DEVICE_PROD_ID12(1, "PCMCIAs", "LanModem", 0xdcfe12d3, 0xc67c648f), 757 PCMCIA_PFC_DEVICE_PROD_ID12(1, "PCMCIAs", "LanModem", 0xdcfe12d3, 0xc67c648f),
758 PCMCIA_PFC_DEVICE_PROD_ID12(1, "TDK", "GlobalNetworker 3410/3412", 0x1eae9475, 0xd9a93bed), 758 PCMCIA_PFC_DEVICE_PROD_ID12(1, "TDK", "GlobalNetworker 3410/3412", 0x1eae9475, 0xd9a93bed),
759 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Xircom", "CreditCard Ethernet+Modem II", 0x2e3ee845, 0xeca401bf), 759 PCMCIA_PFC_DEVICE_PROD_ID12(1, "Xircom", "CreditCard Ethernet+Modem II", 0x2e3ee845, 0xeca401bf),
760 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x0a05), 760 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x0a05),
761 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x1101), 761 PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x1101),
762 PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x0104, 0x0070), 762 PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x0104, 0x0070),
763 PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x0101, 0x0562), 763 PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x0101, 0x0562),
764 PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x0104, 0x0070), 764 PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x0104, 0x0070),
765 PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x016c, 0x0020), 765 PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x016c, 0x0020),
766 PCMCIA_MFC_DEVICE_PROD_ID123(1, "APEX DATA", "MULTICARD", "ETHERNET-MODEM", 0x11c2da09, 0x7289dc5d, 0xaad95e1f), 766 PCMCIA_MFC_DEVICE_PROD_ID123(1, "APEX DATA", "MULTICARD", "ETHERNET-MODEM", 0x11c2da09, 0x7289dc5d, 0xaad95e1f),
767 PCMCIA_MFC_DEVICE_PROD_ID12(1, "IBM", "Home and Away 28.8 PC Card ", 0xb569a6e5, 0x5bd4ff2c), 767 PCMCIA_MFC_DEVICE_PROD_ID12(1, "IBM", "Home and Away 28.8 PC Card ", 0xb569a6e5, 0x5bd4ff2c),
768 PCMCIA_MFC_DEVICE_PROD_ID12(1, "IBM", "Home and Away Credit Card Adapter", 0xb569a6e5, 0x4bdf15c3), 768 PCMCIA_MFC_DEVICE_PROD_ID12(1, "IBM", "Home and Away Credit Card Adapter", 0xb569a6e5, 0x4bdf15c3),
769 PCMCIA_MFC_DEVICE_PROD_ID12(1, "IBM", "w95 Home and Away Credit Card ", 0xb569a6e5, 0xae911c15), 769 PCMCIA_MFC_DEVICE_PROD_ID12(1, "IBM", "w95 Home and Away Credit Card ", 0xb569a6e5, 0xae911c15),
770 PCMCIA_MFC_DEVICE_PROD_ID1(1, "Motorola MARQUIS", 0xf03e4e77), 770 PCMCIA_MFC_DEVICE_PROD_ID1(1, "Motorola MARQUIS", 0xf03e4e77),
771 PCMCIA_MFC_DEVICE_PROD_ID2(1, "FAX/Modem/Ethernet Combo Card ", 0x1ed59302), 771 PCMCIA_MFC_DEVICE_PROD_ID2(1, "FAX/Modem/Ethernet Combo Card ", 0x1ed59302),
772 PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0301), 772 PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0301),
773 PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x0276), 773 PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x0276),
774 PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0039), 774 PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0039),
775 PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0006), 775 PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0006),
776 PCMCIA_DEVICE_MANF_CARD(0x0105, 0x410a), 776 PCMCIA_DEVICE_MANF_CARD(0x0105, 0x410a),
777 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d50), 777 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d50),
778 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d51), 778 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d51),
779 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d52), 779 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d52),
780 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d53), 780 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d53),
781 PCMCIA_DEVICE_MANF_CARD(0x010b, 0xd180), 781 PCMCIA_DEVICE_MANF_CARD(0x010b, 0xd180),
782 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x000e), 782 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x000e),
783 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x001b), 783 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x001b),
784 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0025), 784 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0025),
785 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0045), 785 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0045),
786 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0052), 786 PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0052),
787 PCMCIA_DEVICE_PROD_ID134("ADV", "TECH", "COMpad-32/85", 0x67459937, 0x916d02ba, 0x8fbe92ae), 787 PCMCIA_DEVICE_PROD_ID134("ADV", "TECH", "COMpad-32/85", 0x67459937, 0x916d02ba, 0x8fbe92ae),
788 PCMCIA_DEVICE_PROD_ID124("GATEWAY2000", "CC3144", "PCMCIA MODEM", 0x506bccae, 0xcb3685f1, 0xbd6c43ef), 788 PCMCIA_DEVICE_PROD_ID124("GATEWAY2000", "CC3144", "PCMCIA MODEM", 0x506bccae, 0xcb3685f1, 0xbd6c43ef),
789 PCMCIA_DEVICE_PROD_ID14("MEGAHERTZ", "PCMCIA MODEM", 0xf510db04, 0xbd6c43ef), 789 PCMCIA_DEVICE_PROD_ID14("MEGAHERTZ", "PCMCIA MODEM", 0xf510db04, 0xbd6c43ef),
790 PCMCIA_DEVICE_PROD_ID124("TOSHIBA", "T144PF", "PCMCIA MODEM", 0xb4585a1a, 0x7271409c, 0xbd6c43ef), 790 PCMCIA_DEVICE_PROD_ID124("TOSHIBA", "T144PF", "PCMCIA MODEM", 0xb4585a1a, 0x7271409c, 0xbd6c43ef),
791 PCMCIA_DEVICE_PROD_ID123("FUJITSU", "FC14F ", "MBH10213", 0x6ee5a3d8, 0x30ead12b, 0xb00f05a0), 791 PCMCIA_DEVICE_PROD_ID123("FUJITSU", "FC14F ", "MBH10213", 0x6ee5a3d8, 0x30ead12b, 0xb00f05a0),
792 PCMCIA_DEVICE_PROD_ID123("Novatel Wireless", "Merlin UMTS Modem", "U630", 0x32607776, 0xd9e73b13, 0xe87332e), 792 PCMCIA_DEVICE_PROD_ID123("Novatel Wireless", "Merlin UMTS Modem", "U630", 0x32607776, 0xd9e73b13, 0xe87332e),
793 PCMCIA_DEVICE_PROD_ID13("MEGAHERTZ", "V.34 PCMCIA MODEM", 0xf510db04, 0xbb2cce4a), 793 PCMCIA_DEVICE_PROD_ID13("MEGAHERTZ", "V.34 PCMCIA MODEM", 0xf510db04, 0xbb2cce4a),
794 PCMCIA_DEVICE_PROD_ID12("Brain Boxes", "Bluetooth PC Card", 0xee138382, 0xd4ce9b02), 794 PCMCIA_DEVICE_PROD_ID12("Brain Boxes", "Bluetooth PC Card", 0xee138382, 0xd4ce9b02),
795 PCMCIA_DEVICE_PROD_ID12("CIRRUS LOGIC", "FAX MODEM", 0xe625f451, 0xcecd6dfa), 795 PCMCIA_DEVICE_PROD_ID12("CIRRUS LOGIC", "FAX MODEM", 0xe625f451, 0xcecd6dfa),
796 PCMCIA_DEVICE_PROD_ID12("COMPAQ", "PCMCIA 28800 FAX/DATA MODEM", 0xa3a3062c, 0x8cbd7c76), 796 PCMCIA_DEVICE_PROD_ID12("COMPAQ", "PCMCIA 28800 FAX/DATA MODEM", 0xa3a3062c, 0x8cbd7c76),
797 PCMCIA_DEVICE_PROD_ID12("COMPAQ", "PCMCIA 33600 FAX/DATA MODEM", 0xa3a3062c, 0x5a00ce95), 797 PCMCIA_DEVICE_PROD_ID12("COMPAQ", "PCMCIA 33600 FAX/DATA MODEM", 0xa3a3062c, 0x5a00ce95),
798 PCMCIA_DEVICE_PROD_ID12("Computerboards, Inc.", "PCM-COM422", 0xd0b78f51, 0x7e2d49ed), 798 PCMCIA_DEVICE_PROD_ID12("Computerboards, Inc.", "PCM-COM422", 0xd0b78f51, 0x7e2d49ed),
799 PCMCIA_DEVICE_PROD_ID12("Dr. Neuhaus", "FURY CARD 14K4", 0x76942813, 0x8b96ce65), 799 PCMCIA_DEVICE_PROD_ID12("Dr. Neuhaus", "FURY CARD 14K4", 0x76942813, 0x8b96ce65),
800 PCMCIA_DEVICE_PROD_ID12("Intelligent", "ANGIA FAX/MODEM", 0xb496e65e, 0xf31602a6), 800 PCMCIA_DEVICE_PROD_ID12("Intelligent", "ANGIA FAX/MODEM", 0xb496e65e, 0xf31602a6),
801 PCMCIA_DEVICE_PROD_ID12("Intel", "MODEM 2400+", 0x816cc815, 0x412729fb), 801 PCMCIA_DEVICE_PROD_ID12("Intel", "MODEM 2400+", 0x816cc815, 0x412729fb),
802 PCMCIA_DEVICE_PROD_ID12("IOTech Inc ", "PCMCIA Dual RS-232 Serial Port Card", 0x3bd2d898, 0x92abc92f), 802 PCMCIA_DEVICE_PROD_ID12("IOTech Inc ", "PCMCIA Dual RS-232 Serial Port Card", 0x3bd2d898, 0x92abc92f),
803 PCMCIA_DEVICE_PROD_ID12("MACRONIX", "FAX/MODEM", 0x668388b3, 0x3f9bdf2f), 803 PCMCIA_DEVICE_PROD_ID12("MACRONIX", "FAX/MODEM", 0x668388b3, 0x3f9bdf2f),
804 PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT1432LT", 0x5f73be51, 0x0b3e2383), 804 PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT1432LT", 0x5f73be51, 0x0b3e2383),
805 PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT2834LT", 0x5f73be51, 0x4cd7c09e), 805 PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT2834LT", 0x5f73be51, 0x4cd7c09e),
806 PCMCIA_DEVICE_PROD_ID12("OEM ", "C288MX ", 0xb572d360, 0xd2385b7a), 806 PCMCIA_DEVICE_PROD_ID12("OEM ", "C288MX ", 0xb572d360, 0xd2385b7a),
807 PCMCIA_DEVICE_PROD_ID12("PCMCIA ", "C336MX ", 0x99bcafe9, 0xaa25bcab), 807 PCMCIA_DEVICE_PROD_ID12("PCMCIA ", "C336MX ", 0x99bcafe9, 0xaa25bcab),
808 PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "PCMCIA Dual RS-232 Serial Port Card", 0xc4420b35, 0x92abc92f), 808 PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "PCMCIA Dual RS-232 Serial Port Card", 0xc4420b35, 0x92abc92f),
809 PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "Dual RS-232 Serial Port PC Card", 0xc4420b35, 0x031a380d), 809 PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "Dual RS-232 Serial Port PC Card", 0xc4420b35, 0x031a380d),
810 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "EN2218-LAN/MODEM", 0x281f1c5d, 0x570f348e, "cis/PCMLM28.cis"), 810 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "EN2218-LAN/MODEM", 0x281f1c5d, 0x570f348e, "cis/PCMLM28.cis"),
811 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "UE2218-LAN/MODEM", 0x281f1c5d, 0x6fdcacee, "cis/PCMLM28.cis"), 811 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "UE2218-LAN/MODEM", 0x281f1c5d, 0x6fdcacee, "cis/PCMLM28.cis"),
812 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"), 812 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"),
813 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet GSM", 0xf5f025c2, 0x4ae85d35, "cis/PCMLM28.cis"), 813 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet GSM", 0xf5f025c2, 0x4ae85d35, "cis/PCMLM28.cis"),
814 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "LINKSYS", "PCMLM28", 0xf7cb0b07, 0x66881874, "cis/PCMLM28.cis"), 814 PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "LINKSYS", "PCMLM28", 0xf7cb0b07, 0x66881874, "cis/PCMLM28.cis"),
815 PCMCIA_MFC_DEVICE_CIS_PROD_ID12(1, "DAYNA COMMUNICATIONS", "LAN AND MODEM MULTIFUNCTION", 0x8fdf8f89, 0xdd5ed9e8, "cis/DP83903.cis"), 815 PCMCIA_MFC_DEVICE_CIS_PROD_ID12(1, "DAYNA COMMUNICATIONS", "LAN AND MODEM MULTIFUNCTION", 0x8fdf8f89, 0xdd5ed9e8, "cis/DP83903.cis"),
816 PCMCIA_MFC_DEVICE_CIS_PROD_ID4(1, "NSC MF LAN/Modem", 0x58fc6056, "cis/DP83903.cis"), 816 PCMCIA_MFC_DEVICE_CIS_PROD_ID4(1, "NSC MF LAN/Modem", 0x58fc6056, "cis/DP83903.cis"),
817 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0556, "cis/3CCFEM556.cis"), 817 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0556, "cis/3CCFEM556.cis"),
818 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0175, 0x0000, "cis/DP83903.cis"), 818 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0175, 0x0000, "cis/DP83903.cis"),
819 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "cis/3CXEM556.cis"), 819 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "cis/3CXEM556.cis"),
820 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "cis/3CXEM556.cis"), 820 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "cis/3CXEM556.cis"),
821 PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */ 821 PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */
822 PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC860", 0xd85f6206, 0x698f93db, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC860 3G Network Adapter R1 */
822 PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC710/AC750", 0xd85f6206, 0x761b11e0, "cis/SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */ 823 PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC710/AC750", 0xd85f6206, 0x761b11e0, "cis/SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */
823 PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */ 824 PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */
824 PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */ 825 PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */
825 PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "cis/MT5634ZLX.cis"), 826 PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "cis/MT5634ZLX.cis"),
826 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-2", 0x96913a85, 0x27ab5437, "cis/COMpad2.cis"), 827 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-2", 0x96913a85, 0x27ab5437, "cis/COMpad2.cis"),
827 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.cis"), 828 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.cis"),
828 PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "cis/COMpad2.cis"), 829 PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "cis/COMpad2.cis"),
829 PCMCIA_DEVICE_CIS_PROD_ID2("RS-COM 2P", 0xad20b156, "cis/RS-COM-2P.cis"), 830 PCMCIA_DEVICE_CIS_PROD_ID2("RS-COM 2P", 0xad20b156, "cis/RS-COM-2P.cis"),
830 PCMCIA_DEVICE_CIS_MANF_CARD(0x0013, 0x0000, "GLOBETROTTER.cis"), 831 PCMCIA_DEVICE_CIS_MANF_CARD(0x0013, 0x0000, "cis/GLOBETROTTER.cis"),
831 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100 1.00.",0x19ca78af,0xf964f42b), 832 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100 1.00.",0x19ca78af,0xf964f42b),
832 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100",0x19ca78af,0x71d98e83), 833 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100",0x19ca78af,0x71d98e83),
833 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL232 1.00.",0x19ca78af,0x69fb7490), 834 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL232 1.00.",0x19ca78af,0x69fb7490),
834 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL232",0x19ca78af,0xb6bc0235), 835 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL232",0x19ca78af,0xb6bc0235),
835 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c2000.","SERIAL CARD: CF232",0x63f2e0bd,0xb9e175d3), 836 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c2000.","SERIAL CARD: CF232",0x63f2e0bd,0xb9e175d3),
836 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c2000.","SERIAL CARD: CF232-5",0x63f2e0bd,0xfce33442), 837 PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c2000.","SERIAL CARD: CF232-5",0x63f2e0bd,0xfce33442),
837 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF232",0x3beb8cf2,0x171e7190), 838 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF232",0x3beb8cf2,0x171e7190),
838 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF232-5",0x3beb8cf2,0x20da4262), 839 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF232-5",0x3beb8cf2,0x20da4262),
839 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF428",0x3beb8cf2,0xea5dd57d), 840 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF428",0x3beb8cf2,0xea5dd57d),
840 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF500",0x3beb8cf2,0xd77255fa), 841 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: CF500",0x3beb8cf2,0xd77255fa),
841 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: IC232",0x3beb8cf2,0x6a709903), 842 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: IC232",0x3beb8cf2,0x6a709903),
842 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: SL232",0x3beb8cf2,0x18430676), 843 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: SL232",0x3beb8cf2,0x18430676),
843 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: XL232",0x3beb8cf2,0x6f933767), 844 PCMCIA_DEVICE_PROD_ID12("Elan","Serial Port: XL232",0x3beb8cf2,0x6f933767),
844 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: CF332",0x3beb8cf2,0x16dc1ba7), 845 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: CF332",0x3beb8cf2,0x16dc1ba7),
845 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL332",0x3beb8cf2,0x19816c41), 846 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL332",0x3beb8cf2,0x19816c41),
846 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL385",0x3beb8cf2,0x64112029), 847 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL385",0x3beb8cf2,0x64112029),
847 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4), 848 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4),
848 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial+Parallel Port: SP230",0x3beb8cf2,0xdb9e58bc), 849 PCMCIA_MFC_DEVICE_PROD_ID12(0,"Elan","Serial+Parallel Port: SP230",0x3beb8cf2,0xdb9e58bc),
849 PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: CF332",0x3beb8cf2,0x16dc1ba7), 850 PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: CF332",0x3beb8cf2,0x16dc1ba7),
850 PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL332",0x3beb8cf2,0x19816c41), 851 PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL332",0x3beb8cf2,0x19816c41),
851 PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL385",0x3beb8cf2,0x64112029), 852 PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL385",0x3beb8cf2,0x64112029),
852 PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4), 853 PCMCIA_MFC_DEVICE_PROD_ID12(1,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4),
853 PCMCIA_MFC_DEVICE_PROD_ID12(2,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4), 854 PCMCIA_MFC_DEVICE_PROD_ID12(2,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4),
854 PCMCIA_MFC_DEVICE_PROD_ID12(3,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4), 855 PCMCIA_MFC_DEVICE_PROD_ID12(3,"Elan","Serial Port: SL432",0x3beb8cf2,0x1cce7ac4),
855 PCMCIA_DEVICE_MANF_CARD(0x0279, 0x950b), 856 PCMCIA_DEVICE_MANF_CARD(0x0279, 0x950b),
856 /* too generic */ 857 /* too generic */
857 /* PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x0160, 0x0002), */ 858 /* PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x0160, 0x0002), */
858 /* PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x0160, 0x0002), */ 859 /* PCMCIA_MFC_DEVICE_MANF_CARD(1, 0x0160, 0x0002), */
859 PCMCIA_DEVICE_FUNC_ID(2), 860 PCMCIA_DEVICE_FUNC_ID(2),
860 PCMCIA_DEVICE_NULL, 861 PCMCIA_DEVICE_NULL,
861 }; 862 };
862 MODULE_DEVICE_TABLE(pcmcia, serial_ids); 863 MODULE_DEVICE_TABLE(pcmcia, serial_ids);
864
865 MODULE_FIRMWARE("cis/PCMLM28.cis");
866 MODULE_FIRMWARE("cis/DP83903.cis");
867 MODULE_FIRMWARE("cis/3CCFEM556.cis");
868 MODULE_FIRMWARE("cis/3CXEM556.cis");
869 MODULE_FIRMWARE("cis/SW_8xx_SER.cis");
870 MODULE_FIRMWARE("cis/SW_7xx_SER.cis");
871 MODULE_FIRMWARE("cis/SW_555_SER.cis");
872 MODULE_FIRMWARE("cis/MT5634ZLX.cis");
873 MODULE_FIRMWARE("cis/COMpad2.cis");
874 MODULE_FIRMWARE("cis/COMpad4.cis");
875 MODULE_FIRMWARE("cis/RS-COM-2P.cis");
863 876
864 static struct pcmcia_driver serial_cs_driver = { 877 static struct pcmcia_driver serial_cs_driver = {
865 .owner = THIS_MODULE, 878 .owner = THIS_MODULE,
866 .drv = { 879 .drv = {
867 .name = "serial_cs", 880 .name = "serial_cs",
868 }, 881 },
869 .probe = serial_probe, 882 .probe = serial_probe,
870 .remove = serial_detach, 883 .remove = serial_detach,
871 .id_table = serial_ids, 884 .id_table = serial_ids,
872 .suspend = serial_suspend, 885 .suspend = serial_suspend,
873 .resume = serial_resume, 886 .resume = serial_resume,
874 }; 887 };
875 888
876 static int __init init_serial_cs(void) 889 static int __init init_serial_cs(void)
877 { 890 {
878 return pcmcia_register_driver(&serial_cs_driver); 891 return pcmcia_register_driver(&serial_cs_driver);
879 } 892 }
880 893
881 static void __exit exit_serial_cs(void) 894 static void __exit exit_serial_cs(void)
882 { 895 {
883 pcmcia_unregister_driver(&serial_cs_driver); 896 pcmcia_unregister_driver(&serial_cs_driver);
884 } 897 }
885 898
886 module_init(init_serial_cs); 899 module_init(init_serial_cs);
887 module_exit(exit_serial_cs); 900 module_exit(exit_serial_cs);
888 901
889 MODULE_LICENSE("GPL"); 902 MODULE_LICENSE("GPL");
890 903
1 # 1 #
2 # kbuild file for firmware/ 2 # kbuild file for firmware/
3 # 3 #
4 4
5 # Create $(fwabs) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a 5 # Create $(fwabs) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a
6 # leading /, it's relative to $(srctree). 6 # leading /, it's relative to $(srctree).
7 fwdir := $(subst ",,$(CONFIG_EXTRA_FIRMWARE_DIR)) 7 fwdir := $(subst ",,$(CONFIG_EXTRA_FIRMWARE_DIR))
8 fwabs := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir)) 8 fwabs := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir))
9 9
10 fw-external-y := $(subst ",,$(CONFIG_EXTRA_FIRMWARE)) 10 fw-external-y := $(subst ",,$(CONFIG_EXTRA_FIRMWARE))
11 11
12 # There are three cases to care about: 12 # There are three cases to care about:
13 # 1. Building kernel with CONFIG_FIRMWARE_IN_KERNEL=y -- $(fw-shipped-y) should 13 # 1. Building kernel with CONFIG_FIRMWARE_IN_KERNEL=y -- $(fw-shipped-y) should
14 # include the firmware files to include, according to .config 14 # include the firmware files to include, according to .config
15 # 2. 'make modules_install', which will install firmware for modules, and 15 # 2. 'make modules_install', which will install firmware for modules, and
16 # _also_ for the in-kernel drivers when CONFIG_FIRMWARE_IN_KERNEL=n 16 # _also_ for the in-kernel drivers when CONFIG_FIRMWARE_IN_KERNEL=n
17 # 3. 'make firmware_install', which installs all firmware, unconditionally. 17 # 3. 'make firmware_install', which installs all firmware, unconditionally.
18 18
19 # For the former two cases we want $(fw-shipped-y) and $(fw-shipped-m) to be 19 # For the former two cases we want $(fw-shipped-y) and $(fw-shipped-m) to be
20 # accurate. In the latter case it doesn't matter -- it'll use $(fw-shipped-all). 20 # accurate. In the latter case it doesn't matter -- it'll use $(fw-shipped-all).
21 # But be aware that the config file might not be included at all. 21 # But be aware that the config file might not be included at all.
22 22
23 ifdef CONFIG_ACENIC_OMIT_TIGON_I 23 ifdef CONFIG_ACENIC_OMIT_TIGON_I
24 acenic-objs := acenic/tg2.bin 24 acenic-objs := acenic/tg2.bin
25 fw-shipped- += acenic/tg1.bin 25 fw-shipped- += acenic/tg1.bin
26 else 26 else
27 acenic-objs := acenic/tg1.bin acenic/tg2.bin 27 acenic-objs := acenic/tg1.bin acenic/tg2.bin
28 endif 28 endif
29 fw-shipped-$(CONFIG_3C359) += 3com/3C359.bin 29 fw-shipped-$(CONFIG_3C359) += 3com/3C359.bin
30 fw-shipped-$(CONFIG_ACENIC) += $(acenic-objs) 30 fw-shipped-$(CONFIG_ACENIC) += $(acenic-objs)
31 fw-shipped-$(CONFIG_ADAPTEC_STARFIRE) += adaptec/starfire_rx.bin \ 31 fw-shipped-$(CONFIG_ADAPTEC_STARFIRE) += adaptec/starfire_rx.bin \
32 adaptec/starfire_tx.bin 32 adaptec/starfire_tx.bin
33 fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin 33 fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin
34 fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw 34 fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw
35 fw-shipped-$(CONFIG_BNX2X) += bnx2x-e1-5.2.7.0.fw bnx2x-e1h-5.2.7.0.fw 35 fw-shipped-$(CONFIG_BNX2X) += bnx2x-e1-5.2.7.0.fw bnx2x-e1h-5.2.7.0.fw
36 fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-5.0.0.j3.fw \ 36 fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-5.0.0.j3.fw \
37 bnx2/bnx2-rv2p-09-5.0.0.j3.fw \ 37 bnx2/bnx2-rv2p-09-5.0.0.j3.fw \
38 bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw \ 38 bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw \
39 bnx2/bnx2-mips-06-5.0.0.j3.fw \ 39 bnx2/bnx2-mips-06-5.0.0.j3.fw \
40 bnx2/bnx2-rv2p-06-5.0.0.j3.fw 40 bnx2/bnx2-rv2p-06-5.0.0.j3.fw
41 fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin 41 fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
42 fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin 42 fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
43 fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \ 43 fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
44 cxgb3/t3c_psram-1.1.0.bin \ 44 cxgb3/t3c_psram-1.1.0.bin \
45 cxgb3/t3fw-7.4.0.bin \ 45 cxgb3/t3fw-7.4.0.bin \
46 cxgb3/ael2005_opt_edc.bin \ 46 cxgb3/ael2005_opt_edc.bin \
47 cxgb3/ael2005_twx_edc.bin \ 47 cxgb3/ael2005_twx_edc.bin \
48 cxgb3/ael2020_twx_edc.bin 48 cxgb3/ael2020_twx_edc.bin
49 fw-shipped-$(CONFIG_DRM_MGA) += matrox/g200_warp.fw matrox/g400_warp.fw 49 fw-shipped-$(CONFIG_DRM_MGA) += matrox/g200_warp.fw matrox/g400_warp.fw
50 fw-shipped-$(CONFIG_DRM_R128) += r128/r128_cce.bin 50 fw-shipped-$(CONFIG_DRM_R128) += r128/r128_cce.bin
51 fw-shipped-$(CONFIG_DRM_RADEON) += radeon/R100_cp.bin radeon/R200_cp.bin \ 51 fw-shipped-$(CONFIG_DRM_RADEON) += radeon/R100_cp.bin radeon/R200_cp.bin \
52 radeon/R300_cp.bin radeon/R420_cp.bin \ 52 radeon/R300_cp.bin radeon/R420_cp.bin \
53 radeon/RS690_cp.bin radeon/RS600_cp.bin \ 53 radeon/RS690_cp.bin radeon/RS600_cp.bin \
54 radeon/R520_cp.bin \ 54 radeon/R520_cp.bin \
55 radeon/R600_pfp.bin radeon/R600_me.bin \ 55 radeon/R600_pfp.bin radeon/R600_me.bin \
56 radeon/RV610_pfp.bin radeon/RV610_me.bin \ 56 radeon/RV610_pfp.bin radeon/RV610_me.bin \
57 radeon/RV630_pfp.bin radeon/RV630_me.bin \ 57 radeon/RV630_pfp.bin radeon/RV630_me.bin \
58 radeon/RV620_pfp.bin radeon/RV620_me.bin \ 58 radeon/RV620_pfp.bin radeon/RV620_me.bin \
59 radeon/RV635_pfp.bin radeon/RV635_me.bin \ 59 radeon/RV635_pfp.bin radeon/RV635_me.bin \
60 radeon/RV670_pfp.bin radeon/RV670_me.bin \ 60 radeon/RV670_pfp.bin radeon/RV670_me.bin \
61 radeon/RS780_pfp.bin radeon/RS780_me.bin \ 61 radeon/RS780_pfp.bin radeon/RS780_me.bin \
62 radeon/RV770_pfp.bin radeon/RV770_me.bin \ 62 radeon/RV770_pfp.bin radeon/RV770_me.bin \
63 radeon/RV730_pfp.bin radeon/RV730_me.bin \ 63 radeon/RV730_pfp.bin radeon/RV730_me.bin \
64 radeon/RV710_pfp.bin radeon/RV710_me.bin 64 radeon/RV710_pfp.bin radeon/RV710_me.bin
65 fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin 65 fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin
66 fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin 66 fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
67 fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ 67 fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
68 e100/d102e_ucode.bin 68 e100/d102e_ucode.bin
69 fw-shipped-$(CONFIG_MYRI_SBUS) += myricom/lanai.bin 69 fw-shipped-$(CONFIG_MYRI_SBUS) += myricom/lanai.bin
70 fw-shipped-$(CONFIG_PCMCIA_PCNET) += cis/LA-PCM.cis cis/PCMLM28.cis \ 70 fw-shipped-$(CONFIG_PCMCIA_PCNET) += cis/LA-PCM.cis cis/PCMLM28.cis \
71 cis/DP83903.cis cis/NE2K.cis \ 71 cis/DP83903.cis cis/NE2K.cis \
72 cis/tamarack.cis cis/PE-200.cis 72 cis/tamarack.cis cis/PE-200.cis \
73 cis/PE520.cis
73 fw-shipped-$(CONFIG_PCMCIA_3C589) += cis/3CXEM556.cis 74 fw-shipped-$(CONFIG_PCMCIA_3C589) += cis/3CXEM556.cis
74 fw-shipped-$(CONFIG_PCMCIA_3C574) += cis/3CCFEM556.cis 75 fw-shipped-$(CONFIG_PCMCIA_3C574) += cis/3CCFEM556.cis
75 fw-shipped-$(CONFIG_SERIAL_8250_CS) += cis/MT5634ZLX.cis cis/RS-COM-2P.cis \ 76 fw-shipped-$(CONFIG_SERIAL_8250_CS) += cis/MT5634ZLX.cis cis/RS-COM-2P.cis \
76 cis/COMpad2.cis cis/COMpad4.cis \ 77 cis/COMpad2.cis cis/COMpad4.cis \
77 cis/SW_555_SER.cis cis/SW_7xx_SER.cis \ 78 cis/SW_555_SER.cis cis/SW_7xx_SER.cis \
78 cis/SW_8xx_SER.cis 79 cis/SW_8xx_SER.cis
79 fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin 80 fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin
80 fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \ 81 fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \
81 advansys/3550.bin advansys/38C0800.bin 82 advansys/3550.bin advansys/38C0800.bin
82 fw-shipped-$(CONFIG_SCSI_QLOGIC_1280) += qlogic/1040.bin qlogic/1280.bin \ 83 fw-shipped-$(CONFIG_SCSI_QLOGIC_1280) += qlogic/1040.bin qlogic/1280.bin \
83 qlogic/12160.bin 84 qlogic/12160.bin
84 fw-shipped-$(CONFIG_SCSI_QLOGICPTI) += qlogic/isp1000.bin 85 fw-shipped-$(CONFIG_SCSI_QLOGICPTI) += qlogic/isp1000.bin
85 fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin 86 fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin
86 fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp 87 fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp
87 fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \ 88 fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \
88 ess/maestro3_assp_minisrc.fw 89 ess/maestro3_assp_minisrc.fw
89 fw-shipped-$(CONFIG_SND_SB16_CSP) += sb16/mulaw_main.csp sb16/alaw_main.csp \ 90 fw-shipped-$(CONFIG_SND_SB16_CSP) += sb16/mulaw_main.csp sb16/alaw_main.csp \
90 sb16/ima_adpcm_init.csp \ 91 sb16/ima_adpcm_init.csp \
91 sb16/ima_adpcm_playback.csp \ 92 sb16/ima_adpcm_playback.csp \
92 sb16/ima_adpcm_capture.csp 93 sb16/ima_adpcm_capture.csp
93 fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \ 94 fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \
94 yamaha/ds1e_ctrl.fw 95 yamaha/ds1e_ctrl.fw
95 fw-shipped-$(CONFIG_SND_WAVEFRONT) += yamaha/yss225_registers.bin 96 fw-shipped-$(CONFIG_SND_WAVEFRONT) += yamaha/yss225_registers.bin
96 fw-shipped-$(CONFIG_TEHUTI) += tehuti/bdx.bin 97 fw-shipped-$(CONFIG_TEHUTI) += tehuti/bdx.bin
97 fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \ 98 fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \
98 tigon/tg3_tso5.bin 99 tigon/tg3_tso5.bin
99 fw-shipped-$(CONFIG_TYPHOON) += 3com/typhoon.bin 100 fw-shipped-$(CONFIG_TYPHOON) += 3com/typhoon.bin
100 fw-shipped-$(CONFIG_USB_DABUSB) += dabusb/firmware.fw dabusb/bitstream.bin 101 fw-shipped-$(CONFIG_USB_DABUSB) += dabusb/firmware.fw dabusb/bitstream.bin
101 fw-shipped-$(CONFIG_USB_EMI26) += emi26/loader.fw emi26/firmware.fw \ 102 fw-shipped-$(CONFIG_USB_EMI26) += emi26/loader.fw emi26/firmware.fw \
102 emi26/bitstream.fw 103 emi26/bitstream.fw
103 fw-shipped-$(CONFIG_USB_EMI62) += emi62/loader.fw emi62/bitstream.fw \ 104 fw-shipped-$(CONFIG_USB_EMI62) += emi62/loader.fw emi62/bitstream.fw \
104 emi62/spdif.fw emi62/midi.fw 105 emi62/spdif.fw emi62/midi.fw
105 fw-shipped-$(CONFIG_USB_KAWETH) += kaweth/new_code.bin kaweth/trigger_code.bin \ 106 fw-shipped-$(CONFIG_USB_KAWETH) += kaweth/new_code.bin kaweth/trigger_code.bin \
106 kaweth/new_code_fix.bin \ 107 kaweth/new_code_fix.bin \
107 kaweth/trigger_code_fix.bin 108 kaweth/trigger_code_fix.bin
108 ifdef CONFIG_FIRMWARE_IN_KERNEL 109 ifdef CONFIG_FIRMWARE_IN_KERNEL
109 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_MPR) += keyspan/mpr.fw 110 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_MPR) += keyspan/mpr.fw
110 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA18X) += keyspan/usa18x.fw 111 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA18X) += keyspan/usa18x.fw
111 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19) += keyspan/usa19.fw 112 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19) += keyspan/usa19.fw
112 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19QI) += keyspan/usa19qi.fw 113 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19QI) += keyspan/usa19qi.fw
113 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19QW) += keyspan/usa19qw.fw 114 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19QW) += keyspan/usa19qw.fw
114 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19W) += keyspan/usa19w.fw 115 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19W) += keyspan/usa19w.fw
115 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28) += keyspan/usa28.fw 116 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28) += keyspan/usa28.fw
116 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XA) += keyspan/usa28xa.fw 117 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XA) += keyspan/usa28xa.fw
117 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XB) += keyspan/usa28xb.fw 118 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XB) += keyspan/usa28xb.fw
118 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28X) += keyspan/usa28x.fw 119 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28X) += keyspan/usa28x.fw
119 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49W) += keyspan/usa49w.fw 120 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49W) += keyspan/usa49w.fw
120 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49WLC) += keyspan/usa49wlc.fw 121 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49WLC) += keyspan/usa49wlc.fw
121 else 122 else
122 fw-shipped- += keyspan/mpr.fw keyspan/usa18x.fw keyspan/usa19.fw \ 123 fw-shipped- += keyspan/mpr.fw keyspan/usa18x.fw keyspan/usa19.fw \
123 keyspan/usa19qi.fw keyspan/usa19qw.fw keyspan/usa19w.fw \ 124 keyspan/usa19qi.fw keyspan/usa19qw.fw keyspan/usa19w.fw \
124 keyspan/usa28.fw keyspan/usa28xa.fw keyspan/usa28xb.fw \ 125 keyspan/usa28.fw keyspan/usa28xa.fw keyspan/usa28xb.fw \
125 keyspan/usa28x.fw keyspan/usa49w.fw keyspan/usa49wlc.fw 126 keyspan/usa28x.fw keyspan/usa49w.fw keyspan/usa49wlc.fw
126 endif 127 endif
127 fw-shipped-$(CONFIG_USB_SERIAL_TI) += ti_3410.fw ti_5052.fw \ 128 fw-shipped-$(CONFIG_USB_SERIAL_TI) += ti_3410.fw ti_5052.fw \
128 mts_cdma.fw mts_gsm.fw mts_edge.fw 129 mts_cdma.fw mts_gsm.fw mts_edge.fw
129 fw-shipped-$(CONFIG_USB_SERIAL_EDGEPORT) += edgeport/boot.fw edgeport/boot2.fw \ 130 fw-shipped-$(CONFIG_USB_SERIAL_EDGEPORT) += edgeport/boot.fw edgeport/boot2.fw \
130 edgeport/down.fw edgeport/down2.fw 131 edgeport/down.fw edgeport/down2.fw
131 fw-shipped-$(CONFIG_USB_SERIAL_EDGEPORT_TI) += edgeport/down3.bin 132 fw-shipped-$(CONFIG_USB_SERIAL_EDGEPORT_TI) += edgeport/down3.bin
132 fw-shipped-$(CONFIG_USB_SERIAL_WHITEHEAT) += whiteheat_loader.fw whiteheat.fw \ 133 fw-shipped-$(CONFIG_USB_SERIAL_WHITEHEAT) += whiteheat_loader.fw whiteheat.fw \
133 # whiteheat_loader_debug.fw 134 # whiteheat_loader_debug.fw
134 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA) += keyspan_pda/keyspan_pda.fw 135 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA) += keyspan_pda/keyspan_pda.fw
135 fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw 136 fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw
136 fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw 137 fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw
137 fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin 138 fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin
138 fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin 139 fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin
139 140
140 fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-) 141 fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
141 142
142 # Directories which we _might_ need to create, so we have a rule for them. 143 # Directories which we _might_ need to create, so we have a rule for them.
143 firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(fw-external-y) $(fw-shipped-all)))) 144 firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(fw-external-y) $(fw-shipped-all))))
144 145
145 quiet_cmd_mkdir = MKDIR $(patsubst $(objtree)/%,%,$@) 146 quiet_cmd_mkdir = MKDIR $(patsubst $(objtree)/%,%,$@)
146 cmd_mkdir = mkdir -p $@ 147 cmd_mkdir = mkdir -p $@
147 148
148 quiet_cmd_ihex = IHEX $@ 149 quiet_cmd_ihex = IHEX $@
149 cmd_ihex = $(OBJCOPY) -Iihex -Obinary $< $@ 150 cmd_ihex = $(OBJCOPY) -Iihex -Obinary $< $@
150 151
151 quiet_cmd_ihex2fw = IHEX2FW $@ 152 quiet_cmd_ihex2fw = IHEX2FW $@
152 cmd_ihex2fw = $(objtree)/$(obj)/ihex2fw $< $@ 153 cmd_ihex2fw = $(objtree)/$(obj)/ihex2fw $< $@
153 154
154 quiet_cmd_h16tofw = H16TOFW $@ 155 quiet_cmd_h16tofw = H16TOFW $@
155 cmd_h16tofw = $(objtree)/$(obj)/ihex2fw -w $< $@ 156 cmd_h16tofw = $(objtree)/$(obj)/ihex2fw -w $< $@
156 157
157 quiet_cmd_fwbin = MK_FW $@ 158 quiet_cmd_fwbin = MK_FW $@
158 cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)"; \ 159 cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)"; \
159 FWSTR="$(subst /,_,$(subst .,_,$(subst -,_,$(patsubst \ 160 FWSTR="$(subst /,_,$(subst .,_,$(subst -,_,$(patsubst \
160 firmware/%.gen.S,%,$@))))"; \ 161 firmware/%.gen.S,%,$@))))"; \
161 ASM_WORD=$(if $(CONFIG_64BIT),.quad,.long); \ 162 ASM_WORD=$(if $(CONFIG_64BIT),.quad,.long); \
162 ASM_ALIGN=$(if $(CONFIG_64BIT),3,2); \ 163 ASM_ALIGN=$(if $(CONFIG_64BIT),3,2); \
163 PROGBITS=$(if $(CONFIG_ARM),%,@)progbits; \ 164 PROGBITS=$(if $(CONFIG_ARM),%,@)progbits; \
164 echo "/* Generated by firmware/Makefile */" > $@;\ 165 echo "/* Generated by firmware/Makefile */" > $@;\
165 echo " .section .rodata" >>$@;\ 166 echo " .section .rodata" >>$@;\
166 echo " .p2align $${ASM_ALIGN}" >>$@;\ 167 echo " .p2align $${ASM_ALIGN}" >>$@;\
167 echo "_fw_$${FWSTR}_bin:" >>$@;\ 168 echo "_fw_$${FWSTR}_bin:" >>$@;\
168 echo " .incbin \"$(2)\"" >>$@;\ 169 echo " .incbin \"$(2)\"" >>$@;\
169 echo "_fw_end:" >>$@;\ 170 echo "_fw_end:" >>$@;\
170 echo " .section .rodata.str,\"aMS\",$${PROGBITS},1" >>$@;\ 171 echo " .section .rodata.str,\"aMS\",$${PROGBITS},1" >>$@;\
171 echo " .p2align $${ASM_ALIGN}" >>$@;\ 172 echo " .p2align $${ASM_ALIGN}" >>$@;\
172 echo "_fw_$${FWSTR}_name:" >>$@;\ 173 echo "_fw_$${FWSTR}_name:" >>$@;\
173 echo " .string \"$$FWNAME\"" >>$@;\ 174 echo " .string \"$$FWNAME\"" >>$@;\
174 echo " .section .builtin_fw,\"a\",$${PROGBITS}" >>$@;\ 175 echo " .section .builtin_fw,\"a\",$${PROGBITS}" >>$@;\
175 echo " .p2align $${ASM_ALIGN}" >>$@;\ 176 echo " .p2align $${ASM_ALIGN}" >>$@;\
176 echo " $${ASM_WORD} _fw_$${FWSTR}_name" >>$@;\ 177 echo " $${ASM_WORD} _fw_$${FWSTR}_name" >>$@;\
177 echo " $${ASM_WORD} _fw_$${FWSTR}_bin" >>$@;\ 178 echo " $${ASM_WORD} _fw_$${FWSTR}_bin" >>$@;\
178 echo " $${ASM_WORD} _fw_end - _fw_$${FWSTR}_bin" >>$@; 179 echo " $${ASM_WORD} _fw_end - _fw_$${FWSTR}_bin" >>$@;
179 180
180 # One of these files will change, or come into existence, whenever 181 # One of these files will change, or come into existence, whenever
181 # the configuration changes between 32-bit and 64-bit. The .S files 182 # the configuration changes between 32-bit and 64-bit. The .S files
182 # need to change when that happens. 183 # need to change when that happens.
183 wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \ 184 wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \
184 include/config/ppc32.h include/config/ppc64.h \ 185 include/config/ppc32.h include/config/ppc64.h \
185 include/config/superh32.h include/config/superh64.h \ 186 include/config/superh32.h include/config/superh64.h \
186 include/config/x86_32.h include/config/x86_64.h) 187 include/config/x86_32.h include/config/x86_64.h)
187 188
188 # Workaround for make < 3.81, where .SECONDEXPANSION doesn't work. 189 # Workaround for make < 3.81, where .SECONDEXPANSION doesn't work.
189 # It'll end up depending on these targets, so make them a PHONY rule which 190 # It'll end up depending on these targets, so make them a PHONY rule which
190 # depends on _all_ the directories in $(firmware-dirs), and it'll work out OK. 191 # depends on _all_ the directories in $(firmware-dirs), and it'll work out OK.
191 PHONY += $(objtree)/$$(%) $(objtree)/$(obj)/$$(%) 192 PHONY += $(objtree)/$$(%) $(objtree)/$(obj)/$$(%)
192 $(objtree)/$$(%) $(objtree)/$(obj)/$$(%): $(firmware-dirs) 193 $(objtree)/$$(%) $(objtree)/$(obj)/$$(%): $(firmware-dirs)
193 @true 194 @true
194 195
195 # For the $$(dir %) trick, where we need % to be expanded first. 196 # For the $$(dir %) trick, where we need % to be expanded first.
196 .SECONDEXPANSION: 197 .SECONDEXPANSION:
197 198
198 $(patsubst %,$(obj)/%.gen.S, $(fw-shipped-y)): %: $(wordsize_deps) \ 199 $(patsubst %,$(obj)/%.gen.S, $(fw-shipped-y)): %: $(wordsize_deps) \
199 | $(objtree)/$$(dir %) 200 | $(objtree)/$$(dir %)
200 $(call cmd,fwbin,$(patsubst %.gen.S,%,$@)) 201 $(call cmd,fwbin,$(patsubst %.gen.S,%,$@))
201 $(patsubst %,$(obj)/%.gen.S, $(fw-external-y)): %: $(wordsize_deps) \ 202 $(patsubst %,$(obj)/%.gen.S, $(fw-external-y)): %: $(wordsize_deps) \
202 include/config/extra/firmware/dir.h | $(objtree)/$$(dir %) 203 include/config/extra/firmware/dir.h | $(objtree)/$$(dir %)
203 $(call cmd,fwbin,$(fwabs)/$(patsubst $(obj)/%.gen.S,%,$@)) 204 $(call cmd,fwbin,$(fwabs)/$(patsubst $(obj)/%.gen.S,%,$@))
204 205
205 # The .o files depend on the binaries directly; the .S files don't. 206 # The .o files depend on the binaries directly; the .S files don't.
206 $(patsubst %,$(obj)/%.gen.o, $(fw-shipped-y)): %.gen.o: % 207 $(patsubst %,$(obj)/%.gen.o, $(fw-shipped-y)): %.gen.o: %
207 $(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/% 208 $(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/%
208 209
209 # .ihex is used just as a simple way to hold binary files in a source tree 210 # .ihex is used just as a simple way to hold binary files in a source tree
210 # where binaries are frowned upon. They are directly converted with objcopy. 211 # where binaries are frowned upon. They are directly converted with objcopy.
211 $(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %) 212 $(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %)
212 $(call cmd,ihex) 213 $(call cmd,ihex)
213 214
214 # Don't depend on ihex2fw if we're installing and it already exists. 215 # Don't depend on ihex2fw if we're installing and it already exists.
215 # Putting it after | in the dependencies doesn't seem sufficient when 216 # Putting it after | in the dependencies doesn't seem sufficient when
216 # we're installing after a cross-compile, because ihex2fw has dependencies 217 # we're installing after a cross-compile, because ihex2fw has dependencies
217 # on stuff like /usr/lib/gcc/ppc64-redhat-linux/4.3.0/include/stddef.h and 218 # on stuff like /usr/lib/gcc/ppc64-redhat-linux/4.3.0/include/stddef.h and
218 # thus wants to be rebuilt. Which it can't be, if the prebuilt kernel tree 219 # thus wants to be rebuilt. Which it can't be, if the prebuilt kernel tree
219 # is exported read-only for someone to run 'make install'. 220 # is exported read-only for someone to run 'make install'.
220 ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw) 221 ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw)
221 ihex2fw_dep := 222 ihex2fw_dep :=
222 else 223 else
223 ihex2fw_dep := $(obj)/ihex2fw 224 ihex2fw_dep := $(obj)/ihex2fw
224 endif 225 endif
225 226
226 # .HEX is also Intel HEX, but where the offset and length in each record 227 # .HEX is also Intel HEX, but where the offset and length in each record
227 # is actually meaningful, because the firmware has to be loaded in a certain 228 # is actually meaningful, because the firmware has to be loaded in a certain
228 # order rather than as a single binary blob. Thus, we convert them into our 229 # order rather than as a single binary blob. Thus, we convert them into our
229 # more compact binary representation of ihex records (<linux/ihex.h>) 230 # more compact binary representation of ihex records (<linux/ihex.h>)
230 $(obj)/%.fw: $(obj)/%.HEX $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %) 231 $(obj)/%.fw: $(obj)/%.HEX $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %)
231 $(call cmd,ihex2fw) 232 $(call cmd,ihex2fw)
232 233
233 # .H16 is our own modified form of Intel HEX, with 16-bit length for records. 234 # .H16 is our own modified form of Intel HEX, with 16-bit length for records.
234 $(obj)/%.fw: $(obj)/%.H16 $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %) 235 $(obj)/%.fw: $(obj)/%.H16 $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %)
235 $(call cmd,h16tofw) 236 $(call cmd,h16tofw)
236 237
237 $(firmware-dirs): 238 $(firmware-dirs):
238 $(call cmd,mkdir) 239 $(call cmd,mkdir)
239 240
240 obj-y += $(patsubst %,%.gen.o, $(fw-external-y)) 241 obj-y += $(patsubst %,%.gen.o, $(fw-external-y))
241 obj-$(CONFIG_FIRMWARE_IN_KERNEL) += $(patsubst %,%.gen.o, $(fw-shipped-y)) 242 obj-$(CONFIG_FIRMWARE_IN_KERNEL) += $(patsubst %,%.gen.o, $(fw-shipped-y))
242 243
243 # Remove .S files and binaries created from ihex 244 # Remove .S files and binaries created from ihex
244 # (during 'make clean' .config isn't included so they're all in $(fw-shipped-)) 245 # (during 'make clean' .config isn't included so they're all in $(fw-shipped-))
245 targets := $(fw-shipped-) $(patsubst $(obj)/%,%, \ 246 targets := $(fw-shipped-) $(patsubst $(obj)/%,%, \
246 $(shell find $(obj) -name \*.gen.S 2>/dev/null)) 247 $(shell find $(obj) -name \*.gen.S 2>/dev/null))
247 248
248 # Without this, built-in.o won't be created when it's empty, and the 249 # Without this, built-in.o won't be created when it's empty, and the
249 # final vmlinux link will fail. 250 # final vmlinux link will fail.
250 obj-n := dummy 251 obj-n := dummy
251 252
252 hostprogs-y := ihex2fw 253 hostprogs-y := ihex2fw
253 254
1 ********** 1 **********
2 * WHENCE * 2 * WHENCE *
3 ********** 3 **********
4 4
5 This file attempts to document the origin and licensing information, 5 This file attempts to document the origin and licensing information,
6 if known, for each piece of firmware distributed for use with the Linux 6 if known, for each piece of firmware distributed for use with the Linux
7 kernel. 7 kernel.
8 8
9 -------------------------------------------------------------------------- 9 --------------------------------------------------------------------------
10 10
11 Driver: ambassador -- Madge Ambassador (Collage PCI 155 Server) ATM NIC. 11 Driver: ambassador -- Madge Ambassador (Collage PCI 155 Server) ATM NIC.
12 12
13 File: firmware/atmsar11.fw 13 File: firmware/atmsar11.fw
14 14
15 Licence: Allegedly GPLv2+, but no source visible. Marked: 15 Licence: Allegedly GPLv2+, but no source visible. Marked:
16 16
17 Madge Ambassador ATM Adapter microcode. 17 Madge Ambassador ATM Adapter microcode.
18 Copyright (C) 1995-1999 Madge Networks Ltd. 18 Copyright (C) 1995-1999 Madge Networks Ltd.
19 19
20 This microcode data is placed under the terms of the GNU General 20 This microcode data is placed under the terms of the GNU General
21 Public License. The GPL is contained in /usr/doc/copyright/GPL on a 21 Public License. The GPL is contained in /usr/doc/copyright/GPL on a
22 Debian system and in the file COPYING in the Linux kernel source. 22 Debian system and in the file COPYING in the Linux kernel source.
23 23
24 We would prefer you not to distribute modified versions without 24 We would prefer you not to distribute modified versions without
25 consultation and not to ask for assembly/other microcode source. 25 consultation and not to ask for assembly/other microcode source.
26 26
27 -------------------------------------------------------------------------- 27 --------------------------------------------------------------------------
28 28
29 Driver: korg1212 -- Korg 1212 IO audio device 29 Driver: korg1212 -- Korg 1212 IO audio device
30 30
31 File: korg/k1212.dsp 31 File: korg/k1212.dsp
32 32
33 Licence: Unknown 33 Licence: Unknown
34 34
35 Found in alsa-firmware package in hex form; no licensing information. 35 Found in alsa-firmware package in hex form; no licensing information.
36 36
37 -------------------------------------------------------------------------- 37 --------------------------------------------------------------------------
38 38
39 Driver: maestro3 -- ESS Allegro Maestro3 audio device 39 Driver: maestro3 -- ESS Allegro Maestro3 audio device
40 40
41 File: ess/maestro3_assp_kernel.fw 41 File: ess/maestro3_assp_kernel.fw
42 File: ess/maestro3_assp_minisrc.fw 42 File: ess/maestro3_assp_minisrc.fw
43 43
44 Licence: Unknown 44 Licence: Unknown
45 45
46 Found in alsa-firmware package in hex form with a comment claiming to 46 Found in alsa-firmware package in hex form with a comment claiming to
47 be GPLv2+, but without source -- and with another comment saying "ESS 47 be GPLv2+, but without source -- and with another comment saying "ESS
48 drops binary dsp code images on our heads, but we don't get to see 48 drops binary dsp code images on our heads, but we don't get to see
49 specs on the dsp." 49 specs on the dsp."
50 50
51 -------------------------------------------------------------------------- 51 --------------------------------------------------------------------------
52 52
53 Driver: ymfpci -- Yamaha YMF724/740/744/754 audio devices 53 Driver: ymfpci -- Yamaha YMF724/740/744/754 audio devices
54 54
55 File: yamaha/ds1_ctrl.fw 55 File: yamaha/ds1_ctrl.fw
56 File: yamaha/ds1_dsp.fw 56 File: yamaha/ds1_dsp.fw
57 File: yamaha/ds1e_ctrl.fw 57 File: yamaha/ds1e_ctrl.fw
58 58
59 Licence: Unknown 59 Licence: Unknown
60 60
61 Found alsa-firmware package in hex form, with the following comment: 61 Found alsa-firmware package in hex form, with the following comment:
62 Copyright (c) 1997-1999 Yamaha Corporation. All Rights Reserved. 62 Copyright (c) 1997-1999 Yamaha Corporation. All Rights Reserved.
63 63
64 -------------------------------------------------------------------------- 64 --------------------------------------------------------------------------
65 65
66 Driver: SCSI_ADVANSYS - AdvanSys SCSI 66 Driver: SCSI_ADVANSYS - AdvanSys SCSI
67 67
68 File: advansys/mcode.bin 68 File: advansys/mcode.bin
69 File: advansys/3550.bin 69 File: advansys/3550.bin
70 File: advansys/38C0800.bin 70 File: advansys/38C0800.bin
71 File: advansys/38C1600.bin 71 File: advansys/38C1600.bin
72 72
73 Licence: BSD, no source available. 73 Licence: BSD, no source available.
74 74
75 Found in hex form in kernel source. 75 Found in hex form in kernel source.
76 76
77 -------------------------------------------------------------------------- 77 --------------------------------------------------------------------------
78 78
79 Driver: SCSI_QLOGIC_1280 - Qlogic QLA 1240/1x80/1x160 SCSI support 79 Driver: SCSI_QLOGIC_1280 - Qlogic QLA 1240/1x80/1x160 SCSI support
80 80
81 File: qlogic/1040.bin 81 File: qlogic/1040.bin
82 File: qlogic/1280.bin 82 File: qlogic/1280.bin
83 File: qlogic/12160.bin 83 File: qlogic/12160.bin
84 84
85 Licence: Allegedly GPLv2+, but no source visible. Marked: 85 Licence: Allegedly GPLv2+, but no source visible. Marked:
86 86
87 QLOGIC LINUX SOFTWARE 87 QLOGIC LINUX SOFTWARE
88 QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x 88 QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x
89 Copyright (C) 2001 Qlogic Corporation (www.qlogic.com) 89 Copyright (C) 2001 Qlogic Corporation (www.qlogic.com)
90 90
91 -------------------------------------------------------------------------- 91 --------------------------------------------------------------------------
92 Driver: smctr -- SMC ISA/MCA Token Ring adapter 92 Driver: smctr -- SMC ISA/MCA Token Ring adapter
93 93
94 File: tr_smctr.bin 94 File: tr_smctr.bin
95 Info: MCT.BIN v6.3C1 03/01/95 95 Info: MCT.BIN v6.3C1 03/01/95
96 96
97 Original licence info: 97 Original licence info:
98 98
99 * This firmware is licensed to you strictly for use in conjunction 99 * This firmware is licensed to you strictly for use in conjunction
100 * with the use of SMC TokenRing adapters. There is no waranty 100 * with the use of SMC TokenRing adapters. There is no waranty
101 * expressed or implied about its fitness for any purpose. 101 * expressed or implied about its fitness for any purpose.
102 102
103 -------------------------------------------------------------------------- 103 --------------------------------------------------------------------------
104 104
105 Driver: kaweth -- USB KLSI KL5USB101-based Ethernet device 105 Driver: kaweth -- USB KLSI KL5USB101-based Ethernet device
106 106
107 File: kaweth/new_code.bin 107 File: kaweth/new_code.bin
108 File: kaweth/new_code_fix.bin 108 File: kaweth/new_code_fix.bin
109 File: kaweth/trigger_code.bin 109 File: kaweth/trigger_code.bin
110 File: kaweth/trigger_code_fix.bin 110 File: kaweth/trigger_code_fix.bin
111 111
112 Licence: Unknown 112 Licence: Unknown
113 113
114 Found in hex form in the kernel source. 114 Found in hex form in the kernel source.
115 115
116 -------------------------------------------------------------------------- 116 --------------------------------------------------------------------------
117 117
118 Driver: ttusb-budget -- Technotrend/Hauppauge Nova-USB devices 118 Driver: ttusb-budget -- Technotrend/Hauppauge Nova-USB devices
119 119
120 File: ttusb-budget/dspbootcode.bin 120 File: ttusb-budget/dspbootcode.bin
121 121
122 Licence: Unknown 122 Licence: Unknown
123 123
124 Found in hex form in the kernel source. 124 Found in hex form in the kernel source.
125 125
126 -------------------------------------------------------------------------- 126 --------------------------------------------------------------------------
127 127
128 Driver: keyspan -- USB Keyspan USA-xxx serial device 128 Driver: keyspan -- USB Keyspan USA-xxx serial device
129 129
130 File: keyspan/mpr.fw 130 File: keyspan/mpr.fw
131 File: keyspan/usa18x.fw 131 File: keyspan/usa18x.fw
132 File: keyspan/usa19.fw 132 File: keyspan/usa19.fw
133 File: keyspan/usa19qi.fw 133 File: keyspan/usa19qi.fw
134 File: keyspan/usa19qw.fw 134 File: keyspan/usa19qw.fw
135 File: keyspan/usa19w.fw 135 File: keyspan/usa19w.fw
136 File: keyspan/usa28.fw 136 File: keyspan/usa28.fw
137 File: keyspan/usa28xa.fw 137 File: keyspan/usa28xa.fw
138 File: keyspan/usa28xb.fw 138 File: keyspan/usa28xb.fw
139 File: keyspan/usa28x.fw 139 File: keyspan/usa28x.fw
140 File: keyspan/usa49w.fw 140 File: keyspan/usa49w.fw
141 File: keyspan/usa49wlc.fw 141 File: keyspan/usa49wlc.fw
142 142
143 Converted from Intel HEX files, used in our binary representation of ihex. 143 Converted from Intel HEX files, used in our binary representation of ihex.
144 144
145 Original licence information: 145 Original licence information:
146 146
147 Copyright (C) 1999-2001 147 Copyright (C) 1999-2001
148 Keyspan, A division of InnoSys Incorporated ("Keyspan") 148 Keyspan, A division of InnoSys Incorporated ("Keyspan")
149 149
150 as an unpublished work. This notice does not imply unrestricted or 150 as an unpublished work. This notice does not imply unrestricted or
151 public access to the source code from which this firmware image is 151 public access to the source code from which this firmware image is
152 derived. Except as noted below this firmware image may not be 152 derived. Except as noted below this firmware image may not be
153 reproduced, used, sold or transferred to any third party without 153 reproduced, used, sold or transferred to any third party without
154 Keyspan's prior written consent. All Rights Reserved. 154 Keyspan's prior written consent. All Rights Reserved.
155 155
156 Permission is hereby granted for the distribution of this firmware 156 Permission is hereby granted for the distribution of this firmware
157 image as part of a Linux or other Open Source operating system kernel 157 image as part of a Linux or other Open Source operating system kernel
158 in text or binary form as required. 158 in text or binary form as required.
159 159
160 This firmware may not be modified and may only be used with 160 This firmware may not be modified and may only be used with
161 Keyspan hardware. Distribution and/or Modification of the 161 Keyspan hardware. Distribution and/or Modification of the
162 keyspan.c driver which includes this firmware, in whole or in 162 keyspan.c driver which includes this firmware, in whole or in
163 part, requires the inclusion of this statement." 163 part, requires the inclusion of this statement."
164 164
165 -------------------------------------------------------------------------- 165 --------------------------------------------------------------------------
166 166
167 Driver: keyspan_pda -- USB Keyspan PDA single-port serial device 167 Driver: keyspan_pda -- USB Keyspan PDA single-port serial device
168 168
169 File: keyspan_pda/keyspan_pda.fw 169 File: keyspan_pda/keyspan_pda.fw
170 Source: keyspan_pda/keyspan_pda.S 170 Source: keyspan_pda/keyspan_pda.S
171 171
172 File: keyspan_pda/xircom_pgs.fw 172 File: keyspan_pda/xircom_pgs.fw
173 Source: keyspan_pda/xircom_pgs.S 173 Source: keyspan_pda/xircom_pgs.S
174 174
175 Licence: GPLv2+ 175 Licence: GPLv2+
176 176
177 Compiled from original 8051 source into Intel HEX, used in our binary ihex form. 177 Compiled from original 8051 source into Intel HEX, used in our binary ihex form.
178 178
179 -------------------------------------------------------------------------- 179 --------------------------------------------------------------------------
180 180
181 Driver: emi26 -- EMI 2|6 USB Audio interface 181 Driver: emi26 -- EMI 2|6 USB Audio interface
182 182
183 File: emi26/bitstream.fw 183 File: emi26/bitstream.fw
184 Info: VERSION=1.1.1.131 DATE=2001dec06 184 Info: VERSION=1.1.1.131 DATE=2001dec06
185 185
186 File: emi26/firmware.fw 186 File: emi26/firmware.fw
187 Info: VERSION=1.0.2.916 DATE=12.02.2002 187 Info: VERSION=1.0.2.916 DATE=12.02.2002
188 188
189 File: emi26/loader.fw 189 File: emi26/loader.fw
190 190
191 Converted from Intel HEX files, used in our binary representation of ihex. 191 Converted from Intel HEX files, used in our binary representation of ihex.
192 192
193 Original licence information: 193 Original licence information:
194 /* 194 /*
195 * This firmware is for the Emagic EMI 2|6 Audio Interface 195 * This firmware is for the Emagic EMI 2|6 Audio Interface
196 * 196 *
197 * The firmware contained herein is Copyright (c) 1999-2002 Emagic 197 * The firmware contained herein is Copyright (c) 1999-2002 Emagic
198 * as an unpublished work. This notice does not imply unrestricted 198 * as an unpublished work. This notice does not imply unrestricted
199 * or public access to this firmware which is a trade secret of Emagic, 199 * or public access to this firmware which is a trade secret of Emagic,
200 * and which may not be reproduced, used, sold or transferred to 200 * and which may not be reproduced, used, sold or transferred to
201 * any third party without Emagic's written consent. All Rights Reserved. 201 * any third party without Emagic's written consent. All Rights Reserved.
202 * 202 *
203 * Permission is hereby granted for the distribution of this firmware 203 * Permission is hereby granted for the distribution of this firmware
204 * image as part of a Linux or other Open Source operating system kernel 204 * image as part of a Linux or other Open Source operating system kernel
205 * in text or binary form as required. 205 * in text or binary form as required.
206 * 206 *
207 * This firmware may not be modified and may only be used with the 207 * This firmware may not be modified and may only be used with the
208 * Emagic EMI 2|6 Audio Interface. Distribution and/or Modification of 208 * Emagic EMI 2|6 Audio Interface. Distribution and/or Modification of
209 * any driver which includes this firmware, in whole or in part, 209 * any driver which includes this firmware, in whole or in part,
210 * requires the inclusion of this statement. 210 * requires the inclusion of this statement.
211 */ 211 */
212 212
213 -------------------------------------------------------------------------- 213 --------------------------------------------------------------------------
214 214
215 Driver: emi62 -- EMI 6|2m USB Audio interface 215 Driver: emi62 -- EMI 6|2m USB Audio interface
216 216
217 File: emi62/bitstream.fw 217 File: emi62/bitstream.fw
218 Info: VERSION=1.0.0.191 DATE= 2002oct28 218 Info: VERSION=1.0.0.191 DATE= 2002oct28
219 219
220 File: emi62/loader.fw 220 File: emi62/loader.fw
221 Source: EMILOAD.HEX 221 Source: EMILOAD.HEX
222 Info: VERSION=1.0.2.002 DATE=10.01.2002 222 Info: VERSION=1.0.2.002 DATE=10.01.2002
223 223
224 File: emi62/midi.fw 224 File: emi62/midi.fw
225 Source: EMI62MFW.HEX 225 Source: EMI62MFW.HEX
226 Info: VERSION=1.04.062 DATE=16.10.2002 226 Info: VERSION=1.04.062 DATE=16.10.2002
227 227
228 File: emi62/spdif.fw 228 File: emi62/spdif.fw
229 Source: EMI62SFW.HEX 229 Source: EMI62SFW.HEX
230 Info: VERSION=1.04.062 DATE=16.10.2002 230 Info: VERSION=1.04.062 DATE=16.10.2002
231 231
232 Converted from Intel HEX files, used in our binary representation of ihex. 232 Converted from Intel HEX files, used in our binary representation of ihex.
233 233
234 Original licence information: None 234 Original licence information: None
235 235
236 -------------------------------------------------------------------------- 236 --------------------------------------------------------------------------
237 237
238 Driver: ti_usb_3410_5052 -- USB TI 3410/5052 serial device 238 Driver: ti_usb_3410_5052 -- USB TI 3410/5052 serial device
239 239
240 File: ti_3410.fw 240 File: ti_3410.fw
241 Info: firmware 9/10/04 FW3410_Special_StartWdogOnStartPort 241 Info: firmware 9/10/04 FW3410_Special_StartWdogOnStartPort
242 242
243 File: ti_5052.fw 243 File: ti_5052.fw
244 Info: firmware 9/18/04 244 Info: firmware 9/18/04
245 245
246 Licence: Allegedly GPLv2+, but no source visible. Marked: 246 Licence: Allegedly GPLv2+, but no source visible. Marked:
247 Copyright (C) 2004 Texas Instruments 247 Copyright (C) 2004 Texas Instruments
248 248
249 Found in hex form in kernel source. 249 Found in hex form in kernel source.
250 250
251 -------------------------------------------------------------------------- 251 --------------------------------------------------------------------------
252 252
253 Driver: ti_usb_3410_5052 -- Multi-Tech USB cell modems 253 Driver: ti_usb_3410_5052 -- Multi-Tech USB cell modems
254 254
255 File: mts_cdma.fw 255 File: mts_cdma.fw
256 File: mts_gsm.fw 256 File: mts_gsm.fw
257 File: mts_edge.fw 257 File: mts_edge.fw
258 258
259 Licence: "all firmware components are redistributable in binary form" 259 Licence: "all firmware components are redistributable in binary form"
260 per support@multitech.com 260 per support@multitech.com
261 Copyright (C) 2005 Multi-Tech Systems, Inc. 261 Copyright (C) 2005 Multi-Tech Systems, Inc.
262 262
263 Found in hex form in ftp://ftp.multitech.com/wireless/wireless_linux.zip 263 Found in hex form in ftp://ftp.multitech.com/wireless/wireless_linux.zip
264 264
265 -------------------------------------------------------------------------- 265 --------------------------------------------------------------------------
266 266
267 Driver: whiteheat -- USB ConnectTech WhiteHEAT serial device 267 Driver: whiteheat -- USB ConnectTech WhiteHEAT serial device
268 268
269 File: whiteheat.fw 269 File: whiteheat.fw
270 Version: 4.06 270 Version: 4.06
271 271
272 File: whiteheat_loader.fw 272 File: whiteheat_loader.fw
273 File: whiteheat_loader_debug.fw 273 File: whiteheat_loader_debug.fw
274 274
275 Licence: Allegedly GPLv2, but no source visible. Marked: 275 Licence: Allegedly GPLv2, but no source visible. Marked:
276 Copyright (C) 2000-2002 ConnectTech Inc 276 Copyright (C) 2000-2002 ConnectTech Inc
277 277
278 Debug loader claims the following behaviour: 278 Debug loader claims the following behaviour:
279 Port 1 LED flashes when the vend_ax program is running 279 Port 1 LED flashes when the vend_ax program is running
280 Port 2 LED flashes when any SETUP command arrives 280 Port 2 LED flashes when any SETUP command arrives
281 Port 3 LED flashes when any valid VENDOR request occurs 281 Port 3 LED flashes when any valid VENDOR request occurs
282 Port 4 LED flashes when the EXTERNAL RAM DOWNLOAD request occurs 282 Port 4 LED flashes when the EXTERNAL RAM DOWNLOAD request occurs
283 283
284 Converted from Intel HEX files, used in our binary representation of ihex. 284 Converted from Intel HEX files, used in our binary representation of ihex.
285 285
286 -------------------------------------------------------------------------- 286 --------------------------------------------------------------------------
287 287
288 Driver: ip2 -- Computone IntelliPort Plus serial device 288 Driver: ip2 -- Computone IntelliPort Plus serial device
289 289
290 File: intelliport2.bin 290 File: intelliport2.bin
291 291
292 Licence: Unknown 292 Licence: Unknown
293 293
294 Found in hex form in kernel source. 294 Found in hex form in kernel source.
295 295
296 -------------------------------------------------------------------------- 296 --------------------------------------------------------------------------
297 297
298 Driver: CPiA2 -- cameras based on Vision's CPiA2 298 Driver: CPiA2 -- cameras based on Vision's CPiA2
299 299
300 File: cpia2/stv0672_vp4.bin 300 File: cpia2/stv0672_vp4.bin
301 301
302 Licence: Allegedly GPLv2+, but no source visible. Marked: 302 Licence: Allegedly GPLv2+, but no source visible. Marked:
303 Copyright (C) 2001 STMicroelectronics, Inc. 303 Copyright (C) 2001 STMicroelectronics, Inc.
304 Contact: steve.miller@st.com 304 Contact: steve.miller@st.com
305 Description: This file contains patch data for the CPiA2 (stv0672) VP4. 305 Description: This file contains patch data for the CPiA2 (stv0672) VP4.
306 306
307 Found in hex form in kernel source. 307 Found in hex form in kernel source.
308 308
309 -------------------------------------------------------------------------- 309 --------------------------------------------------------------------------
310 310
311 Driver: DABUSB -- Digital Audio Broadcasting (DAB) Receiver for USB and Linux 311 Driver: DABUSB -- Digital Audio Broadcasting (DAB) Receiver for USB and Linux
312 312
313 File: dabusb/firmware.fw 313 File: dabusb/firmware.fw
314 File: dabusb/bitstream.bin 314 File: dabusb/bitstream.bin
315 315
316 Licence: Distributable 316 Licence: Distributable
317 317
318 * Copyright (C) 1999 BayCom GmbH 318 * Copyright (C) 1999 BayCom GmbH
319 * 319 *
320 * Redistribution and use in source and binary forms, with or without 320 * Redistribution and use in source and binary forms, with or without
321 * modification, are permitted provided that redistributions of source 321 * modification, are permitted provided that redistributions of source
322 * code retain the above copyright notice and this comment without 322 * code retain the above copyright notice and this comment without
323 * modification. 323 * modification.
324 324
325 -------------------------------------------------------------------------- 325 --------------------------------------------------------------------------
326 326
327 Driver: USB_VICAM -- USB 3com HomeConnect (aka vicam) 327 Driver: USB_VICAM -- USB 3com HomeConnect (aka vicam)
328 328
329 File: vicam/firmware.fw 329 File: vicam/firmware.fw
330 330
331 Licence: Unknown 331 Licence: Unknown
332 332
333 Found in hex form in kernel source. 333 Found in hex form in kernel source.
334 334
335 -------------------------------------------------------------------------- 335 --------------------------------------------------------------------------
336 336
337 Driver: USB_SERIAL_EDGEPORT - USB Inside Out Edgeport Serial Driver 337 Driver: USB_SERIAL_EDGEPORT - USB Inside Out Edgeport Serial Driver
338 338
339 File: edgeport/boot.fw 339 File: edgeport/boot.fw
340 File: edgeport/boot2.fw 340 File: edgeport/boot2.fw
341 File: edgeport/down.fw 341 File: edgeport/down.fw
342 File: edgeport/down2.fw 342 File: edgeport/down2.fw
343 343
344 Licence: Allegedly GPLv2+, but no source visible. Marked: 344 Licence: Allegedly GPLv2+, but no source visible. Marked:
345 //************************************************************** 345 //**************************************************************
346 //* Edgeport/4 Binary Image 346 //* Edgeport/4 Binary Image
347 //* Generated by HEX2C v1.06 347 //* Generated by HEX2C v1.06
348 //* Copyright (C) 1998 Inside Out Networks, All rights reserved. 348 //* Copyright (C) 1998 Inside Out Networks, All rights reserved.
349 //************************************************************** 349 //**************************************************************
350 350
351 Found in hex form in kernel source. 351 Found in hex form in kernel source.
352 352
353 -------------------------------------------------------------------------- 353 --------------------------------------------------------------------------
354 354
355 Driver: USB_SERIAL_EDGEPORT_TI - USB Inside Out Edgeport Serial Driver 355 Driver: USB_SERIAL_EDGEPORT_TI - USB Inside Out Edgeport Serial Driver
356 (TI Devices) 356 (TI Devices)
357 357
358 File: edgeport/down3.bin 358 File: edgeport/down3.bin
359 359
360 Licence: 360 Licence:
361 //************************************************************** 361 //**************************************************************
362 //* Edgeport Binary Image (for TI based products) 362 //* Edgeport Binary Image (for TI based products)
363 //* Generated by TIBin2C v2.00 (watchport) 363 //* Generated by TIBin2C v2.00 (watchport)
364 //* Copyright (C) 2001 Inside Out Networks, All rights reserved. 364 //* Copyright (C) 2001 Inside Out Networks, All rights reserved.
365 //************************************************************** 365 //**************************************************************
366 366
367 Found in hex form in kernel source. 367 Found in hex form in kernel source.
368 368
369 -------------------------------------------------------------------------- 369 --------------------------------------------------------------------------
370 370
371 Driver: ATARI_DSP56K - Atari DSP56k support 371 Driver: ATARI_DSP56K - Atari DSP56k support
372 372
373 File: dsp56k/bootstrap.bin 373 File: dsp56k/bootstrap.bin
374 Source: dsp56k/bootstrap.asm 374 Source: dsp56k/bootstrap.asm
375 375
376 Licence: GPLv2 or later 376 Licence: GPLv2 or later
377 377
378 DSP56001 assembler, possibly buildable with a56 from 378 DSP56001 assembler, possibly buildable with a56 from
379 http://www.zdomain.com/a56.html 379 http://www.zdomain.com/a56.html
380 380
381 -------------------------------------------------------------------------- 381 --------------------------------------------------------------------------
382 382
383 Driver: SND_SB16_CSP - Sound Blaster 16/AWE CSP support 383 Driver: SND_SB16_CSP - Sound Blaster 16/AWE CSP support
384 384
385 File: sb16/mulaw_main.csp 385 File: sb16/mulaw_main.csp
386 File: sb16/alaw_main.csp 386 File: sb16/alaw_main.csp
387 File: sb16/ima_adpcm_init.csp 387 File: sb16/ima_adpcm_init.csp
388 File: sb16/ima_adpcm_playback.csp 388 File: sb16/ima_adpcm_playback.csp
389 File: sb16/ima_adpcm_capture.csp 389 File: sb16/ima_adpcm_capture.csp
390 390
391 Licence: Allegedly GPLv2+, but no source visible. Marked: 391 Licence: Allegedly GPLv2+, but no source visible. Marked:
392 /* 392 /*
393 * Copyright (c) 1994 Creative Technology Ltd. 393 * Copyright (c) 1994 Creative Technology Ltd.
394 * Microcode files for SB16 Advanced Signal Processor 394 * Microcode files for SB16 Advanced Signal Processor
395 */ 395 */
396 396
397 Found in hex form in kernel source. 397 Found in hex form in kernel source.
398 398
399 -------------------------------------------------------------------------- 399 --------------------------------------------------------------------------
400 400
401 Driver: CASSINI - Sun Cassini 401 Driver: CASSINI - Sun Cassini
402 402
403 File: sun/cassini.bin 403 File: sun/cassini.bin
404 404
405 Licence: Unknown 405 Licence: Unknown
406 406
407 Found in hex form in kernel source. 407 Found in hex form in kernel source.
408 408
409 -------------------------------------------------------------------------- 409 --------------------------------------------------------------------------
410 410
411 Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter 411 Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter
412 412
413 File: cxgb3/t3b_psram-1.1.0.bin.ihex 413 File: cxgb3/t3b_psram-1.1.0.bin.ihex
414 File: cxgb3/t3c_psram-1.1.0.bin.ihex 414 File: cxgb3/t3c_psram-1.1.0.bin.ihex
415 file: cxgb3/t3fw-7.4.0.bin.ihex 415 file: cxgb3/t3fw-7.4.0.bin.ihex
416 416
417 License: GPLv2 or OpenIB.org BSD license, no source visible 417 License: GPLv2 or OpenIB.org BSD license, no source visible
418 418
419 -------------------------------------------------------------------------- 419 --------------------------------------------------------------------------
420 420
421 Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter 421 Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter
422 422
423 File: cxgb3/ael2005_opt_edc.bin.ihex 423 File: cxgb3/ael2005_opt_edc.bin.ihex
424 File: cxgb3/ael2005_twx_edc.bin.ihex 424 File: cxgb3/ael2005_twx_edc.bin.ihex
425 File: cxgb3/ael2020_twx_edc.bin.ihex 425 File: cxgb3/ael2020_twx_edc.bin.ihex
426 426
427 Licence: 427 Licence:
428 * Copyright (c) 2007-2009 NetLogic Microsystems, Inc. 428 * Copyright (c) 2007-2009 NetLogic Microsystems, Inc.
429 * 429 *
430 * Permission is hereby granted for the distribution of this firmware 430 * Permission is hereby granted for the distribution of this firmware
431 * data in hexadecimal or equivalent format, provided this copyright 431 * data in hexadecimal or equivalent format, provided this copyright
432 * notice is accompanying it. 432 * notice is accompanying it.
433 433
434 Found in hex form in kernel source. 434 Found in hex form in kernel source.
435 435
436 -------------------------------------------------------------------------- 436 --------------------------------------------------------------------------
437 437
438 Driver: e100 -- Intel PRO/100 Ethernet NIC 438 Driver: e100 -- Intel PRO/100 Ethernet NIC
439 439
440 File: e100/d101m_ucode.bin 440 File: e100/d101m_ucode.bin
441 File: e100/d101s_ucode.bin 441 File: e100/d101s_ucode.bin
442 File: e100/d102e_ucode.bin 442 File: e100/d102e_ucode.bin
443 443
444 Licence: Unknown 444 Licence: Unknown
445 445
446 Found in hex form in kernel source. 446 Found in hex form in kernel source.
447 447
448 -------------------------------------------------------------------------- 448 --------------------------------------------------------------------------
449 449
450 Driver: acenic -- Alteon AceNIC Gigabit Ethernet card 450 Driver: acenic -- Alteon AceNIC Gigabit Ethernet card
451 451
452 File: acenic/tg1.bin 452 File: acenic/tg1.bin
453 File: acenic/tg2.bin 453 File: acenic/tg2.bin
454 454
455 Licence: Unknown 455 Licence: Unknown
456 456
457 Found in hex form in kernel source, but source allegedly available at 457 Found in hex form in kernel source, but source allegedly available at
458 http://alteon.shareable.org/ 458 http://alteon.shareable.org/
459 459
460 -------------------------------------------------------------------------- 460 --------------------------------------------------------------------------
461 461
462 Driver: tigon3 -- Broadcom Tigon3 based gigabit Ethernet cards 462 Driver: tigon3 -- Broadcom Tigon3 based gigabit Ethernet cards
463 463
464 File: tigon/tg3.bin 464 File: tigon/tg3.bin
465 File: tigon/tg3_tso.bin 465 File: tigon/tg3_tso.bin
466 File: tigon/tg3_tso5.bin 466 File: tigon/tg3_tso5.bin
467 467
468 Licence: 468 Licence:
469 * Firmware is: 469 * Firmware is:
470 * Derived from proprietary unpublished source code, 470 * Derived from proprietary unpublished source code,
471 * Copyright (C) 2000-2003 Broadcom Corporation. 471 * Copyright (C) 2000-2003 Broadcom Corporation.
472 * 472 *
473 * Permission is hereby granted for the distribution of this firmware 473 * Permission is hereby granted for the distribution of this firmware
474 * data in hexadecimal or equivalent format, provided this copyright 474 * data in hexadecimal or equivalent format, provided this copyright
475 * notice is accompanying it. 475 * notice is accompanying it.
476 476
477 Found in hex form in kernel source. 477 Found in hex form in kernel source.
478 478
479 -------------------------------------------------------------------------- 479 --------------------------------------------------------------------------
480 480
481 Driver: ADAPTEC_STARFIRE - Adaptec Starfire/DuraLAN support 481 Driver: ADAPTEC_STARFIRE - Adaptec Starfire/DuraLAN support
482 482
483 File: adaptec/starfire_rx.bin 483 File: adaptec/starfire_rx.bin
484 File: adaptec/starfire_tx.bin 484 File: adaptec/starfire_tx.bin
485 485
486 Licence: Allegedly GPLv2, but no source visible. 486 Licence: Allegedly GPLv2, but no source visible.
487 487
488 Found in hex form in kernel source, with the following notice: 488 Found in hex form in kernel source, with the following notice:
489 489
490 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE IT IS LICENSED "AS IS" AND 490 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE IT IS LICENSED "AS IS" AND
491 THERE IS NO WARRANTY FOR THE PROGRAM, INCLUDING BUT NOT LIMITED TO THE 491 THERE IS NO WARRANTY FOR THE PROGRAM, INCLUDING BUT NOT LIMITED TO THE
492 IMPLIED WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR A PARTICULAR PURPOSE 492 IMPLIED WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR A PARTICULAR PURPOSE
493 (TO THE EXTENT PERMITTED BY APPLICABLE LAW). USE OF THE PROGRAM IS AT YOUR 493 (TO THE EXTENT PERMITTED BY APPLICABLE LAW). USE OF THE PROGRAM IS AT YOUR
494 OWN RISK. IN NO EVENT WILL ADAPTEC OR ITS LICENSORS BE LIABLE TO YOU FOR 494 OWN RISK. IN NO EVENT WILL ADAPTEC OR ITS LICENSORS BE LIABLE TO YOU FOR
495 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES 495 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
496 ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM. 496 ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM.
497 497
498 -------------------------------------------------------------------------- 498 --------------------------------------------------------------------------
499 499
500 Driver: TEHUTI - Tehuti Networks 10G Ethernet 500 Driver: TEHUTI - Tehuti Networks 10G Ethernet
501 501
502 File: tehuti/bdx.bin 502 File: tehuti/bdx.bin
503 503
504 Licence: 504 Licence:
505 505
506 Copyright (C) 2007 Tehuti Networks Ltd. 506 Copyright (C) 2007 Tehuti Networks Ltd.
507 507
508 Permission is hereby granted for the distribution of this firmware data 508 Permission is hereby granted for the distribution of this firmware data
509 in hexadecimal or equivalent format, provided this copyright notice is 509 in hexadecimal or equivalent format, provided this copyright notice is
510 accompanying it. 510 accompanying it.
511 511
512 Found in hex form in kernel source. 512 Found in hex form in kernel source.
513 513
514 -------------------------------------------------------------------------- 514 --------------------------------------------------------------------------
515 515
516 Driver: TYPHOON - 3cr990 series Typhoon 516 Driver: TYPHOON - 3cr990 series Typhoon
517 517
518 File: 3com/typhoon.bin 518 File: 3com/typhoon.bin
519 519
520 Licence: 520 Licence:
521 /* 521 /*
522 * Copyright 1999-2004 3Com Corporation. All Rights Reserved. 522 * Copyright 1999-2004 3Com Corporation. All Rights Reserved.
523 * 523 *
524 * Redistribution and use in source and binary forms of the 3c990img.h 524 * Redistribution and use in source and binary forms of the 3c990img.h
525 * microcode software are permitted provided that the following conditions 525 * microcode software are permitted provided that the following conditions
526 * are met: 526 * are met:
527 * 1. Redistribution of source code must retain the above copyright 527 * 1. Redistribution of source code must retain the above copyright
528 * notice, this list of conditions and the following disclaimer. 528 * notice, this list of conditions and the following disclaimer.
529 * 2. Redistribution in binary form must reproduce the above copyright 529 * 2. Redistribution in binary form must reproduce the above copyright
530 * notice, this list of conditions and the following disclaimer in the 530 * notice, this list of conditions and the following disclaimer in the
531 * documentation and/or other materials provided with the distribution. 531 * documentation and/or other materials provided with the distribution.
532 * 3. The name of 3Com may not be used to endorse or promote products 532 * 3. The name of 3Com may not be used to endorse or promote products
533 * derived from this software without specific prior written permission 533 * derived from this software without specific prior written permission
534 * 534 *
535 * THIS SOFTWARE IS PROVIDED BY 3COM ``AS IS'' AND ANY EXPRESS OR 535 * THIS SOFTWARE IS PROVIDED BY 3COM ``AS IS'' AND ANY EXPRESS OR
536 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 536 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
537 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 537 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
538 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 538 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
539 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 539 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
540 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 540 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
541 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 541 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
542 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 542 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
543 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 543 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
544 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 544 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
545 * 545 *
546 * USER ACKNOWLEDGES AND AGREES THAT PURCHASE OR USE OF THE 3c990img.h 546 * USER ACKNOWLEDGES AND AGREES THAT PURCHASE OR USE OF THE 3c990img.h
547 * MICROCODE SOFTWARE WILL NOT CREATE OR GIVE GROUNDS FOR A LICENSE BY 547 * MICROCODE SOFTWARE WILL NOT CREATE OR GIVE GROUNDS FOR A LICENSE BY
548 * IMPLICATION, ESTOPPEL, OR OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS 548 * IMPLICATION, ESTOPPEL, OR OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS
549 * (PATENT, COPYRIGHT, TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT) 549 * (PATENT, COPYRIGHT, TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT)
550 * EMBODIED IN ANY OTHER 3COM HARDWARE OR SOFTWARE EITHER SOLELY OR IN 550 * EMBODIED IN ANY OTHER 3COM HARDWARE OR SOFTWARE EITHER SOLELY OR IN
551 * COMBINATION WITH THE 3c990img.h MICROCODE SOFTWARE 551 * COMBINATION WITH THE 3c990img.h MICROCODE SOFTWARE
552 */ 552 */
553 553
554 Found in hex form in kernel source. 554 Found in hex form in kernel source.
555 555
556 -------------------------------------------------------------------------- 556 --------------------------------------------------------------------------
557 557
558 Driver: YAM - YAM driver for AX.25 558 Driver: YAM - YAM driver for AX.25
559 559
560 File: yam/1200.bin 560 File: yam/1200.bin
561 File: yam/9600.bin 561 File: yam/9600.bin
562 562
563 Licence: 563 Licence:
564 * (C) F6FBB 1998 564 * (C) F6FBB 1998
565 565
566 Found in hex form in kernel source. 566 Found in hex form in kernel source.
567 567
568 -------------------------------------------------------------------------- 568 --------------------------------------------------------------------------
569 569
570 Driver: 3C359 - 3Com 3C359 Token Link Velocity XL adapter 570 Driver: 3C359 - 3Com 3C359 Token Link Velocity XL adapter
571 571
572 File: 3com/3C359.bin 572 File: 3com/3C359.bin
573 573
574 Licence: 574 Licence:
575 /* 575 /*
576 * The firmware this driver downloads into the tokenring card is a 576 * The firmware this driver downloads into the tokenring card is a
577 * separate program and is not GPL'd source code, even though the Linux 577 * separate program and is not GPL'd source code, even though the Linux
578 * side driver and the routine that loads this data into the card are. 578 * side driver and the routine that loads this data into the card are.
579 * 579 *
580 * This firmware is licensed to you strictly for use in conjunction 580 * This firmware is licensed to you strictly for use in conjunction
581 * with the use of 3Com 3C359 TokenRing adapters. There is no 581 * with the use of 3Com 3C359 TokenRing adapters. There is no
582 * waranty expressed or implied about its fitness for any purpose. 582 * waranty expressed or implied about its fitness for any purpose.
583 */ 583 */
584 /* 3c359_microcode.mac: 3Com 3C359 Tokenring microcode. 584 /* 3c359_microcode.mac: 3Com 3C359 Tokenring microcode.
585 * 585 *
586 * Notes: 586 * Notes:
587 * - Loaded from xl_init upon adapter initialization. 587 * - Loaded from xl_init upon adapter initialization.
588 * 588 *
589 * Available from 3Com as part of their standard 3C359 driver. 589 * Available from 3Com as part of their standard 3C359 driver.
590 */ 590 */
591 591
592 Found in hex form in kernel source. 592 Found in hex form in kernel source.
593 593
594 -------------------------------------------------------------------------- 594 --------------------------------------------------------------------------
595 595
596 Driver: PCMCIA_PCNET - NE2000 compatible PCMCIA adapter 596 Driver: PCMCIA_PCNET - NE2000 compatible PCMCIA adapter
597 597
598 File: cis/LA-PCM.cis 598 File: cis/LA-PCM.cis
599 cis/PCMLM28.cis 599 cis/PCMLM28.cis
600 cis/DP83903.cis 600 cis/DP83903.cis
601 cis/NE2K.cis 601 cis/NE2K.cis
602 cis/tamarack.cis 602 cis/tamarack.cis
603 cis/PE-200.cis 603 cis/PE-200.cis
604 cis/PE520.cis
604 605
605 Licence: GPL 606 Licence: GPL
606 607
607 Originally developed by the pcmcia-cs project 608 Originally developed by the pcmcia-cs project
608 609
609 -------------------------------------------------------------------------- 610 --------------------------------------------------------------------------
610 611
611 Driver: PCMCIA_3C589 - 3Com PCMCIA adapter 612 Driver: PCMCIA_3C589 - 3Com PCMCIA adapter
612 613
613 File: cis/3CXEM556.cis 614 File: cis/3CXEM556.cis
614 615
615 Licence: GPL 616 Licence: GPL
616 617
617 Originally developed by the pcmcia-cs project 618 Originally developed by the pcmcia-cs project
618 619
619 -------------------------------------------------------------------------- 620 --------------------------------------------------------------------------
620 621
621 Driver: PCMCIA_3C574 - 3Com PCMCIA adapter 622 Driver: PCMCIA_3C574 - 3Com PCMCIA adapter
622 623
623 File: cis/3CCFEM556.cis 624 File: cis/3CCFEM556.cis
624 625
625 Licence: GPL 626 Licence: GPL
626 627
627 Originally developed by the pcmcia-cs project 628 Originally developed by the pcmcia-cs project
628 629
629 -------------------------------------------------------------------------- 630 --------------------------------------------------------------------------
630 631
631 Driver: SERIAL_8250_CS - Serial PCMCIA adapter 632 Driver: SERIAL_8250_CS - Serial PCMCIA adapter
632 633
633 File: cis/MT5634ZLX.cis 634 File: cis/MT5634ZLX.cis
634 cis/RS-COM-2P.cis 635 cis/RS-COM-2P.cis
635 cis/COMpad2.cis 636 cis/COMpad2.cis
636 cis/COMpad4.cis 637 cis/COMpad4.cis
637 cis/SW_555_SER.cis 638 cis/SW_555_SER.cis
638 cis/SW_7xx_SER.cis 639 cis/SW_7xx_SER.cis
639 cis/SW_8xx_SER.cis 640 cis/SW_8xx_SER.cis
640 641
641 Licence: GPL 642 Licence: GPL
642 643
643 Originally developed by the pcmcia-cs project 644 Originally developed by the pcmcia-cs project
644 645
645 -------------------------------------------------------------------------- 646 --------------------------------------------------------------------------
646 647
647 Driver: PCMCIA_SMC91C92 - SMC 91Cxx PCMCIA 648 Driver: PCMCIA_SMC91C92 - SMC 91Cxx PCMCIA
648 649
649 File: ositech/Xilinx7OD.bin 650 File: ositech/Xilinx7OD.bin
650 651
651 Licence: Allegedly GPL, but no source visible. Marked: 652 Licence: Allegedly GPL, but no source visible. Marked:
652 This file contains the firmware of Seven of Diamonds from OSITECH. 653 This file contains the firmware of Seven of Diamonds from OSITECH.
653 (Special thanks to Kevin MacPherson of OSITECH) 654 (Special thanks to Kevin MacPherson of OSITECH)
654 655
655 Found in hex form in kernel source. 656 Found in hex form in kernel source.
656 657
657 -------------------------------------------------------------------------- 658 --------------------------------------------------------------------------
658 659
659 Driver: SCSI_QLOGICPTI - PTI Qlogic, ISP Driver 660 Driver: SCSI_QLOGICPTI - PTI Qlogic, ISP Driver
660 661
661 File: qlogic/isp1000.bin 662 File: qlogic/isp1000.bin
662 663
663 Licence: Unknown 664 Licence: Unknown
664 665
665 Found in hex form in kernel source. 666 Found in hex form in kernel source.
666 667
667 -------------------------------------------------------------------------- 668 --------------------------------------------------------------------------
668 669
669 Driver: MYRI_SBUS - MyriCOM Gigabit Ethernet 670 Driver: MYRI_SBUS - MyriCOM Gigabit Ethernet
670 671
671 File: myricom/lanai.bin 672 File: myricom/lanai.bin
672 673
673 Licence: Unknown 674 Licence: Unknown
674 675
675 Found in hex form in kernel source. 676 Found in hex form in kernel source.
676 677
677 -------------------------------------------------------------------------- 678 --------------------------------------------------------------------------
678 679
679 Driver: bnx2x: Broadcom Everest 680 Driver: bnx2x: Broadcom Everest
680 681
681 File: bnx2x-e1-5.2.7.0.fw.ihex 682 File: bnx2x-e1-5.2.7.0.fw.ihex
682 File: bnx2x-e1h-5.2.7.0.fw.ihex 683 File: bnx2x-e1h-5.2.7.0.fw.ihex
683 684
684 License: 685 License:
685 Copyright (c) 2007-2009 Broadcom Corporation 686 Copyright (c) 2007-2009 Broadcom Corporation
686 687
687 This file contains firmware data derived from proprietary unpublished 688 This file contains firmware data derived from proprietary unpublished
688 source code, Copyright (c) 2007-2009 Broadcom Corporation. 689 source code, Copyright (c) 2007-2009 Broadcom Corporation.
689 690
690 Permission is hereby granted for the distribution of this firmware data 691 Permission is hereby granted for the distribution of this firmware data
691 in hexadecimal or equivalent format, provided this copyright notice is 692 in hexadecimal or equivalent format, provided this copyright notice is
692 accompanying it. 693 accompanying it.
693 694
694 695
695 Found in hex form in kernel source. 696 Found in hex form in kernel source.
696 697
697 -------------------------------------------------------------------------- 698 --------------------------------------------------------------------------
698 699
699 Driver: BNX2 - Broadcom NetXtremeII 700 Driver: BNX2 - Broadcom NetXtremeII
700 701
701 File: bnx2/bnx2-mips-06-4.6.16.fw 702 File: bnx2/bnx2-mips-06-4.6.16.fw
702 File: bnx2/bnx2-rv2p-06-4.6.16.fw 703 File: bnx2/bnx2-rv2p-06-4.6.16.fw
703 File: bnx2/bnx2-mips-09-4.6.17.fw 704 File: bnx2/bnx2-mips-09-4.6.17.fw
704 File: bnx2/bnx2-rv2p-09-4.6.15.fw 705 File: bnx2/bnx2-rv2p-09-4.6.15.fw
705 706
706 Licence: 707 Licence:
707 708
708 This file contains firmware data derived from proprietary unpublished 709 This file contains firmware data derived from proprietary unpublished
709 source code, Copyright (c) 2004 - 2009 Broadcom Corporation. 710 source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
710 711
711 Permission is hereby granted for the distribution of this firmware data 712 Permission is hereby granted for the distribution of this firmware data
712 in hexadecimal or equivalent format, provided this copyright notice is 713 in hexadecimal or equivalent format, provided this copyright notice is
713 accompanying it. 714 accompanying it.
714 715
715 Found in hex form in kernel source. 716 Found in hex form in kernel source.
716 717
717 -------------------------------------------------------------------------- 718 --------------------------------------------------------------------------
718 719
719 Driver: DVB AV7110 -- AV7110 cards 720 Driver: DVB AV7110 -- AV7110 cards
720 721
721 File: av7110/bootcode.bin 722 File: av7110/bootcode.bin
722 723
723 Licence: GPLv2 or later 724 Licence: GPLv2 or later
724 725
725 ARM assembly source code available at http://www.linuxtv.org/downloads/firmware/Boot.S 726 ARM assembly source code available at http://www.linuxtv.org/downloads/firmware/Boot.S
726 727
727 -------------------------------------------------------------------------- 728 --------------------------------------------------------------------------
728 729
729 Driver: wavefront - ISA WaveFront sound card 730 Driver: wavefront - ISA WaveFront sound card
730 731
731 File: yamaha/yss225_registers.bin 732 File: yamaha/yss225_registers.bin
732 733
733 Licence: Allegedly GPLv2+, but no source visible. 734 Licence: Allegedly GPLv2+, but no source visible.
734 735
735 Found in hex form in kernel source, with the following comment: 736 Found in hex form in kernel source, with the following comment:
736 Copyright (c) 1998-2002 by Paul Davis <pbd@op.net> 737 Copyright (c) 1998-2002 by Paul Davis <pbd@op.net>
737 738
738 -------------------------------------------------------------------------- 739 --------------------------------------------------------------------------
739 740
740 Driver: mga - Matrox G200/G400/G550 741 Driver: mga - Matrox G200/G400/G550
741 742
742 File: matrox/g200_warp.fw 743 File: matrox/g200_warp.fw
743 File: matrox/g400_warp.fw 744 File: matrox/g400_warp.fw
744 745
745 Licence: 746 Licence:
746 747
747 Copyright 1999 Matrox Graphics Inc. 748 Copyright 1999 Matrox Graphics Inc.
748 All Rights Reserved. 749 All Rights Reserved.
749 750
750 Permission is hereby granted, free of charge, to any person obtaining a 751 Permission is hereby granted, free of charge, to any person obtaining a
751 copy of this software and associated documentation files (the "Software"), 752 copy of this software and associated documentation files (the "Software"),
752 to deal in the Software without restriction, including without limitation 753 to deal in the Software without restriction, including without limitation
753 the rights to use, copy, modify, merge, publish, distribute, sublicense, 754 the rights to use, copy, modify, merge, publish, distribute, sublicense,
754 and/or sell copies of the Software, and to permit persons to whom the 755 and/or sell copies of the Software, and to permit persons to whom the
755 Software is furnished to do so, subject to the following conditions: 756 Software is furnished to do so, subject to the following conditions:
756 757
757 The above copyright notice and this permission notice shall be included 758 The above copyright notice and this permission notice shall be included
758 in all copies or substantial portions of the Software. 759 in all copies or substantial portions of the Software.
759 760
760 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 761 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
761 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 762 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
762 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 763 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
763 MATROX GRAPHICS INC., OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 764 MATROX GRAPHICS INC., OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
764 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 765 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
765 OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 766 OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
766 OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 767 OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
767 768
768 Found in hex form in kernel source. 769 Found in hex form in kernel source.
769 770
770 -------------------------------------------------------------------------- 771 --------------------------------------------------------------------------
771 772
772 Driver: r128 - ATI Rage 128 773 Driver: r128 - ATI Rage 128
773 774
774 File: r128/r128_cce.bin 775 File: r128/r128_cce.bin
775 776
776 Licence: 777 Licence:
777 778
778 Copyright 2000 Advanced Micro Devices, Inc. 779 Copyright 2000 Advanced Micro Devices, Inc.
779 780
780 * Permission is hereby granted, free of charge, to any person obtaining a 781 * Permission is hereby granted, free of charge, to any person obtaining a
781 * copy of this software and associated documentation files (the "Software"), 782 * copy of this software and associated documentation files (the "Software"),
782 * to deal in the Software without restriction, including without limitation 783 * to deal in the Software without restriction, including without limitation
783 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 784 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
784 * and/or sell copies of the Software, and to permit persons to whom the 785 * and/or sell copies of the Software, and to permit persons to whom the
785 * Software is furnished to do so, subject to the following conditions: 786 * Software is furnished to do so, subject to the following conditions:
786 * 787 *
787 * The above copyright notice and this permission notice (including the next 788 * The above copyright notice and this permission notice (including the next
788 * paragraph) shall be included in all copies or substantial portions of the 789 * paragraph) shall be included in all copies or substantial portions of the
789 * Software. 790 * Software.
790 * 791 *
791 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 792 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
792 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 793 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
793 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 794 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
794 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 795 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
795 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 796 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
796 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 797 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
797 * DEALINGS IN THE SOFTWARE. 798 * DEALINGS IN THE SOFTWARE.
798 799
799 Found in decimal form in kernel source. 800 Found in decimal form in kernel source.
800 801
801 -------------------------------------------------------------------------- 802 --------------------------------------------------------------------------
802 803
803 Driver: radeon - ATI Radeon 804 Driver: radeon - ATI Radeon
804 805
805 File: radeon/R100_cp.bin 806 File: radeon/R100_cp.bin
806 File: radeon/R200_cp.bin 807 File: radeon/R200_cp.bin
807 File: radeon/R300_cp.bin 808 File: radeon/R300_cp.bin
808 File: radeon/R420_cp.bin 809 File: radeon/R420_cp.bin
809 File: radeon/RS600_cp.bin 810 File: radeon/RS600_cp.bin
810 File: radeon/RS690_cp.bin 811 File: radeon/RS690_cp.bin
811 File: radeon/R520_cp.bin 812 File: radeon/R520_cp.bin
812 File: radeon/R600_pfp.bin 813 File: radeon/R600_pfp.bin
813 File: radeon/R600_me.bin 814 File: radeon/R600_me.bin
814 File: radeon/RV610_pfp.bin 815 File: radeon/RV610_pfp.bin
815 File: radeon/RV610_me.bin 816 File: radeon/RV610_me.bin
816 File: radeon/RV630_pfp.bin 817 File: radeon/RV630_pfp.bin
817 File: radeon/RV630_me.bin 818 File: radeon/RV630_me.bin
818 File: radeon/RV620_pfp.bin 819 File: radeon/RV620_pfp.bin
819 File: radeon/RV620_me.bin 820 File: radeon/RV620_me.bin
820 File: radeon/RV635_pfp.bin 821 File: radeon/RV635_pfp.bin
821 File: radeon/RV635_me.bin 822 File: radeon/RV635_me.bin
822 File: radeon/RV670_pfp.bin 823 File: radeon/RV670_pfp.bin
823 File: radeon/RV670_me.bin 824 File: radeon/RV670_me.bin
824 File: radeon/RS780_pfp.bin 825 File: radeon/RS780_pfp.bin
825 File: radeon/RS780_me.bin 826 File: radeon/RS780_me.bin
826 File: radeon/RV770_pfp.bin 827 File: radeon/RV770_pfp.bin
827 File: radeon/RV770_me.bin 828 File: radeon/RV770_me.bin
828 File: radeon/RV730_pfp.bin 829 File: radeon/RV730_pfp.bin
829 File: radeon/RV730_me.bin 830 File: radeon/RV730_me.bin
830 File: radeon/RV710_pfp.bin 831 File: radeon/RV710_pfp.bin
831 File: radeon/RV710_me.bin 832 File: radeon/RV710_me.bin
832 833
833 Licence: 834 Licence:
834 835
835 * Copyright 2007-2009 Advanced Micro Devices, Inc. 836 * Copyright 2007-2009 Advanced Micro Devices, Inc.
836 * All Rights Reserved. 837 * All Rights Reserved.
837 * 838 *
838 * Permission is hereby granted, free of charge, to any person obtaining a 839 * Permission is hereby granted, free of charge, to any person obtaining a
839 * copy of this software and associated documentation files (the "Software"), 840 * copy of this software and associated documentation files (the "Software"),
840 * to deal in the Software without restriction, including without limitation 841 * to deal in the Software without restriction, including without limitation
841 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 842 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
842 * and/or sell copies of the Software, and to permit persons to whom the 843 * and/or sell copies of the Software, and to permit persons to whom the
843 * Software is furnished to do so, subject to the following conditions: 844 * Software is furnished to do so, subject to the following conditions:
844 * 845 *
845 * The above copyright notice and this permission notice (including the next 846 * The above copyright notice and this permission notice (including the next
846 * paragraph) shall be included in all copies or substantial portions of the 847 * paragraph) shall be included in all copies or substantial portions of the
847 * Software. 848 * Software.
848 * 849 *
849 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 850 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
850 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 851 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
851 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 852 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
852 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 853 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
853 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 854 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
854 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 855 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
855 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 856 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
856 857
857 Found in hex form in kernel source. 858 Found in hex form in kernel source.
858 859
859 -------------------------------------------------------------------------- 860 --------------------------------------------------------------------------
860 861
firmware/cis/PE520.cis.ihex
File was created 1 :1000000001030000FF152304014B544900504535FE
2 :10001000323020504C55530050434D434941204508
3 :10002000746865726E65740000FF20046101100041
4 :10003000210206001A050101D00F0B1B09C101198D
5 :0A00400001556530FFFF1400FF00BA
6 :00000001FF
7 #
8 # Replacement CIS for PE520 ethernet card
9 #
10