Lines Matching +full:irq +full:- +full:start

1 // SPDX-License-Identifier: GPL-2.0-only
3 * PCMCIA 16-bit resource management functions
10 * Copyright (C) 2004-2010 Dominik Brodowski
22 #include <asm/irq.h>
39 if (s->resource_ops->validate_mem) in pcmcia_validate_mem()
40 return s->resource_ops->validate_mem(s); in pcmcia_validate_mem()
48 if (s->resource_ops->find_mem) in pcmcia_find_mem_region()
49 return s->resource_ops->find_mem(base, num, align, low, s); in pcmcia_find_mem_region()
55 * release_io_space() - release IO ports allocated with alloc_io_space()
65 dev_dbg(&s->dev, "release_io_space for %pR\n", res); in release_io_space()
68 if (!s->io[i].res) in release_io_space()
70 if ((s->io[i].res->start <= res->start) && in release_io_space()
71 (s->io[i].res->end >= res->end)) { in release_io_space()
72 s->io[i].InUse -= num; in release_io_space()
73 if (res->parent) in release_io_space()
75 res->start = res->end = 0; in release_io_space()
76 res->flags = IORESOURCE_IO; in release_io_space()
78 if (s->io[i].InUse == 0) { in release_io_space()
79 release_resource(s->io[i].res); in release_io_space()
80 kfree(s->io[i].res); in release_io_space()
81 s->io[i].res = NULL; in release_io_space()
89 * alloc_io_space() - allocate IO ports for use by a PCMCIA device
100 unsigned int base = res->start; in alloc_io_space()
101 unsigned int num = res->end; in alloc_io_space()
104 res->flags |= IORESOURCE_IO; in alloc_io_space()
106 dev_dbg(&s->dev, "alloc_io_space request for %pR, %d lines\n", in alloc_io_space()
112 dev_dbg(&s->dev, "odd IO request\n"); in alloc_io_space()
118 if (base & ~(align-1)) { in alloc_io_space()
119 dev_dbg(&s->dev, "odd IO request\n"); in alloc_io_space()
123 ret = s->resource_ops->find_io(s, res->flags, &base, num, align, in alloc_io_space()
124 &res->parent); in alloc_io_space()
126 dev_dbg(&s->dev, "alloc_io_space request failed (%d)\n", ret); in alloc_io_space()
127 return -EINVAL; in alloc_io_space()
130 res->start = base; in alloc_io_space()
131 res->end = res->start + num - 1; in alloc_io_space()
133 if (res->parent) { in alloc_io_space()
134 ret = request_resource(res->parent, res); in alloc_io_space()
136 dev_warn(&s->dev, in alloc_io_space()
138 res->parent = NULL; in alloc_io_space()
142 dev_dbg(&s->dev, "alloc_io_space request result %d: %pR\n", ret, res); in alloc_io_space()
148 * pcmcia_access_config() - read or write card configuration registers
166 s = p_dev->socket; in pcmcia_access_config()
168 mutex_lock(&s->ops_mutex); in pcmcia_access_config()
169 c = p_dev->function_config; in pcmcia_access_config()
171 if (!(c->state & CONFIG_LOCKED)) { in pcmcia_access_config()
172 dev_dbg(&p_dev->dev, "Configuration isn't locked\n"); in pcmcia_access_config()
173 mutex_unlock(&s->ops_mutex); in pcmcia_access_config()
174 return -EACCES; in pcmcia_access_config()
177 addr = (p_dev->config_base + where) >> 1; in pcmcia_access_config()
181 mutex_unlock(&s->ops_mutex); in pcmcia_access_config()
188 * pcmcia_read_config_byte() - read a byte from a card configuration register
201 * pcmcia_write_config_byte() - write a byte to a card configuration register
214 * pcmcia_map_mem_page() - modify iomem window to point to a different offset
226 struct pcmcia_socket *s = p_dev->socket; in pcmcia_map_mem_page()
230 w = ((res->flags & IORESOURCE_BITS & WIN_FLAGS_REQ) >> 2) - 1; in pcmcia_map_mem_page()
232 return -EINVAL; in pcmcia_map_mem_page()
234 mutex_lock(&s->ops_mutex); in pcmcia_map_mem_page()
235 s->win[w].card_start = offset; in pcmcia_map_mem_page()
236 ret = s->ops->set_mem_map(s, &s->win[w]); in pcmcia_map_mem_page()
238 dev_warn(&p_dev->dev, "failed to set_mem_map\n"); in pcmcia_map_mem_page()
239 mutex_unlock(&s->ops_mutex); in pcmcia_map_mem_page()
246 * pcmcia_fixup_iowidth() - reduce io width to 8bit
255 struct pcmcia_socket *s = p_dev->socket; in pcmcia_fixup_iowidth()
260 mutex_lock(&s->ops_mutex); in pcmcia_fixup_iowidth()
262 dev_dbg(&p_dev->dev, "fixup iowidth to 8bit\n"); in pcmcia_fixup_iowidth()
264 if (!(s->state & SOCKET_PRESENT) || in pcmcia_fixup_iowidth()
265 !(p_dev->function_config->state & CONFIG_LOCKED)) { in pcmcia_fixup_iowidth()
266 dev_dbg(&p_dev->dev, "No card? Config not locked?\n"); in pcmcia_fixup_iowidth()
267 ret = -EACCES; in pcmcia_fixup_iowidth()
273 if (!s->io[i].res) in pcmcia_fixup_iowidth()
279 io_on.start = s->io[i].res->start; in pcmcia_fixup_iowidth()
280 io_on.stop = s->io[i].res->end; in pcmcia_fixup_iowidth()
282 s->ops->set_io_map(s, &io_off); in pcmcia_fixup_iowidth()
284 s->ops->set_io_map(s, &io_on); in pcmcia_fixup_iowidth()
287 mutex_unlock(&s->ops_mutex); in pcmcia_fixup_iowidth()
295 * pcmcia_fixup_vpp() - set Vpp to a new voltage level
305 struct pcmcia_socket *s = p_dev->socket; in pcmcia_fixup_vpp()
308 mutex_lock(&s->ops_mutex); in pcmcia_fixup_vpp()
310 dev_dbg(&p_dev->dev, "fixup Vpp to %d\n", new_vpp); in pcmcia_fixup_vpp()
312 if (!(s->state & SOCKET_PRESENT) || in pcmcia_fixup_vpp()
313 !(p_dev->function_config->state & CONFIG_LOCKED)) { in pcmcia_fixup_vpp()
314 dev_dbg(&p_dev->dev, "No card? Config not locked?\n"); in pcmcia_fixup_vpp()
315 ret = -EACCES; in pcmcia_fixup_vpp()
319 s->socket.Vpp = new_vpp; in pcmcia_fixup_vpp()
320 if (s->ops->set_socket(s, &s->socket)) { in pcmcia_fixup_vpp()
321 dev_warn(&p_dev->dev, "Unable to set VPP\n"); in pcmcia_fixup_vpp()
322 ret = -EIO; in pcmcia_fixup_vpp()
325 p_dev->vpp = new_vpp; in pcmcia_fixup_vpp()
328 mutex_unlock(&s->ops_mutex); in pcmcia_fixup_vpp()
336 * pcmcia_release_configuration() - physically disable a PCMCIA device
349 struct pcmcia_socket *s = p_dev->socket; in pcmcia_release_configuration()
353 mutex_lock(&s->ops_mutex); in pcmcia_release_configuration()
354 c = p_dev->function_config; in pcmcia_release_configuration()
355 if (p_dev->_locked) { in pcmcia_release_configuration()
356 p_dev->_locked = 0; in pcmcia_release_configuration()
357 if (--(s->lock_count) == 0) { in pcmcia_release_configuration()
358 s->socket.flags = SS_OUTPUT_ENA; /* Is this correct? */ in pcmcia_release_configuration()
359 s->socket.Vpp = 0; in pcmcia_release_configuration()
360 s->socket.io_irq = 0; in pcmcia_release_configuration()
361 s->ops->set_socket(s, &s->socket); in pcmcia_release_configuration()
364 if (c->state & CONFIG_LOCKED) { in pcmcia_release_configuration()
365 c->state &= ~CONFIG_LOCKED; in pcmcia_release_configuration()
366 if (c->state & CONFIG_IO_REQ) in pcmcia_release_configuration()
368 if (!s->io[i].res) in pcmcia_release_configuration()
370 s->io[i].Config--; in pcmcia_release_configuration()
371 if (s->io[i].Config != 0) in pcmcia_release_configuration()
374 s->ops->set_io_map(s, &io); in pcmcia_release_configuration()
377 mutex_unlock(&s->ops_mutex); in pcmcia_release_configuration()
384 * pcmcia_release_io() - release I/O allocated by a PCMCIA device
395 struct pcmcia_socket *s = p_dev->socket; in pcmcia_release_io()
398 mutex_lock(&s->ops_mutex); in pcmcia_release_io()
399 if (!p_dev->_io) in pcmcia_release_io()
402 c = p_dev->function_config; in pcmcia_release_io()
404 release_io_space(s, &c->io[0]); in pcmcia_release_io()
406 if (c->io[1].end) in pcmcia_release_io()
407 release_io_space(s, &c->io[1]); in pcmcia_release_io()
409 p_dev->_io = 0; in pcmcia_release_io()
410 c->state &= ~CONFIG_IO_REQ; in pcmcia_release_io()
413 mutex_unlock(&s->ops_mutex); in pcmcia_release_io()
418 * pcmcia_release_window() - release reserved iomem for PCMCIA devices
427 struct pcmcia_socket *s = p_dev->socket; in pcmcia_release_window()
431 dev_dbg(&p_dev->dev, "releasing window %pR\n", res); in pcmcia_release_window()
433 w = ((res->flags & IORESOURCE_BITS & WIN_FLAGS_REQ) >> 2) - 1; in pcmcia_release_window()
435 return -EINVAL; in pcmcia_release_window()
437 mutex_lock(&s->ops_mutex); in pcmcia_release_window()
438 win = &s->win[w]; in pcmcia_release_window()
440 if (!(p_dev->_win & CLIENT_WIN_REQ(w))) { in pcmcia_release_window()
441 dev_dbg(&p_dev->dev, "not releasing unknown window\n"); in pcmcia_release_window()
442 mutex_unlock(&s->ops_mutex); in pcmcia_release_window()
443 return -EINVAL; in pcmcia_release_window()
447 win->flags &= ~MAP_ACTIVE; in pcmcia_release_window()
448 s->ops->set_mem_map(s, win); in pcmcia_release_window()
449 s->state &= ~SOCKET_WIN_REQ(w); in pcmcia_release_window()
452 if (win->res) { in pcmcia_release_window()
454 release_resource(win->res); in pcmcia_release_window()
455 kfree(win->res); in pcmcia_release_window()
456 win->res = NULL; in pcmcia_release_window()
458 res->start = res->end = 0; in pcmcia_release_window()
459 res->flags = IORESOURCE_MEM; in pcmcia_release_window()
460 p_dev->_win &= ~CLIENT_WIN_REQ(w); in pcmcia_release_window()
461 mutex_unlock(&s->ops_mutex); in pcmcia_release_window()
469 * pcmcia_enable_device() - set up and activate a PCMCIA device
473 * the flags passed to in @flags and stored in @p_dev->flags and sets up
481 struct pcmcia_socket *s = p_dev->socket; in pcmcia_enable_device()
487 unsigned int flags = p_dev->config_flags; in pcmcia_enable_device()
489 if (!(s->state & SOCKET_PRESENT)) in pcmcia_enable_device()
490 return -ENODEV; in pcmcia_enable_device()
492 mutex_lock(&s->ops_mutex); in pcmcia_enable_device()
493 c = p_dev->function_config; in pcmcia_enable_device()
494 if (c->state & CONFIG_LOCKED) { in pcmcia_enable_device()
495 mutex_unlock(&s->ops_mutex); in pcmcia_enable_device()
496 dev_dbg(&p_dev->dev, "Configuration is locked\n"); in pcmcia_enable_device()
497 return -EACCES; in pcmcia_enable_device()
501 s->socket.Vpp = p_dev->vpp; in pcmcia_enable_device()
502 if (s->ops->set_socket(s, &s->socket)) { in pcmcia_enable_device()
503 mutex_unlock(&s->ops_mutex); in pcmcia_enable_device()
504 dev_warn(&p_dev->dev, "Unable to set socket state\n"); in pcmcia_enable_device()
505 return -EINVAL; in pcmcia_enable_device()
509 if (p_dev->_io || flags & CONF_ENABLE_IRQ) in pcmcia_enable_device()
512 s->socket.flags |= SS_IOCARD; in pcmcia_enable_device()
514 s->socket.flags |= SS_ZVCARD | SS_IOCARD; in pcmcia_enable_device()
516 s->socket.flags |= SS_SPKR_ENA; in pcmcia_enable_device()
518 if (!(p_dev->config_regs & PRESENT_STATUS)) in pcmcia_enable_device()
519 dev_warn(&p_dev->dev, "speaker requested, but " in pcmcia_enable_device()
523 s->socket.io_irq = s->pcmcia_irq; in pcmcia_enable_device()
525 s->socket.io_irq = 0; in pcmcia_enable_device()
527 p_dev->config_regs |= PRESENT_EXT_STATUS; in pcmcia_enable_device()
530 s->ops->set_socket(s, &s->socket); in pcmcia_enable_device()
531 s->lock_count++; in pcmcia_enable_device()
533 dev_dbg(&p_dev->dev, in pcmcia_enable_device()
535 p_dev->vpp, flags, p_dev->config_base, p_dev->config_regs, in pcmcia_enable_device()
536 p_dev->config_index); in pcmcia_enable_device()
539 base = p_dev->config_base; in pcmcia_enable_device()
540 if (p_dev->config_regs & PRESENT_COPY) { in pcmcia_enable_device()
542 dev_dbg(&p_dev->dev, "clearing CISREG_SCR\n"); in pcmcia_enable_device()
545 if (p_dev->config_regs & PRESENT_PIN_REPLACE) { in pcmcia_enable_device()
547 dev_dbg(&p_dev->dev, "clearing CISREG_PRR\n"); in pcmcia_enable_device()
550 if (p_dev->config_regs & PRESENT_OPTION) { in pcmcia_enable_device()
551 if (s->functions == 1) { in pcmcia_enable_device()
552 option = p_dev->config_index & COR_CONFIG_MASK; in pcmcia_enable_device()
554 option = p_dev->config_index & COR_MFC_CONFIG_MASK; in pcmcia_enable_device()
556 if (p_dev->config_regs & PRESENT_IOBASE_0) in pcmcia_enable_device()
565 if (p_dev->config_regs & PRESENT_STATUS) in pcmcia_enable_device()
568 if (p_dev->config_regs & PRESENT_EXT_STATUS) in pcmcia_enable_device()
572 if (p_dev->config_regs & PRESENT_IOBASE_0) { in pcmcia_enable_device()
573 u8 b = c->io[0].start & 0xff; in pcmcia_enable_device()
575 b = (c->io[0].start >> 8) & 0xff; in pcmcia_enable_device()
578 if (p_dev->config_regs & PRESENT_IOSIZE) { in pcmcia_enable_device()
579 u8 b = resource_size(&c->io[0]) + resource_size(&c->io[1]) - 1; in pcmcia_enable_device()
584 if (c->state & CONFIG_IO_REQ) { in pcmcia_enable_device()
587 if (s->io[i].res) { in pcmcia_enable_device()
590 switch (s->io[i].res->flags & IO_DATA_PATH_WIDTH) { in pcmcia_enable_device()
598 iomap.start = s->io[i].res->start; in pcmcia_enable_device()
599 iomap.stop = s->io[i].res->end; in pcmcia_enable_device()
600 s->ops->set_io_map(s, &iomap); in pcmcia_enable_device()
601 s->io[i].Config++; in pcmcia_enable_device()
605 c->state |= CONFIG_LOCKED; in pcmcia_enable_device()
606 p_dev->_locked = 1; in pcmcia_enable_device()
607 mutex_unlock(&s->ops_mutex); in pcmcia_enable_device()
614 * pcmcia_request_io() - attempt to reserve port ranges for PCMCIA devices
618 * &struct pcmcia_device @p_dev->resource[0] and @p_dev->resource[1]. The
619 * "start" value is the requested start of the IO port resource; "end"
621 * is specified in &struct pcmcia_device @p_dev->io_lines.
625 struct pcmcia_socket *s = p_dev->socket; in pcmcia_request_io()
626 config_t *c = p_dev->function_config; in pcmcia_request_io()
627 int ret = -EINVAL; in pcmcia_request_io()
629 mutex_lock(&s->ops_mutex); in pcmcia_request_io()
630 dev_dbg(&p_dev->dev, "pcmcia_request_io: %pR , %pR", in pcmcia_request_io()
631 &c->io[0], &c->io[1]); in pcmcia_request_io()
633 if (!(s->state & SOCKET_PRESENT)) { in pcmcia_request_io()
634 dev_dbg(&p_dev->dev, "pcmcia_request_io: No card present\n"); in pcmcia_request_io()
638 if (c->state & CONFIG_LOCKED) { in pcmcia_request_io()
639 dev_dbg(&p_dev->dev, "Configuration is locked\n"); in pcmcia_request_io()
642 if (c->state & CONFIG_IO_REQ) { in pcmcia_request_io()
643 dev_dbg(&p_dev->dev, "IO already configured\n"); in pcmcia_request_io()
647 ret = alloc_io_space(s, &c->io[0], p_dev->io_lines); in pcmcia_request_io()
651 if (c->io[1].end) { in pcmcia_request_io()
652 ret = alloc_io_space(s, &c->io[1], p_dev->io_lines); in pcmcia_request_io()
654 struct resource tmp = c->io[0]; in pcmcia_request_io()
656 release_io_space(s, &c->io[0]); in pcmcia_request_io()
658 c->io[0].end = resource_size(&tmp); in pcmcia_request_io()
659 c->io[0].start = tmp.start; in pcmcia_request_io()
660 c->io[0].flags = tmp.flags; in pcmcia_request_io()
664 c->io[1].start = 0; in pcmcia_request_io()
666 c->state |= CONFIG_IO_REQ; in pcmcia_request_io()
667 p_dev->_io = 1; in pcmcia_request_io()
669 dev_dbg(&p_dev->dev, "pcmcia_request_io succeeded: %pR , %pR", in pcmcia_request_io()
670 &c->io[0], &c->io[1]); in pcmcia_request_io()
672 mutex_unlock(&s->ops_mutex); in pcmcia_request_io()
680 * pcmcia_request_irq() - attempt to request a IRQ for a PCMCIA device
682 * @handler: IRQ handler to register
687 * call free_irq() themselves, too. Also, only %IRQF_SHARED capable IRQ
695 if (!p_dev->irq) in pcmcia_request_irq()
696 return -EINVAL; in pcmcia_request_irq()
698 ret = request_irq(p_dev->irq, handler, IRQF_SHARED, in pcmcia_request_irq()
699 p_dev->devname, p_dev->priv); in pcmcia_request_irq()
701 p_dev->_irq = 1; in pcmcia_request_irq()
719 * pcmcia_setup_isa_irq() - determine whether an ISA IRQ can be used
721 * @type: IRQ type (flags)
727 struct pcmcia_socket *s = p_dev->socket; in pcmcia_setup_isa_irq()
728 unsigned int try, irq; in pcmcia_setup_isa_irq() local
729 u32 mask = s->irq_mask; in pcmcia_setup_isa_irq()
730 int ret = -ENODEV; in pcmcia_setup_isa_irq()
733 irq = try % 32; in pcmcia_setup_isa_irq()
735 if (irq > NR_IRQS) in pcmcia_setup_isa_irq()
739 if (!((mask >> irq) & 1)) in pcmcia_setup_isa_irq()
742 /* avoid an IRQ which is already used by another PCMCIA card */ in pcmcia_setup_isa_irq()
743 if ((try < 32) && pcmcia_used_irq[irq]) in pcmcia_setup_isa_irq()
747 * registering a dummy handle works, i.e. if the IRQ isn't in pcmcia_setup_isa_irq()
749 ret = request_irq(irq, test_action, type, p_dev->devname, in pcmcia_setup_isa_irq()
752 free_irq(irq, p_dev); in pcmcia_setup_isa_irq()
753 p_dev->irq = s->pcmcia_irq = irq; in pcmcia_setup_isa_irq()
754 pcmcia_used_irq[irq]++; in pcmcia_setup_isa_irq()
764 pcmcia_used_irq[s->pcmcia_irq]--; in pcmcia_cleanup_irq()
765 s->pcmcia_irq = 0; in pcmcia_cleanup_irq()
772 return -EINVAL; in pcmcia_setup_isa_irq()
777 s->pcmcia_irq = 0; in pcmcia_cleanup_irq()
785 * pcmcia_setup_irq() - determine IRQ to be used for device
792 struct pcmcia_socket *s = p_dev->socket; in pcmcia_setup_irq()
794 if (p_dev->irq) in pcmcia_setup_irq()
798 if (s->pcmcia_irq) { in pcmcia_setup_irq()
799 p_dev->irq = s->pcmcia_irq; in pcmcia_setup_irq()
803 /* prefer an exclusive ISA irq */ in pcmcia_setup_irq()
807 /* but accept a shared ISA irq */ in pcmcia_setup_irq()
811 /* but use the PCI irq otherwise */ in pcmcia_setup_irq()
812 if (s->pci_irq) { in pcmcia_setup_irq()
813 p_dev->irq = s->pcmcia_irq = s->pci_irq; in pcmcia_setup_irq()
817 return -EINVAL; in pcmcia_setup_irq()
822 * pcmcia_request_window() - attempt to reserve iomem for PCMCIA devices
824 * @res: &struct resource pointing to p_dev->resource[2..5]
829 * &struct pcmcia_device @p_dev->resource[2..5]. The "start" value is the
830 * requested start of the IO mem resource; "end" reflects the size
836 struct pcmcia_socket *s = p_dev->socket; in pcmcia_request_window()
841 dev_dbg(&p_dev->dev, "request_window %pR %d\n", res, speed); in pcmcia_request_window()
843 if (!(s->state & SOCKET_PRESENT)) { in pcmcia_request_window()
844 dev_dbg(&p_dev->dev, "No card present\n"); in pcmcia_request_window()
845 return -ENODEV; in pcmcia_request_window()
849 if (res->end == 0) in pcmcia_request_window()
850 res->end = s->map_size; in pcmcia_request_window()
851 align = (s->features & SS_CAP_MEM_ALIGN) ? res->end : s->map_size; in pcmcia_request_window()
852 if (res->end & (s->map_size-1)) { in pcmcia_request_window()
853 dev_dbg(&p_dev->dev, "invalid map size\n"); in pcmcia_request_window()
854 return -EINVAL; in pcmcia_request_window()
856 if ((res->start && (s->features & SS_CAP_STATIC_MAP)) || in pcmcia_request_window()
857 (res->start & (align-1))) { in pcmcia_request_window()
858 dev_dbg(&p_dev->dev, "invalid base address\n"); in pcmcia_request_window()
859 return -EINVAL; in pcmcia_request_window()
861 if (res->start) in pcmcia_request_window()
865 mutex_lock(&s->ops_mutex); in pcmcia_request_window()
867 if (!(s->state & SOCKET_WIN_REQ(w))) in pcmcia_request_window()
870 dev_dbg(&p_dev->dev, "all windows are used already\n"); in pcmcia_request_window()
871 mutex_unlock(&s->ops_mutex); in pcmcia_request_window()
872 return -EINVAL; in pcmcia_request_window()
875 win = &s->win[w]; in pcmcia_request_window()
877 if (!(s->features & SS_CAP_STATIC_MAP)) { in pcmcia_request_window()
878 win->res = pcmcia_find_mem_region(res->start, res->end, align, in pcmcia_request_window()
880 if (!win->res) { in pcmcia_request_window()
881 dev_dbg(&p_dev->dev, "allocating mem region failed\n"); in pcmcia_request_window()
882 mutex_unlock(&s->ops_mutex); in pcmcia_request_window()
883 return -EINVAL; in pcmcia_request_window()
886 p_dev->_win |= CLIENT_WIN_REQ(w); in pcmcia_request_window()
889 win->map = w+1; in pcmcia_request_window()
890 win->flags = res->flags & WIN_FLAGS_MAP; in pcmcia_request_window()
891 win->speed = speed; in pcmcia_request_window()
892 win->card_start = 0; in pcmcia_request_window()
894 if (s->ops->set_mem_map(s, win) != 0) { in pcmcia_request_window()
895 dev_dbg(&p_dev->dev, "failed to set memory mapping\n"); in pcmcia_request_window()
896 mutex_unlock(&s->ops_mutex); in pcmcia_request_window()
897 return -EIO; in pcmcia_request_window()
899 s->state |= SOCKET_WIN_REQ(w); in pcmcia_request_window()
902 if (s->features & SS_CAP_STATIC_MAP) in pcmcia_request_window()
903 res->start = win->static_start; in pcmcia_request_window()
905 res->start = win->res->start; in pcmcia_request_window()
907 /* convert to new-style resources */ in pcmcia_request_window()
908 res->end += res->start - 1; in pcmcia_request_window()
909 res->flags &= ~WIN_FLAGS_REQ; in pcmcia_request_window()
910 res->flags |= (win->map << 2) | IORESOURCE_MEM; in pcmcia_request_window()
911 res->parent = win->res; in pcmcia_request_window()
912 if (win->res) in pcmcia_request_window()
915 dev_dbg(&p_dev->dev, "request_window results in %pR\n", res); in pcmcia_request_window()
917 mutex_unlock(&s->ops_mutex); in pcmcia_request_window()
925 * pcmcia_disable_device() - disable and clean up a PCMCIA device
928 * pcmcia_disable_device() is the driver-callable counterpart to
933 * generated -- at least if there is no other card function (of
940 dev_dbg(&p_dev->dev, "disabling device\n"); in pcmcia_disable_device()
943 struct resource *res = p_dev->resource[MAX_IO_WIN + i]; in pcmcia_disable_device()
944 if (res->flags & WIN_FLAGS_REQ) in pcmcia_disable_device()
950 if (p_dev->_irq) { in pcmcia_disable_device()
951 free_irq(p_dev->irq, p_dev->priv); in pcmcia_disable_device()
952 p_dev->_irq = 0; in pcmcia_disable_device()