⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsp_if.h

📁 eCos1.31版
💻 H
字号:
#ifndef __BSP_COMMON_BSP_IF_H__#define __BSP_COMMON_BSP_IF_H__//==========================================================================////      bsp_if.h////      BSP interface definitions.////==========================================================================//####COPYRIGHTBEGIN####//                                                                          // -------------------------------------------                              // The contents of this file are subject to the Red Hat eCos Public License // Version 1.1 (the "License"); you may not use this file except in         // compliance with the License.  You may obtain a copy of the License at    // http://www.redhat.com/                                                   //                                                                          // Software distributed under the License is distributed on an "AS IS"      // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the // License for the specific language governing rights and limitations under // the License.                                                             //                                                                          // The Original Code is eCos - Embedded Configurable Operating System,      // released September 30, 1998.                                             //                                                                          // The Initial Developer of the Original Code is Red Hat.                   // Portions created by Red Hat are                                          // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             // All Rights Reserved.                                                     // -------------------------------------------                              //                                                                          //####COPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):    // Contributors: gthomas// Date:         1999-10-20// Purpose:      BSP interface definitions.// Description:  //               ////####DESCRIPTIONEND####////=========================================================================#include <bsp/bsp.h>/* *  Maximum number of interrupt controllers supported by *  this bsp. */#define BSP_MAX_IRQ_CONTROLLERS 8#ifndef __ASSEMBLER__/* *  Interrupt controller abstraction. *  Each interrupt controller on a given board should be described using *  this data structure. */struct bsp_irq_controller {    /*     * First and last irqs handled by this controller.     */    short	first;    short	last;    /*      * pointer to array of bsp_vec struct pointers. These are     * the heads of the linked list of ISRs for each irq handled     * by this controller.     */    bsp_vec_t	**vec_list;    /*     * Pointer to initialization routine which is run once at boot time.     */    void	(*init)(const struct bsp_irq_controller *__ic);    /*     * Pointer to routines used to disable and enable interrupts handled     * by this controller.     */    int		(*disable)(const struct bsp_irq_controller *__ic,			   int __irq_nr);    void	(*enable)(const struct bsp_irq_controller *__ic,			  int __irq_nr);};/* * Board specific code needs to provide at least one communication channel * for use as the debug and console (stdio) channel. For each channel, * there must be a set of function vectors for the common BSP code to * control the channel. */struct bsp_comm_procs {    /*     * Implementation dependent data pointer passed to the following procs.     */    void *ch_data;    /*     * Write a buffer of the given length. All of buffer is sent before     * the write call returns.     */    void (*__write)(void *ch_data, const char *buf, int len);    /*     * Fill a buffer with up to the given length. Returns the actual number     * of characters read.     */    int  (*__read)(void *ch_data, char *buf, int len);    /*     * Send a single character.     */    void (*__putc)(void *ch_data, char ch);    /*     * Read a single character. If no character is immediately available, will     * block until one becomes available.     */    int  (*__getc)(void *ch_data);    /*     * Catchall comm port control.     */    int  (*__control)(void *ch_data, int func, ...);    /*     * For serial ports, the control function may be used to set and get the     * current baud rate. Usage:     *      *   err = (*__control)(COMMCTL_SETBAUD, int bits_per_second);     *     err => Zero if successful, -1 if error.     *     *   baud = (*__control)(COMMCTL_GETBAUD);     *     baud => -1 if error, current baud otherwise.     */#define COMMCTL_SETBAUD 0#define COMMCTL_GETBAUD 1    /*     * Install and remove debugger interrupt handlers. These are the receiver     * interrupt routines which are used to change control from a running     * program to the debugger stub.     */#define COMMCTL_INSTALL_DBG_ISR 2#define COMMCTL_REMOVE_DBG_ISR  3    /*     * Disable comm port interrupt. Returns TRUE if interrupt was enabled,     * FALSE otherwise.     */#define COMMCTL_IRQ_DISABLE 4    /*     * Enable comm port interrupt.     */#define COMMCTL_IRQ_ENABLE 5};/* * The board specific code uses this data structure to provide information * about and procedure vectors for each supported communication channel. * See _bsp_comm_list below. */struct bsp_comm_channel {    struct bsp_comm_info   info;    struct bsp_comm_procs  procs;};/* * Number to place in the version field. If structure is changed * in a way which is not backwards compatible, this number should * be incremented. */#define BSP_SHARED_DATA_VERSION 2/* * Clients of this BSP will need to have access to BSP functions and * data structures. Because, the client and the BSP may not be linked * together, a structure of vectors is used to gain this access. A * pointer to this structure can be gotten via a syscall. This syscall * is made automatically from within the crt0.o file. */typedef struct {    int		version;	/* version number for future expansion */    /*     *  Pointer to the array of pointers to interrupt controller descriptors.     */    const struct bsp_irq_controller **__ictrl_table;    /*     *  Pointer to the array of exception vectors.     */    bsp_vec_t **__exc_table;    /*     * Pointer to debug handler vector.     */    bsp_handler_t *__dbg_vector;    /*     * User hook to catch debugger 'kill' command.     */    bsp_handler_t __kill_vector;    /*     * Vectored functions for console and debug i/o.     */    struct bsp_comm_procs *__console_procs;    struct bsp_comm_procs *__debug_procs;    /*     * Vectored cache control functions.     */    void (*__flush_dcache)(void *__p, int __nbytes);    void (*__flush_icache)(void *__p, int __nbytes);    /*     * Generic data pointers     */    void *__cpu_data;    void *__board_data;    /*     * General BSP information access.     * See bsp.h for details.     */    int  (*__sysinfo)(enum bsp_info_id __id, va_list __ap);    /*     * Set or get active debug and console channels.     * Returns -1 if unsucessful.     * If the passed in __comm_id is -1, then the id of the current channel     * is returned.     */    int	 (*__set_debug_comm)(int __comm_id);    int	 (*__set_console_comm)(int __comm_id);    /*     * Set or get the current baud rate of a serial comm channel.     * Returns -1 on if unsuccessful.     * If the given baud is -1, then the current baudrate is returned.     */    int  (*__set_serial_baud)(int __comm_id, int baud);    /*     * Debug agent data.     */    void *__dbg_data;    /*     * Reset function     * We want to avoid calling this with a trap since     * we may be calling it from SWI mode (in cygmon).     * That is problematic, as nested SWI's are not     * very good.     */    void (*__reset)(void);    /*     * TRUE if console interrupt detected during program output.     */    int  __console_interrupt_flag;} bsp_shared_t;extern bsp_shared_t *bsp_shared_data;/* * Platform info which may be overriden/modified by arch/board specific code. */extern struct bsp_platform_info _bsp_platform_info;/* * Cache info which may be overriden/modified by arch/board specific code. */extern struct bsp_cachesize_info _bsp_dcache_info;extern struct bsp_cachesize_info _bsp_icache_info;extern struct bsp_cachesize_info _bsp_scache_info;/* * Array of comm channel descriptors which must be provided by board specific * code. */extern struct bsp_comm_channel _bsp_comm_list[];/* * Number of comm channel descriptors which must be provided by board specific * code. */extern int _bsp_num_comms;/* * Array of memory region descriptors which must be provided by board specific * code. */extern struct bsp_mem_info _bsp_memory_list[];/* * Number of memory region descriptors which must be provided by board specific * code. */extern int _bsp_num_mem_regions;/* * In order to construct the above _bsp_memory_list, some board specific * code may have to size RAM regions. To do this easily and reliably, * the code needs to run from ROM before .bss and .data sections are * initialized. This leads to the problem of where to store the results * of the memory sizing tests. In this case, the _bsp_init_stack routine * which sizes memory and sets up the stack will place the board-specific * information on the stack and return with the stack pointer pointing to * a pointer to the information. That is, addr_of_info = *(void **)sp. * The architecture specific code will then copy that pointer to the * _bsp_ram_info_ptr variable after initializing the .data and .bss sections. */extern void *_bsp_ram_info_ptr;/* * Generic bsp initialization. Called by low level startup code */extern void _bsp_init(void);/* *  Initialize board communication in polling mode. This enables *  debugging printf for later initializations. Interrupts for *  comm channels may be set up later in _bsp_board_init(). */extern void _bsp_init_board_comm(void);/* * Make generic BSP aware of CPU/MCU specific interrupt controllers. */extern void _bsp_install_cpu_irq_controllers(void);/* * Make generic BSP aware of board specific interrupt controllers. */extern void _bsp_install_board_irq_controllers(void);/* * Callback used by above two routines to install a single * interrupt controller. */extern void _bsp_install_irq_controller(const struct bsp_irq_controller *__ic);/* *  Generic exception dispatch routine. Usually called from asm-level *  exception handler to call vectors in vector chain for the given *  exception number. Stops traversing vector chain when a called *  vector returns a non-zero value. If no vector returns non-zero, *  a default error message and register dump is printed. */extern int _bsp_exc_dispatch(int __exc_number, void *__regs);/* * Architecture specific routine to dump register values. */extern void _bsp_dump_regs(void *__regs);/* * Generic syscall handler called by architecture specific handler. * Returns non-zero if given 'func' number was handled by the generic * code, zero otherwise. If handled, the syscall error is returned * via the err_ptr. */extern int  _bsp_do_syscall(int __func,			    long __arg1, long __arg2, long __arg3, long __arg4,			    int *__err_ptr);extern void _bsp_cpu_init(void);extern void _bsp_board_init(void);/* * General interface for getting certain BSP parameters. * See bsp.h for details. */extern int  _bsp_sysinfo(enum bsp_info_id __id, va_list __ap);/* * Called from comm channel when a connection to host is closed. */extern void _bsp_dbg_connect_abort(void);  /* * Pointer to a network channel. NULL if no network channel * exists. */extern struct bsp_comm_channel *_bsp_net_channel;/* * Formatted output primitive. */extern void __vprintf(void (*putc_func)(char c), const char *fmt0, va_list ap);#endif /* !__ASSEMBLER__ *//* * SYSCALL number to use to get pointer to above bsp_shared_t structure. */#define BSP_GET_SHARED  0xbaad#endif // __BSP_COMMON_BSP_IF_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -