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

📄 nic_conf.c

📁 rt8019的驱动程序源代码和驱动测试程序源代码
💻 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 + -