Expose the new kernel data structures to libdevinfo:
o Added dd_pnpinfo, dd_location, dd_devflags, dd_flags and dd_state o Copy/initialize these as necessary. o Document the changes to the interface in devinfo.3.
This commit is contained in:
parent
dfade0043c
commit
43832002d3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=103662
@ -101,6 +101,11 @@ struct devinfo_dev {
|
|||||||
char *dd_name; /* name of device */
|
char *dd_name; /* name of device */
|
||||||
char *dd_desc; /* device description */
|
char *dd_desc; /* device description */
|
||||||
char *dd_drivername; /* name of attached driver */
|
char *dd_drivername; /* name of attached driver */
|
||||||
|
char *dd_pnpinfo; /* pnp info from parent bus */
|
||||||
|
char *dd_location; /* Where bus thinks dev at */
|
||||||
|
uint32_t dd_devflags; /* API flags */
|
||||||
|
uint16_t dd_flags; /* internal dev flags */
|
||||||
|
device_state_t dd_state; /* attacement state of dev */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct devinfo_rman {
|
struct devinfo_rman {
|
||||||
|
@ -218,13 +218,22 @@ devinfo_init_devices(int generation)
|
|||||||
return(ENOMEM);
|
return(ENOMEM);
|
||||||
dd->dd_dev.dd_handle = udev.dv_handle;
|
dd->dd_dev.dd_handle = udev.dv_handle;
|
||||||
dd->dd_dev.dd_parent = udev.dv_parent;
|
dd->dd_dev.dd_parent = udev.dv_parent;
|
||||||
snprintf(dd->dd_name, DEVINFO_STRLEN, "%s", udev.dv_name);
|
snprintf(dd->dd_name, sizeof(dd->dd_name), "%s", udev.dv_name);
|
||||||
dd->dd_dev.dd_name = &dd->dd_name[0];
|
dd->dd_dev.dd_name = &dd->dd_name[0];
|
||||||
snprintf(dd->dd_desc, DEVINFO_STRLEN, "%s", udev.dv_desc);
|
snprintf(dd->dd_desc, sizeof(dd->dd_desc), "%s", udev.dv_desc);
|
||||||
dd->dd_dev.dd_desc = &dd->dd_desc[0];
|
dd->dd_dev.dd_desc = &dd->dd_desc[0];
|
||||||
snprintf(dd->dd_drivername, DEVINFO_STRLEN, "%s",
|
snprintf(dd->dd_drivername, sizeof(dd->dd_drivername), "%s",
|
||||||
udev.dv_drivername);
|
udev.dv_drivername);
|
||||||
dd->dd_dev.dd_drivername = &dd->dd_drivername[0];
|
dd->dd_dev.dd_drivername = &dd->dd_drivername[0];
|
||||||
|
snprintf(dd->dd_pnpinfo, sizeof(dd->dd_pnpinfo), "%s",
|
||||||
|
udev.dv_pnpinfo);
|
||||||
|
dd->dd_dev.dd_pnpinfo = &dd->dd_pnpinfo[0];
|
||||||
|
snprintf(dd->dd_location, sizeof(dd->dd_location), "%s",
|
||||||
|
udev.dv_location);
|
||||||
|
dd->dd_dev.dd_location = &dd->dd_location[0];
|
||||||
|
dd->dd_dev.dd_devflags = udev.dv_devflags;
|
||||||
|
dd->dd_dev.dd_flags = udev.dv_flags;
|
||||||
|
dd->dd_dev.dd_state = udev.dv_state;
|
||||||
TAILQ_INSERT_TAIL(&devinfo_dev, dd, dd_link);
|
TAILQ_INSERT_TAIL(&devinfo_dev, dd, dd_link);
|
||||||
}
|
}
|
||||||
debug("fetched %d devices", dev_idx);
|
debug("fetched %d devices", dev_idx);
|
||||||
|
@ -33,6 +33,17 @@
|
|||||||
typedef __uintptr_t devinfo_handle_t;
|
typedef __uintptr_t devinfo_handle_t;
|
||||||
#define DEVINFO_ROOT_DEVICE ((devinfo_handle_t)0)
|
#define DEVINFO_ROOT_DEVICE ((devinfo_handle_t)0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* State of the device.
|
||||||
|
*/
|
||||||
|
/* XXX not sure if I want a copy here, or expose sys/bus.h */
|
||||||
|
typedef enum devinfo_state {
|
||||||
|
DIS_NOTPRESENT, /* not probed or probe failed */
|
||||||
|
DIS_ALIVE, /* probe succeeded */
|
||||||
|
DIS_ATTACHED, /* attach method called */
|
||||||
|
DIS_BUSY /* device is open */
|
||||||
|
} devinfo_state_t;
|
||||||
|
|
||||||
struct devinfo_dev {
|
struct devinfo_dev {
|
||||||
devinfo_handle_t dd_handle; /* device handle */
|
devinfo_handle_t dd_handle; /* device handle */
|
||||||
devinfo_handle_t dd_parent; /* parent handle */
|
devinfo_handle_t dd_parent; /* parent handle */
|
||||||
@ -40,6 +51,11 @@ struct devinfo_dev {
|
|||||||
char *dd_name; /* name of device */
|
char *dd_name; /* name of device */
|
||||||
char *dd_desc; /* device description */
|
char *dd_desc; /* device description */
|
||||||
char *dd_drivername; /* name of attached driver*/
|
char *dd_drivername; /* name of attached driver*/
|
||||||
|
char *dd_pnpinfo; /* pnp info from parent bus */
|
||||||
|
char *dd_location; /* Where bus thinks dev at */
|
||||||
|
uint32_t dd_devflags; /* API flags */
|
||||||
|
uint16_t dd_flags; /* internal dev flags */
|
||||||
|
devinfo_state_t dd_state; /* attacement state of dev */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct devinfo_rman {
|
struct devinfo_rman {
|
||||||
|
@ -42,9 +42,14 @@
|
|||||||
*/
|
*/
|
||||||
struct devinfo_i_dev {
|
struct devinfo_i_dev {
|
||||||
struct devinfo_dev dd_dev;
|
struct devinfo_dev dd_dev;
|
||||||
char dd_name[32];
|
char dd_name[DEVINFO_STRLEN];
|
||||||
char dd_desc[32];
|
char dd_desc[DEVINFO_STRLEN];
|
||||||
char dd_drivername[32];
|
char dd_drivername[DEVINFO_STRLEN];
|
||||||
|
char dd_pnpinfo[DEVINFO_STRLEN * 2];
|
||||||
|
char dd_location[DEVINFO_STRLEN * 2];
|
||||||
|
uint32_t dd_devflags;
|
||||||
|
uint16_t dd_flags;
|
||||||
|
device_state_t dd_state;
|
||||||
TAILQ_ENTRY(devinfo_i_dev) dd_link;
|
TAILQ_ENTRY(devinfo_i_dev) dd_link;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user