135 lines
4.8 KiB
C
135 lines
4.8 KiB
C
/*
|
|
* (C) Copyright 2001
|
|
* Erik Theisen, Wave 7 Optics, etheisen@mindspring.com.
|
|
*
|
|
* See file CREDITS for list of people who contributed to this
|
|
* project.
|
|
*
|
|
* 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.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* 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., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef _VPD_H_
|
|
#define _VPD_H_
|
|
|
|
/*
|
|
* Main Flash Configuration.
|
|
*/
|
|
typedef struct flashCfg_s {
|
|
unsigned short mfg; /* Manufacture ID */
|
|
unsigned short dev; /* Device ID */
|
|
unsigned char devWidth; /* Device Width */
|
|
unsigned char numDevs; /* Number of devices */
|
|
unsigned char numCols; /* Number of columns */
|
|
unsigned char colWidth; /* Width of a column */
|
|
unsigned char weDataWidth; /* Write/Erase Data Width */
|
|
} flashCfg_t;
|
|
|
|
/*
|
|
* Vital Product Data - VPD
|
|
*/
|
|
#define MAX_PROD_ID 15
|
|
#define MAX_ETH_ADDRS 10
|
|
typedef unsigned char EthAddr[6];
|
|
typedef struct vpd {
|
|
unsigned char _devAddr; /* Device address during read */
|
|
char productId[MAX_PROD_ID]; /* Product ID */
|
|
char revisionId; /* Revision ID as a char */
|
|
unsigned long serialNum; /* Serial number */
|
|
unsigned char manuID; /* Manufact ID - byte int */
|
|
unsigned long configOpt; /* Config Option - bit field */
|
|
unsigned long sysClk; /* System clock in Hertz */
|
|
unsigned long serClk; /* Ext. clock in Hertz */
|
|
flashCfg_t flashCfg; /* Flash configuration */
|
|
unsigned long numPOTS; /* Number of POTS lines */
|
|
unsigned long numDS1; /* Number of DS1 circuits */
|
|
EthAddr ethAddrs[MAX_ETH_ADDRS]; /* Ethernet MAC, 1st = craft */
|
|
} VPD;
|
|
|
|
|
|
#define VPD_MAX_EEPROM_SIZE 512 /* Max size VPD EEPROM */
|
|
#define SDRAM_SPD_DATA_SIZE 128 /* Size SPD in VPD EEPROM */
|
|
|
|
/*
|
|
* PIDs - Packet Identifiers
|
|
*/
|
|
#define VPD_PID_GI 0x0 /* Guaranted Illegal */
|
|
#define VPD_PID_PID 0x1 /* Product Identifier */
|
|
#define VPD_PID_REV 0x2 /* Product Revision */
|
|
#define VPD_PID_SN 0x3 /* Serial Number */
|
|
#define VPD_PID_MANID 0x4 /* Manufacture ID */
|
|
#define VPD_PID_PCO 0x5 /* Product configuration */
|
|
#define VPD_PID_SYSCLK 0x6 /* System Clock */
|
|
#define VPD_PID_SERCLK 0x7 /* Ser. Clk. Speed in Hertz */
|
|
#define VPD_PID_CRC 0x8 /* VPD CRC */
|
|
#define VPD_PID_FLASH 0x9 /* Flash Configuration */
|
|
#define VPD_PID_ETHADDR 0xA /* Ethernet Address(es) */
|
|
#define VPD_PID_GAL 0xB /* Galileo Switch Config */
|
|
#define VPD_PID_POTS 0xC /* Number of POTS Lines */
|
|
#define VPD_PID_DS1 0xD /* Number of DS1s */
|
|
#define VPD_PID_TERM 0xFF /* Termination packet */
|
|
|
|
/*
|
|
* VPD - Eyecatcher/Magic
|
|
*/
|
|
#define VPD_EYECATCHER "W7O"
|
|
#define VPD_EYE_SIZE 3
|
|
typedef struct vpd_header {
|
|
unsigned char eyecatcher[VPD_EYE_SIZE]; /* eyecatcher - "W7O" */
|
|
unsigned short size __attribute__((packed)); /* size of EEPROM */
|
|
} vpd_header_t;
|
|
|
|
|
|
#define VPD_DATA_SIZE (VPD_MAX_EEPROM_SIZE - SDRAM_SPD_DATA_SIZE - \
|
|
sizeof(vpd_header_t))
|
|
typedef struct vpd_s {
|
|
vpd_header_t header;
|
|
unsigned char packets[VPD_DATA_SIZE];
|
|
} vpd_t;
|
|
|
|
typedef struct vpd_packet {
|
|
unsigned char identifier;
|
|
unsigned char size;
|
|
unsigned char data[1];
|
|
} vpd_packet_t;
|
|
|
|
/*
|
|
* VPD configOpt bit mask
|
|
*/
|
|
#define VPD_HAS_BBRAM 0x1 /* Battery backed SRAM */
|
|
#define VPD_HAS_RTC 0x2 /* Battery backed RTC */
|
|
#define VPD_HAS_EXT_SER_CLK 0x4 /* External serial clock */
|
|
#define VPD_HAS_SER_TRANS_1 0x8 /* COM1 transceiver */
|
|
#define VPD_HAS_SER_TRANS_2 0x10 /* COM2 transceiver */
|
|
#define VPD_HAS_CRAFT_PHY 0x20 /* CRAFT Ethernet */
|
|
#define VPD_HAS_DTT_1 0x40 /* I2C Digital therm. #1 */
|
|
#define VPD_HAS_DTT_2 0x80 /* I2C Digital therm. #2 */
|
|
#define VPD_HAS_1000_UP_LASER 0x100 /* GMM - 1000Mbit Uplink */
|
|
#define VPD_HAS_70KM_UP_LASER 0x200 /* CMM - 70KM Uplink laser */
|
|
#define VPD_HAS_2_UPLINKS 0x400 /* CMM - 2 uplink lasers */
|
|
#define VPD_HAS_FPGA 0x800 /* Has 1 or more FPGAs */
|
|
#define VPD_HAS_DFA 0x1000 /* CLM - Has 2 Fiber Inter. */
|
|
#define VPD_HAS_GAL_SWITCH 0x2000 /* GMM - Has a Gal switch */
|
|
#define VPD_HAS_POTS_LINES 0x4000 /* GMM - Has POTS lines */
|
|
#define VPD_HAS_DS1_CHANNELS 0x8000 /* GMM - Has DS1 channels */
|
|
#define VPD_HAS_CABLE_RETURN 0x10000 /* GBM/GBR - Cable ret. path */
|
|
|
|
#define VPD_EEPROM_SIZE (256 - SDRAM_SPD_DATA_SIZE) /* Size EEPROM */
|
|
|
|
extern int vpd_get_data(unsigned char dev_addr, VPD *vpd);
|
|
extern void vpd_print(VPD *vpdInfo);
|
|
|
|
#endif /* _VPD_H_ */
|