source: trunk/tools/arch_info/boot_info.h @ 10

Last change on this file since 10 was 6, checked in by alain, 8 years ago

Modify the boot_info_t struct to describe external peripherals in all clusters.

File size: 6.5 KB
Line 
1/*
2 * boot_info.h - informations passed by the bootloader to the kernel in each cluster.
3 *
4 * Author  Alain Greiner (june 2016)
5 *
6 * Copyright (c) UPMC Sorbonne Universites
7 *
8 * This file is part of ALMOS-MKH
9 *
10 * ALMOS-kernel is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; version 2.0 of the License.
13 *
14 * ALMOS-kernel is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with ALMOS-kernel; if not, write to the Free Software Foundation,
21 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24#ifndef _BOOT_INFO_H_
25#define _BOOT_INFO_H_
26
27#include <hal_types.h>
28#include <almos_config.h>
29
30/*********************************************************************************************
31 * Boot-Info binary file signature
32 ********************************************************************************************/
33
34#define BOOT_INFO_SIGNATURE    0x12344321
35
36/*********************************************************************************************
37 * This structure defines the mapping between the hard-wired core identifier,
38 * and the composite index (cluster_identifier , local index).
39 ********************************************************************************************/
40
41typedef struct boot_core_s
42{
43    gid_t    gid;                     /*! hardware identifier                               */
44    lid_t    lid;                     /*! local index in cluster                            */
45    cxy_t    cxy;                     /*! cluster identifier                                */
46}
47boot_core_t;
48
49/*********************************************************************************************
50 * This structure defines the hardware connexion from one source device (identified by
51 * the tuple (dev_type/channel/is_rx), to a PIC or XCU component (input IRQ index).
52 ********************************************************************************************/
53
54typedef struct boot_irq_s
55{
56    uint32_t    dev_type;             /*! source device functionnal type                    */
57    uint8_t     channel;              /*! source device channel index                       */
58    uint8_t     is_rx;                /*! source device direction                           */
59    uint8_t     valid;                /*! Boolean :input IRQ connected                      */
60    uint8_t     reserved;             /*! padding                                           */
61} 
62boot_irq_t; 
63
64/*********************************************************************************************
65 * This structure defines all informations associated to a device in a given cluster.
66 * There is one device descriptor per peripheral channel.
67 ********************************************************************************************/
68
69typedef struct boot_device_s
70{
71    uint64_t    base;                 /*! segment physical base address                     */
72    uint64_t    size;                 /*! channel size (bytes)                              */
73    uint32_t    type;                 /*! peripheral type (func | impl)                     */
74    uint32_t    channels;             /*! number of channels                                */
75    uint32_t    param0;               /*! semantic depends on peripherat type               */
76    uint32_t    param1;               /*! semantic depends on peripherat type               */
77    uint32_t    param2;               /*! semantic depends on peripherat type               */
78    uint32_t    param3;               /*! semantic depends on peripherat type               */
79    uint32_t    irqs;                 /*! number of input IRQs                              */
80    boot_irq_t  irq[32];              /*! array of input IRQS (PIC and ICU only)            */
81}
82boot_device_t;
83
84/*********************************************************************************************
85 * This structure defines the interface between the boot-loader and the kernel.
86 * In each cluster, the boot core build a local boot_info_t structure containing
87 * both global (trans-clusters) informations, and cluster specific informations.
88 ********************************************************************************************/
89
90typedef struct boot_info_s
91{
92    uint32_t      signature;                     /*! boot info signature                    */
93
94    // global platform parameters
95
96        uint32_t      paddr_width;                   /*! number of bits in physical address     */
97    uint32_t      x_width;                       /*! number of bits to code X coordinate    */
98    uint32_t      y_width;                       /*! number of bits to code Y coordinate    */
99        uint32_t      x_size;                        /*! number of cluster in a row             */
100        uint32_t      y_size;                        /*! number of cluster in a column          */
101        uint32_t      io_cxy;                        /*! IO cluster identifier                  */
102
103    // shared resources
104
105    uint32_t      ext_dev_nr;                    /*! number of external peripherals         */
106    boot_device_t ext_dev[CONFIG_MAX_EXT_DEV];   /*! array of external peripherals          */
107
108    // private resources (per cluster)
109
110        uint32_t      cxy;                           /*! cluster identifier                     */
111        uint32_t      cores_nr;                      /*! number of local cores in               */
112    boot_core_t   core[CONFIG_MAX_LOCAL_CORES];  /*! array of core descriptors              */ 
113        uint32_t      int_dev_nr;                    /*! number of local peripherals            */
114    boot_device_t int_dev[CONFIG_MAX_INT_DEV];   /*! array of internal peripherals          */
115    uint32_t      pages_nr;                      /*! number of 4 Kbytes pages               */
116    uint32_t      pages_offset;                  /*! number of pages allocated for kernel   */
117
118    // kernel segments
119
120    intptr_t      kernel_code_start;             /*! kernel code base address               */
121    intptr_t      kernel_code_end;               /*! kernel code last address (excluded)    */
122    intptr_t      kernel_data_start;             /*! kernel data base address               */
123    intptr_t      kernel_data_end;               /*! kernel data last address (excluded)    */
124}
125boot_info_t;
126
127#endif  /* _BOOT_INFO_H_ */
Note: See TracBrowser for help on using the repository browser.