Skip to content

Commit

Permalink
csa: Use pci_find_device to simplify clkrun_hack
Browse files Browse the repository at this point in the history
Reviewed by:	christos, imp
Differential Revision:	https://reviews.freebsd.org/D47222
  • Loading branch information
bsdjhb committed Oct 24, 2024
1 parent 8c8ebbb commit f0bc751
Showing 1 changed file with 13 additions and 34 deletions.
47 changes: 13 additions & 34 deletions sys/dev/sound/pci/csa.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,46 +108,25 @@ static int
clkrun_hack(int run)
{
#ifdef __i386__
devclass_t pci_devclass;
device_t *pci_devices, *pci_children, *busp, *childp;
int pci_count = 0, pci_childcount = 0;
int i, j, port;
device_t child;
int port;
u_int16_t control;
bus_space_tag_t btag;

if ((pci_devclass = devclass_find("pci")) == NULL) {
return ENXIO;
}
child = pci_find_device(0x8086, 0x7113);
if (child == NULL)
return (ENXIO);

devclass_get_devices(pci_devclass, &pci_devices, &pci_count);

for (i = 0, busp = pci_devices; i < pci_count; i++, busp++) {
pci_childcount = 0;
if (device_get_children(*busp, &pci_children, &pci_childcount))
continue;
for (j = 0, childp = pci_children; j < pci_childcount; j++, childp++) {
if (pci_get_vendor(*childp) == 0x8086 && pci_get_device(*childp) == 0x7113) {
port = (pci_read_config(*childp, 0x41, 1) << 8) + 0x10;
/* XXX */
btag = X86_BUS_SPACE_IO;

control = bus_space_read_2(btag, 0x0, port);
control &= ~0x2000;
control |= run? 0 : 0x2000;
bus_space_write_2(btag, 0x0, port, control);
free(pci_devices, M_TEMP);
free(pci_children, M_TEMP);
return 0;
}
}
free(pci_children, M_TEMP);
}
port = (pci_read_config(child, 0x41, 1) << 8) + 0x10;
/* XXX */
btag = X86_BUS_SPACE_IO;

free(pci_devices, M_TEMP);
return ENXIO;
#else
return 0;
control = bus_space_read_2(btag, 0x0, port);
control &= ~0x2000;
control |= run? 0 : 0x2000;
bus_space_write_2(btag, 0x0, port, control);
#endif
return (0);
}

static struct csa_card cards_4610[] = {
Expand Down

0 comments on commit f0bc751

Please sign in to comment.