27 lines
827 B
C
27 lines
827 B
C
#include "rtl8139.h"
|
|
|
|
uint32_t rtl_base_port = 0;
|
|
uint32_t rtl_interrupt_line = 0;
|
|
uint8_t rtl_mac[6];
|
|
uint8_t rtl_buf[RTL8139_BUF_SIZE];
|
|
|
|
void rtl8139_init(uint32_t port, uint32_t int_line) {
|
|
rtl_base_port = port;
|
|
rtl_interrupt_line = int_line;
|
|
printf("RTL8139 on port %x int %d mac", port, int_line);
|
|
|
|
// Read RTL8139's MAC address
|
|
int i;
|
|
for(i = 0; i < 6; i++) {
|
|
rtl_mac[i] = inb(rtl_base_port + i);
|
|
printf("%c%x", (i == 0) ? ' ' : ':', rtl_mac[i]);
|
|
}
|
|
printf("\n");
|
|
|
|
outb(0x00, RTL8139_REG_CONF1); // Power it on
|
|
outb(0x10, RTL8139_REG_CMD); // Reset
|
|
while(0x10 & inb(RTL8139_REG_CMD)); // Wait until reset done
|
|
memset(rtl_buf, 0, RTL8139_BUF_SIZE); // Clear buf
|
|
outl(rtl_buf, RTL8139_REG_RBSTART); // Send ring buffer addr
|
|
}
|