aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ips.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/ips.c')
-rw-r--r--drivers/scsi/ips.c83
1 files changed, 38 insertions, 45 deletions
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index 58065ff6936c..95b7536626f9 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -250,9 +250,9 @@ module_param(ips, charp, 0);
250 */ 250 */
251static int ips_detect(struct scsi_host_template *); 251static int ips_detect(struct scsi_host_template *);
252static int ips_release(struct Scsi_Host *); 252static int ips_release(struct Scsi_Host *);
253static int ips_eh_abort(Scsi_Cmnd *); 253static int ips_eh_abort(struct scsi_cmnd *);
254static int ips_eh_reset(Scsi_Cmnd *); 254static int ips_eh_reset(struct scsi_cmnd *);
255static int ips_queue(Scsi_Cmnd *, void (*)(Scsi_Cmnd *)); 255static int ips_queue(struct scsi_cmnd *, void (*)(struct scsi_cmnd *));
256static const char *ips_info(struct Scsi_Host *); 256static const char *ips_info(struct Scsi_Host *);
257static irqreturn_t do_ipsintr(int, void *, struct pt_regs *); 257static irqreturn_t do_ipsintr(int, void *, struct pt_regs *);
258static int ips_hainit(ips_ha_t *); 258static int ips_hainit(ips_ha_t *);
@@ -325,24 +325,26 @@ static uint32_t ips_statupd_copperhead_memio(ips_ha_t *);
325static uint32_t ips_statupd_morpheus(ips_ha_t *); 325static uint32_t ips_statupd_morpheus(ips_ha_t *);
326static ips_scb_t *ips_getscb(ips_ha_t *); 326static ips_scb_t *ips_getscb(ips_ha_t *);
327static void ips_putq_scb_head(ips_scb_queue_t *, ips_scb_t *); 327static void ips_putq_scb_head(ips_scb_queue_t *, ips_scb_t *);
328static void ips_putq_wait_tail(ips_wait_queue_t *, Scsi_Cmnd *); 328static void ips_putq_wait_tail(ips_wait_queue_t *, struct scsi_cmnd *);
329static void ips_putq_copp_tail(ips_copp_queue_t *, 329static void ips_putq_copp_tail(ips_copp_queue_t *,
330 ips_copp_wait_item_t *); 330 ips_copp_wait_item_t *);
331static ips_scb_t *ips_removeq_scb_head(ips_scb_queue_t *); 331static ips_scb_t *ips_removeq_scb_head(ips_scb_queue_t *);
332static ips_scb_t *ips_removeq_scb(ips_scb_queue_t *, ips_scb_t *); 332static ips_scb_t *ips_removeq_scb(ips_scb_queue_t *, ips_scb_t *);
333static Scsi_Cmnd *ips_removeq_wait_head(ips_wait_queue_t *); 333static struct scsi_cmnd *ips_removeq_wait_head(ips_wait_queue_t *);
334static Scsi_Cmnd *ips_removeq_wait(ips_wait_queue_t *, Scsi_Cmnd *); 334static struct scsi_cmnd *ips_removeq_wait(ips_wait_queue_t *,
335 struct scsi_cmnd *);
335static ips_copp_wait_item_t *ips_removeq_copp(ips_copp_queue_t *, 336static ips_copp_wait_item_t *ips_removeq_copp(ips_copp_queue_t *,
336 ips_copp_wait_item_t *); 337 ips_copp_wait_item_t *);
337static ips_copp_wait_item_t *ips_removeq_copp_head(ips_copp_queue_t *); 338static ips_copp_wait_item_t *ips_removeq_copp_head(ips_copp_queue_t *);
338 339
339static int ips_is_passthru(Scsi_Cmnd *); 340static int ips_is_passthru(struct scsi_cmnd *);
340static int ips_make_passthru(ips_ha_t *, Scsi_Cmnd *, ips_scb_t *, int); 341static int ips_make_passthru(ips_ha_t *, struct scsi_cmnd *, ips_scb_t *, int);
341static int ips_usrcmd(ips_ha_t *, ips_passthru_t *, ips_scb_t *); 342static int ips_usrcmd(ips_ha_t *, ips_passthru_t *, ips_scb_t *);
342static void ips_cleanup_passthru(ips_ha_t *, ips_scb_t *); 343static void ips_cleanup_passthru(ips_ha_t *, ips_scb_t *);
343static void ips_scmd_buf_write(Scsi_Cmnd * scmd, void *data, 344static void ips_scmd_buf_write(struct scsi_cmnd * scmd, void *data,
344 unsigned int count); 345 unsigned int count);
345static void ips_scmd_buf_read(Scsi_Cmnd * scmd, void *data, unsigned int count); 346static void ips_scmd_buf_read(struct scsi_cmnd * scmd, void *data,
347 unsigned int count);
346 348
347static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); 349static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int);
348static int ips_host_info(ips_ha_t *, char *, off_t, int); 350static int ips_host_info(ips_ha_t *, char *, off_t, int);
@@ -812,8 +814,7 @@ ips_halt(struct notifier_block *nb, ulong event, void *buf)
812/* Abort a command (using the new error code stuff) */ 814/* Abort a command (using the new error code stuff) */
813/* Note: this routine is called under the io_request_lock */ 815/* Note: this routine is called under the io_request_lock */
814/****************************************************************************/ 816/****************************************************************************/
815int 817int ips_eh_abort(struct scsi_cmnd *SC)
816ips_eh_abort(Scsi_Cmnd * SC)
817{ 818{
818 ips_ha_t *ha; 819 ips_ha_t *ha;
819 ips_copp_wait_item_t *item; 820 ips_copp_wait_item_t *item;
@@ -871,8 +872,7 @@ ips_eh_abort(Scsi_Cmnd * SC)
871/* NOTE: this routine is called under the io_request_lock spinlock */ 872/* NOTE: this routine is called under the io_request_lock spinlock */
872/* */ 873/* */
873/****************************************************************************/ 874/****************************************************************************/
874static int 875static int __ips_eh_reset(struct scsi_cmnd *SC)
875__ips_eh_reset(Scsi_Cmnd * SC)
876{ 876{
877 int ret; 877 int ret;
878 int i; 878 int i;
@@ -968,7 +968,7 @@ __ips_eh_reset(Scsi_Cmnd * SC)
968 ret = (*ha->func.reset) (ha); 968 ret = (*ha->func.reset) (ha);
969 969
970 if (!ret) { 970 if (!ret) {
971 Scsi_Cmnd *scsi_cmd; 971 struct scsi_cmnd *scsi_cmd;
972 972
973 IPS_PRINTK(KERN_NOTICE, ha->pcidev, 973 IPS_PRINTK(KERN_NOTICE, ha->pcidev,
974 "Controller reset failed - controller now offline.\n"); 974 "Controller reset failed - controller now offline.\n");
@@ -997,7 +997,7 @@ __ips_eh_reset(Scsi_Cmnd * SC)
997 } 997 }
998 998
999 if (!ips_clear_adapter(ha, IPS_INTR_IORL)) { 999 if (!ips_clear_adapter(ha, IPS_INTR_IORL)) {
1000 Scsi_Cmnd *scsi_cmd; 1000 struct scsi_cmnd *scsi_cmd;
1001 1001
1002 IPS_PRINTK(KERN_NOTICE, ha->pcidev, 1002 IPS_PRINTK(KERN_NOTICE, ha->pcidev,
1003 "Controller reset failed - controller now offline.\n"); 1003 "Controller reset failed - controller now offline.\n");
@@ -1059,8 +1059,7 @@ __ips_eh_reset(Scsi_Cmnd * SC)
1059 1059
1060} 1060}
1061 1061
1062static int 1062static int ips_eh_reset(struct scsi_cmnd *SC)
1063ips_eh_reset(Scsi_Cmnd * SC)
1064{ 1063{
1065 int rc; 1064 int rc;
1066 1065
@@ -1083,8 +1082,7 @@ ips_eh_reset(Scsi_Cmnd * SC)
1083/* Linux obtains io_request_lock before calling this function */ 1082/* Linux obtains io_request_lock before calling this function */
1084/* */ 1083/* */
1085/****************************************************************************/ 1084/****************************************************************************/
1086static int 1085static int ips_queue(struct scsi_cmnd *SC, void (*done) (struct scsi_cmnd *))
1087ips_queue(Scsi_Cmnd * SC, void (*done) (Scsi_Cmnd *))
1088{ 1086{
1089 ips_ha_t *ha; 1087 ips_ha_t *ha;
1090 ips_passthru_t *pt; 1088 ips_passthru_t *pt;
@@ -1602,8 +1600,7 @@ ips_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset,
1602/* Determine if the specified SCSI command is really a passthru command */ 1600/* Determine if the specified SCSI command is really a passthru command */
1603/* */ 1601/* */
1604/****************************************************************************/ 1602/****************************************************************************/
1605static int 1603static int ips_is_passthru(struct scsi_cmnd *SC)
1606ips_is_passthru(Scsi_Cmnd * SC)
1607{ 1604{
1608 unsigned long flags; 1605 unsigned long flags;
1609 1606
@@ -1685,7 +1682,7 @@ ips_alloc_passthru_buffer(ips_ha_t * ha, int length)
1685/* */ 1682/* */
1686/****************************************************************************/ 1683/****************************************************************************/
1687static int 1684static int
1688ips_make_passthru(ips_ha_t * ha, Scsi_Cmnd * SC, ips_scb_t * scb, int intr) 1685ips_make_passthru(ips_ha_t *ha, struct scsi_cmnd *SC, ips_scb_t *scb, int intr)
1689{ 1686{
1690 ips_passthru_t *pt; 1687 ips_passthru_t *pt;
1691 int length = 0; 1688 int length = 0;
@@ -2734,9 +2731,9 @@ static void
2734ips_next(ips_ha_t * ha, int intr) 2731ips_next(ips_ha_t * ha, int intr)
2735{ 2732{
2736 ips_scb_t *scb; 2733 ips_scb_t *scb;
2737 Scsi_Cmnd *SC; 2734 struct scsi_cmnd *SC;
2738 Scsi_Cmnd *p; 2735 struct scsi_cmnd *p;
2739 Scsi_Cmnd *q; 2736 struct scsi_cmnd *q;
2740 ips_copp_wait_item_t *item; 2737 ips_copp_wait_item_t *item;
2741 int ret; 2738 int ret;
2742 unsigned long cpu_flags = 0; 2739 unsigned long cpu_flags = 0;
@@ -2847,7 +2844,7 @@ ips_next(ips_ha_t * ha, int intr)
2847 dcdb_active[scmd_channel(p) - 2844 dcdb_active[scmd_channel(p) -
2848 1] & (1 << scmd_id(p)))) { 2845 1] & (1 << scmd_id(p)))) {
2849 ips_freescb(ha, scb); 2846 ips_freescb(ha, scb);
2850 p = (Scsi_Cmnd *) p->host_scribble; 2847 p = (struct scsi_cmnd *) p->host_scribble;
2851 continue; 2848 continue;
2852 } 2849 }
2853 2850
@@ -2962,7 +2959,7 @@ ips_next(ips_ha_t * ha, int intr)
2962 break; 2959 break;
2963 } /* end case */ 2960 } /* end case */
2964 2961
2965 p = (Scsi_Cmnd *) p->host_scribble; 2962 p = (struct scsi_cmnd *) p->host_scribble;
2966 2963
2967 } /* end while */ 2964 } /* end while */
2968 2965
@@ -3090,8 +3087,7 @@ ips_removeq_scb(ips_scb_queue_t * queue, ips_scb_t * item)
3090/* ASSUMED to be called from within the HA lock */ 3087/* ASSUMED to be called from within the HA lock */
3091/* */ 3088/* */
3092/****************************************************************************/ 3089/****************************************************************************/
3093static void 3090static void ips_putq_wait_tail(ips_wait_queue_t *queue, struct scsi_cmnd *item)
3094ips_putq_wait_tail(ips_wait_queue_t * queue, Scsi_Cmnd * item)
3095{ 3091{
3096 METHOD_TRACE("ips_putq_wait_tail", 1); 3092 METHOD_TRACE("ips_putq_wait_tail", 1);
3097 3093
@@ -3122,10 +3118,9 @@ ips_putq_wait_tail(ips_wait_queue_t * queue, Scsi_Cmnd * item)
3122/* ASSUMED to be called from within the HA lock */ 3118/* ASSUMED to be called from within the HA lock */
3123/* */ 3119/* */
3124/****************************************************************************/ 3120/****************************************************************************/
3125static Scsi_Cmnd * 3121static struct scsi_cmnd *ips_removeq_wait_head(ips_wait_queue_t *queue)
3126ips_removeq_wait_head(ips_wait_queue_t * queue)
3127{ 3122{
3128 Scsi_Cmnd *item; 3123 struct scsi_cmnd *item;
3129 3124
3130 METHOD_TRACE("ips_removeq_wait_head", 1); 3125 METHOD_TRACE("ips_removeq_wait_head", 1);
3131 3126
@@ -3135,7 +3130,7 @@ ips_removeq_wait_head(ips_wait_queue_t * queue)
3135 return (NULL); 3130 return (NULL);
3136 } 3131 }
3137 3132
3138 queue->head = (Scsi_Cmnd *) item->host_scribble; 3133 queue->head = (struct scsi_cmnd *) item->host_scribble;
3139 item->host_scribble = NULL; 3134 item->host_scribble = NULL;
3140 3135
3141 if (queue->tail == item) 3136 if (queue->tail == item)
@@ -3157,10 +3152,10 @@ ips_removeq_wait_head(ips_wait_queue_t * queue)
3157/* ASSUMED to be called from within the HA lock */ 3152/* ASSUMED to be called from within the HA lock */
3158/* */ 3153/* */
3159/****************************************************************************/ 3154/****************************************************************************/
3160static Scsi_Cmnd * 3155static struct scsi_cmnd *ips_removeq_wait(ips_wait_queue_t *queue,
3161ips_removeq_wait(ips_wait_queue_t * queue, Scsi_Cmnd * item) 3156 struct scsi_cmnd *item)
3162{ 3157{
3163 Scsi_Cmnd *p; 3158 struct scsi_cmnd *p;
3164 3159
3165 METHOD_TRACE("ips_removeq_wait", 1); 3160 METHOD_TRACE("ips_removeq_wait", 1);
3166 3161
@@ -3173,8 +3168,8 @@ ips_removeq_wait(ips_wait_queue_t * queue, Scsi_Cmnd * item)
3173 3168
3174 p = queue->head; 3169 p = queue->head;
3175 3170
3176 while ((p) && (item != (Scsi_Cmnd *) p->host_scribble)) 3171 while ((p) && (item != (struct scsi_cmnd *) p->host_scribble))
3177 p = (Scsi_Cmnd *) p->host_scribble; 3172 p = (struct scsi_cmnd *) p->host_scribble;
3178 3173
3179 if (p) { 3174 if (p) {
3180 /* found a match */ 3175 /* found a match */
@@ -3659,11 +3654,10 @@ ips_send_wait(ips_ha_t * ha, ips_scb_t * scb, int timeout, int intr)
3659/* Routine Name: ips_scmd_buf_write */ 3654/* Routine Name: ips_scmd_buf_write */
3660/* */ 3655/* */
3661/* Routine Description: */ 3656/* Routine Description: */
3662/* Write data to Scsi_Cmnd request_buffer at proper offsets */ 3657/* Write data to struct scsi_cmnd request_buffer at proper offsets */
3663/****************************************************************************/ 3658/****************************************************************************/
3664static void 3659static void
3665ips_scmd_buf_write(Scsi_Cmnd * scmd, void *data, unsigned 3660ips_scmd_buf_write(struct scsi_cmnd *scmd, void *data, unsigned int count)
3666 int count)
3667{ 3661{
3668 if (scmd->use_sg) { 3662 if (scmd->use_sg) {
3669 int i; 3663 int i;
@@ -3698,11 +3692,10 @@ ips_scmd_buf_write(Scsi_Cmnd * scmd, void *data, unsigned
3698/* Routine Name: ips_scmd_buf_read */ 3692/* Routine Name: ips_scmd_buf_read */
3699/* */ 3693/* */
3700/* Routine Description: */ 3694/* Routine Description: */
3701/* Copy data from a Scsi_Cmnd to a new, linear buffer */ 3695/* Copy data from a struct scsi_cmnd to a new, linear buffer */
3702/****************************************************************************/ 3696/****************************************************************************/
3703static void 3697static void
3704ips_scmd_buf_read(Scsi_Cmnd * scmd, void *data, unsigned 3698ips_scmd_buf_read(struct scsi_cmnd *scmd, void *data, unsigned int count)
3705 int count)
3706{ 3699{
3707 if (scmd->use_sg) { 3700 if (scmd->use_sg) {
3708 int i; 3701 int i;