/[hurd]/hurd-l4/libl4/tests/t-l4-kip.c
ViewVC logotype

Diff of /hurd-l4/libl4/tests/t-l4-kip.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by marcus, Fri Feb 18 03:58:08 2005 UTC revision 1.5 by marcus, Mon Feb 21 03:10:49 2005 UTC
# Line 19  Line 19 
19     Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA     Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20     02111-1307, USA.  */     02111-1307, USA.  */
21    
22    #ifdef HAVE_CONFIG_H
23    #include <config.h>
24    #endif
25    
26  #include <string.h>  #include <string.h>
27  #include <stddef.h>  #include <stddef.h>
28    #include <stdint.h>
29    
30  /* This must be included before any libl4 header.  */  /* This must be included before any libl4 header.  */
31  #include "environment.h"  #include "environment.h"
# Line 611  test_processor_info (_L4_kip_t kip) Line 616  test_processor_info (_L4_kip_t kip)
616              (1 << kip->processor_info.log2_size), proc_desc_size_ok);              (1 << kip->processor_info.log2_size), proc_desc_size_ok);
617  #endif  #endif
618    
619    for (num = 0; num < _L4_num_processors (kip); num++)    for (num = 0; num < processors_ok; num++)
620      {      {
621        _L4_proc_desc_t proc_desc;        _L4_proc_desc_t proc_desc;
622    
# Line 695  test_processor_info (_L4_kip_t kip) Line 700  test_processor_info (_L4_kip_t kip)
700  }  }
701    
702    
703    /* Test the memory info field.  */
704    void
705    test_memory_info (_L4_kip_t kip)
706    {
707      word_t num_mem_desc_ok = 7;
708      struct
709      {
710        uintptr_t low;
711        uintptr_t high;
712        int virtual;
713        int type;
714      } mem_desc_ok[] =
715        {
716          { 0x00000000, 0xffffffff, 0, 4 },
717          { 0x00000000, 0x0009fbff, 0, 1 },
718          { 0x00100000, 0x07ffffff, 0, 1 },
719          { 0x000a0000, 0x000effff, 0, 4 },
720          { 0x07000000, 0x080003ff, 0, 2 },
721          { 0x00000000, 0xbfffffff, 1, 1 },
722          { 0x00100000, 0x0014efff, 0, 2 },
723        };
724      word_t num;
725    
726    #ifdef _L4_INTERFACE_INTERN
727      check_nr ("[intern]", "_L4_num_memory_desc",
728                _L4_num_memory_desc (kip), num_mem_desc_ok);
729      check_nr ("[intern]", "_L4_MEMDESC_UNDEFINED",
730                _L4_MEMDESC_UNDEFINED, 0x0);
731      check_nr ("[intern]", "_L4_MEMDESC_CONVENTIONAL",
732                _L4_MEMDESC_CONVENTIONAL, 0x1);
733      check_nr ("[intern]", "_L4_MEMDESC_RESERVED",
734                _L4_MEMDESC_RESERVED, 0x2);
735      check_nr ("[intern]", "_L4_MEMDESC_DEDICATED",
736                _L4_MEMDESC_DEDICATED, 0x3);
737      check_nr ("[intern]", "_L4_MEMDESC_SHARED",
738                _L4_MEMDESC_SHARED, 0x4);
739      check_nr ("[intern]", "_L4_MEMDESC_BOOTLOADER",
740                _L4_MEMDESC_BOOTLOADER, 0xe);
741      check_nr ("[intern]", "_L4_MEMDESC_ARCH",
742                _L4_MEMDESC_ARCH, 0xf);
743    #endif
744    
745    #ifdef _L4_INTERFACE_GNU
746      check_nr ("[GNU]", "l4_num_memory_desc_from",
747                l4_num_memory_desc_from (kip), num_mem_desc_ok);
748      check_nr ("[GNU]", "l4_num_memory_desc",
749                l4_num_memory_desc (), num_mem_desc_ok);
750    
751      check_nr ("[GNU]", "L4_MEMDESC_UNDEFINED",
752                L4_MEMDESC_UNDEFINED, _L4_MEMDESC_UNDEFINED);
753      check_nr ("[GNU]", "L4_MEMDESC_CONVENTIONAL",
754                L4_MEMDESC_CONVENTIONAL, _L4_MEMDESC_CONVENTIONAL);
755      check_nr ("[GNU]", "L4_MEMDESC_RESERVED",
756                L4_MEMDESC_RESERVED, _L4_MEMDESC_RESERVED);
757      check_nr ("[GNU]", "L4_MEMDESC_DEDICATED",
758                L4_MEMDESC_DEDICATED, _L4_MEMDESC_DEDICATED);
759      check_nr ("[GNU]", "L4_MEMDESC_SHARED",
760                L4_MEMDESC_SHARED, _L4_MEMDESC_SHARED);
761      check_nr ("[GNU]", "L4_MEMDESC_BOOTLOADER",
762                L4_MEMDESC_BOOTLOADER, _L4_MEMDESC_BOOTLOADER);
763      check_nr ("[GNU]", "L4_MEMDESC_ARCH",
764                L4_MEMDESC_ARCH, _L4_MEMDESC_ARCH);
765    #endif
766    
767    #ifdef _L4_INTERFACE_L4
768      {
769        volatile L4_MemoryDesc_t mem_desc;
770        volatile L4_Word_t raw;
771    
772        raw = mem_desc.raw[0];
773        raw = mem_desc.raw[1];
774      }
775    
776      check_nr ("[L4]", "L4_NumMemoryDescriptors",
777                L4_NumMemoryDescriptors (kip), num_mem_desc_ok);
778    #endif
779    
780      for (num = 0; num < num_mem_desc_ok; num++)
781        {
782          _L4_memory_desc_t mem_desc;
783    
784          /* FIXME: Support [!_L4_INTERFACE_INTERN] (by code duplication?).  */
785          mem_desc = _L4_memory_desc (kip, num);
786          check ("[intern]", "_L4_memory_desc (once per mem desc)",
787                 (mem_desc != NULL),
788                 "_L4_memory_desc (kip, %i) == NULL != not null", num);
789    
790          check ("[intern]", "_L4_memory_desc_low",
791                 (_L4_memory_desc_low (mem_desc) == mem_desc_ok[num].low),
792                 "_L4_memory_desc_low (%i) == 0x%x != 0x%x",
793                 num, _L4_memory_desc_low (mem_desc), mem_desc_ok[num].low);
794          check ("[intern]", "_L4_memory_desc_high",
795                 (_L4_memory_desc_high (mem_desc) == mem_desc_ok[num].high),
796                 "_L4_memory_desc_high (%i) == 0x%x != 0x%x",
797                 num, _L4_memory_desc_high (mem_desc), mem_desc_ok[num].high);
798          check ("[intern]", "_L4_memory_desc_virtual",
799                 (_L4_is_memory_desc_virtual (mem_desc)
800                  == mem_desc_ok[num].virtual),
801                 "_L4_is_memory_desc_virtual (%i) == %i != %i",
802                 num, _L4_is_memory_desc_virtual (mem_desc),
803                 mem_desc_ok[num].virtual);
804          check ("[intern]", "_L4_memory_desc_type",
805                 (_L4_memory_desc_type (mem_desc) == mem_desc_ok[num].type),
806                 "_L4_memory_desc_type (%i) == %i != %i",
807                 num, _L4_memory_desc_type (mem_desc), mem_desc_ok[num].type);
808    
809    #ifdef _L4_INTERFACE_GNU
810          {
811            l4_memory_desc_t *mem_desc_gnu = l4_memory_desc_from (kip, num);
812            
813            check ("[GNU]", "l4_memory_desc_from",
814                   (mem_desc_gnu == mem_desc),
815                   "l4_memory_desc_from (kip, %i) == %p != %p",
816                   num, mem_desc_gnu, mem_desc);
817            check ("[GNU]", "l4_memory_desc",
818                   (l4_memory_desc (num) == mem_desc),
819                   "l4_memory_desc (%i) == %p != %p",
820                   num, l4_memory_desc (num), mem_desc);
821            
822            check ("[GNU]", "l4_memory_desc_low",
823                   (l4_memory_desc_low (mem_desc_gnu)
824                    == mem_desc_ok[num].low),
825                   "l4_memory_desc_low (%i) == 0x%x != 0x%x",
826                   num, l4_memory_desc_low (mem_desc_gnu),
827                   mem_desc_ok[num].low);
828            check ("[GNU]", "l4_memory_desc_high",
829                   (l4_memory_desc_high (mem_desc_gnu)
830                    == mem_desc_ok[num].high),
831                   "l4_memory_desc_high (%i) == 0x%x != 0x%x",
832                   num, l4_memory_desc_high (mem_desc_gnu),
833                   mem_desc_ok[num].high);
834            check ("[GNU]", "l4_memory_desc_virtual",
835                   (l4_is_memory_desc_virtual (mem_desc_gnu)
836                    == mem_desc_ok[num].virtual),
837                   "l4_memory_desc_virtual (%i) == %i != %i",
838                   num, l4_is_memory_desc_virtual (mem_desc_gnu),
839                   mem_desc_ok[num].virtual);
840            check ("[GNU]", "l4_memory_desc_type",
841                   (l4_memory_desc_type (mem_desc_gnu)
842                    == mem_desc_ok[num].type),
843                   "l4_memory_desc_type (%i) == %i != %i",
844                   num, l4_memory_desc_type (mem_desc_gnu),
845                   mem_desc_ok[num].type);
846          }
847    #endif
848    
849    
850    #ifdef _L4_INTERFACE_L4
851          {
852            L4_MemoryDesc_t *mem_desc_l4 = L4_MemoryDesc (kip, num);
853    
854            check ("[L4]", "L4_MemoryDesc",
855                   ((void *) mem_desc_l4 == (void *) mem_desc),
856                   "L4_MemoryDesc (kip, %i) == %p != %p",
857                   num, mem_desc_l4, mem_desc);
858    
859            check ("[L4]", "L4_MemoryDescLow",
860                   (L4_MemoryDescLow (mem_desc_l4)
861                    == mem_desc_ok[num].low),
862                   "L4_MemoryDescLow (kip, %i) == 0x%x != 0x%x",
863                   num, L4_MemoryDescLow (mem_desc_l4),
864                   mem_desc_ok[num].low);
865            check ("[L4]", "L4_MemoryDescHigh",
866                   (L4_MemoryDescHigh (mem_desc_l4)
867                    == mem_desc_ok[num].high),
868                   "L4_MemoryDescHigh (kip, %i) == 0x%x != 0x%x",
869                   num, L4_MemoryDescHigh (mem_desc_l4),
870                   mem_desc_ok[num].high);
871            check ("[L4]", "L4_MemoryDescVirtual",
872                   (L4_IsMemoryDescVirtual (mem_desc_l4)
873                    == mem_desc_ok[num].virtual),
874                   "L4_IsMemoryDescVirtual (kip, %i) == %i != %i",
875                   num, L4_IsMemoryDescVirtual (mem_desc_l4),
876                   mem_desc_ok[num].virtual);
877            check ("[L4]", "L4_MemoryDescType",
878                   (L4_MemoryDescType (mem_desc_l4)
879                    == mem_desc_ok[num].type),
880                   "L4_MemoryDescType (kip, %i) == %i != %i",
881                   num, L4_MemoryDescType (mem_desc_l4),
882                   mem_desc_ok[num].type);
883          }
884    #endif
885        }
886    }
887    
888    
889  /* Test the page info field.  */  /* Test the page info field.  */
890  void  void
891  test_page_info (_L4_kip_t kip)  test_page_info (_L4_kip_t kip)
892  {  {
893    word_t page_size_mask_ok = 0x00401000;    word_t page_size_mask_ok = 0x00401000;
894      /* LSB of page_size_mask_ok.  */
895      word_t min_page_size_log2_ok = 12;
896    word_t page_rights_ok = 0x6;    word_t page_rights_ok = 0x6;
897    
898  #ifdef _L4_INTERFACE_INTERN  #ifdef _L4_INTERFACE_INTERN
899      check_nr ("[intern]", "_L4_MIN_PAGE_SIZE_LOG2",
900                _L4_MIN_PAGE_SIZE_LOG2, 10);
901      check_nr ("[intern]", "_L4_MIN_PAGE_SIZE",
902                _L4_MIN_PAGE_SIZE, 1 << 10);
903    
904    check_nr ("[intern]", "_L4_page_size_mask",    check_nr ("[intern]", "_L4_page_size_mask",
905              _L4_page_size_mask (kip), page_size_mask_ok);              _L4_page_size_mask (kip), page_size_mask_ok);
906    check_nr ("[intern]", "_L4_page_rights",    check_nr ("[intern]", "_L4_page_rights",
# Line 710  test_page_info (_L4_kip_t kip) Line 908  test_page_info (_L4_kip_t kip)
908  #endif  #endif
909    
910  #ifdef _L4_INTERFACE_GNU  #ifdef _L4_INTERFACE_GNU
911      check_nr ("[GNU]", "L4_MIN_PAGE_SIZE_LOG2",
912                L4_MIN_PAGE_SIZE_LOG2, _L4_MIN_PAGE_SIZE_LOG2);
913      check_nr ("[GNU]", "L4_MIN_PAGE_SIZE",
914                L4_MIN_PAGE_SIZE, _L4_MIN_PAGE_SIZE);
915      check_nr ("[GNU]", "l4_min_page_size_log2",
916                l4_min_page_size_log2 (), min_page_size_log2_ok);
917      check_nr ("[GNU]", "l4_min_page_size",
918                l4_min_page_size (), 1 << min_page_size_log2_ok);
919    
920    check_nr ("[GNU]", "l4_page_size_mask_from",    check_nr ("[GNU]", "l4_page_size_mask_from",
921           l4_page_size_mask_from (kip), page_size_mask_ok);           l4_page_size_mask_from (kip), page_size_mask_ok);
922    check_nr ("[GNU]", "l4_page_size_mask",    check_nr ("[GNU]", "l4_page_size_mask",
# Line 717  test_page_info (_L4_kip_t kip) Line 924  test_page_info (_L4_kip_t kip)
924    check_nr ("[GNU]", "l4_page_rights_from",    check_nr ("[GNU]", "l4_page_rights_from",
925              l4_page_rights_from (kip), page_rights_ok);              l4_page_rights_from (kip), page_rights_ok);
926    check_nr ("[GNU]", "l4_page_rights", l4_page_rights (), page_rights_ok);    check_nr ("[GNU]", "l4_page_rights", l4_page_rights (), page_rights_ok);
927    
928      {
929        l4_word_t addr[] = { 0x00000000, 0x00000001, 0x00000010, 0x00000011,
930                             0x00000100, 0x00001000, 0x00010000, 0x00100000,
931                             0x01000000, 0x10000000, 0x2badb002, 0xffffffff };
932        /* The min page size mask.  */
933        l4_word_t psm = l4_min_page_size () - 1;
934        int i;
935    
936        for (i = 0; i < sizeof (addr) / sizeof (addr[0]); i++)
937          {
938            char *msg;
939            l4_word_t addr_trunc = addr[i] & ~psm;
940            l4_word_t addr_round = (addr[i] + psm) & ~psm;
941            l4_word_t addr_atop = addr[i] >> l4_min_page_size_log2 ();
942    
943            asprintf (&msg, "l4_page_trunc (0x%x)", addr[i]);
944            check_nr ("[GNU]", msg,
945                      l4_page_trunc (addr[i]), addr_trunc);
946    
947            asprintf (&msg, "l4_page_round (0x%x)", addr[i]);
948            check_nr ("[GNU]", msg,
949                      l4_page_round (addr[i]), addr_round);
950            
951            asprintf (&msg, "l4_atop (0x%x)", addr[i]);
952            check_nr ("[GNU]", msg,
953                      l4_atop (addr[i]), addr_atop);
954    
955            asprintf (&msg, "l4_ptoa (0x%x)", addr_atop);
956            check_nr ("[GNU]", msg,
957                      l4_ptoa (addr_atop), addr_trunc);
958          }
959      }
960  #endif  #endif
961    
962  #ifdef _L4_INTERFACE_L4  #ifdef _L4_INTERFACE_L4
# Line 965  test (void) Line 1205  test (void)
1205    test_kernel_feature (kip);    test_kernel_feature (kip);
1206    
1207    test_processor_info (kip);    test_processor_info (kip);
1208      test_memory_info (kip);
1209    test_page_info (kip);    test_page_info (kip);
1210    test_thread_info (kip);    test_thread_info (kip);
1211    test_clock_info (kip);    test_clock_info (kip);

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26