[SOS] frequence timer - QEMU
anthoine.bourgeois
anthoine.bourgeois at orange.fr
Jeu 6 Nov 18:35:44 CET 2008
Bonjour Adrien,
Je n'ai aucune idée de ce que ça peut être mais je veux
bien y jeter un coup d'oeil.
Peux-tu nous donner le parametre freq et la methode que tu
utilises pour tester la frequence après le changement ?
Cordialement,
Anthoine
> Message du 05/11/08 19:41
> De : "free mail" <lebre.adrien at free.fr>
> A : sos at the-doors.enix.org
> Copie à :
> Objet : [SOS] frequence timer - QEMU
>
>
> Salut,
>
> J'ai posté sur les mailings list de Qemu (users et dev)
>
> Je ne suis pas parvenu à modifier la fréquence du timer PIC8254 en
> m'appuyant sur le bout de code que a été presenté dans SOS.
> Je pense que le souci vient de Qemu. Je voulais savoir si quelqu'un a
> deja rencontré ce type de probleme ?
>
> Merci par avance
> Adrien,
>
> Pour infos, j'ai poste sur les mailings lists users et dev de qemu. Je
> n'ai pas vraiment obtenu d'infos pour le moment :
> http://lists.gnu.org/archive/html/qemu-devel/2008-10/msg00384.html
>
> In the context of study, we have to develop a simple operating system
> from
> scratch. To develop our ''kernel'' we are using QEMU.
> For few days, we have fighted with the I8254 chip in order to create a
> timer for
> our system.
> Based on the code provided in the Simple OS
> (http://sos.enix.org/lxr/source/hwcore/i8254.c), we are trying to
> change the
> frequency.
> Unfortunately, whatever the value of nb_tick, the frequency does not
> change.
> Here, I just copied the related code. We tried by setting the nb_tick
> with
> 11931, 1193 and 119 directly in the following functions.
> Unfortunately, the time
> frequency (according to the IRQ timer handler) is still the same .
>
> Does anyone have an idea ?
>
> Thanks in advance,
> Adrien.
>
> /** 82c54 clock frequency */
> #define I8254_MAX_FREQ 1193180
>
> /* Ports to communicate with the 82c54 */
> #define I8254_TIMER0 0x40
> #define I8254_TIMER1 0x41
> #define I8254_TIMER2 0x42
> #define I8254_CONTROL 0x43
>
> ...
>
> int i8254_set_frequency(unsigned int freq){
> unsigned int nb_tick;
>
> if (freq <= 0)
> return -255;
>
> /* Compute counter value */
> nb_tick = I8254_MAX_FREQ / freq;
>
> /* Counter must be between 1 and 65536 */
> if (nb_tick > 65536)
> return -255;
> if (nb_tick <= 0)
> return -255;
>
> /* The i8254 interprets 0 to mean counter == 65536, because 65536
> cannot be coded on 16bits */
> if (nb_tick == 65536)
> nb_tick = 0;
>
> /* We want to configure timer0, we want to send both LSB+MSB to set
> timer0 freq (-> 0x30), and we configure timer0 in mode 2, ie as a
> rate generator (-> 0x4) ==> 0x34 */
> outb(0x34, I8254_CONTROL);
>
> /* Send LSB of counter first */
> outb((nb_tick & 0xFF), I8254_TIMER0);
>
> /* Send MSB of counter */
> outb((nb_tick >> 8) & 0xFF, I8254_TIMER0);
>
> return 1;
> }
>
>
> Re: i8254 - Cannot change Timer frequency
> by alebre on Wed Sep 17, 2008 4:37 pm
>
> What is the behavior of QEMU with regard to such instructions ?
> Does QEMU emulate the I8254 chip or does it simply forward the
> instruction to
> the host OS ? In that case, the host OS could simply does not consider
> such an
> instruction ?
>
> Adrien, still looking for some explanations....
>
>
>
>
> _______________________________________________
> Sos mailing list
> Sos at the-doors.enix.org
> http://the-doors.enix.org/cgi-bin/mailman/listinfo/sos
>
>
Plus d'informations sur la liste de diffusion Sos