#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} |
Definition in file iosubnpag.c.
#define MYDEB_REQCOM |
Definition at line 32 of file iosubnpag.c.
int exe_match_name | ( | struct _ddb * | d, | |
char * | s | |||
) |
Definition at line 232 of file iosubnpag.c.
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.
initiate i/o for unit's irp - see 5.2 22.2.1
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
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 | ) |
void ioc_std_reqcom | ( | int | iosb1, | |
int | iosb2, | |||
struct _ucb * | u | |||
) |
int ioc_unit_init | ( | struct _ucb * | ucb | ) |
Definition at line 249 of file iosubnpag.c.
References _ddb::ddb_ps_dpt, _ddt::ddt_l_unitinit, _dpt::dpt_ps_init_pd, _dpt::dpt_ps_reinit_pd, _ucb::ucb_l_ddb, and _ucb::ucb_l_ddt.
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
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.
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} |