162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * rsrc_mgr.c -- Resource management routines and/or wrappers 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * The initial developer of the original code is David A. Hinds 662306a36Sopenharmony_ci * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds 762306a36Sopenharmony_ci * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * (C) 1999 David A. Hinds 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/slab.h> 1362306a36Sopenharmony_ci#include <linux/module.h> 1462306a36Sopenharmony_ci#include <linux/kernel.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <pcmcia/ss.h> 1762306a36Sopenharmony_ci#include <pcmcia/cistpl.h> 1862306a36Sopenharmony_ci#include "cs_internal.h" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciint static_init(struct pcmcia_socket *s) 2162306a36Sopenharmony_ci{ 2262306a36Sopenharmony_ci /* the good thing about SS_CAP_STATIC_MAP sockets is 2362306a36Sopenharmony_ci * that they don't need a resource database */ 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci s->resource_setup_done = 1; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci return 0; 2862306a36Sopenharmony_ci} 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct resource *pcmcia_make_resource(resource_size_t start, 3162306a36Sopenharmony_ci resource_size_t end, 3262306a36Sopenharmony_ci unsigned long flags, const char *name) 3362306a36Sopenharmony_ci{ 3462306a36Sopenharmony_ci struct resource *res = kzalloc(sizeof(*res), GFP_KERNEL); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci if (res) { 3762306a36Sopenharmony_ci res->name = name; 3862306a36Sopenharmony_ci res->start = start; 3962306a36Sopenharmony_ci res->end = start + end - 1; 4062306a36Sopenharmony_ci res->flags = flags; 4162306a36Sopenharmony_ci } 4262306a36Sopenharmony_ci return res; 4362306a36Sopenharmony_ci} 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistatic int static_find_io(struct pcmcia_socket *s, unsigned int attr, 4662306a36Sopenharmony_ci unsigned int *base, unsigned int num, 4762306a36Sopenharmony_ci unsigned int align, struct resource **parent) 4862306a36Sopenharmony_ci{ 4962306a36Sopenharmony_ci if (!s->io_offset) 5062306a36Sopenharmony_ci return -EINVAL; 5162306a36Sopenharmony_ci *base = s->io_offset | (*base & 0x0fff); 5262306a36Sopenharmony_ci *parent = NULL; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci return 0; 5562306a36Sopenharmony_ci} 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cistruct pccard_resource_ops pccard_static_ops = { 5962306a36Sopenharmony_ci .validate_mem = NULL, 6062306a36Sopenharmony_ci .find_io = static_find_io, 6162306a36Sopenharmony_ci .find_mem = NULL, 6262306a36Sopenharmony_ci .init = static_init, 6362306a36Sopenharmony_ci .exit = NULL, 6462306a36Sopenharmony_ci}; 6562306a36Sopenharmony_ciEXPORT_SYMBOL(pccard_static_ops); 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciMODULE_AUTHOR("David A. Hinds, Dominik Brodowski"); 6962306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 7062306a36Sopenharmony_ciMODULE_ALIAS("rsrc_nonstatic"); 71