123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- /******************************************************************************
- *
- * Author: Xilinx, Inc.
- *
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- *
- * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
- * COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
- * ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD,
- * XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE
- * FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING
- * ANY THIRD PARTY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
- * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
- * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY
- * WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM
- * CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- *
- * Xilinx hardware products are not intended for use in life support
- * appliances, devices, or systems. Use in such applications is
- * expressly prohibited.
- *
- *
- * (c) Copyright 2002-2004 Xilinx Inc.
- * All rights reserved.
- *
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- ******************************************************************************/
- /*****************************************************************************
- *
- * This file contains the implementation of the XVersion component. This
- * component represents a version ID. It is encapsulated within a component
- * so that it's type and implementation can change without affecting users of
- * it.
- *
- * The version is formatted as X.YYZ where X = 0 - 9, Y = 00 - 99, Z = a - z
- * X is the major revision, YY is the minor revision, and Z is the
- * compatability revision.
- *
- * Packed versions are also utilized for the configuration ROM such that
- * memory is minimized. A packed version consumes only 16 bits and is
- * formatted as follows.
- *
- * <pre>
- * Revision Range Bit Positions
- *
- * Major Revision 0 - 9 Bits 15 - 12
- * Minor Revision 0 - 99 Bits 11 - 5
- * Compatability Revision a - z Bits 4 - 0
- </pre>
- *
- ******************************************************************************/
- /***************************** Include Files *********************************/
- #include "xbasic_types.h"
- #include "xversion.h"
- /************************** Constant Definitions *****************************/
- /* the following constants define the masks and shift values to allow the
- * revisions to be packed and unpacked, a packed version is packed into a 16
- * bit value in the following format, XXXXYYYYYYYZZZZZ, where XXXX is the
- * major revision, YYYYYYY is the minor revision, and ZZZZZ is the compatability
- * revision
- */
- #define XVE_MAJOR_SHIFT_VALUE 12
- #define XVE_MINOR_ONLY_MASK 0x0FE0
- #define XVE_MINOR_SHIFT_VALUE 5
- #define XVE_COMP_ONLY_MASK 0x001F
- /* the following constants define the specific characters of a version string
- * for each character of the revision, a version string is in the following
- * format, "X.YYZ" where X is the major revision (0 - 9), YY is the minor
- * revision (00 - 99), and Z is the compatability revision (a - z)
- */
- #define XVE_MAJOR_CHAR 0 /* major revision 0 - 9 */
- #define XVE_MINOR_TENS_CHAR 2 /* minor revision tens 0 - 9 */
- #define XVE_MINOR_ONES_CHAR 3 /* minor revision ones 0 - 9 */
- #define XVE_COMP_CHAR 4 /* compatability revision a - z */
- #define XVE_END_STRING_CHAR 5
- /**************************** Type Definitions *******************************/
- /***************** Macros (Inline Functions) Definitions *********************/
- /************************** Function Prototypes ******************************/
- static u32 IsVersionStringValid(s8 * StringPtr);
- /*****************************************************************************
- *
- * Unpacks a packed version into the specified version. Versions are packed
- * into the configuration ROM to reduce the amount storage. A packed version
- * is a binary format as oppossed to a non-packed version which is implemented
- * as a string.
- *
- * @param InstancePtr points to the version to unpack the packed version into.
- * @param PackedVersion contains the packed version to unpack.
- *
- * @return
- *
- * None.
- *
- * @note
- *
- * None.
- *
- ******************************************************************************/
- void
- XVersion_UnPack(XVersion * InstancePtr, u16 PackedVersion)
- {
- /* not implemented yet since CROM related */
- }
- /*****************************************************************************
- *
- * Packs a version into the specified packed version. Versions are packed into
- * the configuration ROM to reduce the amount storage.
- *
- * @param InstancePtr points to the version to pack.
- * @param PackedVersionPtr points to the packed version which will receive
- * the new packed version.
- *
- * @return
- *
- * A status, XST_SUCCESS, indicating the packing was accomplished
- * successfully, or an error, XST_INVALID_VERSION, indicating the specified
- * input version was not valid such that the pack did not occur
- * <br><br>
- * The packed version pointed to by PackedVersionPtr is modified with the new
- * packed version if the status indicates success.
- *
- * @note
- *
- * None.
- *
- ******************************************************************************/
- XStatus
- XVersion_Pack(XVersion * InstancePtr, u16 * PackedVersionPtr)
- {
- /* not implemented yet since CROM related */
- return XST_SUCCESS;
- }
- /*****************************************************************************
- *
- * Determines if two versions are equal.
- *
- * @param InstancePtr points to the first version to be compared.
- * @param VersionPtr points to a second version to be compared.
- *
- * @return
- *
- * TRUE if the versions are equal, FALSE otherwise.
- *
- * @note
- *
- * None.
- *
- ******************************************************************************/
- u32
- XVersion_IsEqual(XVersion * InstancePtr, XVersion * VersionPtr)
- {
- u8 *Version1 = (u8 *) InstancePtr;
- u8 *Version2 = (u8 *) VersionPtr;
- int Index;
- /* assert to verify input arguments */
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(VersionPtr != NULL);
- /* check each byte of the versions to see if they are the same,
- * return at any point a byte differs between them
- */
- for (Index = 0; Index < sizeof (XVersion); Index++) {
- if (Version1[Index] != Version2[Index]) {
- return FALSE;
- }
- }
- /* No byte was found to be different between the versions, so indicate
- * the versions are equal
- */
- return TRUE;
- }
- /*****************************************************************************
- *
- * Converts a version to a null terminated string.
- *
- * @param InstancePtr points to the version to convert.
- * @param StringPtr points to the string which will be the result of the
- * conversion. This does not need to point to a null terminated
- * string as an input, but must point to storage which is an adequate
- * amount to hold the result string.
- *
- * @return
- *
- * The null terminated string is inserted at the location pointed to by
- * StringPtr if the status indicates success.
- *
- * @note
- *
- * It is necessary for the caller to have already allocated the storage to
- * contain the string. The amount of memory necessary for the string is
- * specified in the version header file.
- *
- ******************************************************************************/
- void
- XVersion_ToString(XVersion * InstancePtr, s8 * StringPtr)
- {
- /* assert to verify input arguments */
- XASSERT_VOID(InstancePtr != NULL);
- XASSERT_VOID(StringPtr != NULL);
- /* since version is implemented as a string, just copy the specified
- * input into the specified output
- */
- XVersion_Copy(InstancePtr, (XVersion *) StringPtr);
- }
- /*****************************************************************************
- *
- * Initializes a version from a null terminated string. Since the string may not
- * be a format which is compatible with the version, an error could occur.
- *
- * @param InstancePtr points to the version which is to be initialized.
- * @param StringPtr points to a null terminated string which will be
- * converted to a version. The format of the string must match the
- * version string format which is X.YYX where X = 0 - 9, YY = 00 - 99,
- * Z = a - z.
- *
- * @return
- *
- * A status, XST_SUCCESS, indicating the conversion was accomplished
- * successfully, or XST_INVALID_VERSION indicating the version string format
- * was not valid.
- *
- * @note
- *
- * None.
- *
- ******************************************************************************/
- XStatus
- XVersion_FromString(XVersion * InstancePtr, s8 * StringPtr)
- {
- /* assert to verify input arguments */
- XASSERT_NONVOID(InstancePtr != NULL);
- XASSERT_NONVOID(StringPtr != NULL);
- /* if the version string specified is not valid, return an error */
- if (!IsVersionStringValid(StringPtr)) {
- return XST_INVALID_VERSION;
- }
- /* copy the specified string into the specified version and indicate the
- * conversion was successful
- */
- XVersion_Copy((XVersion *) StringPtr, InstancePtr);
- return XST_SUCCESS;
- }
- /*****************************************************************************
- *
- * Copies the contents of a version to another version.
- *
- * @param InstancePtr points to the version which is the source of data for
- * the copy operation.
- * @param VersionPtr points to another version which is the destination of
- * the copy operation.
- *
- * @return
- *
- * None.
- *
- * @note
- *
- * None.
- *
- ******************************************************************************/
- void
- XVersion_Copy(XVersion * InstancePtr, XVersion * VersionPtr)
- {
- u8 *Source = (u8 *) InstancePtr;
- u8 *Destination = (u8 *) VersionPtr;
- int Index;
- /* assert to verify input arguments */
- XASSERT_VOID(InstancePtr != NULL);
- XASSERT_VOID(VersionPtr != NULL);
- /* copy each byte of the source version to the destination version */
- for (Index = 0; Index < sizeof (XVersion); Index++) {
- Destination[Index] = Source[Index];
- }
- }
- /*****************************************************************************
- *
- * Determines if the specified version is valid.
- *
- * @param StringPtr points to the string to be validated.
- *
- * @return
- *
- * TRUE if the version string is a valid format, FALSE otherwise.
- *
- * @note
- *
- * None.
- *
- ******************************************************************************/
- static u32
- IsVersionStringValid(s8 * StringPtr)
- {
- /* if the input string is not a valid format, "X.YYZ" where X = 0 - 9,
- * YY = 00 - 99, and Z = a - z, then indicate it's not valid
- */
- if ((StringPtr[XVE_MAJOR_CHAR] < '0') ||
- (StringPtr[XVE_MAJOR_CHAR] > '9') ||
- (StringPtr[XVE_MINOR_TENS_CHAR] < '0') ||
- (StringPtr[XVE_MINOR_TENS_CHAR] > '9') ||
- (StringPtr[XVE_MINOR_ONES_CHAR] < '0') ||
- (StringPtr[XVE_MINOR_ONES_CHAR] > '9') ||
- (StringPtr[XVE_COMP_CHAR] < 'a') ||
- (StringPtr[XVE_COMP_CHAR] > 'z')) {
- return FALSE;
- }
- return TRUE;
- }
|