]> Zhao Yanbai Git Server - minix.git/commitdiff
. no more HZ, but use sys_hz() to get that value
authorBen Gras <ben@minix3.org>
Thu, 11 Dec 2008 14:42:23 +0000 (14:42 +0000)
committerBen Gras <ben@minix3.org>
Thu, 11 Dec 2008 14:42:23 +0000 (14:42 +0000)
 . memory maps in physical memory (for /dev/mem) with new vm interface
 . pci complete_bars() seems to be buggy behaviour sometimes
 . startup script opens its own stdout, stderr and stdin so init doesn't
   have to do it

13 files changed:
drivers/at_wini/at_wini.c
drivers/dp8390/3c503.c
drivers/dp8390/dp8390.c
drivers/dp8390/ne2000.c
drivers/floppy/floppy.c
drivers/fxp/fxp.c
drivers/libdriver/driver.c
drivers/libdriver/driver.h
drivers/memory/memory.c
drivers/memory/ramdisk/rc
drivers/orinoco/orinoco.c
drivers/pci/pci.c
drivers/printer/printer.c

index d69e661f82ee1a42b4ca7c2f222f37615b182ac8..2802cc4764ef6927c9bbe0b288d63a9294280df1 100644 (file)
@@ -221,7 +221,7 @@ struct command {
 
 /* Some controllers don't interrupt, the clock will wake us up. */
 #define WAKEUP_SECS    32                      /* drive may be out for 31 seconds max */
-#define WAKEUP_TICKS   (WAKEUP_SECS*HZ)
+#define WAKEUP_TICKS   (WAKEUP_SECS*system_hz)
 
 /* Miscellaneous. */
 #define MAX_DRIVES         8
@@ -254,8 +254,7 @@ struct command {
 /* Timeouts and max retries. */
 int timeout_ticks = DEF_TIMEOUT_TICKS, max_errors = MAX_ERRORS;
 long w_standard_timeouts = 0, w_pci_debug = 0, w_instance = 0,
-       disable_dma = 0, atapi_debug = 0, w_identify_wakeup_ticks = WAKEUP_TICKS,
-       wakeup_ticks = WAKEUP_TICKS;
+       disable_dma = 0, atapi_debug = 0, w_identify_wakeup_ticks, wakeup_ticks;
 
 int w_testing = 0, w_silent = 0;
 
@@ -432,8 +431,13 @@ PUBLIC int main(int argc, char *argv[])
 /* Install signal handlers. Ask PM to transform signal into message. */
   struct sigaction sa;
 
+  system_hz = sys_hz();
+
   init_buffer();
 
+  w_identify_wakeup_ticks = WAKEUP_TICKS;
+  wakeup_ticks = WAKEUP_TICKS;
+
   sa.sa_handler = SIG_MESS;
   sigemptyset(&sa.sa_mask);
   sa.sa_flags = 0;
@@ -470,7 +474,7 @@ PRIVATE void init_params()
   env_parse("ata_id_timeout", "d", WAKEUP_SECS, &wakeup_secs, 1, 60);
   env_parse("atapi_debug", "d", 0, &atapi_debug, 0, 1);
 
-  w_identify_wakeup_ticks = wakeup_secs * HZ;
+  w_identify_wakeup_ticks = wakeup_secs * system_hz;
 
   if(atapi_debug)
        panic("at_wini", "atapi_debug", NO_NUM);
@@ -1144,8 +1148,8 @@ PRIVATE int w_io_test(void)
        save_wakeup = wakeup_ticks;
 
        if (!w_standard_timeouts) {
-               timeout_ticks = HZ * 4;
-               wakeup_ticks = HZ * 6;
+               timeout_ticks = system_hz * 4;
+               wakeup_ticks = system_hz * 6;
                max_errors = 3;
        }
 
index 2ae7cc602390ba40ebc61660fadd288392468618..df5aba5d7827f1052709c6ca12fd71b83757bb51 100644 (file)
@@ -22,7 +22,9 @@
 
 #if ENABLE_3C503
 
-#define MILLIS_TO_TICKS(m)  (((m)*HZ/1000)+1)
+extern u32_t system_hz;
+
+#define MILLIS_TO_TICKS(m)  (((m)*system_hz/1000)+1)
 
 _PROTOTYPE(static void el2_init, (dpeth_t *dep));
 _PROTOTYPE(static void el2_stop, (dpeth_t *dep));
index 479e421e9fd85791fd347594676d95bb5bb139c9..365a16a535641bf544f79d4217081b49fd8f23e4 100644 (file)
@@ -72,6 +72,8 @@ static dpeth_t de_table[DE_PORT_NR];
 static u16_t eth_ign_proto;
 static char *progname;
 
+u32_t system_hz;
+
 /* Configuration */
 typedef struct dp_conf
 {
@@ -210,6 +212,8 @@ int main(int argc, char *argv[])
        dpeth_t *dep;
        long v;
 
+       system_hz = sys_hz();
+
        if (argc < 1)
        {
                panic("DP8390",
index 4f8d698ffc595486c4985d5833f103f3dd6ee9bb..8d7a84da1f179954363f975a91cd278757001be5 100644 (file)
@@ -23,7 +23,9 @@ Created:      March 15, 1994 by Philip Homburg <philip@f-mnx.phicoh.com>
 
 #define N 100
 
-#define MILLIS_TO_TICKS(m)  (((m)*HZ/1000)+1)
+extern u32_t system_hz;
+
+#define MILLIS_TO_TICKS(m)  (((m)*system_hz/1000)+1)
 
 _PROTOTYPE( typedef int (*testf_t), (dpeth_t *dep, int pos, u8_t *pat) );
 
index b1ed29c26f3ac80a0c7a14208734ccf8cadc15fb..3d2b80a53b6fc8d683edc92074d1d905952334e1 100644 (file)
 #define MAX_SECTORS      18    /* largest # sectors per track */
 #define DTL             0xFF   /* determines data length (sector size) */
 #define SPEC2           0x02   /* second parameter to SPECIFY */
-#define MOTOR_OFF      (3*HZ)  /* how long to wait before stopping motor */
-#define WAKEUP        (2*HZ)   /* timeout on I/O, FDC won't quit. */
+#define MOTOR_OFF (3*system_hz)        /* how long to wait before stopping motor */
+#define WAKEUP   (2*system_hz) /* timeout on I/O, FDC won't quit. */
 
 /* Error codes */
 #define ERR_SEEK         (-1)  /* bad seek */
@@ -164,17 +164,17 @@ PRIVATE struct density {
        u8_t    steps;          /* steps per cylinder (2 = double step) */
        u8_t    test;           /* sector to try for density test */
        u8_t    rate;           /* data rate (2=250, 1=300, 0=500 kbps) */
-       clock_t start;  /* motor start (clock ticks) */
+       clock_t start_ms;       /* motor start (milliseconds) */
        u8_t    gap;            /* gap size */
        u8_t    spec1;          /* first specify byte (SRT/HUT) */
 } fdensity[NT] = {
-       {  9, 40, 1, 4*9, 2, 4*HZ/8, 0x2A, 0xDF },      /*  360K / 360K  */
-       { 15, 80, 1,  14, 0, 4*HZ/8, 0x1B, 0xDF },      /*  1.2M / 1.2M  */
-       {  9, 40, 2, 2*9, 2, 4*HZ/8, 0x2A, 0xDF },      /*  360K / 720K  */
-       {  9, 80, 1, 4*9, 2, 6*HZ/8, 0x2A, 0xDF },      /*  720K / 720K  */
-       {  9, 40, 2, 2*9, 1, 4*HZ/8, 0x23, 0xDF },      /*  360K / 1.2M  */
-       {  9, 80, 1, 4*9, 1, 4*HZ/8, 0x23, 0xDF },      /*  720K / 1.2M  */
-       { 18, 80, 1,  17, 0, 6*HZ/8, 0x1B, 0xCF },      /* 1.44M / 1.44M */
+       {  9, 40, 1, 4*9, 2, 500, 0x2A, 0xDF }, /*  360K / 360K  */
+       { 15, 80, 1,  14, 0, 500, 0x1B, 0xDF }, /*  1.2M / 1.2M  */
+       {  9, 40, 2, 2*9, 2, 500, 0x2A, 0xDF }, /*  360K / 720K  */
+       {  9, 80, 1, 4*9, 2, 750, 0x2A, 0xDF }, /*  720K / 720K  */
+       {  9, 40, 2, 2*9, 1, 500, 0x23, 0xDF }, /*  360K / 1.2M  */
+       {  9, 80, 1, 4*9, 1, 500, 0x23, 0xDF }, /*  720K / 1.2M  */
+       { 18, 80, 1,  17, 0, 750, 0x1B, 0xCF }, /* 1.44M / 1.44M */
 };
 
 /* The following table is used with the test_sector array to recognize a
@@ -757,7 +757,7 @@ PRIVATE void start_motor()
   /* Set an alarm timer to force a timeout if the hardware does not interrupt
    * in time. Expect HARD_INT message, but check for SYN_ALARM timeout.
    */ 
-  f_set_timer(&f_tmr_timeout, f_dp->start, f_timeout);
+  f_set_timer(&f_tmr_timeout, f_dp->start_ms * system_hz / 1000, f_timeout);
   f_busy = BSY_IO;
   do {
        receive(ANY, &mess); 
@@ -841,7 +841,7 @@ PRIVATE int seek()
        /* Set a synchronous alarm to force a timeout if the hardware does
         * not interrupt. Expect HARD_INT, but check for SYN_ALARM timeout.
         */ 
-       f_set_timer(&f_tmr_timeout, HZ/30, f_timeout);
+       f_set_timer(&f_tmr_timeout, system_hz/30, f_timeout);
        f_busy = BSY_IO;
        do {
                receive(ANY, &mess); 
index 1a146f1398ffea284ac0be98c9bc7bf00c99a45b..20a7779bfd2ac334c12736fa0889112462453a65 100644 (file)
@@ -220,6 +220,8 @@ static char *progname;
 
 extern int errno;
 
+u32_t system_hz;
+
 #define fxp_inb(port, offset)  (do_inb((port) + (offset)))
 #define fxp_inw(port, offset)  (do_inw((port) + (offset)))
 #define fxp_inl(port, offset)  (do_inl((port) + (offset)))
@@ -284,6 +286,8 @@ int main(int argc, char *argv[])
        long v;
        vir_bytes ft = sizeof(*fxp_table)*FXP_PORT_NR;
 
+       system_hz = sys_hz();
+
        if (argc < 1)
                panic("FXP", "A head which at this time has no name", NO_NUM);
        (progname=strrchr(argv[0],'/')) ? progname++ : (progname=argv[0]);
@@ -381,7 +385,7 @@ message *mp;
 
                tmra_inittimer(&fxp_watchdog);
                tmr_arg(&fxp_watchdog)->ta_int= 0;
-               fxp_set_timer(&fxp_watchdog, HZ, fxp_watchdog_f);
+               fxp_set_timer(&fxp_watchdog, system_hz, fxp_watchdog_f);
        }
 
        port = mp->DL_PORT;
@@ -2282,7 +2286,7 @@ timer_t *tp;
        fxp_t *fp;
 
        tmr_arg(&fxp_watchdog)->ta_int= 0;
-       fxp_set_timer(&fxp_watchdog, HZ, fxp_watchdog_f);
+       fxp_set_timer(&fxp_watchdog, system_hz, fxp_watchdog_f);
 
        for (i= 0, fp = &fxp_table[0]; i<FXP_PORT_NR; i++, fp++)
        {
index 733ffa391504aaf5c6911c98b90a9e4698e51eb4..4a661ad1f5e9bb046d817708410ed73f48505695 100644 (file)
@@ -67,6 +67,8 @@ struct driver *dp;    /* Device dependent entry points. */
   int r, proc_nr;
   message mess;
 
+  system_hz = sys_hz();
+
   /* Init MQ library. */
   mq_init();
 
index 03dd9324bdc267e76c21d3dcd00fa2f2e9ee3fc3..655f00cd6298200dfec541107fe4e78e21ba32c3 100644 (file)
@@ -84,3 +84,5 @@ extern u8_t *tmp_buf;                 /* the DMA buffer */
 extern u8_t tmp_buf[];                 /* the DMA buffer */
 #endif
 extern phys_bytes tmp_phys;            /* phys address of DMA buffer */
+
+u32_t system_hz;
index 520bb93158abb79c0cd82c1cc4da2f9743d3f60d..812ab503f1c9537223a8c398a362024427fc5bd3 100644 (file)
@@ -19,6 +19,8 @@
 #include <sys/ioc_memory.h>
 #include <env.h>
 #include <minix/ds.h>
+#include <minix/vm.h>
+#include <sys/mman.h>
 #include "../../kernel/const.h"
 #include "../../kernel/config.h"
 #include "../../kernel/type.h"
@@ -69,11 +71,13 @@ PRIVATE struct driver m_dtab = {
   NULL
 };
 
+#if 0
 /* One page of temporary mapping area - enough to be able to page-align
  * one page.
  */
 static char pagedata_buf[2*I386_PAGE_SIZE];
 vir_bytes pagedata_aligned;
+#endif
 
 /* Buffer for the /dev/zero null byte feed. */
 #define ZERO_BUF_SIZE                  1024
@@ -201,6 +205,7 @@ int safe;                   /* safe copies */
            u32_t pagestart, page_off;
            static u32_t pagestart_mapped;
            static int any_mapped = 0;
+           static char *vaddr;
            int r;
            u32_t subcount;
 
@@ -217,13 +222,18 @@ int safe;                 /* safe copies */
             * Don't have to map same page over and over.
             */
            if(!any_mapped || pagestart_mapped != pagestart) {
-#if 0
-             if((r=sys_vm_map(SELF, 1, pagedata_aligned,
-               I386_PAGE_SIZE, pagestart)) != OK) {
-#else
-               if(1) {
-#endif
-               printf("memory: sys_vm_map failed: %d\n", r);
+            if(any_mapped) {
+               if(vm_unmap_phys(SELF, vaddr, I386_PAGE_SIZE) != OK)
+                       panic("MEM","vm_unmap_phys failed",NO_NUM);
+               any_mapped = 0;
+            }
+            vaddr = vm_map_phys(SELF, (void *) pagestart, I386_PAGE_SIZE);
+            if(vaddr == MAP_FAILED) 
+               r = ENOMEM;
+            else
+               r = OK;
+            if(r != OK) {
+               printf("memory: vm_map_phys failed\n");
                return r;
             }
             any_mapped = 1;
@@ -237,10 +247,10 @@ int safe;                 /* safe copies */
 
            if (opcode == DEV_GATHER_S) {                       /* copy data */
                   s=sys_safecopyto(proc_nr, user_vir,
-                      vir_offset, pagedata_aligned+page_off, subcount, D);
+                      vir_offset, (vir_bytes) vaddr+page_off, subcount, D);
            } else {
                   s=sys_safecopyfrom(proc_nr, user_vir,
-                      vir_offset, pagedata_aligned+page_off, subcount, D);
+                      vir_offset, (vir_bytes) vaddr+page_off, subcount, D);
            }
            if(s != OK)
                return s;
@@ -373,9 +383,11 @@ PRIVATE void m_init()
        dev_zero[i] = '\0';
   }
 
+#if 0
   /* Page-align page pointer. */
   pagedata_aligned = (u32_t) pagedata_buf + I386_PAGE_SIZE;
   pagedata_aligned -= pagedata_aligned % I386_PAGE_SIZE;
+#endif
 
   /* Set up memory range for /dev/mem. */
   m_geom[MEM_DEV].dv_size = cvul64(0xffffffff);
index 3aae388f8640a32001ec547ff37b6992e58f02ec..6446da30f2d5f3a7bd78bf89f0d5938e39fd4b2c 100644 (file)
@@ -1,5 +1,10 @@
 #!/bin/sh
 set -e
+
+exec >/dev/log
+exec 2>/dev/log
+exec </dev/null
+
 /bin/service up /bin/pci -config /etc/drivers.conf
 /bin/service -c up /bin/floppy -config /etc/drivers.conf -dev /dev/fd0
 if [ X`/bin/sysenv bios_wini` = Xyes ]
index 2ec3aa71cfb2edd6ba6bb6eb230472977cf80392..338adecc6e1579a3f4fa5cb8f04cdfafa20277cb 100755 (executable)
@@ -231,6 +231,8 @@ _PROTOTYPE (static void or_dump, (message *m));
 PRIVATE message m;
 PRIVATE int int_event_check;           /* set to TRUE if events arrived */
 
+u32_t system_hz;
+
 static char *progname;
 extern int errno;
 
@@ -246,6 +248,8 @@ int main(int argc, char *argv[]) {
        long v = 0;
        t_or *orp;
 
+       system_hz = sys_hz();
+
        (progname=strrchr(argv[0],'/')) ? progname++ : (progname=argv[0]);
 
        env_setargs(argc, argv);
@@ -440,7 +444,7 @@ static void or_reset() {
        if (OK != (r = getuptime(&now)))
                panic(__FILE__, "orinoco: getuptime() failed:", r);
 
-       if(now - last_reset < HZ * 10) {
+       if(now - last_reset < system_hz * 10) {
                printf("Resetting card too often. Going to reset driver\n");
                exit(1);
        }
@@ -521,7 +525,7 @@ static void or_init (message * mp) {
        
                tmra_inittimer(&or_watchdog);
                /* Use a synchronous alarm instead of a watchdog timer. */
-               sys_setalarm(HZ, 0);
+               sys_setalarm(system_hz, 0);
        }       
 
        port = mp->DL_PORT;
@@ -1287,7 +1291,7 @@ static void or_watchdog_f(timer_t *tp) {
        t_or *orp;
        
        /* Use a synchronous alarm instead of a watchdog timer. */
-       sys_setalarm(HZ, 0);
+       sys_setalarm(system_hz, 0);
 
        for (i= 0, orp = &or_table[0]; i<OR_PORT_NR; i++, orp++) {
                if (orp->or_mode != OR_M_ENABLED)
index c319fcda0ac45da058f5d69b257674c13ba6ffa3..0f577635ac20918776ba9eaa6c91a8b23270d218 100644 (file)
@@ -1269,6 +1269,7 @@ PRIVATE void complete_bridges()
  *===========================================================================*/
 PRIVATE void complete_bars()
 {
+#if 0
        int i, j, r, bar_nr, reg;
        u32_t memgap_low, memgap_high, iogap_low, iogap_high, io_high,
                base, size, v32, diff1, diff2;
@@ -1485,6 +1486,7 @@ PRIVATE void complete_bars()
                        printf("should allocate resources for device %d\n", i);
                }
        }
+#endif
 }
 
 /*===========================================================================*
index 037268b41c5dd040acea526a7ba17c8f651a9037..d815f0dd71d84d5231794f5bb158b93b672646eb 100644 (file)
@@ -217,7 +217,7 @@ int safe;                   /* use virtual addresses or grant id's? */
                do_printer_output();
                return;
             }
-            tickdelay(HZ/2);           /* wait before retry */
+            micro_delay(500000);               /* wait before retry */
         }
         /* If we reach this point, the printer was not online in time. */
         done_status = status;
@@ -342,7 +342,7 @@ PRIVATE void do_initialize()
        printf("printer: sys_outb of %x failed\n", port_base+2);
        panic(__FILE__, "do_initialize: sys_outb init failed", NO_NUM);
   }
-  tickdelay(HZ/20);            /* easily satisfies Centronics minimum */
+  micro_delay(1000000/20);     /* easily satisfies Centronics minimum */
   if(sys_outb(port_base + 2, PR_SELECT) != OK) {
        printf("printer: sys_outb of %x failed\n", port_base+2);
        panic(__FILE__, "do_initialize: sys_outb select failed", NO_NUM);