⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 invent.c

📁 上传linux-jx2410的源代码
💻 C
字号:
/* $Id: invent.c,v 1.1.1.1 2004/02/04 12:55:32 laputa Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License.  See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc. * Copyright (C) 2000 by Colin Ngam *//* * Hardware Inventory * * See sys/sn/invent.h for an explanation of the hardware inventory contents. * */#include <linux/types.h>#include <asm/sn/sgi.h>#include <asm/sn/invent.h>#include <asm/sn/hcl.h>#include <asm/sn/labelcl.h>voidinventinit(void){}/* * For initializing/updating an inventory entry. */voidreplace_in_inventory(	inventory_t *pinv, int class, int type,	int controller, int unit, int state){	pinv->inv_class = class;	pinv->inv_type = type;	pinv->inv_controller = controller;	pinv->inv_unit = unit;	pinv->inv_state = state;}/* * Inventory addition  * * XXX NOTE: Currently must be called after dynamic memory allocator is * initialized. * */voidadd_to_inventory(int class, int type, int controller, int unit, int state){	(void)device_inventory_add((devfs_handle_t)GRAPH_VERTEX_NONE, class, type, 					controller, unit, state);}/* * Inventory retrieval  * * These two routines are intended to prevent the caller from having to know * the internal structure of the inventory table. * * The caller of get_next_inventory is supposed to call start_scan_invent * before the irst call to get_next_inventory, and the caller is required * to call end_scan_invent after the last call to get_next_inventory. */inventory_t *get_next_inventory(invplace_t *place){	inventory_t *pinv;	devfs_handle_t device = place->invplace_vhdl;	int rv;	while ((pinv = device_inventory_get_next(device, place)) == NULL) {		/*		 * We've exhausted inventory items on the last device.		 * Advance to next device.		 */		place->invplace_inv = NULL; /* Start from beginning invent on this device */		rv = hwgraph_vertex_get_next(&device, &place->invplace_vplace);		if (rv == LABELCL_SUCCESS) {			place->invplace_vhdl = device;		}		else {			place->invplace_vhdl = GRAPH_VERTEX_NONE;			return(NULL);		}	}	return(pinv);}/* ARGSUSED */intget_sizeof_inventory(int abi){	return sizeof(inventory_t);}/* Must be called prior to first call to get_next_inventory */voidstart_scan_inventory(invplace_t *iplace){	*iplace = INVPLACE_NONE;}/* Must be called after last call to get_next_inventory */voidend_scan_inventory(invplace_t *iplace){	devfs_handle_t vhdl = iplace->invplace_vhdl;	if (vhdl != GRAPH_VERTEX_NONE)		hwgraph_vertex_unref(vhdl);	*iplace = INVPLACE_NONE; /* paranoia */}/* * Hardware inventory scanner. * * Calls fun() for every entry in inventory list unless fun() returns something * other than 0. */intscaninvent(int (*fun)(inventory_t *, void *), void *arg){	inventory_t *ie;	invplace_t iplace = { NULL,NULL, NULL };	int rc;	ie = 0;	rc = 0;	start_scan_inventory(&iplace);	while ((ie = (inventory_t *)get_next_inventory(&iplace))) {		rc = (*fun)(ie, arg);		if (rc)			break;	}	end_scan_inventory(&iplace);	return rc;}/* * Find a particular inventory object * * pinv can be a pointer to an inventory entry and the search will begin from * there, or it can be 0 in which case the search starts at the beginning. * A -1 for any of the other arguments is a wildcard (i.e. it always matches). */inventory_t *find_inventory(inventory_t *pinv, int class, int type, int controller,	       int unit, int state){	invplace_t iplace =  { NULL,NULL, NULL };	start_scan_inventory(&iplace);	while ((pinv = (inventory_t *)get_next_inventory(&iplace)) != NULL) {		if (class != -1 && pinv->inv_class != class)			continue;		if (type != -1 && pinv->inv_type != type)			continue;		/* XXXX - perhaps the "state" entry should be ignored so an		 * an existing entry can be updated.  See vino_init() and		 * ml/IP22.c:add_ioboard() for an example.		 */		if (state != -1 && pinv->inv_state != state)			continue;		if (controller != -1		    && pinv->inv_controller != controller)			continue;		if (unit != -1 && pinv->inv_unit != unit)			continue;		break;	}	end_scan_inventory(&iplace);	return(pinv);}/*** Retrieve inventory data associated with a device.*/inventory_t *device_inventory_get_next(	devfs_handle_t device,				invplace_t *invplace){	inventory_t *pinv;	int rv;	rv = hwgraph_inventory_get_next(device, invplace, &pinv);	if (rv == LABELCL_SUCCESS)		return(pinv);	else		return(NULL);}/*** Associate canonical inventory information with a device (and** add it to the general inventory).*/voiddevice_inventory_add(	devfs_handle_t device,			int class, 			int type, 			major_t controller, 			minor_t unit, 			int state){	hwgraph_inventory_add(device, class, type, controller, unit, state);}intdevice_controller_num_get(devfs_handle_t device){	return (hwgraph_controller_num_get(device));}voiddevice_controller_num_set(devfs_handle_t device, int contr_num){	hwgraph_controller_num_set(device, contr_num);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -