static int cuda_init(void) { if (sysinfo_get_value("cuda.address.physical", &(instance->cuda_physical)) != EOK) return -1; void *vaddr; if (pio_enable((void *) instance->cuda_physical, sizeof(cuda_t), &vaddr) != 0) return -1; dev = vaddr; instance->cuda = dev; instance->xstate = cx_listen; instance->bidx = 0; instance->snd_bytes = 0; fibril_mutex_initialize(&instance->dev_lock); /* Disable all interrupts from CUDA. */ pio_write_8(&dev->ier, IER_CLR | ALL_INT); cuda_irq_code.ranges[0].base = (uintptr_t) instance->cuda_physical; cuda_irq_code.cmds[0].addr = (void *) &((cuda_t *) instance->cuda_physical)->ifr; async_set_interrupt_received(cuda_irq_handler); irq_register(10, device_assign_devno(), 0, &cuda_irq_code); /* Enable SR interrupt. */ pio_write_8(&dev->ier, TIP | TREQ); pio_write_8(&dev->ier, IER_SET | SR_INT); /* Enable ADB autopolling. */ cuda_autopoll_set(true); return 0; }
int main(int argc, char **argv) { printf("%s: HelenOS VFS server\n", NAME); /* * Initialize VFS node hash table. */ if (!vfs_nodes_init()) { printf("%s: Failed to initialize VFS node hash table\n", NAME); return ENOMEM; } /* * Allocate and initialize the Path Lookup Buffer. */ plb = as_area_create(AS_AREA_ANY, PLB_SIZE, AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); if (plb == AS_MAP_FAILED) { printf("%s: Cannot create address space area\n", NAME); return ENOMEM; } memset(plb, 0, PLB_SIZE); /* * Set client data constructor and destructor. */ async_set_client_data_constructor(vfs_client_data_create); async_set_client_data_destructor(vfs_client_data_destroy); /* * Set a connection handling function/fibril. */ async_set_client_connection(vfs_connection); /* * Set notification handler and subscribe to notifications. */ async_set_interrupt_received(notification_received); event_task_subscribe(EVENT_TASK_STATE_CHANGE, VFS_TASK_STATE_CHANGE); /* * Register at the naming service. */ int rc = service_register(SERVICE_VFS); if (rc != EOK) { printf("%s: Cannot register VFS service\n", NAME); return rc; } /* * Start accepting connections. */ printf("%s: Accepting connections\n", NAME); async_manager(); return 0; }
int main(int argc, char *argv[]) { printf("%s: Task Monitoring Service\n", NAME); if (event_subscribe(EVENT_FAULT, 0) != EOK) { printf("%s: Error registering fault notifications.\n", NAME); return -1; } async_set_interrupt_received(fault_event); task_retval(0); async_manager(); return 0; }