From 471d7380bd54c83cf6d090a144c288197b02db40 Mon Sep 17 00:00:00 2001 From: Zheng Da Date: Mon, 1 Feb 2010 15:13:08 +0100 Subject: check in libmachdev. --- libmachdev/dev_hdr.h | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 libmachdev/dev_hdr.h (limited to 'libmachdev/dev_hdr.h') diff --git a/libmachdev/dev_hdr.h b/libmachdev/dev_hdr.h new file mode 100644 index 00000000..db44f712 --- /dev/null +++ b/libmachdev/dev_hdr.h @@ -0,0 +1,148 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * Author: David B. Golub, Carnegie Mellon University + * Date: 3/89 + */ + +/* + * Mach device emulation definitions (i386at version). + * + * Copyright (c) 1996 The University of Utah and + * the Computer Systems Laboratory at the University of Utah (CSL). + * All rights reserved. + * + * Permission to use, copy, modify and distribute this software is hereby + * granted provided that (1) source code retains these copyright, permission, + * and disclaimer notices, and (2) redistributions including binaries + * reproduce the notices in supporting documentation, and (3) all advertising + * materials mentioning features or use of this software display the following + * acknowledgement: ``This product includes software developed by the + * Computer Systems Laboratory at the University of Utah.'' + * + * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS + * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF + * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * CSL requests users of this software to return to csl-dist@cs.utah.edu any + * improvements that they make and grant CSL redistribution rights. + * + * Author: Shantanu Goel, University of Utah CSL + */ + +#ifndef _DEVICE_DEV_HDR_H_ +#define _DEVICE_DEV_HDR_H_ + +#include +#include +#include +#include + +#include "device_emul.h" + +/* + * Operations list for major device types. + */ +struct dev_ops { + char * d_name; /* name for major device */ + int (*d_open)(); /* open device */ + int (*d_close)(); /* close device */ + int (*d_read)(); /* read */ + int (*d_write)(); /* write */ + int (*d_getstat)(); /* get status/control */ + int (*d_setstat)(); /* set status/control */ + vm_offset_t (*d_mmap)(); /* map memory */ + int (*d_async_in)();/* asynchronous input setup */ + int (*d_reset)(); /* reset device */ + int (*d_port_death)(); + /* clean up reply ports */ + int d_subdev; /* number of sub-devices per + unit */ + int (*d_dev_info)(); /* driver info for kernel */ +}; +typedef struct dev_ops *dev_ops_t; + +/* This structure is associated with each open device port. + * The port representing the device points to this structure. */ +struct emul_device +{ + struct device_emulation_ops *emul_ops; + void *emul_data; +}; + +typedef struct emul_device *emul_device_t; + +#define DEVICE_NULL ((device_t) 0) + +/* + * Generic device header. May be allocated with the device, + * or built when the device is opened. + */ +struct mach_device { + struct port_info port; + struct emul_device dev; /* the real device structure */ + struct mutex lock; + short state; /* state: */ +#define DEV_STATE_INIT 0 /* not open */ +#define DEV_STATE_OPENING 1 /* being opened */ +#define DEV_STATE_OPEN 2 /* open */ +#define DEV_STATE_CLOSING 3 /* being closed */ + short flag; /* random flags: */ +#define D_EXCL_OPEN 0x0001 /* open only once */ + short open_count; /* number of times open */ + short io_in_progress; /* number of IOs in progress */ + boolean_t io_wait; /* someone waiting for IO to finish */ + + int dev_number; /* device number */ + int bsize; /* replacement for DEV_BSIZE */ + struct dev_ops *dev_ops; /* and operations vector */ +}; +typedef struct mach_device *mach_device_t; +#define MACH_DEVICE_NULL ((mach_device_t)0) + +/* + * To find and remove device entries + */ +mach_device_t device_lookup(char *); /* by name */ + +/* + * To find and remove port-to-device mappings + */ +void dev_port_enter(mach_device_t); +void dev_port_remove(mach_device_t); + +/* + * To call a routine on each device + */ +boolean_t dev_map(boolean_t (*)(), mach_port_t); + +/* + * To lock and unlock state and open-count + */ +#define device_lock(device) mutex_lock(&(device)->lock) +#define device_unlock(device) mutex_unlock(&(device)->lock) + +#endif /* _DEVICE_DEV_HDR_H_ */ -- cgit v1.2.3 From f55b47ebf4e9bd0dd1e5e46011404456b7cd2825 Mon Sep 17 00:00:00 2001 From: Zheng Da Date: Fri, 4 Jun 2010 07:36:07 +0200 Subject: remove redundant fields in mach_device. --- libmachdev/dev_hdr.h | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'libmachdev/dev_hdr.h') diff --git a/libmachdev/dev_hdr.h b/libmachdev/dev_hdr.h index db44f712..f6394256 100644 --- a/libmachdev/dev_hdr.h +++ b/libmachdev/dev_hdr.h @@ -104,21 +104,6 @@ typedef struct emul_device *emul_device_t; struct mach_device { struct port_info port; struct emul_device dev; /* the real device structure */ - struct mutex lock; - short state; /* state: */ -#define DEV_STATE_INIT 0 /* not open */ -#define DEV_STATE_OPENING 1 /* being opened */ -#define DEV_STATE_OPEN 2 /* open */ -#define DEV_STATE_CLOSING 3 /* being closed */ - short flag; /* random flags: */ -#define D_EXCL_OPEN 0x0001 /* open only once */ - short open_count; /* number of times open */ - short io_in_progress; /* number of IOs in progress */ - boolean_t io_wait; /* someone waiting for IO to finish */ - - int dev_number; /* device number */ - int bsize; /* replacement for DEV_BSIZE */ - struct dev_ops *dev_ops; /* and operations vector */ }; typedef struct mach_device *mach_device_t; #define MACH_DEVICE_NULL ((mach_device_t)0) -- cgit v1.2.3