File indexing completed on 2025-05-11 08:23:54
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef LIBBSP_POWERPC_MOTOROLA_POWERPC_BSP_H
0016 #define LIBBSP_POWERPC_MOTOROLA_POWERPC_BSP_H
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #include <bspopts.h>
0029 #include <bsp/default-initial-extension.h>
0030
0031 #include <rtems.h>
0032 #include <libcpu/io.h>
0033 #include <bsp/vectors.h>
0034
0035 #ifdef qemu
0036 #include <rtems/bspcmdline.h>
0037 #endif
0038
0039 #ifdef __cplusplus
0040 extern "C" {
0041 #endif
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092 #if defined(mot_ppc_mvme2100)
0093 #define _IO_BASE CHRP_ISA_IO_BASE
0094 #define _ISA_MEM_BASE CHRP_ISA_MEM_BASE
0095
0096 #define PCI_DRAM_OFFSET CHRP_PCI_DRAM_OFFSET
0097
0098 #define PCI_MEM_BASE 0
0099
0100 #define PCI_MEM_WIN0 0x80000000
0101
0102 #else
0103 #define _IO_BASE PREP_ISA_IO_BASE
0104 #define _ISA_MEM_BASE PREP_ISA_MEM_BASE
0105 #ifndef qemu
0106
0107 #define PCI_DRAM_OFFSET PREP_PCI_DRAM_OFFSET
0108
0109 #define PCI_MEM_BASE PREP_ISA_MEM_BASE
0110 #define PCI_MEM_WIN0 0
0111 #else
0112 #define PCI_DRAM_OFFSET 0
0113 #define PCI_MEM_BASE 0
0114 #define PCI_MEM_WIN0 PREP_ISA_MEM_BASE
0115 #endif
0116 #endif
0117
0118
0119
0120
0121 #define BSP_HAS_PC_PCI
0122
0123
0124
0125
0126 #define RTEMS_BSP_PCI_IO_REGION_BASE 0
0127 #define RTEMS_BSP_PCI_MEM_REGION_BASE PCI_DRAM_OFFSET
0128
0129
0130
0131
0132 #define RTEMS_BSP_ADDR_PTR(_type) uint ## _type ## _t __volatile*
0133 #define RTEMS_BSP_ADDR_CPTR(_type) const RTEMS_BSP_ADDR_PTR(_type)
0134 #define RTEMS_BSP_ADDRESS_READ(_addr, _type) \
0135 *((RTEMS_BSP_ADDR_CPTR(_type)) (((RTEMS_BSP_ADDR_CPTR(8)) _addr) + PCI_DRAM_OFFSET))
0136 #define RTEMS_BSP_ADDRESS_WRITE(_addr, _val, _type) \
0137 *((RTEMS_BSP_ADDR_PTR(_type)) (((RTEMS_BSP_ADDR_PTR(8)) _addr) + PCI_DRAM_OFFSET)) = (_val)
0138
0139 #define RTEMS_BSP_READ_1(_addr) RTEMS_BSP_ADDRESS_READ(_addr, 8)
0140 #define RTEMS_BSP_READ_2(_addr) RTEMS_BSP_ADDRESS_READ(_addr, 16)
0141 #define RTEMS_BSP_READ_4(_addr) RTEMS_BSP_ADDRESS_READ(_addr, 32)
0142 #define RTEMS_BSP_READ_8(_addr) RTEMS_BSP_ADDRESS_READ(_addr, 64)
0143
0144 #define RTEMS_BSP_WRITE_1(_addr, _val) RTEMS_BSP_ADDRESS_WRITE(_addr, _val, 8)
0145 #define RTEMS_BSP_WRITE_2(_addr, _val) RTEMS_BSP_ADDRESS_WRITE(_addr, _val, 16)
0146 #define RTEMS_BSP_WRITE_4(_addr, _val) RTEMS_BSP_ADDRESS_WRITE(_addr, _val, 32)
0147 #define RTEMS_BSP_WRITE_8(_addr, _val) RTEMS_BSP_ADDRESS_WRITE(_addr, _val, 64)
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157 #if defined(mot_ppc_mvme2100)
0158 #define BSP_UART_IOBASE_COM1 ((_IO_BASE)+0x01e10000)
0159
0160 #define BSP_OPEN_PIC_BASE_OFFSET 0x40000
0161
0162 #define MVME_HAS_DEC21140
0163 #else
0164 #define BSP_UART_IOBASE_COM1 ((_IO_BASE)+0x3f8)
0165 #define BSP_UART_IOBASE_COM2 ((_IO_BASE)+0x2f8)
0166
0167 #if ! defined(qemu)
0168 #define BSP_KBD_IOBASE ((_IO_BASE)+0x60)
0169 #define BSP_VGA_IOBASE ((_IO_BASE)+0x3c0)
0170 #endif
0171
0172 #if defined(mvme2300) || defined(mot_ppc_mvme2307) || defined(mot_ppc_mvme2700)
0173 #define MVME_HAS_DEC21140
0174 #endif
0175 #endif
0176
0177 #define BSP_CONSOLE_PORT BSP_UART_COM1
0178 #define BSP_UART_BAUD_BASE 115200
0179
0180 struct rtems_bsdnet_ifconfig;
0181
0182 #if defined(MVME_HAS_DEC21140)
0183 #define RTEMS_BSP_NETWORK_DRIVER_NAME "dc1"
0184 #define RTEMS_BSP_NETWORK_DRIVER_ATTACH rtems_dec21140_driver_attach
0185 extern int rtems_dec21140_driver_attach(struct rtems_bsdnet_ifconfig *, int);
0186 #endif
0187
0188 #ifdef qemu
0189 #define RTEMS_BSP_NETWORK_DRIVER_NAME "ne1"
0190 #define RTEMS_BSP_NETWORK_DRIVER_ATTACH rtems_ne_driver_attach
0191 extern int rtems_ne_driver_attach(struct rtems_bsdnet_ifconfig *, int);
0192
0193 static inline const char* bsp_cmdline_arg(const char* arg)
0194 {
0195 return rtems_bsp_cmdline_get_param_raw(arg);
0196 }
0197 #endif
0198
0199 #ifdef qemu
0200 #define BSP_IDLE_TASK_BODY bsp_ppc_idle_task_body
0201 extern void *bsp_ppc_idle_task_body(uintptr_t arg);
0202 #endif
0203
0204 #include <bsp/openpic.h>
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219 #define BSP_PIC_DO_EOI openpic_eoi(0)
0220
0221 #ifndef ASM
0222 #define outport_byte(port,value) outb(value,port)
0223 #define outport_word(port,value) outw(value,port)
0224 #define outport_long(port,value) outl(value,port)
0225
0226 #define inport_byte(port,value) (value = inb(port))
0227 #define inport_word(port,value) (value = inw(port))
0228 #define inport_long(port,value) (value = inl(port))
0229
0230
0231
0232
0233
0234
0235
0236
0237 extern unsigned int BSP_mem_size;
0238
0239
0240
0241 extern unsigned int BSP_heap_start;
0242
0243
0244
0245 extern unsigned int BSP_bus_frequency;
0246
0247
0248
0249 extern unsigned int BSP_processor_frequency;
0250
0251
0252
0253 extern unsigned int BSP_time_base_divisor;
0254
0255
0256
0257
0258 extern char *BSP_commandline_string;
0259
0260 #define BSP_Convert_decrementer( _value ) \
0261 ((unsigned long long) ((((unsigned long long)BSP_time_base_divisor) * 1000000ULL) /((unsigned long long) BSP_bus_frequency)) * ((unsigned long long) (_value)))
0262
0263
0264 extern int BSP_disconnect_clock_handler (void);
0265 extern int BSP_connect_clock_handler (void);
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277 extern unsigned long _BSP_clear_hostbridge_errors(int enableMCP, int quiet);
0278
0279
0280
0281
0282 char *save_boot_params(
0283 void *r3,
0284 void *r4,
0285 void *r5,
0286 char *cmdline_start,
0287 char *cmdline_end
0288 );
0289 void zero_bss(void);
0290
0291
0292
0293
0294 void VIA_isa_bridge_interrupts_setup(void);
0295
0296 #endif
0297
0298 #ifdef __cplusplus
0299 };
0300 #endif
0301
0302
0303
0304 #endif