Beispiel #1
0
s32 Xil_TestIO16(u16 *Addr, s32 Length, u16 Value, s32 Kind, s32 Swap)
{
	u16 *TempAddr16;
	u16 ValueIn = 0U;
	s32 Index;
	TempAddr16 = Addr;
	Xil_AssertNonvoid(TempAddr16 != NULL);

	for (Index = 0; Index < Length; Index++) {
		switch (Kind) {
		case XIL_TESTIO_LE:
			Xil_Out16LE((INTPTR)TempAddr16, Value);
			break;
		case XIL_TESTIO_BE:
			Xil_Out16BE((INTPTR)TempAddr16, Value);
			break;
		default:
			Xil_Out16((INTPTR)TempAddr16, Value);
			break;
		}

		ValueIn = Xil_In16((INTPTR)TempAddr16);

		if ((Kind != 0) && (Swap != 0)) {
			ValueIn = Swap16(ValueIn);
		}

		if (Value != ValueIn) {
			return -1;
		}

		/* second round */
		Xil_Out16((INTPTR)TempAddr16, Value);

		switch (Kind) {
		case XIL_TESTIO_LE:
			ValueIn = Xil_In16LE((INTPTR)TempAddr16);
			break;
		case XIL_TESTIO_BE:
			ValueIn = Xil_In16BE((INTPTR)TempAddr16);
			break;
		default:
			ValueIn = Xil_In16((INTPTR)TempAddr16);
			break;
		}


		if ((Kind != 0) && (Swap != 0)) {
			ValueIn = Swap16(ValueIn);
		}

		if (Value != ValueIn) {
			return -1;
		}
		TempAddr16 += sizeof(u16);
	}
	return 0;
}
Beispiel #2
0
int Xil_TestIO16(u16 *Addr, int Len, u16 Value, int Kind, int Swap)
{
	u16 ValueIn;
	int Index;

	for (Index = 0; Index < Len; Index++) {
		switch (Kind) {
		case XIL_TESTIO_LE:
			Xil_Out16LE((u32)Addr, Value);
			break;
		case XIL_TESTIO_BE:
			Xil_Out16BE((u32)Addr, Value);
			break;
		default:
			Xil_Out16((u32)Addr, Value);
			break;
		}

		ValueIn = Xil_In16((u32)Addr);

		if (Kind && Swap)
			ValueIn = Swap16(ValueIn);

		if (Value != ValueIn) {
			return -1;
		}

		/* second round */
		Xil_Out16((u32)Addr, Value);

		switch (Kind) {
		case XIL_TESTIO_LE:
			ValueIn = Xil_In16LE((u32)Addr);
			break;
		case XIL_TESTIO_BE:
			ValueIn = Xil_In16BE((u32)Addr);
			break;
		default:
			ValueIn = Xil_In16((u32)Addr);
			break;
		}


		if (Kind && Swap)
			ValueIn = Swap16(ValueIn);

		if (Value != ValueIn) {
			return -1;
		}
		Addr++;
	}

	return 0;

}
/**
*
* This bit of ugliness allows us to present a structure to the user. The
* byte buffer which was read from the CompactFlash is converted into the
* XSysAce_CFParameters structure. The byte buffer is accessed by the indices
* of the fields as defined at the top of this file. We do not read from
* CompactFlash directly into the CF Parameter structure because of structure
* packing problems.
*
* Note that we also need to perform endian conversion here since the System
* ACE device gives us little endian data and we're (possibly) on a big endian
* processor.
*
* @param	ParamPtr is the structure to fill
* @param	BufPtr is the byte buffer containing the CF parameter data
*
* @return	None.
*
* @note		None.
*
******************************************************************************/
static void FillParam(XSysAce_CFParameters * ParamPtr, u8 *BufPtr)
{
	u16 HiWord;
	u16 LoWord;

	Xil_Out16LE((u32)&ParamPtr->Signature,
			*((u16 *) &BufPtr[XSA_CFPARM_SIGNATURE]));
	Xil_Out16LE((u32)&ParamPtr->NumCylinders,
			*((u16 *) &BufPtr[XSA_CFPARM_NUMCYLS]));
	Xil_Out16LE((u32)&ParamPtr->Reserved,
			*((u16 *) &BufPtr[XSA_CFPARM_RESERVED1]));
	Xil_Out16LE((u32)&ParamPtr->NumHeads,
			*((u16 *) &BufPtr[XSA_CFPARM_NUMHEADS]));
	Xil_Out16LE((u32)&ParamPtr->NumBytesPerTrack,
			*((u16 *) &BufPtr[XSA_CFPARM_BYTES_TRACK]));
	Xil_Out16LE((u32)&ParamPtr->NumBytesPerSector,
			*((u16 *) &BufPtr[XSA_CFPARM_BYTES_SECT]));
	Xil_Out16LE((u32)&ParamPtr->NumSectorsPerTrack,
			*((u16 *) &BufPtr[XSA_CFPARM_SECTS_TRK]));

	/* NumSectorsPerCard is stored as two half-words, MSW first */
	Xil_Out16LE((u32)&HiWord, *((u16 *) &BufPtr[XSA_CFPARM_SECTS_HI]));
	Xil_Out16LE((u32)&LoWord, *((u16 *) &BufPtr[XSA_CFPARM_SECTS_LO]));
	ParamPtr->NumSectorsPerCard = ((u32) HiWord << 16) | (u32) LoWord;

	Xil_Out16LE((u32)&ParamPtr->VendorUnique,
				*((u16 *) &BufPtr[XSA_CFPARM_VENDOR1]));

	WordCopySwap(&BufPtr[XSA_CFPARM_SERIAL_NO], ParamPtr->SerialNo, 20);

	Xil_Out16LE((u32)&ParamPtr->BufferType,
				*((u16 *) &BufPtr[XSA_CFPARM_BUFFER_TYPE]));
	Xil_Out16LE((u32)&ParamPtr->BufferSize,
				*((u16 *) &BufPtr[XSA_CFPARM_BUFFER_SIZE]));
	Xil_Out16LE((u32)&ParamPtr->NumEccBytes,
			*((u16 *) &BufPtr[XSA_CFPARM_ECC_BYTES]));

	WordCopySwap(&BufPtr[XSA_CFPARM_FW_VERSION], ParamPtr->FwVersion, 8);
	WordCopySwap(&BufPtr[XSA_CFPARM_MODEL_NO], ParamPtr->ModelNo, 40);

	Xil_Out16LE((u32)&ParamPtr->MaxSectors,
			*((u16 *) &BufPtr[XSA_CFPARM_MAX_SECTORS]));
	Xil_Out16LE((u32)&ParamPtr->DblWord,
			*((u16 *) &BufPtr[XSA_CFPARM_DBL_WORD]));
	Xil_Out16LE((u32)&ParamPtr->Capabilities,
			*((u16 *) &BufPtr[XSA_CFPARM_CAPS]));
	Xil_Out16LE((u32)&ParamPtr->Reserved2,
			*((u16 *) &BufPtr[XSA_CFPARM_RESERVED2]));
	Xil_Out16LE((u32)&ParamPtr->PioMode,
			*((u16 *) &BufPtr[XSA_CFPARM_PIO_MODE]));
	Xil_Out16LE((u32)&ParamPtr->DmaMode,
			*((u16 *) &BufPtr[XSA_CFPARM_DMA_MODE]));
	Xil_Out16LE((u32)&ParamPtr->TranslationValid,
			*((u16 *) &BufPtr[XSA_CFPARM_TRANSLATE]));
	Xil_Out16LE((u32)&ParamPtr->CurNumCylinders,
			*((u16 *) &BufPtr[XSA_CFPARM_CURCYLS]));
	Xil_Out16LE((u32)&ParamPtr->CurNumHeads,
			*((u16 *) &BufPtr[XSA_CFPARM_CURHEADS]));
	Xil_Out16LE((u32)&ParamPtr->CurSectorsPerTrack,
			*((u16 *) &BufPtr[XSA_CFPARM_CURSECTS_TRK]));
	Xil_Out32LE((u32)&ParamPtr->CurSectorsPerCard,
			*((u32 *) &BufPtr[XSA_CFPARM_CURSECTS]));
	Xil_Out16LE((u32)&ParamPtr->MultipleSectors,
			*((u16 *) &BufPtr[XSA_CFPARM_MULTIPLE]));
	Xil_Out32LE((u32)&ParamPtr->LbaSectors,
			*((u32 *) &BufPtr[XSA_CFPARM_LBA_SECTS]));

	WordCopySwap(&BufPtr[XSA_CFPARM_RESERVED3], ParamPtr->Reserved3, 132);

	Xil_Out16LE((u32)&ParamPtr->SecurityStatus,
			*((u16 *) &BufPtr[XSA_CFPARM_SECURITY]));

	WordCopySwap(&BufPtr[XSA_CFPARM_VENDOR2], ParamPtr->VendorUniqueBytes,
		     62);

	Xil_Out16LE((u32)&ParamPtr->PowerDesc,
			*((u16 *) &BufPtr[XSA_CFPARM_POWER]));

	WordCopySwap(&BufPtr[XSA_CFPARM_RESERVED4], ParamPtr->Reserved4, 190);

}