sys/src/comdrvsub.c File Reference

#include <system_data_cells.h>
#include <linux/kernel.h>
#include <asm/uaccess.h>
#include <asm/hw_irq.h>
#include <vms_drivers.h>
#include <cpudef.h>
#include <ipldef.h>
#include <pridef.h>
#include <irpdef.h>
#include <acbdef.h>
#include <tastdef.h>
#include <ttyucbdef.h>
#include <com_routines.h>
#include <sch_routines.h>
#include <smp_routines.h>
#include <ipl.h>
#include <queue.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <internals.h>

Go to the source code of this file.

Functions

void com_std_delattnastp (struct _acb **acb_lh, struct _ucb *ucb, int ipid)
 delivery of attention asts - see 5.2 7.9.2
void com_post (struct _irp *i, struct _ucb *u)
void com_std_delattnast (struct _acb **acb_lh, struct _ucb *ucb)
 delivery of attention asts - see 5.2 7.9.2
void fork_routine (fr3, fr4, fr5)
void dealloc_tast (long arg)
void fork_routine2 (fr3, fr4, fr5)
void com_std_delctrlastp (struct _acb **acb_lh, struct _ucb *ucb, int ipid, int matchchar, int *inclchar_p)
 delivery of out-of-band attention asts - see 5.2 7.9.5.3
void com_std_delctrlast (struct _acb **acb_lh, struct _ucb *ucb, int matchchar, int *inclchar_p)
void com_std_drvdealmem (void *ptr)
int com_std_flushattns (struct _pcb *pcb, struct _ucb *ucb, int chan, struct _acb **acb_lh)
 flushing an attention ast list - see 5.2 7.9.3
int com_std_flushctrls (struct _pcb *pcb, struct _ucb *ucb, int chan, struct _acb **acb_lh, int *mask_p)
 flushing an attention ast list - see 5.2 7.9.5.4
void com_std_post (struct _irp *irp, struct _ucb *ucb)
void com_std_post_nocnt (struct _irp *irp)
int com_std_setattnast (struct _irp *irp, struct _pcb *pcb, struct _ucb *ucb, struct _ccb *ccb, struct _acb **acb_lh)
 set attention ast mechanism - see 5.2 7.9.1
int com_std_setctrlast (struct _irp *irp, struct _pcb *pcb, struct _ucb *ucb, struct _ccb *ccb, struct _acb **acb_lh, int mask, struct _tast **tast_p)
 set out-of-band attention ast mechanism - see 5.2 7.9.5.2


Detailed Description

Author:
Roar Thronęs

Definition in file comdrvsub.c.


Function Documentation

void com_post ( struct _irp i,
struct _ucb u 
)

void com_std_delattnast ( struct _acb **  acb_lh,
struct _ucb ucb 
)

delivery of attention asts - see 5.2 7.9.2

Parameters:
acb pointer to acb list head
ucb 

Definition at line 55 of file comdrvsub.c.

References com_std_delattnastp().

Referenced by exe_std_wrtmailbox(), mb_fdt_read(), mb_fdt_setmode(), mb_fdt_write(), and mb_finishread().

void com_std_delattnastp ( struct _acb **  acb_lh,
struct _ucb ucb,
int  ipid 
)

delivery of attention asts - see 5.2 7.9.2

Parameters:
acb pointer to acb list head
ucb 
ipid internal pid

scan acb/fkb list

compare pid if requested, that is non-zero

remove from list

fork it

Definition at line 100 of file comdrvsub.c.

References _acb::acb_l_astqfl, _acb::acb_l_kast, fork, and fork_routine().

Referenced by com_std_delattnast().

void com_std_delctrlast ( struct _acb **  acb_lh,
struct _ucb ucb,
int  matchchar,
int *  inclchar_p 
)

Definition at line 158 of file comdrvsub.c.

References com_std_delctrlastp().

void com_std_delctrlastp ( struct _acb **  acb_lh,
struct _ucb ucb,
int  ipid,
int  matchchar,
int *  inclchar_p 
)

delivery of out-of-band attention asts - see 5.2 7.9.5.3

Parameters:
acb pointer to acb list head
ucb 
ipid internal pid
matchchar 
inclchar_p 

already entered with device lock and ipl

scan tast list

check for tast mask - MISSING

if pid nonzero, compare with tast

skip if busy

mark as busy

mark matchchar in ast param

do fork process

Definition at line 127 of file comdrvsub.c.

References _acb::acb_b_rmod, _acb::acb_l_astqfl, fork, fork_routine2(), _tast::tast_l_astprm, _tast::tast_l_mask, _tast::tast_l_pid, and _tast::tast_v_busy.

Referenced by com_std_delctrlast().

void com_std_drvdealmem ( void *  ptr  ) 

Definition at line 162 of file comdrvsub.c.

References kfree().

Referenced by com_std_flushctrls(), com_std_setctrlast(), and mb_finishread().

int com_std_flushattns ( struct _pcb *  pcb,
struct _ucb ucb,
int  chan,
struct _acb **  acb_lh 
)

flushing an attention ast list - see 5.2 7.9.3

Parameters:
pcb 
ucb 
chan i/o channel
acb pointer to acb list head

set ipl and device lock - MISSING

scan acb/fkb list

if pid matches

remove from queue

increment ast quota - MISSING

set ipl and device unlock - MISSING

Definition at line 174 of file comdrvsub.c.

References _acb::acb_l_astqfl, _acb::acb_l_kast, kfree(), SS__NORMAL, and _ucb::ucb_b_dipl.

Referenced by com_std_setattnast().

int com_std_flushctrls ( struct _pcb *  pcb,
struct _ucb ucb,
int  chan,
struct _acb **  acb_lh,
int *  mask_p 
)

flushing an attention ast list - see 5.2 7.9.5.4

Parameters:
pcb 
ucb 
chan i/o channel
acb pointer to acb list head
mask 

device lock - MISSING

scan list

compare pid

remove from list

if bust mark as lost

dealloc if not busy

return ast quota - MISSING

build summary mask if no pid match

unlock device - lower down? - MISSING

replace summary mask with the one built

Definition at line 207 of file comdrvsub.c.

References _acb::acb_l_astqfl, com_std_drvdealmem(), SS__NORMAL, _tast::tast_l_flink, _tast::tast_l_mask, _tast::tast_l_pid, _tast::tast_v_busy, _tast::tast_v_lost, and _ltrm_ucb::ucb_l_tl_outband.

Referenced by com_std_setctrlast().

void com_std_post ( struct _irp irp,
struct _ucb ucb 
)

Definition at line 247 of file comdrvsub.c.

References com_post().

void com_std_post_nocnt ( struct _irp irp  ) 

int com_std_setattnast ( struct _irp irp,
struct _pcb *  pcb,
struct _ucb ucb,
struct _ccb ccb,
struct _acb **  acb_lh 
)

set attention ast mechanism - see 5.2 7.9.1

Parameters:
irp 
pcb 
ucb 
ccb 
acb pointer to acb list head

if qio p1 is zero, then it is flush

allocate expanded acb, TODO: size

copy data

device lock and set ipl - MISSING lock

insert into list

device unlock and set ipl - MISSING unlock

Definition at line 262 of file comdrvsub.c.

References _acb::acb_b_rmod, _acb::acb_l_astqfl, _acb::acb_l_kast, com_std_flushattns(), ctl_gl_ccbbase, _irp::irp_l_qio_p1, _irp::irp_l_qio_p2, kmalloc(), SS__NORMAL, and _ucb::ucb_b_dipl.

Referenced by mb_fdt_setmode().

int com_std_setctrlast ( struct _irp irp,
struct _pcb *  pcb,
struct _ucb ucb,
struct _ccb ccb,
struct _acb **  acb_lh,
int  mask,
struct _tast **  tast_p 
)

set out-of-band attention ast mechanism - see 5.2 7.9.5.2

Parameters:
irp 
pcb 
ucb 
ccb 
acb pointer to acb list head
tast_p terminal ast list

if qio p1 or p2 is zero, then it is flush

set ipl device lock - MISSING

scan list

find pid and channel

if tast in use mark it as lost and remove from list

else allocate, initialize a new terminal ast

charge ast quota - MISSING

copy irp data etc

insert tast

set ipl device unlock - MISSING

set outband

Definition at line 298 of file comdrvsub.c.

References _acb::acb_l_astqfl, com_std_drvdealmem(), com_std_flushctrls(), _irp::irp_l_qio_p1, kmalloc(), SS__NORMAL, _tast::tast_l_ast, _tast::tast_l_astprm, _tast::tast_l_flink, _tast::tast_l_mask, _tast::tast_l_pid, _tast::tast_v_busy, _tast::tast_v_lost, _tast::tast_w_chan, and _ltrm_ucb::ucb_l_tl_outband.

void dealloc_tast ( long  arg  ) 

Definition at line 71 of file comdrvsub.c.

References kfree(), _tast::tast_v_busy, and _tast::tast_v_lost.

Referenced by fork_routine2().

void fork_routine ( fr3  ,
fr4  ,
fr5   
)

void fork_routine2 ( fr3  ,
fr4  ,
fr5   
)


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