sys/src/iosubnpag.c File Reference

QIO - TODO still more doc. More...

#include <linux/kernel.h>
#include <asmlink.h>
#include <linux/smp.h>
#include <linux/sched.h>
#include <asm/hw_irq.h>
#include <asm/current.h>
#include <system_data_cells.h>
#include <ipl.h>
#include <internals.h>
#include <queue.h>
#include <ddtdef.h>
#include <ucbdef.h>
#include <irpdef.h>
#include <ipldef.h>
#include <ddbdef.h>
#include <ioc_routines.h>
#include <smp_routines.h>

Go to the source code of this file.

Defines

#define MYDEB_REQCOM

Functions

void ioc_initiate (struct _irp *i, struct _ucb *u)
 initiate i/o for unit's irp - see 5.2 22.2.1
void ioc_std_initiate (struct _irp *i, struct _ucb *u)
void ioc_reqcom (int iosb1, int iosb2, struct _ucb *u)
 i/o request complete - see 5.2 22.3.4
void ioc_std_reqcom (int iosb1, int iosb2, struct _ucb *u)
void ioc_wfikpch (void *nextfunc, void *timeoutfunc, struct _irp *i, unsigned long fr4, struct _ucb *u, int timeout, int oldipl)
 waiting for the device interrupt - see 5.2 22.3.2
int ioc_scan_iodb_usrctx (struct _ddb **d)
int ioc_cvt_devnam ()
int exe_match_name (struct _ddb *d, char *s)
void ioc_std_cancelio (signed int chan, struct _irp *irp, struct _pcb *pcb, struct _ucb *ucb)
int ioc_ctrl_init (struct _crb *crb, struct _ddb *ddb)
int ioc_unit_init (struct _ucb *ucb)

Variables

int exetimeout
long reqcom [32 *1024]
long reqcomc [32] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}


Detailed Description

QIO - TODO still more doc.

Author:
Roar Thronęs

Definition in file iosubnpag.c.


Define Documentation

#define MYDEB_REQCOM

Definition at line 32 of file iosubnpag.c.


Function Documentation

int exe_match_name ( struct _ddb d,
char *  s 
)

Definition at line 232 of file iosubnpag.c.

int ioc_ctrl_init ( struct _crb crb,
struct _ddb ddb 
)

Definition at line 242 of file iosubnpag.c.

References _ddb::ddb_l_ddt, and _ddt::ddt_ps_ctrlinit_2.

int ioc_cvt_devnam (  ) 

Definition at line 228 of file iosubnpag.c.

void ioc_initiate ( struct _irp i,
struct _ucb u 
)

initiate i/o for unit's irp - see 5.2 22.2.1

Parameters:
i irp
u unit

smp affinity check yet - MISSING

save irp address in unit

copy some irp content to unit

clear TIMOUT and CANCEL

diagnostic buf - MISSING

locate ddt_l_start

call it

Definition at line 40 of file iosubnpag.c.

References _ddt::ddt_l_start, _ucb::ucb_l_bcnt, _ucb::ucb_l_boff, _ucb::ucb_l_ddt, _ucb::ucb_l_irp, _ucb::ucb_l_sts, and _ucb::ucb_l_svapte.

Referenced by exe_insioq(), ioc_reqcom(), and ioc_std_initiate().

void ioc_reqcom ( int  iosb1,
int  iosb2,
struct _ucb u 
)

i/o request complete - see 5.2 22.3.4

Parameters:
iosb1 value status
iosb2 value status
u ucb

if error log do error stuff and erl_releasemb - MISSING

increase ucb i/o count - MISSING

store final i/o status values

if tape device ... - MISSING

if error completion and is disk or tape, check mount verification - MISSING

some more work if tape errors - MISSING

test and save current ipl, and maybe raise ipl

spinlock, interlocking

insert irp in the interlocked systemwide i/o postprocessing queue

spinunlock

if first element, do

if primary cpu, request iopost softint

send interprocessor interrupt to do it on primary cpu

restore saved ipl

if mount verification ... - MISSING

if the unit has pending i/o requests

remove one from queue

initiate i/o on it

if no pending i/o request, clear bsy flag

enter ioc_relchan - MISSING

Definition at line 83 of file iosubnpag.c.

References CPU_M_IOPOST, exe_gl_abstim_tics, ioc_gq_postiq, ioc_initiate(), IPL__IOPOST, _irp::irp_l_iost1, _irp::irp_l_iost2, _irp::irp_l_pid, _irp::irp_w_empty, reqcom, reqcomc, smp_gl_primid, smp_send_work(), SPIN_IOPOST, _ucb::ucb_l_ioqfl, _ucb::ucb_l_irp, and _ucb::ucb_l_sts.

Referenced by ioc_std_reqcom().

int ioc_scan_iodb_usrctx ( struct _ddb **  d  ) 

Definition at line 221 of file iosubnpag.c.

Referenced by exe_device_scan().

void ioc_std_cancelio ( signed int  chan,
struct _irp irp,
struct _pcb *  pcb,
struct _ucb ucb 
)

Definition at line 236 of file iosubnpag.c.

References _ucb::ucb_l_sts.

void ioc_std_initiate ( struct _irp i,
struct _ucb u 
)

Definition at line 65 of file iosubnpag.c.

References ioc_initiate().

void ioc_std_reqcom ( int  iosb1,
int  iosb2,
struct _ucb u 
)

Definition at line 190 of file iosubnpag.c.

References ioc_reqcom().

int ioc_unit_init ( struct _ucb ucb  ) 

void ioc_wfikpch ( void *  nextfunc,
void *  timeoutfunc,
struct _irp i,
unsigned long  fr4,
struct _ucb u,
int  timeout,
int  oldipl 
)

waiting for the device interrupt - see 5.2 22.3.2

Parameters:
nextfunc 
timeoutfunc 
i irp
fr4 
u 
timeout 
oldipl 

store timout + abstim in duetim

store in fr3 and fr4 TODO: check if right

store return address nextfunc in fpc, no need to adjust

clear timout

release device lock - MISSING TODO check if need be here

Definition at line 205 of file iosubnpag.c.

References _ucb::ucb_l_duetim, _ucb::ucb_l_fpc, _ucb::ucb_l_fr3, _ucb::ucb_l_fr4, and _ucb::ucb_l_sts.


Variable Documentation

Definition at line 91 of file timeschdl.c.

Referenced by exe_timeout().

long reqcom[32 *1024]

Definition at line 72 of file iosubnpag.c.

Referenced by ioc_reqcom().

long reqcomc[32] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

Definition at line 73 of file iosubnpag.c.

Referenced by ioc_reqcom().


Generated on Fri Oct 9 10:26:01 2009 for FreeVMS by  doxygen 1.5.5