Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/bhyve/pci_e82545.c
Show First 20 Lines • Show All 2,272 Lines • ▼ Show 20 Lines | e82545_reset(struct e82545_softc *sc, int drvr) | ||||
sc->esc_TCTL = 0; | sc->esc_TCTL = 0; | ||||
sc->esc_TDLEN = 0; | sc->esc_TDLEN = 0; | ||||
sc->esc_TDT = 0; | sc->esc_TDT = 0; | ||||
sc->esc_TDHr = sc->esc_TDH = 0; | sc->esc_TDHr = sc->esc_TDH = 0; | ||||
sc->esc_TXDCTL = 0; | sc->esc_TXDCTL = 0; | ||||
} | } | ||||
static int | static int | ||||
e82545_init(struct vmctx *ctx, struct pci_devinst *pi, nvlist_t *nvl) | e82545_init(struct vmctx *ctx, struct pci_devinst *pi, config_node_t *node) | ||||
{ | { | ||||
char nstr[80]; | char nstr[80]; | ||||
struct e82545_softc *sc; | struct e82545_softc *sc; | ||||
const char *mac; | const char *mac; | ||||
int err; | int err; | ||||
/* Setup our softc */ | /* Setup our softc */ | ||||
sc = calloc(1, sizeof(*sc)); | sc = calloc(1, sizeof(*sc)); | ||||
Show All 14 Lines | e82545_init(struct vmctx *ctx, struct pci_devinst *pi, config_node_t *node) | ||||
pci_set_cfgdata16(pi, PCIR_VENDOR, E82545_VENDOR_ID_INTEL); | pci_set_cfgdata16(pi, PCIR_VENDOR, E82545_VENDOR_ID_INTEL); | ||||
pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_NETWORK); | pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_NETWORK); | ||||
pci_set_cfgdata8(pi, PCIR_SUBCLASS, PCIS_NETWORK_ETHERNET); | pci_set_cfgdata8(pi, PCIR_SUBCLASS, PCIS_NETWORK_ETHERNET); | ||||
pci_set_cfgdata16(pi, PCIR_SUBDEV_0, E82545_SUBDEV_ID); | pci_set_cfgdata16(pi, PCIR_SUBDEV_0, E82545_SUBDEV_ID); | ||||
pci_set_cfgdata16(pi, PCIR_SUBVEND_0, E82545_VENDOR_ID_INTEL); | pci_set_cfgdata16(pi, PCIR_SUBVEND_0, E82545_VENDOR_ID_INTEL); | ||||
pci_set_cfgdata8(pi, PCIR_HDRTYPE, PCIM_HDRTYPE_NORMAL); | pci_set_cfgdata8(pi, PCIR_HDRTYPE, PCIM_HDRTYPE_NORMAL); | ||||
pci_set_cfgdata8(pi, PCIR_INTPIN, 0x1); | pci_set_cfgdata8(pi, PCIR_INTPIN, 0x1); | ||||
/* TODO: this card also supports msi, but the freebsd driver for it | /* TODO: this card also supports msi, but the freebsd driver for it | ||||
* does not, so I have not implemented it. */ | * does not, so I have not implemented it. */ | ||||
pci_lintr_request(pi); | pci_lintr_request(pi); | ||||
pci_emul_alloc_bar(pi, E82545_BAR_REGISTER, PCIBAR_MEM32, | pci_emul_alloc_bar(pi, E82545_BAR_REGISTER, PCIBAR_MEM32, | ||||
E82545_BAR_REGISTER_LEN); | E82545_BAR_REGISTER_LEN); | ||||
pci_emul_alloc_bar(pi, E82545_BAR_FLASH, PCIBAR_MEM32, | pci_emul_alloc_bar(pi, E82545_BAR_FLASH, PCIBAR_MEM32, | ||||
E82545_BAR_FLASH_LEN); | E82545_BAR_FLASH_LEN); | ||||
pci_emul_alloc_bar(pi, E82545_BAR_IO, PCIBAR_IO, | pci_emul_alloc_bar(pi, E82545_BAR_IO, PCIBAR_IO, | ||||
E82545_BAR_IO_LEN); | E82545_BAR_IO_LEN); | ||||
mac = get_config_value_node(nvl, "mac"); | mac = get_config_value_node(node, "mac"); | ||||
if (mac != NULL) { | if (mac != NULL) { | ||||
err = net_parsemac(mac, sc->esc_mac.octet); | err = net_parsemac(mac, sc->esc_mac.octet); | ||||
if (err) { | if (err) { | ||||
free(sc); | free(sc); | ||||
return (err); | return (err); | ||||
} | } | ||||
} else | } else | ||||
net_genmac(pi, sc->esc_mac.octet); | net_genmac(pi, sc->esc_mac.octet); | ||||
err = netbe_init(&sc->esc_be, nvl, e82545_rx_callback, sc); | err = netbe_init(&sc->esc_be, node, e82545_rx_callback, sc); | ||||
if (err) { | if (err) { | ||||
free(sc); | free(sc); | ||||
return (err); | return (err); | ||||
} | } | ||||
netbe_rx_enable(sc->esc_be); | netbe_rx_enable(sc->esc_be); | ||||
/* H/w initiated reset */ | /* H/w initiated reset */ | ||||
▲ Show 20 Lines • Show All 171 Lines • Show Last 20 Lines |