[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Lost] Floppy-Treiber - I/O-Ports registrieren



Hi,

FreakyPenguin wollte ja umbedingt, dass ich es auf die Mailingliste mache:

/**
 * Kontroller(-Struktur) initialisieren
 */
int floppy_init_controller(struct floppy_controller* controller)
{
    int i;
    int j;
    // FIXME siehe unten
    struct floppy_device device;

    // Standardports eintragen
    controller->ports[FLOPPY_REG_DOR] = 0x3F2;
    controller->ports[FLOPPY_REG_MSR] = 0x3F4;
    controller->ports[FLOPPY_REG_DSR] = 0x3F4;
    controller->ports[FLOPPY_REG_DATA] = 0x3F5;

    // Ports reservieren
    for (i = 0; i < __FLOPPY_REG_MAX; i++) {
        if (controller->ports[i] != 0) {
            if (i==0 || controller->ports[i]>controller->ports[i-1]) {
                if (cdi_ioports_alloc(controller->ports[i], 1) != 0) {
                    // Port wurde nicht erfolgreich alloziert. Alle bisher
                    // alloziertern Ports muessen freigegeben werden
                    for (j = 0; j < i; j++) {
                        cdi_ioports_free(controller->ports[j], 1);
                    }

                    // Danach wird abgebrochen
                    return -1;
                }
            }
        }
    }


    // Kontroller resetten
    // FIXME: Hier muss ein device gebastelt werden, weil
floppy_read_byte und
    // floppy_write_byte ein device als Parameter brauchen. Wahnsinnig
schoen
    // sieht das ja nicht aus...
    device.controller = controller;
    floppy_reset_controller(&device);
    return 0;
}