Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/sound/pci/emu10k1.c
Context not available. | |||||
#define A_EXTOUT_ADC_CAP_L 0x16 | #define A_EXTOUT_ADC_CAP_L 0x16 | ||||
#define A_EXTOUT_ADC_CAP_R 0x17 | #define A_EXTOUT_ADC_CAP_R 0x17 | ||||
static struct emu_pci_dev { | |||||
uint32_t devid; | |||||
const char *description; | |||||
uint8_t rev; | |||||
} emu_pci_devs[] = { | |||||
{EMU10K1_PCI_ID, "Creative EMU10K1", 0}, | |||||
{EMU10K2_PCI_ID, "Creative Audigy (EMU10K2)", 0}, | |||||
{EMU10K2_PCI_ID, "Creative Audigy 2 (EMU10K2)", 0x04}, | |||||
{EMU10K3_PCI_ID, "Creative Audigy 2 (EMU10K3)", 0}, | |||||
{0, 0, 0}, | |||||
}; | |||||
static struct emujoy_pci_dev { | |||||
uint32_t devid; | |||||
const char *description; | |||||
} emujoy_pci_devs[] = { | |||||
{0x70021102, "Creative EMU10K1 Joystick"}, | |||||
{0x70031102, "Creative EMU10K2 Joystick"}, | |||||
{0, 0}, | |||||
}; | |||||
struct emu_memblk { | struct emu_memblk { | ||||
SLIST_ENTRY(emu_memblk) link; | SLIST_ENTRY(emu_memblk) link; | ||||
void *buf; | void *buf; | ||||
Context not available. | |||||
static int | static int | ||||
emu_pci_probe(device_t dev) | emu_pci_probe(device_t dev) | ||||
{ | { | ||||
char *s = NULL; | const struct emu_pci_dev *emud; | ||||
uint32_t devid; | |||||
switch (pci_get_devid(dev)) { | size_t i; | ||||
case EMU10K1_PCI_ID: | uint8_t rev; | ||||
s = "Creative EMU10K1"; | |||||
break; | devid = pci_get_devid(dev); | ||||
rev = pci_get_revid(dev); | |||||
case EMU10K2_PCI_ID: | for (i = 0; i < nitems(emu_pci_devs); i++) { | ||||
if (pci_get_revid(dev) == 0x04) | emud = &emu_pci_devs[i]; | ||||
s = "Creative Audigy 2 (EMU10K2)"; | if ((emud->devid == devid) && | ||||
else | ((emud->rev == rev) || emud->rev == 0)) { | ||||
s = "Creative Audigy (EMU10K2)"; | device_set_desc(dev, emud->description); | ||||
break; | return BUS_PROBE_LOW_PRIORITY; | ||||
} | |||||
case EMU10K3_PCI_ID: | |||||
s = "Creative Audigy 2 (EMU10K3)"; | |||||
break; | |||||
default: | |||||
return ENXIO; | |||||
} | } | ||||
return ENXIO; | |||||
device_set_desc(dev, s); | |||||
return BUS_PROBE_LOW_PRIORITY; | |||||
} | } | ||||
static int | static int | ||||
emu_pci_attach(device_t dev) | emu_pci_attach(device_t dev) | ||||
{ | { | ||||
Context not available. | |||||
}; | }; | ||||
DRIVER_MODULE(snd_emu10k1, pci, emu_driver, pcm_devclass, NULL, NULL); | DRIVER_MODULE(snd_emu10k1, pci, emu_driver, pcm_devclass, NULL, NULL); | ||||
MODULE_PNP_INFO("W32:vendor/device;D:#", pci, snd_emu101k1, | |||||
emu_pci_devs, sizeof(emu_pci_devs[0]), nitems(emu_pci_devs) - 1); | |||||
MODULE_DEPEND(snd_emu10k1, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER); | MODULE_DEPEND(snd_emu10k1, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER); | ||||
MODULE_VERSION(snd_emu10k1, 1); | MODULE_VERSION(snd_emu10k1, 1); | ||||
MODULE_DEPEND(snd_emu10k1, midi, 1, 1, 1); | MODULE_DEPEND(snd_emu10k1, midi, 1, 1, 1); | ||||
Context not available. | |||||
static int | static int | ||||
emujoy_pci_probe(device_t dev) | emujoy_pci_probe(device_t dev) | ||||
{ | { | ||||
char *s = NULL; | const struct emujoy_pci_dev *emujd; | ||||
size_t i; | |||||
switch (pci_get_devid(dev)) { | uint32_t devid; | ||||
case 0x70021102: | |||||
s = "Creative EMU10K1 Joystick"; | devid = pci_get_devid(dev); | ||||
device_quiet(dev); | for (i = 0; i < nitems(emujoy_pci_devs); i++) { | ||||
break; | emujd = &emujoy_pci_devs[i]; | ||||
case 0x70031102: | if(emujd->devid == devid) { | ||||
s = "Creative EMU10K2 Joystick"; | device_set_desc(dev, emujd->description); | ||||
device_quiet(dev); | device_quiet(dev); | ||||
break; | return -1000; | ||||
} | |||||
} | } | ||||
return ENXIO; | |||||
if (s) device_set_desc(dev, s); | |||||
return s ? -1000 : ENXIO; | |||||
} | } | ||||
static int | static int | ||||
Context not available. | |||||
static devclass_t emujoy_devclass; | static devclass_t emujoy_devclass; | ||||
DRIVER_MODULE(emujoy, pci, emujoy_driver, emujoy_devclass, NULL, NULL); | DRIVER_MODULE(emujoy, pci, emujoy_driver, emujoy_devclass, NULL, NULL); | ||||
MODULE_PNP_INFO("W32:vendor/device;D:#", pci, emujoy, emujoy_pci_devs, | |||||
sizeof(emujoy_pci_devs[0]), nitems(emujoy_pci_devs) - 1); | |||||
Context not available. |