00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include<linux/linkage.h>
00012 #include<linux/sched.h>
00013
00014 #include<starlet.h>
00015 #include<jpidef.h>
00016 #include <ssdef.h>
00017 #include <misc.h>
00018 #include <phddef.h>
00019 #include<pridef.h>
00020 #include <exe_routines.h>
00021 #include <sch_routines.h>
00022
00023
00024
00025
00026
00027
00028
00029
00030 asmlinkage int exe_getjpi(unsigned int efn, unsigned int *pidadr, void * prcnam, void *itmlst, struct _iosb *iosb, void (*astadr)(), unsigned long long astprm) {
00031 struct _pcb * p;
00032 int sts;
00033 struct item_list_3 * it=itmlst;
00034
00035
00036
00037 exe_clref(efn);
00038
00039 sts=exe_pscan_next_id(&p);
00040 if (sts==0)
00041 return SS__NOMOREPROC;
00042
00043
00044
00045
00046
00047
00048 while (it->item_code) {
00049 switch (it->item_code) {
00050 case JPI__PRCNAM:
00051 memcpy(it->bufaddr,&p->pcb_t_lname,15);
00052 break;
00053
00054 case JPI__PID:
00055 memcpy(it->bufaddr,&p->pcb_l_epid,4);
00056 break;
00057
00058 case JPI__MASTER_PID:
00059 memcpy(it->bufaddr,&p->pcb_l_pid,4);
00060 break;
00061
00062 case JPI__STATE:
00063 *(unsigned long *)it->bufaddr=p->pcb_w_state;
00064 break;
00065
00066 case JPI__PRI:
00067 *(unsigned long *)it->bufaddr=p->pcb_b_pri;
00068 break;
00069
00070 case JPI__PAGEFLTS:
00071 *(unsigned long *)it->bufaddr=p->pcb_l_phd->phd$l_pageflts;
00072 break;
00073
00074 case JPI__PPGCNT:
00075 *(unsigned long *)it->bufaddr=p->pcb_l_ppgcnt;
00076 break;
00077
00078 case JPI__GPGCNT:
00079 *(unsigned long *)it->bufaddr=p->pcb_l_gpgcnt;
00080 break;
00081
00082 case JPI__WSAUTH:
00083 *(unsigned long *)it->bufaddr=p->pcb_l_phd->phd$l_wsauth;
00084 break;
00085
00086 case JPI__WSQUOTA:
00087 *(unsigned long *)it->bufaddr=p->pcb_l_phd->phd$l_wsquota;
00088 break;
00089
00090 case JPI__WSSIZE:
00091 *(unsigned long *)it->bufaddr=p->pcb_l_phd->phd$l_wssize;
00092 break;
00093
00094 case JPI__WSAUTHEXT:
00095 *(unsigned long *)it->bufaddr=p->pcb_l_phd->phd$l_wsauthext;
00096 break;
00097
00098 case JPI__WSEXTENT:
00099 *(unsigned long *)it->bufaddr=p->pcb_l_phd->phd$l_wsextent;
00100 break;
00101
00102 case JPI__BIOCNT:
00103 *(unsigned short *)it->bufaddr=p->pcb_w_biocnt;
00104 break;
00105
00106 case JPI__BIOLM:
00107 *(unsigned short *)it->bufaddr=p->pcb_w_biolm;
00108 break;
00109
00110 case JPI__DIOCNT:
00111 *(unsigned short *)it->bufaddr=p->pcb_w_diocnt;
00112 break;
00113
00114 case JPI__DIOLM:
00115 *(unsigned short *)it->bufaddr=p->pcb_w_diolm;
00116 break;
00117
00118 case JPI__CPUTIM:
00119 *(long long *)it->bufaddr=p->pcb_l_phd->phd$l_cputim;
00120 break;
00121
00122 case JPI__DIRIO:
00123 *(unsigned int *)it->bufaddr=p->pcb_l_phd->phd$l_diocnt;
00124 break;
00125
00126 case JPI__BUFIO:
00127 *(unsigned int *)it->bufaddr=p->pcb_l_phd->phd$l_biocnt;
00128 break;
00129
00130 }
00131 it++;
00132 }
00133
00134
00135 struct _pcb * pcb = ctl_gl_pcb;
00136 sch_postef(pcb->pcb$l_pid, PRI$_NULL, efn);
00137
00138
00139
00140
00141 if (iosb)
00142 iosb->iosb_w_status=SS$_NORMAL;
00143
00144 return SS__NORMAL;
00145
00146
00147
00148
00149 }
00150
00151 asmlinkage int exe_getjpiw(unsigned int efn, unsigned int *pidadr, void * prcnam, void *itmlst, struct _iosb *iosb, void (*astadr)(), unsigned long long astprm) {
00152
00153
00154
00155 int status=exe_getjpi(efn,pidadr,prcnam,itmlst,iosb,astadr,astprm);
00156 if ((status&1)==0) return status;
00157 return exe_synch(efn,iosb);
00158
00159 }
00160
00161 asmlinkage int exe_getjpi_wrap(struct struct_getjpi *s) {
00162 return exe_getjpi(s->efn,s->pidadr,s->prcnam,s->itmlst,s->iosb,s->astadr,s->astprm);
00163 }
00164
00165 asmlinkage int exe_getjpiw_wrap(struct struct_getjpi *s) {
00166 return exe_getjpiw(s->efn,s->pidadr,s->prcnam,s->itmlst,s->iosb,s->astadr,s->astprm);
00167 }
00168
00169