Deleted Added
sdiff udiff text old ( 316084 ) new ( 316145 )
full compact
1/*-
2 * Copyright (c) 1997-2006 by Matthew Jacob
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * SUCH DAMAGE.
25 */
26/*
27 * SBus specific probe and attach routines for Qlogic ISP SCSI adapters.
28 * FreeBSD Version.
29 */
30
31#include <sys/cdefs.h>
32__FBSDID("$FreeBSD: stable/11/sys/dev/isp/isp_sbus.c 316084 2017-03-28 10:11:00Z mav $");
33
34#include <sys/param.h>
35#include <sys/systm.h>
36#include <sys/linker.h>
37#include <sys/firmware.h>
38#include <sys/bus.h>
39#include <sys/kernel.h>
40#include <sys/module.h>

--- 7 unchanged lines hidden (view full) ---

48#include <machine/resource.h>
49#include <sys/rman.h>
50#include <sparc64/sbus/sbusvar.h>
51
52#include <dev/isp/isp_freebsd.h>
53
54static uint32_t isp_sbus_rd_reg(ispsoftc_t *, int);
55static void isp_sbus_wr_reg(ispsoftc_t *, int, uint32_t);
56static int isp_sbus_rd_isr(ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
57static int isp_sbus_mbxdma(ispsoftc_t *);
58static void isp_sbus_mbxdmafree(ispsoftc_t *);
59static int isp_sbus_dmasetup(ispsoftc_t *, XS_T *, void *);
60static void isp_sbus_dumpregs(ispsoftc_t *, const char *);
61
62static struct ispmdvec mdvec = {
63 isp_sbus_rd_isr,
64 isp_sbus_rd_reg,
65 isp_sbus_wr_reg,
66 isp_sbus_mbxdma,
67 isp_sbus_dmasetup,
68 isp_common_dmateardown,
69 NULL,
70 isp_sbus_dumpregs,
71 NULL,

--- 267 unchanged lines hidden (view full) ---

339}
340
341#define IspVirt2Off(a, x) \
342 (((struct isp_sbussoftc *)a)->sbus_poff[((x) & _BLK_REG_MASK) >> \
343 _BLK_REG_SHFT] + ((x) & 0xff))
344
345#define BXR2(isp, off) bus_read_2((isp)->isp_regs, (off))
346
347static int
348isp_sbus_rd_isr(ispsoftc_t *isp, uint16_t *isrp, uint16_t *semap, uint16_t *info)
349{
350 uint16_t isr, sema;
351
352 isr = BXR2(isp, IspVirt2Off(isp, BIU_ISR));
353 sema = BXR2(isp, IspVirt2Off(isp, BIU_SEMA));
354 isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema);
355 isr &= INT_PENDING_MASK(isp);
356 sema &= BIU_SEMA_LOCK;
357 if (isr == 0 && sema == 0) {
358 return (0);
359 }
360 *isrp = isr;
361 if ((*semap = sema) != 0)
362 *info = BXR2(isp, IspVirt2Off(isp, OUTMAILBOX0));
363 return (1);
364}
365
366static uint32_t
367isp_sbus_rd_reg(ispsoftc_t *isp, int regoff)
368{
369 uint16_t rval;
370 struct isp_sbussoftc *sbs = (struct isp_sbussoftc *) isp;
371 int offset = sbs->sbus_poff[(regoff & _BLK_REG_MASK) >> _BLK_REG_SHFT];

--- 325 unchanged lines hidden ---