// SPDX-License-Identifier: GPL-2.0
#include <linux/ioport.h>
#include <asm /io.h>
#include "pc873xx.h"
static unsigned pc873xx_probelist[] = {0 x398, 0 x26e, 0 };
static char *pc873xx_names[] = {
"PC87303" , "PC87306" , "PC87312" , "PC87332" , "PC87334"
};
static unsigned int base, model;
unsigned int __init pc873xx_get_base(void )
{
return base;
}
char *__init pc873xx_get_model(void )
{
return pc873xx_names[model];
}
static unsigned char __init pc873xx_read(unsigned int base, int reg)
{
outb(reg, base);
return inb(base + 1 );
}
static void __init pc873xx_write(unsigned int base, int reg, unsigned char data)
{
unsigned long flags;
local_irq_save(flags);
outb(reg, base);
outb(data, base + 1 );
outb(data, base + 1 ); /* Must be written twice */
local_irq_restore(flags);
}
int __init pc873xx_probe(void )
{
int val, index = 0 ;
while ((base = pc873xx_probelist[index++])) {
if (request_region(base, 2 , "Super IO PC873xx" ) == NULL)
continue ;
val = pc873xx_read(base, REG_SID);
if ((val & 0 xf0) == 0 x10) {
model = PC87332;
break ;
} else if ((val & 0 xf8) == 0 x70) {
model = PC87306;
break ;
} else if ((val & 0 xf8) == 0 x50) {
model = PC87334;
break ;
} else if ((val & 0 xf8) == 0 x40) {
model = PC87303;
break ;
}
release_region(base, 2 );
}
return (base == 0 ) ? -1 : 1 ;
}
void __init pc873xx_enable_epp19(void )
{
unsigned char data;
printk(KERN_INFO "PC873xx enabling EPP v1.9\n" );
data = pc873xx_read(base, REG_PCR);
pc873xx_write(base, REG_PCR, (data & 0 xFC) | 0 x02);
}
void __init pc873xx_enable_ide(void )
{
unsigned char data;
printk(KERN_INFO "PC873xx enabling IDE interrupt\n" );
data = pc873xx_read(base, REG_FER);
pc873xx_write(base, REG_FER, data | 0 x40);
}
Messung V0.5 in Prozent C=94 H=94 G=93
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland