Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


added void * argument to timer callback
Jack Lange [Mon, 29 Sep 2008 15:46:45 +0000 (10:46 -0500)]
palacios/include/geekos/timer.h
palacios/src/geekos/socket.c
palacios/src/geekos/timer.c

index 7fb783d..9b08713 100644 (file)
@@ -16,7 +16,7 @@
 
 extern volatile ulong_t g_numTicks;
 
-typedef void (*timerCallback)(int);
+typedef void (*timerCallback)(int, void*);
 
 void Init_Timer(void);
 
@@ -24,15 +24,17 @@ void Micro_Delay(int us);
 
 
 typedef struct {
-    int ticks;                           /* timer code decrements this */
-    int id;                              /* unqiue id for this timer even */
-    timerCallback callBack;              /* Queue to wakeup on timer expire */
-    int origTicks;
+  int ticks;                           /* timer code decrements this */
+  int id;                              /* unqiue id for this timer even */
+  timerCallback callBack;              /* Queue to wakeup on timer expire */
+  void * cb_arg;                       /* Argument to add to callback */
+  int origTicks;
+
 } timerEvent;
 
-int Start_Timer_Secs(int seconds, timerCallback cb);
-int Start_Timer_MSecs(int msecs, timerCallback cb);
-int Start_Timer(int ticks, timerCallback);
+int Start_Timer_Secs(int seconds, timerCallback cb, void * arg);
+int Start_Timer_MSecs(int msecs, timerCallback cb, void * arg);
+int Start_Timer(int ticks, timerCallback, void * arg);
 
 double Get_Remaining_Timer_Secs(int id);
 int Get_Remaining_Timer_MSecs(int id);
index 63b3ce1..661970e 100644 (file)
@@ -28,7 +28,7 @@ void socket_appcall(void);
 
 
 static int Packet_Received(struct NE2K_Packet_Info* info, uchar_t *pkt);
-static void periodic_caller(int timer_id);
+static void periodic_caller(int timer_id, void * arg);
 
 void init_socket_layer() {
    int i = 0;
@@ -52,7 +52,7 @@ void init_socket_layer() {
     Init_Ne2k(&Packet_Received);
 
     iflag = Begin_Int_Atomic();
-    Start_Timer(2, periodic_caller);
+    Start_Timer(2, periodic_caller, NULL);
     End_Int_Atomic(iflag);
 
 }
@@ -108,7 +108,7 @@ struct socket * get_socket_from_fd(int fd) {
 
 
 
-static void periodic_caller(int timer_id) {
+static void periodic_caller(int timer_id, void * arg) {
   int i;
   //handle the periodic calls of uIP
   
index 7f4ab49..663a694 100644 (file)
@@ -192,7 +192,7 @@ static void Timer_Interrupt_Handler(struct Interrupt_State* state)
     if (pendingTimerEvents[i].ticks == 0) {
       if (timerDebug) Print("timer: event %d expired (%d ticks)\n", 
                            pendingTimerEvents[i].id, pendingTimerEvents[i].origTicks);
-      (pendingTimerEvents[i].callBack)(pendingTimerEvents[i].id);
+      (pendingTimerEvents[i].callBack)(pendingTimerEvents[i].id, pendingTimerEvents[i].cb_arg);
       pendingTimerEvents[i].ticks = pendingTimerEvents[i].origTicks;
     } else {
       pendingTimerEvents[i].ticks--;
@@ -338,20 +338,20 @@ void Init_Timer(void)
 }
 
 
-int Start_Timer_Secs(int seconds, timerCallback cb) {
-  return Start_Timer(seconds * HZ, cb);
+int Start_Timer_Secs(int seconds, timerCallback cb, void * arg) {
+  return Start_Timer(seconds * HZ, cb, arg);
 }
 
 
-int Start_Timer_MSecs(int msecs, timerCallback cb) {
+int Start_Timer_MSecs(int msecs, timerCallback cb, void * arg) {
   msecs += 10 - (msecs % 10);
 
-  return Start_Timer(msecs * (HZ / 1000), cb);
+  return Start_Timer(msecs * (HZ / 1000), cb, arg);
 }
 
 
 
-int Start_Timer(int ticks, timerCallback cb)
+int Start_Timer(int ticks, timerCallback cb, void * arg)
 {
     int ret;
 
@@ -363,6 +363,7 @@ int Start_Timer(int ticks, timerCallback cb)
        ret = nextEventID++;
        pendingTimerEvents[timeEventCount].id = ret;
        pendingTimerEvents[timeEventCount].callBack = cb;
+       pendingTimerEvents[timeEventCount].cb_arg = arg;
        pendingTimerEvents[timeEventCount].ticks = ticks;
        pendingTimerEvents[timeEventCount].origTicks = ticks;
        timeEventCount++;