root/usr/src/lib/storage/liba5k/common/hdrs/rom.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*
 * PHOTON CONFIGURATION MANAGER
 * Downloadable code definitions
 */

#ifndef _ROM_H
#define _ROM_H


/*
 * Include any headers you depend on.
 */

/*
 * I18N message number ranges
 *  This file: 17500 - 17999
 *  Shared common messages: 1 - 1999
 */

#ifdef  __cplusplus
extern "C" {
#endif


/*
 * The PLUTO controller has 4 proms (0-3).  Prom 1-3 are writeable and are
 * soldered to the board while prom 0 is not writeable but socketed. The
 * following items are placed in the PLUTO prom set:
 *      - POST0         -Power On Self Test code.  This code goes in
 *                       pluto_prom0 and may not be modified in the field.
 *                       It contains serial port downloading code.
 *      - FUNC          -Pluto Functional code (SPARC)
 *      - SOC           -SOC microcode
 *      - ISP           -ISP microcode
 *      - OBP           -Open Boot Prom code
 *      - Date Code     -date/time of prom creation.
 *      - WWN           - World Wide Name
 *
 *
 * This utility creates the writeable prom images for PLUTO.  Three prom images
 * are created: pluto_prom1, pluto_prom2, pluto_prom3.
 *
 * The following defines the layout of the 4 proms on the PLUTO controller:
 *
 * prom         offset          image
 * -----------------------------------
 * prom_0:
 *              0               POST
 * prom_1:
 *              0               FUNC
 * prom_2:
 *              0               FUNC cont'd
 * prom_3:
 *              PROM_MAGIC_OFF  PROM_MAGIC
 *              DATE_OFF        DATE_CODE
 *              WWN_OFF         WWN
 *              SOC_OFF         SOC
 *              ISP_OFF         ISP
 *              OBP_OFF         OBP
 */
#define PROM_MAGIC      0x2468
#define PROMSIZE        0x00040000      /* 256K bytes each prom */
#define EEPROM_SECTSIZ  0x100


#define IBEEPROM        1
#define MBEEPROM        2

#define FW_DL_INFO      0x2d0
#define FPM_DL_INFO     0x31000

struct dl_info {
        ushort_t        unused;
        ushort_t        magic;
        ulong_t         cksum;
        time_t          datecode;
};

#define WWN_SIZE        8
#define TEXT_SZ         64*1024
#define IDATA_SZ        32*1024
#define FPM_SZ          60*1024

/* offsets in prom */
#define TEXT_OFFSET     0
#define IDATA_OFFSET    0x10000
#define FPM_OFFSET      0x31000


#ifdef  __cplusplus
}
#endif

#endif  /* _ROM_H */