Service de noyau rmmap_create

Objectif

Définit une adresse d'adresse effective [ EA ] dans la région de traduction [ RA ].

Syntaxe

#include <sys/ioacc.h>
#include <sys/adspace.h>
int rmmap_create ( eaddrp,  iomp,  flags)
void **eaddrp;
struct io_map *iomp;
int flags;

Paramètres

Article Descriptif
Eaddr Adresse de traitement obligatoire de la région de mappage.
Iomp La mémoire de bus à laquelle l'adresse effective décrite par le paramètre Eaddr doit correspondre. Pour la mémoire réelle, l'ID de bus doit être défini sur RÉSE_REALMEM_ et l'adresse de bus doit être définie sur l'adresse de mémoire réelle. La zone de taille doit être au moins PAGESIZE, pas plus grande que TAILLE DE SEGMENT, et un multiple de PAGESIZE. La clé doit être définie sur MAPPE_MEM_IO_IO_DE_. La zone des indicateurs n'est pas utilisée.
Flags Les indicateurs sélectionnont les attributs de page et de segment de la traduction. Les indicateurs d'attribut de page ne sont pas tous compatibles. Les combinaisons valides des indicateurs d'attribut de page sont les suivantes.
PAGE_RMMAP_W
Attribut de la page PowerPC "Write Through". Le mode écriture n'est pas pris en charge et si cet indicateur est défini, EINVAL est signalé.
RMMAP_PAGE_I
PowerPC Attribut de page "Cache interdit". Cette option est valide pour les mappages d'E-S, mais elle n'est pas autorisée pour les mappages de mémoire réelle.
PAGE_RMMAP_M
PowerPC Attribut de page "Memory Coherency Required". Cette option est facultative pour les mappages d'E-S ; cependant, elle est requise pour les mappages de mémoire. Le mode d'exploitation par défaut des pages de mémoire réelle a cet ensemble de bits.
PAGE_RMMAP_G
PowerPC Attribut de page "Guarded". Cet indicateur est facultatif pour les mappages d'E-S et doit être 0 pour les mappages de mémoire réelle. Bien que facultatif pour les E-S, il est recommandé de définir cette option pour les mappages d'E-S. Lorsqu'il est défini, le processeur ne fait pas de références inutiles (spéculatives) à la page. Il comprend des opérations de lecture ou d'écriture de commande et des extractions de branche. Lorsqu'elles sont dédéfinies, les règles d'exécution spéculative PowerPC normales s'appliquent.
RMMAP_RDONLY
Lorsqu'ils sont définis, les bits de protection de page utilisés dans HTAB ne permettent pas les opérations d'écriture, quel que soit le paramètre du bit de clé dans le registre de segments associé. Exactement l'un des fichiers RMMAP_RDONLY et RMMAP_RDWR doit être spécifié.
RMMAP_RDWR
Lorsqu'il est défini, les bits de protection de page utilisés dans HTAB permettent des opérations de lecture et d'écriture, quel que soit le paramètre du bit de clé dans le registre de segments associé. Exactement l'un des éléments suivants: RMMAP_RDONLY, et RMMAP_RDWR doit être spécifié.
RMMAP_PRELOAD
Lorsqu'ils sont définis, les attributs de protection de cette région sont entrés immédiatement dans la table de la page matérielle. Il est très lent au départ, mais empêche chaque page référencée dans la région de se reprocher séparément. Ce n'est qu'un avis. Cet indicateur n'est pas conservé en tant qu'attribut de la région de mappe, il est utilisé uniquement lors de l'appel en cours.
RMMAP_HÉRITAGE
Lorsqu'il est défini, cet attribut de protection indique que la région de conversion créée par cet appel Rmmap_create doit être héritée sur une opération Fourche , au processus enfant. Cet héritage est obtenu avec la sémantique de la copie. L'enfant a son propre mappage privé vers la même plage d'adresses d'E-S ou de mémoire réelle que le parent.

Descriptif

Les régions de conversion créées avec le service de noyau Rmmap_create sont gérées dans des segments de mappage d'entrée-sortie. Un seul segment de ce type peut traduire jusqu'à 256 mégaoctets de mémoire réelle ou d'E-S mappées de mémoire dans une seule région. La seule granularité pour laquelle le service Rmmap_remove peut être démarré est un mappage unique créé par un appel unique vers Rmmap_create.

Il existe des contraintes sur la taille du mappage et le paramètre Indicateurs , décrit ultérieurement, ce qui entraîne l'échec de l'appel, qu'il existe ou non un espace adresse adéquat.

Si le service de noyau Rmmap_create est appelé avec l'adresse effective de zéro, la fonction tente de trouver de l'espace disponible dans l'espace adresse du processus. En cas de réussite, un segment de mappage d'E-S est créé et l'adresse effective (qui est transmise par référence) est remplacée par l'adresse effective qui est mappée à la première page de la mémoire Iomp .

Si le service de noyau Rmmap_create est appelé avec une adresse effective non nulle, il est considéré comme l'adresse effective requise qui doit se traduire par la mémoire Iomp transmise. Cette fonction vérifie que la plage demandée est libre. Si ce n'est pas le cas, il échoue et renvoie EINVAL. Si le mappage à l'adresse effective n'est pas contenu dans un seul segment, la fonction échoue et renvoie ENOSPC. Sinon, la région est allouée et l'adresse effective n'est pas modifiée. L'adresse effective est mappée à la première page de la mémoire Iomp . Les références en dehors des régions mappées mais dans le même segment ne sont pas valides.

L'adresse effective (si elle est fournie) et l'adresse de bus doivent être un multiple de PAGESIZE ou EINVAL est renvoyée.

Les segments de mappage d'E-S ne sont pas hérités par les processus enfant après une sous-routine Fourche .

Les segments de mappage d'E-S ne sont pas hérités par les processus enfant après une sous-routine Fourche , sauf lorsque RMMAP_HÉRITAGE est spécifié. Ces segments sont supprimés par Exec, Sortieou Rmmap_remove de la dernière plage d'un segment.

Seules certaines combinaisons de drapeaux sont autorisées, en fonction du type de mémoire mappée. Pour les mappages de mémoire réelle, PAGE_RMMAP_M est requis alors que PAGE_RMMAP_W, RMMAP_PAGE_Iet PAGE_RMMAP_G ne sont pas autorisés. Pour les mappages d'E-S, il est valide de spécifier uniquement PAGE_RMMAP_M, sans autre indicateur d'attribut de page. Il est également valide de spécifier RMMAP_PAGE_I et, le cas échéant, PAGE_RMMAP_Met PAGE_RMMAP_G. PAGE_RMMAP_W n'est jamais autorisé.

La plage d'adresses réelle décrite par le paramètre Iomp doit être unique dans ce segment de mappage d'E-S.

Environnement d'exécution

Le service de noyau Rmmap_create peut être appelé uniquement à partir de l'environnement de processus.

Valeurs renvoyées

Une fois l'opération terminée, le service de noyau Rmmap_create renvoie zéro et modifie l'adresse effective sur la valeur à laquelle la région de mappage nouvellement créée a été connectée à l'espace adresse du processus. Sinon, elle renvoie l'une des erreurs suivantes:

Article Descriptif
EINVAL Un type d'erreur de paramètre s'est produit. Ces paramètres incluent, mais ne sont pas limités à, des erreurs de taille et des sélections d'options mutuellement exclusives.
ENOMEM Le système d'exploitation ne peut pas allouer les structures de données nécessaires pour représenter le mappage.
ENOSPC Espace adresse effectif épuisé dans la région indiquée par Eaddr.
EPERM Cette plateforme matérielle ne met pas en oeuvre ce service.

Caractéristiques de mise en oeuvre

Ce service fonctionne uniquement sur les microprocesseurs PowerPC .