Ejemplo n.º 1
0
int syscall_handler(int num, struct syscall_arguments *args)
{
    interrupt_unmask();
    
    switch (num)
    {
        case ADDPROCESS:
            interrupt_mask();
                process_add((void (*)())args->arg1);
            interrupt_unmask();
        break;
        case YIELD:
            interrupt_sleepinsyscall();
        break;
        
        case UDPSEND:
            return udp_output(args->arg1, (struct sockaddr*)args->arg2, 
                (char *)args->arg3, args->arg4);
        break;
        case UDPRECV:
            return udp_recvfrom(args->arg1, (struct sockaddr*)args->arg2, 
                (char *)args->arg3, args->arg4);
        break;
        case UDPSOCKET: 
            return udp_socket();
        break;
        case UDPBIND:
            return udp_bind(args->arg1, (struct sockaddr*)args->arg2);
        break;
        case UDPCLOSE:
            return udp_close(args->arg1);
        break;
        
        case TCPCONNECT:
            return tcp_connect(args->arg1, (struct sockaddr*)args->arg2);
        break;
        
        case TCPSEND:
            return tcp_send(args->arg1, (char *)args->arg2, args->arg3);
        break;
        case TCPRECV:
            return tcp_recv(args->arg1, (char *)args->arg2, args->arg3);
        break;
        case TCPSOCKET: 
            return tcp_socket();
        break;
        case TCPBIND:
            return tcp_bind(args->arg1, (struct sockaddr*)args->arg2);
        break;
        case TCPCLOSE:
            return tcp_close(args->arg1);
        break;
        case TCPLISTEN:
            return tcp_listen(args->arg1);
        break;
    }
    
    return 0;
}
Ejemplo n.º 2
0
/**
 * Close CMRC connection
 *
 * @v cmrc		Communication-Managed Reliable Connection
 * @v rc		Reason for close
 */
static void ib_cmrc_close ( struct ib_cmrc_connection *cmrc, int rc ) {

	/* Close data transfer interface */
	intf_shutdown ( &cmrc->xfer, rc );

	/* Schedule shutdown process */
	process_add ( &cmrc->shutdown );
}
Ejemplo n.º 3
0
void server_connect(t_server *server,int port)
{
	t_context *C=ctx_get();

	t_process *process=process_add(C,"server",__server);
	process->clock->limit=1;
	process_launch(process);
}
Ejemplo n.º 4
0
void clock_init(void)
{
    T1CON = 0x8010;
    IPC0bits.T1IP = 1;
    IEC0bits.T1IE = 1;
    IFS0bits.T1IF = 0;
    /* period = 1 / (70000000 / 8) * 8750 = 1ms */
    PR1 = 8750;

    process_add(clock_process);
}
Ejemplo n.º 5
0
 app * process_bv_app(func_decl * f, unsigned num, expr * const * args) {
     SASSERT(f->get_family_id() == m_bv_util.get_family_id());
     switch (f->get_decl_kind()) {
     case OP_BADD:
         return process_add(f->get_family_id(), OP_BADD, OP_BSUB, num, args);
     case OP_BMUL:
         return process_bv_mul(f, num, args);
     case OP_BSDIV:
     case OP_BUDIV:
     case OP_BSDIV_I:
     case OP_BUDIV_I:
         SASSERT(num == 2);
         return process_bv_div(f, args[0], args[1]);
     case OP_SLEQ:
         SASSERT(num == 2);
         return process_bv_le(f, args[0], args[1], true);
     case OP_ULEQ:
         SASSERT(num == 2);
         return process_bv_le(f, args[0], args[1], false);
     case OP_CONCAT:
         return process_concat(f, num, args);
     case OP_EXTRACT:
         SASSERT(num == 1);
         return process_extract(f, args[0]);
     case OP_BNOT:
         SASSERT(num == 1);
         if (uncnstr(args[0])) {
             app * r;
             if (!mk_fresh_uncnstr_var_for(f, num, args, r))
                 return r;
             if (m_mc)
                 add_def(args[0], m().mk_app(f, r));
             return r;
         }
         return nullptr;
     case OP_BOR:
         if (num > 0 && uncnstr(num, args)) {
             sort * s = m().get_sort(args[0]);
             app * r;
             if (!mk_fresh_uncnstr_var_for(f, num, args, r))
                 return r;
             if (m_mc)
                 add_defs(num, args, r, m_bv_util.mk_numeral(rational(0), s));
             return r;
         }
         return nullptr;
     default:
         return nullptr;
     }
 }
Ejemplo n.º 6
0
/**
 * Create ELS request
 *
 * @v job		Parent job-control interface
 * @v port		Fibre Channel port
 * @v peer_port_id	Peer port ID
 * @v handler		ELS handler
 * @ret rc		Return status code
 */
int fc_els_request ( struct interface *job, struct fc_port *port,
                     struct fc_port_id *peer_port_id,
                     struct fc_els_handler *handler ) {
    struct fc_els *els;

    /* Allocate and initialise structure */
    els = fc_els_create ( port, &port->port_id, peer_port_id );
    if ( ! els )
        return -ENOMEM;
    els->handler = handler;
    els->flags = FC_ELS_REQUEST;
    process_add ( &els->process );

    /* Attach to parent job interface, mortalise self, and return */
    intf_plug_plug ( &els->job, job );
    ref_put ( &els->refcnt );
    return 0;
}
Ejemplo n.º 7
0
 app * process_arith_app(func_decl * f, unsigned num, expr * const * args) {
     
     SASSERT(f->get_family_id() == m_a_util.get_family_id());
     switch (f->get_decl_kind()) {
     case OP_ADD:
         return process_add(f->get_family_id(), OP_ADD, OP_SUB, num, args);
     case OP_MUL:
         return process_arith_mul(f, num, args);
     case OP_LE:
         SASSERT(num == 2);
         return process_le_ge(f, args[0], args[1], true);
     case OP_GE:
         SASSERT(num == 2);
         return process_le_ge(f, args[0], args[1], false);
     default:
         return nullptr;
     }
 }
Ejemplo n.º 8
0
    subpaving::var process_arith_app(app * t, unsigned depth, mpz & n, mpz & d) {
        SASSERT(m_autil.is_arith_expr(t));

        switch (t->get_decl_kind()) {
        case OP_NUM:
            return process_num(t, depth, n, d);
        case OP_ADD: 
            return process_add(t, depth, n, d);
        case OP_MUL: 
            return process_mul(t, depth, n, d);
        case OP_POWER:
            return process_power(t, depth, n, d);
        case OP_TO_REAL: 
            return process(t->get_arg(0), depth+1, n, d);
        case OP_SUB:
        case OP_UMINUS:
            found_non_simplified();
            break;
        case OP_TO_INT:
        case OP_DIV:
        case OP_IDIV:
        case OP_MOD:
        case OP_REM:
        case OP_IRRATIONAL_ALGEBRAIC_NUM:
            throw default_exception("you must apply arithmetic purifier before internalizing expressions into the subpaving module.");
        case OP_SIN: 
        case OP_COS:
        case OP_TAN:
        case OP_ASIN:
        case OP_ACOS:
        case OP_ATAN:
        case OP_SINH:
        case OP_COSH:
        case OP_TANH:
        case OP_ASINH:
        case OP_ACOSH:
        case OP_ATANH:
            // TODO
            throw default_exception("transcendental and hyperbolic functions are not supported yet.");
        default:
            UNREACHABLE();
        }
        return subpaving::null_var;
    }
Ejemplo n.º 9
0
int parse_options(int argc, char **argv) {
    static struct option opts[] = {
        {"command", required_argument, 0, 'c'},
        {"help", no_argument, 0, '?'},
        {"stderr", required_argument, 0, '2'},
        {"stdin", required_argument, 0, '0'},
        {"stdout", required_argument, 0, '1'},
        {0, 0, 0, 0},
    };

    assert(argv0 == NULL);
    argv0 = strdup(argv[0]);
    if (argv0 == NULL) {
        return -1;
    }

    process_t *current = NULL;

    while (1) {
        int opt_ind, c = getopt_long(argc, argv, "0:1:2:c:?", opts, &opt_ind);
        if (c == -1) {
            break;
        }

        switch (c) {
            case 0: {
                if (opts[opt_ind].flag != 0) {
                    continue;
                }
                fprintf(stderr, "Unexpected option %s\n", opts[opt_ind].name);
                break;
            } case '?': {
                usage(stdout);
                exit(0);
            } case 'c': {
                if (current != NULL) {
                    process_add(current);
                }
                current = new_process(optarg);
                if (current == NULL) {
                    goto fail;
                }
                break;
            } case '0': {
                set(current ? &current->in : &plumb_in, optarg);
                break;
            } case '1': {
                set(current ? &current->out : &plumb_out, optarg);
                break;
            } case '2': {
                set(current ? &current->err : &plumb_err, optarg);
                break;
            } default: {
                fprintf(stderr, "Getopt failure\n");
                exit(1);
            }
        }
    }
    if (current != NULL) {
        process_add(current);
    }
    return 0;

fail:
    perror("Failed to parse arguments");
    exit(1);
}