--- ./drivers/scsi/ips.h.ips 2004-08-14 09:36:32.000000000 +0400 +++ ./drivers/scsi/ips.h 2005-11-18 21:59:08.000000000 +0300 @@ -53,14 +53,6 @@ #include #include - /* Prototypes */ - extern int ips_detect(Scsi_Host_Template *); - extern int ips_release(struct Scsi_Host *); - extern int ips_eh_abort(Scsi_Cmnd *); - extern int ips_eh_reset(Scsi_Cmnd *); - extern int ips_queue(Scsi_Cmnd *, void (*) (Scsi_Cmnd *)); - extern const char * ips_info(struct Scsi_Host *); - /* * Some handy macros */ @@ -95,11 +87,14 @@ #define scsi_set_pci_device(sh,dev) (0) #endif - #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + #ifndef IRQ_NONE typedef void irqreturn_t; #define IRQ_NONE #define IRQ_HANDLED #define IRQ_RETVAL(x) + #endif + + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) #define IPS_REGISTER_HOSTS(SHT) scsi_register_module(MODULE_SCSI_HA,SHT) #define IPS_UNREGISTER_HOSTS(SHT) scsi_unregister_module(MODULE_SCSI_HA,SHT) #define IPS_ADD_HOST(shost,device) @@ -127,6 +122,10 @@ #ifndef min #define min(x,y) ((x) < (y) ? x : y) #endif + + #ifndef __iomem /* For clean compiles in earlier kernels without __iomem annotations */ + #define __iomem + #endif #define pci_dma_hi32(a) ((a >> 16) >> 16) #define pci_dma_lo32(a) (a & 0xffffffff) @@ -453,10 +452,10 @@ static void ips_select_queue_depth(struct Scsi_Host *, Scsi_Device *); static int ips_biosparam(Disk *disk, kdev_t dev, int geom[]); #else - int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); + static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); static int ips_biosparam(struct scsi_device *sdev, struct block_device *bdev, sector_t capacity, int geom[]); - int ips_slave_configure(Scsi_Device *SDptr); + static int ips_slave_configure(Scsi_Device *SDptr); #endif /* @@ -1113,8 +1112,8 @@ uint32_t mem_addr; /* Memory mapped address */ uint32_t io_len; /* Size of IO Address */ uint32_t mem_len; /* Size of memory address */ - char *mem_ptr; /* Memory mapped Ptr */ - char *ioremap_ptr; /* ioremapped memory pointer */ + char __iomem *mem_ptr; /* Memory mapped Ptr */ + char __iomem *ioremap_ptr;/* ioremapped memory pointer */ ips_hw_func_t func; /* hw function pointers */ struct pci_dev *pcidev; /* PCI device handle */ char *flash_data; /* Save Area for flash data */ @@ -1210,13 +1209,13 @@ #define IPS_VER_MAJOR 7 #define IPS_VER_MAJOR_STRING "7" -#define IPS_VER_MINOR 00 -#define IPS_VER_MINOR_STRING "00" -#define IPS_VER_BUILD 15 -#define IPS_VER_BUILD_STRING "15" -#define IPS_VER_STRING "7.00.15" +#define IPS_VER_MINOR 12 +#define IPS_VER_MINOR_STRING "12" +#define IPS_VER_BUILD 02 +#define IPS_VER_BUILD_STRING "02" +#define IPS_VER_STRING "7.12.02" #define IPS_RELEASE_ID 0x00020000 -#define IPS_BUILD_IDENT 625 +#define IPS_BUILD_IDENT 761 #define IPS_LEGALCOPYRIGHT_STRING "(C) Copyright IBM Corp. 1994, 2002. All Rights Reserved." #define IPS_ADAPTECCOPYRIGHT_STRING "(c) Copyright Adaptec, Inc. 2002 to 2004. All Rights Reserved." #define IPS_DELLCOPYRIGHT_STRING "(c) Copyright Dell 2004. All Rights Reserved." @@ -1227,32 +1226,35 @@ #define IPS_VER_SERVERAID2 "2.88.13" #define IPS_VER_NAVAJO "2.88.13" #define IPS_VER_SERVERAID3 "6.10.24" -#define IPS_VER_SERVERAID4H "7.00.15" -#define IPS_VER_SERVERAID4MLx "7.00.15" -#define IPS_VER_SARASOTA "7.00.15" -#define IPS_VER_MARCO "7.00.15" -#define IPS_VER_SEBRING "7.00.15" +#define IPS_VER_SERVERAID4H "7.12.02" +#define IPS_VER_SERVERAID4MLx "7.12.02" +#define IPS_VER_SARASOTA "7.12.02" +#define IPS_VER_MARCO "7.12.02" +#define IPS_VER_SEBRING "7.12.02" +#define IPS_VER_KEYWEST "7.12.02" /* Compatability IDs for various adapters */ #define IPS_COMPAT_UNKNOWN "" -#define IPS_COMPAT_CURRENT "SB610" +#define IPS_COMPAT_CURRENT "KW710" #define IPS_COMPAT_SERVERAID1 "2.25.01" #define IPS_COMPAT_SERVERAID2 "2.88.13" #define IPS_COMPAT_NAVAJO "2.88.13" #define IPS_COMPAT_KIOWA "2.88.13" #define IPS_COMPAT_SERVERAID3H "SB610" #define IPS_COMPAT_SERVERAID3L "SB610" -#define IPS_COMPAT_SERVERAID4H "SB610" -#define IPS_COMPAT_SERVERAID4M "SB610" -#define IPS_COMPAT_SERVERAID4L "SB610" -#define IPS_COMPAT_SERVERAID4Mx "SB610" -#define IPS_COMPAT_SERVERAID4Lx "SB610" -#define IPS_COMPAT_SARASOTA "SB610" -#define IPS_COMPAT_MARCO "SB610" -#define IPS_COMPAT_SEBRING "SB610" -#define IPS_COMPAT_BIOS "SB610" +#define IPS_COMPAT_SERVERAID4H "KW710" +#define IPS_COMPAT_SERVERAID4M "KW710" +#define IPS_COMPAT_SERVERAID4L "KW710" +#define IPS_COMPAT_SERVERAID4Mx "KW710" +#define IPS_COMPAT_SERVERAID4Lx "KW710" +#define IPS_COMPAT_SARASOTA "KW710" +#define IPS_COMPAT_MARCO "KW710" +#define IPS_COMPAT_SEBRING "KW710" +#define IPS_COMPAT_TAMPA "KW710" +#define IPS_COMPAT_KEYWEST "KW710" +#define IPS_COMPAT_BIOS "KW710" -#define IPS_COMPAT_MAX_ADAPTER_TYPE 16 +#define IPS_COMPAT_MAX_ADAPTER_TYPE 18 #define IPS_COMPAT_ID_LENGTH 8 #define IPS_DEFINE_COMPAT_TABLE(tablename) \ @@ -1272,7 +1274,9 @@ IPS_COMPAT_SARASOTA, /* one-channel variety of SARASOTA */ \ IPS_COMPAT_SARASOTA, /* two-channel variety of SARASOTA */ \ IPS_COMPAT_MARCO, \ - IPS_COMPAT_SEBRING \ + IPS_COMPAT_SEBRING, \ + IPS_COMPAT_TAMPA, \ + IPS_COMPAT_KEYWEST \ } --- ./drivers/scsi/ips.c.ips 2004-08-14 09:36:11.000000000 +0400 +++ ./drivers/scsi/ips.c 2005-11-18 22:01:46.000000000 +0300 @@ -133,6 +133,12 @@ /* 6.10.00 - Remove 1G Addressing Limitations */ /* 6.11.xx - Get VersionInfo buffer off the stack ! DDTS 60401 */ /* 6.11.xx - Make Logical Drive Info structure safe for DMA DDTS 60639 */ +/* 7.10.18 - Add highmem_io flag in SCSI Templete for 2.4 kernels */ +/* - Fix path/name for scsi_hosts.h include for 2.6 kernels */ +/* - Fix sort order of 7k */ +/* - Remove 3 unused "inline" functions */ +/* 7.10.xx - Use STATIC functions whereever possible */ +/* - Clean up deprecated MODULE_PARM calls */ /*****************************************************************************/ /* @@ -176,7 +182,13 @@ #include #include "scsi.h" + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,0) +#include "hosts.h" +#else #include +#endif + #include "ips.h" #include @@ -191,14 +203,21 @@ #ifdef MODULE static char *ips = NULL; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,25) MODULE_PARM(ips, "s"); +#else +#include +#define MAX_BOOT_OPTIONS_SIZE 256 +static char boot_options[MAX_BOOT_OPTIONS_SIZE]; +module_param_string(ips, boot_options, MAX_BOOT_OPTIONS_SIZE, 0); +#endif #endif /* * DRIVER_VER */ -#define IPS_VERSION_HIGH "7.00" -#define IPS_VERSION_LOW ".15 " +#define IPS_VERSION_HIGH "7.12" +#define IPS_VERSION_LOW ".02 " #if !defined(__i386__) && !defined(__ia64__) && !defined(__x86_64__) #warning "This driver has only been tested on the x86/ia64/x86_64 platforms" @@ -236,6 +255,121 @@ #endif /* + * Function prototypes + */ +static int ips_detect(Scsi_Host_Template *); +static int ips_release(struct Scsi_Host *); +int ips_eh_abort(Scsi_Cmnd *); +static int ips_eh_reset(Scsi_Cmnd *); +static int ips_queue(Scsi_Cmnd *, void (*)(Scsi_Cmnd *)); +static const char *ips_info(struct Scsi_Host *); +static irqreturn_t do_ipsintr(int, void *, struct pt_regs *); +static int ips_hainit(ips_ha_t *); +static int ips_map_status(ips_ha_t *, ips_scb_t *, ips_stat_t *); +static int ips_send_wait(ips_ha_t *, ips_scb_t *, int, int); +static int ips_send_cmd(ips_ha_t *, ips_scb_t *); +static int ips_online(ips_ha_t *, ips_scb_t *); +static int ips_inquiry(ips_ha_t *, ips_scb_t *); +static int ips_rdcap(ips_ha_t *, ips_scb_t *); +static int ips_msense(ips_ha_t *, ips_scb_t *); +static int ips_reqsen(ips_ha_t *, ips_scb_t *); +static int ips_deallocatescbs(ips_ha_t *, int); +static int ips_allocatescbs(ips_ha_t *); +static int ips_reset_copperhead(ips_ha_t *); +static int ips_reset_copperhead_memio(ips_ha_t *); +static int ips_reset_morpheus(ips_ha_t *); +static int ips_issue_copperhead(ips_ha_t *, ips_scb_t *); +static int ips_issue_copperhead_memio(ips_ha_t *, ips_scb_t *); +static int ips_issue_i2o(ips_ha_t *, ips_scb_t *); +static int ips_issue_i2o_memio(ips_ha_t *, ips_scb_t *); +static int ips_isintr_copperhead(ips_ha_t *); +static int ips_isintr_copperhead_memio(ips_ha_t *); +static int ips_isintr_morpheus(ips_ha_t *); +static int ips_wait(ips_ha_t *, int, int); +static int ips_write_driver_status(ips_ha_t *, int); +static int ips_read_adapter_status(ips_ha_t *, int); +static int ips_read_subsystem_parameters(ips_ha_t *, int); +static int ips_read_config(ips_ha_t *, int); +static int ips_clear_adapter(ips_ha_t *, int); +static int ips_readwrite_page5(ips_ha_t *, int, int); +static int ips_init_copperhead(ips_ha_t *); +static int ips_init_copperhead_memio(ips_ha_t *); +static int ips_init_morpheus(ips_ha_t *); +static int ips_isinit_copperhead(ips_ha_t *); +static int ips_isinit_copperhead_memio(ips_ha_t *); +static int ips_isinit_morpheus(ips_ha_t *); +static int ips_erase_bios(ips_ha_t *); +static int ips_program_bios(ips_ha_t *, char *, uint32_t, uint32_t); +static int ips_verify_bios(ips_ha_t *, char *, uint32_t, uint32_t); +static int ips_erase_bios_memio(ips_ha_t *); +static int ips_program_bios_memio(ips_ha_t *, char *, uint32_t, uint32_t); +static int ips_verify_bios_memio(ips_ha_t *, char *, uint32_t, uint32_t); +static int ips_flash_copperhead(ips_ha_t *, ips_passthru_t *, ips_scb_t *); +static int ips_flash_bios(ips_ha_t *, ips_passthru_t *, ips_scb_t *); +static int ips_flash_firmware(ips_ha_t *, ips_passthru_t *, ips_scb_t *); +static void ips_free_flash_copperhead(ips_ha_t * ha); +static void ips_get_bios_version(ips_ha_t *, int); +static void ips_identify_controller(ips_ha_t *); +static void ips_chkstatus(ips_ha_t *, IPS_STATUS *); +static void ips_enable_int_copperhead(ips_ha_t *); +static void ips_enable_int_copperhead_memio(ips_ha_t *); +static void ips_enable_int_morpheus(ips_ha_t *); +static int ips_intr_copperhead(ips_ha_t *); +static int ips_intr_morpheus(ips_ha_t *); +static void ips_next(ips_ha_t *, int); +static void ipsintr_blocking(ips_ha_t *, struct ips_scb *); +static void ipsintr_done(ips_ha_t *, struct ips_scb *); +static void ips_done(ips_ha_t *, ips_scb_t *); +static void ips_free(ips_ha_t *); +static void ips_init_scb(ips_ha_t *, ips_scb_t *); +static void ips_freescb(ips_ha_t *, ips_scb_t *); +static void ips_setup_funclist(ips_ha_t *); +static void ips_statinit(ips_ha_t *); +static void ips_statinit_memio(ips_ha_t *); +static void ips_fix_ffdc_time(ips_ha_t *, ips_scb_t *, time_t); +static void ips_ffdc_reset(ips_ha_t *, int); +static void ips_ffdc_time(ips_ha_t *); +static uint32_t ips_statupd_copperhead(ips_ha_t *); +static uint32_t ips_statupd_copperhead_memio(ips_ha_t *); +static uint32_t ips_statupd_morpheus(ips_ha_t *); +static ips_scb_t *ips_getscb(ips_ha_t *); +static inline void ips_putq_scb_head(ips_scb_queue_t *, ips_scb_t *); +static inline void ips_putq_scb_tail(ips_scb_queue_t *, ips_scb_t *); +static inline void ips_putq_wait_head(ips_wait_queue_t *, Scsi_Cmnd *); +static inline void ips_putq_wait_tail(ips_wait_queue_t *, Scsi_Cmnd *); +static inline void ips_putq_copp_head(ips_copp_queue_t *, + ips_copp_wait_item_t *); +static inline void ips_putq_copp_tail(ips_copp_queue_t *, + ips_copp_wait_item_t *); +static inline ips_scb_t *ips_removeq_scb_head(ips_scb_queue_t *); +static inline ips_scb_t *ips_removeq_scb(ips_scb_queue_t *, ips_scb_t *); +static inline Scsi_Cmnd *ips_removeq_wait_head(ips_wait_queue_t *); +static inline Scsi_Cmnd *ips_removeq_wait(ips_wait_queue_t *, Scsi_Cmnd *); +static inline ips_copp_wait_item_t *ips_removeq_copp(ips_copp_queue_t *, + ips_copp_wait_item_t *); +static inline ips_copp_wait_item_t *ips_removeq_copp_head(ips_copp_queue_t *); + +static int ips_is_passthru(Scsi_Cmnd *); +static int ips_make_passthru(ips_ha_t *, Scsi_Cmnd *, ips_scb_t *, int); +static int ips_usrcmd(ips_ha_t *, ips_passthru_t *, ips_scb_t *); +static void ips_cleanup_passthru(ips_ha_t *, ips_scb_t *); +static void ips_scmd_buf_write(Scsi_Cmnd * scmd, void *data, + unsigned int count); +static void ips_scmd_buf_read(Scsi_Cmnd * scmd, void *data, unsigned int count); + +static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); +static int ips_host_info(ips_ha_t *, char *, off_t, int); +static void copy_mem_info(IPS_INFOSTR *, char *, int); +static int copy_info(IPS_INFOSTR *, char *, ...); +static int ips_get_version_info(ips_ha_t * ha, dma_addr_t, int intr); +static void ips_version_check(ips_ha_t * ha, int intr); +static int ips_abort_init(ips_ha_t * ha, int index); +static int ips_init_phase2(int index); + +static int ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr); +static int ips_register_scsi(int index); + +/* * global variables */ static const char ips_name[] = "ips"; @@ -278,9 +412,12 @@ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) .use_new_eh_code = 1, #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + .highmem_io = 1, +#endif }; -IPS_DEFINE_COMPAT_TABLE( Compatable ); /* Version Compatability Table */ +static IPS_DEFINE_COMPAT_TABLE( Compatable ); /* Version Compatability Table */ /* This table describes all ServeRAID Adapters */ @@ -298,7 +435,7 @@ static int __devinit ips_insert_device(struct pci_dev *pci_dev, const struct pci_device_id *ent); static void __devexit ips_remove_device(struct pci_dev *pci_dev); -struct pci_driver ips_pci_driver = { +static struct pci_driver ips_pci_driver = { .name = ips_hot_plug_name, .id_table = ips_pci_table, .probe = ips_insert_device, @@ -395,123 +532,6 @@ IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK }; -/* - * Function prototypes - */ -int ips_detect(Scsi_Host_Template *); -int ips_release(struct Scsi_Host *); -int ips_eh_abort(Scsi_Cmnd *); -int ips_eh_reset(Scsi_Cmnd *); -int ips_queue(Scsi_Cmnd *, void (*)(Scsi_Cmnd *)); -const char *ips_info(struct Scsi_Host *); -irqreturn_t do_ipsintr(int, void *, struct pt_regs *); -static int ips_hainit(ips_ha_t *); -static int ips_map_status(ips_ha_t *, ips_scb_t *, ips_stat_t *); -static int ips_send_wait(ips_ha_t *, ips_scb_t *, int, int); -static int ips_send_cmd(ips_ha_t *, ips_scb_t *); -static int ips_online(ips_ha_t *, ips_scb_t *); -static int ips_inquiry(ips_ha_t *, ips_scb_t *); -static int ips_rdcap(ips_ha_t *, ips_scb_t *); -static int ips_msense(ips_ha_t *, ips_scb_t *); -static int ips_reqsen(ips_ha_t *, ips_scb_t *); -static int ips_deallocatescbs(ips_ha_t *, int); -static int ips_allocatescbs(ips_ha_t *); -static int ips_reset_copperhead(ips_ha_t *); -static int ips_reset_copperhead_memio(ips_ha_t *); -static int ips_reset_morpheus(ips_ha_t *); -static int ips_issue_copperhead(ips_ha_t *, ips_scb_t *); -static int ips_issue_copperhead_memio(ips_ha_t *, ips_scb_t *); -static int ips_issue_i2o(ips_ha_t *, ips_scb_t *); -static int ips_issue_i2o_memio(ips_ha_t *, ips_scb_t *); -static int ips_isintr_copperhead(ips_ha_t *); -static int ips_isintr_copperhead_memio(ips_ha_t *); -static int ips_isintr_morpheus(ips_ha_t *); -static int ips_wait(ips_ha_t *, int, int); -static int ips_write_driver_status(ips_ha_t *, int); -static int ips_read_adapter_status(ips_ha_t *, int); -static int ips_read_subsystem_parameters(ips_ha_t *, int); -static int ips_read_config(ips_ha_t *, int); -static int ips_clear_adapter(ips_ha_t *, int); -static int ips_readwrite_page5(ips_ha_t *, int, int); -static int ips_init_copperhead(ips_ha_t *); -static int ips_init_copperhead_memio(ips_ha_t *); -static int ips_init_morpheus(ips_ha_t *); -static int ips_isinit_copperhead(ips_ha_t *); -static int ips_isinit_copperhead_memio(ips_ha_t *); -static int ips_isinit_morpheus(ips_ha_t *); -static int ips_erase_bios(ips_ha_t *); -static int ips_program_bios(ips_ha_t *, char *, uint32_t, uint32_t); -static int ips_verify_bios(ips_ha_t *, char *, uint32_t, uint32_t); -static int ips_erase_bios_memio(ips_ha_t *); -static int ips_program_bios_memio(ips_ha_t *, char *, uint32_t, uint32_t); -static int ips_verify_bios_memio(ips_ha_t *, char *, uint32_t, uint32_t); -static int ips_flash_copperhead(ips_ha_t *, ips_passthru_t *, ips_scb_t *); -static int ips_flash_bios(ips_ha_t *, ips_passthru_t *, ips_scb_t *); -static int ips_flash_firmware(ips_ha_t *, ips_passthru_t *, ips_scb_t *); -static void ips_free_flash_copperhead(ips_ha_t * ha); -static void ips_get_bios_version(ips_ha_t *, int); -static void ips_identify_controller(ips_ha_t *); -static void ips_chkstatus(ips_ha_t *, IPS_STATUS *); -static void ips_enable_int_copperhead(ips_ha_t *); -static void ips_enable_int_copperhead_memio(ips_ha_t *); -static void ips_enable_int_morpheus(ips_ha_t *); -static int ips_intr_copperhead(ips_ha_t *); -static int ips_intr_morpheus(ips_ha_t *); -static void ips_next(ips_ha_t *, int); -static void ipsintr_blocking(ips_ha_t *, struct ips_scb *); -static void ipsintr_done(ips_ha_t *, struct ips_scb *); -static void ips_done(ips_ha_t *, ips_scb_t *); -static void ips_free(ips_ha_t *); -static void ips_init_scb(ips_ha_t *, ips_scb_t *); -static void ips_freescb(ips_ha_t *, ips_scb_t *); -static void ips_setup_funclist(ips_ha_t *); -static void ips_statinit(ips_ha_t *); -static void ips_statinit_memio(ips_ha_t *); -static void ips_fix_ffdc_time(ips_ha_t *, ips_scb_t *, time_t); -static void ips_ffdc_reset(ips_ha_t *, int); -static void ips_ffdc_time(ips_ha_t *); -static uint32_t ips_statupd_copperhead(ips_ha_t *); -static uint32_t ips_statupd_copperhead_memio(ips_ha_t *); -static uint32_t ips_statupd_morpheus(ips_ha_t *); -static ips_scb_t *ips_getscb(ips_ha_t *); -static inline void ips_putq_scb_head(ips_scb_queue_t *, ips_scb_t *); -static inline void ips_putq_scb_tail(ips_scb_queue_t *, ips_scb_t *); -static inline void ips_putq_wait_head(ips_wait_queue_t *, Scsi_Cmnd *); -static inline void ips_putq_wait_tail(ips_wait_queue_t *, Scsi_Cmnd *); -static inline void ips_putq_copp_head(ips_copp_queue_t *, - ips_copp_wait_item_t *); -static inline void ips_putq_copp_tail(ips_copp_queue_t *, - ips_copp_wait_item_t *); -static inline ips_scb_t *ips_removeq_scb_head(ips_scb_queue_t *); -static inline ips_scb_t *ips_removeq_scb(ips_scb_queue_t *, ips_scb_t *); -static inline Scsi_Cmnd *ips_removeq_wait_head(ips_wait_queue_t *); -static inline Scsi_Cmnd *ips_removeq_wait(ips_wait_queue_t *, Scsi_Cmnd *); -static inline ips_copp_wait_item_t *ips_removeq_copp(ips_copp_queue_t *, - ips_copp_wait_item_t *); -static inline ips_copp_wait_item_t *ips_removeq_copp_head(ips_copp_queue_t *); - -static int ips_is_passthru(Scsi_Cmnd *); -static int ips_make_passthru(ips_ha_t *, Scsi_Cmnd *, ips_scb_t *, int); -static int ips_usrcmd(ips_ha_t *, ips_passthru_t *, ips_scb_t *); -static void ips_cleanup_passthru(ips_ha_t *, ips_scb_t *); -static void ips_scmd_buf_write(Scsi_Cmnd * scmd, void *data, - unsigned int count); -static void ips_scmd_buf_read(Scsi_Cmnd * scmd, void *data, unsigned int count); - -int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); -static int ips_host_info(ips_ha_t *, char *, off_t, int); -static void copy_mem_info(IPS_INFOSTR *, char *, int); -static int copy_info(IPS_INFOSTR *, char *, ...); -static int ips_get_version_info(ips_ha_t * ha, dma_addr_t, int intr); -static void ips_version_check(ips_ha_t * ha, int intr); -static int ips_abort_init(ips_ha_t * ha, int index); -static int ips_init_phase2(int index); - -static int ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr); -static int ips_register_scsi(int index); -/*--------------------------------------------------------------------------*/ -/* Exported Functions */ -/*--------------------------------------------------------------------------*/ /****************************************************************************/ /* */ @@ -580,7 +600,7 @@ /* NOTE: this routine is called under the io_request_lock spinlock */ /* */ /****************************************************************************/ -int +static int ips_detect(Scsi_Host_Template * SHT) { int i; @@ -588,8 +608,11 @@ METHOD_TRACE("ips_detect", 1); #ifdef MODULE - if (ips) - ips_setup(ips); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,25) + ips = boot_options; +#endif + if (ips) + ips_setup(ips); #endif for (i = 0; i < ips_num_controllers; i++) { @@ -669,7 +692,7 @@ /* Remove a driver */ /* */ /****************************************************************************/ -int +static int ips_release(struct Scsi_Host *sh) { ips_scb_t *scb; @@ -865,7 +888,7 @@ /* NOTE: this routine is called under the io_request_lock spinlock */ /* */ /****************************************************************************/ -int +static int ips_eh_reset(Scsi_Cmnd * SC) { int ret; @@ -1065,7 +1088,7 @@ /* Linux obtains io_request_lock before calling this function */ /* */ /****************************************************************************/ -int +static int ips_queue(Scsi_Cmnd * SC, void (*done) (Scsi_Cmnd *)) { ips_ha_t *ha; @@ -1288,7 +1311,7 @@ /* Set queue depths on devices once scan is complete */ /* */ /****************************************************************************/ -int +static int ips_slave_configure(Scsi_Device * SDptr) { ips_ha_t *ha; @@ -1314,7 +1337,7 @@ /* Wrapper for the interrupt handler */ /* */ /****************************************************************************/ -irqreturn_t +static irqreturn_t do_ipsintr(int irq, void *dev_id, struct pt_regs * regs) { ips_ha_t *ha; @@ -1493,7 +1516,7 @@ /* Return info about the driver */ /* */ /****************************************************************************/ -const char * +static const char * ips_info(struct Scsi_Host *SH) { static char buffer[256]; @@ -1531,7 +1554,7 @@ /* The passthru interface for the driver */ /* */ /****************************************************************************/ -int +static int ips_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset, int length, int func) { @@ -6996,7 +7019,6 @@ for (j = position; j < ips_num_controllers; j++) { switch (ips_ha[j]->ad_type) { case IPS_ADTYPE_SERVERAID6M: - case IPS_ADTYPE_SERVERAID7k: case IPS_ADTYPE_SERVERAID7M: if (nvram->adapter_order[i] == 'M') { ips_shift_controllers(position, @@ -7017,6 +7039,7 @@ case IPS_ADTYPE_SERVERAID6I: case IPS_ADTYPE_SERVERAID5I2: case IPS_ADTYPE_SERVERAID5I1: + case IPS_ADTYPE_SERVERAID7k: if (nvram->adapter_order[i] == 'S') { ips_shift_controllers(position, j); @@ -7254,8 +7277,8 @@ int j; int index; dma_addr_t dma_address; - char *ioremap_ptr; - char *mem_ptr; + char __iomem *ioremap_ptr; + char __iomem *mem_ptr; uint32_t IsDead; METHOD_TRACE("ips_init_phase1", 1); @@ -7545,6 +7568,15 @@ MODULE_LICENSE("GPL"); #endif +#ifdef MODULE_DESCRIPTION +MODULE_DESCRIPTION("IBM ServeRAID Adapter Driver " IPS_VER_STRING); +#endif + +#ifdef MODULE_VERSION +MODULE_VERSION(IPS_VER_STRING); +#endif + + /* * Overrides for Emacs so that we almost follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically