git: e34a057ca6eb - main - [POWERPC64BE] mrsas: add big-endian support

Michal Meloun meloun.michal at gmail.com
Thu Feb 4 09:04:34 UTC 2021


On 03.02.2021 23:08, Alfredo Dal'Ava Junior wrote:
> The branch main has been updated by alfredo:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=e34a057ca6ebdf8e30ec8b0dc21d18eb450bf36a
> 
> commit e34a057ca6ebdf8e30ec8b0dc21d18eb450bf36a
> Author:     Alfredo Dal'Ava Junior <alfredo at FreeBSD.org>
> AuthorDate: 2021-02-04 00:52:19 +0000
> Commit:     Alfredo Dal'Ava Junior <alfredo at FreeBSD.org>
> CommitDate: 2021-02-04 01:06:21 +0000
> 
>      [POWERPC64BE] mrsas: add big-endian support
>      
>      Add endiannes conversions in order to support big-endian platforms
>      
>      Submitted by:   Andre Fernando da Silva <andre.silva at eldorado.org.br>
>      Reviewed by:    luporl, alfredo, kadesai (on email)
>      Sponsored by:   Eldorado Research Institute (eldorado.org.br)
>      Differential Revision:  https://reviews.freebsd.org/D26531

This caused the following warnings on 32-bit systems(armv7). IMHO, the 
address should be casted to uint64_t (not bus_addr_t) before the shift.

/usr2/Meloun/git/tegra/sys/dev/mrsas/mrsas.c:2786:67: error: shift count 
 >= width of type [-Werror,-Wshift-count-overflow]
         req_desc.addr.u.high = 
htole32((bus_addr_t)sc->ioc_init_phys_mem >> 32);
 
   ^  ~~
/usr2/Meloun/git/tegra/sys/sys/endian.h:74:32: note: expanded from macro 
'htole32'
#define htole32(x)      ((uint32_t)(x))

> ---
>   sys/dev/mrsas/mrsas.c     | 198 ++++++++++++++++---------------
>   sys/dev/mrsas/mrsas.h     | 289 +++++++++++++++++++++++++++++++++++++++++++++-
>   sys/dev/mrsas/mrsas_cam.c |  54 ++++-----
>   sys/dev/mrsas/mrsas_fp.c  | 170 ++++++++++++++-------------
>   4 files changed, 510 insertions(+), 201 deletions(-)
> 
> diff --git a/sys/dev/mrsas/mrsas.c b/sys/dev/mrsas/mrsas.c
> index 32d85c803938..f4c34e237fc4 100644
> --- a/sys/dev/mrsas/mrsas.c
> +++ b/sys/dev/mrsas/mrsas.c
> @@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
>   #include <sys/kthread.h>
>   #include <sys/taskqueue.h>
>   #include <sys/smp.h>
> +#include <sys/endian.h>
>   
>   /*
>    * Function prototypes
> @@ -619,13 +620,13 @@ mrsas_get_seq_num(struct mrsas_softc *sc,
>   	dcmd->cmd = MFI_CMD_DCMD;
>   	dcmd->cmd_status = 0x0;
>   	dcmd->sge_count = 1;
> -	dcmd->flags = MFI_FRAME_DIR_READ;
> +	dcmd->flags = htole16(MFI_FRAME_DIR_READ);
>   	dcmd->timeout = 0;
>   	dcmd->pad_0 = 0;
> -	dcmd->data_xfer_len = sizeof(struct mrsas_evt_log_info);
> -	dcmd->opcode = MR_DCMD_CTRL_EVENT_GET_INFO;
> -	dcmd->sgl.sge32[0].phys_addr = sc->el_info_phys_addr;
> -	dcmd->sgl.sge32[0].length = sizeof(struct mrsas_evt_log_info);
> +	dcmd->data_xfer_len = htole32(sizeof(struct mrsas_evt_log_info));
> +	dcmd->opcode = htole32(MR_DCMD_CTRL_EVENT_GET_INFO);
> +	dcmd->sgl.sge32[0].phys_addr = htole32(sc->el_info_phys_addr & 0xFFFFFFFF);
> +	dcmd->sgl.sge32[0].length = htole32(sizeof(struct mrsas_evt_log_info));
>   
>   	retcode = mrsas_issue_blocked_cmd(sc, cmd);
>   	if (retcode == ETIMEDOUT)
> @@ -681,7 +682,7 @@ mrsas_register_aen(struct mrsas_softc *sc, u_int32_t seq_num,
>   	curr_aen.word = class_locale_word;
>   
>   	if (sc->aen_cmd) {
> -		prev_aen.word = sc->aen_cmd->frame->dcmd.mbox.w[1];
> +		prev_aen.word = le32toh(sc->aen_cmd->frame->dcmd.mbox.w[1]);
>   
>   		/*
>   		 * A class whose enum value is smaller is inclusive of all
> @@ -732,16 +733,16 @@ mrsas_register_aen(struct mrsas_softc *sc, u_int32_t seq_num,
>   	dcmd->cmd = MFI_CMD_DCMD;
>   	dcmd->cmd_status = 0x0;
>   	dcmd->sge_count = 1;
> -	dcmd->flags = MFI_FRAME_DIR_READ;
> +	dcmd->flags = htole16(MFI_FRAME_DIR_READ);
>   	dcmd->timeout = 0;
>   	dcmd->pad_0 = 0;
> -	dcmd->data_xfer_len = sizeof(struct mrsas_evt_detail);
> -	dcmd->opcode = MR_DCMD_CTRL_EVENT_WAIT;
> -	dcmd->mbox.w[0] = seq_num;
> +	dcmd->data_xfer_len = htole32(sizeof(struct mrsas_evt_detail));
> +	dcmd->opcode = htole32(MR_DCMD_CTRL_EVENT_WAIT);
> +	dcmd->mbox.w[0] = htole32(seq_num);
>   	sc->last_seq_num = seq_num;
> -	dcmd->mbox.w[1] = curr_aen.word;
> -	dcmd->sgl.sge32[0].phys_addr = (u_int32_t)sc->evt_detail_phys_addr;
> -	dcmd->sgl.sge32[0].length = sizeof(struct mrsas_evt_detail);
> +	dcmd->mbox.w[1] = htole32(curr_aen.word);
> +	dcmd->sgl.sge32[0].phys_addr = htole32((u_int32_t)sc->evt_detail_phys_addr & 0xFFFFFFFF);
> +	dcmd->sgl.sge32[0].length = htole32(sizeof(struct mrsas_evt_detail));
>   
>   	if (sc->aen_cmd != NULL) {
>   		mrsas_release_mfi_cmd(cmd);
> @@ -907,9 +908,6 @@ mrsas_attach(device_t dev)
>   	 * Set up PCI and registers
>   	 */
>   	cmd = pci_read_config(dev, PCIR_COMMAND, 2);
> -	if ((cmd & PCIM_CMD_PORTEN) == 0) {
> -		return (ENXIO);
> -	}
>   	/* Force the busmaster enable bit on. */
>   	cmd |= PCIM_CMD_BUSMASTEREN;
>   	pci_write_config(dev, PCIR_COMMAND, cmd, 2);
> @@ -1704,7 +1702,7 @@ mrsas_complete_cmd(struct mrsas_softc *sc, u_int32_t MSIxIndex)
>   
>   	/* Find our reply descriptor for the command and process */
>   	while ((desc_val.u.low != 0xFFFFFFFF) && (desc_val.u.high != 0xFFFFFFFF)) {
> -		smid = reply_desc->SMID;
> +		smid = le16toh(reply_desc->SMID);
>   		cmd_mpt = sc->mpt_cmd_list[smid - 1];
>   		scsi_io_req = (MRSAS_RAID_SCSI_IO_REQUEST *) cmd_mpt->io_request;
>   
> @@ -1736,7 +1734,7 @@ mrsas_complete_cmd(struct mrsas_softc *sc, u_int32_t MSIxIndex)
>   		case MRSAS_MPI2_FUNCTION_LD_IO_REQUEST:
>   			if (cmd_mpt->r1_alt_dev_handle == MR_DEVHANDLE_INVALID) {
>   				mrsas_map_mpt_cmd_status(cmd_mpt, cmd_mpt->ccb_ptr, status,
> -				    extStatus, data_length, sense);
> +				    extStatus, le32toh(data_length), sense);
>   				mrsas_cmd_done(sc, cmd_mpt);
>   				mrsas_atomic_dec(&sc->fw_outstanding);
>   			} else {
> @@ -1764,7 +1762,7 @@ mrsas_complete_cmd(struct mrsas_softc *sc, u_int32_t MSIxIndex)
>   					mrsas_release_mpt_cmd(r1_cmd);
>   					mrsas_atomic_dec(&sc->fw_outstanding);
>   					mrsas_map_mpt_cmd_status(cmd_mpt, cmd_mpt->ccb_ptr, status,
> -					    extStatus, data_length, sense);
> +					    extStatus, le32toh(data_length), sense);
>   					mrsas_cmd_done(sc, cmd_mpt);
>   					mrsas_atomic_dec(&sc->fw_outstanding);
>   				}
> @@ -1778,7 +1776,7 @@ mrsas_complete_cmd(struct mrsas_softc *sc, u_int32_t MSIxIndex)
>   			 * And also make sure that the issue_polled call should only be
>   			 * used if INTERRUPT IS DISABLED.
>   			 */
> -			if (cmd_mfi->frame->hdr.flags & MFI_FRAME_DONT_POST_IN_REPLY_QUEUE)
> +			if (cmd_mfi->frame->hdr.flags & htole16(MFI_FRAME_DONT_POST_IN_REPLY_QUEUE))
>   				mrsas_release_mfi_cmd(cmd_mfi);
>   			else
>   				mrsas_complete_mptmfi_passthru(sc, cmd_mfi, status);
> @@ -2593,6 +2591,13 @@ mrsas_init_adapter(struct mrsas_softc *sc)
>   	    (MRSAS_MPI2_RAID_DEFAULT_IO_FRAME_SIZE * (sc->max_fw_cmds + 1));
>   	scratch_pad_2 = mrsas_read_reg_with_retries(sc, offsetof(mrsas_reg_set,
>   	    outbound_scratch_pad_2));
> +
> +	mrsas_dprint(sc, MRSAS_TRACE, "%s: sc->reply_q_depth 0x%x,"
> +	    "sc->request_alloc_sz 0x%x, sc->reply_alloc_sz 0x%x,"
> +	    "sc->io_frames_alloc_sz 0x%x\n", __func__,
> +	    sc->reply_q_depth, sc->request_alloc_sz,
> +	    sc->reply_alloc_sz, sc->io_frames_alloc_sz);
> +
>   	/*
>   	 * If scratch_pad_2 & MEGASAS_MAX_CHAIN_SIZE_UNITS_MASK is set,
>   	 * Firmware support extended IO chain frame which is 4 time more
> @@ -2617,8 +2622,10 @@ mrsas_init_adapter(struct mrsas_softc *sc)
>   
>   	mrsas_dprint(sc, MRSAS_INFO,
>   	    "max sge: 0x%x, max chain frame size: 0x%x, "
> -	    "max fw cmd: 0x%x\n", sc->max_num_sge,
> -	    sc->max_chain_frame_sz, sc->max_fw_cmds);
> +	    "max fw cmd: 0x%x sc->chain_frames_alloc_sz: 0x%x\n",
> +	    sc->max_num_sge,
> +	    sc->max_chain_frame_sz, sc->max_fw_cmds,
> +	    sc->chain_frames_alloc_sz);
>   
>   	/* Used for pass thru MFI frame (DCMD) */
>   	sc->chain_offset_mfi_pthru = offsetof(MRSAS_RAID_SCSI_IO_REQUEST, SGL) / 16;
> @@ -2738,19 +2745,19 @@ mrsas_ioc_init(struct mrsas_softc *sc)
>   	IOCInitMsg = (pMpi2IOCInitRequest_t)(((char *)sc->ioc_init_mem) + 1024);
>   	IOCInitMsg->Function = MPI2_FUNCTION_IOC_INIT;
>   	IOCInitMsg->WhoInit = MPI2_WHOINIT_HOST_DRIVER;
> -	IOCInitMsg->MsgVersion = MPI2_VERSION;
> -	IOCInitMsg->HeaderVersion = MPI2_HEADER_VERSION;
> -	IOCInitMsg->SystemRequestFrameSize = MRSAS_MPI2_RAID_DEFAULT_IO_FRAME_SIZE / 4;
> -	IOCInitMsg->ReplyDescriptorPostQueueDepth = sc->reply_q_depth;
> -	IOCInitMsg->ReplyDescriptorPostQueueAddress = sc->reply_desc_phys_addr;
> -	IOCInitMsg->SystemRequestFrameBaseAddress = sc->io_request_phys_addr;
> +	IOCInitMsg->MsgVersion = htole16(MPI2_VERSION);
> +	IOCInitMsg->HeaderVersion = htole16(MPI2_HEADER_VERSION);
> +	IOCInitMsg->SystemRequestFrameSize = htole16(MRSAS_MPI2_RAID_DEFAULT_IO_FRAME_SIZE / 4);
> +	IOCInitMsg->ReplyDescriptorPostQueueDepth = htole16(sc->reply_q_depth);
> +	IOCInitMsg->ReplyDescriptorPostQueueAddress = htole64(sc->reply_desc_phys_addr);
> +	IOCInitMsg->SystemRequestFrameBaseAddress = htole64(sc->io_request_phys_addr);
>   	IOCInitMsg->HostMSIxVectors = (sc->msix_vectors > 0 ? sc->msix_vectors : 0);
>   	IOCInitMsg->HostPageSize = MR_DEFAULT_NVME_PAGE_SHIFT;
>   
>   	init_frame = (struct mrsas_init_frame *)sc->ioc_init_mem;
>   	init_frame->cmd = MFI_CMD_INIT;
>   	init_frame->cmd_status = 0xFF;
> -	init_frame->flags |= MFI_FRAME_DONT_POST_IN_REPLY_QUEUE;
> +	init_frame->flags |= htole16(MFI_FRAME_DONT_POST_IN_REPLY_QUEUE);
>   
>   	/* driver support Extended MSIX */
>   	if (sc->mrsas_gen3_ctrl || sc->is_ventura || sc->is_aero) {
> @@ -2768,11 +2775,16 @@ mrsas_ioc_init(struct mrsas_softc *sc)
>   	init_frame->driver_operations.mfi_capabilities.security_protocol_cmds_fw = 1;
>   	if (sc->max_chain_frame_sz > MEGASAS_CHAIN_FRAME_SZ_MIN)
>   		init_frame->driver_operations.mfi_capabilities.support_ext_io_size = 1;
> +
> +	init_frame->driver_operations.reg = htole32(init_frame->driver_operations.reg);
> +
>   	phys_addr = (bus_addr_t)sc->ioc_init_phys_mem + 1024;
> -	init_frame->queue_info_new_phys_addr_lo = phys_addr;
> -	init_frame->data_xfer_len = sizeof(Mpi2IOCInitRequest_t);
> +	init_frame->queue_info_new_phys_addr_lo = htole32(phys_addr);
> +	init_frame->data_xfer_len = htole32(sizeof(Mpi2IOCInitRequest_t));
> +
> +	req_desc.addr.u.low = htole32((bus_addr_t)sc->ioc_init_phys_mem & 0xFFFFFFFF);
> +	req_desc.addr.u.high = htole32((bus_addr_t)sc->ioc_init_phys_mem >> 32);
>   
> -	req_desc.addr.Words = (bus_addr_t)sc->ioc_init_phys_mem;
>   	req_desc.MFAIo.RequestFlags =
>   	    (MRSAS_REQ_DESCRIPT_FLAGS_MFA << MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
>   
> @@ -2923,9 +2935,9 @@ mrsas_write_64bit_req_desc(struct mrsas_softc *sc, u_int32_t req_desc_lo,
>   {
>   	mtx_lock(&sc->pci_lock);
>   	mrsas_write_reg(sc, offsetof(mrsas_reg_set, inbound_low_queue_port),
> -	    req_desc_lo);
> +	    le32toh(req_desc_lo));
>   	mrsas_write_reg(sc, offsetof(mrsas_reg_set, inbound_high_queue_port),
> -	    req_desc_hi);
> +	    le32toh(req_desc_hi));
>   	mtx_unlock(&sc->pci_lock);
>   }
>   
> @@ -2944,7 +2956,7 @@ mrsas_fire_cmd(struct mrsas_softc *sc, u_int32_t req_desc_lo,
>   {
>   	if (sc->atomic_desc_support)
>   		mrsas_write_reg(sc, offsetof(mrsas_reg_set, inbound_single_queue_port),
> -		    req_desc_lo);
> +		    le32toh(req_desc_lo));
>   	else
>   		mrsas_write_64bit_req_desc(sc, req_desc_lo, req_desc_hi);
>   }
> @@ -3103,7 +3115,6 @@ mrsas_ocr_thread(void *arg)
>   	sc = (struct mrsas_softc *)arg;
>   
>   	mrsas_dprint(sc, MRSAS_TRACE, "%s\n", __func__);
> -
>   	sc->ocr_thread_active = 1;
>   	mtx_lock(&sc->sim_lock);
>   	for (;;) {
> @@ -3642,10 +3653,10 @@ mrsas_get_ctrl_info(struct mrsas_softc *sc)
>   	dcmd->flags = MFI_FRAME_DIR_READ;
>   	dcmd->timeout = 0;
>   	dcmd->pad_0 = 0;
> -	dcmd->data_xfer_len = sizeof(struct mrsas_ctrl_info);
> -	dcmd->opcode = MR_DCMD_CTRL_GET_INFO;
> -	dcmd->sgl.sge32[0].phys_addr = sc->ctlr_info_phys_addr;
> -	dcmd->sgl.sge32[0].length = sizeof(struct mrsas_ctrl_info);
> +	dcmd->data_xfer_len = htole32(sizeof(struct mrsas_ctrl_info));
> +	dcmd->opcode = htole32(MR_DCMD_CTRL_GET_INFO);
> +	dcmd->sgl.sge32[0].phys_addr = htole32(sc->ctlr_info_phys_addr & 0xFFFFFFFF);
> +	dcmd->sgl.sge32[0].length = htole32(sizeof(struct mrsas_ctrl_info));
>   
>   	if (!sc->mask_interrupts)
>   		retcode = mrsas_issue_blocked_cmd(sc, cmd);
> @@ -3654,8 +3665,13 @@ mrsas_get_ctrl_info(struct mrsas_softc *sc)
>   
>   	if (retcode == ETIMEDOUT)
>   		goto dcmd_timeout;
> -	else
> +	else {
>   		memcpy(sc->ctrl_info, sc->ctlr_info_mem, sizeof(struct mrsas_ctrl_info));
> +		le32_to_cpus(&sc->ctrl_info->properties.OnOffProperties);
> +		le32_to_cpus(&sc->ctrl_info->adapterOperations2);
> +		le32_to_cpus(&sc->ctrl_info->adapterOperations3);
> +		le16_to_cpus(&sc->ctrl_info->adapterOperations4);
> +	}
>   
>   	do_ocr = 0;
>   	mrsas_update_ext_vd_details(sc);
> @@ -3813,7 +3829,7 @@ mrsas_issue_polled(struct mrsas_softc *sc, struct mrsas_mfi_cmd *cmd)
>   	int i, retcode = SUCCESS;
>   
>   	frame_hdr->cmd_status = 0xFF;
> -	frame_hdr->flags |= MFI_FRAME_DONT_POST_IN_REPLY_QUEUE;
> +	frame_hdr->flags |= htole16(MFI_FRAME_DONT_POST_IN_REPLY_QUEUE);
>   
>   	/* Issue the frame using inbound queue port */
>   	if (mrsas_issue_dcmd(sc, cmd)) {
> @@ -3892,7 +3908,7 @@ mrsas_build_mpt_cmd(struct mrsas_softc *sc, struct mrsas_mfi_cmd *cmd)
>   	req_desc->addr.Words = 0;
>   	req_desc->SCSIIO.RequestFlags = (MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO << MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
>   
> -	req_desc->SCSIIO.SMID = index;
> +	req_desc->SCSIIO.SMID = htole16(index);
>   
>   	return (req_desc);
>   }
> @@ -3927,7 +3943,7 @@ mrsas_build_mptmfi_passthru(struct mrsas_softc *sc, struct mrsas_mfi_cmd *mfi_cm
>   	 * mrsas_complete_cmd.
>   	 */
>   
> -	if (frame_hdr->flags & MFI_FRAME_DONT_POST_IN_REPLY_QUEUE)
> +	if (frame_hdr->flags & htole16(MFI_FRAME_DONT_POST_IN_REPLY_QUEUE))
>   		mpt_cmd->flags = MFI_FRAME_DONT_POST_IN_REPLY_QUEUE;
>   
>   	io_req = mpt_cmd->io_request;
> @@ -3944,12 +3960,12 @@ mrsas_build_mptmfi_passthru(struct mrsas_softc *sc, struct mrsas_mfi_cmd *mfi_cm
>   	io_req->SGLOffset0 = offsetof(MRSAS_RAID_SCSI_IO_REQUEST, SGL) / 4;
>   	io_req->ChainOffset = sc->chain_offset_mfi_pthru;
>   
> -	mpi25_ieee_chain->Address = mfi_cmd->frame_phys_addr;
> +	mpi25_ieee_chain->Address = htole64(mfi_cmd->frame_phys_addr);
>   
>   	mpi25_ieee_chain->Flags = IEEE_SGE_FLAGS_CHAIN_ELEMENT |
>   	    MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR;
>   
> -	mpi25_ieee_chain->Length = sc->max_chain_frame_sz;
> +	mpi25_ieee_chain->Length = htole32(sc->max_chain_frame_sz);
>   
>   	return (0);
>   }
> @@ -4100,7 +4116,7 @@ mrsas_complete_mptmfi_passthru(struct mrsas_softc *sc, struct mrsas_mfi_cmd *cmd
>   			break;
>   		}
>   		/* See if got an event notification */
> -		if (cmd->frame->dcmd.opcode == MR_DCMD_CTRL_EVENT_WAIT)
> +		if (le32toh(cmd->frame->dcmd.opcode) == MR_DCMD_CTRL_EVENT_WAIT)
>   			mrsas_complete_aen(sc, cmd);
>   		else
>   			mrsas_wakeup(sc, cmd);
> @@ -4264,14 +4280,14 @@ megasas_sync_pd_seq_num(struct mrsas_softc *sc, boolean_t pend)
>   	dcmd->sge_count = 1;
>   	dcmd->timeout = 0;
>   	dcmd->pad_0 = 0;
> -	dcmd->data_xfer_len = (pd_seq_map_sz);
> -	dcmd->opcode = (MR_DCMD_SYSTEM_PD_MAP_GET_INFO);
> -	dcmd->sgl.sge32[0].phys_addr = (pd_seq_h);
> -	dcmd->sgl.sge32[0].length = (pd_seq_map_sz);
> +	dcmd->data_xfer_len = htole32(pd_seq_map_sz);
> +	dcmd->opcode = htole32(MR_DCMD_SYSTEM_PD_MAP_GET_INFO);
> +	dcmd->sgl.sge32[0].phys_addr = htole32(pd_seq_h & 0xFFFFFFFF);
> +	dcmd->sgl.sge32[0].length = htole32(pd_seq_map_sz);
>   
>   	if (pend) {
>   		dcmd->mbox.b[0] = MRSAS_DCMD_MBOX_PEND_FLAG;
> -		dcmd->flags = (MFI_FRAME_DIR_WRITE);
> +		dcmd->flags = htole16(MFI_FRAME_DIR_WRITE);
>   		sc->jbod_seq_cmd = cmd;
>   		if (mrsas_issue_dcmd(sc, cmd)) {
>   			device_printf(sc->mrsas_dev,
> @@ -4280,13 +4296,13 @@ megasas_sync_pd_seq_num(struct mrsas_softc *sc, boolean_t pend)
>   		} else
>   			return 0;
>   	} else
> -		dcmd->flags = MFI_FRAME_DIR_READ;
> +		dcmd->flags = htole16(MFI_FRAME_DIR_READ);
>   
>   	retcode = mrsas_issue_polled(sc, cmd);
>   	if (retcode == ETIMEDOUT)
>   		goto dcmd_timeout;
>   
> -	if (pd_sync->count > MAX_PHYSICAL_DEVICES) {
> +	if (le32toh(pd_sync->count) > MAX_PHYSICAL_DEVICES) {
>   		device_printf(sc->mrsas_dev,
>   		    "driver supports max %d JBOD, but FW reports %d\n",
>   		    MAX_PHYSICAL_DEVICES, pd_sync->count);
> @@ -4364,13 +4380,13 @@ mrsas_get_ld_map_info(struct mrsas_softc *sc)
>   	dcmd->cmd = MFI_CMD_DCMD;
>   	dcmd->cmd_status = 0xFF;
>   	dcmd->sge_count = 1;
> -	dcmd->flags = MFI_FRAME_DIR_READ;
> +	dcmd->flags = htole16(MFI_FRAME_DIR_READ);
>   	dcmd->timeout = 0;
>   	dcmd->pad_0 = 0;
> -	dcmd->data_xfer_len = sc->current_map_sz;
> -	dcmd->opcode = MR_DCMD_LD_MAP_GET_INFO;
> -	dcmd->sgl.sge32[0].phys_addr = map_phys_addr;
> -	dcmd->sgl.sge32[0].length = sc->current_map_sz;
> +	dcmd->data_xfer_len = htole32(sc->current_map_sz);
> +	dcmd->opcode = htole32(MR_DCMD_LD_MAP_GET_INFO);
> +	dcmd->sgl.sge32[0].phys_addr = htole32(map_phys_addr & 0xFFFFFFFF);
> +	dcmd->sgl.sge32[0].length = htole32(sc->current_map_sz);
>   
>   	retcode = mrsas_issue_polled(sc, cmd);
>   	if (retcode == ETIMEDOUT)
> @@ -4427,15 +4443,15 @@ mrsas_sync_map_info(struct mrsas_softc *sc)
>   	dcmd->cmd = MFI_CMD_DCMD;
>   	dcmd->cmd_status = 0xFF;
>   	dcmd->sge_count = 1;
> -	dcmd->flags = MFI_FRAME_DIR_WRITE;
> +	dcmd->flags = htole16(MFI_FRAME_DIR_WRITE);
>   	dcmd->timeout = 0;
>   	dcmd->pad_0 = 0;
> -	dcmd->data_xfer_len = sc->current_map_sz;
> +	dcmd->data_xfer_len = htole32(sc->current_map_sz);
>   	dcmd->mbox.b[0] = num_lds;
>   	dcmd->mbox.b[1] = MRSAS_DCMD_MBOX_PEND_FLAG;
> -	dcmd->opcode = MR_DCMD_LD_MAP_GET_INFO;
> -	dcmd->sgl.sge32[0].phys_addr = map_phys_addr;
> -	dcmd->sgl.sge32[0].length = sc->current_map_sz;
> +	dcmd->opcode = htole32(MR_DCMD_LD_MAP_GET_INFO);
> +	dcmd->sgl.sge32[0].phys_addr = htole32(map_phys_addr & 0xFFFFFFFF);
> +	dcmd->sgl.sge32[0].length = htole32(sc->current_map_sz);
>   
>   	sc->map_update_cmd = cmd;
>   	if (mrsas_issue_dcmd(sc, cmd)) {
> @@ -4472,17 +4488,17 @@ mrsas_get_pd_info(struct mrsas_softc *sc, u_int16_t device_id)
>   	memset(sc->pd_info_mem, 0, sizeof(struct mrsas_pd_info));
>   	memset(dcmd->mbox.b, 0, MFI_MBOX_SIZE);
>   
> -	dcmd->mbox.s[0] = device_id;
> +	dcmd->mbox.s[0] = htole16(device_id);
>   	dcmd->cmd = MFI_CMD_DCMD;
>   	dcmd->cmd_status = 0xFF;
>   	dcmd->sge_count = 1;
>   	dcmd->flags = MFI_FRAME_DIR_READ;
>   	dcmd->timeout = 0;
>   	dcmd->pad_0 = 0;
> -	dcmd->data_xfer_len = sizeof(struct mrsas_pd_info);
> -	dcmd->opcode = MR_DCMD_PD_GET_INFO;
> -	dcmd->sgl.sge32[0].phys_addr = (u_int32_t)sc->pd_info_phys_addr;
> -	dcmd->sgl.sge32[0].length = sizeof(struct mrsas_pd_info);
> +	dcmd->data_xfer_len = htole32(sizeof(struct mrsas_pd_info));
> +	dcmd->opcode = htole32(MR_DCMD_PD_GET_INFO);
> +	dcmd->sgl.sge32[0].phys_addr = htole32((u_int32_t)sc->pd_info_phys_addr & 0xFFFFFFFF);
> +	dcmd->sgl.sge32[0].length = htole32(sizeof(struct mrsas_pd_info));
>   
>   	if (!sc->mask_interrupts)
>   		retcode = mrsas_issue_blocked_cmd(sc, cmd);
> @@ -4493,7 +4509,7 @@ mrsas_get_pd_info(struct mrsas_softc *sc, u_int16_t device_id)
>   		goto dcmd_timeout;
>   
>   	sc->target_list[device_id].interface_type =
> -		sc->pd_info_mem->state.ddf.pdType.intf;
> +		le16toh(sc->pd_info_mem->state.ddf.pdType.intf);
>   
>   	do_ocr = 0;
>   
> @@ -4572,6 +4588,7 @@ mrsas_get_pd_list(struct mrsas_softc *sc)
>   	struct MR_PD_ADDRESS *pd_addr;
>   	bus_addr_t pd_list_phys_addr = 0;
>   	struct mrsas_tmp_dcmd *tcmd;
> +	u_int16_t dev_id;
>   
>   	cmd = mrsas_get_mfi_cmd(sc);
>   	if (!cmd) {
> @@ -4601,13 +4618,13 @@ mrsas_get_pd_list(struct mrsas_softc *sc)
>   	dcmd->cmd = MFI_CMD_DCMD;
>   	dcmd->cmd_status = 0xFF;
>   	dcmd->sge_count = 1;
> -	dcmd->flags = MFI_FRAME_DIR_READ;
> +	dcmd->flags = htole16(MFI_FRAME_DIR_READ);
>   	dcmd->timeout = 0;
>   	dcmd->pad_0 = 0;
> -	dcmd->data_xfer_len = MRSAS_MAX_PD * sizeof(struct MR_PD_LIST);
> -	dcmd->opcode = MR_DCMD_PD_LIST_QUERY;
> -	dcmd->sgl.sge32[0].phys_addr = pd_list_phys_addr;
> -	dcmd->sgl.sge32[0].length = MRSAS_MAX_PD * sizeof(struct MR_PD_LIST);
> +	dcmd->data_xfer_len = htole32(MRSAS_MAX_PD * sizeof(struct MR_PD_LIST));
> +	dcmd->opcode = htole32(MR_DCMD_PD_LIST_QUERY);
> +	dcmd->sgl.sge32[0].phys_addr = htole32(pd_list_phys_addr & 0xFFFFFFFF);
> +	dcmd->sgl.sge32[0].length = htole32(MRSAS_MAX_PD * sizeof(struct MR_PD_LIST));
>   
>   	if (!sc->mask_interrupts)
>   		retcode = mrsas_issue_blocked_cmd(sc, cmd);
> @@ -4620,17 +4637,18 @@ mrsas_get_pd_list(struct mrsas_softc *sc)
>   	/* Get the instance PD list */
>   	pd_count = MRSAS_MAX_PD;
>   	pd_addr = pd_list_mem->addr;
> -	if (pd_list_mem->count < pd_count) {
> +	if (le32toh(pd_list_mem->count) < pd_count) {
>   		memset(sc->local_pd_list, 0,
>   		    MRSAS_MAX_PD * sizeof(struct mrsas_pd_list));
> -		for (pd_index = 0; pd_index < pd_list_mem->count; pd_index++) {
> -			sc->local_pd_list[pd_addr->deviceId].tid = pd_addr->deviceId;
> -			sc->local_pd_list[pd_addr->deviceId].driveType =
> -			    pd_addr->scsiDevType;
> -			sc->local_pd_list[pd_addr->deviceId].driveState =
> +		for (pd_index = 0; pd_index < le32toh(pd_list_mem->count); pd_index++) {
> +			dev_id = le16toh(pd_addr->deviceId);
> +			sc->local_pd_list[dev_id].tid = dev_id;
> +			sc->local_pd_list[dev_id].driveType =
> +			    le16toh(pd_addr->scsiDevType);
> +			sc->local_pd_list[dev_id].driveState =
>   			    MR_PD_STATE_SYSTEM;
> -			if (sc->target_list[pd_addr->deviceId].target_id == 0xffff)
> -				mrsas_add_target(sc, pd_addr->deviceId);
> +			if (sc->target_list[dev_id].target_id == 0xffff)
> +				mrsas_add_target(sc, dev_id);
>   			pd_addr++;
>   		}
>   		for (pd_index = 0; pd_index < MRSAS_MAX_PD; pd_index++) {
> @@ -4711,10 +4729,10 @@ mrsas_get_ld_list(struct mrsas_softc *sc)
>   	dcmd->sge_count = 1;
>   	dcmd->flags = MFI_FRAME_DIR_READ;
>   	dcmd->timeout = 0;
> -	dcmd->data_xfer_len = sizeof(struct MR_LD_LIST);
> -	dcmd->opcode = MR_DCMD_LD_GET_LIST;
> -	dcmd->sgl.sge32[0].phys_addr = ld_list_phys_addr;
> -	dcmd->sgl.sge32[0].length = sizeof(struct MR_LD_LIST);
> +	dcmd->data_xfer_len = htole32(sizeof(struct MR_LD_LIST));
> +	dcmd->opcode = htole32(MR_DCMD_LD_GET_LIST);
> +	dcmd->sgl.sge32[0].phys_addr = htole32(ld_list_phys_addr);
> +	dcmd->sgl.sge32[0].length = htole32(sizeof(struct MR_LD_LIST));
>   	dcmd->pad_0 = 0;
>   
>   	if (!sc->mask_interrupts)
> @@ -4730,10 +4748,10 @@ mrsas_get_ld_list(struct mrsas_softc *sc)
>   #endif
>   
>   	/* Get the instance LD list */
> -	if (ld_list_mem->ldCount <= sc->fw_supported_vd_count) {
> -		sc->CurLdCount = ld_list_mem->ldCount;
> +	if (le32toh(ld_list_mem->ldCount) <= sc->fw_supported_vd_count) {
> +		sc->CurLdCount = le32toh(ld_list_mem->ldCount);
>   		memset(sc->ld_ids, 0xff, MAX_LOGICAL_DRIVES_EXT);
> -		for (ld_index = 0; ld_index < ld_list_mem->ldCount; ld_index++) {
> +		for (ld_index = 0; ld_index < le32toh(ld_list_mem->ldCount); ld_index++) {
>   			ids = ld_list_mem->ldList[ld_index].ref.ld_context.targetId;
>   			drv_tgt_id = ids + MRSAS_MAX_PD;
>   			if (ld_list_mem->ldList[ld_index].state != 0) {
> diff --git a/sys/dev/mrsas/mrsas.h b/sys/dev/mrsas/mrsas.h
> index fbb08215b7b1..069db02fadff 100644
> --- a/sys/dev/mrsas/mrsas.h
> +++ b/sys/dev/mrsas/mrsas.h
> @@ -165,14 +165,22 @@ do {                                                \
>           device_printf(sc->mrsas_dev, msg, ##args);  \
>   } while (0)
>   
> +#define	le32_to_cpus(x)	do { *((u_int32_t *)(x)) = le32toh((*(u_int32_t *)x)); } while (0)
> +#define le16_to_cpus(x) do { *((u_int16_t *)(x)) = le16toh((*(u_int16_t *)x)); } while (0)
> +
>   /****************************************************************************
>    * Raid Context structure which describes MegaRAID specific IO Paramenters
>    * This resides at offset 0x60 where the SGL normally starts in MPT IO Frames
>    ****************************************************************************/
>   
>   typedef struct _RAID_CONTEXT {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   	u_int8_t Type:4;
>   	u_int8_t nseg:4;
> +#else
> +	u_int8_t nseg:4;
> +	u_int8_t Type:4;
> +#endif
>   	u_int8_t resvd0;
>   	u_int16_t timeoutValue;
>   	u_int8_t regLockFlags;
> @@ -197,12 +205,19 @@ typedef struct _RAID_CONTEXT {
>    * This resides at offset 0x60 where the SGL normally starts in MPT IO Frames
>    */
>   typedef struct _RAID_CONTEXT_G35 {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   	u_int16_t Type:4;
>   	u_int16_t nseg:4;
>   	u_int16_t resvd0:8;
> +#else
> +	u_int16_t resvd0:8;
> +	u_int16_t nseg:4;
> +	u_int16_t Type:4;
> +#endif
>   	u_int16_t timeoutValue;
>   	union {
>   		struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   			u_int16_t reserved:1;
>   			u_int16_t sld:1;
>   			u_int16_t c2f:1;
> @@ -213,6 +228,18 @@ typedef struct _RAID_CONTEXT_G35 {
>   			u_int16_t log:1;
>   			u_int16_t cpuSel:4;
>   			u_int16_t setDivert:4;
> +#else
> +			u_int16_t setDivert:4;
> +			u_int16_t cpuSel:4;
> +			u_int16_t log:1;
> +			u_int16_t rw:1;
> +			u_int16_t sbs:1;
> +			u_int16_t sqn:1;
> +			u_int16_t fwn:1;
> +			u_int16_t c2f:1;
> +			u_int16_t sld:1;
> +			u_int16_t reserved:1;
> +#endif
>   		}	bits;
>   		u_int16_t s;
>   	}	routingFlags;
> @@ -228,9 +255,15 @@ typedef struct _RAID_CONTEXT_G35 {
>   	u_int8_t RAIDFlags;
>   	u_int8_t spanArm;
>   	u_int16_t configSeqNum;
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   	u_int16_t numSGE:12;
>   	u_int16_t reserved:3;
>   	u_int16_t streamDetected:1;
> +#else
> +	u_int16_t streamDetected:1;
> +	u_int16_t reserved:3;
> +	u_int16_t numSGE:12;
> +#endif
>   	u_int8_t resvd2[2];
>   }	RAID_CONTEXT_G35;
>   
> @@ -433,9 +466,15 @@ typedef struct _MR_TASK_MANAGE_REQUEST {
>   	MR_TM_REQUEST        TmRequest;
>   	union {
>   		struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   			u_int32_t isTMForLD:1;
>   			u_int32_t isTMForPD:1;
>   			u_int32_t reserved1:30;
> +#else
> +			u_int32_t reserved1:30;
> +			u_int32_t isTMForPD:1;
> +			u_int32_t isTMForLD:1;
> +#endif
>   			u_int32_t reserved2;
>   		} tmReqFlags;
>   		MR_TM_REPLY   TMReply;
> @@ -808,6 +847,7 @@ typedef struct _MR_SPAN_BLOCK_INFO {
>   
>   typedef struct _MR_LD_RAID {
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int32_t fpCapable:1;
>   		u_int32_t raCapable:1;
>   		u_int32_t reserved5:2;
> @@ -822,6 +862,22 @@ typedef struct _MR_LD_RAID {
>   		u_int32_t tmCapable:1;
>   		u_int32_t fpCacheBypassCapable:1;
>   		u_int32_t reserved4:5;
> +#else
> +		u_int32_t reserved4:5;
> +		u_int32_t fpCacheBypassCapable:1;
> +		u_int32_t tmCapable:1;
> +		u_int32_t fpNonRWCapable:1;
> +		u_int32_t fpReadAcrossStripe:1;
> +		u_int32_t fpWriteAcrossStripe:1;
> +		u_int32_t fpReadCapable:1;
> +		u_int32_t fpWriteCapable:1;
> +		u_int32_t encryptionType:8;
> +		u_int32_t pdPiMode:4;
> +		u_int32_t ldPiMode:4;
> +		u_int32_t reserved5:2;
> +		u_int32_t raCapable:1;
> +		u_int32_t fpCapable:1;
> +#endif
>   	}	capability;
>   	u_int32_t reserved6;
>   	u_int64_t size;
> @@ -844,9 +900,15 @@ typedef struct _MR_LD_RAID {
>   	u_int16_t seqNum;
>   
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
> +		u_int32_t reserved:30;
> +		u_int32_t regTypeReqOnReadLsValid:1;
> +		u_int32_t ldSyncRequired:1;
> +#else
>   		u_int32_t ldSyncRequired:1;
>   		u_int32_t regTypeReqOnReadLsValid:1;
>   		u_int32_t reserved:30;
> +#endif
>   	}	flags;
>   
>   	u_int8_t LUN[8];
> @@ -854,9 +916,15 @@ typedef struct _MR_LD_RAID {
>   	u_int8_t reserved2[3];
>   	u_int32_t logicalBlockLength;
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
> +		u_int32_t reserved1:24;
> +		u_int32_t LdLogicalBlockExp:4;
> +		u_int32_t LdPiExp:4;
> +#else
>   		u_int32_t LdPiExp:4;
>   		u_int32_t LdLogicalBlockExp:4;
>   		u_int32_t reserved1:24;
> +#endif
>   	}	exponent;
>   	u_int8_t reserved3[0x80 - 0x38];
>   }	MR_LD_RAID;
> @@ -1039,8 +1107,13 @@ struct MR_PD_CFG_SEQ {
>   	u_int16_t seqNum;
>   	u_int16_t devHandle;
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int8_t tmCapable:1;
>   		u_int8_t reserved:7;
> +#else
> +		u_int8_t reserved:7;
> +		u_int8_t tmCapable:1;
> +#endif
>   	} capability;
>   	u_int8_t reserved;
>   	u_int16_t pdTargetId;
> @@ -1868,6 +1941,7 @@ struct mrsas_ctrl_prop {
>   	 * structure.
>   	 */
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int32_t copyBackDisabled:1;
>   		u_int32_t SMARTerEnabled:1;
>   		u_int32_t prCorrectUnconfiguredAreas:1;
> @@ -1899,6 +1973,39 @@ struct mrsas_ctrl_prop {
>   		u_int32_t enableSwZone:1;
>   		u_int32_t limitMaxRateSATA3G:1;
>   		u_int32_t reserved:2;
> +#else
> +		u_int32_t reserved:2;
> +		u_int32_t limitMaxRateSATA3G:1;
> +		u_int32_t enableSwZone:1;
> +		u_int32_t ignore64ldRestriction:1;
> +		u_int32_t disableT10RebuildAssist:1;
> +		u_int32_t disableImmediateIO:1;
> +		u_int32_t enableAutoLockRecovery:1;
> +		u_int32_t enableVirtualCache:1;
> +		u_int32_t enableConfigAutoBalance:1;
> +		u_int32_t forceSGPIOForQuadOnly:1;
> +		u_int32_t useEmergencySparesforSMARTer:1;
> +		u_int32_t useUnconfGoodForEmergency:1;
> +		u_int32_t useGlobalSparesForEmergency:1;
> +		u_int32_t preventPIImport:1;
> +		u_int32_t enablePI:1;
> +		u_int32_t useDiskActivityForLocate:1;
> +		u_int32_t disableCacheBypass:1;
> +		u_int32_t enableJBOD:1;
> +		u_int32_t disableSpinDownHS:1;
> +		u_int32_t allowBootWithPinnedCache:1;
> +		u_int32_t disableOnlineCtrlReset:1;
> +		u_int32_t enableSecretKeyControl:1;
> +		u_int32_t autoEnhancedImport:1;
> +		u_int32_t enableSpinDownUnconfigured:1;
> +		u_int32_t SSDPatrolReadEnabled:1;
> +		u_int32_t SSDSMARTerEnabled:1;
> +		u_int32_t disableNCQ:1;
> +		u_int32_t useFdeOnly:1;
> +		u_int32_t prCorrectUnconfiguredAreas:1;
> +		u_int32_t SMARTerEnabled:1;
> +		u_int32_t copyBackDisabled:1;
> +#endif
>   	}	OnOffProperties;
>   	u_int8_t autoSnapVDSpace;
>   	u_int8_t viewSpace;
> @@ -2170,6 +2277,7 @@ struct mrsas_ctrl_info {
>   	u_int16_t cacheMemorySize;	/* 0x7A2 */
>   
>   	struct {			/* 0x7A4 */
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int32_t supportPIcontroller:1;
>   		u_int32_t supportLdPIType1:1;
>   		u_int32_t supportLdPIType2:1;
> @@ -2194,6 +2302,30 @@ struct mrsas_ctrl_info {
>   
>   		u_int32_t supportUnevenSpans:1;
>   		u_int32_t reserved:11;
> +#else
> +		u_int32_t reserved:11;
> +		u_int32_t supportUnevenSpans:1;
> +		u_int32_t dedicatedHotSparesLimited:1;
> +		u_int32_t headlessMode:1;
> +		u_int32_t supportEmulatedDrives:1;
> +		u_int32_t supportResetNow:1;
> +		u_int32_t realTimeScheduler:1;
> +		u_int32_t supportSSDPatrolRead:1;
> +		u_int32_t supportPerfTuning:1;
> +		u_int32_t disableOnlinePFKChange:1;
> +		u_int32_t supportJBOD:1;
> +		u_int32_t supportBootTimePFKChange:1;
> +		u_int32_t supportSetLinkSpeed:1;
> +		u_int32_t supportEmergencySpares:1;
> +		u_int32_t supportSuspendResumeBGops:1;
> +		u_int32_t blockSSDWriteCacheChange:1;
> +		u_int32_t supportShieldState:1;
> +		u_int32_t supportLdBBMInfo:1;
> +		u_int32_t supportLdPIType3:1;
> +		u_int32_t supportLdPIType2:1;
> +		u_int32_t supportLdPIType1:1;
> +		u_int32_t supportPIcontroller:1;
> +#endif
>   	}	adapterOperations2;
>   
>   	u_int8_t driverVersion[32];	/* 0x7A8 */
> @@ -2206,6 +2338,7 @@ struct mrsas_ctrl_info {
>   	u_int8_t reserved5[2];		/* 0x7CD reserved */
>   
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int32_t peerIsPresent:1;
>   		u_int32_t peerIsIncompatible:1;
>   
> @@ -2214,6 +2347,15 @@ struct mrsas_ctrl_info {
>   		u_int32_t ctrlPropIncompatible:1;
>   		u_int32_t premiumFeatureMismatch:1;
>   		u_int32_t reserved:26;
> +#else
> +		u_int32_t reserved:26;
> +		u_int32_t premiumFeatureMismatch:1;
> +		u_int32_t ctrlPropIncompatible:1;
> +		u_int32_t fwVersionMismatch:1;
> +		u_int32_t hwIncompatible:1;
> +		u_int32_t peerIsIncompatible:1;
> +		u_int32_t peerIsPresent:1;
> +#endif
>   	}	cluster;
>   
>   	char	clusterId[16];		/* 0x7D4 */
> @@ -2221,6 +2363,7 @@ struct mrsas_ctrl_info {
>   	char	reserved6[4];		/* 0x7E4 RESERVED FOR IOV */
>   
>   	struct {			/* 0x7E8 */
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int32_t supportPersonalityChange:2;
>   		u_int32_t supportThermalPollInterval:1;
>   		u_int32_t supportDisableImmediateIO:1;
> @@ -2246,11 +2389,39 @@ struct mrsas_ctrl_info {
>   		u_int32_t supportExtendedSSCSize:1;
>   		u_int32_t useSeqNumJbodFP:1;
>   		u_int32_t reserved:7;
> +#else
> +		u_int32_t reserved:7;
> +		u_int32_t useSeqNumJbodFP:1;
> +		u_int32_t supportExtendedSSCSize:1;
> +		u_int32_t supportDiskCacheSettingForSysPDs:1;
> +		u_int32_t supportCPLDUpdate:1;
> +		u_int32_t supportTTYLogCompression:1;
> +		u_int32_t discardCacheDuringLDDelete:1;
> +		u_int32_t supportSecurityonJBOD:1;
> +		u_int32_t supportCacheBypassModes:1;
> +		u_int32_t supportDisableSESMonitoring:1;
> +		u_int32_t supportForceFlash:1;
> +		u_int32_t supportNVDRAM:1;
> +		u_int32_t supportDrvActivityLEDSetting:1;
> +		u_int32_t supportAllowedOpsforDrvRemoval:1;
> +		u_int32_t supportHOQRebuild:1;
> +		u_int32_t supportForceTo512e:1;
> +		u_int32_t supportNVCacheErase:1;
> +		u_int32_t supportDebugQueue:1;
> +		u_int32_t supportSwZone:1;
> +		u_int32_t supportCrashDump:1;
> +		u_int32_t supportMaxExtLDs:1;
> +		u_int32_t supportT10RebuildAssist:1;
> +		u_int32_t supportDisableImmediateIO:1;
> +		u_int32_t supportThermalPollInterval:1;
> +		u_int32_t supportPersonalityChange:2;
> +#endif
>   	}	adapterOperations3;
>   
>   	u_int8_t pad_cpld[16];
>   
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int16_t ctrlInfoExtSupported:1;
>   		u_int16_t supportIbuttonLess:1;
>   		u_int16_t supportedEncAlgo:1;
> @@ -2260,6 +2431,17 @@ struct mrsas_ctrl_info {
>   		u_int16_t supportPdMapTargetId:1;
>   		u_int16_t FWSwapsBBUVPDInfo:1;
>   		u_int16_t reserved:8;
> +#else
> +		u_int16_t reserved:8;
> +		u_int16_t FWSwapsBBUVPDInfo:1;
> +		u_int16_t supportPdMapTargetId:1;
> +		u_int16_t supportSESCtrlInMultipathCfg:1;
> +		u_int16_t imageUploadSupported:1;
> +		u_int16_t supportEncryptedMfc:1;
> +		u_int16_t supportedEncAlgo:1;
> +		u_int16_t supportIbuttonLess:1;
> +		u_int16_t ctrlInfoExtSupported:1;
> +#endif
>   	}	adapterOperations4;
>   
>   	u_int8_t pad[0x800 - 0x7FE];	/* 0x7FE */
> @@ -2332,6 +2514,7 @@ struct mrsas_ctrl_info {
>   
>   typedef union _MFI_CAPABILITIES {
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int32_t support_fp_remote_lun:1;
>   		u_int32_t support_additional_msix:1;
>   		u_int32_t support_fastpath_wb:1;
> @@ -2342,6 +2525,18 @@ typedef union _MFI_CAPABILITIES {
>   		u_int32_t support_ext_queue_depth:1;
>   		u_int32_t support_ext_io_size:1;
>   		u_int32_t reserved:23;
> +#else
> +		u_int32_t reserved:23;
> +		u_int32_t support_ext_io_size:1;
> +		u_int32_t support_ext_queue_depth:1;
> +		u_int32_t security_protocol_cmds_fw:1;
> +		u_int32_t support_core_affinity:1;
> +		u_int32_t support_ndrive_r1_lb:1;
> +		u_int32_t support_max_255lds:1;
> +		u_int32_t support_fastpath_wb:1;
> +		u_int32_t support_additional_msix:1;
> +		u_int32_t support_fp_remote_lun:1;
> +#endif
>   	}	mfi_capabilities;
>   	u_int32_t reg;
>   }	MFI_CAPABILITIES;
> @@ -2602,9 +2797,15 @@ union mrsas_frame {
>   #pragma pack(1)
>   union mrsas_evt_class_locale {
>   	struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   		u_int16_t locale;
>   		u_int8_t reserved;
>   		int8_t	class;
> +#else
> +		int8_t	class;
> +		u_int8_t reserved;
> +		u_int16_t locale;
> +#endif
>   	} __packed members;
>   
>   	u_int32_t word;
> @@ -2890,6 +3091,7 @@ typedef struct _MRSAS_DRV_PCI_COMMON_HEADER {
>   typedef struct _MRSAS_DRV_PCI_LINK_CAPABILITY {
>   	union {
>   		struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   			u_int32_t linkSpeed:4;
>   			u_int32_t linkWidth:6;
>   			u_int32_t aspmSupport:2;
> @@ -2897,6 +3099,15 @@ typedef struct _MRSAS_DRV_PCI_LINK_CAPABILITY {
>   			u_int32_t l1ExitLatency:3;
>   			u_int32_t rsvdp:6;
>   			u_int32_t portNumber:8;
> +#else
> +			u_int32_t portNumber:8;
> +			u_int32_t rsvdp:6;
> +			u_int32_t l1ExitLatency:3;
> +			u_int32_t losExitLatency:3;
> +			u_int32_t aspmSupport:2;
> +			u_int32_t linkWidth:6;
> +			u_int32_t linkSpeed:4;
> +#endif
>   		}	bits;
>   
>   		u_int32_t asUlong;
> @@ -2908,12 +3119,21 @@ typedef struct _MRSAS_DRV_PCI_LINK_CAPABILITY {
>   typedef struct _MRSAS_DRV_PCI_LINK_STATUS_CAPABILITY {
>   	union {
>   		struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   			u_int16_t linkSpeed:4;
>   			u_int16_t negotiatedLinkWidth:6;
>   			u_int16_t linkTrainingError:1;
>   			u_int16_t linkTraning:1;
>   			u_int16_t slotClockConfig:1;
>   			u_int16_t rsvdZ:3;
> +#else
> +			u_int16_t rsvdZ:3;
> +			u_int16_t slotClockConfig:1;
> +			u_int16_t linkTraning:1;
> +			u_int16_t linkTrainingError:1;
> +			u_int16_t negotiatedLinkWidth:6;
> +			u_int16_t linkSpeed:4;
> +#endif
>   		}	bits;
>   
>   		u_int16_t asUshort;
> @@ -2967,6 +3187,7 @@ union MR_PD_DDF_TYPE {
>   	struct {
>   		union {
>   			struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>   				u_int16_t forcedPDGUID:1;
>   				u_int16_t inVD:1;
>   				u_int16_t isGlobalSpare:1;
> @@ -2974,6 +3195,15 @@ union MR_PD_DDF_TYPE {
>   				u_int16_t isForeign:1;
>   				u_int16_t reserved:7;
>   				u_int16_t intf:4;
> +#else
> +				u_int16_t intf:4;
> +				u_int16_t reserved:7;
> +				u_int16_t isForeign:1;
> +				u_int16_t isSpare:1;
> +				u_int16_t isGlobalSpare:1;
> +				u_int16_t inVD:1;
> +				u_int16_t forcedPDGUID:1;
> +#endif
>   			} pdType;
>   			u_int16_t type;
>   		};
> @@ -3004,6 +3234,7 @@ union MR_PROGRESS {
>    */
>   struct MR_PD_PROGRESS {
>       struct {
> +#if _BYTE_ORDER == _LITTLE_ENDIAN
>           u_int32_t     rbld:1;
>           u_int32_t     patrol:1;
>           u_int32_t     clear:1;
> @@ -3011,6 +3242,15 @@ struct MR_PD_PROGRESS {
>           u_int32_t     erase:1;
>           u_int32_t     locate:1;
>           u_int32_t     reserved:26;
> *** 783 LINES SKIPPED ***
> 


More information about the dev-commits-src-main mailing list