[Previous] [Top] [Next]

Die Struktur "Scsi_Host"

zum Beispiel für "Future Domain TMC-16x0"

Die Struktur "Scsi_Host" ist im Headerfile "scsi.h" zu finden und hat im einzelnen folgende Bedeutung:


typedef struct

{

char *name;

// Kurzbeschreibung des SCSI-Hostadapters

int (* detect)(int);

// Gibt die "host number" zurück, ein Verweis in die Variable
// 'scsi_hosts' welche ein Array des Typs 'struct Scsi_Host' ist.
// Fordert benötigte Interrupts oder DMA-Kanäle an.

const char *(* info)(void);

// Gibt Pointer auf "Kurzbeschreibung des SCSI-Hostadapters" zurück.
//(siehe oben!) Sie wird beim Booten ausgegeben.

int (*queuecommand)(Scsi_Cmnd *,void (*done)(Scsi_Cmnd *));

// Führt ein SCSI-Kommando aus . Gibt bei Erfolg 0 zurück.
// Wird nur benutzt wenn 'can_queue' (siehe unten) nicht 0 ist. Sonst wird vom
// "high-level-Code" immer 'command()' (siehe darunter) verwendet. Danach
// wird 'done(Scsi_Cmnd)' aufgerufen.

int (* command)(Scsi_Cmnd *);

// Führt Kommando aus und kehrt zurück , wird neuerdings durch
// 'queuecommand()' ersetzt (dann verweist diese Funktion nur auf die obige!).

int (* abort)(Scsi_Cmnd *, int);

// Wird vom "high-level-Code" bei Time-outs aufgerufen. Bricht Aktionen
// definiert ab.

int (* reset)(void);

// Veranlasst einen Reset des Buses.

int (* slave_attach)(int, int);

// Wird bis jetzt vom "high-level-Code" nicht unterstützt. Sollte also NULL sein.

int (* bios_param)(int, int, int[]);

// "partition-table" die vorgegaukelt wird, setzen.
//Das BIOS eines IBM-kompatiblen PC´s verwaltet Spuren und Sektoren. Da der
//SCSI-Bus das selbständig übernimmt, das BIOS aber unbedingt seine Spuren
//und Sektoren verwalten will müssen dem BIOS vom "high-level-Code" Spuren
//und Sektoren in Form einer sog. "partition-table" vorgegaukelt werden.

int can_queue;

// Zahl von Kommandos die der Hostadapter auf einmal bearbeiten kann.

int this_id;

// SCSI-ID des Host-Adapters (normal 6 oder 7); falls keine ID, dann this_id=-1
// wird bei RESELECTION benötigt, bei -1 kein RESELECTION möglich!

short unsigned int sg_tablesize;

// maximale Anzahl von Requests in der "scatter-gather"-list
// unbegrenzt=SG_ALL; keine=SG_NONE
// "high-level-Code" unterstützt "scatter-gather", d.h. Zusammenfassung von
// mehreren kleinen SCSI-Requests zu einem großen.
// Meistens kann nur ein SCSI-Request pro Umdrehung (bei Platten) stattfinden!

short cmd_per_lun;

// Anzahl der "linked commands" die zulässig sind.
// "linked commands" gehen nur an
eine SCSI-ID (im Gegensatz zu
// "scatter-gather") und brauchen nur
einmal die Phasen ARBITRATION,
// SELECTION und MESSAGE OUT zu durchlaufen und keine
// RESELECTION.

unsigned present:1;

// Wird vom high-level-code gesetzt wenn der Host-Adapter erkannt wurde.

unsigned unchecked_isa_dma:1;

// Bei ISA-Computern 1 setzen, sonst 0.
// Bei ISA-Bus muß der DMA-Zugriff unter 16MB bleiben! Wenn
//
unchecked_isa_dma=1 sorgt der "high-level-Code" dafür.

} Scsi_Host;


Beispiel für Future Domain TMC-16x0

Das DEFINE für "FDOMAIN_16X0" ist im Headerfile "fdomain.h" zu finden und bezieht sich auf die Struktur Scsi_Host. Durch anklicken gelangt man zur entsprechenden Erklärung der Funktion in der Struktur Scsi_Host!


#define FDOMAIN_16X0 {

"Future Domain TMC-16x0", \

fdomain_16x0_detect, \

fdomain_16x0_info, \

fdomain_16x0_command, \

fdomain_16x0_queue, \

fdomain_16x0_abort, \

fdomain_16x0_reset, \

NULL, \

fdomain_16x0_biosparam, \

1 , 6 , 64 /* SG_NONE */, 1 , 0 , 0 }

#endif