c6x-IBL: Adding the TI boot header file for Curie
[keystone-rtos/ibl.git] / src / util / romparse / tiboot_c6457.h
1 #ifndef __TIBOOT_H__\r
2 #define __TIBOOT_H__\r
3 /******************************************************************************\r
4  * FILE PURPOSE: Define Structures, MACROs and etc for TI Shared ROM Boot\r
5  ******************************************************************************\r
6  * FILE NAME:   tiboot.h\r
7  *\r
8  * DESCRIPTION: Define structures, macros and etc for the TI Shared ROM boot\r
9  *              process.\r
10  *\r
11  * TABS: NONE\r
12  *\r
13  * $Id: $\r
14  *\r
15  * REVISION HISTORY:\r
16  *\r
17  * $Log: $\r
18  *\r
19  * (C) Copyright 2004 TELOGY Networks, Inc. \r
20  ******************************************************************************/\r
21 #include "types.h"\r
22 \r
23 /*******************************************************************************\r
24  * Utility Macro definitions\r
25  ******************************************************************************/\r
26 #define HEX_DIGIT(digit)        ((digit) + '0')\r
27 #define BOOT_BIT_TO_MASK(bit)   (1 << (bit))\r
28 \r
29 /*******************************************************************************\r
30  * Data Definition: Error Handling relatBOOT_ENTRY_POINT_ADDRed definition:\r
31  *******************************************************************************\r
32  * Description: Define Handling related macros, constants\r
33  *\r
34  ******************************************************************************/\r
35 /* Define Module IDs */\r
36 #define BOOT_MODULE_ID_MAIN         0\r
37 #define BOOT_MODULE_ID_BTBL         1\r
38 #define BOOT_MODULE_ID_BETH         2\r
39 #define BOOT_MODULE_ID_I2C          3\r
40 #define BOOT_MODULE_ID_CHIP         4\r
41 #define BOOT_MODULE_ID_HW           5\r
42 \r
43 /* Boot error codes */\r
44 enum {\r
45   BOOT_NOERR                = 0,\r
46   BOOT_ERROR                = 1,    /* General error */\r
47   BOOT_INVALID_BOOT_MODE    = 2,    \r
48   BOOT_INVALID_I2C_DEV_ADDR = 3,\r
49   BOOT_INVALID_CHECKSUM     = 4,    /* Invalid checksum of the boot parameters */\r
50   BOOT_INVALID_PARAMS_SIZE  = 5,    /* the size of boot parameters is too big */\r
51   BOOT_RX_ETH_QUEUE_FULL    = 6,    /* ethmain.c, hw_rxPacket */\r
52   BOOT_CACHE_INIT_FAIL      = 7,    /* rmain.c, cache init failed */\r
53   BOOT_CACHE_DISABLE_FAIL   = 8,    /* rmain.c, cache disable failed */\r
54   BOOT_INVALID_CPPI_SIZE    = 9,    /* ethmain.c, invalid compile sizes */\r
55   BOOT_INVALID_CORE_ID      = 10,   /* Invalid core ID in cold boot */\r
56   BOOT_INVALID_MAC_ADDR     = 11,   /* Invalid MAC address (all 0's) */\r
57   BOOT_ETH_TX_SCRATCH       = 12,   /* tx scratch size invalid */\r
58   BOOT_ETH_TX_PACKET        = 13,   /* tx packet formation failure */\r
59   BOOT_ETH_MAC_INIT         = 14,   /* ethmain.c - mac init failed */\r
60   BOOT_PERIPH_POWER         = 15,   /* peripheral failed to powerup */\r
61   BOOT_MAIN_FAIL            = 16,   /* Failed in initial boot setup (wrong core) */\r
62   BOOT_SK_REGISTERSCWP      = 17,   /* Failed at SK_registerSCWP */\r
63   BOOT_SK_ALLOCSC           = 18,   /* Failed at SK_allocSC */       \r
64   BOOT_CPSGMII_CONFIGINDEX  = 19,   /* Failed at wrong CPSGMII config index */\r
65   BOOT_SRIO_CONFIGINDEX     = 20    /* Failed at wrong SRIO config index */\r
66 };\r
67 \r
68 /* Error tracking prototypes (functions in rmain.c)*/\r
69 void bootException (UINT16 errorCode);\r
70 void bootError (UINT16 errorCode);\r
71 \r
72 /* Error code = (module ID *  100) + module specific error */\r
73 #define BOOT_ERROR_CODE(id, code)     ((UINT16)((id<<8) + code))\r
74 #define BOOT_EXCEPTION(error_code)     bootException(error_code)\r
75 #define BOOT_ERROR(error_code)         bootError(error_code) \r
76 \r
77 /*******************************************************************************\r
78  * Begin Boot Parameter definitions\r
79  ******************************************************************************/\r
80 \r
81 /*******************************************************************************\r
82  * Boot Parameter Common \r
83  ******************************************************************************/\r
84 typedef struct boot_params_common_s{\r
85    UINT16 length;       /* size of the entire boot parameters in bytes */\r
86    UINT16 checksum;     /* non-zero: 1's complement checksum of the boot \r
87                          *           parameters\r
88                          * zero: checksum is not applicable\r
89                          */\r
90    UINT16 boot_mode;\r
91    UINT16 portNum;\r
92    UINT16 swPll;         /* CPU PLL multiplier */ \r
93    \r
94     \r
95 } BOOT_PARAMS_COMMON_T;\r
96 \r
97 typedef struct boot_params_ethernet_s{\r
98 \r
99     /* common portion of the Boot parameters */\r
100     UINT16 length;\r
101     UINT16 checksum;\r
102     UINT16 boot_mode;\r
103     UINT16 portNum;\r
104     UINT16 swPll;         /* CPU PLL multiplier */ \r
105      \r
106     /* Etherent specific portion of the Boot Parameters */\r
107     UINT16 options;\r
108     /*\r
109      * Ethernet Specific Options\r
110      *\r
111      * Bits 2:0 interface\r
112      *      000 - MII\r
113      *      001 - RMII\r
114      *      010 - GMII\r
115      *      011 - RGMII\r
116      *      100 - SMII\r
117      *      101 - S3MII\r
118      *\r
119      * Bit 3: HD:                                      \r
120      *        0 - Full Duplex                          \r
121      *        1 - Half Duplex                          \r
122      * Bit 4: SKIP TX                                           \r
123      *        0 - Send the Ethernet Ready Frame \r
124      *        1 - Skip sending the Ethernet Ready Frame                                              \r
125      * Bit 5: SKIP INIT                                           \r
126      *        0 - Initialize the Ethernet MAC peripheral \r
127      *        1 - Skip initializing the Ethernet MAC peripheral \r
128      * Bit 6: FC\r
129      *        0 - Disable Flow Control\r
130      *        1 - Enable Flow Control                                               \r
131      *\r
132      * Other bits:  Reserved \r
133      */ \r
134      #define BOOT_PARAMS_ETH_OPTIONS_MII        0x0000\r
135      #define BOOT_PARAMS_ETH_OPTIONS_RMII       0x0001\r
136      #define BOOT_PARAMS_ETH_OPTIONS_GMII       0x0002\r
137      #define BOOT_PARAMS_ETH_OPTIONS_RGMII      0x0003\r
138      #define BOOT_PARAMS_ETH_OPTIONS_SMII       0x0004\r
139      #define BOOT_PARAMS_ETH_OPTIONS_S3MII      0x0005\r
140         \r
141         /* Faraday only supports SGMII */\r
142      #define BOOT_PARAMS_ETH_OPTIONS_SGMII      0x0006\r
143      \r
144      #define BOOT_PARAMS_ETH_OPTIONS_HD         0x0008\r
145      #define BOOT_PARAMS_ETH_OPTIONS_SKIP_TX    0x0010\r
146      #define BOOT_PARAMS_ETH_OPTIONS_SKIP_INIT  0x0020\r
147      #define BOOT_PARAMS_ETH_OPTIONS_FC         0x0040\r
148      \r
149      /* \r
150       * he device MAC address to be used for Boot:\r
151       * All zero mac address indicates that the device E-fuse address should\r
152       *  be used.\r
153       */ \r
154      UINT16 mac_addr_h;\r
155      UINT16 mac_addr_m;\r
156      UINT16 mac_addr_l;\r
157      \r
158      /* \r
159       * The multicast or broadcast MAC address which should be accepted as\r
160       * a destination MAC address for boot table frames\r
161       */\r
162      UINT16 mmac_addr_h;\r
163      UINT16 mmac_addr_m;\r
164      UINT16 mmac_addr_l;\r
165         \r
166      UINT16 src_port;     /* Source UDP port number to be used during boot process */\r
167                           /* 0: allow any SRC UDP port */\r
168      UINT16 dest_port;    /* Destination UDP port number to be used during boot process */\r
169      \r
170      /* The Device ID to be included in the boot ready announcement frame */\r
171      UINT16 device_id_12;   \r
172      UINT16 device_id_34;   \r
173      #define BOOT_PARAMS_DEVICE_ID_HIGH_MASK     0xFF00\r
174      #define BOOT_PARAMS_DEVICE_ID_HIGH_SHIFT    8\r
175      #define BOOT_PARAMS_DEVICE_ID_LOW_MASK      0x00FF\r
176      #define BOOT_PARAMS_DEVICE_ID_LOW_SHIFT     0\r
177      #define BOOT_PARAMS_GET_DEVICE_ID_13(device_id)    \\r
178                (((device_id) & BOOT_PARAMS_DEVICE_ID_HIGH_MASK) > BOOT_PARAMS_DEVICE_ID_HIGH_SHIFT)\r
179      #define BOOT_PARAMS_GET_DEVICE_ID_24(device_id)    \\r
180                (((device_id) & BOOT_PARAMS_DEVICE_ID_LOW_MASK) > BOOT_PARAMS_DEVICE_ID_LOW_SHIFT)\r
181  \r
182      /* \r
183       * The destination MAC address used for the boot ready announce frame\r
184       */\r
185      UINT16 hmac_addr_h;\r
186      UINT16 hmac_addr_m;\r
187      UINT16 hmac_addr_l;\r
188 \r
189          /*\r
190       * The CPSGMII configurations for Faraday\r
191       */\r
192 \r
193      UINT16 sgmiiConfig;\r
194 \r
195      #define BOOT_PARAMS_SGMII_CONFIG_INDEX_MASK     0x0F     /* bit 3 to 0 is index */\r
196      #define BOOT_PARAMS_SGMII_CONFIG_DIRECT_CONFIG  (1<<4)   /* set to use direct configurations */\r
197      #define BOOT_PARAMS_SGMII_CONFIG_NO_CONFIG      (1<<5)   /* set to bypass CPSGMII config  */\r
198 \r
199          UINT16 sgmiiControl;  \r
200      #define BOOT_PARAMS_SGMII_CONTROL_MASK 0x7F\r
201 \r
202          UINT16 sgmiiMr_Adv_Ability;\r
203      #define BOOT_PARAMS_SGMII_ABILITY_MASK 0x0000FFFF\r
204 \r
205          UINT16 sgmiiTx_Cfg_h;\r
206          UINT16 sgmiiTx_Cfg_l;\r
207          UINT16 sgmiiRx_Cfg_h;\r
208          UINT16 sgmiiRx_Cfg_l;\r
209          UINT16 sgmiiAux_Cfg_h;\r
210          UINT16 sgmiiAux_Cfg_l;\r
211      \r
212 }   BOOT_PARAMS_ETHERNET_T;\r
213 \r
214 /**************************************************************************************\r
215  * Utopia boot options\r
216  **************************************************************************************/\r
217 typedef struct boot_params_utopia_s{\r
218 \r
219     /* common portion of the Boot parameters */\r
220     UINT16 length;\r
221     UINT16 checksum;\r
222     UINT16 boot_mode;\r
223     UINT16 portNum;\r
224     UINT16 swPll;         /* CPU PLL multiplier */ \r
225      \r
226     /* Utopia specific portion of the Boot Parameters */\r
227     /* Options \r
228      *  ---------------------------------------------------------------\r
229      * | 15                          3  |    2    |    1    |    0    |\r
230      * ----------------------------------------------------------------\r
231      *          reserved                     |         |         \-> 0 = multi phy\r
232      *                                       |         |             1 = single phy\r
233      *                                       |         \-> 0 = 8 bit utopia\r
234      *                                       |             1 = 16 bit utopis\r
235      *                                       \-> 0 = Init port\r
236      *                                           1 = skip port init\r
237      */\r
238     UINT16 options;\r
239     \r
240     #define BOOT_PARAMS_UTOPIA_SINGLE_PHY    (1<<0)\r
241     #define BOOT_PARAMS_UTOPIA_16BIT         (1<<1)\r
242     #define BOOT_PARAMS_UTOPIA_SKIP_INIT     (1<<2)\r
243     \r
244     UINT16 cellSizeBytes;    /* Cell Size */\r
245     UINT16 busWidthBits;     /* Bus width (8 or 16) */\r
246     UINT16 slid;             /* Slave ID  */\r
247     UINT16 coreFreqMhz;      /* CPU frequency after pll mult */\r
248      \r
249     \r
250 } BOOT_PARAMS_UTOPIA_T;\r
251 \r
252 typedef struct boot_params_i2c_s{\r
253 \r
254     /* common portion of the Boot parameters */\r
255     UINT16 length;\r
256     UINT16 checksum;\r
257     UINT16 boot_mode;\r
258     UINT16 portNum;\r
259     UINT16 swPll;         /* CPU PLL multiplier */ \r
260     \r
261     /* I2C specific portion of the Boot Parameters */\r
262     UINT16 options;\r
263     /*\r
264      * I2C Specific Options\r
265      * Bit 01-00: BT:                                      \r
266      *            00 - Boot Parameter Mode                            \r
267      *            01 - Boot Table Mode                     \r
268      *            10 - Boot Config mode\r
269      *            11 - Slave receive boot config\r
270      * Bit 04-02: EETYPE: EEPROM type             \r
271      * Other bits:  Reserved \r
272      */ \r
273      #define BOOT_PARAMS_I2C_OPTIONS_BP             0x0000\r
274      #define BOOT_PARAMS_I2C_OPTIONS_BT             0x0001\r
275      #define BOOT_PARAMS_I2C_OPTIONS_BC             0x0002\r
276      #define BOOT_PARAMS_I2C_OPTIONS_SLVOPT         0x0003\r
277      \r
278      #define BOOT_PARAMS_I2C_OPTIONS_MASK           0x0003\r
279      #define BOOT_PARAMS_I2C_OPTIONS_SHIFT          0\r
280      \r
281      #define BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK    0x001C\r
282      #define BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT   2 \r
283      \r
284      #define BOOT_PARAMS_I2C_IS_BOOTTBL_MODE(options) \\r
285              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BT)\r
286              \r
287      #define BOOT_PARAMS_I2C_IS_BOOTCONFIG_MODE(options) \\r
288              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BC)\r
289              \r
290      #define BOOT_PARAMS_I2C_IS_SLAVE_RCV_OPTIONS_MODE(options) \\r
291              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_SLVOPT)\r
292              \r
293      #define BOOT_PARAMS_I2C_IS_BOOTPARAM_MODE(options) \\r
294              (((options) & BOOT_PARAMS_I2C_OPTIONS_MASK) == BOOT_PARAMS_I2C_OPTIONS_BP)\r
295              \r
296      #define BOOT_PARAMS_I2C_SET_BOOTTBL_MODE(options, mode)               \\r
297              (options) = ((options) & ~BOOT_PARAMS_I2C_OPTIONS_MASK) |     \\r
298                          (((mode)   &  BOOT_PARAMS_I2C_OPTIONS_MASK) <<    \\r
299                                        BOOT_PARAMS_I2C_OPTIONS_SHIFT)\r
300              \r
301              \r
302      #define BOOT_PARAMS_I2C_GET_EETYPE(options)    \\r
303              (((options) & BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK) >> BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT)\r
304      #define BOOT_PARAMS_I2C_SET_EETYPE(options, ee_type)         \\r
305              (options) = (((options) & ~BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK) |  \\r
306                          (((ee_type) << BOOT_PARAMS_I2C_OPTIONS_EETYPE_SHIFT) & BOOT_PARAMS_I2C_OPTIONS_EETYPE_MASK))          \r
307         \r
308      /* The device address to be used for Boot */\r
309      UINT16 dev_addr;           /* 16-bit device address (low) */\r
310      UINT16 dev_addr_ext;       /* 16-bit extended device address (high) \r
311                                  * set to zero if not used\r
312                                  * Note: some I2C device requires 32-bit \r
313                                  * address\r
314                                  */ \r
315      UINT16 multi_i2c_id;      /* Multi device master write boot ID */\r
316      UINT16 my_i2c_id;         /* This parts I2C address            */\r
317      \r
318      UINT16 core_freq_mhz;     /* Core frequency, MHz               */\r
319      UINT16 i2c_clk_freq_khz;  /* Desired I2C clock frequency, kHz  */\r
320      \r
321      UINT16 next_dev_addr;      /* Used only for the boot config mode.         */\r
322      UINT16 next_dev_addr_ext;  /* Copied into dev_addr* after config complete */\r
323      \r
324      UINT16 address_delay;      /* Rough number of cycles delay between address write\r
325                                  * and read to the i2c eeprom */\r
326      \r
327      \r
328 } BOOT_PARAMS_I2C_T;   \r
329 \r
330 \r
331 typedef struct boot_params_rapidio_s{\r
332 \r
333     /* common portion of the Boot parameters */\r
334     UINT16 length;\r
335     UINT16 checksum;\r
336     UINT16 boot_mode;\r
337     UINT16 portNum;\r
338     UINT16 swPll;         /* CPU PLL multiplier */ \r
339     \r
340     /* Options */\r
341     UINT16 options;\r
342     \r
343     #define BOOT_PARAMS_RIO_OPTIONS_TX_ENABLE  (1<<0)   /* set to enable transmit    */\r
344     #define BOOT_PARAMS_RIO_OPTIONS_BOOT_TABLE (1<<1)   /* set to use boot tables    */\r
345     #define BOOT_PARAMS_RIO_OPTIONS_NO_CONFIG  (1<<2)   /* set to bypass port config */\r
346     \r
347     UINT16 cfg_index;       /* General configuration index to use      */\r
348     UINT16 node_id;         /* The node id for this device             */\r
349     UINT16 serdes_ref_clk;  /* The serdes reference clock freq, in MHz */\r
350     UINT16 link_rate;       /* Data link rate (mega bits per second    */\r
351     UINT16 pf_low;          /* Packet forward range, low               */\r
352     UINT16 pf_high;         /* Packet forward range, high              */\r
353     \r
354 } BOOT_PARAMS_RIO_T;\r
355 \r
356 /*\r
357  * UNION of boot parameter structures in all modes\r
358  * Note: We need to make sure that the structures genertaed by the C-compiler\r
359  *       match with the boot parameter table data format i.e. a set of 16-bit\r
360  *       data array.\r
361  */ \r
362 #define BOOT_PARAMS_SIZE_IN_BYTES       128\r
363 typedef union {\r
364    BOOT_PARAMS_COMMON_T    common;  \r
365    BOOT_PARAMS_ETHERNET_T  eth;\r
366    BOOT_PARAMS_I2C_T       i2c;\r
367    BOOT_PARAMS_UTOPIA_T    utopia;\r
368    BOOT_PARAMS_RIO_T       rio;\r
369    UINT16                  parameter[BOOT_PARAMS_SIZE_IN_BYTES/2]; \r
370 } BOOT_PARAMS_T;\r
371 \r
372 \r
373 /*******************************************************************************\r
374  * Definition: The time stamp and version number are placed into the stats. \r
375  *             This will be two characters packed per 16bits . The length\r
376  *             value must be 32 bit divisible\r
377  *******************************************************************************/\r
378 #define BOOT_VERSION_LEN_UINT16    32 \r
379 typedef struct BOOT_VERSION_S {\r
380 \r
381   UINT16 vstring[BOOT_VERSION_LEN_UINT16];\r
382   \r
383 } BOOT_VERSION_T;\r
384 extern BOOT_VERSION_T bootVersion;\r
385   \r
386 \r
387 /*******************************************************************************\r
388  * Definition: Runs time stats that are not initialized on cold boot entry\r
389  *   !!!!!! boot.s assumes that the nonInit stats are at the top of the structure\r
390  *   !!!!!! and that stage is the first element\r
391  *******************************************************************************/\r
392 typedef struct BOOT_STATS_NONINIT_S {\r
393   UINT16  stage;            /* Record the SharedROM code execution stage */\r
394   #define BOOT_STAGE_ASM_START_UP               1\r
395   #define BOOT_STAGE_INIT_CACHE                 2\r
396   #define BOOT_STAGE_CHCHE_INITED               3\r
397   #define BOOT_STAGE_ENTER_WARMBOOT             4\r
398   #define BOOT_STAGE_INIT_CPGMAC                5\r
399   #define BOOT_STAGE_SEND_ERA_FRAME             6\r
400   #define BOOT_STAGE_ETH_MAIN_LOOP              7\r
401   #define BOOT_STAGE_I2C_BOOTTBL_LOOP           8\r
402   #define BOOT_STAGE_I2C_BOOTPARAM_LOOP         9\r
403   #define BOOT_STAGE_DISABLE_CACHE             10\r
404   #define BOOT_STAGE_CHCHE_DISABLED            11\r
405   #define BOOT_STAGE_EXIT                      12\r
406   #define BOOT_STAGE_ERROR_LOOP                13  \r
407   #define BOOT_STAGE_I2C_BOOTCONFIG_LOOP       14\r
408   #define BOOT_STAGE_I2C_SLV_RCV_OPTIONS_LOOP  15\r
409   #define BOOT_STAGE_UTOPIA_MAIN_LOOP          16\r
410   UINT16  coldBootEntries;\r
411   \r
412 } BOOT_STATS_NONINIT_T;\r
413 \r
414 /*******************************************************************************\r
415  * Definition: Run time statistics and error counts. These stats are \r
416  *             initialized on cold boot entry.\r
417  ******************************************************************************/\r
418  \r
419 typedef struct BOOT_STATS_COMMON_S  {\r
420   UINT32    bootStatus;\r
421   UINT16    nColdBootEntries;\r
422   UINT16    nBootReentries;\r
423   UINT16    nPllWarns;\r
424   UINT16    nResetWarns;\r
425 } BOOT_STATS_COMMON_T;\r
426  \r
427  \r
428 typedef struct BOOT_STATS_MAIN_S {\r
429   UINT16  errorCode;        /* (module ID <<8 ) + module specific error */\r
430   \r
431   /* I2C operation related statistics */\r
432   UINT16  numI2Cpkts;       /* number of I2C boot table packets processed */\r
433   UINT16  numI2CchksumError;/* number of I2C checksum errors */\r
434   UINT16  numI2ClengthError;/* number of I2C block length errors */\r
435   UINT16  numI2CotherError; /* number of I2C section with invalid length and etc */\r
436   UINT16  numI2Cretrys;     /* number of I2C retrys due to read access errors */\r
437   UINT16  numI2cWrites;     /* number of I2C master writes to passive devices */\r
438   UINT16  numI2cWriteError; /* number of I2C master write errors              */\r
439   \r
440   UINT16  warmBootEntry;    /* Count of entries into warm boot routine   */\r
441 } BOOT_STATS_MAIN_T;\r
442 \r
443 \r
444 \r
445 /*****************************************************************************\r
446  * Definition: I2C stats, Boot table and Ethernrt stats initialized \r
447  *             on cold boot entry\r
448  *****************************************************************************/\r
449 typedef struct I2C_STATS_tag\r
450 {\r
451     UINT16      num_trans;\r
452     UINT16      num_trys;\r
453     UINT16      num_try_ok;\r
454     UINT16      num_try_lost_arb;\r
455     UINT16      num_try_idle_to;\r
456     UINT16      num_try_no_ack;\r
457     UINT16      num_try_other_err;\r
458     UINT32      extra_idle_waits;\r
459     UINT32      extra_clock_waits;\r
460     UINT32      tx_bytes;\r
461     UINT32      rx_bytes;\r
462     UINT32      data_re_reads;\r
463 } I2C_STATS_T;\r
464 \r
465 typedef struct BTBL_STATS_tag\r
466 {\r
467   UINT16  num_sections;     /* number of boot table sections received */\r
468   UINT16  num_pdma_copies;  /* number of PDMA copies performed */\r
469 } BTBL_STATS_T;\r
470 \r
471 typedef struct ETH_STATS_tag\r
472 {\r
473   /* MAC packets related statistics */\r
474   UINT16  uniMacPkts;       /* Count of packets received with valid unicast mac \r
475                                address   */\r
476   UINT16  multiMacPkts;     /* Count of packets received with valid multicast or\r
477                                broadcast mac address   */\r
478   UINT16  invalidMacPkts;   /* Count of packets received with invalid mac \r
479                                address   */\r
480   UINT16  invalidLLCPkts;   /* Count of 802.3 packets with wrong LLC/SNAP header */\r
481   UINT16  nonIpPkts;        /* Count of non-IP packets received with valid \r
482                                MAC address   */\r
483                                \r
484   /* IP packets related statistics */                             \r
485   UINT16  nonIP4Pkts;       /* Count of non-IP4 packets        */\r
486   UINT16  ipfragments;      /* Count of IP fragments received      */\r
487   UINT16  ipTruncatedError; /* Count of truncated IP frame */\r
488   UINT16  nonUDPPkts;       /* Count of IP packets with non-UDP paylaod  */\r
489   \r
490   /* UDP packets related statistics */\r
491   UINT16  udpSizeError;     /* Count of UDP packet with invalid (odd) size */\r
492   UINT16  udpPortError;     /* Count of UDP packets with invalid port number */\r
493   UINT16  udpChksumError;   /* Count of UDP packets with checksum error */\r
494   \r
495   /* Boot table packets related statistics */\r
496   UINT16  nonBtblPkts;      /* Count of UDP packets with invalid boot table paylaod */\r
497   UINT16  outSeqPkts;       /* Count of out of sequence boot table packets received       \r
498                                i.e. packets with unexpected seq_num      */\r
499   UINT16  expSeqNum;        /* Expected Sequence Number */\r
500   UINT16  lastSeqNum;       /* Last sequence number received */                             \r
501 \r
502   /* Driver errors */\r
503   UINT16  sizeZeroPackets;  /* Count of packets arriving with 0 size */\r
504 } ETH_STATS_T;\r
505 \r
506 typedef struct PCI_EEAI_STATS_tag\r
507 {\r
508   UINT16  pciI2cReads;         /* Count of block reads of i2c eeprom */\r
509   UINT16  pciI2cRetries;       /* Count of i2c read retries          */\r
510   UINT16  pciChkSumErr;        /* Count of block check sum errors    */\r
511   UINT16  pciEeaiFail;         /* Count of aborted pci attempts      */\r
512 } PCI_EEAI_STATS_T;\r
513 \r
514 /* Rapid I/O stats */\r
515 typedef struct RAPIDIO_STATS_tag\r
516 {\r
517   UINT16 rapidIoFailReady;     /* If set rapid I/O peripheral failed to report ready */\r
518   UINT16 rapidIoBtblBlocks;    /* Count of number of boot table blocks received */\r
519   UINT16 rapidIoBtblBadBlocks; /* Count of boot table blocks rejected */\r
520 } RAPIDIO_STATS_T;\r
521 \r
522 typedef struct HPI_STATS_Tag\r
523 {\r
524   UINT16 hpiBtblBlocks;        /* Count of boot table blocks received */\r
525   UINT16 hpiBtblBadBlocks;     /* Count of boot table blocks rejected */\r
526 } HPI_STATS_T;\r
527 \r
528 /* Utopia stats */\r
529 typedef struct UTOPIA_STATS_tag\r
530 {\r
531   UINT16 cellCount;            /* Count of cells received   */\r
532   UINT16 invalidPtr;           /* Count of invalid pointers received in processing */\r
533   UINT16 invalidSize;          /* Count of cells that were too small               */\r
534   UINT16 cellMagicCount;       /* Count of cells received with valid magic         */\r
535   UINT16 cellMagicFailed;      /* Count of cells received with invalid magic       */\r
536   UINT16 trapNoCellMem;        /* Trapped due to no cell space in memory           */\r
537   UINT16 possibleOverrun;      /* Count of possible cell buffer overruns           */\r
538 } UTOPIA_STATS_T;\r
539 \r
540 /*******************************************************************************\r
541  * Definition: The statistics\r
542  *\r
543  *   !!!!!! boot.s assumes that the nonInit stats are at the top of the structure!\r
544  *******************************************************************************/\r
545 typedef struct BOOT_STATS_S {\r
546 \r
547  BOOT_STATS_COMMON_T   common;\r
548  BOOT_STATS_NONINIT_T  nonInit;\r
549  BOOT_STATS_MAIN_T     main;\r
550  I2C_STATS_T           i2c;\r
551  BTBL_STATS_T          btbl;\r
552  union  {\r
553    ETH_STATS_T           eth;\r
554    PCI_EEAI_STATS_T      pci_eeai;\r
555    RAPIDIO_STATS_T       rapidIo;\r
556    UTOPIA_STATS_T        utopia;\r
557    HPI_STATS_T           hpi;\r
558  } u;\r
559 } BOOT_STATS_T;\r
560 \r
561 extern BOOT_STATS_T bootStats;\r
562 \r
563 /*******************************************************************************\r
564  * Definition: The magic start address, known to all modules\r
565  *******************************************************************************/\r
566 extern volatile UINT32 *p_boot_entry_addr;\r
567 \r
568 #endif  /* __TIBOOT_H__ */\r
569 \r
570 /* nothing past this point */\r