diff options
Diffstat (limited to 'drivers/isdn/hisax/avma1_cs.c')
-rw-r--r-- | drivers/isdn/hisax/avma1_cs.c | 60 |
1 files changed, 28 insertions, 32 deletions
diff --git a/drivers/isdn/hisax/avma1_cs.c b/drivers/isdn/hisax/avma1_cs.c index f7143fe1a2e7..ff6b0e185bc4 100644 --- a/drivers/isdn/hisax/avma1_cs.c +++ b/drivers/isdn/hisax/avma1_cs.c | |||
@@ -67,8 +67,8 @@ module_param(isdnprot, int, 0); | |||
67 | handler. | 67 | handler. |
68 | */ | 68 | */ |
69 | 69 | ||
70 | static void avma1cs_config(dev_link_t *link); | 70 | static void avma1cs_config(struct pcmcia_device *link); |
71 | static void avma1cs_release(dev_link_t *link); | 71 | static void avma1cs_release(struct pcmcia_device *link); |
72 | 72 | ||
73 | /* | 73 | /* |
74 | The attach() and detach() entry points are used to create and destroy | 74 | The attach() and detach() entry points are used to create and destroy |
@@ -82,10 +82,10 @@ static void avma1cs_detach(struct pcmcia_device *p_dev); | |||
82 | /* | 82 | /* |
83 | A linked list of "instances" of the skeleton device. Each actual | 83 | A linked list of "instances" of the skeleton device. Each actual |
84 | PCMCIA card corresponds to one device instance, and is described | 84 | PCMCIA card corresponds to one device instance, and is described |
85 | by one dev_link_t structure (defined in ds.h). | 85 | by one struct pcmcia_device structure (defined in ds.h). |
86 | 86 | ||
87 | You may not want to use a linked list for this -- for example, the | 87 | You may not want to use a linked list for this -- for example, the |
88 | memory card driver uses an array of dev_link_t pointers, where minor | 88 | memory card driver uses an array of struct pcmcia_device pointers, where minor |
89 | device numbers are used to derive the corresponding array index. | 89 | device numbers are used to derive the corresponding array index. |
90 | */ | 90 | */ |
91 | 91 | ||
@@ -95,7 +95,7 @@ static void avma1cs_detach(struct pcmcia_device *p_dev); | |||
95 | example, ethernet cards, modems). In other cases, there may be | 95 | example, ethernet cards, modems). In other cases, there may be |
96 | many actual or logical devices (SCSI adapters, memory cards with | 96 | many actual or logical devices (SCSI adapters, memory cards with |
97 | multiple partitions). The dev_node_t structures need to be kept | 97 | multiple partitions). The dev_node_t structures need to be kept |
98 | in a linked list starting at the 'dev' field of a dev_link_t | 98 | in a linked list starting at the 'dev' field of a struct pcmcia_device |
99 | structure. We allocate them in the card's private data structure, | 99 | structure. We allocate them in the card's private data structure, |
100 | because they generally can't be allocated dynamically. | 100 | because they generally can't be allocated dynamically. |
101 | */ | 101 | */ |
@@ -164,10 +164,8 @@ static int avma1cs_attach(struct pcmcia_device *p_dev) | |||
164 | 164 | ||
165 | ======================================================================*/ | 165 | ======================================================================*/ |
166 | 166 | ||
167 | static void avma1cs_detach(struct pcmcia_device *p_dev) | 167 | static void avma1cs_detach(struct pcmcia_device *link) |
168 | { | 168 | { |
169 | dev_link_t *link = dev_to_instance(p_dev); | ||
170 | |||
171 | DEBUG(0, "avma1cs_detach(0x%p)\n", link); | 169 | DEBUG(0, "avma1cs_detach(0x%p)\n", link); |
172 | 170 | ||
173 | if (link->state & DEV_CONFIG) | 171 | if (link->state & DEV_CONFIG) |
@@ -184,7 +182,7 @@ static void avma1cs_detach(struct pcmcia_device *p_dev) | |||
184 | 182 | ||
185 | ======================================================================*/ | 183 | ======================================================================*/ |
186 | 184 | ||
187 | static int get_tuple(client_handle_t handle, tuple_t *tuple, | 185 | static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple, |
188 | cisparse_t *parse) | 186 | cisparse_t *parse) |
189 | { | 187 | { |
190 | int i = pcmcia_get_tuple_data(handle, tuple); | 188 | int i = pcmcia_get_tuple_data(handle, tuple); |
@@ -192,7 +190,7 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple, | |||
192 | return pcmcia_parse_tuple(handle, tuple, parse); | 190 | return pcmcia_parse_tuple(handle, tuple, parse); |
193 | } | 191 | } |
194 | 192 | ||
195 | static int first_tuple(client_handle_t handle, tuple_t *tuple, | 193 | static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, |
196 | cisparse_t *parse) | 194 | cisparse_t *parse) |
197 | { | 195 | { |
198 | int i = pcmcia_get_first_tuple(handle, tuple); | 196 | int i = pcmcia_get_first_tuple(handle, tuple); |
@@ -200,7 +198,7 @@ static int first_tuple(client_handle_t handle, tuple_t *tuple, | |||
200 | return get_tuple(handle, tuple, parse); | 198 | return get_tuple(handle, tuple, parse); |
201 | } | 199 | } |
202 | 200 | ||
203 | static int next_tuple(client_handle_t handle, tuple_t *tuple, | 201 | static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple, |
204 | cisparse_t *parse) | 202 | cisparse_t *parse) |
205 | { | 203 | { |
206 | int i = pcmcia_get_next_tuple(handle, tuple); | 204 | int i = pcmcia_get_next_tuple(handle, tuple); |
@@ -208,9 +206,8 @@ static int next_tuple(client_handle_t handle, tuple_t *tuple, | |||
208 | return get_tuple(handle, tuple, parse); | 206 | return get_tuple(handle, tuple, parse); |
209 | } | 207 | } |
210 | 208 | ||
211 | static void avma1cs_config(dev_link_t *link) | 209 | static void avma1cs_config(struct pcmcia_device *link) |
212 | { | 210 | { |
213 | client_handle_t handle; | ||
214 | tuple_t tuple; | 211 | tuple_t tuple; |
215 | cisparse_t parse; | 212 | cisparse_t parse; |
216 | cistpl_cftable_entry_t *cf = &parse.cftable_entry; | 213 | cistpl_cftable_entry_t *cf = &parse.cftable_entry; |
@@ -220,8 +217,7 @@ static void avma1cs_config(dev_link_t *link) | |||
220 | char devname[128]; | 217 | char devname[128]; |
221 | IsdnCard_t icard; | 218 | IsdnCard_t icard; |
222 | int busy = 0; | 219 | int busy = 0; |
223 | 220 | ||
224 | handle = link->handle; | ||
225 | dev = link->priv; | 221 | dev = link->priv; |
226 | 222 | ||
227 | DEBUG(0, "avma1cs_config(0x%p)\n", link); | 223 | DEBUG(0, "avma1cs_config(0x%p)\n", link); |
@@ -232,19 +228,19 @@ static void avma1cs_config(dev_link_t *link) | |||
232 | */ | 228 | */ |
233 | do { | 229 | do { |
234 | tuple.DesiredTuple = CISTPL_CONFIG; | 230 | tuple.DesiredTuple = CISTPL_CONFIG; |
235 | i = pcmcia_get_first_tuple(handle, &tuple); | 231 | i = pcmcia_get_first_tuple(link, &tuple); |
236 | if (i != CS_SUCCESS) break; | 232 | if (i != CS_SUCCESS) break; |
237 | tuple.TupleData = buf; | 233 | tuple.TupleData = buf; |
238 | tuple.TupleDataMax = 64; | 234 | tuple.TupleDataMax = 64; |
239 | tuple.TupleOffset = 0; | 235 | tuple.TupleOffset = 0; |
240 | i = pcmcia_get_tuple_data(handle, &tuple); | 236 | i = pcmcia_get_tuple_data(link, &tuple); |
241 | if (i != CS_SUCCESS) break; | 237 | if (i != CS_SUCCESS) break; |
242 | i = pcmcia_parse_tuple(handle, &tuple, &parse); | 238 | i = pcmcia_parse_tuple(link, &tuple, &parse); |
243 | if (i != CS_SUCCESS) break; | 239 | if (i != CS_SUCCESS) break; |
244 | link->conf.ConfigBase = parse.config.base; | 240 | link->conf.ConfigBase = parse.config.base; |
245 | } while (0); | 241 | } while (0); |
246 | if (i != CS_SUCCESS) { | 242 | if (i != CS_SUCCESS) { |
247 | cs_error(link->handle, ParseTuple, i); | 243 | cs_error(link, ParseTuple, i); |
248 | link->state &= ~DEV_CONFIG_PENDING; | 244 | link->state &= ~DEV_CONFIG_PENDING; |
249 | return; | 245 | return; |
250 | } | 246 | } |
@@ -261,7 +257,7 @@ static void avma1cs_config(dev_link_t *link) | |||
261 | tuple.DesiredTuple = CISTPL_VERS_1; | 257 | tuple.DesiredTuple = CISTPL_VERS_1; |
262 | 258 | ||
263 | devname[0] = 0; | 259 | devname[0] = 0; |
264 | if( !first_tuple(handle, &tuple, &parse) && parse.version_1.ns > 1 ) { | 260 | if( !first_tuple(link, &tuple, &parse) && parse.version_1.ns > 1 ) { |
265 | strlcpy(devname,parse.version_1.str + parse.version_1.ofs[1], | 261 | strlcpy(devname,parse.version_1.str + parse.version_1.ofs[1], |
266 | sizeof(devname)); | 262 | sizeof(devname)); |
267 | } | 263 | } |
@@ -272,7 +268,7 @@ static void avma1cs_config(dev_link_t *link) | |||
272 | tuple.TupleOffset = 0; tuple.TupleDataMax = 255; | 268 | tuple.TupleOffset = 0; tuple.TupleDataMax = 255; |
273 | tuple.Attributes = 0; | 269 | tuple.Attributes = 0; |
274 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 270 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
275 | i = first_tuple(handle, &tuple, &parse); | 271 | i = first_tuple(link, &tuple, &parse); |
276 | while (i == CS_SUCCESS) { | 272 | while (i == CS_SUCCESS) { |
277 | if (cf->io.nwin > 0) { | 273 | if (cf->io.nwin > 0) { |
278 | link->conf.ConfigIndex = cf->index; | 274 | link->conf.ConfigIndex = cf->index; |
@@ -282,36 +278,36 @@ static void avma1cs_config(dev_link_t *link) | |||
282 | printk(KERN_INFO "avma1_cs: testing i/o %#x-%#x\n", | 278 | printk(KERN_INFO "avma1_cs: testing i/o %#x-%#x\n", |
283 | link->io.BasePort1, | 279 | link->io.BasePort1, |
284 | link->io.BasePort1+link->io.NumPorts1 - 1); | 280 | link->io.BasePort1+link->io.NumPorts1 - 1); |
285 | i = pcmcia_request_io(link->handle, &link->io); | 281 | i = pcmcia_request_io(link, &link->io); |
286 | if (i == CS_SUCCESS) goto found_port; | 282 | if (i == CS_SUCCESS) goto found_port; |
287 | } | 283 | } |
288 | i = next_tuple(handle, &tuple, &parse); | 284 | i = next_tuple(link, &tuple, &parse); |
289 | } | 285 | } |
290 | 286 | ||
291 | found_port: | 287 | found_port: |
292 | if (i != CS_SUCCESS) { | 288 | if (i != CS_SUCCESS) { |
293 | cs_error(link->handle, RequestIO, i); | 289 | cs_error(link, RequestIO, i); |
294 | break; | 290 | break; |
295 | } | 291 | } |
296 | 292 | ||
297 | /* | 293 | /* |
298 | * allocate an interrupt line | 294 | * allocate an interrupt line |
299 | */ | 295 | */ |
300 | i = pcmcia_request_irq(link->handle, &link->irq); | 296 | i = pcmcia_request_irq(link, &link->irq); |
301 | if (i != CS_SUCCESS) { | 297 | if (i != CS_SUCCESS) { |
302 | cs_error(link->handle, RequestIRQ, i); | 298 | cs_error(link, RequestIRQ, i); |
303 | /* undo */ | 299 | /* undo */ |
304 | pcmcia_disable_device(link->handle); | 300 | pcmcia_disable_device(link); |
305 | break; | 301 | break; |
306 | } | 302 | } |
307 | 303 | ||
308 | /* | 304 | /* |
309 | * configure the PCMCIA socket | 305 | * configure the PCMCIA socket |
310 | */ | 306 | */ |
311 | i = pcmcia_request_configuration(link->handle, &link->conf); | 307 | i = pcmcia_request_configuration(link, &link->conf); |
312 | if (i != CS_SUCCESS) { | 308 | if (i != CS_SUCCESS) { |
313 | cs_error(link->handle, RequestConfiguration, i); | 309 | cs_error(link, RequestConfiguration, i); |
314 | pcmcia_disable_device(link->handle); | 310 | pcmcia_disable_device(link); |
315 | break; | 311 | break; |
316 | } | 312 | } |
317 | 313 | ||
@@ -358,7 +354,7 @@ found_port: | |||
358 | 354 | ||
359 | ======================================================================*/ | 355 | ======================================================================*/ |
360 | 356 | ||
361 | static void avma1cs_release(dev_link_t *link) | 357 | static void avma1cs_release(struct pcmcia_device *link) |
362 | { | 358 | { |
363 | local_info_t *local = link->priv; | 359 | local_info_t *local = link->priv; |
364 | 360 | ||
@@ -367,7 +363,7 @@ static void avma1cs_release(dev_link_t *link) | |||
367 | /* now unregister function with hisax */ | 363 | /* now unregister function with hisax */ |
368 | HiSax_closecard(local->node.minor); | 364 | HiSax_closecard(local->node.minor); |
369 | 365 | ||
370 | pcmcia_disable_device(link->handle); | 366 | pcmcia_disable_device(link); |
371 | } /* avma1cs_release */ | 367 | } /* avma1cs_release */ |
372 | 368 | ||
373 | 369 | ||