Certains peuvent expliquer d'où je permettrait de situer le début de cette IDE contrôleur de registre de carte d'adresse dans la mémoire?

StackOverflow https://stackoverflow.com/questions/775373

  •  13-09-2019
  •  | 
  •  

Question

J'ai été coulée à l'aide de documents dans le cadre de mon quartier long du projet pour développer un simple pilote de disque.Pour le moment, je suis en train de cartographier les différents atapi IDE et contrôleur des registres mis en œuvre à l'intérieur de l'Intel 82801EB IO controller.

Tout d'abord, le document que je fais référence:www.intel.com/assets/pdf/datasheet/252516.pdf

À la page 415, 154 tableau montre les décalages de divers registres de configuration.Cela peut sembler une question stupide, mais comment puis-je trouver l'endroit où ils sont compensés à partir de?Je m'attendais à trouver une sorte de base fixe adresse réservée à ces registres.À partir de là, je serais en mesure d'utiliser cette table de construire mon pilote.

Par exemple, sur la table 154 le registre de commandes PCI est situé à décalages 04-05h.Le registre est détaillée à la page 417, qui, je crois, je suis à la compréhension.Cependant, où est l'adresse de base que ce registre est situé à 4 octets à partir de?

Mise à jour:Maintenant, après la recherche de retour à l'fixe IO carte pour le D865PERL conseil que nous utilisons, il est dit que 0000-00ffh est réservée par le B865PERL, et de renvoyer à l'ICH5 fiche de données de dynamique de traitement de l'information.Qui, je crois, peut être utilisé pour le contrôleur IDE registre du tableau 154 je l'ai mentionné ci-dessus.À ce stade, j'ai envoyé un courriel à mon professeur, mais je suis encore à essayer de comprendre où ils sont situés.

Merci pour regarder!

Était-ce utile?

La solution 2

S'avère que je n'ai jamais eu à trouver une adresse réelle, mais le bus/périphérique/fonction numéro du contrôleur IDE.

  1. énumérer tous les possibles du bus PCI bus/périphérique/fonction des combinaisons à la recherche pour le vendeur et l'id de périphérique du contrôleur IDE
  2. une fois trouvé, il suffit d'écrire le CONFIG_ADDRESS port, et de lire les infos de retour de CONFIG_DATA

Fondamentalement, une fois que vous avez un bus, périphérique et de la fonction (avec un registre de décalage), vous pouvez écrire que des infos sur le PCI CONFIG_ADDRESS registre (cf8h) et de lire le contenu d'un registre de CONFIG_DATA (cfch).

Autres conseils

Votre 82801EB sera mis en correspondance avec un espace d'adresse de votre matériel. Ce sera spécifique à votre matériel, vous devez trouver l'adresse de départ de votre manuel du matériel.

Step-1: Get IEB_START_ADDRESS from you manual
For each of the registers in the IDE controller
Step-2: Add offset to IEB_START_ADDRESS (For example, if you want offset 04)
You will have to do dereference the address something like (*(IEB_START_ADDRESS + 4))

Maintenant, méfiez-vous de la taille du registre.

Si elle est 16 l'utilisation de bits « court non signé ».

Et si elle est "unsigned int" 32 bits utilisation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top