Lines Matching defs:res
57 * @res: resource to release
60 static void release_io_space(struct pcmcia_socket *s, struct resource *res)
62 resource_size_t num = resource_size(res);
65 dev_dbg(&s->dev, "release_io_space for %pR\n", res);
68 if (!s->io[i].res)
70 if ((s->io[i].res->start <= res->start) &&
71 (s->io[i].res->end >= res->end)) {
73 if (res->parent)
74 release_resource(res);
75 res->start = res->end = 0;
76 res->flags = IORESOURCE_IO;
79 release_resource(s->io[i].res);
80 kfree(s->io[i].res);
81 s->io[i].res = NULL;
91 * @res: resource to allocate (begin: begin, end: size)
96 static int alloc_io_space(struct pcmcia_socket *s, struct resource *res,
100 unsigned int base = res->start;
101 unsigned int num = res->end;
104 res->flags |= IORESOURCE_IO;
107 res, lines);
123 ret = s->resource_ops->find_io(s, res->flags, &base, num, align,
124 &res->parent);
130 res->start = base;
131 res->end = res->start + num - 1;
133 if (res->parent) {
134 ret = request_resource(res->parent, res);
137 "request_resource %pR failed: %d\n", res, ret);
138 res->parent = NULL;
139 release_io_space(s, res);
142 dev_dbg(&s->dev, "alloc_io_space request result %d: %pR\n", ret, res);
216 * @res: iomem resource already enabled by pcmcia_request_window()
223 int pcmcia_map_mem_page(struct pcmcia_device *p_dev, struct resource *res,
230 w = ((res->flags & IORESOURCE_BITS & WIN_FLAGS_REQ) >> 2) - 1;
273 if (!s->io[i].res)
279 io_on.start = s->io[i].res->start;
280 io_on.stop = s->io[i].res->end;
368 if (!s->io[i].res)
423 * @res: iomem resource to release
425 * pcmcia_release_window() releases &struct resource *res which was
428 int pcmcia_release_window(struct pcmcia_device *p_dev, struct resource *res)
434 dev_dbg(&p_dev->dev, "releasing window %pR\n", res);
436 w = ((res->flags & IORESOURCE_BITS & WIN_FLAGS_REQ) >> 2) - 1;
455 if (win->res) {
456 release_resource(res);
457 release_resource(win->res);
458 kfree(win->res);
459 win->res = NULL;
461 res->start = res->end = 0;
462 res->flags = IORESOURCE_MEM;
590 if (s->io[i].res) {
593 switch (s->io[i].res->flags & IO_DATA_PATH_WIDTH) {
601 iomap.start = s->io[i].res->start;
602 iomap.stop = s->io[i].res->end;
826 * @res: &struct resource pointing to p_dev->resource[2..5]
830 * &struct resource @res pointing to one of the entries in
835 int pcmcia_request_window(struct pcmcia_device *p_dev, struct resource *res,
843 dev_dbg(&p_dev->dev, "request_window %pR %d\n", res, speed);
851 if (res->end == 0)
852 res->end = s->map_size;
853 align = (s->features & SS_CAP_MEM_ALIGN) ? res->end : s->map_size;
854 if (res->end & (s->map_size-1)) {
858 if ((res->start && (s->features & SS_CAP_STATIC_MAP)) ||
859 (res->start & (align-1))) {
863 if (res->start)
880 win->res = pcmcia_find_mem_region(res->start, res->end, align,
882 if (!win->res) {
892 win->flags = res->flags & WIN_FLAGS_MAP;
905 res->start = win->static_start;
907 res->start = win->res->start;
910 res->end += res->start - 1;
911 res->flags &= ~WIN_FLAGS_REQ;
912 res->flags |= (win->map << 2) | IORESOURCE_MEM;
913 res->parent = win->res;
914 if (win->res)
915 request_resource(&iomem_resource, res);
917 dev_dbg(&p_dev->dev, "request_window results in %pR\n", res);
945 struct resource *res = p_dev->resource[MAX_IO_WIN + i];
946 if (res->flags & WIN_FLAGS_REQ)
947 pcmcia_release_window(p_dev, res);