Lines Matching defs:isp
3 * SBus specific probe and attach routines for Qlogic ISP SCSI adapters.
63 #include <dev/microcode/isp/asm_sbus.h>
111 strcmp("SUNW,isp", sa->sa_name) == 0 ||
112 strcmp("QLGC,isp", sa->sa_name) == 0);
125 ispsoftc_t *isp = &sbc->sbus_isp;
127 isp->isp_osinfo.dev = self;
131 isp->isp_nchan = isp->isp_osinfo.adapter.adapt_nchannels = 1;
188 isp->isp_mdvec = &sbc->sbus_mdvec;
189 isp->isp_bustype = ISP_BT_SBUS;
190 isp->isp_type = ISP_HA_SCSI_UNKNOWN;
191 isp->isp_param = &sbc->sbus_dev;
192 isp->isp_dmatag = sa->sa_dmatag;
193 ISP_MEMZERO(isp->isp_param, sizeof (sdparam));
194 isp->isp_osinfo.chan = &sbc->sbus_chan;
210 isp->isp_dblev = ISP_LOGDEFAULT;
212 isp->isp_dblev = ISP_LOGWARN|ISP_LOGERR;
214 isp->isp_dblev |= ISP_LOGCONFIG|ISP_LOGINFO;
216 isp->isp_dblev |= ISP_LOGDEBUG1|ISP_LOGDEBUG2;
219 isp->isp_dblev |= ISP_LOGDEBUG0;
223 isp->isp_confopts = device_cfdata(self)->cf_flags;
224 SDPARAM(isp, 0)->role = ISP_DEFAULT_ROLES;
229 isp->isp_confopts |= ISP_CFG_NONVRAM;
236 SDPARAM(isp, 0)->isp_ptisp = 1;
238 ISP_LOCK(isp);
239 isp_reset(isp, 1);
240 if (isp->isp_state != ISP_RESETSTATE) {
241 ISP_UNLOCK(isp);
244 ISP_ENABLE_INTS(isp);
245 isp_init(isp);
246 if (isp->isp_state != ISP_INITSTATE) {
247 isp_uninit(isp);
248 ISP_UNLOCK(isp);
255 ISP_UNLOCK(isp);
256 isp_attach(isp);
261 isp_sbus_reset0(ispsoftc_t *isp)
263 ISP_DISABLE_INTS(isp);
267 isp_sbus_reset1(ispsoftc_t *isp)
269 ISP_ENABLE_INTS(isp);
277 ispsoftc_t *isp = arg;
279 if (ISP_READ_ISR(isp, &isr, &sema, &mbox) == 0) {
280 isp->isp_intbogus++;
285 isp_intr(isp, isr, sema, mbox);
299 isp_sbus_rd_isr(ispsoftc_t *isp, uint32_t *isrp,
302 struct isp_sbussoftc *sbc = (struct isp_sbussoftc *) isp;
306 isr = BXR2(sbc, IspVirt2Off(isp, BIU_ISR));
307 sema = BXR2(sbc, IspVirt2Off(isp, BIU_SEMA));
308 isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema);
309 isr &= INT_PENDING_MASK(isp);
316 *mbp = BXR2(sbc, IspVirt2Off(isp, OUTMAILBOX0));
322 isp_sbus_rd_reg(ispsoftc_t *isp, int regoff)
324 struct isp_sbussoftc *sbc = (struct isp_sbussoftc *) isp;
331 isp_sbus_wr_reg(ispsoftc_t *isp, int regoff, uint32_t val)
333 struct isp_sbussoftc *sbc = (struct isp_sbussoftc *) isp;
340 isp_sbus_mbxdma(ispsoftc_t *isp)
342 struct isp_sbussoftc *sbc = (struct isp_sbussoftc *) isp;
348 if (isp->isp_rquest_dma)
351 n = isp->isp_maxcmds * sizeof (isp_hdl_t);
352 isp->isp_xflist = (isp_hdl_t *) malloc(n, M_DEVBUF, M_WAITOK);
353 if (isp->isp_xflist == NULL) {
354 isp_prt(isp, ISP_LOGERR, "cannot alloc xflist array");
357 ISP_MEMZERO(isp->isp_xflist, n);
358 for (n = 0; n < isp->isp_maxcmds - 1; n++) {
359 isp->isp_xflist[n].cmd = &isp->isp_xflist[n+1];
361 isp->isp_xffree = isp->isp_xflist;
362 n = sizeof (bus_dmamap_t) * isp->isp_maxcmds;
365 free(isp->isp_xflist, M_DEVBUF);
366 isp->isp_xflist = NULL;
367 isp_prt(isp, ISP_LOGERR, "cannot alloc dmamap array");
370 for (i = 0; i < isp->isp_maxcmds; i++) {
372 if (bus_dmamap_create(isp->isp_dmatag, MAXPHYS, 1, MAXPHYS,
374 isp_prt(isp, ISP_LOGERR, "cmd DMA maps create error");
378 if (i < isp->isp_maxcmds) {
380 bus_dmamap_destroy(isp->isp_dmatag,
383 free(isp->isp_xflist, M_DEVBUF);
385 isp->isp_xflist = NULL;
394 len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp));
395 if (bus_dmamem_alloc(isp->isp_dmatag, len, 0, 0, &reqseg, 1, &reqrs,
400 if (bus_dmamem_map(isp->isp_dmatag, &reqseg, reqrs, len,
401 (void *)&isp->isp_rquest, BUS_DMA_NOWAIT|BUS_DMA_COHERENT)) {
405 if (bus_dmamap_create(isp->isp_dmatag, len, 1, len, 1 << 24,
406 BUS_DMA_NOWAIT, &isp->isp_rqdmap) != 0) {
410 if (bus_dmamap_load(isp->isp_dmatag, isp->isp_rqdmap,
411 isp->isp_rquest, len, NULL, BUS_DMA_NOWAIT) != 0) {
415 isp->isp_rquest_dma = isp->isp_rqdmap->dm_segs[0].ds_addr;
417 len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
418 if (bus_dmamem_alloc(isp->isp_dmatag, len, 0, 0, &rspseg, 1, &rsprs,
423 if (bus_dmamem_map(isp->isp_dmatag, &rspseg, rsprs, len,
424 (void *)&isp->isp_result, BUS_DMA_NOWAIT|BUS_DMA_COHERENT)) {
428 if (bus_dmamap_create(isp->isp_dmatag, len, 1, len, 1 << 24,
429 BUS_DMA_NOWAIT, &isp->isp_rsdmap) != 0) {
433 if (bus_dmamap_load(isp->isp_dmatag, isp->isp_rsdmap,
434 isp->isp_result, len, NULL, BUS_DMA_NOWAIT) != 0) {
437 isp->isp_result_dma = isp->isp_rsdmap->dm_segs[0].ds_addr;
442 isp_prt(isp, ISP_LOGERR, "Mailbox DMA Setup Failure");
445 bus_dmamap_unload(isp->isp_dmatag, isp->isp_rsdmap);
448 bus_dmamap_destroy(isp->isp_dmatag, isp->isp_rsdmap);
451 bus_dmamem_unmap(isp->isp_dmatag,
452 isp->isp_result, ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)));
455 bus_dmamem_free(isp->isp_dmatag, &rspseg, rsprs);
459 bus_dmamap_unload(isp->isp_dmatag, isp->isp_rqdmap);
462 bus_dmamap_destroy(isp->isp_dmatag, isp->isp_rqdmap);
465 bus_dmamem_unmap(isp->isp_dmatag,
466 isp->isp_rquest, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)));
469 bus_dmamem_free(isp->isp_dmatag, &reqseg, reqrs);
472 for (i = 0; i < isp->isp_maxcmds; i++) {
473 bus_dmamap_destroy(isp->isp_dmatag, sbc->sbus_dmamap[i]);
476 free(isp->isp_xflist, M_DEVBUF);
477 isp->isp_xflist = NULL;
484 * We're guaranteed that rq->req_handle is a value from 1 to isp->isp_maxcmds.
488 isp_sbus_dmasetup(struct ispsoftc *isp, struct scsipi_xfer *xs, void *arg)
490 struct isp_sbussoftc *sbc = (struct isp_sbussoftc *)isp;
497 hidx = isp_handle_index(isp, rq->req_handle);
520 error = bus_dmamap_load(isp->isp_dmatag, dmap, xs->data, xs->datalen,
523 isp_prt(isp, ISP_LOGWARN, "unable to load DMA (%d)", error);
533 bus_dmamap_sync(isp->isp_dmatag, dmap, 0, dmap->dm_mapsize, flg2);
536 if (isp_send_cmd(isp, rq, dm_segs, nsegs, xs->datalen, ddir) != CMD_QUEUED) {
544 isp_sbus_dmateardown(ispsoftc_t *isp, XS_T *xs, uint32_t handle)
546 struct isp_sbussoftc *sbc = (struct isp_sbussoftc *) isp;
550 hidx = isp_handle_index(isp, handle);
552 isp_xs_prt(isp, xs, ISP_LOGERR, "bad handle on teardown");
556 bus_dmamap_sync(isp->isp_dmatag, dmap, 0,
559 bus_dmamap_unload(isp->isp_dmatag, dmap);