📄 devcnfg.c
字号:
},
{ /* 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))
com2_eoi, /* Int End Function Pointer */
0, /* board specific int disable handling */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
com2_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_1 == 1
serial_dev_desc_t sc1_dev;
#endif
#if SERIAL_DEVICE_2 == 1
serial_dev_desc_t sc2_dev;
#endif
#if SERIAL_DEVICE_1 == 1
na16550_config_t sc1_config_ram;
#endif
#if SERIAL_DEVICE_2 == 1
na16550_config_t sc2_config_ram;
#endif
#if SERIAL_DEVICE_1 == 1
const logio_method_t logio_serial_1_method =
{
(logio_fops_t *)&logio_serial_fops,
(void *)&sc1_dev
};
#endif
#if SERIAL_DEVICE_2 == 1
const logio_method_t logio_serial_2_method =
{
(logio_fops_t *)&logio_serial_fops,
(void *)&sc2_dev
};
#endif
#if SERIAL_DEVICE_1 == 1
logio_device_id_t logio_serial_1_id = (logio_device_id_t)&logio_serial_1_method;
#endif
#if SERIAL_DEVICE_2 == 1
logio_device_id_t logio_serial_2_id = (logio_device_id_t)&logio_serial_2_method;
#endif
#endif
/************************************************************************
* ETHERNET DEVICES *
************************************************************************/
#if ETHER_DEVICE == 1
#if NE2000_DEVICE
vbsp_return_t ne2000_int_en(void) {
in8259_interrupt_enable (NE2000_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t ne2000_int_dis(void) {
in8259_interrupt_disable (NE2000_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t ne2000_eoi(void) {
in8259_end_of_interrupt (NE2000_IRQ);
return VBSP_SUCCESS;
}
/* ETHER_1 */
ne2000_config_t eth_config_rom = {
/* ROM CONFIGURATION VALUES (will be placed in RAM as DEFAULT) */
{
0, /* interface rev level from driver */
/* MEMORY CONFIGURATION */
1, /* use system buffers */
0, /* base memory */
0, /* memory size */
0, /* do not get all packets on recv */
/* VECTOR CONFIGURATION */
NE2000_ETHER_TX_VECTOR, /* tx vector */
NE2000_ETHER_RX_VECTOR, /* rx vector */
NE2000_ETHER_ERR_VECTOR, /* err vector */
NE2000_ETHER_INIT_VECTOR, /* init vector */
/* BUFFER CONFIGURATION */
14, /* number rx buffers */
1, /* number tx buffers */
1, /* number of free tx buffers */
/* ETHERNET CONFIGURATION */
ne2000_get_ether_address,
ne2000_set_ether_address,
0,0,0,0,0,0, /* ethernet address */
0 /* Specific ne2000 RAM structure here */
},
/* EXTERNAL INPUT/OUTPUT AND INTERFACE FUNCTIONS */
{
0,0,0,0,0,0, /* register read/write byte/word long */
0, /* int_strt function pointer */
(vbsp_return_t (*) (void *, unsigned char))
ne2000_eoi, /* int_end function pointer */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
ne2000_int_dis, /* board specific int disable handling */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
ne2000_int_en, /* board specific int enable handling */
0
},
NE2000_BASE, /* base address : if < 100, H/w is probed */
NE2000_IRQ, /* IRQ */
CABLE_THICK_ETHERNET /* cable type */
};
ether_1_dev_desc_t eth_dev;
ne2000_config_t eth_config_ram;
const logio_method_t logio_ether_1_method = {
(logio_fops_t *)&logio_ether_1_fops,
(void *)ð_dev
};
logio_device_id_t logio_ether_1_id = (logio_device_id_t)&logio_ether_1_method;
#endif
#if ETHERLINK3_DEVICE
vbsp_return_t ethlnk3_int_en(void) {
in8259_interrupt_enable (ETHERLINK3_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t ethlnk3_int_dis(void) {
in8259_interrupt_disable (ETHERLINK3_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t ethlnk3_eoi(void) {
in8259_end_of_interrupt (ETHERLINK3_IRQ);
return VBSP_SUCCESS;
}
/* ETHER_1 */
ethlnk3_config_t eth_config_rom = {
/* ROM CONFIGURATION VALUES (will be placed in RAM as DEFAULT)*/
{
0, /*interface rev level from driver */
/* MEMORYCONFIGURATION */
1, /* use system buffers */
0, /* base memory */
0, /* memory size */
0, /* do not get all packets on recv */
/* VECTOR CONFIGURATION */
ETHERLINK3_ETHER_TX_VECTOR, /* tx vector */
ETHERLINK3_ETHER_RX_VECTOR, /* rx vector */
ETHERLINK3_ETHER_ERR_VECTOR, /* err vector */
ETHERLINK3_ETHER_INIT_VECTOR, /* init vector */
/* BUFFER CONFIGURATION */
14, /* number rx buffers */
1, /* number tx buffers */
1, /* number of free tx buffers */
/* ETHERNET CONFIGURATION */
ethlnk3_get_ether_address,
ethlnk3_set_ether_address,
0,0,0,0,0,0, /* ethernet address */
0 /* Specific ethlnk3 RAM structure here */
},
/* EXTERNAL INPUT/OUTPUT AND INTERFACE FUNCTIONS */
{
0,0,0,0,0,0, /* register read/write byte/word long */
0, /* int_strt function pointer */
(vbsp_return_t (*) (void *, unsigned char))
ethlnk3_eoi, /* int_end function pointer */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
ethlnk3_int_dis,/* board specific int disable handling */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
ethlnk3_int_en, /* board specific int enable handling */
0
},
0x300, /* I/O base address */
ETHERLINK3_IRQ, /* IRQ */
CABLE_THICK_ETHERNET /* cable type */
};
ether_1_dev_desc_t eth_dev;
ethlnk3_config_t eth_config_ram;
const logio_method_t logio_ether_1_method = {
(logio_fops_t *)&logio_ether_1_fops,
(void *)ð_dev
};
logio_device_id_t logio_ether_1_id = (logio_device_id_t)&logio_ether_1_method;
#endif
#endif
/**********************************************************************
* TIMER DEVICE *
**********************************************************************/
#if TIMER_DEVICE == 1
vbsp_return_t in8254_int_enable(void) {
in8259_interrupt_enable (TIMER_8254_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t in8254_int_disable(void) {
in8259_interrupt_disable (TIMER_8254_IRQ);
return VBSP_SUCCESS;
}
vbsp_return_t in8254_eoi(void) {
in8259_end_of_interrupt (TIMER_8254_IRQ);
return VBSP_SUCCESS;
}
/* all timers use the same fops so we need a external reference here! */
in8254_specific_t in8254_specific_RAM1;
const in8254_config_t pit_config_rom = {
{ /* TIMER CONFIG STRUCT */
TIMER_8254_VECTOR,
TIMER_CLOCK_PERIOD,
TIMER_INITIAL_COUNTER,
TIMER_PRELOAD,
(void *) &in8254_specific_RAM1 /* additional configuration */
},
{ /* TIMER FOPS */
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))
in8254_eoi,
(vbsp_return_t (*) (void *, logio_int_entry_t *))
in8254_int_disable, /* Int Disable Handling */
(vbsp_return_t (*) (void *, logio_int_entry_t *))
in8254_int_enable, /* Int Enable Handling */
(void *) 0
},
{
(unsigned char *) TIMER_8254_CNTR0, /* count value for counter 0 */
(unsigned char *) TIMER_8254_CNTR1, /* count value for counter 1 */
(unsigned char *) TIMER_8254_CNTR2, /* count value for counter 2 */
(unsigned char *) TIMER_8254_CNTRL, /* channel's mode of operation */
},
{
0 /* flag_int_enabled = 0 */
}
};
timer_dev_desc_t pit;
in8254_config_t pit_config_ram;
const logio_method_t logio_timer_1_method = {
(logio_fops_t *) &logio_timer_fops,
(void *)&pit
};
logio_device_id_t logio_timer_1_id =
(logio_device_id_t) &logio_timer_1_method;
#endif
int _acrtused = 0x9876;
/****************************************************************
* 8259 PIC CONFIGURATION *
****************************************************************/
unsigned pic_m_level = 0x30;
unsigned pic_s_level = 0x38;
unsigned pic_m_base = 0x20;
unsigned pic_s_base = 0xa0;
unsigned pic_slave_irq = 2;
/********************************************************************
* *
* LOGIO_DEVICE_INSTALL *
* *
* Description: *
* *
* This procedure installs functions for each device. *
* Any ROM to RAM copies of configuration structures *
* are performed here. *
* *
* Returns: *
* *
* LOGIO_STATUS_OK: All devices installed OK *
* LOGIO_STATUS_NOT_INITIALIZED: function failed *
* *
********************************************************************/
logio_status_t logio_device_install(void) {
/* Initialize the PIC in the board */
in8259_initialize ();
#if SCREEN_DEVICE == 1
screen_config_ram = screen_config_rom;
if (screen_install(&screen_config_ram, &screen_dev)) {
return (LOGIO_STATUS_NOTINITIALIZED);
}
#endif
#if GRAPHICS_DEVICE == 1
graphics_config_ram = graphics_config_rom;
if (graphics_install(&graphics_config_ram, &graphics_dev)) {
return (LOGIO_STATUS_NOTINITIALIZED);
}
#endif
#if TIMER_DEVICE == 1
pit_config_ram = pit_config_rom;
if(in8254_install(&pit_config_ram, &pit))
return(LOGIO_STATUS_NOTINITIALIZED);
#endif
#if ETHER_DEVICE == 1
#if NE2000_DEVICE
eth_config_ram = eth_config_rom;
if (ne2000_install(ð_config_ram, ð_dev))
return (LOGIO_STATUS_NOTINITIALIZED);
#endif
#if ETHERLINK3_DEVICE
eth_config_ram = eth_config_rom;
if (ethlnk3_install(ð_config_ram, ð_dev))
return (LOGIO_STATUS_NOTINITIALIZED);
#endif
#endif
#if SERIAL_DEVICE == 1
#if SERIAL_DEVICE_1 == 1
sc1_config_ram = sc1_config_rom;
if (na16550_install(&sc1_config_ram, &sc1_dev))
return (LOGIO_STATUS_NOTINITIALIZED);
#endif
#if SERIAL_DEVICE_2 == 1
sc2_config_ram = sc2_config_rom;
if (na16550_install(&sc2_config_ram, &sc2_dev))
return (LOGIO_STATUS_NOTINITIALIZED);
#endif
#endif
return(LOGIO_STATUS_OK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -