Пример #1
0
static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long start, unsigned long end)
{
	struct socket_data *data = s->resource_data;
	unsigned long size = end - start + 1;
	int ret = 0;

	if (end < start)
		return -EINVAL;

	if (end > IO_SPACE_LIMIT)
		return -EINVAL;

	down(&rsrc_sem);
	switch (action) {
	case ADD_MANAGED_RESOURCE:
		if (add_interval(&data->io_db, start, size) != 0) {
			ret = -EBUSY;
			break;
		}
#ifdef CONFIG_PCMCIA_PROBE
		if (probe_io)
			do_io_probe(s, start, size);
#endif
		break;
	case REMOVE_MANAGED_RESOURCE:
		sub_interval(&data->io_db, start, size);
		break;
	default:
		ret = -EINVAL;
		break;
	}
	up(&rsrc_sem);

	return ret;
}
Пример #2
0
static void validate_io(void)
{
    resource_map_t *m, *n;
    if (!probe_io || io_scan++)
	return;
    for (m = io_db.next; m != &io_db; m = n) {
	n = m->next;
	do_io_probe(m->base, m->num);
    }
}