V10/sys/io/dkmod.c

Compare this file to the similar file:
Show the results in this format:

/*
 * one dkmod per datakit interface
 * also any other data common to datakit
 */

#include <sys/param.h>
#include <sys/dkmod.h>
#include <sys/dkstat.h>

#define	NDKMOD	4	/* big enough for everyone */

int dkmodcnt = NDKMOD;

struct dkmodule dkmod[NDKMOD];
struct dkstat dkstat;

/*
 * find the appropriate dkmod;
 * alloc a new one if need be
 * dev is the entire device
 */

struct dkmodule *
dkmodall(dev, lo, hi)
dev_t dev;
{
	register int i;
	register struct dkmodule *dk;
	register struct dkmodule *ek;

	dev = major(dev);
	ek = NULL;
	for (dk = dkmod, i = 0; i < NDKMOD; dk++, i++) {
		if (dk->dev == 0 && ek == NULL) {
			ek = dk;
			continue;
		}
		if (dk->dev == dev && dk->lo == lo && dk->hi == hi)
			return (dk);
	}
	if (ek) {
		ek->dev = dev;
		ek->lo = lo;
		ek->hi = hi;
	}
	return (ek);
}

struct dkmodule *
getdkmod(dev)
dev_t dev;
{
	register int i;
	register struct dkmodule *dk;
	register maj, min;

	maj = major(dev);
	min = minor(dev);
	for (dk = dkmod, i = 0; i < NDKMOD; dk++, i++)
		if (dk->dev == maj && min >= dk->lo && min < dk->hi)
			return (dk);
	return (NULL);
}