File: [local] / sys / kern / vnode_if.src (download)
Revision 1.1.1.1 (vendor branch), Tue Mar 4 16:15:05 2008 UTC (16 years, 3 months ago) by nbrk
Branch: OPENBSD_4_2_BASE, MAIN
CVS Tags: jornada-partial-support-wip, HEAD Changes since 1.1: +0 -0 lines
Import of OpenBSD 4.2 release kernel tree with initial code to support
Jornada 720/728, StrongARM 1110-based handheld PC.
At this point kernel roots on NFS and boots into vfs_mountroot() and traps.
What is supported:
- glass console, Jornada framebuffer (jfb) works in 16bpp direct color mode
(needs some palette tweaks for non black/white/blue colors, i think)
- saic, SA11x0 interrupt controller (needs cleanup)
- sacom, SA11x0 UART (supported only as boot console for now)
- SA11x0 GPIO controller fully supported (but can't handle multiple interrupt
handlers on one gpio pin)
- sassp, SSP port on SA11x0 that attaches spibus
- Jornada microcontroller (jmcu) to control kbd, battery, etc throught
the SPI bus (wskbd attaches on jmcu, but not tested)
- tod functions seem work
- initial code for SA-1111 (chip companion) : this is TODO
Next important steps, i think:
- gpio and intc on sa1111
- pcmcia support for sa11x0 (and sa1111 help logic)
- REAL root on nfs when we have PCMCIA support (we may use any of supported pccard NICs)
- root on wd0! (using already supported PCMCIA-ATA)
|
# $OpenBSD: vnode_if.src,v 1.32 2007/01/16 17:52:18 thib Exp $
# $NetBSD: vnode_if.src,v 1.10 1996/05/11 18:26:27 mycroft Exp $
#
# Copyright (c) 1992, 1993
# The Regents of the University of California. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# @(#)vnode_if.src 8.3 (Berkeley) 2/3/94
#
#
# Above each of the vop descriptors is a specification of the locking
# protocol used by each vop call. The first column is the name of
# the variable, the remaining three columns are in, out and error
# respectively. The "in" column defines the lock state on input,
# the "out" column defines the state on successful return, and the
# "error" column defines the locking state on error exit.
#
# The locking value can take the following values:
# L: locked.
# U: unlocked/
# -: not applicable. vnode does not yet (or no longer) exists.
# =: the same on input and output, may be either L or U.
# X: locked if not nil.
#
#
#% islocked vp = = =
#
vop_islocked {
IN struct vnode *vp;
};
#
#% lookup dvp L ? ?
#% lookup vpp - L -
#
#
# Note that EJUSTRETURN is not considered an error condition for locking
# purposes.
#
# if both ISLASTCN and LOCKPARENT are set in cnp->cn_flags then
#
# dvp L L L*
#
# otherwise,
#
# dvp L U L*
#
# * The lock state on return is indeterminate since the lookup implementations
# unlock and relock the vnode (an operation which is not guaranteed to
# succeed). However, these types of failures should be rare. Unfortunately,
# they are currently undetectable.
#
vop_lookup {
IN struct vnode *dvp;
INOUT struct vnode **vpp;
IN struct componentname *cnp;
};
#
#% create dvp L U U
#% create vpp - L -
#
vop_create {
IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
OUT struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
};
#
#% mknod dvp L U U
#% mknod vpp - X -
#
vop_mknod {
IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
OUT WILLRELE struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
};
#
#% open vp = = =
#
vop_open {
IN struct vnode *vp;
IN int mode;
IN struct ucred *cred;
IN struct proc *p;
};
#
#% close vp L L L
#
vop_close {
IN SHOULDBELOCKED struct vnode *vp;
IN int fflag;
IN struct ucred *cred;
IN struct proc *p;
};
#
#% access vp L L L
#
vop_access {
IN SHOULDBELOCKED struct vnode *vp;
IN int mode;
IN struct ucred *cred;
IN struct proc *p;
};
#
#% getattr vp = = =
#
vop_getattr {
IN struct vnode *vp;
IN struct vattr *vap;
IN struct ucred *cred;
IN struct proc *p;
};
#
#% setattr vp L L L
#
vop_setattr {
IN SHOULDBELOCKED struct vnode *vp;
IN struct vattr *vap;
IN struct ucred *cred;
IN struct proc *p;
};
#
#% read vp L L L
#
vop_read {
IN SHOULDBELOCKED struct vnode *vp;
INOUT struct uio *uio;
IN int ioflag;
IN struct ucred *cred;
};
#
#% write vp L L L
#
vop_write {
IN SHOULDBELOCKED struct vnode *vp;
INOUT struct uio *uio;
IN int ioflag;
IN struct ucred *cred;
};
#
#% ioctl vp U U U
#
vop_ioctl {
IN struct vnode *vp;
IN u_long command;
IN void *data;
IN int fflag;
IN struct ucred *cred;
IN struct proc *p;
};
#
#% poll vp U U U
#
vop_poll {
IN struct vnode *vp;
IN int events;
IN struct proc *p;
};
#
#% kqfilter vp U U U
#
vop_kqfilter {
IN struct vnode *vp;
IN struct knote *kn;
};
#
#% revoke vp U U U
#
vop_revoke {
IN struct vnode *vp;
IN int flags;
};
#
#% fsync vp L L L
#
vop_fsync {
IN SHOULDBELOCKED struct vnode *vp;
IN struct ucred *cred;
IN int waitfor;
IN struct proc *p;
};
#
#% remove dvp L U U
#% remove vp L U U
#
vop_remove {
IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
IN SHOULDBELOCKED WILLPUT struct vnode *vp;
IN struct componentname *cnp;
};
#
#% link dvp L U U
#% link vp U U U
#
vop_link {
IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
IN struct vnode *vp;
IN struct componentname *cnp;
};
#
#% rename fdvp U U U
#% rename fvp U U U
#% rename tdvp L U U
#% rename tvp X U U
#
vop_rename {
IN WILLRELE struct vnode *fdvp;
IN WILLRELE struct vnode *fvp;
IN struct componentname *fcnp;
IN SHOULDBELOCKED WILLPUT struct vnode *tdvp;
IN WILLRELE struct vnode *tvp;
IN struct componentname *tcnp;
};
#
#% mkdir dvp L U U
#% mkdir vpp - L -
#
vop_mkdir {
IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
OUT struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
};
#
#% rmdir dvp L U U
#% rmdir vp L U U
#
vop_rmdir {
IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
IN SHOULDBELOCKED WILLPUT struct vnode *vp;
IN struct componentname *cnp;
};
#
#% symlink dvp L U U
#% symlink vpp - U -
#
# XXX - note that the return vnode has already been VRELE'ed
# by the filesystem layer. To use it you must use vget,
# possibly with a further namei.
#
vop_symlink {
IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
OUT WILLRELE struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
IN char *target;
};
#
#% readdir vp L L L
#
vop_readdir {
IN SHOULDBELOCKED struct vnode *vp;
INOUT struct uio *uio;
IN struct ucred *cred;
INOUT int *eofflag;
OUT int *ncookies;
INOUT u_long **cookies;
};
#
#% readlink vp L L L
#
vop_readlink {
IN SHOULDBELOCKED struct vnode *vp;
INOUT struct uio *uio;
IN struct ucred *cred;
};
#
#% abortop dvp = = =
#
vop_abortop {
IN struct vnode *dvp;
IN struct componentname *cnp;
};
#
#% inactive vp L U U
#
vop_inactive {
IN SHOULDBELOCKED WILLUNLOCK struct vnode *vp;
IN struct proc *p;
};
#
#% reclaim vp U U U
#
vop_reclaim {
IN struct vnode *vp;
IN struct proc *p;
};
#
#% lock vp U L U
#
vop_lock {
IN struct vnode *vp;
IN int flags;
IN struct proc *p;
};
#
#% unlock vp L U L
#
vop_unlock {
IN struct vnode *vp;
IN int flags;
IN struct proc *p;
};
#
#% bmap vp L L L
#% bmap vpp - U -
#
vop_bmap {
IN SHOULDBELOCKED struct vnode *vp;
IN daddr64_t bn;
OUT struct vnode **vpp;
IN daddr64_t *bnp;
OUT int *runp;
};
#
# Needs work: no vp?
#
#vop_strategy {
# IN struct buf *bp;
#};
#
#% print vp = = =
#
vop_print {
IN struct vnode *vp;
};
#
#% pathconf vp L L L
#
vop_pathconf {
IN SHOULDBELOCKED struct vnode *vp;
IN int name;
OUT register_t *retval;
};
#
#% advlock vp U U U
#
vop_advlock {
IN struct vnode *vp;
IN void *id;
IN int op;
IN struct flock *fl;
IN int flags;
};
#
#% reallocblks vp L L L
#
vop_reallocblks {
IN SHOULDBELOCKED struct vnode *vp;
IN struct cluster_save *buflist;
};
# Needs work: no vp?
#vop_bwrite {
# IN struct buf *bp;
#};