Exemplo n.º 1
0
/** RAM disk initialization routine
 *
 * The information about the RAM disk is provided as sysinfo
 * values to the uspace tasks.
 *
 */
void init_rd(void *data, size_t size)
{
    uintptr_t base = (uintptr_t) data;
    ASSERT((base % FRAME_SIZE) == 0);

    rd_parea.pbase = base;
    rd_parea.frames = SIZE2FRAMES(size);
    rd_parea.unpriv = false;
    rd_parea.mapped = false;
    ddi_parea_register(&rd_parea);

    sysinfo_set_item_val("rd", NULL, true);
    sysinfo_set_item_val("rd.size", NULL, size);
    sysinfo_set_item_val("rd.address.physical", NULL, (sysarg_t) base);

    printf("RAM disk at %p (size %zu bytes)\n", (void *) base, size);
}
Exemplo n.º 2
0
/** Initialize ns16550.
 *
 * @param dev      Addrress of the beginning of the device in I/O space.
 * @param inr      Interrupt number.
 * @param cir      Clear interrupt function.
 * @param cir_arg  First argument to cir.
 * @param output   Where to store pointer to the output device
 *                 or NULL if the caller is not interested in
 *                 writing to the serial port.
 *
 * @return Keyboard instance or NULL on failure.
 *
 */
ns16550_instance_t *ns16550_init(ns16550_t *dev, inr_t inr, cir_t cir,
    void *cir_arg, outdev_t **output)
{
	ns16550_instance_t *instance
	    = malloc(sizeof(ns16550_instance_t), FRAME_ATOMIC);
	if (instance) {
		instance->ns16550 = dev;
		instance->input = NULL;
		instance->output = NULL;
		
		if (output) {
			instance->output = malloc(sizeof(outdev_t),
			    FRAME_ATOMIC);
			if (!instance->output) {
				free(instance);
				return NULL;
			}
			
			outdev_initialize("ns16550", instance->output,
			    &ns16550_ops);
			instance->output->data = instance;
			*output = instance->output;
		}
		
		irq_initialize(&instance->irq);
		instance->irq.devno = device_assign_devno();
		instance->irq.inr = inr;
		instance->irq.claim = ns16550_claim;
		instance->irq.handler = ns16550_irq_handler;
		instance->irq.instance = instance;
		instance->irq.cir = cir;
		instance->irq.cir_arg = cir_arg;
		
		instance->parea.pbase = (uintptr_t) dev;
		instance->parea.frames = 1;
		instance->parea.unpriv = false;
		instance->parea.mapped = false;
		ddi_parea_register(&instance->parea);
	}
	
	return instance;
}