cio
struct pci_conf_io *cio;
cio = (struct pci_conf_io *)ap->a_data;
cio->num_matches = 0;
if ((cio->offset != 0)
&& (cio->generation != pci_generation)){
cio->status = PCI_GETCONF_LIST_CHANGED;
if (cio->offset >= pci_numdevs) {
cio->status = PCI_GETCONF_LAST_DEVICE;
iolen = min(cio->match_buf_len - (cio->match_buf_len % confsz),
if ((cio->num_patterns > 0) && (cio->num_patterns < pci_numdevs)
&& (cio->pat_buf_len > 0)) {
if (cio->num_patterns * pbufsz != cio->pat_buf_len) {
cio->status = PCI_GETCONF_ERROR;
pattern_buf_old = kmalloc(cio->pat_buf_len,
error = copyin(cio->patterns,
pattern_buf_old, cio->pat_buf_len);
pattern_buf = kmalloc(cio->pat_buf_len, M_TEMP,
error = copyin(cio->patterns, pattern_buf,
cio->pat_buf_len);
num_patterns = cio->num_patterns;
} else if ((cio->num_patterns > 0)
|| (cio->pat_buf_len > 0)) {
cio->status = PCI_GETCONF_ERROR;
for (cio->num_matches = 0, error = 0, i = 0,
(dinfo != NULL) && (cio->num_matches < ionum)
if (i < cio->offset)
if (cio->num_matches >= ionum)
(caddr_t)cio->matches +
confsz * cio->num_matches, confsz)))
cio->num_matches++;
cio->offset = i;
cio->generation = pci_generation;
cio->status = PCI_GETCONF_LAST_DEVICE;
cio->status = PCI_GETCONF_MORE_DEVS;
if (inb(cio) == 0x65) {
if (inb(cio) == 0x66) {
r = inb(cio) & SMC_CR1_ADDR;
inb(cio) & 0xff);
kprintf(" CR4=0x%x", inb(cio) & 0xff);
if ((inb(cio) & SMC_CR1_MODE) == 0) {
r = (inb(cio) & SMC_CR4_EMODE);
r = inb(cio);
outb(cio, r | SMC_CR1_MODE);
outb(cio, r & ~SMC_CR1_MODE);
r = inb(cio) & ~SMC_CR4_EMODE;
outb(cio, r | SMC_ECPEPP);
outb(cio, r | SMC_ECP);
outb(cio, r | SMC_EPPSPP);
outb(cio, 16);
r = inb(cio);
outb(cio, (r & ~SMC_CR4_EPPTYPE));
outb(cio, (r | SMC_CR4_EPPTYPE));