uboot/board/w7o/vpd.h
<<
>>
Prefs
   1/*
   2 * (C) Copyright 2001
   3 * Erik Theisen, Wave 7 Optics, etheisen@mindspring.com.
   4 *
   5 * See file CREDITS for list of people who contributed to this
   6 * project.
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU General Public License as
  10 * published by the Free Software Foundation; either version 2 of
  11 * the License, or (at your option) any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program; if not, write to the Free Software
  20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21 * MA 02111-1307 USA
  22 */
  23
  24#ifndef _VPD_H_
  25#define _VPD_H_
  26
  27/*
  28 * Main Flash Configuration.
  29 */
  30typedef struct flashCfg_s {
  31    unsigned short mfg;                         /* Manufacture ID */
  32    unsigned short dev;                         /* Device ID */
  33    unsigned char devWidth;                     /* Device Width */
  34    unsigned char numDevs;                      /* Number of devices */
  35    unsigned char numCols;                      /* Number of columns */
  36    unsigned char colWidth;                     /* Width of a column */
  37    unsigned char weDataWidth;                  /* Write/Erase Data Width */
  38} flashCfg_t;
  39
  40/*
  41 * Vital Product Data - VPD
  42 */
  43#define MAX_PROD_ID             15
  44#define MAX_ETH_ADDRS           10
  45typedef unsigned char EthAddr[6];
  46typedef struct vpd {
  47    unsigned char _devAddr;                     /* Device address during read */
  48    char productId[MAX_PROD_ID];                /* Product ID */
  49    char revisionId;                            /* Revision ID as a char */
  50    unsigned long serialNum;                    /* Serial number */
  51    unsigned char  manuID;                      /* Manufact ID - byte int */
  52    unsigned long configOpt;                    /* Config Option - bit field */
  53    unsigned long sysClk;                       /* System clock in Hertz */
  54    unsigned long serClk;                       /* Ext. clock in Hertz */
  55    flashCfg_t flashCfg;                        /* Flash configuration */
  56    unsigned long numPOTS;                      /* Number of POTS lines */
  57    unsigned long numDS1;                       /* Number of DS1 circuits */
  58    EthAddr ethAddrs[MAX_ETH_ADDRS];            /* Ethernet MAC, 1st = craft */
  59} VPD;
  60
  61
  62#define VPD_MAX_EEPROM_SIZE     512             /* Max size VPD EEPROM */
  63#define SDRAM_SPD_DATA_SIZE     128             /* Size SPD in VPD EEPROM */
  64
  65/*
  66 * PIDs - Packet Identifiers
  67 */
  68#define VPD_PID_GI              0x0             /* Guaranted Illegal */
  69#define VPD_PID_PID             0x1             /* Product Identifier */
  70#define VPD_PID_REV             0x2             /* Product Revision */
  71#define VPD_PID_SN              0x3             /* Serial Number */
  72#define VPD_PID_MANID           0x4             /* Manufacture ID */
  73#define VPD_PID_PCO             0x5             /* Product configuration */
  74#define VPD_PID_SYSCLK          0x6             /* System Clock */
  75#define VPD_PID_SERCLK          0x7             /* Ser. Clk. Speed in Hertz */
  76#define VPD_PID_CRC             0x8             /* VPD CRC */
  77#define VPD_PID_FLASH           0x9             /* Flash Configuration */
  78#define VPD_PID_ETHADDR         0xA             /* Ethernet Address(es) */
  79#define VPD_PID_GAL             0xB             /* Galileo Switch Config */
  80#define VPD_PID_POTS            0xC             /* Number of POTS Lines */
  81#define VPD_PID_DS1             0xD             /* Number of DS1s */
  82#define VPD_PID_TERM            0xFF            /* Termination packet */
  83
  84/*
  85 * VPD - Eyecatcher/Magic
  86 */
  87#define VPD_EYECATCHER          "W7O"
  88#define VPD_EYE_SIZE            3
  89typedef struct vpd_header {
  90    unsigned char eyecatcher[VPD_EYE_SIZE];     /* eyecatcher - "W7O" */
  91    unsigned short size __attribute__((packed)); /* size of EEPROM */
  92} vpd_header_t;
  93
  94
  95#define VPD_DATA_SIZE (VPD_MAX_EEPROM_SIZE - SDRAM_SPD_DATA_SIZE - \
  96                        sizeof(vpd_header_t))
  97typedef struct vpd_s {
  98    vpd_header_t header;
  99    unsigned char packets[VPD_DATA_SIZE];
 100} vpd_t;
 101
 102typedef struct vpd_packet {
 103    unsigned char identifier;
 104    unsigned char size;
 105    unsigned char data[1];
 106} vpd_packet_t;
 107
 108/*
 109 * VPD configOpt bit mask
 110 */
 111#define VPD_HAS_BBRAM           0x1             /* Battery backed SRAM */
 112#define VPD_HAS_RTC             0x2             /* Battery backed RTC */
 113#define VPD_HAS_EXT_SER_CLK     0x4             /* External serial clock */
 114#define VPD_HAS_SER_TRANS_1     0x8             /* COM1 transceiver */
 115#define VPD_HAS_SER_TRANS_2     0x10            /* COM2 transceiver */
 116#define VPD_HAS_CRAFT_PHY       0x20            /* CRAFT Ethernet */
 117#define VPD_HAS_DTT_1           0x40            /* I2C Digital therm. #1 */
 118#define VPD_HAS_DTT_2           0x80            /* I2C Digital therm. #2 */
 119#define VPD_HAS_1000_UP_LASER   0x100           /* GMM - 1000Mbit Uplink */
 120#define VPD_HAS_70KM_UP_LASER   0x200           /* CMM - 70KM Uplink laser */
 121#define VPD_HAS_2_UPLINKS       0x400           /* CMM - 2 uplink lasers */
 122#define VPD_HAS_FPGA            0x800           /* Has 1 or more FPGAs */
 123#define VPD_HAS_DFA             0x1000          /* CLM - Has 2 Fiber Inter. */
 124#define VPD_HAS_GAL_SWITCH      0x2000          /* GMM - Has a Gal switch */
 125#define VPD_HAS_POTS_LINES      0x4000          /* GMM - Has POTS lines */
 126#define VPD_HAS_DS1_CHANNELS    0x8000          /* GMM - Has DS1 channels */
 127#define VPD_HAS_CABLE_RETURN    0x10000         /* GBM/GBR - Cable ret. path */
 128
 129#define VPD_EEPROM_SIZE         (256 - SDRAM_SPD_DATA_SIZE) /* Size EEPROM */
 130
 131extern int vpd_get_data(unsigned char dev_addr, VPD *vpd);
 132extern void vpd_print(VPD *vpdInfo);
 133
 134#endif /* _VPD_H_ */
 135