diff options
author | daniel <danieruru@gmail.com> | 2013-01-10 17:29:54 +0900 |
---|---|---|
committer | daniel <danieruru@gmail.com> | 2013-01-10 17:29:54 +0900 |
commit | 54329a7c7f740171d1594c6c6195277c2924f31f (patch) | |
tree | 8089149ac2898a8224b69135028c50ca79969b2e /vxi11_svc.c | |
parent | a7f61f8769d7c704e409e511687d450608c220d1 (diff) |
Interrupt channel work
Diffstat (limited to 'vxi11_svc.c')
-rw-r--r-- | vxi11_svc.c | 384 |
1 files changed, 190 insertions, 194 deletions
diff --git a/vxi11_svc.c b/vxi11_svc.c index 29d63d7..96a967f 100644 --- a/vxi11_svc.c +++ b/vxi11_svc.c @@ -11,9 +11,7 @@ #define SIG_PF void(*)(int) #endif -static void -device_async_1(struct svc_req *rqstp, register SVCXPRT *transp) -{ +static void device_async_1(struct svc_req *rqstp, register SVCXPRT *transp) { union { Device_Link device_abort_1_arg; } argument; @@ -22,39 +20,37 @@ device_async_1(struct svc_req *rqstp, register SVCXPRT *transp) char *(*local)(char *, struct svc_req *); switch (rqstp->rq_proc) { - case NULLPROC: - (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); - return; - - case device_abort: - _xdr_argument = (xdrproc_t) xdr_Device_Link; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) device_abort_1_svc; - break; - - default: - svcerr_noproc (transp); - return; + case NULLPROC: + (void) svc_sendreply(transp, (xdrproc_t) xdr_void, (char *) NULL); + return; + + case device_abort: + _xdr_argument = (xdrproc_t) xdr_Device_Link; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) device_abort_1_svc; + break; + + default: + svcerr_noproc(transp); + return; } - memset ((char *)&argument, 0, sizeof (argument)); - if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { - svcerr_decode (transp); + memset((char *) &argument, 0, sizeof(argument)); + if (!svc_getargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + svcerr_decode(transp); return; } - result = (*local)((char *)&argument, rqstp); + result = (*local)((char *) &argument, rqstp); if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) { - svcerr_systemerr (transp); + svcerr_systemerr(transp); } - if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { - fprintf (stderr, "%s", "unable to free arguments"); - exit (1); + if (!svc_freeargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + fprintf(stderr, "%s", "unable to free arguments"); + exit(1); } return; } -static void -device_core_1(struct svc_req *rqstp, register SVCXPRT *transp) -{ +static void device_core_1(struct svc_req *rqstp, register SVCXPRT *transp) { union { Create_LinkParms create_link_1_arg; Device_WriteParms device_write_1_arg; @@ -76,208 +72,208 @@ device_core_1(struct svc_req *rqstp, register SVCXPRT *transp) char *(*local)(char *, struct svc_req *); switch (rqstp->rq_proc) { - case NULLPROC: - (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); - return; - - case create_link: - _xdr_argument = (xdrproc_t) xdr_Create_LinkParms; - _xdr_result = (xdrproc_t) xdr_Create_LinkResp; - local = (char *(*)(char *, struct svc_req *)) create_link_1_svc; - break; - - case device_write: - _xdr_argument = (xdrproc_t) xdr_Device_WriteParms; - _xdr_result = (xdrproc_t) xdr_Device_WriteResp; - local = (char *(*)(char *, struct svc_req *)) device_write_1_svc; - break; - - case device_read: - _xdr_argument = (xdrproc_t) xdr_Device_ReadParms; - _xdr_result = (xdrproc_t) xdr_Device_ReadResp; - local = (char *(*)(char *, struct svc_req *)) device_read_1_svc; - break; - - case device_readstb: - _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; - _xdr_result = (xdrproc_t) xdr_Device_ReadStbResp; - local = (char *(*)(char *, struct svc_req *)) device_readstb_1_svc; - break; - - case device_trigger: - _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) device_trigger_1_svc; - break; - - case device_clear: - _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) device_clear_1_svc; - break; - - case device_remote: - _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) device_remote_1_svc; - break; - - case device_local: - _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) device_local_1_svc; - break; - - case device_lock: - _xdr_argument = (xdrproc_t) xdr_Device_LockParms; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) device_lock_1_svc; - break; - - case device_unlock: - _xdr_argument = (xdrproc_t) xdr_Device_Link; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) device_unlock_1_svc; - break; - - case device_enable_srq: - _xdr_argument = (xdrproc_t) xdr_Device_EnableSrqParms; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) device_enable_srq_1_svc; - break; - - case device_docmd: - _xdr_argument = (xdrproc_t) xdr_Device_DocmdParms; - _xdr_result = (xdrproc_t) xdr_Device_DocmdResp; - local = (char *(*)(char *, struct svc_req *)) device_docmd_1_svc; - break; - - case destroy_link: - _xdr_argument = (xdrproc_t) xdr_Device_Link; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) destroy_link_1_svc; - break; - - case create_intr_chan: - _xdr_argument = (xdrproc_t) xdr_Device_RemoteFunc; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) create_intr_chan_1_svc; - break; - - case destroy_intr_chan: - _xdr_argument = (xdrproc_t) xdr_void; - _xdr_result = (xdrproc_t) xdr_Device_Error; - local = (char *(*)(char *, struct svc_req *)) destroy_intr_chan_1_svc; - break; - - default: - svcerr_noproc (transp); - return; + case NULLPROC: + (void) svc_sendreply(transp, (xdrproc_t) xdr_void, (char *) NULL); + return; + + case create_link: + _xdr_argument = (xdrproc_t) xdr_Create_LinkParms; + _xdr_result = (xdrproc_t) xdr_Create_LinkResp; + local = (char *(*)(char *, struct svc_req *)) create_link_1_svc; + break; + + case device_write: + _xdr_argument = (xdrproc_t) xdr_Device_WriteParms; + _xdr_result = (xdrproc_t) xdr_Device_WriteResp; + local = (char *(*)(char *, struct svc_req *)) device_write_1_svc; + break; + + case device_read: + _xdr_argument = (xdrproc_t) xdr_Device_ReadParms; + _xdr_result = (xdrproc_t) xdr_Device_ReadResp; + local = (char *(*)(char *, struct svc_req *)) device_read_1_svc; + break; + + case device_readstb: + _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; + _xdr_result = (xdrproc_t) xdr_Device_ReadStbResp; + local = (char *(*)(char *, struct svc_req *)) device_readstb_1_svc; + break; + + case device_trigger: + _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) device_trigger_1_svc; + break; + + case device_clear: + _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) device_clear_1_svc; + break; + + case device_remote: + _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) device_remote_1_svc; + break; + + case device_local: + _xdr_argument = (xdrproc_t) xdr_Device_GenericParms; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) device_local_1_svc; + break; + + case device_lock: + _xdr_argument = (xdrproc_t) xdr_Device_LockParms; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) device_lock_1_svc; + break; + + case device_unlock: + _xdr_argument = (xdrproc_t) xdr_Device_Link; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) device_unlock_1_svc; + break; + + case device_enable_srq: + _xdr_argument = (xdrproc_t) xdr_Device_EnableSrqParms; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) device_enable_srq_1_svc; + break; + + case device_docmd: + _xdr_argument = (xdrproc_t) xdr_Device_DocmdParms; + _xdr_result = (xdrproc_t) xdr_Device_DocmdResp; + local = (char *(*)(char *, struct svc_req *)) device_docmd_1_svc; + break; + + case destroy_link: + _xdr_argument = (xdrproc_t) xdr_Device_Link; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) destroy_link_1_svc; + break; + + case create_intr_chan: + _xdr_argument = (xdrproc_t) xdr_Device_RemoteFunc; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) create_intr_chan_1_svc; + break; + + case destroy_intr_chan: + _xdr_argument = (xdrproc_t) xdr_void; + _xdr_result = (xdrproc_t) xdr_Device_Error; + local = (char *(*)(char *, struct svc_req *)) destroy_intr_chan_1_svc; + break; + + default: + svcerr_noproc(transp); + return; } - memset ((char *)&argument, 0, sizeof (argument)); - if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { - svcerr_decode (transp); + memset((char *) &argument, 0, sizeof(argument)); + if (!svc_getargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + svcerr_decode(transp); return; } - result = (*local)((char *)&argument, rqstp); + result = (*local)((char *) &argument, rqstp); if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) { - svcerr_systemerr (transp); - } - if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { - fprintf (stderr, "%s", "unable to free arguments"); - exit (1); + svcerr_systemerr(transp); } - return; -} - -static void -device_intr_1(struct svc_req *rqstp, register SVCXPRT *transp) -{ - union { - Device_SrqParms device_intr_srq_1_arg; - } argument; - char *result; - xdrproc_t _xdr_argument, _xdr_result; - char *(*local)(char *, struct svc_req *); - - switch (rqstp->rq_proc) { - case NULLPROC: - (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); - return; - - case device_intr_srq: - _xdr_argument = (xdrproc_t) xdr_Device_SrqParms; - _xdr_result = (xdrproc_t) xdr_void; - local = (char *(*)(char *, struct svc_req *)) device_intr_srq_1_svc; - break; - - default: - svcerr_noproc (transp); - return; - } - memset ((char *)&argument, 0, sizeof (argument)); - if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { - svcerr_decode (transp); - return; - } - result = (*local)((char *)&argument, rqstp); - if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) { - svcerr_systemerr (transp); - } - if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { - fprintf (stderr, "%s", "unable to free arguments"); - exit (1); + if (!svc_freeargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + fprintf(stderr, "%s", "unable to free arguments"); + exit(1); } return; } -void vxi_main () -{ +/* + static void + device_intr_1(struct svc_req *rqstp, register SVCXPRT *transp) + { + union { + Device_SrqParms device_intr_srq_1_arg; + } argument; + char *result; + xdrproc_t _xdr_argument, _xdr_result; + char *(*local)(char *, struct svc_req *); + + switch (rqstp->rq_proc) { + case NULLPROC: + (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); + return; + + case device_intr_srq: + _xdr_argument = (xdrproc_t) xdr_Device_SrqParms; + _xdr_result = (xdrproc_t) xdr_void; + local = (char *(*)(char *, struct svc_req *)) device_intr_srq_1_svc; + break; + + default: + svcerr_noproc (transp); + return; + } + memset ((char *)&argument, 0, sizeof (argument)); + if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + svcerr_decode (transp); + return; + } + result = (*local)((char *)&argument, rqstp); + if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) { + svcerr_systemerr (transp); + } + if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + fprintf (stderr, "%s", "unable to free arguments"); + exit (1); + } + return; + }*/ + +void vxi_main() { printf("VXI service started\n"); register SVCXPRT *transp; - pmap_unset (DEVICE_ASYNC, DEVICE_ASYNC_VERSION); - pmap_unset (DEVICE_CORE, DEVICE_CORE_VERSION); - pmap_unset (DEVICE_INTR, DEVICE_INTR_VERSION); + pmap_unset(DEVICE_ASYNC, DEVICE_ASYNC_VERSION); + pmap_unset(DEVICE_CORE, DEVICE_CORE_VERSION); + //pmap_unset(DEVICE_INTR, DEVICE_INTR_VERSION); transp = svcudp_create(RPC_ANYSOCK); if (transp == NULL) { - fprintf (stderr, "%s", "cannot create udp service."); + fprintf(stderr, "%s", "cannot create udp service."); exit(1); } if (!svc_register(transp, DEVICE_ASYNC, DEVICE_ASYNC_VERSION, device_async_1, IPPROTO_UDP)) { - fprintf (stderr, "%s", "unable to register (DEVICE_ASYNC, DEVICE_ASYNC_VERSION, udp)."); + fprintf(stderr, "%s", "unable to register (DEVICE_ASYNC, DEVICE_ASYNC_VERSION, udp)."); exit(1); } if (!svc_register(transp, DEVICE_CORE, DEVICE_CORE_VERSION, device_core_1, IPPROTO_UDP)) { - fprintf (stderr, "%s", "unable to register (DEVICE_CORE, DEVICE_CORE_VERSION, udp)."); - exit(1); - } - if (!svc_register(transp, DEVICE_INTR, DEVICE_INTR_VERSION, device_intr_1, IPPROTO_UDP)) { - fprintf (stderr, "%s", "unable to register (DEVICE_INTR, DEVICE_INTR_VERSION, udp)."); + fprintf(stderr, "%s", "unable to register (DEVICE_CORE, DEVICE_CORE_VERSION, udp)."); exit(1); } + //if (!svc_register(transp, DEVICE_INTR, DEVICE_INTR_VERSION, device_intr_1, IPPROTO_UDP)) { + // fprintf (stderr, "%s", "unable to register (DEVICE_INTR, DEVICE_INTR_VERSION, udp)."); + // exit(1); + //} transp = svctcp_create(RPC_ANYSOCK, 0, 0); if (transp == NULL) { - fprintf (stderr, "%s", "cannot create tcp service."); + fprintf(stderr, "%s", "cannot create tcp service."); exit(1); } if (!svc_register(transp, DEVICE_ASYNC, DEVICE_ASYNC_VERSION, device_async_1, IPPROTO_TCP)) { - fprintf (stderr, "%s", "unable to register (DEVICE_ASYNC, DEVICE_ASYNC_VERSION, tcp)."); + fprintf(stderr, "%s", "unable to register (DEVICE_ASYNC, DEVICE_ASYNC_VERSION, tcp)."); exit(1); } if (!svc_register(transp, DEVICE_CORE, DEVICE_CORE_VERSION, device_core_1, IPPROTO_TCP)) { - fprintf (stderr, "%s", "unable to register (DEVICE_CORE, DEVICE_CORE_VERSION, tcp)."); - exit(1); - } - if (!svc_register(transp, DEVICE_INTR, DEVICE_INTR_VERSION, device_intr_1, IPPROTO_TCP)) { - fprintf (stderr, "%s", "unable to register (DEVICE_INTR, DEVICE_INTR_VERSION, tcp)."); + fprintf(stderr, "%s", "unable to register (DEVICE_CORE, DEVICE_CORE_VERSION, tcp)."); exit(1); } + //if (!svc_register(transp, DEVICE_INTR, DEVICE_INTR_VERSION, device_intr_1, IPPROTO_TCP)) { + // fprintf (stderr, "%s", "unable to register (DEVICE_INTR, DEVICE_INTR_VERSION, tcp)."); + // exit(1); + //} - svc_run (); - fprintf (stderr, "%s", "svc_run returned"); + svc_run(); + fprintf(stderr, "%s", "svc_run returned"); } |