ST(4)              Manuel du programmeur Linux              ST(4)


NOM
       st - Lecteur de bandes SCSI.

SYNOPSIS
       #include <sys/mtio.h>

       int ioctl(int fd, int request [, (void *)arg3])
       int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd)
       int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status)
       int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos)

DESCRIPTION
       Le driver st fournit une interface vers un grand nombre de
       lecteurs de bandes SCSI.  Actuellement, ce driver prend le
       contrôle de tous les périphériques détectés de type "accès
       séquentiel".  Le driver st utilise un numéro majeur valant
       9.

       Chaque  périphérique  utilise  huit numéros mineurs. Les 5
       bits de poids faibles des numéros  mineurs  sont  assignés
       séquentiellement  dans  l'ordre  de détection. Les numéros
       mineurs peuvent être groupés en deux ensembles  de  quatre
       nombres : les numéros mineurs principaux des périphériques
       (auto-rewind),   n,   et   les    numéros   mineurs    des
       périphériques "no-rewind" (n+ 128).

       Les   périphériques   ouverts  avec  le  numéro  principal
       recevront  une  commande  REWIND  à  la  fermeture.    Les
       périphériques  ouverts  avec  le  numéro "no-rewind" ne la
       recevront pas.  (Notez qu'essayer de positionner la  bande
       un  périphérique auto-rewind en utilisant, par exemple, mt
       ne conduit pas au résultat désiré : la bande est à nouveau
       rembobinée  après  la  commande mt et la commande suivante
       prend effet dès le début de la bande.

       Au  sein  de  chaque  groupe,  4  numéros   mineurs   sont
       disponibles  pour  définir des périphériques avec des car­
       actéristiques différentes (taille  de  bloc,  compression,
       densité...)  Lorsque  le  système démarre, seul le premier
       périphérique est disponible. Les  3  autres  sont  activés
       lorsque  les  caractéristiques  par  défaut  sont définies
       (voir plus bas). (En modifiant les constantes à la  compi­
       lation,  on  peut  modifier la répartition entre le nombre
       maximal de lecteurs de bandes  et  le  nombre  de  numéros
       mineurs  pour  chaque  lecteur. Les allocations par défaut
       permettent de contrôler 32 lecteurs de bandes, alors qu'il
       est  possible  de  contrôler jusqu'à 64 lecteurs avec deux
       numéros mineurs pour les options différentes.

       Les fichiers spéciaux sont créés typiquement ainsi :
              mknod -m 660 /dev/st0   c 9 0
              mknod -m 660 /dev/st0l  c 9 32
              mknod -m 660 /dev/st0m  c 9 64
              mknod -m 660 /dev/st0a  c 9 96



Linux                      18 Mai 1999                          1





ST(4)              Manuel du programmeur Linux              ST(4)


              mknod -m 660 /dev/nst0  c 9 128
              mknod -m 660 /dev/nst0l c 9 160
              mknod -m 660 /dev/nst0m c 9 192
              mknod -m 660 /dev/nst0a c 9 224

       Il n'existe pas de périphériques blocs correspondants.

       Le driver utilise une mémoire tampon interne qui doit être
       assez  large  pour contenir au moins un bloc de données de
       bande. Dans les noyaux précédents le  2.1.121,  le  buffer
       était  alloué sous forme de bloc continu. Ceci limitait la
       taille de bloc au plus  grand  espace  contigu  disponible
       pour  l'allocation du noyau. Cette limite est actuellement
       de 128 Ko pour les architecture 32 bits et 254 Ko pour les
       64 bits. Dans les noyaux plus récents, le driver alloue la
       mémoire tampon en plusieurs  parties  si  nécessaire.  Par
       défaut  le nombre maximal de parties est 16. Ceci signifie
       que la taille maximale de bloc est très grande  (2  Mo  si
       l'allocation de 16 blocs de 128 Ko réussit).

       La  taille de la mémoire tampon interne est déterminée par
       une constante à la compilation du  noyau,  que  l'on  peut
       écraser  par  une option de démarrage du système. De plus,
       le driver essaie d'allouer un buffer temporaire plus grand
       lors  de  son exécution si cela s'avère nécessaire. Toute­
       fois l'allocation à l'exécution de grands  blocs  contigüs
       peut  échouer, et il vaut mieux ne pas compter dessus avec
       les noyaux antérieurs au 2.1.121.

       Le driver ne supporte pas spécifiquement un  type  ou  une
       marque de lecteur de bande. Après le démarrage du système,
       les options du périphériques sont définies par  le  micro-
       code  du  périphérique. Par exemple si celui-ci réclame un
       mode de blocs fixes, le  driver  de  bandes  utilisera  ce
       mode.  Les  options  peuvent être modifiées par des appels
       ioctl() explicites,  et  restent  effectives  lorqsque  le
       périphérique est fermé puis réouvert. La configuration des
       options affecte aussi bien les  périphériques  auto-rewind
       que les non-rewind.

       Des   options   différentes  peuvent  être  fournies  pour
       différents périphériques au sein du sous-groupe de quatre.
       Les  options  prennent  effet  quand  le  périphérique est
       ouvert. Par exemple un administrateur peut définir un dis­
       positif  qui  écrit  en mode blocs fixes avec une certaine
       taille, et un qui écrit avec des blocs de longueurs  vari­
       ables (si le périphérique accepte les deux modes).

       Le  driver supporte les partitions de bandes si elles sont
       acceptées par le lecteur. (Notez  que  les  partitions  de
       bande  n'ont  rien  à voir avec les partitions de disques.
       UNe bande partitionnée peut être vue comme un ensemble  de
       bandes  logiques  dans  le  même support).  Le support des
       partitions doit être activé par un ioctl. L'emplacement de



Linux                      18 Mai 1999                          2





ST(4)              Manuel du programmeur Linux              ST(4)


       la  bande  est  sauvegardé  au sein de chaque partition au
       cours des changements de partitions. La partition utilisée
       pour  les  opérations  suivantes  est sélectionnée avec un
       ioctl. Le changement de partition est exécuté au moment de
       la  prochaine  opérattion bande pour éviter les mouvements
       inutiles de la bande.  Le nombre maximal de partitions sur
       une  bande est défini par une constante à la comilation (4
       à l'origine). Le driver contient un ioctl qui peut format­
       ter une bande avec une ou deux partitions.

       Le fichier spécial de périphérique /dev/tape est générale­
       ment un lien symbolique, ou même un lien matériel  sur  le
       lecteur de bandes par défaut.

TRANSFERT DES DONNEES
       Le  driver  accepte  un  fonctionnement aussi bien dans un
       mode de blocs fixes que dans un mode de blocs de  longueur
       variable  (si  c'est  accepté  par le lecteur). En mode de
       blocs fixes, le périphérique écrit les blocs de la  taille
       indiquée  et la taille des blocs ne dépend pas de la quan­
       tité de données transmise lors de l'appel système. Dans le
       mode  de  longueur variable, un bloc de donnée est écrit à
       chaque appel système write et le nombre d'octets  transmis
       indique  la  taille  du  bloc  correspondant sur la bande.
       Notez que les blocs sur bande ne contiennent aucune infor­
       mation  sur  le  mode  d'écriture  utilisé. En lecture, la
       seule chose importante est  d'utiliser  une  commande  qui
       accepte la taille du bloc sur bande.

       En mode variable, le nombre d'octets à lire n'a pas besoin
       de correspondre exactement à la taille du bloc sur  bande.
       Si  le nombre demandé est plus grand que la taille du bloc
       suivant sur la bande, l'appel système renverra la quantité
       de  données  effectivement  lues. Si la taille de bloc est
       plus grande que le nombre demandé,  l'appel  système  ren­
       verra  la  quantité  voulue,  et  le reste des données est
       oublié.

       En mode fixe, le nombre d'octets demandé peut  être  arbi­
       traire si la mémoire tampon est activée, ou un multiple de
       la taille de bloc si ce tampon est désactivé.  Les  noyaux
       antérieurs au 2.1.121 permettent l'écriture avec un nombre
       quelconque si les tampons  sont  activés.  Dans  tous  les
       autres  cas  (y compris les noyaux plus récents) le nombre
       d'octets à écrire doit être un multiple de la  taille  des
       blocs.

       Une  marque  est  automatique  écrite  sur  la bande si la
       dernière opération avant fermeture était une écriture.

       Lorsqu'une telle marque est  rencontrée  en  lecture,  les
       choses  suivantes  se  produisent.  S'il reste des données
       dans le tampon, lorsqu'on trouve la marque, les données en
       mémoire  sont  renvoyées. La lecture suivante renvoit zéro



Linux                      18 Mai 1999                          3





ST(4)              Manuel du programmeur Linux              ST(4)


       octets. La lecture suivante renvoit les données du fichier
       suivant.  La fin des données enregistrées est signalée par
       un retour de zéro octets pour deux  appels  successifs  en
       lecture. Le troisième appel renvoit une erreur.

IOCTLS
       Le driver supporte trois requêtes ioctl.  Les requêtes non
       reconnues par st sont transmises au contrôleur SCSI.   Les
       définitions      ci-dessous      sont     extraites     de
       /usr/include/linux/mtio.h:

   MTIOCTOP - Effectue une opération sur la bande.
       Cette requête prend un argument du type  (struct  mtop  *)
       indiquant  l'opération  à effectuer.  Certains contrôleurs
       ne permettent pas toutes les  opérations.   Le  contrôleur
       renvoie une erreur EIO s'il n'accepte pas l'opération.

       /* Structure MTIOCTOP -  pour les opérations sur bande */
       struct mtop {
           short  mt_op;    /* opérations définies ci-dessous */
           int    mt_count; /* combien d'opérations           */
       };

       Opérations  sur  bande  magnétique  lors d'une utilisation
       normale:

       [NDT] Je conserve les termes de  filemark,  et  setmark  à
       défaut de termes précis en français.

       MTBSF         Reculer la bande de mt_count filemarks.
       MTBSFM        Reculer  la  bande  de  mt_count  filemarks.
                     Repositionner la bande sur le côté EOT de la
                     dernière filemark.
       MTBSR         Réculer la bande de mt_count enregistrements
                     (blocs bande).
       MTBSS         Reculer la bande de mt_count setmarks.
       MTCOMPRESSION Valider la compression des données sur bande
                     dans  le lecteur si mt_count est non-nul, et
                     désactiver la compression  si  mt_count  est
                     nul.  Cette  commande untile la page MODE 15
                     supporté par la plupart des DATs.
       MTEOM         Aller à la fin des enregistrements  (ajouter
                     des fichiers).
       MTERASE       Effacer la bande.
       MTFSF         Avancer la bande de mt_count filemarks.
       MTFSFM        Avancer  la  bande  de  mt_count  filemarks.
                     Positionner la  bande  du  côté  BOT  de  la
                     dernière filemark.
       MTFSR         Avancer  de  mt_count enregistrements (blocs
                     bande).
       MTFSS         Avancer de mt_count setmarks.
       MTLOAD        Exécuter la commande de chargement SCSI.  Un
                     cas  particulier  se présenter avec certains
                     chargeurs  automatiques  HP.   Si   mt_count



Linux                      18 Mai 1999                          4





ST(4)              Manuel du programmeur Linux              ST(4)


                     correspond   à   somme   de   la   constante
                     MT_ST_HPLOADER_OFFSET  et  d'un  nombre,  ce
                     dernier  est envoyé au pilote pour contrôler
                     le chargeur automatique.
       MTLOCK        Verrouiller la porte du lecteur de bande.
       MTMKPART      Formatter la bande en  une  ou  deux  parti­
                     tions.  Si  mt_count  est non-nul, il corre­
                     spond à la taille de la première  partition,
                     et  la seconde partition correspond au reste
                     de la bande. Si mt_count est nul,  la  bande
                     n'est  formattée  qu'en une seule partition.
                     Cette commande n'est  autorisée  que  si  le
                     support  de  partitionnement est activé pour
                     le lecteur (voir  MT_ST_CAN_PARTITIONS  plus
                     bas).
       MTNOP         Ne  rien faire - Vider les buffers du driver
                     - A utiliser avant de lire  le  statut  avec
                     MTIOCGET.
       MTOFFL        Rembobiner  la bande et éteindre le lecteur.
       MTRESET       Réinitialiser le lecteur.
       MTRETEN       Retendre la bande.
       MTREW         Rembobiner la bande.
       MTSEEK        Rechercher  sur  la  bande  le  bloc  numéro
                     mt_count.  Cette opération nécessite soit un
                     contrôleur SCSI-2 qui supporte  la  commande
                     LOCATE (adresse spécifique au périphérique),
                     soit un lecteur SCSI-1  compatible  Tandberg
                     (Tandberg,  Archive  Viper,  Wangtek, ... ).
                     Le numéro de bloc devrait toujours  être  un
                     numéro  renvoyé précédemment par MTIOCPOS si
                     les adresses  spécifiques  au  lecteur  sont
                     utilisées.
       MTSETBLK      Positionner  la longueur de blocs du lecteur
                     à la valeur spécifiée  dans  mt_count.   Une
                     longueur de bloc nulle place le lecteur dans
                     le mode de blocs de tailles variables.
       MTSETDENSITY  Fixe la densité de la bande  à  celle  codée
                     dans   mt_count.   Les  codes  des  densités
                     acceptées par un  lecteur  sont  disponibles
                     dans la documentation de celui-ci.
       MTSETPART     La  partition  active devient celle indiquée
                     par  mt_count   .    Les   partitions   sont
                     numérotées depuis zéro. Cette commande n'est
                     autorisée que si le  support  de  partition­
                     nement  est  activé  pour  le  lecteur (voir
                     MT_ST_CAN_PARTITIONS plus bas).
       MTUNLOAD      Exécuter la commande  de  déchargement  SCSI
                     (n'ejecte pas la bande).
       MTUNLOCK      Déverrouiller  la porte du lecteur de bande.
       MTWEOF        Ecrire mt_count filemarks.
       MTWSM         Ecrire mt_count setmarks.

       Fonctions de configuration du lecteur de bande  magnétique
       (pour le Super-Utilisateur) :



Linux                      18 Mai 1999                          5





ST(4)              Manuel du programmeur Linux              ST(4)


       MTSETDRVBUFFER
               Positionner  diverses  options du contrôleur ou du
               lecteur  en  fonction  des   bits   encodés   dans
               mt_count.   Ces  options  concernent  le  type  de
               buffer  du  lecteur,  13  options  booléennes   du
               contrôleur,  le  seuil  d'écriture  du buffer, les
               valeurs par défaut des tailles de blocs et de den­
               sité,  ainsi  que les délais (noyaux >= 2.1).  Une
               fonction n'agit que sur un seul des éléments de la
               liste ci-dessus à la fois.

               Une  valeur  ayant  ses  4 bits de poids forts à 0
               sera utilisée pour indiquer le type de  buffer  du
               lecteur. Les types de buffer sont :

                   0   Le  contrôleur  ne  renverra pas le statut
                       BON en écriture avant que les  données  ne
                       soient  réellement écrites sur le support.
                   1   Le contrôleur peut renvoyer le statut  BON
                       en  écriture  dès  que les données ont été
                       transmises aux buffers internes du lecteur
                       de bande.
                   2   Le  contrôleur peut renvoyer le statut BON
                       en écriture dès que les  données  ont  été
                       transmises aux buffers internes du lecteur
                       de  bande,   si   toutes   les   écritures
                       précédentes  des buffers sur le support se
                       sont déroulées correctement.

               Pour  contrôler  le  seuil  d'écriture,  on   doit
               inclure     dans     mt_count     la     constante
               MT_ST_WRITE_THRESHOLD associée avec le  nombre  de
               blocs  dans les 28 bits de poids faibles par un OU
               binaire ( | ).  Le nombre de  blocs  concerne  des
               blocs  de  1024  octets,  et  non  pas  la  taille
               physique des blocs sur la bande.  Le seuil ne peut
               pas excéder la taille des buffers internes du con­
               trolleur.  (voir DESCRIPTION, plus bas).

               Pour valider ou invalider les options  booléennes,
               la  valeur  mt_count  doit  inclure l'une des con­
               stantes     MT_ST_BOOLEANS      MT_ST_SETBOOLEANS,
               MT_ST_CLEARBOOLEANS,      ou     MT_ST_DEFBOOLEANS
               associées par un OU binaire avec  une  combinaison
               des options décrites ci-dessous.

               Avec MT_ST_BOOLEANS les options sont définies avec
               les valeurs indiquées. Avec MT_ST_SETBOOLEANS  les
               options  sont  activées  sélectivement et inhibées
               avec MT_ST_DEFBOOLEANS.

               Les options par défaut pour un contrôleur de bande
               sont    choisies    avec   MT_ST_DEFBOOLEANS.   Un
               périphérique non-actif (par exemple avec un numéro



Linux                      18 Mai 1999                          6





ST(4)              Manuel du programmeur Linux              ST(4)


               mineur  de  32  ou  160)  est  activé  lorsque les
               options par défaut sont définies pour la  première
               fois. Un périphérique actif hérite des options non
               fixées  explicitement  du  périphérique  actif  au
               démarrage.

               Les options booléennes sont :

               MT_ST_BUFFER_WRITES  (Défaut: vrai)
                      opérations  d'écriture dans la mémoire tam­
                      pon en  mode  de  blocs  fixes.   Si  cette
                      option  est invalidée, et si l'enregistreur
                      utilise une longueur de bloc  fixe,  toutes
                      les  opérations d'écriture doivent se faire
                      avec une  longueur  multiple  de  celle  du
                      bloc.   Cette  option doit être fausse pour
                      créer des archives multi-volume fiables.

               MT_ST_ASYNC_WRITES  (Defaut: vrai)
                      Quand  cette  option   est   validée,   les
                      opérations d'écriture retournent immédiate­
                      ment si les données tiennent dans le buffer
                      du  driver,  sans  attendre  que  celles-ci
                      soient effectivement transmises au  lecteur
                      de  bande.   Le  seuil du buffer d'écriture
                      détermine le taux de remplissage du  buffer
                      avant d'effectuer une commande SCSI.  Toute
                      erreur renvoyée par  le  périphérique  sera
                      conservée   jusqu'à  l'opération  suivante.
                      Cette option doit être  fausse  pour  créer
                      des archives multi-volume fiables.

               MT_ST_READ_AHEAD  (Defaut: vrai)
                      Cette  option  indique au driver de fournir
                      un cache en lecture, ainsi  qu'une  lecture
                      anticipée  des  données  en  mode  de blocs
                      fixes.  Si cette option est  invalidée,  et
                      que  le lecteur utilise une taille de blocs
                      fixe,  toutes  les  opérations  de  lecture
                      doivent  se  faire avec une taille multiple
                      de celle du bloc.

               MT_ST_TWO_FM  (Défaut: faux)
                      Cette option  modifie  le  comportement  du
                      driver  quand un fichier est fermé. L'atti­
                      tude normale consiste à  ecrire  une  seule
                      filemark,  néanmoins  si  cette  option est
                      validée, le driver écrira deux filemarks et
                      replacera  la tête au-dessus de la seconde.

                      Note:  Cette  option  ne  doit   pas   être
                      utilisée  avec  les  lecteurs de bandes QIC
                      car ils ne sont pas capables d'écraser  une
                      filemark.   Ces  lecteurs  détectent la fin



Linux                      18 Mai 1999                          7





ST(4)              Manuel du programmeur Linux              ST(4)


                      des données enregistrées en cherchant de la
                      bande  vierge à la place des deux filemarks
                      consécutives habituelles.  La  plupart  des
                      autres  lecteurs  courants détectent égale­
                      ment la présence  de  bande  vierge,  aussi
                      l'utilisation   des  deux  filemarks  n'est
                      généralement utile que  lors  d'échange  de
                      bandes avec d'autres systèmes.

               MT_ST_DEBUGGING  (Défaut: faux)
                      Cette  option valide les divers messages de
                      débugging du driver, si celui-ci a été com­
                      pilé  avec  la  constante  DEBUG  ayant une
                      valeur non-nulle).

               MT_ST_FAST_EOM  (Défaut: faux)
                      Cette option  indique  que  les  opérations
                      MTEOM  doivent être envoyées directement au
                      lecteur,  ce   qui   peut   accélérer   les
                      opérations,  mais  aussi  faire  perdre  au
                      driver le compte des pistes du  fichier  en
                      cours,  normalement  renvoyé par la requête
                      MTIOCGET.  Si MT_ST_FAST_EOM est fausse, le
                      contrôleur  répondra à une requête MTEOM en
                      sautant en avant de fichiers en fichiers.

               MT_ST_AUTO_LOCK (Défaut: faux)
                      Lorsque cette option est vraie, la porte du
                      lecteur  est verrouillée lorsque le fichier
                      périphérique est ouvert,  et  déverrouillée
                      lorsque le périphérique est refermé.

               MT_ST_DEF_WRITES (Défaut: faux)
                      Les options de bande (taille de bloc, mode,
                      compression...) peuvent varier lorsque l'on
                      passe  d'un périphérique lié à un lecteur à
                      un autre périphérique correspondant au même
                      lecteur.    Cette  option  définit  si  les
                      changements sont founis au pilote en  util­
                      isant   les   commandes  SCSI,  et  si  les
                      capacités d'auto-détection du lecteur  sont
                      fiables.  Si l'option est fausse, le pilote
                      envoie  les  commandes  SCSI  immédiatement
                      lorsque  le  périphérique  change. Si cette
                      option est vraie,  les  commandes  SCSI  ne
                      sont pas envoyées avant une demande d'écri­
                      ture.   Dans  ce  cas,  le  micro-code  est
                      habilité  à  détecter  la  structure  de la
                      bande lors de la lecture, et les  commandes
                      SCSI  ne  sont utilisées que pour être sûrs
                      que la bande soit écrite correctement.

               MT_ST_CAN_BSR (Défaut: faux)
                      Lorsque la lecture anticipée est  utilisée,



Linux                      18 Mai 1999                          8





ST(4)              Manuel du programmeur Linux              ST(4)


                      la  bande  doit  parfois  être  ramenée  en
                      arrière en position  correcte  lors  de  la
                      fermeture  du  périphérique,  et on utilise
                      alors  la  commande  SCSI  pour  sauter  en
                      arrière  par  dessus  les  enregistrements.
                      Certains anciens lecteurs ne  traitent  pas
                      correctement   cette   commande,  et  cette
                      option permet d'en avertir  le  pilote.  Le
                      résultat  final  est qu'une bande avec bloc
                      fixes et lecture anticipée  peut  être  mal
                      positionnée dans un fichier lors de la fer­
                      meture du périphérique.

               MT_ST_NO_BLKLIMS (Défaut: faux)
                      Certains lecteurs n'acceptent pas  la  com­
                      mande  de  lecture des limites de blocs. Si
                      l'on  utilise  cette  option,   le   pilote
                      n'invoque      pas      cette     commande.
                      L'inconvénient est que le  pilote  ne  peut
                      pas  vérifier,  avant d'envoyer des comman­
                      des, si  la  taille  de  bloc  choisie  est
                      acceptée par le lecteur.

               MT_ST_CAN_PARTITIONS (Défaut: faux)
                      Cette  option  active le support des parti­
                      tions  multiples  sur  une  bande.    Cette
                      option  s'applique à tous les périphériques
                      liés au lecteur.

               MT_ST_SCSI2LOGICAL (Défaut: faux)
                      Cette option indique au  pilote  d'utiliser
                      les  adresses  de  blocs  logiques définies
                      dans le standard SCSI-2, lors de opérations
                      de positionnement et de lecture de la posi­
                      iton (aussi bien lors des commandes  MTSEEK
                      et  MTIOCPOS  que  lors  des changements de
                      partitions).  Sinon il utilise les adresses
                      spécifiques  au  périphérique.  Il est très
                      recommandé d'activer  cette  option  si  le
                      lecteur  supporte les adresses logiques car
                      elles contiennent également les  filemarks.
                      Il  existe d'ailleurs quelques lecteurs qui
                      ne supportent que les adresses logiques.

               MT_ST_SYSV (Défaut: faux)
                      Lorsque  cette  option  est  validée,   les
                      périphériques  de bande utilisent la séman­
                      tique Système V.  Sinon  ils  utilisent  la
                      sémantique  BSD.  La  différence principale
                      est le comportement lors  de  la  fermeture
                      d'un  périphérique en lecture. Avec Système
                      V, la bande est positionnée en avant  à  la
                      suite  de  la filemark suivante si cela n'a
                      pas déjà eu lieu lors de la  lecture.  Dans



Linux                      18 Mai 1999                          9





ST(4)              Manuel du programmeur Linux              ST(4)


                      la  sémantique  BSD,  la position ne change
                      pas.
               EXEMPLE
                      struct mtop mt_cmd;
                      mt_cmd.mt_op = MTSETDRVBUFFER;
                      mt_cmd.mt_count = MT_ST_BOOLEANS |
                                 MT_ST_BUFFER_WRITES |
                                 MT_ST_ASYNC_WRITES;
                      ioctl(fd, MTIOCTOP, &mt_cmd);

               La taille de bloc par défaut pour un  périphérique
               peut  être configurée avec MT_ST_DEF_BLKSIZE et le
               code de densité par défaut avec  MT_ST_DEFDENSITY.
               Les  valeurs  des paramètres sont associées par un
               OU logique avec le code opératoire.

               Avec les noyaux 2.1.x et ultérieurs, la valeur  de
               délai  maximum peut être fournie avec la sous-com­
               mande MT_ST_SET_TIMEOUT associée par  OU  avec  le
               délai en seconde.  Le délai long (utilisé pour les
               rembobinages  ou  les  commandes   pouvant   durer
               longtemps)     peut     être     configuré    avec
               MT_ST_SET_LONG_TIMEOUT.  Les valeurs par défaut du
               noyau sont très longues pour être sûre qu'une com­
               mande  valide  ne  soit  jamais  interrompue  pour
               dépassement  de  délai,  et  ceci  quelque soit le
               lecteur. A cause de cela, le pilote  peut  parfois
               sembler   gelé  alors  qu'il  est  en  attente  de
               dépassement de  délai.  Ces  commandes  permettent
               donc  de  fixer des valeurs plus pratiques pour un
               lecteur  donné.   Les   délais   fixés   pour   un
               périphérique s'appliquent à tous les périphériques
               liés au même lecteur.

   MTIOCGET - Obtenir le statut
       Cette requête prend un argument du type (struct mtget  *).

       /* Structure pour MTIOCGET - Statut d'une bande magnétique */
       struct mtget {
           long   mt_type;
           long   mt_resid;
           /* Les registres suivants dépendent du matériel */
           long   mt_dsreg;
           long   mt_gstat;
           long   mt_erreg;
           /* Ces deux derniers champs sont parfois inutilisés */
           daddr_t          mt_fileno;
           daddr_t          mt_blkno;
       };

       mt_type    Le  fichier d'en-tête définit plusieurs valeurs
                  pour mt_type, mais  le  driver  actuel  renvoie
                  uniquement   les  types  génériques  MT_ISSCSI1
                  (lecteur  SCSI-1   générique)   et   MT_ISSCSI2



Linux                      18 Mai 1999                         10





ST(4)              Manuel du programmeur Linux              ST(4)


                  (lecteur SCSI-2 générique).
       mt_resid   contient le numéro de partition courrante.
       mt_dsreg   renvoie   la   configuration   actuelle  de  la
                  longueur de bloc (dans les  24  bits  de  poids
                  faibles)  et  la  densité  (dans  les 8 bits de
                  poids forts).   Ces  champs  sont  définis  par
                  MT_ST_BLKSIZE_SHIFT,        MT_ST_BLKSIZE_MASK,
                  MT_ST_DENSITY_SHIFT, et MT_ST_DENSITY_MASK.
       mt_gstat   renvoie des informations génériques  de  statut
                  (indépendants  du  périphérique).   Le  fichier
                  d'en-tête définit  les  macros  suivantes  pour
                  tester les bits de statut :
                  GMT_EOF(x)  :  La  bande  est positionnée juste
                      après une filemark (toujours faux après une
                      opération MTSEEK).
                  GMT_BOT(x)  : La bande est positionnée juste au
                      début du  premier  fichier  (toujours  faux
                      après une opération MTSEEK).
                  GMT_EOT(x)  :  Une  opération  a atteint la fin
                      physique de la bande (End Of Tape).
                  GMT_SM(x) : La bande est  positionnée  sur  une
                      setmark  (toujours faux après une opération
                      MTSEEK).
                  GMT_EOD(x) : La bande est positionnée à la  fin
                      des données enregistrées.
                  GMT_WR_PROT(x) : La bande est protegée en écri­
                      ture. Pour certains enregistreurs ceci sig­
                      nifie  qu'ils  ne supportent pas l'écriture
                      sur ce type de bande.
                  GMT_ONLINE(x) : La dernière opération open()  a
                      trouvé  le  lecteur  prêt  à agir, avec une
                      bande à l'interieur.
                  GMT_D_6250(x),  GMT_D_1600(x),  GMT_D_800(x)  :
                      Ces  informations  "génériques"  de  statut
                      renvoient la densité actuelle des  lecteurs
                      de bandes 9-pistes ½" seulement.
                  GMT_DR_OPEN(x):  Le  lecteur ne contient pas de
                      bande.
                  GMT_IM_REP_EN(x): Mode de rapport immédiat.  Ce
                      bit  est  activé  lorsqu'il  n'y  a  aucune
                      assurance  que  les   données   aient   été
                      physiquement  écrite  sur  la bande lors du
                      retour de l'appel système.  Le  bit  est  à
                      zéro  seulement lorsque le lecteur ne cache
                      pas les données et que le pilote  est  con­
                      figuré pour ne pas faire de cache non plus.
       mt_erreg   Le seul champ défini dans mt_erreg est le  nom­
                  bre  d'erreurs  corrigées,  dans les 16 bits de
                  poids faibles (comme  défini  par  les  masques
                  MT_ST_SOFTERR_SHIFT  et MT_ST_SOFTERR_MASK).  A
                  cause  d'incompatibilités  dans  les   méthodes
                  utilisées  par  les lecteurs pour rendre compte
                  des corrections d'erreur,  cette  valeur  n'est
                  pas  toujours  fournie (la plupart des lecteurs



Linux                      18 Mai 1999                         11





ST(4)              Manuel du programmeur Linux              ST(4)


                  ne renvoient pas, par défaut, les erreurs  cor­
                  rigées,  mais  cela  peut  être modifié avec la
                  commande SCSI MODE SELECT).
       mt_fileno  renvoie le numéro du  fichier  en  cours  (com­
                  mençant  à  0).  La  valeur est mise a -1 si le
                  numéro du  fichier  est  inconnu  (par  exemple
                  après un MTBSS ou un MTSEEK).
       mt_blkno   renvoie  le  numéro  de bloc (commençant à 0) à
                  l'intérieur du fichier en cours.  Cette  valeur
                  est  mise  à  -1  quand  le  numéro de bloc est
                  inconnu (par exemple après un MTBSF, un  MTBSS,
                  ou un MTSEEK).

   MTIOCPOS - Obtenir la position de la bande
       Cette  requête  prend un argument du type (struct mtpos *)
       et renvoie une valeur, spécifique au  lecteur,  correspon­
       dant  au numéro de bloc en cours, et qui n'est pas la même
       que mt_blkno renvoyée par MTIOCGET.  Ce lecteur doit  être
       un  SCSI-2  qui  supporte  la commande READ POSITION ou un
       lecteur  SCSI-1  compatible  Tandberg  (Tandberg,  Archive
       Viper, Wangtek, ... ).

       /* Structure pour commande MTIOCPOS - Obtenir la position */
       struct     mtpos {
           long   mt_blkno; /* current block number */
       };


VALEUR RENVOYÉE
       EIO           L'opération demandée a échoué.

       ENOSPC        Une  écriture a échoué car la fin de bande a
                     été atteinte.

       Eaccès        Tentative d'écriture ou d'effacement sur une
                     bande  protégée  en écriture.  (Ceci ne peut
                     pas être détecté lors de open().)

       EFAULT        Le paramètre de commande pointe en dehors de
                     la   mémoire  adressable  par  le  processus
                     appelant.

       ENXIO         Durant  l'ouverture,  le  lecteur  de  bande
                     n'existe pas.

       EBUSY         Le  périphérique  est  déjà  utilisé  ou  le
                     driver n'a pas assez de mémoire.

       EOVERFLOW     Tentative de lire ou  d'écrire  un  bloc  de
                     longueur  variable  plus grand que la taille
                     des buffers internes du contrôleur.

       EINVAL        Un  appel  système  ioctl()  a  un  argument
                     illégal, ou la taille de bloc demandée était



Linux                      18 Mai 1999                         12





ST(4)              Manuel du programmeur Linux              ST(4)


                     incorrecte.

       ENOSYS        Appel système ioctl() inconnu.

       EROFS         On tente l'ouverture avec O_WRONLY ou O_RDWR
                     alors que la bande est protégée en écriture.

FICHIERS
       /dev/st*  : Les lecteurs  de  bandes  SCSI  à  rembobinage
       automatique
       /dev/nst*  :  Les lecteurs de bandes SCSI sans rembobinage
       automatique

AUTEUR
       Le  pilote  a  été  écrit  par  Kai   Mäkisara   (Kai.Mak­
       isara@metla.fi)  à  partir  d'un  pilote  écrit par Dwayne
       Forsyth. Plusieurs autres personnes ont  également  colla­
       boré à l'écriture du pilote.

VOIR AUSSI
       mt(1)

       Le  fichier  README.st  dans les sources du noyau contient
       les informations les plus récentes à propos du  pilote  et
       de ses capacités de configuration.

NOTES
       1. Lors d'un échange de données entre systèmes différents,
       il faut se mettre d'accord sur la taille  des  blocs.  Les
       paramètres  d'un  lecteur  après le démarrage sont souvent
       différents de ceux  qu'utilisent  la  plupart  des  autres
       systèmes  d'exploitation.  La plupart utilisent un mode de
       blocs de longueur variable si le lecteur le  permet.  Ceci
       concerne  la  plupart des lecteurs modernes, y compris les
       DATs, les lecteurs 8mm hélicoïdaux, les  DLTs...  Il  peut
       être judicieux d'utiliser ces lecteurs en mode de longueur
       variable sous Linux aussi (en utilisant MTSETLK ou  MTSET­
       DEFBLK  au  démarrage),  du  moins  lors  de  l'échange de
       données  avec  des  systèmes  d'exploitation   différents.
       L'inconvénient  de ceci est qu'il faut utiliser une taille
       de bloc assez grande pour obtenir des  taux  de  transfert
       acceptable sur un bus SCSI.

       2.  Beaucoup de programmes (comme tar par exemple) permet­
       tent à l'utilisateur de spécifier le  facteur  de  blocage
       sur  la  ligne  de  commande.  Notez que ceci détermine la
       taille de bloc physique uniquement  en  mode  de  bloc  de
       taille variable.

       3.  Pour  utiliser  les lecteurs de bandes SCSI, le pilote
       SCSI de base, un pilote d'adaptateur SCSI et le pilote  du
       lecteur SCSI doivent tous être configurés dans le noyau ou
       chargés comme modules. Si le pilote des bandes SCSI  n'est
       pas  présent,  le  lecteur est reconnu, mais le support de



Linux                      18 Mai 1999                         13





ST(4)              Manuel du programmeur Linux              ST(4)


       bande décrit dans cette page n'est pas disponible.

       4. Le pilote écrit les messages d'erreur  sur  la  console
       et/ou  les  fichiers  de  journalisation  (log). Les codes
       SENSE présents dans certains messages sont automatiquement
       traduits  en  texte  si  les  messages  SCSI complets sont
       activés dans la configuration du noyau.


COPYRIGHT
       1995 Robert K. Nichols.  1999 Kai Mäkisara.


TRADUCTION
       Christophe Blaess, 1997.










































Linux                      18 Mai 1999                         14