当前位置: 技术问答>linux和unix
怎样调用Dos中断得到网卡号?急!
来源: 互联网 发布时间:2014-11-07
本文导语: | 若是PCI的网卡直接调用int 1ah,的各种功能。仔细读一下相关的代码即可。 给你段代码,看看即可。 /************************************** PCI function code ***************************************/ #define PCI_FUNCTION_ID ...
|
若是PCI的网卡直接调用int 1ah,的各种功能。仔细读一下相关的代码即可。
给你段代码,看看即可。
/**************************************
PCI function code
***************************************/
#define PCI_FUNCTION_ID 0xB1
#define PCI_BIOS_PRESENT 0x01
#define FIND_PCI_DEVICE 0x02
#define FIND_PCI_CLASS_CODE 0xB103
#define NETWORK_CLASS 0x20000
#define RTVID 0x10EC
#define RTDID 0x8139
#define READ_CONFIG_BYTE 0xB108
#define READ_CONFIG_WORD 0xB109
#define WRITE_CONFIG_BYTE 0xB10B
/**************************************
Find 8139 in PCI bus
***************************************/
BOOL Find8139(void)
{
WORD index=-1;
Find8139Loop:
index++;
if(index>=16) return 0;
asm{
mov si,index
mov ax,FIND_PCI_CLASS_CODE
mov ecx,NETWORK_CLASS
int 1Ah
jc Find8139Loop
mov si,ax
mov ax,WRITE_CONFIG_BYTE;
mov cx,RTDID
mov dx,RTVID
mov di,0x0D
mov cl,32
int 1Ah
mov ax,WRITE_CONFIG_BYTE;
mov di,4
mov cl,7
int 1Ah
mov ax,READ_CONFIG_WORD
mov cx,RTDID
mov di,0x12 //Get high word of I/O address
int 1Ah
mov ax,READ_CONFIG_WORD;
mov cx,RTDID;
mov di,0x10 //Get low word of I/O address
int 1Ah
and cx,0xfffe
mov IOADDR,cx
mov ax,READ_CONFIG_WORD;
mov cx,RTDID;
mov di,0x3C //Get IRQ number
int 1Ah
xor ch,ch
mov IRQ,cx
}
return 1;
}
或者自己控制PCI寄存器0xcf8,0xcfc等直接去读取其配置。
如果是ISA的则需要自己都网卡的EEPROM找到相应的位置即可。
给你段代码,看看即可。
/**************************************
PCI function code
***************************************/
#define PCI_FUNCTION_ID 0xB1
#define PCI_BIOS_PRESENT 0x01
#define FIND_PCI_DEVICE 0x02
#define FIND_PCI_CLASS_CODE 0xB103
#define NETWORK_CLASS 0x20000
#define RTVID 0x10EC
#define RTDID 0x8139
#define READ_CONFIG_BYTE 0xB108
#define READ_CONFIG_WORD 0xB109
#define WRITE_CONFIG_BYTE 0xB10B
/**************************************
Find 8139 in PCI bus
***************************************/
BOOL Find8139(void)
{
WORD index=-1;
Find8139Loop:
index++;
if(index>=16) return 0;
asm{
mov si,index
mov ax,FIND_PCI_CLASS_CODE
mov ecx,NETWORK_CLASS
int 1Ah
jc Find8139Loop
mov si,ax
mov ax,WRITE_CONFIG_BYTE;
mov cx,RTDID
mov dx,RTVID
mov di,0x0D
mov cl,32
int 1Ah
mov ax,WRITE_CONFIG_BYTE;
mov di,4
mov cl,7
int 1Ah
mov ax,READ_CONFIG_WORD
mov cx,RTDID
mov di,0x12 //Get high word of I/O address
int 1Ah
mov ax,READ_CONFIG_WORD;
mov cx,RTDID;
mov di,0x10 //Get low word of I/O address
int 1Ah
and cx,0xfffe
mov IOADDR,cx
mov ax,READ_CONFIG_WORD;
mov cx,RTDID;
mov di,0x3C //Get IRQ number
int 1Ah
xor ch,ch
mov IRQ,cx
}
return 1;
}
或者自己控制PCI寄存器0xcf8,0xcfc等直接去读取其配置。
如果是ISA的则需要自己都网卡的EEPROM找到相应的位置即可。