Begin the process of moving info to sysctl stuff for FreeBSD

by providing OIDs for WWNN/WWPN and Initiator ID.
This commit is contained in:
mjacob 2006-09-26 04:59:52 +00:00
parent 688c3982c5
commit 232d5f7e05
2 changed files with 47 additions and 1 deletions

View File

@ -38,6 +38,9 @@ __FBSDID("$FreeBSD$");
#include <sys/module.h> #include <sys/module.h>
#include <sys/ioccom.h> #include <sys/ioccom.h>
#include <dev/isp/isp_ioctl.h> #include <dev/isp/isp_ioctl.h>
#if __FreeBSD_version >= 500000
#include <sys/sysctl.h>
#endif
MODULE_VERSION(isp, 1); MODULE_VERSION(isp, 1);
@ -73,6 +76,7 @@ static struct cdevsw isp_cdevsw = {
/* psize */ nopsize, /* psize */ nopsize,
/* flags */ D_TAPE, /* flags */ D_TAPE,
}; };
#define isp_sysctl_update(x) do { ; } while (0)
#else #else
static struct cdevsw isp_cdevsw = { static struct cdevsw isp_cdevsw = {
.d_version = D_VERSION, .d_version = D_VERSION,
@ -80,6 +84,7 @@ static struct cdevsw isp_cdevsw = {
.d_ioctl = ispioctl, .d_ioctl = ispioctl,
.d_name = "isp", .d_name = "isp",
}; };
static void isp_sysctl_update(ispsoftc_t *);
#endif #endif
static ispsoftc_t *isplist = NULL; static ispsoftc_t *isplist = NULL;
@ -248,7 +253,7 @@ isp_attach(ispsoftc_t *isp)
} }
tmp->isp_osinfo.next = isp; tmp->isp_osinfo.next = isp;
} }
isp_sysctl_update(isp);
} }
static __inline void static __inline void
@ -615,6 +620,38 @@ ispioctl(_DEV dev, u_long c, caddr_t addr, int flags, _IOP *td)
return (retval); return (retval);
} }
#if __FreeBSD_version >= 500000
static void
isp_sysctl_update(ispsoftc_t *isp)
{
struct sysctl_ctx_list *ctx =
device_get_sysctl_ctx(isp->isp_osinfo.dev);
struct sysctl_oid *tree = device_get_sysctl_tree(isp->isp_osinfo.dev);
if (IS_SCSI(isp)) {
isp->isp_osinfo.sysctl_info.spi.iid = DEFAULT_IID(isp);
SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "iid",
CTLFLAG_RD, &isp->isp_osinfo.sysctl_info.spi.iid, 0,
"Initiator ID");
return;
}
snprintf(isp->isp_osinfo.sysctl_info.fc.wwnn,
sizeof (isp->isp_osinfo.sysctl_info.fc.wwnn), "0x%08x%08x",
(uint32_t) (ISP_NODEWWN(isp) >> 32), (uint32_t) ISP_NODEWWN(isp));
snprintf(isp->isp_osinfo.sysctl_info.fc.wwpn,
sizeof (isp->isp_osinfo.sysctl_info.fc.wwpn), "0x%08x%08x",
(uint32_t) (ISP_PORTWWN(isp) >> 32), (uint32_t) ISP_PORTWWN(isp));
SYSCTL_ADD_STRING(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
"wwnn", CTLFLAG_RD, isp->isp_osinfo.sysctl_info.fc.wwnn, 0,
"World Wide Node Name");
SYSCTL_ADD_STRING(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
"wwpn", CTLFLAG_RD, isp->isp_osinfo.sysctl_info.fc.wwpn, 0,
"World Wide Port Name");
}
#endif
static void static void
isp_intr_enable(void *arg) isp_intr_enable(void *arg)
{ {

View File

@ -160,6 +160,15 @@ struct isposinfo {
struct firmware * fw; struct firmware * fw;
struct mtx lock; struct mtx lock;
struct cv kthread_cv; struct cv kthread_cv;
union {
struct {
char wwnn[17];
char wwpn[17];
} fc;
struct {
int iid;
} spi;
} sysctl_info;
#endif #endif
struct proc *kproc; struct proc *kproc;
bus_dma_tag_t cdmat; bus_dma_tag_t cdmat;