📄 devcnfg.c
字号:
/***************************************************************************
*
* Copyright (c) 1995,1996 MICROTEC RESEARCH INC.
*
* All rights reserved. MICROTEC RESEARCH's source code is an unpublished
* work and the use of a copyright notice does not imply otherwise.
* This source code contains confidential, trade secret material of
* MICROTEC RESEARCH. Any attempt or participation in deciphering,
* decoding, reverse engineering or in any way altering the source code
* is strictly prohibited, unless the prior written consent of
* MICROTEC RESEARCH is obtained.
*
*
* Module Name: devcnfg.tpl
*
* Identification: 1.11 devcnfg.tpl
*
* Date: 8/20/96 17:50:31
*
*****************************************************************************/
static const char sccsid[] = " 1.9 devcnfg.tpl 8/20/96";
/*
** devcnfg.c
**
** Contents:
**
** This file implements any device configuration and initialization.
** Board specific definitions are in <board>.def.
**
**
** Revision History:
**
** Date Name Description
**
----------------------------------------------------------------------
*/
/************************************************************************
* ENVIROMENAL DEFINITIONS *
************************************************************************/
#define SCREEN_DEVICE 1
#define GRAPHICS_DEVICE 0
#define SERIAL_DEVICE_1 0
#define SERIAL_DEVICE_2 1
#define SERIAL_DEVICE (SERIAL_DEVICE_1 | SERIAL_DEVICE_2)
#define SERIAL_INTERRUPT 1
#define TIMER_DEVICE 1
#define ETHER_DEVICE 0
#define NE2000_DEVICE 1
#define ETHERLINK3_DEVICE 0
/************************************************************************
* INCLUDE FILES *
************************************************************************/
#include "in8259.h"
#if (SCREEN_DEVICE | GRAPHICS_DEVICE)
#include "pcat/screen.h" /* PCAT Screen & Keyboard Interface Data Structs */
#endif
#if GRAPHICS_DEVICE == 1
#include "graphics/metawndo.h"
#endif
#if SERIAL_DEVICE == 1
#include "serial_2.h" /* serial interface data structs */
#include "na16550.h"
#endif
#if TIMER_DEVICE == 1
#include "timer.h" /* timer interface data structs */
#include "in8254.h"
#endif
#if ETHER_DEVICE == 1
#include "ether_1.h"
#if NE2000_DEVICE
#include "ne2000.h"
#endif
#if ETHERLINK3_DEVICE
#include "pcat/ethlnk3.h"
#endif
#endif
/************************************************************************
* BOARD SPECIFIC DEVICE VALUES *
************************************************************************/
#define PIC_M_LEVEL 0x30
#define PIC_S_LEVEL 0x38
#define KEYBOARD_IRQ 1
#if (KEYBOARD_IRQ < 8)
#define KEYBOARD_VECTOR (PIC_M_LEVEL + KEYBOARD_IRQ)
#else
#define KEYBOARD_VECTOR (PIC_S_LEVEL + KEYBOARD_IRQ - 8)
#endif
#define KEYBOARD_PORT 0x60
#define COM1_BAUD 9600
#define COM2_BAUD 9600
#define COM1 0x03F8
#define COM2 0x02F8
#define COM3
#define COM4
#define COM1_IRQ 4
#define COM2_IRQ 3
#if (COM1_IRQ < 8)
#define COM1_VECTOR (PIC_M_LEVEL + COM1_IRQ)
#else
#define COM1_VECTOR (PIC_S_LEVEL + COM1_IRQ - 8)
#endif
#define COM1_RX_VECTOR COM1_VECTOR
#define COM1_TX_VECTOR COM1_VECTOR
#define COM1_RXE_VECTOR COM1_VECTOR
#if (COM2_IRQ < 8)
#define COM2_VECTOR (PIC_M_LEVEL + COM2_IRQ)
#else
#define COM2_VECTOR (PIC_S_LEVEL + COM2_IRQ - 8)
#endif
#define COM2_RX_VECTOR COM2_VECTOR
#define COM2_TX_VECTOR COM2_VECTOR
#define COM2_RXE_VECTOR COM2_VECTOR
#define TIMER_8254_IRQ 0
#if (TIMER_8254_IRQ < 8)
#define TIMER_8254_VECTOR (PIC_M_LEVEL + TIMER_8254_IRQ)
#else
#define TIMER_8254_VECTOR (PIC_S_LEVEL + TIMER_8254_IRQ - 8)
#endif
#define TIMER_CLOCK_PERIOD 838
#define TIMER_INITIAL_COUNTER 0
#define TIMER_PRELOAD 11930
#define TIMER_8254_CNTR0 0x40 /* in8254 counter 0 address */
#define TIMER_8254_CNTR1 0x41 /* in8254 counter 1 address */
#define TIMER_8254_CNTR2 0x42 /* in8254 counter 2 address */
#define TIMER_8254_CNTRL 0x43 /* in8254 chan mode cntrl addr */
/************************************************************************
* DEVICE CONFIGURATION STRUCTURES *
************************************************************************/
/************************************************************************
* PCAT CHARACTER DISPLAY & KEYBOARD *
************************************************************************/
#if (SCREEN_DEVICE | GRAPHICS_DEVICE)
vbsp_return_t keyboard_int_enable (void) {
in8259_interrupt_enable (KEYBOARD_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t keyboard_eoi (void) {
in8259_end_of_interrupt (KEYBOARD_IRQ);
return VBSP_SUCCESS;
}
int keyboard_int_status (void) {
return (in8259_get_interrupt_enabled (KEYBOARD_IRQ));
}
unsigned screen_scroll_task_priority = 0;
#endif
#if SCREEN_DEVICE == 1
const screen_config_t screen_config_rom = {
{ /* VGA CONFIG STRUCT */
9, /* Screen Mode */
25, /* Vertical Size */
80, /* Horizontal Size */
KEYBOARD_VECTOR, /* Keyboard Receive Int Vector */
},
{ /* SCREEN REG MAP STRUCT */
(BYTE *) KEYBOARD_PORT + 0, /* Keyboard receive register */
(BYTE *) KEYBOARD_PORT + 0, /* Keyboard transmit register */
(BYTE *) KEYBOARD_PORT + 1, /* interrupt enable */
(BYTE *) KEYBOARD_PORT + 2, /* interrupt id */
},
{ /* ERTIO FOPS STRUCT */
0, 0, 0, /* Int Read Function Pointers */
0, 0, 0, /* Int Write Function Pointers */
0, /* Int Strt function pointer */
(vbsp_return_t (*) (void *, unsigned char))
keyboard_eoi, /* Int End Function Pointer */
0, /* board specific int disable handling */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
keyboard_int_enable, /* board specific int enable handling */
0
},
};
screen_dev_desc_t screen_dev;
screen_config_t screen_config_ram;
const logio_method_t logio_screen_method = {
(logio_fops_t *) &logio_screen_fops,
(void *) &screen_dev
};
logio_device_id_t logio_screen_id =
(logio_device_id_t) &logio_screen_method;
#endif /* SCREEN_DEVICE == 1 */
/*********************************************************************
* PCAT GRAPHICS DISPLAY & KEYBOARD *
*********************************************************************/
#if GRAPHICS_DEVICE == 1
const screen_config_t graphics_config_rom = {
{ /* VGA CONFIG STRUCT */
VGA640x480, /* Screen Mode */
25, /* Vertical Size */
80, /* Horizontal Size */
KEYBOARD_VECTOR, /* Keyboard Receive Int Vector */
},
{ /* SCREEN REG MAP STRUCT */
(BYTE *) KEYBOARD_PORT + 0, /* Keyboard receive register */
(BYTE *) KEYBOARD_PORT + 0, /* Keyboard transmit register */
(BYTE *) KEYBOARD_PORT + 1, /* interrupt enable */
(BYTE *) KEYBOARD_PORT + 2, /* interrupt id */
},
{ /* ERTIO FOPS STRUCT */
0, 0, 0, /* Int Read Function Pointers */
0, 0, 0, /* Int Write Function Pointers */
0, /* int_strt function pointer */
(vbsp_return_t (*) (void *, unsigned char))
keyboard_eoi, /* Int End Function Pointer */
0, /* board specific int disable handling */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
keyboard_int_enable, /* board specific int enable handling */
0
},
};
screen_dev_desc_t graphics_dev;
screen_config_t graphics_config_ram;
const logio_method_t logio_graphics_method = {
(logio_fops_t *) &logio_screen_fops,
(void *) &graphics_dev
};
logio_device_id_t logio_graphics_id =
(logio_device_id_t) &logio_graphics_method;
#endif /* GRAPHICS_DEVICE == 1 */
/********************************************************************
* COM PORTS *
********************************************************************/
#if SERIAL_DEVICE == 1
#if SERIAL_DEVICE_1 == 1
/* DEV_SERIAL_1 */
vbsp_return_t com1_int_enable(void) {
in8259_interrupt_enable (COM1_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t com1_eoi (void) {
in8259_end_of_interrupt (COM1_IRQ);
return VBSP_SUCCESS;
}
const na16550_config_t sc1_config_rom = {
{ /* SERIAL_1_CONFIG_T */
serial_tty_device, /* the default uses serial_1 for a bridge */
0, /* clock speed in Mhz */
COM1_BAUD, /* baud rate cnt */
PARITY_NONE, /* from serial_2.h */
BITS_8, /* from serial_2.h */
STOP_BITS_1, /* from serial_2.h */
COM1_RX_VECTOR, /* na16550 receive interrupt vector */
COM1_TX_VECTOR, /* na16550 transmit interrupt vector */
COM1_RXE_VECTOR, /* na16550 receive error interrupt vector */
0 /* void pointer for interface expansion */
},
{ /* NA16550_REG_MAP_T FROM NA16550.H */
(BYTE *) COM1 + 0, /* receive register */
(BYTE *) COM1 + 0, /* transmit register */
(BYTE *) COM1 + 1, /* interrupt enable */
(BYTE *) COM1 + 2, /* interrupt id */
(BYTE *) COM1 + 3, /* line control */
(BYTE *) COM1 + 4, /* modem control */
(BYTE *) COM1 + 5, /* line status */
(BYTE *) COM1 + 6, /* modem status */
(BYTE *) COM1 + 1, /* divisor latch upper byte */
(BYTE *) COM1 + 0 /* divisor latch lower byte */
},
{ /* EXTERN_FOPS_T FROM EXTIO_1.H */
0, /* register write byte */
0, /* register write word */
0, /* register write long */
0, /* register read byte */
0, /* register read word */
0, /* register read long */
0, /* int_strt function pointer */
#if SERIAL_INTERRUPT == 1
(vbsp_return_t (*) (void *, unsigned char))
com1_eoi, /* Int End Function Pointer */
0, /* board specific int disable handling */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
com1_int_enable, /* board specific int enable handling */
#else
0,0,0,
#endif
0
},
{ /* na16550_specific_t from na16550.h */
0, /* LSR */
0 /* FROM_ISR */
}
};
#endif
#if SERIAL_DEVICE_2 == 1
/* DEV_SERIAL_2 */
vbsp_return_t com2_int_enable(void) {
in8259_interrupt_enable (COM2_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t com2_eoi (void) {
in8259_end_of_interrupt (COM2_IRQ);
return VBSP_SUCCESS;
}
const na16550_config_t sc2_config_rom= {
{ /* SERIAL_2_CONFIG_T */
serial_tty_device, /* the default uses serial_2 for console */
0, /* clock speed in Mhz */
COM2_BAUD, /* baud rate cnt */
PARITY_NONE, /* from serial_2.h */
BITS_8, /* from serial_2.h */
STOP_BITS_1, /* from serial_2.h */
COM2_RX_VECTOR, /* na16550 receive interrupt vector */
COM2_TX_VECTOR, /* na16550 transmit interrupt vector */
COM2_RXE_VECTOR, /* na16550 receive error interrupt vector */
0 /* void pointer for interface expansion */
},
{ /* NA16550_REG_MAP_T FROM NA16550.H */
(BYTE *)COM2 +0, /* receive register */
(BYTE *)COM2 +0, /* transmit register */
(BYTE *)COM2 +1, /* interrupt enable */
(BYTE *)COM2 +2, /* interrupt id */
(BYTE *)COM2 +3, /* line control */
(BYTE *)COM2 +4, /* modem control */
(BYTE *)COM2 +5, /* line status */
(BYTE *)COM2 +6, /* modem status */
(BYTE *)COM2 +1, /* divisor latch upper byte */
(BYTE *)COM2 +0 /* divisor latch lower byte */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -