public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 4/5] ipr remove anonymous unions for gcc 2.95
@ 2004-05-23  0:52 Brian King
  0 siblings, 0 replies; only message in thread
From: Brian King @ 2004-05-23  0:52 UTC (permalink / raw)
  To: James Bottomley; +Cc: linux-scsi

[-- Attachment #1: Type: text/plain, Size: 64 bytes --]


-- 
Brian King
eServer Storage I/O
IBM Linux Technology Center

[-- Attachment #2: ipr_delete_anon_unions-4.patch --]
[-- Type: text/plain, Size: 14397 bytes --]


This patch removes all usage of anonymous unions from the ipr
driver since gcc 2.95 does not support anonymous unions.


---

 linux-2.6.6-bjking1/drivers/scsi/ipr.c |  100 ++++++++++++++++-----------------
 linux-2.6.6-bjking1/drivers/scsi/ipr.h |   14 ++--
 2 files changed, 58 insertions(+), 56 deletions(-)

diff -puN drivers/scsi/ipr.h~ipr_delete_anon_unions drivers/scsi/ipr.h
--- linux-2.6.6/drivers/scsi/ipr.h~ipr_delete_anon_unions	2004-05-22 14:49:57.000000000 -0500
+++ linux-2.6.6-bjking1/drivers/scsi/ipr.h	2004-05-22 17:05:26.000000000 -0500
@@ -413,8 +413,8 @@ struct ipr_ioasa_af_dasd {
 }__attribute__((packed, aligned (4)));
 
 struct ipr_ioasa_gpdd {
-	u8 device_end_state;
-	u8 device_bus_phase;
+	u8 end_state;
+	u8 bus_phase;
 	u16 reserved;
 	u32 ioa_data[23];
 }__attribute__((packed, aligned (4)));
@@ -457,7 +457,7 @@ struct ipr_ioasa {
 		struct ipr_ioasa_af_dasd dasd;
 		struct ipr_ioasa_gpdd gpdd;
 		struct ipr_ioasa_raw raw;
-	};
+	} u;
 }__attribute__((packed, aligned (4)));
 
 struct ipr_mode_parm_hdr {
@@ -617,7 +617,7 @@ struct ipr_hostrcb_error {
 		struct ipr_hostrcb_type_02_error type_02_error;
 		struct ipr_hostrcb_type_03_error type_03_error;
 		struct ipr_hostrcb_type_04_error type_04_error;
-	};
+	} u;
 }__attribute__((packed, aligned (4)));
 
 struct ipr_hostrcb_raw {
@@ -662,7 +662,7 @@ struct ipr_hcam {
 		struct ipr_hostrcb_error error;
 		struct ipr_hostrcb_cfg_ch_not ccn;
 		struct ipr_hostrcb_raw raw;
-	};
+	} u;
 }__attribute__((packed, aligned (4)));
 
 struct ipr_hostrcb {
@@ -785,7 +785,7 @@ struct ipr_trace_entry {
 		u32 ioasc;
 		u32 add_data;
 		u32 res_addr;
-	};
+	} u;
 };
 
 struct ipr_sglist {
@@ -940,7 +940,7 @@ struct ipr_cmnd {
 		struct ipr_resource_entry *res;
 		struct ipr_cmnd *sibling;
 		struct scsi_device *sdev;
-	};
+	} u;
 
 	struct ipr_ioa_cfg *ioa_cfg;
 };
diff -puN drivers/scsi/ipr.c~ipr_delete_anon_unions drivers/scsi/ipr.c
--- linux-2.6.6/drivers/scsi/ipr.c~ipr_delete_anon_unions	2004-05-22 14:49:57.000000000 -0500
+++ linux-2.6.6-bjking1/drivers/scsi/ipr.c	2004-05-22 14:50:39.000000000 -0500
@@ -406,7 +406,7 @@ static void ipr_trc_hook(struct ipr_cmnd
 	trace_entry->type = type;
 	trace_entry->cmd_index = ipr_cmd->cmd_index;
 	trace_entry->res_handle = ipr_cmd->ioarcb.res_handle;
-	trace_entry->add_data = add_data;
+	trace_entry->u.add_data = add_data;
 }
 #else
 #define ipr_trc_hook(ipr_cmd, type, add_data) do { } while(0)
@@ -447,7 +447,7 @@ static void ipr_reinit_ipr_cmnd(struct i
 static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd)
 {
 	ipr_reinit_ipr_cmnd(ipr_cmd);
-	ipr_cmd->scratch = 0;
+	ipr_cmd->u.scratch = 0;
 	init_timer(&ipr_cmd->timer);
 }
 
@@ -676,8 +676,8 @@ static void ipr_do_req(struct ipr_cmnd *
  **/
 static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd)
 {
-	if (ipr_cmd->sibling)
-		ipr_cmd->sibling = NULL;
+	if (ipr_cmd->u.sibling)
+		ipr_cmd->u.sibling = NULL;
 	else
 		complete(&ipr_cmd->completion);
 }
@@ -729,7 +729,7 @@ static void ipr_send_hcam(struct ipr_ioa
 		list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
 		list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_pending_q);
 
-		ipr_cmd->hostrcb = hostrcb;
+		ipr_cmd->u.hostrcb = hostrcb;
 		ioarcb = &ipr_cmd->ioarcb;
 
 		ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
@@ -794,7 +794,7 @@ static void ipr_handle_config_change(str
 	struct ipr_config_table_entry *cfgte;
 	u32 is_ndn = 1;
 
-	cfgte = &hostrcb->hcam.ccn.cfgte;
+	cfgte = &hostrcb->hcam.u.ccn.cfgte;
 
 	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
 		if (!memcmp(&res->cfgte.res_addr, &cfgte->res_addr,
@@ -852,7 +852,7 @@ static void ipr_handle_config_change(str
 static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd)
 {
 	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
-	struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb;
+	struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
 	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
 
 	list_del(&hostrcb->queue);
@@ -902,7 +902,8 @@ static void ipr_log_vpd(struct ipr_std_i
 static void ipr_log_cache_error(struct ipr_ioa_cfg *ioa_cfg,
 				struct ipr_hostrcb *hostrcb)
 {
-	struct ipr_hostrcb_type_02_error *error = &hostrcb->hcam.error.type_02_error;
+	struct ipr_hostrcb_type_02_error *error =
+		&hostrcb->hcam.u.error.u.type_02_error;
 
 	ipr_err("-----Current Configuration-----\n");
 	ipr_err("Cache Directory Card Information:\n");
@@ -937,14 +938,15 @@ static void ipr_log_config_error(struct 
 {
 	int errors_logged, i;
 	struct ipr_hostrcb_device_data_entry *dev_entry;
+	struct ipr_hostrcb_type_03_error *error;
 
-	errors_logged = be32_to_cpu(hostrcb->hcam.error.type_03_error.errors_logged);
+	error = &hostrcb->hcam.u.error.u.type_03_error;
+	errors_logged = be32_to_cpu(error->errors_logged);
 
 	ipr_err("Device Errors Detected/Logged: %d/%d\n",
-		be32_to_cpu(hostrcb->hcam.error.type_03_error.errors_detected),
-		errors_logged);
+		be32_to_cpu(error->errors_detected), errors_logged);
 
-	dev_entry = hostrcb->hcam.error.type_03_error.dev_entry;
+	dev_entry = error->dev_entry;
 
 	for (i = 0; i < errors_logged; i++, dev_entry++) {
 		ipr_err_separator;
@@ -996,7 +998,7 @@ static void ipr_log_array_error(struct i
 
 	memset(zero_sn, '0', IPR_SERIAL_NUM_LEN);
 
-	error = &hostrcb->hcam.error.type_04_error;
+	error = &hostrcb->hcam.u.error.u.type_04_error;
 
 	ipr_err_separator;
 
@@ -1074,10 +1076,10 @@ static void ipr_log_generic_error(struct
 
 	for (i = 0; i < ioa_data_len / 4; i += 4) {
 		ipr_err("%08X: %08X %08X %08X %08X\n", i*4,
-			be32_to_cpu(hostrcb->hcam.raw.data[i]),
-			be32_to_cpu(hostrcb->hcam.raw.data[i+1]),
-			be32_to_cpu(hostrcb->hcam.raw.data[i+2]),
-			be32_to_cpu(hostrcb->hcam.raw.data[i+3]));
+			be32_to_cpu(hostrcb->hcam.u.raw.data[i]),
+			be32_to_cpu(hostrcb->hcam.u.raw.data[i+1]),
+			be32_to_cpu(hostrcb->hcam.u.raw.data[i+2]),
+			be32_to_cpu(hostrcb->hcam.u.raw.data[i+3]));
 	}
 }
 
@@ -1125,13 +1127,13 @@ static void ipr_handle_log_data(struct i
 	if (hostrcb->hcam.notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST)
 		dev_err(&ioa_cfg->pdev->dev, "Error notifications lost\n");
 
-	ioasc = be32_to_cpu(hostrcb->hcam.error.failing_dev_ioasc);
+	ioasc = be32_to_cpu(hostrcb->hcam.u.error.failing_dev_ioasc);
 
 	if (ioasc == IPR_IOASC_BUS_WAS_RESET ||
 	    ioasc == IPR_IOASC_BUS_WAS_RESET_BY_OTHER) {
 		/* Tell the midlayer we had a bus reset so it will handle the UA properly */
 		scsi_report_bus_reset(ioa_cfg->host,
-				      hostrcb->hcam.error.failing_dev_res_addr.bus);
+				      hostrcb->hcam.u.error.failing_dev_res_addr.bus);
 	}
 
 	error_index = ipr_get_error(ioasc);
@@ -1139,8 +1141,8 @@ static void ipr_handle_log_data(struct i
 	if (!ipr_error_table[error_index].log_hcam)
 		return;
 
-	if (ipr_is_device(&hostrcb->hcam.error.failing_dev_res_addr)) {
-		ipr_res_err(ioa_cfg, hostrcb->hcam.error.failing_dev_res_addr,
+	if (ipr_is_device(&hostrcb->hcam.u.error.failing_dev_res_addr)) {
+		ipr_res_err(ioa_cfg, hostrcb->hcam.u.error.failing_dev_res_addr,
 			    "%s\n", ipr_error_table[error_index].error);
 	} else {
 		dev_err(&ioa_cfg->pdev->dev, "%s\n",
@@ -1192,7 +1194,7 @@ static void ipr_handle_log_data(struct i
 static void ipr_process_error(struct ipr_cmnd *ipr_cmd)
 {
 	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
-	struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb;
+	struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
 	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
 
 	list_del(&hostrcb->queue);
@@ -3012,10 +3014,10 @@ static void ipr_bus_reset_done(struct ip
 	 * If abort has not completed, indicate the reset has, else call the
 	 * abort's done function to wake the sleeping eh thread
 	 */
-	if (ipr_cmd->sibling->sibling)
-		ipr_cmd->sibling->sibling = NULL;
+	if (ipr_cmd->u.sibling->u.sibling)
+		ipr_cmd->u.sibling->u.sibling = NULL;
 	else
-		ipr_cmd->sibling->done(ipr_cmd->sibling);
+		ipr_cmd->u.sibling->done(ipr_cmd->u.sibling);
 
 	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
 	LEAVE;
@@ -3046,10 +3048,10 @@ static void ipr_abort_timeout(struct ipr
 		return;
 	}
 
-	ipr_sdev_err(ipr_cmd->sdev, "Abort timed out. Resetting bus\n");
+	ipr_sdev_err(ipr_cmd->u.sdev, "Abort timed out. Resetting bus\n");
 	reset_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
-	ipr_cmd->sibling = reset_cmd;
-	reset_cmd->sibling = ipr_cmd;
+	ipr_cmd->u.sibling = reset_cmd;
+	reset_cmd->u.sibling = ipr_cmd;
 	reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle;
 	cmd_pkt = &reset_cmd->ioarcb.cmd_pkt;
 	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
@@ -3108,7 +3110,7 @@ static int ipr_cancel_op(struct scsi_cmn
 	cmd_pkt->cdb[3] = (ioarcb_addr >> 16) & 0xff;
 	cmd_pkt->cdb[4] = (ioarcb_addr >> 8) & 0xff;
 	cmd_pkt->cdb[5] = ioarcb_addr & 0xff;
-	ipr_cmd->sdev = scsi_cmd->device;
+	ipr_cmd->u.sdev = scsi_cmd->device;
 
 	ipr_sdev_err(scsi_cmd->device, "Aborting command: %02X\n", scsi_cmd->cmnd[0]);
 	ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_ABORT_TASK_TIMEOUT);
@@ -3575,12 +3577,12 @@ static void ipr_dump_ioasa(struct ipr_io
 	ipr_sdev_err(ipr_cmd->scsi_cmd->device, "%s\n",
 		     ipr_error_table[error_index].error);
 
-	if ((ioasa->gpdd.device_end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) &&
-	    (ioasa->gpdd.device_bus_phase <= ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) {
+	if ((ioasa->u.gpdd.end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) &&
+	    (ioasa->u.gpdd.bus_phase <=  ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) {
 		ipr_sdev_err(ipr_cmd->scsi_cmd->device,
 			     "Device End state: %s Phase: %s\n",
-			     ipr_gpdd_dev_end_states[ioasa->gpdd.device_end_state],
-			     ipr_gpdd_dev_bus_phases[ioasa->gpdd.device_bus_phase]);
+			     ipr_gpdd_dev_end_states[ioasa->u.gpdd.end_state],
+			     ipr_gpdd_dev_bus_phases[ioasa->u.gpdd.bus_phase]);
 	}
 
 	if (sizeof(struct ipr_ioasa) < be16_to_cpu(ioasa->ret_stat_len))
@@ -3624,7 +3626,7 @@ static void ipr_gen_sense(struct ipr_cmn
 
 	if (ipr_is_vset_device(res) &&
 	    ioasc == IPR_IOASC_MED_DO_NOT_REALLOC &&
-	    ioasa->vset.failing_lba_hi != 0) {
+	    ioasa->u.vset.failing_lba_hi != 0) {
 		sense_buf[0] = 0x72;
 		sense_buf[1] = IPR_IOASC_SENSE_KEY(ioasc);
 		sense_buf[2] = IPR_IOASC_SENSE_CODE(ioasc);
@@ -3635,14 +3637,14 @@ static void ipr_gen_sense(struct ipr_cmn
 		sense_buf[9] = 0x0A;
 		sense_buf[10] = 0x80;
 
-		failing_lba = be32_to_cpu(ioasa->vset.failing_lba_hi);
+		failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_hi);
 
 		sense_buf[12] = (failing_lba & 0xff000000) >> 24;
 		sense_buf[13] = (failing_lba & 0x00ff0000) >> 16;
 		sense_buf[14] = (failing_lba & 0x0000ff00) >> 8;
 		sense_buf[15] = failing_lba & 0x000000ff;
 
-		failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo);
+		failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_lo);
 
 		sense_buf[16] = (failing_lba & 0xff000000) >> 24;
 		sense_buf[17] = (failing_lba & 0x00ff0000) >> 16;
@@ -3674,9 +3676,9 @@ static void ipr_gen_sense(struct ipr_cmn
 		} else {
 			if (ioasc == IPR_IOASC_MED_DO_NOT_REALLOC) {
 				if (ipr_is_vset_device(res))
-					failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo);
+					failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_lo);
 				else
-					failing_lba = be32_to_cpu(ioasa->dasd.failing_lba);
+					failing_lba = be32_to_cpu(ioasa->u.dasd.failing_lba);
 
 				sense_buf[0] |= 0x80;	/* Or in the Valid bit */
 				sense_buf[3] = (failing_lba & 0xff000000) >> 24;
@@ -4123,7 +4125,7 @@ static int ipr_set_supported_devs(struct
 	struct ipr_supported_device *supp_dev = &ioa_cfg->vpd_cbs->supp_dev;
 	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
 	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
-	struct ipr_resource_entry *res = ipr_cmd->res;
+	struct ipr_resource_entry *res = ipr_cmd->u.res;
 
 	ipr_cmd->job_step = ipr_ioa_reset_done;
 
@@ -4131,7 +4133,7 @@ static int ipr_set_supported_devs(struct
 		if (!ipr_is_af_dasd_device(res))
 			continue;
 
-		ipr_cmd->res = res;
+		ipr_cmd->u.res = res;
 		ipr_set_sup_dev_dflt(supp_dev, &res->cfgte.std_inq_data.vpids);
 
 		ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
@@ -4372,8 +4374,8 @@ static int ipr_ioafp_mode_select_page28(
 			      length);
 
 	ipr_cmd->job_step = ipr_set_supported_devs;
-	ipr_cmd->res = list_entry(ioa_cfg->used_res_q.next,
-				  struct ipr_resource_entry, queue);
+	ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next,
+				    struct ipr_resource_entry, queue);
 
 	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
 
@@ -5028,8 +5030,8 @@ static int ipr_reset_wait_to_start_bist(
 	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
 	int rc = IPR_RC_JOB_RETURN;
 
-	if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->time_left) {
-		ipr_cmd->time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
+	if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) {
+		ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
 		ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
 	} else {
 		ipr_cmd->job_step = ipr_reset_start_bist;
@@ -5068,7 +5070,7 @@ static int ipr_reset_alert(struct ipr_cm
 		ipr_cmd->job_step = ipr_reset_start_bist;
 	}
 
-	ipr_cmd->time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
+	ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
 	ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
 
 	LEAVE;
@@ -5154,7 +5156,7 @@ static int ipr_reset_ucode_download(stru
 static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd)
 {
 	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
-	enum ipr_shutdown_type shutdown_type = ipr_cmd->shutdown_type;
+	enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type;
 	unsigned long timeout;
 	int rc = IPR_RC_JOB_CONTINUE;
 
@@ -5195,7 +5197,7 @@ static int ipr_reset_shutdown_ioa(struct
 static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd)
 {
 	u32 rc, ioasc;
-	unsigned long scratch = ipr_cmd->scratch;
+	unsigned long scratch = ipr_cmd->u.scratch;
 	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
 
 	do {
@@ -5221,7 +5223,7 @@ static void ipr_reset_ioa_job(struct ipr
 		}
 
 		ipr_reinit_ipr_cmnd(ipr_cmd);
-		ipr_cmd->scratch = scratch;
+		ipr_cmd->u.scratch = scratch;
 		rc = ipr_cmd->job_step(ipr_cmd);
 	} while(rc == IPR_RC_JOB_CONTINUE);
 }
@@ -5253,7 +5255,7 @@ static void _ipr_initiate_ioa_reset(stru
 	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
 	ioa_cfg->reset_cmd = ipr_cmd;
 	ipr_cmd->job_step = job_step;
-	ipr_cmd->shutdown_type = shutdown_type;
+	ipr_cmd->u.shutdown_type = shutdown_type;
 
 	ipr_reset_ioa_job(ipr_cmd);
 }

_

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-05-23  0:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-23  0:52 [PATCH 4/5] ipr remove anonymous unions for gcc 2.95 Brian King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox