You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
This commit is contained in:
@@ -638,7 +638,7 @@ int dm_split_args(int *argc, char ***argvp, char *input)
|
||||
static void check_for_valid_limits(struct io_restrictions *rs)
|
||||
{
|
||||
if (!rs->max_sectors)
|
||||
rs->max_sectors = MAX_SECTORS;
|
||||
rs->max_sectors = SAFE_MAX_SECTORS;
|
||||
if (!rs->max_phys_segments)
|
||||
rs->max_phys_segments = MAX_PHYS_SEGMENTS;
|
||||
if (!rs->max_hw_segments)
|
||||
|
||||
@@ -313,13 +313,13 @@ mpt_reply(MPT_ADAPTER *ioc, u32 pa)
|
||||
u32 log_info = le32_to_cpu(mr->u.reply.IOCLogInfo);
|
||||
if (ioc->bus_type == FC)
|
||||
mpt_fc_log_info(ioc, log_info);
|
||||
else if (ioc->bus_type == SCSI)
|
||||
else if (ioc->bus_type == SPI)
|
||||
mpt_sp_log_info(ioc, log_info);
|
||||
else if (ioc->bus_type == SAS)
|
||||
mpt_sas_log_info(ioc, log_info);
|
||||
}
|
||||
if (ioc_stat & MPI_IOCSTATUS_MASK) {
|
||||
if (ioc->bus_type == SCSI &&
|
||||
if (ioc->bus_type == SPI &&
|
||||
cb_idx != mpt_stm_index &&
|
||||
cb_idx != mpt_lan_index)
|
||||
mpt_sp_ioc_info(ioc, (u32)ioc_stat, mf);
|
||||
@@ -1376,7 +1376,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
}
|
||||
else if (pdev->device == MPI_MANUFACTPAGE_DEVID_53C1030) {
|
||||
ioc->prod_name = "LSI53C1030";
|
||||
ioc->bus_type = SCSI;
|
||||
ioc->bus_type = SPI;
|
||||
/* 1030 Chip Fix. Disable Split transactions
|
||||
* for PCIX. Set MOST bits to zero if Rev < C0( = 8).
|
||||
*/
|
||||
@@ -1389,7 +1389,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
}
|
||||
else if (pdev->device == MPI_MANUFACTPAGE_DEVID_1030_53C1035) {
|
||||
ioc->prod_name = "LSI53C1035";
|
||||
ioc->bus_type = SCSI;
|
||||
ioc->bus_type = SPI;
|
||||
}
|
||||
else if (pdev->device == MPI_MANUFACTPAGE_DEVID_SAS1064) {
|
||||
ioc->prod_name = "LSISAS1064";
|
||||
@@ -3042,7 +3042,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
|
||||
/* Clear the internal flash bad bit - autoincrementing register,
|
||||
* so must do two writes.
|
||||
*/
|
||||
if (ioc->bus_type == SCSI) {
|
||||
if (ioc->bus_type == SPI) {
|
||||
/*
|
||||
* 1030 and 1035 H/W errata, workaround to access
|
||||
* the ClearFlashBadSignatureBit
|
||||
@@ -3152,7 +3152,7 @@ KickStart(MPT_ADAPTER *ioc, int force, int sleepFlag)
|
||||
int cnt,cntdn;
|
||||
|
||||
dinitprintk((KERN_WARNING MYNAM ": KickStarting %s!\n", ioc->name));
|
||||
if (ioc->bus_type == SCSI) {
|
||||
if (ioc->bus_type == SPI) {
|
||||
/* Always issue a Msg Unit Reset first. This will clear some
|
||||
* SCSI bus hang conditions.
|
||||
*/
|
||||
@@ -3580,7 +3580,7 @@ initChainBuffers(MPT_ADAPTER *ioc)
|
||||
dinitprintk((KERN_INFO MYNAM ": %s Now numSGE=%d num_sge=%d num_chain=%d\n",
|
||||
ioc->name, numSGE, num_sge, num_chain));
|
||||
|
||||
if (ioc->bus_type == SCSI)
|
||||
if (ioc->bus_type == SPI)
|
||||
num_chain *= MPT_SCSI_CAN_QUEUE;
|
||||
else
|
||||
num_chain *= MPT_FC_CAN_QUEUE;
|
||||
|
||||
@@ -76,8 +76,8 @@
|
||||
#define COPYRIGHT "Copyright (c) 1999-2005 " MODULEAUTHOR
|
||||
#endif
|
||||
|
||||
#define MPT_LINUX_VERSION_COMMON "3.03.04"
|
||||
#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.03.04"
|
||||
#define MPT_LINUX_VERSION_COMMON "3.03.05"
|
||||
#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.03.05"
|
||||
#define WHAT_MAGIC_STRING "@" "(" "#" ")"
|
||||
|
||||
#define show_mptmod_ver(s,ver) \
|
||||
@@ -321,7 +321,7 @@ typedef struct _SYSIF_REGS
|
||||
* Dynamic Multi-Pathing specific stuff...
|
||||
*/
|
||||
|
||||
/* VirtDevice negoFlags field */
|
||||
/* VirtTarget negoFlags field */
|
||||
#define MPT_TARGET_NO_NEGO_WIDE 0x01
|
||||
#define MPT_TARGET_NO_NEGO_SYNC 0x02
|
||||
#define MPT_TARGET_NO_NEGO_QAS 0x04
|
||||
@@ -330,8 +330,7 @@ typedef struct _SYSIF_REGS
|
||||
/*
|
||||
* VirtDevice - FC LUN device or SCSI target device
|
||||
*/
|
||||
typedef struct _VirtDevice {
|
||||
struct scsi_device *device;
|
||||
typedef struct _VirtTarget {
|
||||
u8 tflags;
|
||||
u8 ioc_id;
|
||||
u8 target_id;
|
||||
@@ -342,21 +341,18 @@ typedef struct _VirtDevice {
|
||||
u8 negoFlags; /* bit field, see above */
|
||||
u8 raidVolume; /* set, if RAID Volume */
|
||||
u8 type; /* byte 0 of Inquiry data */
|
||||
u8 cflags; /* controller flags */
|
||||
u8 rsvd1raid;
|
||||
u16 fc_phys_lun;
|
||||
u16 fc_xlat_lun;
|
||||
u32 num_luns;
|
||||
u32 luns[8]; /* Max LUNs is 256 */
|
||||
u8 pad[4];
|
||||
u8 inq_data[8];
|
||||
/* IEEE Registered Extended Identifier
|
||||
obtained via INQUIRY VPD page 0x83 */
|
||||
/* NOTE: Do not separate uniq_prepad and uniq_data
|
||||
as they are treateed as a single entity in the code */
|
||||
u8 uniq_prepad[8];
|
||||
u8 uniq_data[20];
|
||||
u8 pad2[4];
|
||||
} VirtTarget;
|
||||
|
||||
typedef struct _VirtDevice {
|
||||
VirtTarget *vtarget;
|
||||
u8 ioc_id;
|
||||
u8 bus_id;
|
||||
u8 target_id;
|
||||
u8 configured_lun;
|
||||
u32 lun;
|
||||
} VirtDevice;
|
||||
|
||||
/*
|
||||
@@ -903,7 +899,7 @@ typedef struct _MPT_LOCAL_REPLY {
|
||||
|
||||
typedef enum {
|
||||
FC,
|
||||
SCSI,
|
||||
SPI,
|
||||
SAS
|
||||
} BUS_TYPE;
|
||||
|
||||
@@ -912,7 +908,7 @@ typedef struct _MPT_SCSI_HOST {
|
||||
int port;
|
||||
u32 pad0;
|
||||
struct scsi_cmnd **ScsiLookup;
|
||||
VirtDevice **Targets;
|
||||
VirtTarget **Targets;
|
||||
MPT_LOCAL_REPLY *pLocal; /* used for internal commands */
|
||||
struct timer_list timer;
|
||||
/* Pool of memory for holding SCpnts before doing
|
||||
|
||||
@@ -1245,7 +1245,7 @@ mptctl_gettargetinfo (unsigned long arg)
|
||||
MPT_ADAPTER *ioc;
|
||||
struct Scsi_Host *sh;
|
||||
MPT_SCSI_HOST *hd;
|
||||
VirtDevice *vdev;
|
||||
VirtTarget *vdev;
|
||||
char *pmem;
|
||||
int *pdata;
|
||||
IOCPage2_t *pIoc2;
|
||||
@@ -1822,7 +1822,7 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
|
||||
case MPI_FUNCTION_SCSI_IO_REQUEST:
|
||||
if (ioc->sh) {
|
||||
SCSIIORequest_t *pScsiReq = (SCSIIORequest_t *) mf;
|
||||
VirtDevice *pTarget = NULL;
|
||||
VirtTarget *pTarget = NULL;
|
||||
MPT_SCSI_HOST *hd = NULL;
|
||||
int qtag = MPI_SCSIIO_CONTROL_UNTAGGED;
|
||||
int scsidir = 0;
|
||||
|
||||
@@ -84,13 +84,16 @@ static int mptfcTaskCtx = -1;
|
||||
static int mptfcInternalCtx = -1; /* Used only for internal commands */
|
||||
|
||||
static struct scsi_host_template mptfc_driver_template = {
|
||||
.module = THIS_MODULE,
|
||||
.proc_name = "mptfc",
|
||||
.proc_info = mptscsih_proc_info,
|
||||
.name = "MPT FC Host",
|
||||
.info = mptscsih_info,
|
||||
.queuecommand = mptscsih_qcmd,
|
||||
.target_alloc = mptscsih_target_alloc,
|
||||
.slave_alloc = mptscsih_slave_alloc,
|
||||
.slave_configure = mptscsih_slave_configure,
|
||||
.target_destroy = mptscsih_target_destroy,
|
||||
.slave_destroy = mptscsih_slave_destroy,
|
||||
.change_queue_depth = mptscsih_change_queue_depth,
|
||||
.eh_abort_handler = mptscsih_abort,
|
||||
@@ -167,13 +170,15 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
printk(MYIOC_s_WARN_FMT
|
||||
"Skipping because it's not operational!\n",
|
||||
ioc->name);
|
||||
return -ENODEV;
|
||||
error = -ENODEV;
|
||||
goto out_mptfc_probe;
|
||||
}
|
||||
|
||||
if (!ioc->active) {
|
||||
printk(MYIOC_s_WARN_FMT "Skipping because it's disabled!\n",
|
||||
ioc->name);
|
||||
return -ENODEV;
|
||||
error = -ENODEV;
|
||||
goto out_mptfc_probe;
|
||||
}
|
||||
|
||||
/* Sanity check - ensure at least 1 port is INITIATOR capable
|
||||
@@ -198,7 +203,8 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
printk(MYIOC_s_WARN_FMT
|
||||
"Unable to register controller with SCSI subsystem\n",
|
||||
ioc->name);
|
||||
return -1;
|
||||
error = -1;
|
||||
goto out_mptfc_probe;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&ioc->FreeQlock, flags);
|
||||
@@ -266,7 +272,7 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
mem = kmalloc(sz, GFP_ATOMIC);
|
||||
if (mem == NULL) {
|
||||
error = -ENOMEM;
|
||||
goto mptfc_probe_failed;
|
||||
goto out_mptfc_probe;
|
||||
}
|
||||
|
||||
memset(mem, 0, sz);
|
||||
@@ -284,14 +290,14 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
mem = kmalloc(sz, GFP_ATOMIC);
|
||||
if (mem == NULL) {
|
||||
error = -ENOMEM;
|
||||
goto mptfc_probe_failed;
|
||||
goto out_mptfc_probe;
|
||||
}
|
||||
|
||||
memset(mem, 0, sz);
|
||||
hd->Targets = (VirtDevice **) mem;
|
||||
hd->Targets = (VirtTarget **) mem;
|
||||
|
||||
dprintk((KERN_INFO
|
||||
" Targets @ %p, sz=%d\n", hd->Targets, sz));
|
||||
" vdev @ %p, sz=%d\n", hd->Targets, sz));
|
||||
|
||||
/* Clear the TM flags
|
||||
*/
|
||||
@@ -330,13 +336,13 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
if(error) {
|
||||
dprintk((KERN_ERR MYNAM
|
||||
"scsi_add_host failed\n"));
|
||||
goto mptfc_probe_failed;
|
||||
goto out_mptfc_probe;
|
||||
}
|
||||
|
||||
scsi_scan_host(sh);
|
||||
return 0;
|
||||
|
||||
mptfc_probe_failed:
|
||||
out_mptfc_probe:
|
||||
|
||||
mptscsih_remove(pdev);
|
||||
return error;
|
||||
|
||||
@@ -228,31 +228,35 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1)
|
||||
* implement ->target_alloc.
|
||||
*/
|
||||
static int
|
||||
mptsas_slave_alloc(struct scsi_device *device)
|
||||
mptsas_slave_alloc(struct scsi_device *sdev)
|
||||
{
|
||||
struct Scsi_Host *host = device->host;
|
||||
struct Scsi_Host *host = sdev->host;
|
||||
MPT_SCSI_HOST *hd = (MPT_SCSI_HOST *)host->hostdata;
|
||||
struct sas_rphy *rphy;
|
||||
struct mptsas_portinfo *p;
|
||||
VirtTarget *vtarget;
|
||||
VirtDevice *vdev;
|
||||
uint target = device->id;
|
||||
struct scsi_target *starget;
|
||||
int i;
|
||||
|
||||
if ((vdev = hd->Targets[target]) != NULL)
|
||||
goto out;
|
||||
|
||||
vdev = kmalloc(sizeof(VirtDevice), GFP_KERNEL);
|
||||
if (!vdev) {
|
||||
printk(MYIOC_s_ERR_FMT "slave_alloc kmalloc(%zd) FAILED!\n",
|
||||
hd->ioc->name, sizeof(VirtDevice));
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
memset(vdev, 0, sizeof(VirtDevice));
|
||||
vdev->tflags = MPT_TARGET_FLAGS_Q_YES|MPT_TARGET_FLAGS_VALID_INQUIRY;
|
||||
vdev->ioc_id = hd->ioc->id;
|
||||
sdev->hostdata = vdev;
|
||||
starget = scsi_target(sdev);
|
||||
vtarget = starget->hostdata;
|
||||
vdev->vtarget = vtarget;
|
||||
if (vtarget->num_luns == 0) {
|
||||
vtarget->tflags = MPT_TARGET_FLAGS_Q_YES|MPT_TARGET_FLAGS_VALID_INQUIRY;
|
||||
hd->Targets[sdev->id] = vtarget;
|
||||
}
|
||||
|
||||
rphy = dev_to_rphy(device->sdev_target->dev.parent);
|
||||
rphy = dev_to_rphy(sdev->sdev_target->dev.parent);
|
||||
list_for_each_entry(p, &hd->ioc->sas_topology, list) {
|
||||
for (i = 0; i < p->num_phys; i++) {
|
||||
if (p->phy_info[i].attached.sas_address ==
|
||||
@@ -260,7 +264,7 @@ mptsas_slave_alloc(struct scsi_device *device)
|
||||
vdev->target_id =
|
||||
p->phy_info[i].attached.target;
|
||||
vdev->bus_id = p->phy_info[i].attached.bus;
|
||||
hd->Targets[device->id] = vdev;
|
||||
vdev->lun = sdev->lun;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@@ -271,19 +275,24 @@ mptsas_slave_alloc(struct scsi_device *device)
|
||||
return -ENODEV;
|
||||
|
||||
out:
|
||||
vdev->num_luns++;
|
||||
device->hostdata = vdev;
|
||||
vtarget->ioc_id = vdev->ioc_id;
|
||||
vtarget->target_id = vdev->target_id;
|
||||
vtarget->bus_id = vdev->bus_id;
|
||||
vtarget->num_luns++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct scsi_host_template mptsas_driver_template = {
|
||||
.module = THIS_MODULE,
|
||||
.proc_name = "mptsas",
|
||||
.proc_info = mptscsih_proc_info,
|
||||
.name = "MPT SPI Host",
|
||||
.info = mptscsih_info,
|
||||
.queuecommand = mptscsih_qcmd,
|
||||
.target_alloc = mptscsih_target_alloc,
|
||||
.slave_alloc = mptsas_slave_alloc,
|
||||
.slave_configure = mptscsih_slave_configure,
|
||||
.target_destroy = mptscsih_target_destroy,
|
||||
.slave_destroy = mptscsih_slave_destroy,
|
||||
.change_queue_depth = mptscsih_change_queue_depth,
|
||||
.eh_abort_handler = mptscsih_abort,
|
||||
@@ -986,7 +995,6 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index)
|
||||
goto out_free_port_info;
|
||||
|
||||
list_add_tail(&port_info->list, &ioc->sas_topology);
|
||||
|
||||
for (i = 0; i < port_info->num_phys; i++) {
|
||||
mptsas_sas_phy_pg0(ioc, &port_info->phy_info[i],
|
||||
(MPI_SAS_PHY_PGAD_FORM_PHY_NUMBER <<
|
||||
@@ -1133,13 +1141,15 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
printk(MYIOC_s_WARN_FMT
|
||||
"Skipping because it's not operational!\n",
|
||||
ioc->name);
|
||||
return -ENODEV;
|
||||
error = -ENODEV;
|
||||
goto out_mptsas_probe;
|
||||
}
|
||||
|
||||
if (!ioc->active) {
|
||||
printk(MYIOC_s_WARN_FMT "Skipping because it's disabled!\n",
|
||||
ioc->name);
|
||||
return -ENODEV;
|
||||
error = -ENODEV;
|
||||
goto out_mptsas_probe;
|
||||
}
|
||||
|
||||
/* Sanity check - ensure at least 1 port is INITIATOR capable
|
||||
@@ -1163,7 +1173,8 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
printk(MYIOC_s_WARN_FMT
|
||||
"Unable to register controller with SCSI subsystem\n",
|
||||
ioc->name);
|
||||
return -1;
|
||||
error = -1;
|
||||
goto out_mptsas_probe;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&ioc->FreeQlock, flags);
|
||||
@@ -1237,7 +1248,7 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
mem = kmalloc(sz, GFP_ATOMIC);
|
||||
if (mem == NULL) {
|
||||
error = -ENOMEM;
|
||||
goto mptsas_probe_failed;
|
||||
goto out_mptsas_probe;
|
||||
}
|
||||
|
||||
memset(mem, 0, sz);
|
||||
@@ -1255,14 +1266,14 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
mem = kmalloc(sz, GFP_ATOMIC);
|
||||
if (mem == NULL) {
|
||||
error = -ENOMEM;
|
||||
goto mptsas_probe_failed;
|
||||
goto out_mptsas_probe;
|
||||
}
|
||||
|
||||
memset(mem, 0, sz);
|
||||
hd->Targets = (VirtDevice **) mem;
|
||||
hd->Targets = (VirtTarget **) mem;
|
||||
|
||||
dprintk((KERN_INFO
|
||||
" Targets @ %p, sz=%d\n", hd->Targets, sz));
|
||||
" vtarget @ %p, sz=%d\n", hd->Targets, sz));
|
||||
|
||||
/* Clear the TM flags
|
||||
*/
|
||||
@@ -1308,14 +1319,14 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
if (error) {
|
||||
dprintk((KERN_ERR MYNAM
|
||||
"scsi_add_host failed\n"));
|
||||
goto mptsas_probe_failed;
|
||||
goto out_mptsas_probe;
|
||||
}
|
||||
|
||||
mptsas_scan_sas_topology(ioc);
|
||||
|
||||
return 0;
|
||||
|
||||
mptsas_probe_failed:
|
||||
out_mptsas_probe:
|
||||
|
||||
mptscsih_remove(pdev);
|
||||
return error;
|
||||
|
||||
+480
-492
File diff suppressed because it is too large
Load Diff
@@ -91,7 +91,9 @@ extern int mptscsih_resume(struct pci_dev *pdev);
|
||||
extern int mptscsih_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset, int length, int func);
|
||||
extern const char * mptscsih_info(struct Scsi_Host *SChost);
|
||||
extern int mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *));
|
||||
extern int mptscsih_target_alloc(struct scsi_target *starget);
|
||||
extern int mptscsih_slave_alloc(struct scsi_device *device);
|
||||
extern void mptscsih_target_destroy(struct scsi_target *starget);
|
||||
extern void mptscsih_slave_destroy(struct scsi_device *device);
|
||||
extern int mptscsih_slave_configure(struct scsi_device *device);
|
||||
extern int mptscsih_abort(struct scsi_cmnd * SCpnt);
|
||||
|
||||
@@ -103,13 +103,16 @@ static int mptspiTaskCtx = -1;
|
||||
static int mptspiInternalCtx = -1; /* Used only for internal commands */
|
||||
|
||||
static struct scsi_host_template mptspi_driver_template = {
|
||||
.module = THIS_MODULE,
|
||||
.proc_name = "mptspi",
|
||||
.proc_info = mptscsih_proc_info,
|
||||
.name = "MPT SPI Host",
|
||||
.info = mptscsih_info,
|
||||
.queuecommand = mptscsih_qcmd,
|
||||
.target_alloc = mptscsih_target_alloc,
|
||||
.slave_alloc = mptscsih_slave_alloc,
|
||||
.slave_configure = mptscsih_slave_configure,
|
||||
.target_destroy = mptscsih_target_destroy,
|
||||
.slave_destroy = mptscsih_slave_destroy,
|
||||
.change_queue_depth = mptscsih_change_queue_depth,
|
||||
.eh_abort_handler = mptscsih_abort,
|
||||
@@ -177,13 +180,15 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
printk(MYIOC_s_WARN_FMT
|
||||
"Skipping because it's not operational!\n",
|
||||
ioc->name);
|
||||
return -ENODEV;
|
||||
error = -ENODEV;
|
||||
goto out_mptspi_probe;
|
||||
}
|
||||
|
||||
if (!ioc->active) {
|
||||
printk(MYIOC_s_WARN_FMT "Skipping because it's disabled!\n",
|
||||
ioc->name);
|
||||
return -ENODEV;
|
||||
error = -ENODEV;
|
||||
goto out_mptspi_probe;
|
||||
}
|
||||
|
||||
/* Sanity check - ensure at least 1 port is INITIATOR capable
|
||||
@@ -208,7 +213,8 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
printk(MYIOC_s_WARN_FMT
|
||||
"Unable to register controller with SCSI subsystem\n",
|
||||
ioc->name);
|
||||
return -1;
|
||||
error = -1;
|
||||
goto out_mptspi_probe;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&ioc->FreeQlock, flags);
|
||||
@@ -286,7 +292,7 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
mem = kmalloc(sz, GFP_ATOMIC);
|
||||
if (mem == NULL) {
|
||||
error = -ENOMEM;
|
||||
goto mptspi_probe_failed;
|
||||
goto out_mptspi_probe;
|
||||
}
|
||||
|
||||
memset(mem, 0, sz);
|
||||
@@ -304,14 +310,14 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
mem = kmalloc(sz, GFP_ATOMIC);
|
||||
if (mem == NULL) {
|
||||
error = -ENOMEM;
|
||||
goto mptspi_probe_failed;
|
||||
goto out_mptspi_probe;
|
||||
}
|
||||
|
||||
memset(mem, 0, sz);
|
||||
hd->Targets = (VirtDevice **) mem;
|
||||
hd->Targets = (VirtTarget **) mem;
|
||||
|
||||
dprintk((KERN_INFO
|
||||
" Targets @ %p, sz=%d\n", hd->Targets, sz));
|
||||
" vdev @ %p, sz=%d\n", hd->Targets, sz));
|
||||
|
||||
/* Clear the TM flags
|
||||
*/
|
||||
@@ -385,13 +391,13 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
if(error) {
|
||||
dprintk((KERN_ERR MYNAM
|
||||
"scsi_add_host failed\n"));
|
||||
goto mptspi_probe_failed;
|
||||
goto out_mptspi_probe;
|
||||
}
|
||||
|
||||
scsi_scan_host(sh);
|
||||
return 0;
|
||||
|
||||
mptspi_probe_failed:
|
||||
out_mptspi_probe:
|
||||
|
||||
mptscsih_remove(pdev);
|
||||
return error;
|
||||
|
||||
@@ -857,7 +857,7 @@ process_extended_message(struct Scsi_Host *host,
|
||||
printk(KERN_INFO "scsi%d (%d:%d): Unexpected message %s: ",
|
||||
host->host_no, pun, lun,
|
||||
NCR_700_phase[(dsps & 0xf00) >> 8]);
|
||||
scsi_print_msg(hostdata->msgin);
|
||||
spi_print_msg(hostdata->msgin);
|
||||
printk("\n");
|
||||
/* just reject it */
|
||||
hostdata->msgout[0] = A_REJECT_MSG;
|
||||
@@ -887,7 +887,7 @@ process_message(struct Scsi_Host *host, struct NCR_700_Host_Parameters *hostdata
|
||||
#ifdef NCR_700_DEBUG
|
||||
printk("scsi%d (%d:%d): message %s: ", host->host_no, pun, lun,
|
||||
NCR_700_phase[(dsps & 0xf00) >> 8]);
|
||||
scsi_print_msg(hostdata->msgin);
|
||||
spi_print_msg(hostdata->msgin);
|
||||
printk("\n");
|
||||
#endif
|
||||
|
||||
@@ -939,7 +939,7 @@ process_message(struct Scsi_Host *host, struct NCR_700_Host_Parameters *hostdata
|
||||
host->host_no, pun, lun,
|
||||
NCR_700_phase[(dsps & 0xf00) >> 8]);
|
||||
|
||||
scsi_print_msg(hostdata->msgin);
|
||||
spi_print_msg(hostdata->msgin);
|
||||
printk("\n");
|
||||
/* just reject it */
|
||||
hostdata->msgout[0] = A_REJECT_MSG;
|
||||
|
||||
+13
-9
@@ -238,21 +238,23 @@ struct NCR_700_Host_Parameters {
|
||||
#ifdef CONFIG_53C700_LE_ON_BE
|
||||
#define bE (hostdata->force_le_on_be ? 0 : 3)
|
||||
#define bSWAP (hostdata->force_le_on_be)
|
||||
/* This is terrible, but there's no raw version of ioread32. That means
|
||||
* that on a be board we swap twice (once in ioread32 and once again to
|
||||
* get the value correct) */
|
||||
#define bS_to_io(x) ((hostdata->force_le_on_be) ? (x) : cpu_to_le32(x))
|
||||
#define bEBus (!hostdata->force_le_on_be)
|
||||
#elif defined(__BIG_ENDIAN)
|
||||
#define bE 3
|
||||
#define bSWAP 0
|
||||
#define bS_to_io(x) (x)
|
||||
#elif defined(__LITTLE_ENDIAN)
|
||||
#define bE 0
|
||||
#define bSWAP 0
|
||||
#define bS_to_io(x) (x)
|
||||
#else
|
||||
#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined, did you include byteorder.h?"
|
||||
#endif
|
||||
#ifndef bEBus
|
||||
#ifdef CONFIG_53C700_BE_BUS
|
||||
#define bEBus 1
|
||||
#else
|
||||
#define bEBus 0
|
||||
#endif
|
||||
#endif
|
||||
#define bS_to_cpu(x) (bSWAP ? le32_to_cpu(x) : (x))
|
||||
#define bS_to_host(x) (bSWAP ? cpu_to_le32(x) : (x))
|
||||
|
||||
@@ -466,14 +468,15 @@ NCR_700_readl(struct Scsi_Host *host, __u32 reg)
|
||||
{
|
||||
const struct NCR_700_Host_Parameters *hostdata
|
||||
= (struct NCR_700_Host_Parameters *)host->hostdata[0];
|
||||
__u32 value = ioread32(hostdata->base + reg);
|
||||
__u32 value = bEBus ? ioread32be(hostdata->base + reg) :
|
||||
ioread32(hostdata->base + reg);
|
||||
#if 1
|
||||
/* sanity check the register */
|
||||
if((reg & 0x3) != 0)
|
||||
BUG();
|
||||
#endif
|
||||
|
||||
return bS_to_io(value);
|
||||
return value;
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -497,7 +500,8 @@ NCR_700_writel(__u32 value, struct Scsi_Host *host, __u32 reg)
|
||||
BUG();
|
||||
#endif
|
||||
|
||||
iowrite32(bS_to_io(value), hostdata->base + reg);
|
||||
bEBus ? iowrite32be(value, hostdata->base + reg):
|
||||
iowrite32(value, hostdata->base + reg);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -282,6 +282,7 @@
|
||||
#include "scsi.h"
|
||||
#include <scsi/scsi_dbg.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/scsi_transport_spi.h>
|
||||
#include "53c7xx.h"
|
||||
#include <linux/stat.h>
|
||||
#include <linux/stddef.h>
|
||||
@@ -1724,7 +1725,7 @@ NCR53c7xx_run_tests (struct Scsi_Host *host) {
|
||||
printk ("scsi%d : status ", host->host_no);
|
||||
scsi_print_status (status);
|
||||
printk ("\nscsi%d : message ", host->host_no);
|
||||
scsi_print_msg (&msg);
|
||||
spi_print_msg(&msg);
|
||||
printk ("\n");
|
||||
} else if (hostdata->test_completed == 3) {
|
||||
printk("scsi%d : test 2 no connection with target %d\n",
|
||||
@@ -2313,7 +2314,7 @@ NCR53c7x0_dstat_sir_intr (struct Scsi_Host *host, struct
|
||||
printk ("scsi%d : received message", host->host_no);
|
||||
if (c)
|
||||
printk (" from target %d lun %d ", c->device->id, c->device->lun);
|
||||
scsi_print_msg ((unsigned char *) hostdata->msg_buf);
|
||||
spi_print_msg((unsigned char *) hostdata->msg_buf);
|
||||
printk("\n");
|
||||
}
|
||||
|
||||
@@ -5540,7 +5541,7 @@ print_dsa (struct Scsi_Host *host, u32 *dsa, const char *prefix) {
|
||||
i > 0 && !check_address ((unsigned long) ptr, 1);
|
||||
ptr += len, i -= len) {
|
||||
printk(" ");
|
||||
len = scsi_print_msg (ptr);
|
||||
len = spi_print_msg(ptr);
|
||||
printk("\n");
|
||||
if (!len)
|
||||
break;
|
||||
|
||||
@@ -336,6 +336,7 @@ config SCSI_ACARD
|
||||
config SCSI_AHA152X
|
||||
tristate "Adaptec AHA152X/2825 support"
|
||||
depends on ISA && SCSI && !64BIT
|
||||
select SCSI_SPI_ATTRS
|
||||
---help---
|
||||
This is a driver for the AHA-1510, AHA-1520, AHA-1522, and AHA-2825
|
||||
SCSI host adapters. It also works for the AVA-1505, but the IRQ etc.
|
||||
@@ -623,6 +624,7 @@ config SCSI_OMIT_FLASHPOINT
|
||||
config SCSI_DMX3191D
|
||||
tristate "DMX3191D SCSI support"
|
||||
depends on PCI && SCSI
|
||||
select SCSI_SPI_ATTRS
|
||||
help
|
||||
This is support for Domex DMX3191D SCSI Host Adapters.
|
||||
|
||||
@@ -632,6 +634,7 @@ config SCSI_DMX3191D
|
||||
config SCSI_DTC3280
|
||||
tristate "DTC3180/3280 SCSI support"
|
||||
depends on ISA && SCSI
|
||||
select SCSI_SPI_ATTRS
|
||||
help
|
||||
This is support for DTC 3180/3280 SCSI Host Adapters. Please read
|
||||
the SCSI-HOWTO, available from
|
||||
@@ -752,6 +755,7 @@ config SCSI_GDTH
|
||||
config SCSI_GENERIC_NCR5380
|
||||
tristate "Generic NCR5380/53c400 SCSI PIO support"
|
||||
depends on ISA && SCSI
|
||||
select SCSI_SPI_ATTRS
|
||||
---help---
|
||||
This is a driver for the old NCR 53c80 series of SCSI controllers
|
||||
on boards using PIO. Most boards such as the Trantor T130 fit this
|
||||
@@ -771,6 +775,7 @@ config SCSI_GENERIC_NCR5380
|
||||
config SCSI_GENERIC_NCR5380_MMIO
|
||||
tristate "Generic NCR5380/53c400 SCSI MMIO support"
|
||||
depends on ISA && SCSI
|
||||
select SCSI_SPI_ATTRS
|
||||
---help---
|
||||
This is a driver for the old NCR 53c80 series of SCSI controllers
|
||||
on boards using memory mapped I/O.
|
||||
@@ -1254,6 +1259,7 @@ config SCSI_MCA_53C9X
|
||||
config SCSI_PAS16
|
||||
tristate "PAS16 SCSI support"
|
||||
depends on ISA && SCSI
|
||||
select SCSI_SPI_ATTRS
|
||||
---help---
|
||||
This is support for a SCSI host adapter. It is explained in section
|
||||
3.10 of the SCSI-HOWTO, available from
|
||||
@@ -1423,6 +1429,7 @@ config SCSI_DC390T
|
||||
config SCSI_T128
|
||||
tristate "Trantor T128/T128F/T228 SCSI support"
|
||||
depends on ISA && SCSI
|
||||
select SCSI_SPI_ATTRS
|
||||
---help---
|
||||
This is support for a SCSI host adapter. It is explained in section
|
||||
3.11 of the SCSI-HOWTO, available from
|
||||
@@ -1681,6 +1688,7 @@ config OKTAGON_SCSI
|
||||
config ATARI_SCSI
|
||||
tristate "Atari native SCSI support"
|
||||
depends on ATARI && SCSI && BROKEN
|
||||
select SCSI_SPI_ATTRS
|
||||
---help---
|
||||
If you have an Atari with built-in NCR5380 SCSI controller (TT,
|
||||
Falcon, ...) say Y to get it supported. Of course also, if you have
|
||||
@@ -1722,6 +1730,7 @@ config TT_DMA_EMUL
|
||||
config MAC_SCSI
|
||||
bool "Macintosh NCR5380 SCSI"
|
||||
depends on MAC && SCSI=y
|
||||
select SCSI_SPI_ATTRS
|
||||
help
|
||||
This is the NCR 5380 SCSI controller included on most of the 68030
|
||||
based Macintoshes. If you have one of these say Y and read the
|
||||
@@ -1743,6 +1752,7 @@ config SCSI_MAC_ESP
|
||||
config MVME147_SCSI
|
||||
bool "WD33C93 SCSI driver for MVME147"
|
||||
depends on MVME147 && SCSI=y
|
||||
select SCSI_SPI_ATTRS
|
||||
help
|
||||
Support for the on-board SCSI controller on the Motorola MVME147
|
||||
single-board computer.
|
||||
@@ -1750,6 +1760,7 @@ config MVME147_SCSI
|
||||
config MVME16x_SCSI
|
||||
bool "NCR53C710 SCSI driver for MVME16x"
|
||||
depends on MVME16x && SCSI && BROKEN
|
||||
select SCSI_SPI_ATTRS
|
||||
help
|
||||
The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710
|
||||
SCSI controller chip. Almost everyone using one of these boards
|
||||
@@ -1758,6 +1769,7 @@ config MVME16x_SCSI
|
||||
config BVME6000_SCSI
|
||||
bool "NCR53C710 SCSI driver for BVME6000"
|
||||
depends on BVME6000 && SCSI && BROKEN
|
||||
select SCSI_SPI_ATTRS
|
||||
help
|
||||
The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710
|
||||
SCSI controller chip. Almost everyone using one of these boards
|
||||
@@ -1774,6 +1786,7 @@ config SCSI_NCR53C7xx_FAST
|
||||
config SUN3_SCSI
|
||||
tristate "Sun3 NCR5380 SCSI"
|
||||
depends on SUN3 && SCSI && BROKEN
|
||||
select SCSI_SPI_ATTRS
|
||||
help
|
||||
This option will enable support for the OBIO (onboard io) NCR5380
|
||||
SCSI controller found in the Sun 3/50 and 3/60, as well as for
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
* the high level code.
|
||||
*/
|
||||
#include <scsi/scsi_dbg.h>
|
||||
#include <scsi/scsi_transport_spi.h>
|
||||
|
||||
#ifndef NDEBUG
|
||||
#define NDEBUG 0
|
||||
@@ -2377,7 +2378,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) {
|
||||
* 3..length+1 arguments
|
||||
*
|
||||
* Start the extended message buffer with the EXTENDED_MESSAGE
|
||||
* byte, since scsi_print_msg() wants the whole thing.
|
||||
* byte, since spi_print_msg() wants the whole thing.
|
||||
*/
|
||||
extended_msg[0] = EXTENDED_MESSAGE;
|
||||
/* Accept first byte by clearing ACK */
|
||||
@@ -2424,7 +2425,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) {
|
||||
default:
|
||||
if (!tmp) {
|
||||
printk("scsi%d: rejecting message ", instance->host_no);
|
||||
scsi_print_msg(extended_msg);
|
||||
spi_print_msg(extended_msg);
|
||||
printk("\n");
|
||||
} else if (tmp != EXTENDED_MESSAGE)
|
||||
scmd_printk(KERN_INFO, cmd,
|
||||
@@ -2560,7 +2561,7 @@ static void NCR5380_reselect(struct Scsi_Host *instance) {
|
||||
|
||||
if (!(msg[0] & 0x80)) {
|
||||
printk(KERN_ERR "scsi%d : expecting IDENTIFY message, got ", instance->host_no);
|
||||
scsi_print_msg(msg);
|
||||
spi_print_msg(msg);
|
||||
abort = 1;
|
||||
} else {
|
||||
/* Accept message by clearing ACK */
|
||||
|
||||
@@ -259,6 +259,7 @@
|
||||
#include "scsi.h"
|
||||
#include <scsi/scsi_dbg.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/scsi_transport_spi.h>
|
||||
#include "aha152x.h"
|
||||
|
||||
|
||||
@@ -1845,7 +1846,7 @@ static void msgi_run(struct Scsi_Host *shpnt)
|
||||
#if defined(AHA152X_DEBUG)
|
||||
if (HOSTDATA(shpnt)->debug & debug_msgi) {
|
||||
printk(INFO_LEAD "inbound message %02x ", CMDINFO(CURRENT_SC), MSGI(0));
|
||||
scsi_print_msg(&MSGI(0));
|
||||
spi_print_msg(&MSGI(0));
|
||||
printk("\n");
|
||||
}
|
||||
#endif
|
||||
@@ -1933,7 +1934,7 @@ static void msgi_run(struct Scsi_Host *shpnt)
|
||||
break;
|
||||
|
||||
printk(INFO_LEAD, CMDINFO(CURRENT_SC));
|
||||
scsi_print_msg(&MSGI(0));
|
||||
spi_print_msg(&MSGI(0));
|
||||
printk("\n");
|
||||
|
||||
ticks = (MSGI(3) * 4 + 49) / 50;
|
||||
@@ -2031,7 +2032,7 @@ static void msgo_init(struct Scsi_Host *shpnt)
|
||||
int i;
|
||||
|
||||
printk(DEBUG_LEAD "messages( ", CMDINFO(CURRENT_SC));
|
||||
for (i=0; i<MSGOLEN; i+=scsi_print_msg(&MSGO(i)), printk(" "))
|
||||
for (i=0; i<MSGOLEN; i+=spi_print_msg(&MSGO(i)), printk(" "))
|
||||
;
|
||||
printk(")\n");
|
||||
}
|
||||
|
||||
@@ -1064,6 +1064,7 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct scsi_host_template *templa
|
||||
struct Scsi_Host *host;
|
||||
char *new_name;
|
||||
u_long s;
|
||||
int retval;
|
||||
|
||||
template->name = ahd->description;
|
||||
host = scsi_host_alloc(template, sizeof(struct ahd_softc *));
|
||||
@@ -1096,9 +1097,15 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct scsi_host_template *templa
|
||||
|
||||
host->transportt = ahd_linux_transport_template;
|
||||
|
||||
scsi_add_host(host, &ahd->dev_softc->dev); /* XXX handle failure */
|
||||
retval = scsi_add_host(host, &ahd->dev_softc->dev);
|
||||
if (retval) {
|
||||
printk(KERN_WARNING "aic79xx: scsi_add_host failed\n");
|
||||
scsi_host_put(host);
|
||||
return retval;
|
||||
}
|
||||
|
||||
scsi_scan_host(host);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
|
||||
@@ -1061,10 +1061,11 @@ uint32_t aic7xxx_verbose;
|
||||
int
|
||||
ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *template)
|
||||
{
|
||||
char buf[80];
|
||||
struct Scsi_Host *host;
|
||||
char buf[80];
|
||||
struct Scsi_Host *host;
|
||||
char *new_name;
|
||||
u_long s;
|
||||
u_long s;
|
||||
int retval;
|
||||
|
||||
template->name = ahc->description;
|
||||
host = scsi_host_alloc(template, sizeof(struct ahc_softc *));
|
||||
@@ -1097,9 +1098,16 @@ ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *templa
|
||||
|
||||
host->transportt = ahc_linux_transport_template;
|
||||
|
||||
scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL)); /* XXX handle failure */
|
||||
retval = scsi_add_host(host,
|
||||
(ahc->dev_softc ? &ahc->dev_softc->dev : NULL));
|
||||
if (retval) {
|
||||
printk(KERN_WARNING "aic7xxx: scsi_add_host failed\n");
|
||||
scsi_host_put(host);
|
||||
return retval;
|
||||
}
|
||||
|
||||
scsi_scan_host(host);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
config SCSI_ACORNSCSI_3
|
||||
tristate "Acorn SCSI card (aka30) support"
|
||||
depends on ARCH_ACORN && SCSI && BROKEN
|
||||
select SCSI_SPI_ATTRS
|
||||
help
|
||||
This enables support for the Acorn SCSI card (aka30). If you have an
|
||||
Acorn system with one of these, say Y. If unsure, say N.
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
#include "../scsi.h"
|
||||
#include <scsi/scsi_dbg.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/scsi_transport_spi.h>
|
||||
#include "acornscsi.h"
|
||||
#include "msgqueue.h"
|
||||
#include "scsi.h"
|
||||
@@ -1370,7 +1371,7 @@ void acornscsi_sendmessage(AS_Host *host)
|
||||
|
||||
host->scsi.last_message = msg->msg[0];
|
||||
#if (DEBUG & DEBUG_MESSAGES)
|
||||
scsi_print_msg(msg->msg);
|
||||
spi_print_msg(msg->msg);
|
||||
#endif
|
||||
break;
|
||||
|
||||
@@ -1392,7 +1393,7 @@ void acornscsi_sendmessage(AS_Host *host)
|
||||
while ((msg = msgqueue_getmsg(&host->scsi.msgs, msgnr++)) != NULL) {
|
||||
unsigned int i;
|
||||
#if (DEBUG & DEBUG_MESSAGES)
|
||||
scsi_print_msg(msg);
|
||||
spi_print_msg(msg);
|
||||
#endif
|
||||
i = 0;
|
||||
if (acornscsi_write_pio(host, msg->msg, &i, msg->length, 1000000))
|
||||
@@ -1488,7 +1489,7 @@ void acornscsi_message(AS_Host *host)
|
||||
#if (DEBUG & DEBUG_MESSAGES)
|
||||
printk("scsi%d.%c: message in: ",
|
||||
host->host->host_no, acornscsi_target(host));
|
||||
scsi_print_msg(message);
|
||||
spi_print_msg(message);
|
||||
printk("\n");
|
||||
#endif
|
||||
|
||||
|
||||
@@ -74,6 +74,7 @@
|
||||
* the high level code.
|
||||
*/
|
||||
#include <scsi/scsi_dbg.h>
|
||||
#include <scsi/scsi_transport_spi.h>
|
||||
|
||||
#if (NDEBUG & NDEBUG_LISTS)
|
||||
#define LIST(x,y) \
|
||||
@@ -2355,7 +2356,7 @@ static void NCR5380_information_transfer (struct Scsi_Host *instance)
|
||||
* 3..length+1 arguments
|
||||
*
|
||||
* Start the extended message buffer with the EXTENDED_MESSAGE
|
||||
* byte, since scsi_print_msg() wants the whole thing.
|
||||
* byte, since spi_print_msg() wants the whole thing.
|
||||
*/
|
||||
extended_msg[0] = EXTENDED_MESSAGE;
|
||||
/* Accept first byte by clearing ACK */
|
||||
@@ -2408,7 +2409,7 @@ static void NCR5380_information_transfer (struct Scsi_Host *instance)
|
||||
default:
|
||||
if (!tmp) {
|
||||
printk(KERN_DEBUG "scsi%d: rejecting message ", HOSTNO);
|
||||
scsi_print_msg (extended_msg);
|
||||
spi_print_msg(extended_msg);
|
||||
printk("\n");
|
||||
} else if (tmp != EXTENDED_MESSAGE)
|
||||
printk(KERN_DEBUG "scsi%d: rejecting unknown "
|
||||
@@ -2541,7 +2542,7 @@ static void NCR5380_reselect (struct Scsi_Host *instance)
|
||||
|
||||
if (!(msg[0] & 0x80)) {
|
||||
printk(KERN_DEBUG "scsi%d: expecting IDENTIFY message, got ", HOSTNO);
|
||||
scsi_print_msg(msg);
|
||||
spi_print_msg(msg);
|
||||
do_abort(instance);
|
||||
return;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user