📄 nic_conf.c
字号:
/* See Plug and Play ISA Specification for 3 following defines. */
#define PNP_ADDR_PORT 0x0004F2 /* 0x279 << 1 */
#define PNP_WRITE_PORT 0x0014F2 /* 0xA79 << 1 */
#define PNP_READ_PORT 0x000600 /* 0x300 << 1 */
#define PNP_SER_ISO 0X01 /* 0x01 << 1 Serial Isolation register, read only */
#define PNP_WAKE 0X03 /* 0x03 << 1 WAKE register, write only */
#define PNP_CSN 0X06 /* 0x06 << 1 Card Select Number, read/write */
/* Hardware Addresses */
#define NETCARD_SELECT 0x180001 /* Hardware select line */
#define NETDATA_SELECT 0x180020
#define NETCARD (char *) (NETCARD_SELECT | PNP_READ_PORT)
#define NETDATA (unsigned short *)(NETDATA_SELECT | PNP_READ_PORT)
/*======================================================================*/
/*======================================================================*/
void configure_nic_card (void)
{
unsigned short i;
/* Activate and disable NETRES. */
latch_state |= NETRES; /* Activate NETRES */
*LED = latch_state;
for (i = 0; i < 50000; ++i);
latch_state &= (~NETRES); /* Disable NETRES */
*LED = latch_state;
for (i = 0; i < 50000; ++i);
pnp_initiation_key ();
read_config_nic();
}
/*======================================================================*/
/*======================================================================*/
void pnp_initiation_key (void)
{
char *pnp_addr_port;
unsigned short i;
pnp_addr_port = (char *)(NETCARD_SELECT | PNP_ADDR_PORT);
/* Insure the LFSR is in the initial state */
*pnp_addr_port = 0x00;
*pnp_addr_port = 0x00;
for (i = 0; i < 50000; ++i);
/* Sending PnP initiation key */
*pnp_addr_port = 0x6A;
*pnp_addr_port = 0xB5;
*pnp_addr_port = 0xDA;
*pnp_addr_port = 0XED;
*pnp_addr_port = 0XF6;
*pnp_addr_port = 0XFB;
*pnp_addr_port = 0X7D;
*pnp_addr_port = 0XBE;
*pnp_addr_port = 0XDF;
*pnp_addr_port = 0X6F;
*pnp_addr_port = 0X37;
*pnp_addr_port = 0X1B;
*pnp_addr_port = 0X0D;
*pnp_addr_port = 0X86;
*pnp_addr_port = 0XC3;
*pnp_addr_port = 0X61;
*pnp_addr_port = 0XB0;
*pnp_addr_port = 0X58;
*pnp_addr_port = 0X2C;
*pnp_addr_port = 0X16;
*pnp_addr_port = 0X8B;
*pnp_addr_port = 0X45;
*pnp_addr_port = 0XA2;
*pnp_addr_port = 0XD1;
*pnp_addr_port = 0XE8;
*pnp_addr_port = 0X74;
*pnp_addr_port = 0X3A;
*pnp_addr_port = 0X9D;
*pnp_addr_port = 0XCE;
*pnp_addr_port = 0XE7;
*pnp_addr_port = 0X73;
*pnp_addr_port = 0X39;
}
/*======================================================================*/
/*======================================================================*/
void read_config_nic (void)
{
char *pnp_addr_port, *write_addr, *read_addr, serial_id[9], temp_55, temp_AA, data;
unsigned short i, j, shift_bit;
pnp_addr_port = (char *)(NETCARD_SELECT | PNP_ADDR_PORT);
write_addr = (char *)(NETCARD_SELECT | PNP_WRITE_PORT);
read_addr = (char *)(NETCARD_SELECT | PNP_READ_PORT);
/* send command Wake[0] */
*pnp_addr_port = PNP_WAKE;
*write_addr = 0x00;
/* set RD_DATA port, Write data bits[7:0] is used a ISA I/O bus address bits[9:2] */
*pnp_addr_port = 0x00;
*write_addr = 0xC0;
/* Read serial identifier from Serial Isolation register. */
*pnp_addr_port = PNP_SER_ISO;
/* Software protocol, 72 pairs of I/O read access to READ_DATA port. */
for (i = 0; i < 9; i++) {
for (j = 0, shift_bit = 1, data = 0x00; j < 8; j++, shift_bit <<= 1) {
/* Check for 0x55 and 0xAA */
temp_55 = *read_addr;
temp_AA = *read_addr;
if ((temp_55 == 0x55) && (temp_AA == 0xAA))
data |= shift_bit;
else
data &= ~shift_bit;
/* wait 250 ms for card accessing information from device. */
pnp_isolate_tmr = QUART_SEC_RLD;
while (pnp_isolate_tmr);
}
serial_id[i] = data;
}
/* Assign a handle to Card Select Number. */
*pnp_addr_port = PNP_CSN;
*write_addr = 0x01;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -