Ejemplo n.º 1
0
	}
	ReleaseSRWLockExclusive(&f->rw_lock);
	return r;
}

static const struct file_ops dsp_ops = {
	.close = dsp_close,
	.read = dsp_read,
	.write = dsp_write,
	.stat = virtualfs_custom_stat,
	.ioctl = dsp_ioctl,
};

static struct file *dsp_alloc();

struct virtualfs_custom_desc dsp_desc = VIRTUALFS_CUSTOM(mkdev(14, 3), dsp_alloc);

static struct file *dsp_alloc()
{
	struct dsp_file *f = (struct dsp_file *)kmalloc(sizeof(struct dsp_file));
	file_init(&f->custom_file.base_file, &dsp_ops, O_LARGEFILE | O_RDWR);
	virtualfs_init_custom(f, &dsp_desc);
	f->waveout = NULL;
	SECURITY_ATTRIBUTES attr;
	attr.nLength = sizeof(SECURITY_ATTRIBUTES);
	attr.bInheritHandle = FALSE;
	attr.lpSecurityDescriptor = NULL;
	for (int i = 0; i < DSP_BUFFER_COUNT; i++)
		f->buffer[i].event = CreateEventW(&attr, FALSE, TRUE, NULL);
	dsp_reset(f);
	return (struct file *)f;
Ejemplo n.º 2
0
	}

	default:
		log_error("console: unknown ioctl command: %x\n", cmd);
		r = -EINVAL;
		break;
	}
	console_unlock();
	return r;
}

static const struct file_ops console_ops = {
	.get_poll_status = console_get_poll_status,
	.get_poll_handle = console_get_poll_handle,
	.close = console_close,
	.read = console_read,
	.write = console_write,
	.stat = virtualfs_custom_stat,
	.ioctl = console_ioctl,
};

struct virtualfs_custom_desc console_desc = VIRTUALFS_CUSTOM(mkdev(5, 1), console_alloc);

struct file *console_alloc()
{
	struct console_file *f = (struct console_file *)kmalloc(sizeof(struct console_file));
	file_init(&f->custom_file.base_file, &console_ops, O_LARGEFILE | O_RDWR);
	virtualfs_init_custom(f, &console_desc);
	return (struct file *)f;
}