From: Matt Dainty To get the arcmsr driver working with CentOS/RHEL 4 and using the facility to build kernel modules outside of the kernel source tree, I found the attached patch was necessary to remove the dependencies on the internal drivers/scsi/scsi*.h header files and to instead use the public ones found under include/scsi/ which are provided by the kernel-*-devel packages. It builds, loads and appears to work with my limited testing on an ARC1120. I was just wanting to know if this was the right way to fix it? Once the driver is in the main kernel tree it's largely irrelevant, but while CentOS/RHEL 4 use the older kernel without the driver it's a PITA to maintain kernel packages with this one driver added, when a separate package containing just the driver is much easier. Signed-off-by: Andrew Morton --- 25-akpm/drivers/scsi/arcmsr/arcmsr.c | 47 ++++++++++++++++++----------------- 25-akpm/drivers/scsi/arcmsr/arcmsr.h | 4 +- 2 files changed, 27 insertions(+), 24 deletions(-) diff -puN drivers/scsi/arcmsr/arcmsr.c~building-areca-arcmsr-driver-outside-kernel-source-tree drivers/scsi/arcmsr/arcmsr.c --- 25/drivers/scsi/arcmsr/arcmsr.c~building-areca-arcmsr-driver-outside-kernel-source-tree 2005-03-19 22:28:05.000000000 -0800 +++ 25-akpm/drivers/scsi/arcmsr/arcmsr.c 2005-03-19 22:28:05.000000000 -0800 @@ -108,7 +108,9 @@ #include #include #include -#include "../scsi.h" +#include +#include +#include #include "arcmsr.h" #endif /* @@ -138,10 +140,11 @@ static int arcmsr_bios_param(struct scsi struct block_device *bdev, sector_t capacity, int *info); static int arcmsr_release(struct Scsi_Host *); -static int arcmsr_queue_command(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)); -static int arcmsr_cmd_abort(Scsi_Cmnd *); -static int arcmsr_bus_reset(Scsi_Cmnd *); -static int arcmsr_ioctl(Scsi_Device * dev, int ioctl_cmd, void *arg); +static int arcmsr_queue_command(struct scsi_cmnd * cmd, + void (*done) (struct scsi_cmnd *)); +static int arcmsr_cmd_abort(struct scsi_cmnd *); +static int arcmsr_bus_reset(struct scsi_cmnd *); +static int arcmsr_ioctl(struct scsi_device * dev, int ioctl_cmd, void *arg); static int __devinit arcmsr_device_probe(struct pci_dev *pPCI_DEV, const struct pci_device_id *id); static void arcmsr_device_remove(struct pci_dev *pPCI_DEV); @@ -152,7 +155,7 @@ static irqreturn_t arcmsr_HwInterrupt(PA static u_int8_t arcmsr_wait_msgint_ready(PACB pACB); static const char *arcmsr_info(struct Scsi_Host *); -static Scsi_Host_Template arcmsr_scsi_host_template = { +static struct scsi_host_template arcmsr_scsi_host_template = { .module = THIS_MODULE, .proc_name = "arcmsr", .proc_info = arcmsr_proc_info, @@ -417,7 +420,7 @@ static void arcmsr_device_remove(struct ************************************************************************ ************************************************************************ */ -static int arcmsr_scsi_host_template_init(Scsi_Host_Template * psht) +static int arcmsr_scsi_host_template_init(struct scsi_host_template * psht) { psht->proc_name = "arcmsr"; memset(pHCBARC, 0, sizeof(struct _HCBARC)); @@ -459,19 +462,19 @@ module_exit(arcmsr_module_exit); static void arcmsr_pci_unmap_dma(PCCB pCCB) { PACB pACB = pCCB->pACB; - Scsi_Cmnd *pcmd = pCCB->pcmd; + struct scsi_cmnd *pcmd = pCCB->pcmd; if (pcmd->use_sg != 0) { struct scatterlist *sl; sl = (struct scatterlist *)pcmd->request_buffer; pci_unmap_sg(pACB->pPCI_DEV, sl, pcmd->use_sg, - scsi_to_pci_dma_dir(pcmd->sc_data_direction)); + pcmd->sc_data_direction); } else if (pcmd->request_bufflen != 0) { pci_unmap_single(pACB->pPCI_DEV, (dma_addr_t) (unsigned long)pcmd->SCp.ptr, pcmd->request_bufflen, - scsi_to_pci_dma_dir(pcmd->sc_data_direction)); + pcmd->sc_data_direction); } return; } @@ -575,7 +578,7 @@ static int arcmsr_fops_ioctl(struct inod ** ********************************************************************** */ -static void arcmsr_cmd_done(Scsi_Cmnd * pcmd) +static void arcmsr_cmd_done(struct scsi_cmnd * pcmd) { pcmd->scsi_done(pcmd); return; @@ -608,7 +611,7 @@ static void arcmsr_ccb_complete(PCCB pCC { unsigned long flag; PACB pACB = pCCB->pACB; - Scsi_Cmnd *pcmd = pCCB->pcmd; + struct scsi_cmnd *pcmd = pCCB->pcmd; #if ARCMSR_DEBUG0 printk @@ -635,7 +638,7 @@ static void arcmsr_ccb_complete(PCCB pCC */ static void arcmsr_report_SenseInfoBuffer(PCCB pCCB) { - Scsi_Cmnd *pcmd = pCCB->pcmd; + struct scsi_cmnd *pcmd = pCCB->pcmd; PSENSE_DATA psenseBuffer = (PSENSE_DATA) pcmd->sense_buffer; #if ARCMSR_DEBUG0 printk("arcmsr_report_SenseInfoBuffer...........\n"); @@ -804,7 +807,7 @@ static void arcmsr_iop_reset(PACB pACB) ** PAGE_SIZE=4096 or 8192,PAGE_SHIFT=12 ********************************************************************** */ -static void arcmsr_build_ccb(PACB pACB, PCCB pCCB, Scsi_Cmnd * pcmd) +static void arcmsr_build_ccb(PACB pACB, PCCB pCCB, struct scsi_cmnd * pcmd) { PARCMSR_CDB pARCMSR_CDB = (PARCMSR_CDB) & pCCB->arcmsr_cdb; int8_t *psge = (int8_t *) & pARCMSR_CDB->u; @@ -831,7 +834,7 @@ static void arcmsr_build_ccb(PACB pACB, sl = (struct scatterlist *)pcmd->request_buffer; sgcount = pci_map_sg(pACB->pPCI_DEV, sl, pcmd->use_sg, - scsi_to_pci_dma_dir(pcmd->sc_data_direction)); + pcmd->sc_data_direction); /* map stor port SG list to our iop SG List. */ for (i = 0; i < sgcount; i++) { /* Get the physical address of the current data pointer */ @@ -902,8 +905,7 @@ static void arcmsr_build_ccb(PACB pACB, dma_addr = pci_map_single(pACB->pPCI_DEV, pcmd->request_buffer, pcmd->request_bufflen, - scsi_to_pci_dma_dir(pcmd-> - sc_data_direction)); + pcmd->sc_data_direction); pcmd->SCp.ptr = (char *)(unsigned long)dma_addr; address_lo = cpu_to_le32(dma_addr_lo32(dma_addr)); address_hi = cpu_to_le32(dma_addr_hi32(dma_addr)); @@ -1651,7 +1653,7 @@ static int arcmsr_iop_ioctlcmd(PACB pACB ** ************************************************************************ */ -static int arcmsr_ioctl(Scsi_Device * dev, int ioctl_cmd, void *arg) +static int arcmsr_ioctl(struct scsi_device * dev, int ioctl_cmd, void *arg) { PACB pACB; int32_t match = 0x55AA, i; @@ -1855,7 +1857,8 @@ static PCCB arcmsr_get_freeccb(PACB pACB **} Scsi_Pointer; *********************************************************************** */ -static int arcmsr_queue_command(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)) +static int arcmsr_queue_command(struct scsi_cmnd * cmd, + void (*done) (struct scsi_cmnd *)) { struct Scsi_Host *host = cmd->device->host; PACB pACB = (PACB) host->hostdata; @@ -1966,7 +1969,7 @@ static void arcmsr_iop_init(PACB pACB) ** **************************************************************************** */ -static int arcmsr_bus_reset(Scsi_Cmnd * cmd) +static int arcmsr_bus_reset(struct scsi_cmnd * cmd) { PACB pACB; @@ -1983,7 +1986,7 @@ static int arcmsr_bus_reset(Scsi_Cmnd * ** ***************************************************************************************** */ -static int arcmsr_seek_cmd2abort(Scsi_Cmnd * pabortcmd) +static int arcmsr_seek_cmd2abort(struct scsi_cmnd * pabortcmd) { PACB pACB = (PACB) pabortcmd->device->host->hostdata; PCCB pCCB; @@ -2068,7 +2071,7 @@ static int arcmsr_seek_cmd2abort(Scsi_Cm ** ***************************************************************************************** */ -static int arcmsr_cmd_abort(Scsi_Cmnd * cmd) +static int arcmsr_cmd_abort(struct scsi_cmnd * cmd) { int error; diff -puN drivers/scsi/arcmsr/arcmsr.h~building-areca-arcmsr-driver-outside-kernel-source-tree drivers/scsi/arcmsr/arcmsr.h --- 25/drivers/scsi/arcmsr/arcmsr.h~building-areca-arcmsr-driver-outside-kernel-source-tree 2005-03-19 22:28:05.000000000 -0800 +++ 25-akpm/drivers/scsi/arcmsr/arcmsr.h 2005-03-19 22:28:05.000000000 -0800 @@ -647,7 +647,7 @@ typedef struct _CCB { uint32_t reserved1; /* 508-511 */ /* ======================512+32 bytes======================== */ #if BITS_PER_LONG == 64 - Scsi_Cmnd *pcmd; /* 512-515 516-519 pointer of linux scsi command */ + struct scsi_cmnd *pcmd; /* 512-515 516-519 pointer of linux scsi command */ struct _ACB *pACB; /* 520-523 524-527 */ uint16_t ccb_flags; /* 528-529 */ @@ -663,7 +663,7 @@ typedef struct _CCB { #define ARCMSR_CCB_ILLEGAL 0xFFFF uint32_t reserved2[3]; /* 532-535 536-539 540-543 */ #else - Scsi_Cmnd *pcmd; /* 512-515 pointer of linux scsi command */ + struct scsi_cmnd *pcmd; /* 512-515 pointer of linux scsi command */ struct _ACB *pACB; /* 516-519 */ uint16_t ccb_flags; /* 520-521 */ _