On 10/25/16 23:50, YASUOKA Masahiko wrote:
> On Wed, 26 Oct 2016 10:26:19 +1100
> Jonathan Gray <[email protected]> wrote:
>> On Tue, Oct 25, 2016 at 05:29:55PM +0900, YASUOKA Masahiko wrote:
>>> I'm working on making mfii(4) bio(4) capable.
>>>
>>> If you have a machine which has mfii(4), I'd like you to test the diff
>>> following. (It might be risky for production machines for this
>>> moment.)
>>>
>>> After the diff applied, bioctl(8) against the disk (eg. sd0) starts
>>> working and also "sysctl hw.sensors.mfii0" will appear.
>>>
>>> Especially if you can configure a hotspare, testing it is very
>>> helpful for me since I can't use a hotspare on my test machine.
> (snip)
>>> + case BIOC_SATEST:
>>> + cmd = MR_DCMD_SPEAKER_TEST;
>>> + break;
>>> + default:
>>> + return (EINVAL);
>>> + }
>>> +
>>> + ccb = scsi_io_get(&sc->sc_iopool, 0);
>>> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PD_SET_STATE, NULL,
>>> + &spkr, sizeof(spkr), flags | SCSI_NOSLEEP);
>>
>> Should this be cmd rather than MR_DCMD_PD_SET_STATE?
>> The cmd values from the switch statement are not used.
>
> Oops. Yes, that's right.
>
>>> +int
>>> +mfii_ioctl_blink(struct mfii_softc *sc, struct bioc_blink *bb)
> (snip)
>>> + case BIOC_SBBLINK:
>>> + case BIOC_SBALARM:
>>> + cmd = MR_DCMD_PD_BLINK;
>>> + break;
>>> + default:
>>> + rv = EINVAL;
>>> + goto done;
>>> + }
>>> +
>>> + ccb = scsi_io_get(&sc->sc_iopool, 0);
>>> + rv = mfii_mgmt(sc, ccb, cmd, NULL, NULL, 0, SCSI_NOSLEEP);
>>> + scsi_io_put(&sc->sc_iopool, ccb);
>
> Passing the mbox to mfii_mgmt() was missing.
>
>>> + done:
>>> + free(list, M_TEMP, sizeof(*list));
>>> +
>>> + return (ENOTTY);
>>> +}
>>
>> Shouldn't this be return (rv) to return the EINVAL values?
>> With rv set to 0 before the 'done' to return 0 when there is no error?
>
> Yes, that's also right. Thanks.
>
> Let me update the diff.
>
> Index: sys/dev/pci/mfii.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/mfii.c,v
> retrieving revision 1.28
> diff -u -p -r1.28 mfii.c
> --- sys/dev/pci/mfii.c 24 Oct 2016 05:27:52 -0000 1.28
> +++ sys/dev/pci/mfii.c 26 Oct 2016 03:46:15 -0000
> @@ -22,9 +22,11 @@
> #include <sys/systm.h>
> #include <sys/malloc.h>
> #include <sys/device.h>
> +#include <sys/dkio.h>
> #include <sys/types.h>
> #include <sys/pool.h>
>
> +#include <dev/biovar.h>
> #include <dev/pci/pcidevs.h>
> #include <dev/pci/pcivar.h>
>
> @@ -212,6 +214,13 @@ struct mfii_iop {
> u_int8_t sge_flag_eol;
> };
>
> +struct mfii_cfg {
> + struct mfi_conf *cfg;
> + struct mfi_array *cfg_array;
> + struct mfi_ld_cfg *cfg_ld;
> + struct mfi_hotspare *cfg_hs;
> +};
> +
> struct mfii_softc {
> struct device sc_dev;
> const struct mfii_iop *sc_iop;
> @@ -250,11 +259,15 @@ struct mfii_softc {
> struct scsi_iopool sc_iopool;
>
> struct mfi_ctrl_info sc_info;
> +
> + struct ksensor *sc_sensors;
> + struct ksensordev sc_sensordev;
> };
>
> int mfii_match(struct device *, void *, void *);
> void mfii_attach(struct device *, struct device *, void *);
> int mfii_detach(struct device *, int);
> +int mfii_scsi_ioctl(struct scsi_link *, u_long, caddr_t, int);
>
> struct cfattach mfii_ca = {
> sizeof(struct mfii_softc),
> @@ -277,7 +290,7 @@ struct scsi_adapter mfii_switch = {
> scsi_minphys,
> NULL, /* probe */
> NULL, /* unprobe */
> - NULL /* ioctl */
> + mfii_scsi_ioctl
> };
>
> void mfii_pd_scsi_cmd(struct scsi_xfer *);
> @@ -334,7 +347,26 @@ int mfii_scsi_cmd_cdb(struct
> mfii_soft
> struct scsi_xfer *);
> int mfii_pd_scsi_cmd_cdb(struct mfii_softc *,
> struct scsi_xfer *);
> -
> +int mfii_scsi_ioctl_cache(struct scsi_link *, u_int,
> + struct dk_cache *);
> +#if NBIO > 0
> +int mfii_ioctl(struct device *, u_long, caddr_t);
> +int mfii_fill_cfg(struct mfii_softc *, struct mfii_cfg *);
> +int mfii_ioctl_inq(struct mfii_softc *, struct bioc_inq *);
> +int mfii_ioctl_vol(struct mfii_softc *, struct bioc_vol *);
> +int mfii_ioctl_disk(struct mfii_softc *,
> + struct bioc_disk *);
> +int mfii_ioctl_alarm(struct mfii_softc *,
> + struct bioc_alarm *);
> +int mfii_ioctl_blink(struct mfii_softc *,
> + struct bioc_blink *);
> +int mfii_ioctl_setstate(struct mfii_softc *,
> + struct bioc_setstate *);
> +int mfii_ioctl_patrol(struct mfii_softc *,
> + struct bioc_patrol *);
> +int mfii_create_sensors(struct mfii_softc *);
> +void mfii_refresh_sensors(void *);
> +#endif
>
> #define mfii_fw_state(_sc) mfii_read((_sc), MFI_OSP)
>
> @@ -506,7 +538,8 @@ mfii_attach(struct device *parent, struc
> memset(&saa, 0, sizeof(saa));
> saa.saa_sc_link = &sc->sc_link;
>
> - config_found(&sc->sc_dev, &saa, scsiprint);
> + sc->sc_scsibus = (struct scsibus_softc *)
> + config_found(&sc->sc_dev, &saa, scsiprint);
>
> mfii_syspd(sc);
>
> @@ -514,6 +547,16 @@ mfii_attach(struct device *parent, struc
> mfii_write(sc, MFI_OSTS, 0xffffffff);
> mfii_write(sc, MFI_OMSK, ~MFII_OSTS_INTR_VALID);
>
> +#if NBIO > 0
> + if (bio_register(&sc->sc_dev, mfii_ioctl) != 0)
> + panic("%s: controller registration failed", DEVNAME(sc));
> +
> +#ifndef SMALL_KERNEL
> + if (mfii_create_sensors(sc) != 0)
> + printf("%s: unable to create sensors\n", DEVNAME(sc));
> +#endif
> +#endif /* NBIO > 0 */
> +
> return;
> free_sgl:
> mfii_dmamem_free(sc, sc->sc_sgl);
> @@ -621,6 +664,10 @@ mfii_detach(struct device *self, int fla
> if (sc->sc_ih == NULL)
> return (0);
>
> + if (sc->sc_sensors) {
> + sensordev_deinstall(&sc->sc_sensordev);
> + free(sc->sc_sensors, M_DEVBUF, sc->sc_info.mci_lds_present);
> + }
> pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
> mfii_dmamem_free(sc, sc->sc_sgl);
> mfii_dmamem_free(sc, sc->sc_requests);
> @@ -1065,6 +1112,10 @@ mfii_mgmt(struct mfii_softc *sc, struct
> hdr->mfh_flags = htole16(MFI_FRAME_DIR_WRITE);
> memcpy(dma_buf, buf, len);
> break;
> + default:
> + ccb->ccb_direction = MFII_DATA_NONE;
> + hdr->mfh_flags = htole16(MFI_FRAME_DIR_NONE);
> + break;
> }
>
> if (mfii_load_mfa(sc, ccb, &dcmd->mdf_sgl,
> @@ -1098,6 +1149,12 @@ mfii_mgmt(struct mfii_softc *sc, struct
> memcpy(buf, dma_buf, len);
> }
>
> +
> + if (hdr->mfh_cmd_status != MFI_STAT_OK)
> + printf("%s cmd=%d failed status=%d\n", __func__, opc,
> + hdr->mfh_cmd_status);
> +
> +
> done:
> dma_free(dma_buf, len);
>
> @@ -1796,3 +1853,797 @@ destroy:
> return (1);
> }
>
> +int
> +mfii_scsi_ioctl(struct scsi_link *link, u_long cmd, caddr_t addr, int flag)
> +{
> + switch (cmd) {
> + case DIOCGCACHE:
> + case DIOCSCACHE:
> + return mfii_scsi_ioctl_cache(link, cmd,
> + (struct dk_cache *)addr);
> + break;
> + default:
> +#if NBIO > 0
> + return mfii_ioctl(link->adapter_softc, cmd, addr);
> +#endif
> + break;
> + }
> + return (ENOTTY);
> +}
> +
> +int
> +mfii_scsi_ioctl_cache(struct scsi_link *link, u_int cmd, struct dk_cache *dc)
> +{
> + struct mfii_softc *sc = (struct mfii_softc *)link->adapter_softc;
> + struct mfi_ld_prop ldp;
> + uint8_t mbox[MFI_MBOX_SIZE];
> + struct mfii_ccb *ccb;
> + int rv, wrenable, rdenable;
> +
> + memset(mbox, 0, sizeof(mbox));
> + *((uint16_t *)&mbox[0]) = htole16(link->target);
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_LD_GET_PROPERTIES, mbox,
> + &ldp, sizeof(ldp), SCSI_DATA_IN|SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + return (rv);
> +
> + if (letoh16(sc->sc_info.mci_memory_size) > 0) {
> + wrenable = ISSET(ldp.mlp_cur_cache_policy,
> + MR_LD_CACHE_ALLOW_WRITE_CACHE)? 1 : 0;
> + rdenable = ISSET(ldp.mlp_cur_cache_policy,
> + MR_LD_CACHE_ALLOW_READ_CACHE)? 1 : 0;
> + } else {
> + wrenable = ISSET(ldp.mlp_diskcache_policy,
> + MR_LD_DISK_CACHE_ENABLE)? 1 : 0;
> + rdenable = 0;
> + }
> +
> + if (cmd == DIOCGCACHE) {
> + dc->wrcache = wrenable;
> + dc->rdcache = rdenable;
> + return (0);
> + }
> + if (((dc->wrcache) ? 1 : 0) == wrenable &&
> + ((dc->rdcache) ? 1 : 0) == rdenable)
> + return (0);
> +
> + mbox[0] = ldp.mlp_ld.mld_target;
> + mbox[1] = ldp.mlp_ld.mld_res;
> + *(uint16_t *)&mbox[2] = ldp.mlp_ld.mld_seq;
> + if (letoh16(sc->sc_info.mci_memory_size) > 0) {
> + if (dc->rdcache)
> + SET(ldp.mlp_cur_cache_policy,
> + MR_LD_CACHE_ALLOW_READ_CACHE);
> + else
> + CLR(ldp.mlp_cur_cache_policy,
> + MR_LD_CACHE_ALLOW_READ_CACHE);
> + if (dc->wrcache)
> + SET(ldp.mlp_cur_cache_policy,
> + MR_LD_CACHE_ALLOW_WRITE_CACHE);
> + else
> + CLR(ldp.mlp_cur_cache_policy,
> + MR_LD_CACHE_ALLOW_WRITE_CACHE);
> + } else {
> + if (dc->rdcache)
> + return (EOPNOTSUPP);
> + if (dc->wrcache)
> + ldp.mlp_diskcache_policy = MR_LD_DISK_CACHE_ENABLE;
> + else
> + ldp.mlp_diskcache_policy = MR_LD_DISK_CACHE_DISABLE;
> + }
> +
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_LD_SET_PROPERTIES, mbox,
> + &ldp, sizeof(ldp), SCSI_DATA_OUT|SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> +
> + return (rv);
> +}
> +
> +#if NBIO > 0
> +int
> +mfii_ioctl(struct device *dev, u_long cmd, caddr_t addr)
> +{
> + struct mfii_softc *sc = (struct mfii_softc *)dev;
> + int rv = ENOTTY;
> +
> + switch (cmd) {
> + case BIOCINQ:
> + rv = mfii_ioctl_inq(sc, (struct bioc_inq *)addr);
> + break;
> + case BIOCVOL:
> + rv = mfii_ioctl_vol(sc, (struct bioc_vol *)addr);
> + break;
> + case BIOCDISK:
> + rv = mfii_ioctl_disk(sc, (struct bioc_disk *)addr);
> + break;
> + case BIOCALARM:
> + rv = mfii_ioctl_alarm(sc, (struct bioc_alarm *)addr);
> + break;
> + case BIOCBLINK:
> + rv = mfii_ioctl_blink(sc, (struct bioc_blink *)addr);
> + break;
> + case BIOCSETSTATE:
> + rv = mfii_ioctl_setstate(sc, (struct bioc_setstate *)addr);
> + break;
> + case BIOCPATROL:
> + rv = mfii_ioctl_patrol(sc, (struct bioc_patrol *)addr);
> + break;
> + }
> +
> + return (rv);
> +}
> +
> +int
> +mfii_fill_cfg(struct mfii_softc *sc, struct mfii_cfg *cfg)
> +{
> + int rv, mfc_size;
> + struct mfi_conf *mfc;
> + struct mfii_ccb *ccb;
> +
> + mfc_size = sizeof(*mfc);
> + again:
> + mfc = malloc(mfc_size, M_TEMP, M_WAITOK | M_ZERO);
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_CONF_GET, NULL,
> + mfc, mfc_size, SCSI_DATA_IN|SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv == 0) {
> + mfc->mfc_size = letoh32(mfc->mfc_size);
> + mfc->mfc_no_array = letoh16(mfc->mfc_no_array);
> + mfc->mfc_array_size = letoh16(mfc->mfc_array_size);
> + mfc->mfc_no_ld = letoh16(mfc->mfc_no_ld);
> + mfc->mfc_ld_size = letoh16(mfc->mfc_ld_size);
> + mfc->mfc_no_hs = letoh16(mfc->mfc_no_hs);
> + mfc->mfc_hs_size = letoh16(mfc->mfc_hs_size);
> +
> + if (mfc_size < mfc->mfc_size) {
> + int tmp = mfc->mfc_size;
> + free(mfc, M_TEMP, mfc_size);
> + mfc_size = tmp;
> + goto again;
> + }
> + /* remember allocated size for free() */
> + mfc->mfc_size = mfc_size;
> +
> + cfg->cfg = mfc;
> + cfg->cfg_array = (struct mfi_array *)((caddr_t)mfc +
> + offsetof(struct mfi_conf, mfc_array));
> + cfg->cfg_ld = (struct mfi_ld_cfg *)((caddr_t)cfg->cfg_array +
> + mfc->mfc_array_size * mfc->mfc_no_array);
> + cfg->cfg_hs = (struct mfi_hotspare *)((caddr_t)cfg->cfg_ld +
> + mfc->mfc_ld_size * mfc->mfc_no_ld);
> +
> + return (0);
> + }
> +
> + free(mfc, M_TEMP, mfc_size);
> + return (rv);
> +}
> +
> +int
> +mfii_ioctl_inq(struct mfii_softc *sc, struct bioc_inq *bi)
> +{
> + int rv;
> + struct mfii_cfg cfg = { .cfg = NULL };
> +
> + rv = mfii_fill_cfg(sc, &cfg);
> + if (rv != 0)
> + return (rv);
> +
> + bi->bi_novol = cfg.cfg->mfc_no_ld + cfg.cfg->mfc_no_hs;
> + bi->bi_nodisk = letoh16(sc->sc_info.mci_pd_disks_present);
> + strlcpy(bi->bi_dev, DEVNAME(sc), sizeof(bi->bi_dev));
> +
> + if (cfg.cfg != NULL)
> + free(cfg.cfg, M_TEMP, cfg.cfg->mfc_size);
> +
> + return (0);
> +}
> +
> +int
> +mfii_ioctl_vol(struct mfii_softc *sc, struct bioc_vol *bv)
> +{
> + int rv;
> + struct mfii_cfg cfg = { .cfg = NULL };
> + struct mfi_ld_cfg *ld;
> + struct mfi_ld_list *list = NULL;
> + struct scsi_link *link;
> + struct mfii_ccb *ccb;
> + uint8_t mbox[MFI_MBOX_SIZE];
> +
> + if ((link = scsi_get_link(sc->sc_scsibus, bv->bv_volid, 0)) != NULL &&
> + link->device_softc != NULL) {
> + struct device *dev = link->device_softc;
> + strlcpy(bv->bv_dev, dev->dv_xname, sizeof(bv->bv_dev));
> + }
> + rv = mfii_fill_cfg(sc, &cfg);
> + if (rv != 0)
> + goto done;
> +
> + if (bv->bv_volid >= cfg.cfg->mfc_no_ld) {
> + int hsid;
> + struct mfi_pd_details *pd;
> +
> + hsid = bv->bv_volid - cfg.cfg->mfc_no_ld;
> + if (hsid >= cfg.cfg->mfc_no_hs)
> + return (EINVAL);
> +
> + pd = malloc(sizeof(*pd), M_TEMP, M_WAITOK | M_ZERO);
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + memset(mbox, 0, sizeof(mbox));
> + *((uint16_t *)&mbox[0]) = cfg.cfg_hs[hsid].mhs_pd.mfp_id;
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PD_GET_INFO, mbox,
> + pd, sizeof(*pd), SCSI_DATA_IN|SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv == 0) {
> + bv->bv_status = BIOC_SVONLINE;
> + bv->bv_size = letoh64(pd->mpd_size) * 512;
> + bv->bv_level = -1;
> + bv->bv_nodisk = 1;
> + }
> + free(pd, M_TEMP, sizeof(*pd));
> +
> + goto done;
> + }
> +
> + list = malloc(sizeof(*list), M_TEMP, M_WAITOK | M_ZERO);
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_LD_GET_LIST, NULL,
> + list, sizeof(*list), SCSI_DATA_IN|SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + goto done;
> +
> + if (bv->bv_volid >= letoh32(list->mll_no_ld)) {
> + rv = EINVAL;
> + goto done;
> + }
> +
> + switch (list->mll_list[bv->bv_volid].mll_state) {
> + case MFI_LD_OFFLINE:
> + bv->bv_status = BIOC_SVOFFLINE;
> + break;
> + case MFI_LD_PART_DEGRADED:
> + case MFI_LD_DEGRADED:
> + bv->bv_status = BIOC_SVDEGRADED;
> + break;
> + case MFI_LD_ONLINE:
> + bv->bv_status = BIOC_SVONLINE;
> + break;
> + default:
> + bv->bv_status = BIOC_SVINVALID;
> + break;
> + }
> + bv->bv_size = letoh64(list->mll_list[bv->bv_volid].mll_size) * 512;
> +
> + ld = cfg.cfg_ld + bv->bv_volid;
> + bv->bv_cache =
> + (ld->mlc_prop.mlp_cur_cache_policy & MR_LD_CACHE_WRITE_BACK)
> + ? BIOC_CVWRITEBACK : BIOC_CVWRITETHROUGH;
> +
> + switch (ld->mlc_parm.mpa_pri_raid) {
> + case MFI_DDF_PRL_RAID0:
> + bv->bv_level = 0;
> + break;
> + case MFI_DDF_PRL_RAID1:
> + case MFI_DDF_PRL_RAID1E:
> + bv->bv_level = 1;
> + break;
> + case MFI_DDF_PRL_RAID3:
> + bv->bv_level = 3;
> + break;
> + case MFI_DDF_PRL_RAID4:
> + bv->bv_level = 4;
> + break;
> + case MFI_DDF_PRL_RAID5:
> + case MFI_DDF_PRL_RAID5E:
> + case MFI_DDF_PRL_RAID5EE:
> + bv->bv_level = 5;
> + break;
> + case MFI_DDF_PRL_RAID6:
> + bv->bv_level = 6;
> + break;
> + case MFI_DDF_PRL_JBOD:
> + case MFI_DDF_PRL_CONCAT:
> + default:
> + bv->bv_level = 0;
> + break;
> + }
> + bv->bv_nodisk =
> + ld->mlc_parm.mpa_no_drv_per_span * ld->mlc_parm.mpa_span_depth;
> + done:
> + free(list, M_TEMP, sizeof(*list));
> + if (cfg.cfg != NULL)
> + free(cfg.cfg, M_TEMP, cfg.cfg->mfc_size);
> +
> + return (rv);
> +}
> +
> +int
> +mfii_ioctl_disk(struct mfii_softc *sc, struct bioc_disk *bd)
> +{
> + int rv, spanidx, diskidx, arrayidx, pdidx;
> + struct mfii_cfg cfg = { .cfg = NULL };
> + struct mfi_ld_cfg *ld;
> + struct mfii_ccb *ccb;
> + struct scsi_inquiry_data *inq;
> + struct mfi_pd_details *pd_det = NULL;
> + uint8_t mbox[MFI_MBOX_SIZE];
> +
> + rv = mfii_fill_cfg(sc, &cfg);
> + if (rv != 0)
> + goto done;
> +
> + if (bd->bd_volid >= cfg.cfg->mfc_no_ld) {
> + int hsid = bd->bd_volid - cfg.cfg->mfc_no_ld;
> + if (hsid >= cfg.cfg->mfc_no_hs) {
> + rv = EINVAL;
> + goto done;
> + }
> + pdidx = letoh16(cfg.cfg_hs[hsid].mhs_pd.mfp_id);
> + } else {
> + ld = cfg.cfg_ld + bd->bd_volid;
> + if (ld->mlc_parm.mpa_no_drv_per_span == 0) {
> + /* avoid dividing by 0 */
> + rv = EIO;
> + goto done;
> + }
> + spanidx = bd->bd_diskid / ld->mlc_parm.mpa_no_drv_per_span;
> + diskidx = bd->bd_diskid % ld->mlc_parm.mpa_no_drv_per_span;
> + if (spanidx < 0 || MFI_MAX_SPAN <= spanidx) {
> + rv = EINVAL;
> + goto done;
> + }
> + arrayidx = letoh16(ld->mlc_span[spanidx].mls_index);
> + if (arrayidx < 0 || cfg.cfg->mfc_no_array <= arrayidx) {
> + rv = EINVAL;
> + goto done;
> + }
> + pdidx = letoh16(
> + cfg.cfg->mfc_array[arrayidx].pd[diskidx].mar_pd.mfp_id);
> + }
> +
> + memset(mbox, 0, sizeof(mbox));
> + *((uint16_t *)&mbox[0]) = htole16(pdidx);
> +
> + pd_det = malloc(sizeof(*pd_det), M_TEMP, M_WAITOK | M_ZERO);
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PD_GET_INFO, mbox,
> + pd_det, sizeof(*pd_det), SCSI_DATA_IN|SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + goto done;
> +
> + bd->bd_channel = pd_det->mpd_enc_idx;
> + bd->bd_target = pd_det->mpd_enc_slot;
> +
> + switch (letoh16(pd_det->mpd_fw_state)) {
> + case MFI_PD_UNCONFIG_GOOD:
> + bd->bd_status = BIOC_SDUNUSED;
> + break;
> + case MFI_PD_UNCONFIG_BAD:
> + bd->bd_status = BIOC_SDINVALID;
> + break;
> + case MFI_PD_HOTSPARE:
> + bd->bd_status = BIOC_SDHOTSPARE;
> + break;
> + case MFI_PD_OFFLINE:
> + bd->bd_status = BIOC_SDOFFLINE;
> + break;
> + case MFI_PD_FAILED:
> + bd->bd_status = BIOC_SDFAILED;
> + break;
> + case MFI_PD_REBUILD:
> + bd->bd_status = BIOC_SDREBUILD;
> + break;
> + case MFI_PD_ONLINE:
> + bd->bd_status = BIOC_SDONLINE;
> + break;
> + case MFI_PD_COPYBACK:
> + case MFI_PD_SYSTEM:
> + bd->bd_status = BIOC_SDINVALID;
> + break;
> + }
> + bd->bd_size = letoh64(pd_det->mpd_size) * 512;
> +
> + inq = (struct scsi_inquiry_data *)pd_det->mpd_inq_data;
> +
> + memset(bd->bd_vendor, 0, sizeof(bd->bd_vendor));
> + memcpy(bd->bd_vendor, inq->vendor,
> + MIN(sizeof(bd->bd_vendor) - 1, sizeof(inq->vendor)));
> +
> + rv = 0;
> + done:
> + free(pd_det, M_TEMP, sizeof(*pd_det));
> + if (cfg.cfg != NULL)
> + free(cfg.cfg, M_TEMP, cfg.cfg->mfc_size);
> +
> + return (rv);
> +}
> +
> +int
> +mfii_ioctl_setstate(struct mfii_softc *sc, struct bioc_setstate *bs)
> +{
> + int rv, i;
> + struct mfii_ccb *ccb;
> + struct mfi_pd_list *list = NULL;
> + struct mfi_pd_details *pd = NULL;
> + uint8_t mbox[MFI_MBOX_SIZE];
> +
> + list = malloc(sizeof(*list), M_TEMP, M_WAITOK | M_ZERO);
> + pd = malloc(sizeof(*pd), M_TEMP, M_WAITOK | M_ZERO);
> +
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PD_GET_LIST, NULL,
> + list, sizeof(*list), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + goto done;
> +
> + for (i = 0; i < letoh16(list->mpl_no_pd); i++)
> + if (list->mpl_address[i].mpa_enc_index == bs->bs_channel &&
> + list->mpl_address[i].mpa_enc_slot == bs->bs_target)
> + break;
> + if (i >= letoh16(list->mpl_no_pd)) {
> + rv = EINVAL;
> + goto done;
> + }
> +
> + memset(mbox, 0, sizeof(mbox));
> + *((uint16_t *)&mbox[0]) = list->mpl_address[i].mpa_pd_id;
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PD_GET_INFO, mbox,
> + pd, sizeof(*pd), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + goto done;
> +
> + memset(mbox, 0, sizeof(mbox));
> + *((uint16_t *)&mbox[0]) = pd->mpd_pd.mfp_id;
> + *((uint16_t *)&mbox[2]) = pd->mpd_pd.mfp_seq;
> +
> + switch (bs->bs_status) {
> + case BIOC_SSONLINE:
> + *((uint16_t *)&mbox[4]) = htole16(MFI_PD_ONLINE);
> + break;
> + case BIOC_SSOFFLINE:
> + *((uint16_t *)&mbox[4]) = htole16(MFI_PD_OFFLINE);
> + break;
> + case BIOC_SSHOTSPARE:
> + *((uint16_t *)&mbox[4]) = htole16(MFI_PD_HOTSPARE);
> + break;
> + case BIOC_SSREBUILD:
> + *((uint16_t *)&mbox[4]) = htole16(MFI_PD_REBUILD);
> + break;
> + default:
> + rv = EINVAL;
> + goto done;
> + }
> +
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PD_SET_STATE, mbox,
> + NULL, 0, SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> +
> + done:
> + free(list, M_TEMP, sizeof(*list));
> + free(pd, M_TEMP, sizeof(*pd));
> +
> + return (rv);
> +}
> +
> +int
> +mfii_ioctl_alarm(struct mfii_softc *sc, struct bioc_alarm *ba)
> +{
> + struct mfii_ccb *ccb;
> + u_char spkr;
> + int rv, cmd, flags = 0;
> +
> + if (!ISSET(letoh32(sc->sc_info.mci_hw_present), MFI_INFO_HW_ALARM))
> + return (ENXIO);
> +
> + switch (ba->ba_status) {
> + case BIOC_SADISABLE:
> + cmd = MR_DCMD_SPEAKER_DISABLE;
> + break;
> + case BIOC_SAENABLE:
> + cmd = MR_DCMD_SPEAKER_ENABLE;
> + break;
> + case BIOC_SASILENCE:
> + cmd = MR_DCMD_SPEAKER_SILENCE;
> + break;
> + case BIOC_GASTATUS:
> + cmd = MR_DCMD_SPEAKER_GET;
> + flags = SCSI_DATA_IN;
> + break;
> + case BIOC_SATEST:
> + cmd = MR_DCMD_SPEAKER_TEST;
> + break;
> + default:
> + return (EINVAL);
> + }
> +
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, cmd, NULL,
> + &spkr, sizeof(spkr), flags | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + return (rv);
> +
> + ba->ba_status = (ba->ba_status == BIOC_GASTATUS)? spkr : 0;
> +
> + return (rv);
> +}
> +
> +int
> +mfii_ioctl_blink(struct mfii_softc *sc, struct bioc_blink *bb)
> +{
> + struct mfi_pd_list *list = NULL;
> + struct mfii_ccb *ccb;
> + uint8_t mbox[MFI_MBOX_SIZE];
> + int rv, i, cmd;
> +//mfi_ioctl_blink
> + list = malloc(sizeof(*list), M_TEMP, M_WAITOK | M_ZERO);
> +
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PD_GET_LIST, NULL,
> + list, sizeof(*list), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + goto done;
> +
> + for (i = 0; i < letoh16(list->mpl_no_pd); i++)
> + if (list->mpl_address[i].mpa_enc_index == bb->bb_channel &&
> + list->mpl_address[i].mpa_enc_slot == bb->bb_target)
> + break;
> + if (i >= letoh16(list->mpl_no_pd)) {
> + rv = EINVAL;
> + goto done;
> + }
> +
> + memset(mbox, 0, sizeof(mbox));
> + *((uint16_t *)&mbox[0]) = list->mpl_address[i].mpa_pd_id;
> +
> + switch (bb->bb_status) {
> + case BIOC_SBUNBLINK:
> + cmd = MR_DCMD_PD_UNBLINK;
> + break;
> + case BIOC_SBBLINK:
> + case BIOC_SBALARM:
> + cmd = MR_DCMD_PD_BLINK;
> + break;
> + default:
> + rv = EINVAL;
> + goto done;
> + }
> +
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, cmd, mbox, NULL, 0, SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> +
> + done:
> + free(list, M_TEMP, sizeof(*list));
> +
> + return (rv);
> +}
> +
> +int
> +mfii_ioctl_patrol(struct mfii_softc *sc, struct bioc_patrol *bp)
> +{
> + int rv = EINVAL, cmd;
> + struct mfii_ccb *ccb;
> + struct mfi_pr_properties prop;
> + struct mfi_pr_status status;
> + uint32_t time;
> +
> + switch (bp->bp_opcode) {
> + case BIOC_SPSTOP:
> + case BIOC_SPSTART:
> + cmd = (bp->bp_opcode == BIOC_SPSTART)
> + ? MR_DCMD_PR_START : MR_DCMD_PR_STOP;
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, cmd, NULL, NULL, 0, SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + break;
> +
> + case BIOC_GPSTATUS:
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PR_GET_PROPERTIES, NULL,
> + &prop, sizeof(prop), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + break;
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PR_GET_STATUS, NULL,
> + &status, sizeof(status), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + break;
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_TIME_SECS_GET, NULL,
> + &time, sizeof(time), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + break;
> + time = letoh32(time);
> +
> + switch (prop.op_mode) {
> + case MFI_PR_OPMODE_AUTO:
> + bp->bp_mode = BIOC_SPMAUTO;
> + bp->bp_autoival = letoh32(prop.exec_freq);
> + bp->bp_autonext = letoh32(prop.next_exec);
> + bp->bp_autonow = time;
> + break;
> + case MFI_PR_OPMODE_MANUAL:
> + bp->bp_mode = BIOC_SPMMANUAL;
> + break;
> + case MFI_PR_OPMODE_DISABLED:
> + bp->bp_mode = BIOC_SPMDISABLED;
> + break;
> + }
> +
> + switch (status.state) {
> + case MFI_PR_STATE_STOPPED:
> + bp->bp_status = BIOC_SPSSTOPPED;
> + break;
> + case MFI_PR_STATE_READY:
> + bp->bp_status = BIOC_SPSREADY;
> + break;
> + case MFI_PR_STATE_ACTIVE:
> + bp->bp_status = BIOC_SPSACTIVE;
> + break;
> + case MFI_PR_STATE_ABORTED:
> + bp->bp_status = BIOC_SPSABORTED;
> + break;
> + }
> + break;
> +
> + case BIOC_SPDISABLE:
> + case BIOC_SPMANUAL:
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PR_GET_PROPERTIES, NULL,
> + &prop, sizeof(prop), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + break;
> + prop.op_mode = (bp->bp_opcode == BIOC_SPDISABLE)
> + ? MFI_PR_OPMODE_DISABLED : MFI_PR_OPMODE_MANUAL;
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PR_SET_PROPERTIES, NULL,
> + &prop, sizeof(prop), SCSI_DATA_OUT | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + break;
> +
> + case BIOC_SPAUTO:
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PR_GET_PROPERTIES, NULL,
> + &prop, sizeof(prop), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + break;
> + prop.op_mode = MFI_PR_OPMODE_AUTO;
> +
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_TIME_SECS_GET, NULL,
> + &time, sizeof(time), SCSI_DATA_IN | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + if (rv != 0)
> + break;
> + time = letoh32(time);
> + if (bp->bp_autoival != 0) {
> + if (bp->bp_autoival == -1)
> + prop.exec_freq = htole32(0xffffffffUL);
> + else if (bp->bp_autoival > 0)
> + prop.exec_freq = htole32(bp->bp_autoival);
> + else {
> + rv = EINVAL;
> + break;
> + }
> + }
> + if (bp->bp_autonext != 0) {
> + if (bp->bp_autonext > 0)
> + prop.next_exec =
> + htole32(time + bp->bp_autonext);
> + else {
> + rv = EINVAL;
> + break;
> + }
> + }
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_PR_SET_PROPERTIES, NULL,
> + &prop, sizeof(prop), SCSI_DATA_OUT | SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> + break;
> + }
> +
> + return (rv);
> +}
> +
> +#ifndef SMALL_KERNEL
> +int
> +mfii_create_sensors(struct mfii_softc *sc)
> +{
> + int i, no_ld;
> + struct device *dev;
> + struct scsi_link *link;
> +
> + no_ld = letoh16(sc->sc_info.mci_lds_present);
> +
> + strlcpy(sc->sc_sensordev.xname, DEVNAME(sc),
> + sizeof(sc->sc_sensordev.xname));
> +
> + sc->sc_sensors = mallocarray(no_ld, sizeof(struct ksensor),
> + M_DEVBUF, M_NOWAIT | M_ZERO);
> + if (sc->sc_sensors == NULL)
> + return (-1);
> +
> + for (i = 0; i < no_ld; i++) {
> + if ((link = scsi_get_link(sc->sc_scsibus, i, 0)) == NULL ||
> + link->device_softc == NULL)
> + goto err;
> +
> + dev = link->device_softc;
> + sc->sc_sensors[i].type = SENSOR_DRIVE;
> + sc->sc_sensors[i].status = SENSOR_S_UNKNOWN;
> + strlcpy(sc->sc_sensors[i].desc, dev->dv_xname,
> + sizeof(sc->sc_sensors[i].desc));
> + sensor_attach(&sc->sc_sensordev, &sc->sc_sensors[i]);
> + }
> +
> + if (sensor_task_register(sc, mfii_refresh_sensors, 10) == NULL)
> + goto err;
> +
> + sensordev_install(&sc->sc_sensordev);
> +
> + return (0);
> + err:
> + free(sc->sc_sensors, M_DEVBUF, no_ld);
> +
> + return (-1);
> +}
> +
> +void
> +mfii_refresh_sensors(void *arg)
> +{
> + int i, rv;
> + struct mfi_ld_list *list = NULL;
> + struct mfii_softc *sc = arg;
> + struct mfii_ccb *ccb;
> +
> + list = malloc(sizeof(*list), M_TEMP, M_WAITOK | M_ZERO);
> + ccb = scsi_io_get(&sc->sc_iopool, 0);
> + rv = mfii_mgmt(sc, ccb, MR_DCMD_LD_GET_LIST, NULL,
> + list, sizeof(*list), SCSI_DATA_IN|SCSI_NOSLEEP);
> + scsi_io_put(&sc->sc_iopool, ccb);
> +
> + if (rv == 0) {
> + for (i = 0; i < letoh16(sc->sc_info.mci_lds_present); i++) {
> + switch (list->mll_list[i].mll_state) {
> + case MFI_LD_OFFLINE:
> + sc->sc_sensors[i].value = SENSOR_DRIVE_FAIL;
> + sc->sc_sensors[i].status = SENSOR_S_CRIT;
> + break;
> + case MFI_LD_PART_DEGRADED:
> + case MFI_LD_DEGRADED:
> + sc->sc_sensors[i].value = SENSOR_DRIVE_PFAIL;
> + sc->sc_sensors[i].status = SENSOR_S_WARN;
> + break;
> + case MFI_LD_ONLINE:
> + sc->sc_sensors[i].value = SENSOR_DRIVE_ONLINE;
> + sc->sc_sensors[i].status = SENSOR_S_OK;
> + break;
> + default:
> + sc->sc_sensors[i].value = 0; /* unknown */
> + sc->sc_sensors[i].status = SENSOR_S_UNKNOWN;
> + break;
> + }
> + }
> + }
> +
> + free(list, M_TEMP, sizeof(*list));
> +}
> +#endif
> +#endif
hello,
with this patch my system hangs at boot. I transcribed the dmesg visible on the
screen:
"INT33CA" at acpi0 not configured
"PNP0C14" at acpi0 not configured
acpibtn0 at acpi0: PWRB
acpibtn1 at acpi0: SLPB
acpivideo0 at acpi0: GFX0
acpivout0 at acpivideo0: DD1F
cpu0: Enhanced SpeedStep 3199 MHz: speeds: 3201, 3200, 3000, 2900, 2700, 2500,
2300, 2200, 2000, 1800, 1700, 1500, 1300, 1100, 1000, 800 MHz
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel Core 4G Host" rev 0x06
ppb0 at pci0 dev 1 function 0 "Intel Core 4G PCIE" rev 0x06: msi
pci1 at ppb0 bus 1
ppb1 at pci0 dev 1 function 1 "Intel Core 4G PCIE" rev 0x06: msi
pci2 at ppb1 bus 2
ppb2 at pci0 dev 1 function 2 "Intel Core 4G PCIE" rev 0x06: msi
pci3 at ppb2 bus 3
mfii0 at pci3 dev 0 function 0 "Symbios Logic MegaRAID SAS2208" rev 0x05: msi
mfii0: "LSI MegaRAID SAS 9271-8i", firmware 23.34.0-0017, 1024MB cache
scsibus1 at mfii0: 64 targets
sd0 at scsibus1 targ 0 lun 0: <LSI, MR9271-8i, 3.46> SCSI3 0/direct fixed
naa.600605b00a74c2a01e622aec123aced2
sd0: 13344758MB, 512 bytes/sector, 27330064384 sectors
mfii0: timeout on ccb 1008
miff_mgmt cmd=50593792 failed status=255
at this point it hangs and nothing happens. I rebooted with obsd and full
dmesg is under. Let me know if you need anything further or if there is
any debugging I can enable to help you track this down.
thanks,
.jh
# dmesg
OpenBSD 6.0-current (GENERIC.MP) #0: Thu Oct 27 10:31:06 MDT 2016
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 16838430720 (16058MB)
avail mem = 16323571712 (15567MB)
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.8 @ 0xec820 (29 entries)
bios0: vendor American Megatrends Inc. version "P2.10" date 05/12/2015
bios0: ASRock Z97 Extreme4
acpi0 at bios0: rev 2
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP APIC FPDT SSDT SSDT SSDT MCFG HPET SSDT SSDT AAFT UEFI
acpi0: wakeup devices PEGP(S4) PEG0(S4) PEGP(S4) PEG1(S4) PEGP(S4) PEG2(S4)
PS2K(S4) UAR1(S4) USB1(S3) PXSX(S4) RP01(S4) PXSX(S4) PXSX(S4) PXSX(S4)
RP04(S4) PXSX(S4) [...]
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Pentium(R) CPU G3258 @ 3.20GHz, 3199.47 MHz
cpu0:
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,MOVBE,POPCNT,DEADLINE,XSAVE,RDRAND,NXE,PAGE1GB,LONG,LAHF,ABM,PERF,ITSC,FSGSBASE,ERMS,INVPCID,SENSOR,ARAT
cpu0: 256KB 64b/line 8-way L2 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges
cpu0: apic clock running at 99MHz
cpu0: mwait min=64, max=64, C-substates=0.2.1.2, IBE
cpu1 at mainbus0: apid 2 (application processor)
cpu1: Intel(R) Pentium(R) CPU G3258 @ 3.20GHz, 3199.07 MHz
cpu1:
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,MOVBE,POPCNT,DEADLINE,XSAVE,RDRAND,NXE,PAGE1GB,LONG,LAHF,ABM,PERF,ITSC,FSGSBASE,ERMS,INVPCID,SENSOR,ARAT
cpu1: 256KB 64b/line 8-way L2 cache
cpu1: smt 0, core 1, package 0
ioapic0 at mainbus0: apid 8 pa 0xfec00000, version 20, 24 pins
acpimcfg0 at acpi0 addr 0xf8000000, bus 0-63
acpihpet0 at acpi0: 14318179 Hz
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus 1 (PEG0)
acpiprt2 at acpi0: bus 2 (PEG1)
acpiprt3 at acpi0: bus 3 (PEG2)
acpiprt4 at acpi0: bus 4 (RP01)
acpiprt5 at acpi0: bus 5 (RP04)
acpiprt6 at acpi0: bus 6 (RP06)
acpiprt7 at acpi0: bus 7 (RP07)
acpiec0 at acpi0: not present
acpicpu0 at acpi0: C2(500@67 mwait.1@0x10), C1(1000@1 mwait.1), PSS
acpicpu1 at acpi0: C2(500@67 mwait.1@0x10), C1(1000@1 mwait.1), PSS
"INT3F0D" at acpi0 not configured
"MSFT0001" at acpi0 not configured
"PNP0501" at acpi0 not configured
"INT33CA" at acpi0 not configured
"PNP0C14" at acpi0 not configured
acpibtn0 at acpi0: PWRB
acpibtn1 at acpi0: SLPB
acpivideo0 at acpi0: GFX0
acpivout0 at acpivideo0: DD1F
cpu0: Enhanced SpeedStep 3199 MHz: speeds: 3201, 3200, 3000, 2900, 2700, 2500,
2300, 2200, 2000, 1800, 1700, 1500, 1300, 1100, 1000, 800 MHz
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel Core 4G Host" rev 0x06
ppb0 at pci0 dev 1 function 0 "Intel Core 4G PCIE" rev 0x06: msi
pci1 at ppb0 bus 1
ppb1 at pci0 dev 1 function 1 "Intel Core 4G PCIE" rev 0x06: msi
pci2 at ppb1 bus 2
ppb2 at pci0 dev 1 function 2 "Intel Core 4G PCIE" rev 0x06: msi
pci3 at ppb2 bus 3
mfii0 at pci3 dev 0 function 0 "Symbios Logic MegaRAID SAS2208" rev 0x05: msi
mfii0: "LSI MegaRAID SAS 9271-8i", firmware 23.34.0-0017, 1024MB cache
scsibus1 at mfii0: 64 targets
sd0 at scsibus1 targ 0 lun 0: <LSI, MR9271-8i, 3.46> SCSI3 0/direct fixed
naa.600605b00a74c2a01e622aec123aced2
sd0: 13344758MB, 512 bytes/sector, 27330064384 sectors
scsibus2 at mfii0: 256 targets
inteldrm0 at pci0 dev 2 function 0 "Intel HD Graphics" rev 0x06
drm0 at inteldrm0
inteldrm0: msi
inteldrm0: 1280x1024
wsdisplay0 at inteldrm0 mux 1: console (std, vt100 emulation)
wsdisplay0: screen 1-5 added (std, vt100 emulation)
azalia0 at pci0 dev 3 function 0 "Intel Core 4G HD Audio" rev 0x06: msi
azalia0: No codecs found
xhci0 at pci0 dev 20 function 0 "Intel 9 Series xHCI" rev 0x00: msi
usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev 3.00/1.00
addr 1
"Intel 9 Series MEI" rev 0x00 at pci0 dev 22 function 0 not configured
em0 at pci0 dev 25 function 0 "Intel I218-V" rev 0x00: msi, address
d0:50:99:5a:09:1c
ehci0 at pci0 dev 26 function 0 "Intel 9 Series USB" rev 0x00: apic 8 int 16
usb1 at ehci0: USB revision 2.0
uhub1 at usb1 configuration 1 interface 0 "Intel EHCI root hub" rev 2.00/1.00
addr 1
azalia1 at pci0 dev 27 function 0 "Intel 9 Series HD Audio" rev 0x00: msi
azalia1: codecs: Realtek ALC1150
audio0 at azalia1
ppb3 at pci0 dev 28 function 0 "Intel 9 Series PCIE" rev 0xd0
pci4 at ppb3 bus 4
ppb4 at pci0 dev 28 function 3 "Intel 9 Series PCIE" rev 0xd0: msi
pci5 at ppb4 bus 5
ahci0 at pci5 dev 0 function 0 "ASMedia ASM1061 AHCI" rev 0x02: msi, AHCI 1.2
scsibus3 at ahci0: 32 targets
ppb5 at pci0 dev 28 function 5 "Intel 9 Series PCIE" rev 0xd0: msi
pci6 at ppb5 bus 6
ahci1 at pci6 dev 0 function 0 "ASMedia ASM1061 AHCI" rev 0x01: msi, AHCI 1.2
ahci1: port 0: 6.0Gb/s
scsibus4 at ahci1: 32 targets
sd1 at scsibus4 targ 0 lun 0: <ATA, SanDisk SDSSDA12, Z220> SCSI3 0/direct
fixed naa.5001b44e915e1444
sd1: 114473MB, 512 bytes/sector, 234441648 sectors, thin
ppb6 at pci0 dev 28 function 6 "Intel 9 Series PCIE" rev 0xd0: msi
pci7 at ppb6 bus 7
xhci1 at pci7 dev 0 function 0 "ASMedia ASM1042A xHCI" rev 0x00: msi
usb2 at xhci1: USB revision 3.0
uhub2 at usb2 configuration 1 interface 0 "ASMedia xHCI root hub" rev 3.00/1.00
addr 1
ehci1 at pci0 dev 29 function 0 "Intel 9 Series USB" rev 0x00: apic 8 int 23
usb3 at ehci1: USB revision 2.0
uhub3 at usb3 configuration 1 interface 0 "Intel EHCI root hub" rev 2.00/1.00
addr 1
pcib0 at pci0 dev 31 function 0 "Intel Z97 LPC" rev 0x00
ichiic0 at pci0 dev 31 function 3 "Intel 9 Series SMBus" rev 0x00: apic 8 int 18
iic0 at ichiic0
spdmem0 at iic0 addr 0x51: 8GB DDR3 SDRAM PC3-12800
spdmem1 at iic0 addr 0x53: 8GB DDR3 SDRAM PC3-12800
isa0 at pcib0
isadma0 at isa0
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
vmm0 at mainbus0: VMX/EPT
uhub4 at uhub1 port 1 configuration 1 interface 0 "Intel Rate Matching Hub" rev
2.00/0.00 addr 2
uhub5 at uhub3 port 1 configuration 1 interface 0 "Intel Rate Matching Hub" rev
2.00/0.00 addr 2
vscsi0 at root
scsibus5 at vscsi0: 256 targets
softraid0 at root
scsibus6 at softraid0: 256 targets
root on sd1a (10906fca8f4bb5bf.a) swap on sd1b dump on sd1b