Date: Mon, 7 Jun 2004 04:35:30 GMT From: Scott Long <scottl@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 54290 for review Message-ID: <200406070435.i574ZUF6078016@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=54290 Change 54290 by scottl@scottl-esp-sparc64 on 2004/06/07 04:34:52 Change ncr53c9x_attach() to return an int so that it can pass up error codes. Use time_second for getting the approximate time Add some CAM includes Convert ncr53c9x_attach() to do the CAM thing. Disable ncr53c9x_detach() for now. Affected files ... .. //depot/projects/scottl-esp/src/sys/dev/esp/ncr53c9x.c#7 edit .. //depot/projects/scottl-esp/src/sys/dev/esp/ncr53c9xvar.h#6 edit Differences ... ==== //depot/projects/scottl-esp/src/sys/dev/esp/ncr53c9x.c#7 (text+ko) ==== @@ -87,11 +87,16 @@ #include <sys/lock.h> #include <sys/mutex.h> #include <sys/queue.h> +#include <sys/time.h> #include <vm/uma.h> #include <cam/cam.h> #include <cam/cam_ccb.h> +#include <cam/cam_debug.h> +#include <cam/cam_sim.h> +#include <cam/cam_xpt_sim.h> #include <cam/scsi/scsi_all.h> +#include <cam/scsi/scsi_message.h> #include <dev/esp/ncr53c9xreg.h> #include <dev/esp/ncr53c9xvar.h> @@ -104,7 +109,7 @@ static void ncr53c9x_select(struct ncr53c9x_softc *, struct ncr53c9x_ecb *); static int ncr53c9x_reselect(struct ncr53c9x_softc *, int, int, int); static void ncr53c9x_scsi_reset(struct ncr53c9x_softc *); -static int ncr53c9x_poll(struct cam_sim *); +static void ncr53c9x_poll(struct cam_sim *); static void ncr53c9x_sched(struct ncr53c9x_softc *); static void ncr53c9x_done(struct ncr53c9x_softc *, struct ncr53c9x_ecb *); static void ncr53c9x_msgin(struct ncr53c9x_softc *); @@ -184,14 +189,14 @@ /* * Attach this instance, and then all the sub-devices */ -void -ncr53c9x_attach(sc) - struct ncr53c9x_softc *sc; +int +ncr53c9x_attach(struct ncr53c9x_softc *sc) { - struct scsipi_adapter *adapt = &sc->sc_adapter; - struct scsipi_channel *chan = &sc->sc_channel; + struct cam_devq *devq; + struct cam_sim *sim; + struct cam_path *path; - mtx_init(&sc->sc_lock, "ncr" "ncr53c9x lock", MTX_DEF); + mtx_init(&sc->sc_lock, "ncr", "ncr53c9x lock", MTX_DEF); sc->dv_name = device_get_nameunit(sc->sc_dev); /* @@ -200,7 +205,7 @@ if (sc->sc_rev >= NCR_VARIANT_MAX) { printf("\n%s: unknown variant %d, devices not attached\n", sc->dv_name, sc->sc_rev); - return; + return (EINVAL); } printf(": %s, %dMHz, SCSI ID %d\n", @@ -225,7 +230,7 @@ if (!sc->sc_omess || !sc->sc_imess || !sc->sc_tinfo) { printf("out of memory\n"); - return; + return (ENOMEM); } callout_init(&sc->sc_watchdog, 0); @@ -260,48 +265,42 @@ sc->sc_ccf &= 7; /* - * Fill in the scsipi_adapter. + * Register with CAM */ - adapt->adapt_dev = &sc->sc_dev; - adapt->adapt_nchannels = 1; - adapt->adapt_openings = 256; - adapt->adapt_max_periph = 256; - /* adapt_request initialized by front-end */ - /* adapt_minphys initialized by front-end */ + devq = cam_simq_alloc(sc->sc_ntarg); + if (devq == NULL) + return (ENOMEM); - /* - * Fill in the scsipi_channel. - */ - memset(chan, 0, sizeof(*chan)); - chan->chan_adapter = adapt; - chan->chan_bustype = &scsi_bustype; - chan->chan_channel = 0; - chan->chan_ntargets = sc->sc_ntarg; - chan->chan_nluns = 8; - chan->chan_id = sc->sc_id; + sim = cam_sim_alloc(ncr53c9x_action, ncr53c9x_poll, "esp", sc, + device_get_unit(sc->sc_dev), 256, 1, devq); + if (sim == NULL) { + cam_simq_free(devq); + return (ENOMEM); + } + if (xpt_bus_register(sim, 0) != CAM_SUCCESS) { + cam_sim_free(sim, TRUE); + return (EIO); + } - /* - * Add reference to adapter so that we drop the reference after - * config_found() to make sure the adatper is disabled. - */ - if (scsipi_adapter_addref(adapt) != 0) { - printf("%s: unable to enable controller\n", - sc->dv_name); - return; + if (xpt_create_path(&path, NULL, cam_sim_path(sim), + CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) + != CAM_REQ_CMP) { + xpt_bus_deregister(cam_sim_path(sim)); + cam_sim_free(sim, TRUE); + return (EIO); } + sc->sc_sim = sim; + sc->sc_path = path; + /* Reset state & bus */ sc->sc_cfflags = sc->sc_dev.dv_cfdata->cf_flags; sc->sc_state = 0; ncr53c9x_init(sc, 1); - /* - * Now try to attach all the sub-devices - */ - sc->sc_child = config_found(&sc->sc_dev, &sc->sc_channel, scsiprint); + callout_reset(&sc->sc_watchdog, 60*hz, ncr53c9x_watch, sc); - scsipi_adapter_delref(adapt); - callout_reset(&sc->sc_watchdog, 60*hz, ncr53c9x_watch, sc); + return (0); } int @@ -309,18 +308,13 @@ struct ncr53c9x_softc *sc; int flags; { - int error; - if (sc->sc_child) { - error = config_detach(sc->sc_child, flags); - if (error) - return (error); - } - +#if 0 /* don't allow detach for now */ free(sc->sc_imess, M_DEVBUF); free(sc->sc_omess, M_DEVBUF); +#endif - return (0); + return (EINVAL); } /* @@ -1033,7 +1027,7 @@ if (lun < NCR_NLUN) ti->lun[lun] = li; } - li->last_used = time.tv_sec; + li->last_used = time_second; if (tag == 0) { /* Try to issue this as an un-tagged command */ if (li->untagged == NULL) @@ -2866,7 +2860,7 @@ struct ncr53c9x_linfo *li; int t; /* Delete any structures that have not been used in 10min. */ - time_t old = time.tv_sec - (10 * 60); + time_t old = time_second - (10 * 60); mtx_lock(&sc->sc_lock); for (t = 0; t < sc->sc_ntarg; t++) { ==== //depot/projects/scottl-esp/src/sys/dev/esp/ncr53c9xvar.h#6 (text+ko) ==== @@ -272,11 +272,8 @@ device_t sc_dev; /* us as a device */ char *dv_name; - struct cam_sim *sim; /* our scsi adapter */ - struct cam_path *path; /* our scsi channel */ -#if 0 - struct device *sc_child; /* attached scsibus, if any */ -#endif + struct cam_sim *sc_sim; /* our scsi adapter */ + struct cam_path *sc_path; /* our scsi channel */ struct callout sc_watchdog; /* periodic timer */ struct ncr53c9x_glue *sc_glue; /* glue to MD code */ @@ -445,7 +442,7 @@ #define ncr53c9x_cpb2stp(sc, cpb) \ ((250 * (cpb)) / (sc)->sc_freq) -void ncr53c9x_attach(struct ncr53c9x_softc *); +int ncr53c9x_attach(struct ncr53c9x_softc *); int ncr53c9x_detach(struct ncr53c9x_softc *, int); void ncr53c9x_action(struct cam_sim *, union ccb *); void ncr53c9x_reset(struct ncr53c9x_softc *);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200406070435.i574ZUF6078016>
